diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..4b1cf55 --- /dev/null +++ b/Makefile @@ -0,0 +1,135 @@ +TARGET = toolbox +TARGET_RAM = $(TARGET)_ram +TARGET_ROM = $(TARGET)_rom + +UNIT = F256K + +SRCS_BASE = boot.c \ + log.c \ + memory.c \ + proc.c \ + ring_buffer.c \ + simpleio.c \ + sys_general.c \ + timers.c \ + toolbox.c \ + utilities.c \ + dev/block.c \ + dev/channel.c \ + dev/console.c \ + dev/fsys.c \ + dev/sprites.c \ + dev/tiles.c \ + dev/txt_screen.c \ + dev/rtc.c \ + dev/uart.c \ + snd/codec_c256.c \ + snd/psg.c \ + snd/sid.c \ + fatfs/ff.c \ + fatfs/ffsystem.c \ + fatfs/ffunicode.c + +SRCS_BASE_F256 = cartridge.c \ + dev/txt_f256.c \ + dev/kbd_f256.c \ + dev/indicators_c256.c \ + dev/interrupts_f256.c \ + dev/sdc_f256.c \ + dev/iec.c \ + fatfs/toolbox_bdev.c \ + C256/extras.s \ + C256/f256-cstartup.s \ + C256/iecll.s \ + C256/interrupts.s \ + C256/io_stubs.c \ + C256/jumptable.s + +ifeq ($(UNIT),F256) + TOOLCHAIN = 65816 + SRCS_FOR_UNIT = $(SRCS_BASE_F256) dev/kbd_f256jr.c + CFLAGS_FOR_UNIT = -DMODEL=2 -DCPU=255 --target=f256 + LDFLAGS_FOR_UNIT_ROM = src/C256/f256-flash.scm --cstartup=f256 + LDFLAGS_FOR_UNIT_RAM = src/C256/f256-ld_lc.scm --cstartup=f256 +else ifeq ($(UNIT),F256JR2) + TOOLCHAIN = 65816 + SRCS_FOR_UNIT = $(SRCS_BASE_F256) dev/kbd_f256jr.c + CFLAGS_FOR_UNIT = -DMODEL=35 -DCPU=255 --target=f256 + LDFLAGS_FOR_UNIT_ROM = src/C256/f256k2-flash.scm --cstartup=f256 + LDFLAGS_FOR_UNIT_RAM = src/C256/f256-ld_lc.scm --cstartup=f256 +else ifeq ($(UNIT),F256K) + TOOLCHAIN = 65816 + SRCS_FOR_UNIT = $(SRCS_BASE_F256) dev/kbd_f256k.c + CFLAGS_FOR_UNIT = -DMODEL=18 -DCPU=255 --target=f256 + LDFLAGS_FOR_UNIT_ROM = src/C256/f256-flash.scm --cstartup=f256 + LDFLAGS_FOR_UNIT_RAM = src/C256/f256-ld_lc.scm --cstartup=f256 +else ifeq ($(UNIT),F256K2) + TOOLCHAIN = 65816 + SRCS_FOR_UNIT = $(SRCS_BASE_F256) dev/kbd_f256k.c + CFLAGS_FOR_UNIT = -DMODEL=17 -DCPU=255 --target=f256 + LDFLAGS_FOR_UNIT_ROM = src/C256/f256k2-flash.scm --cstartup=f256 + LDFLAGS_FOR_UNIT_RAM = src/C256/f256-ld_lc.scm --cstartup=f256 +else + $(error "Unrecognized UNIT: $(UNIT)") +endif + +ifeq ($(TOOLCHAIN),65816) + ifeq ($(strip $(CALYPSI_65816_ROOT)),) + $(error "Please set CALYPSI_65816_ROOT in your environment!") + endif + + CC = cc65816 + AS = as65816 + LD = ln65816 + TOOLCHAIN_ROOT = $(CALYPSI_65816_ROOT) +else + $(error "Unrecognized TOOLCHAIN: $(TOOLCHAIN)") +endif + +SRC_DIR = src +SRC_FILES = $(addprefix $(SRC_DIR)/, $(SRCS_BASE) $(SRCS_FOR_UNIT)) +INCLUDE_DIRS = $(SRC_DIR) $(SRC_DIR)/include $(TOOLCHAIN_ROOT)/include +INCLUDES = $(foreach dir,$(INCLUDE_DIRS),-I$(dir)) + +OBJ_DIR = obj +OBJ_FILES = $(addprefix $(OBJ_DIR)/, $(addsuffix .o, $(SRC_FILES))) + +DEPS_DIR = $(OBJ_DIR) +DEPENDS = $(OBJ_FILES:.o=.d) + +CFLAGS = --code-model=large --data-model=large --list-file=$@.lst $(INCLUDES) $(CFLAGS_FOR_UNIT) +AFLAGS = --code-model=large --data-model=large $(INCLUDES) + +LDFLAGS_FOR_ROM = --rom-code $(LDFLAGS_FOR_UNIT_ROM) +LDFLAGS_FOR_RAM = $(LDFLAGS_FOR_UNIT_RAM) + +.PHONY: clean + +all: rom ram + +rom: $(TARGET_ROM).s37 + +ram: $(TARGET_RAM).s37 + +clean: + rm -f *.s37 + rm -f *.lst + rm -rf $(OBJ_DIR) + +$(TARGET_ROM).s37: $(OBJ_FILES) + $(LD) -o $@ $^ $(LDFLAGS_FOR_ROM) --output-format=s37 --list-file=$@.lst + +$(TARGET_RAM).s37: $(OBJ_FILES) + $(LD) -o $@ $^ $(LDFLAGS_FOR_RAM) --output-format=s37 --list-file=$@.lst + +$(OBJ_DIR)/%.c.o: %.c + @mkdir -p $(dir $@) + $(CC) -MMD -MP -MF$(DEPS_DIR)/$*.d $(CFLAGS) -o $@ $< + +$(OBJ_DIR)/%.s.o: %.s + @mkdir -p $(dir $@) + $(AS) $(AFLAGS) -o $@ $< + +-include $(DEPENDS) + +