# CC6803 is installed in its default location.
CC=/opt/cc68/bin/cc68
AS=/opt/cc68/bin/as68
LD=/opt/cc68/bin/ld68

MAME=~/Developpement/Mame/mame/alice # Path to the MAME executable on my computer... Change it to yours while waiting for a better Makefile

CC_FLAGS=-D__TANDY_MC10__ -I /opt/cc68/include/mc10/ -m6803 -c # -S # Uncomment to list
AS_FLAGS=

# Specify Data, BSS will go after DATA if not specified
# Zero page is set at $90, as the first 32 bytes are used by the system
LD_FLAGS=-b -C 4096 -D 13126 -Z 0x90

SYSTEM_LIBS=/opt/cc68/lib/libio6803.a /opt/cc68/lib/lib6803.a /opt/cc68/lib/libmc10.a /opt/cc68/lib/libc.a

# Transformation rules
.s.o:
	$(AS) $(AS_FLAGS) $<

.c.o:
	$(CC) $(CC_FLAGS) $(TAPE_DEFINE) $<

# Source file lists
SRC_C=src/main.c src/page.c src/keyboard.c src/simple_malloc.c \
	  src/display_list.c src/display_functions.c src/ef9345.c \
	  src/page_title.c src/page_game.c src/print.c src/random.c \
	  src/game_core.c src/udc.c src/tiles.c src/sound.c \
	  src/alice.c src/levels.c src/page_start_level.c \
	  src/page_level_won.c src/page_level_failed.c \
	  src/texts.c src/display_contracts.c \
	  generated/exported_colors.c
SRC_S= src/ef9345_routines.s src/sound_routines.s # src/timer_routines.s

# Source file lists for the launcher
SRC_C_LAUNCHER=src/launcher_main.c src/simple_malloc.c \
	  src/bank_switcher.c src/launcher_tiles.c src/udc.c \
	  src/display_list.c src/display_functions.c src/ef9345.c \
	  src/page_pretitle.c \
	  src/keyboard.c \
	  generated/exported_tiles.c
SRC_S_LAUNCHER=src/ef9345_routines.s src/launcher_rom_code.s

# Source file lists for the tape
SRC_C_TAPE=src/main.c src/page.c src/keyboard.c src/simple_malloc.c \
	  	src/display_list.c src/display_functions.c src/ef9345.c \
		src/page_title.c src/page_game.c src/print.c src/random.c \
		src/game_core.c src/udc.c src/tiles.c src/sound.c \
		src/alice.c src/levels.c src/page_start_level.c \
	    src/page_level_won.c src/page_level_failed.c \
	    src/texts.c src/display_contracts.c \
		src/page_pretitle.c src/launcher_tiles.c \
	    generated/exported_colors.c generated/exported_tiles.c
SRC_S_TAPE= src/ef9345_routines.s src/sound_routines.s

# Object files from both .c and .s files
OBJ=$(SRC_C:.c=.o) $(SRC_S:.s=.o)
OBJ_LAUNCHER=$(SRC_C_LAUNCHER:.c=.o) $(SRC_S_LAUNCHER:.s=.o)
OBJ_TAPE=$(SRC_C_TAPE:.c=.o) $(SRC_S_TAPE:.s=.o)

# Create the ROM file
all: main_exe launcher_exe
	python3 tools/adjust_rom.py

# Link everything and create the ROM file (to be run with EXEC 4096)
main_exe: $(OBJ)
	mkdir -p build
	$(LD) $(LD_FLAGS) /opt/cc68/lib/crt0_mc10.o $(OBJ) $(SYSTEM_LIBS) -o build/main.bin -m build/main.map
	tail --bytes=+4097 build/main.bin > build/match.rom

launcher_exe: $(OBJ_LAUNCHER)
	mkdir -p build
	$(LD) $(LD_FLAGS) /opt/cc68/lib/crt0_mc10.o $(OBJ_LAUNCHER) $(SYSTEM_LIBS) -o build/launcher.bin -m build/launcher.map
	tail --bytes=+4097 build/launcher.bin > build/launcher.rom

# Link everything and create the tape file (to be loaded by CLOADM then EXEC 17500)
tape:
	export TAPE_DEFINE=-DTAPE=1; \
	make $(OBJ_TAPE)
	mkdir -p build
	$(CC) -DTAPE=1 $(OBJ_TAPE) -tmc10  -o build/tape
	mv build/tape.c10 build/match.k7

# Launch the ROM in MAME
# Uses a custom build of MAME with the Multiports extension
launch: all
	$(MAME) alice32 -max -ui_active -ext multi -cart build/match.64k.rom

launch_tape: tape
	$(MAME) alice32 -max -ui_active -ext ram -cass build/match.k7

debug: all
	$(MAME) alice32 -max -ui_active -ext multi -cart build/match.64k.rom -debug

debug_tape: tape
	$(MAME) alice32 -max -ui_active -ext ram -cass build/match.k7 -debug

clean:
	rm src/*.o
	rm build/*
	rm generated/*

# Export the tiles from the PNG file
GENERATED_FILES=generated/exported_tiles.c generated/exported_tiles.h generated/exported_colors.h generated/exported_colors.c

$(GENERATED_FILES): tools/export_data.py data/AliceMatch-16.png data/AliceOther-8.png data/AliceCharacter-24.png
	python3 tools/export_data.py

src/tiles.c: $(GENERATED_FILES)
src/launcher_tiles.c: $(GENERATED_FILES)
