diff options
author | Thomas Albers Raviola <thomas@thomaslabs.org> | 2025-02-13 01:48:01 +0100 |
---|---|---|
committer | Thomas Albers Raviola <thomas@thomaslabs.org> | 2025-02-13 01:48:01 +0100 |
commit | 70af8cae86d75b4b02e9f7bd7d3614262bc5eb16 (patch) | |
tree | 831401e72b02956863e31e6663aa9ab3b9b66eac | |
parent | 13c0217bf19a2ddfb24b673455f6d362a46ebf7b (diff) |
-rw-r--r-- | Makefile | 61 | ||||
-rw-r--r-- | asm/isr.asm | 16 | ||||
-rw-r--r-- | boot/Makefile | 45 | ||||
-rw-r--r-- | boot/cmd/Makefile | 20 | ||||
-rw-r--r-- | boot/devmode/Makefile | 22 | ||||
-rw-r--r-- | boot/devmode/bootloader.c | 2 | ||||
-rw-r--r-- | include.mk | 48 | ||||
-rw-r--r-- | payload.mk | 4 | ||||
-rw-r--r-- | scripts/config.mk | 21 | ||||
-rw-r--r-- | scripts/rules.mk | 26 |
10 files changed, 139 insertions, 126 deletions
@@ -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 $@ $+ |