aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile61
-rw-r--r--asm/isr.asm16
-rw-r--r--boot/Makefile45
-rw-r--r--boot/cmd/Makefile20
-rw-r--r--boot/devmode/Makefile22
-rw-r--r--boot/devmode/bootloader.c2
-rw-r--r--include.mk48
-rw-r--r--payload.mk4
-rw-r--r--scripts/config.mk21
-rw-r--r--scripts/rules.mk26
10 files changed, 139 insertions, 126 deletions
diff --git a/Makefile b/Makefile
index 0040ed2..0a1a66f 100644
--- a/Makefile
+++ b/Makefile
@@ -1,34 +1,43 @@
-export PROJECT_ROOT=$(abspath .)
+include scripts/config.mk
+
+PROJECT_ROOT = .
+BUILD = build
+
+TARGET = $(BUILD)/rom.hex
+BOOTLOADER = $(BUILD)/boot/bootloader.hex
+FIRMWARE = $(BUILD)/firmware.hex
+
+SRC =\
+ asm/crt0.asm\
+ asm/delay.asm\
+ asm/isr.asm\
+ src/font.c\
+ src/i2c.c\
+ src/input.c\
+ src/main.c\
+ src/menu.c\
+ src/tft.c\
+ src/tty.c
+
+OBJ = $(patsubst %,$(BUILD)/%.rel,$(basename $(SRC)))
+DEPS += $(patsubst %.rel,%.d,$(OBJ))
-BUILD=build
-
-TARGET=$(BUILD)/rom.hex
-BOOTLOADER=$(BUILD)/boot/bootloader.hex
-FIRMWARE=$(BUILD)/firmware.hex
-
-CODE_LOC=0x8100
-DATA_LOC=0xC000
-STACK_LOC=0x0000
-GSINIT_LOC=0x8080
-
-ROM_CHIP=AT28C256
+all : $(TARGET)
-DIRS=$(addprefix $(BUILD)/,asm src)
+include boot/Makefile
+include scripts/rules.mk
-ASM=$(wildcard asm/*.asm)
-SRC=$(wildcard src/*.c)
+$(BUILD)/firmware.ihx : EXTRA_LDFLAGS=$(SYSTEM_LDFLAGS)
+$(BUILD)/firmware.ihx : $(OBJ)
-all : $(TARGET)
+$(OBJ) : | $(BUILD) $(BUILD)/asm $(BUILD)/src
+$(BUILD) $(BUILD)/asm $(BUILD)/src:
+ @mkdir -p $@
$(TARGET) : $(BOOTLOADER) $(FIRMWARE)
- cat $^ > $@
- cp $(BOOTLOADER) /tmp/rom.hex
- dd if=$(FIRMWARE) of=/tmp/rom.hex obs=4096 seek=3 conv=notrunc 2>/dev/null
- mv /tmp/rom.hex $@
-
-.PHONY : $(BOOTLOADER)
-$(BOOTLOADER) :
- make -C boot
+ @cp $(BOOTLOADER) /tmp/rom.hex
+ @dd if=$(FIRMWARE) of=/tmp/rom.hex obs=4096 seek=3 conv=notrunc 2>/dev/null
+ @mv /tmp/rom.hex $@
.PHONY : flash
flash :
@@ -38,4 +47,4 @@ flash :
clean :
@find $(BUILD) -type f -delete
-include include.mk
+-include $(DEPS)
diff --git a/asm/isr.asm b/asm/isr.asm
index 4a160a0..147a3a8 100644
--- a/asm/isr.asm
+++ b/asm/isr.asm
@@ -1,17 +1,17 @@
.module isr
- .area _ISR_TABLE (REL)
+ .area _ISR_TABLE (REL)
_ctc0_isr_ptr::
- .dw #0
+ .dw #0
_ctc1_isr_ptr::
- .dw #0
+ .dw #0
_ctc2_isr_ptr::
- .dw #_timer
+ .dw #_timer
_ctc3_isr_ptr::
- .dw #_blink_cursor
+ .dw #_blink_cursor
_port_a_isr_ptr::
- .dw #0
+ .dw #0
_port_b_isr_ptr::
- .dw #_input_event
+ .dw #_input_event
_rx_isr_ptr::
- .dw #0
+ .dw #0
diff --git a/boot/Makefile b/boot/Makefile
index 88d3c6e..9c3f7c7 100644
--- a/boot/Makefile
+++ b/boot/Makefile
@@ -1,32 +1,31 @@
-BUILD=$(PROJECT_ROOT)/build/boot
+BOOT_BUILD = $(BUILD)/boot
-TARGET=$(BUILD)/bootloader.hex
-IHX=$(BUILD)/boot.ihx
+BOOT_SRC =\
+ boot.asm\
+ main.c
-ASM=$(filter-out crt0.asm, $(wildcard *.asm))
-SRC=$(wildcard *.c)
-PAYLOADS=cmd devmode
+PAYLOADS = cmd devmode
+PAYLOADS_HEX = $(foreach p,$(PAYLOADS),$(BOOT_BUILD)/$(p)/$(p).hex)
-PAYLOADS_HEX=$(foreach payload,$(PAYLOADS),$(BUILD)/$(payload)/$(payload).hex)
+HEX = $(BOOT_BUILD)/boot.hex $(PAYLOADS_HEX)
-HEX=$(BUILD)/boot.hex $(PAYLOADS_HEX)
+BOOT_CRT0 = $(BOOT_BUILD)/crt0.rel
+DEPS += $(patsubst %.rel,%.d,$(BOOT_CRT0))
-CODE_LOC=0x0120
-DATA_LOC=0xC000
-STACK_LOC=0x0000
-GSINIT_LOC=0x0090
+BOOT_OBJ = $(patsubst %,$(BOOT_BUILD)/%.rel,$(basename $(BOOT_SRC)))
+DEPS += $(patsubst %.rel,%.d,$(BOOT_OBJ))
-all : $(TARGET)
+$(BOOT_BUILD)/boot.ihx : EXTRA_LDFLAGS=$(BOOT_LDFLAGS)
+$(BOOT_BUILD)/boot.ihx : $(BOOT_OBJ)
-$(TARGET) : $(HEX)
- cp $(BUILD)/boot.hex /tmp/bootloader.hex
- dd if=$(BUILD)/cmd/cmd.hex of=/tmp/bootloader.hex obs=4096 seek=1 conv=notrunc 2>/dev/null
- dd if=$(BUILD)/cmd/cmd.hex of=/tmp/bootloader.hex obs=4096 seek=2 conv=notrunc 2>/dev/null
- mv /tmp/bootloader.hex $@
+$(BOOT_OBJ) : | $(BOOT_BUILD)
+$(BOOT_BUILD) :
+ @mkdir -p $@
-.PHONY : $(PAYLOADS_HEX)
-$(PAYLOADS_HEX) : $(BUILD)/crt0.rel
- make -C $(notdir $(basename $@)) CRT0=$<
+$(BOOT_BUILD)/bootloader.hex : $(HEX)
+ @cp $(BOOT_BUILD)/boot.hex /tmp/bootloader.hex
+ @dd if=$(BOOT_BUILD)/cmd/cmd.hex of=/tmp/bootloader.hex obs=4096 seek=1 conv=notrunc 2>/dev/null
+ @dd if=$(BOOT_BUILD)/devmode/devmode.hex of=/tmp/bootloader.hex obs=4096 seek=2 conv=notrunc 2>/dev/null
+ @mv /tmp/bootloader.hex $@
-include $(PROJECT_ROOT)/include.mk
--include $(BUILD)/crt0.d
+include $(patsubst %,boot/%/Makefile,$(PAYLOADS))
diff --git a/boot/cmd/Makefile b/boot/cmd/Makefile
index 5c359e4..6e2c692 100644
--- a/boot/cmd/Makefile
+++ b/boot/cmd/Makefile
@@ -1,12 +1,16 @@
-BUILD=$(PROJECT_ROOT)/build/boot/cmd
+BOOT_CMD_BUILD = $(BOOT_BUILD)/cmd
-TARGET=$(BUILD)/cmd.hex
-IHX=$(BUILD)/cmd.ihx
+BOOT_CMD_SRC =\
+ main.c
-ASM=$(wildcard *.asm)
-SRC=$(wildcard *.c)
+BOOT_CMD_OBJ =\
+ $(patsubst %,$(BOOT_CMD_BUILD)/%.rel,$(basename $(BOOT_CMD_SRC)))
+DEPS +=\
+ $(patsubst %.rel,%.d,$(BOOT_CMD_OBJ))
-all : $(TARGET) $(PROJECT_ROOT)/payload.mk
+$(BOOT_CMD_BUILD)/cmd.ihx : EXTRA_LDFLAGS=$(PAYLOAD_LDFLAGS)
+$(BOOT_CMD_BUILD)/cmd.ihx : $(BOOT_CRT0) $(BOOT_CMD_OBJ)
-include $(PROJECT_ROOT)/payload.mk
-include $(PROJECT_ROOT)/include.mk
+$(BOOT_CMD_OBJ) : | $(BOOT_CMD_BUILD)
+$(BOOT_CMD_BUILD) :
+ @mkdir -p $@
diff --git a/boot/devmode/Makefile b/boot/devmode/Makefile
index 24c841a..ea9380d 100644
--- a/boot/devmode/Makefile
+++ b/boot/devmode/Makefile
@@ -1,12 +1,18 @@
-BUILD=$(PROJECT_ROOT)/build/boot/devmode
+BOOT_DEVMODE_BUILD = $(BOOT_BUILD)/devmode
-TARGET=$(BUILD)/devmode.hex
-IHX=$(BUILD)/devmode.ihx
+BOOT_DEVMODE_SRC =\
+ bootloader.c\
+ crc16.c
-ASM=$(wildcard *.asm)
-SRC=$(wildcard *.c)
+BOOT_DEVMODE_OBJ =\
+ $(patsubst %,$(BOOT_DEVMODE_BUILD)/%.rel,\
+ $(basename $(BOOT_DEVMODE_SRC)))
+DEPS +=\
+ $(patsubst %.rel,%.d,$(BOOT_DEVMODE_OBJ))
-all : $(TARGET)
+$(BOOT_DEVMODE_BUILD)/devmode.ihx : EXTRA_LDFLAGS=$(PAYLOAD_LDFLAGS)
+$(BOOT_DEVMODE_BUILD)/devmode.ihx : $(BOOT_CRT0) $(BOOT_DEVMODE_OBJ)
-include $(PROJECT_ROOT)/payload.mk
-include $(PROJECT_ROOT)/include.mk
+$(BOOT_DEVMODE_OBJ) : | $(BOOT_DEVMODE_BUILD)
+$(BOOT_DEVMODE_BUILD) :
+ @mkdir -p $@
diff --git a/boot/devmode/bootloader.c b/boot/devmode/bootloader.c
index dd28c34..8380e88 100644
--- a/boot/devmode/bootloader.c
+++ b/boot/devmode/bootloader.c
@@ -308,7 +308,7 @@ init_sio(void)
// wr1: interrupt on every Rx, no wait function
1, SIO_RX_INT_MD0 | SIO_RX_INT_MD1,
// wr3: enable Rx - 8 bit char
- 3, 0b11000001
+ 3, 0b11000001,
// wr5: enable Tx - 8 bit char
5, 0b01101000
};
diff --git a/include.mk b/include.mk
deleted file mode 100644
index 196f319..0000000
--- a/include.mk
+++ /dev/null
@@ -1,48 +0,0 @@
-AS=sdasz80
-CC=sdcc
-CPP=sdcpp
-
-INCLUDE=$(PROJECT_ROOT)/include
-
-DEPFLAGS=-MP -MMD -MF$(basename $@).d -MT$@
-
-ASFLAGS=-g
-ASCPPFLAGS=$(DEPFLAGS) -P -I$(INCLUDE) -DASSEMBLY
-CFLAGS=-mz80 -I$(INCLUDE) --Werror $(patsubst %,-Wp%,$(DEPFLAGS))
-LDFLAGS=-mz80 --no-std-crt0\
- --code-loc $(CODE_LOC)\
- --data-loc $(DATA_LOC)\
- --stack-loc $(STACK_LOC)\
- -Wl-b_GSINIT=$(GSINIT_LOC)
-
-OBJ=$(patsubst %.asm,$(BUILD)/%.rel,$(ASM))\
- $(patsubst %.c,$(BUILD)/%.rel,$(SRC))
-DEPS=$(patsubst $(BUILD)/%.rel,$(BUILD)/%.d,$(OBJ))
-
-$(OBJ): | $(BUILD) $(DIRS)
-
-$(BUILD) :
- @mkdir -p $(BUILD)
-
-$(DIRS) :
- @mkdir -p $(DIRS)
-
-$(BUILD)/%.rel : %.asm
- @echo ' (CPP)' $<
- @$(CPP) $(ASCPPFLAGS) $< > $(basename $@).asm
- @echo ' (AS)' $<
- @$(AS) $(ASFLAGS) -o $@ $(basename $@).asm
-
-$(BUILD)/%.rel : %.c
- @echo ' (CC)' $<
- @$(CC) $(CFLAGS) -c -o $@ $<
-
-$(BUILD)/%.hex : $(BUILD)/%.ihx
- @hex2bin.py $< $@
-
-.SECONDARY :
-$(BUILD)/%.ihx : $(CRT0) $(OBJ)
- @echo ' (LD)' $(OBJ)
- @$(CC) $(LDFLAGS) -o $@ $+
-
--include $(DEPS)
diff --git a/payload.mk b/payload.mk
deleted file mode 100644
index 8386628..0000000
--- a/payload.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-CODE_LOC=0x8100
-DATA_LOC=0xC000
-STACK_LOC=0x0000
-GSINIT_LOC=0x8090
diff --git a/scripts/config.mk b/scripts/config.mk
new file mode 100644
index 0000000..62cd377
--- /dev/null
+++ b/scripts/config.mk
@@ -0,0 +1,21 @@
+AS = sdasz80
+CC = sdcc
+CPP = sdcpp
+
+# Extra LDFLAGS
+BOOT_LDFLAGS =\
+ --code-loc 0x0120\
+ --data-loc 0xC000\
+ -Wl-b_GSINIT=0x0090
+
+PAYLOAD_LDFLAGS =\
+ --code-loc 0x8100\
+ --data-loc 0xC000\
+ -Wl-b_GSINIT=0x8090
+
+SYSTEM_LDFLAGS =\
+ --code-loc 0x8100\
+ --data-loc 0xC000\
+ -Wl-b_GSINIT=0x8080
+
+ROM_CHIP = AT28C256
diff --git a/scripts/rules.mk b/scripts/rules.mk
new file mode 100644
index 0000000..670cc98
--- /dev/null
+++ b/scripts/rules.mk
@@ -0,0 +1,26 @@
+INCLUDE = $(PROJECT_ROOT)/include
+
+DEPFLAGS = -MP -MMD -MF$(basename $@).d -MT$@
+
+ASFLAGS = -g
+ASCPPFLAGS = $(DEPFLAGS) -P -I$(INCLUDE) -DASSEMBLY
+CFLAGS = -mz80 -I$(INCLUDE) --Werror $(patsubst %,-Wp%,$(DEPFLAGS))
+LDFLAGS = -mz80 --no-std-crt0
+
+$(BUILD)/%.rel : %.asm
+ @echo ' (CPP)' $<
+ @$(CPP) $(ASCPPFLAGS) $< > $(basename $@).asm
+ @echo ' (AS)' $<
+ @$(AS) $(ASFLAGS) -o $@ $(basename $@).asm
+
+$(BUILD)/%.rel : %.c
+ @echo ' (CC)' $<
+ @$(CC) $(CFLAGS) -c -o $@ $<
+
+$(BUILD)/%.hex : $(BUILD)/%.ihx
+ @hex2bin.py $< $@
+
+.SECONDARY :
+$(BUILD)/%.ihx :
+ @echo ' (LD)' $@ ':' $(notdir $+)
+ @$(CC) $(LDFLAGS) $(EXTRA_LDFLAGS) -o $@ $+