.SILENT:
include memory.mk

ASM                     := zasm
ASMFLAGS                := -w -b
BUILDDIR                := build

TOPTARGETS              := all clean
$(TOPTARGETS): $(SUBDIRS)

all: $(BUILDDIR) $(BUILDDIR)/rom.bin

clean:
	rm -rf $(BUILDDIR)

$(BUILDDIR):
	mkdir -p $(BUILDDIR)

$(BUILDDIR)/bios.bin: bios.asm tape.asm $(BUILDDIR)/memory.inc
	echo '>$<'
	$(ASM) $(ASMFLAGS) bios.bin $(BUILDDIR)/bios.bin

basic:
	$(MAKE) -C apps/basic $(or $(MAKECMDGOALS),all) --no-print-directory

$(BUILDDIR)/memory.inc: memory.mk
	@mkdir -p $(@D)
	@awk 'BEGIN { print "; Generated from rom_layout.mk; do not edit." } \
		/^[A-Z][A-Z0-9_]*[[:space:]]*:=[[:space:]]*/ { print $$1 " .equ " $$3 }' $< > $@

$(BUILDDIR)/rom.bin: $(BUILDDIR)/bios.bin basic
	echo "bios:   $(shell wc -c < $(BUILDDIR)/bios.bin) / $$(($(BIOS_ROM_SIZE)+0))"
	echo "basic:  $(shell wc -c < $(BUILDDIR)/basic.bin) / $$(($(BASIC_ROM_SIZE)+0))"
	objcopy --pad-to=$$(($(BIOS_ROM_START)+$(BIOS_ROM_SIZE))) \
		-I binary $(BUILDDIR)/bios.bin -O binary $(BUILDDIR)/bios_padded.bin
	objcopy --pad-to=$(BASIC_ROM_SIZE) \
		-I binary $(BUILDDIR)/basic.bin -O binary $(BUILDDIR)/basic_padded.bin
	cat $(BUILDDIR)/bios_padded.bin $(BUILDDIR)/basic_padded.bin > $(BUILDDIR)/rom.bin


.PHONY: $(TOPTARGETS) $(SUBDIRS) basic
