diff options
| -rw-r--r-- | Makefile | 55 | ||||
| -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, 136 insertions, 123 deletions
| @@ -1,34 +1,43 @@ -export PROJECT_ROOT=$(abspath .) +include scripts/config.mk -BUILD=build +PROJECT_ROOT = . +BUILD = build -TARGET=$(BUILD)/rom.hex -BOOTLOADER=$(BUILD)/boot/bootloader.hex -FIRMWARE=$(BUILD)/firmware.hex +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 +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 -ROM_CHIP=AT28C256 +OBJ = $(patsubst %,$(BUILD)/%.rel,$(basename $(SRC))) +DEPS += $(patsubst %.rel,%.d,$(OBJ)) -DIRS=$(addprefix $(BUILD)/,asm src) +all : $(TARGET) -ASM=$(wildcard asm/*.asm) -SRC=$(wildcard src/*.c) +include boot/Makefile +include scripts/rules.mk -all : $(TARGET) +$(BUILD)/firmware.ihx : EXTRA_LDFLAGS=$(SYSTEM_LDFLAGS) +$(BUILD)/firmware.ihx : $(OBJ) -$(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 $@ +$(OBJ) : | $(BUILD) $(BUILD)/asm $(BUILD)/src +$(BUILD) $(BUILD)/asm $(BUILD)/src: +	@mkdir -p $@ -.PHONY : $(BOOTLOADER) -$(BOOTLOADER) : -	make -C boot +$(TARGET) : $(BOOTLOADER) $(FIRMWARE) +	@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 $@ $+ | 
