.PHONY: all clean wrdisk tstrom prodtool
all: freezer2005.atr freezer2011.atr

wrdisk: wrdisk05.rom wrdisk11.rom

prodtool: prodtool.atr

#all: freezer2005.atr freezer2005_128.atr freezer2011.atr
#all: freezer05.atr freezer128.atr wrdisk05.rom wrdisk11.rom

ATASM ?= atasm

export ATASM

ASMFLAGS=
#ASMFLAGS = -s
#ASMFLAGS = -v

# flags for assembling 2005/2011 software versions
ASMFLAGS_2005=-dFREEZER2005
ASMFLAGS_2011=-dFREEZER2011

CXXFLAGS=-g -W -Wall

flashold.com: flashold.src flash05.inc cio.inc
	$(ATASM) $(ASMFLAGS) $(ASMFLAGS_2005) -o$@ $<

flash05.com: flash.src cio.inc cio.src iohelp.src iohelpfl.src \
	libflash/*.src libflash/*.inc 
	$(ATASM) $(ASMFLAGS) $(ASMFLAGS_2005) -Ilibflash -o$@ $<

flash11.com: flash.src cio.inc cio.src iohelp.src iohelpfl.src \
	libflash/*.src libflash/*.inc 
	$(ATASM) $(ASMFLAGS) $(ASMFLAGS_2011) -Ilibflash -o$@ $<

patch.com: patch.src cio.inc crc16.src
	$(ATASM) $(ASMFLAGS) -o$@ $<

cartemu05.rom: cartemu.src flash05.inc cio.inc mypdos-code.bin
	$(ATASM) $(ASMFLAGS) $(ASMFLAGS_2005) -r -o$@ $<

cartemu11.rom: cartemu.src flash11.inc cio.inc mypdos-code.bin
	$(ATASM) $(ASMFLAGS) $(ASMFLAGS_2011) -r -o$@ $<

chkrom: chkrom.o
	$(CXX) -o chkrom chkrom.o

romcrc: romcrc.o crc16.o
	$(CXX) -o romcrc romcrc.o crc16.o

crc16.o: crc16.cpp crc16.h

romcrc.o: romcrc.cpp crc16.h

8kblank.rom:
	dd if=/dev/zero bs=8k count=1 | tr '\000' '\377' > 8kblank.rom

16kblank.rom:
	dd if=/dev/zero bs=16k count=1 | tr '\000' '\377' > 16kblank.rom

frz05_512.rom: 8kblank.rom 16kblank.rom cartemu05.rom oldos.rom freezer/freezer05.rom
	cat 16kblank.rom \
		8kblank.rom \
		freezer/freezer05.rom \
		cartemu05.rom oldos.rom > $@

frz05_128.rom: cartemu05.rom oldos.rom freezer/freezer05.rom
	cat freezer/freezer05.rom cartemu05.rom oldos.rom > $@

frz11.rom: 8kblank.rom 16kblank.rom cartemu11.rom oldos.rom freezer/freezer11.rom
	cat 16kblank.rom \
		8kblank.rom \
		freezer/freezer11.rom \
		cartemu11.rom oldos.rom > $@

.PHONY: freezer/freezer05.rom freezer/freezer11.rom
freezer/freezer05.rom:
	make -C freezer freezer05.rom

freezer/freezer11.rom:
	make -C freezer freezer11.rom

wrdisk05-prg.rom: wrdisk.src cio.inc cio.src flash05.inc freezer/hisio/*
	$(ATASM) $(ASMFLAGS) $(ASMFLAGS_2005) -Ifreezer -Ifreezer/hisio -r -f255 -o$@ $<

wrdisk11-prg.rom: wrdisk.src cio.inc cio.src flash11.inc freezer/hisio/*
	$(ATASM) $(ASMFLAGS) $(ASMFLAGS_2011) -Ifreezer -Ifreezer/hisio -dFREEZER2011 -r -f255 -o$@ $<

wrdisk05.rom: wrdisk05-prg.rom freezer2005.atr
	dd if=/dev/zero bs=8k count=18 | tr '\000' '\377' > $@
	dd if=$< of=$@ bs=8k conv=notrunc
	dd if=freezer2005.atr of=$@ bs=1 conv=notrunc seek=8192 skip=16
	mkdir -p wrdisk
	cp -f $@ wrdisk

wrdisk11.rom: wrdisk11-prg.rom freezer2011.atr
	dd if=/dev/zero bs=8k count=18 | tr '\000' '\377' > $@
	dd if=$< of=$@ bs=8k conv=notrunc
	dd if=freezer2011.atr of=$@ bs=1 conv=notrunc seek=8192 skip=16
	mkdir -p wrdisk
	cp -f $@ wrdisk

#imgdisk: FLASH.COM CFLASH.COM PATCH.COM setbank.rom frz128.rom frz512.rom
#	cp -f FLASH.COM CFLASH.COM PATCH.COM disk
#	cp -f frz128.rom disk/FRZ128.ROM
#	cp -f frz512.rom disk/FRZ512.ROM
#	dir2atr -b MyDos453 -d 720 freezer.atr disk

freezer2005.atr: flashold.com flash05.com patch.com frz05_512.rom disk-basefiles/*
	mkdir -p disk05
	cp -f disk-basefiles/dos.sys disk-basefiles/dup.sys disk05
	cp -f flashold.com disk05
	cp -f flash05.com disk05/flash.com
	cp -f patch.com disk05
	cp -f frz05_512.rom disk05/freezer.rom
	dir2atr -b MyDos4534 1040 freezer2005.atr disk05

freezer2005_128.atr: flashold.com flash05.com patch.com frz05_128.rom disk-basefiles/*
	mkdir -p disk05_128
	cp -f disk-basefiles/dos.sys disk-basefiles/dup.sys disk05_128
	cp -f flashold.com disk05_128
	cp -f flash05.com disk05_128/flash.com
	cp -f patch.com disk05_128
	cp -f frz05_128.rom disk05_128/frz128.rom
	dir2atr -b MyDos4534 1040 freezer2005_128.atr disk05_128

freezer2011.atr: flash11.com frz11.rom disk-basefiles/*
	mkdir -p disk11
	cp -f disk-basefiles/dos.sys disk-basefiles/dup.sys disk11
	cp -f flash11.com disk11/flash.com
	cp -f frz11.rom disk11/freezer.rom
	dir2atr -b MyDos4534 1040 freezer2011.atr disk11

all05.rom: frz512.rom wrdisk05.rom flash05.com
	dd if=/dev/zero bs=8k count=64 | tr '\000' '\377' > $@
	dd if=wrdisk.rom of=$@ bs=8k conv=notrunc
	dd if=frz512.rom of=$@ bs=8k conv=notrunc seek=56
	cp -f flash05.com $@ all-rom
	dir2atr -m -d -b MyDos4534 all-rom.atr all-rom

cartmenu05.rom: cartmenu05.src
	$(ATASM) $(ASMFLAGS) $(ASMFLAGS_2005) -r -f255 -o$@ $<

prod.rom: wrdisk11.rom frz11.rom roms/sdx445u.rom
	dd if=/dev/zero bs=8k count=128 | tr '\000' '\377' > $@
	dd if=wrdisk11.rom of=$@ bs=8k conv=notrunc
	dd if=roms/sdx445u.rom of=$@ bs=8k conv=notrunc seek=64
	dd if=frz11.rom of=$@ bs=8k conv=notrunc seek=120
	cp -f $@ testrom

prodtool.com: prodtool.src cio.inc cio.src iohelp.src \
	libflash/* libflash/* freezer/VERSION.M65
	$(ATASM) $(ASMFLAGS) $(ASMFLAGS_2011) -Ilibflash -Ifreezer -o$@ $<

prodtool.atr: prodtool.com prod.rom disk-basefiles/*
	mkdir -p proddisk
	cp -f disk-basefiles/*.sys proddisk
	cp -f disk-basefiles/hisio.com proddisk/hisio.ar0
	cp -f prod.rom proddisk
	cp -f prodtool.com proddisk/prodtool.ar1
	dir2atr -b MyDos4534 -d $@ proddisk

tstrom: 16kblank.rom 8kblank.rom frz05_128.rom frz05_512.rom cartmenu05.rom
	cat roms/basicxl.rom \
		roms/basicxe.rom \
		roms/action.rom \
		roms/mac65.rom \
		roms/galaxian.rom roms/anteater.rom \
		roms/defender.rom \
		frz05_128.rom >testrom/T128.ROM
	cat roms/dos20.rom \
		roms/sdx419.rom \
		roms/sdx421.rom \
		roms/sdx422.rom \
		roms/basicxl.rom \
		roms/basicxe.rom \
		roms/mac65.rom \
		roms/action.rom \
		roms/defender.rom \
		roms/donkey.rom \
		roms/poleposition.rom \
		roms/popeye.rom \
		roms/bcsquest.rom \
		roms/anteater.rom \
		roms/asteroid.rom \
		roms/galaxian.rom \
		roms/pacman.rom \
		roms/zenji.rom \
		cartmenu05.rom \
		frz05_512.rom > testrom/T512.ROM
	cat roms/sdx422.rom \
		roms/basicxe.rom \
		roms/poleposition.rom \
		roms/pacman.rom \
		roms/galaxian.rom > testrom/RAM.ROM
	cat roms/tf05-diskcart.rom \
		16kblank.rom 16kblank.rom 16kblank.rom 16kblank.rom \
		roms/sdx445u.rom \
		roms/anarch/mac65101.bin \
		roms/donkey.rom \
		roms/galaxian.rom \
		> testrom/NEW1.ROM

tstrom2: 16kblank.rom 8kblank.rom frz11.rom
	cat	roms/sdx445u.rom \
		roms/anarch/mac65101.bin \
		roms/donkey.rom \
		roms/galaxian.rom \
		8kblank.rom 16kblank.rom \
		16kblank.rom 16kblank.rom \
		16kblank.rom 16kblank.rom \
		16kblank.rom 16kblank.rom \
		16kblank.rom 16kblank.rom \
		frz11.rom \
		> testrom/NEW.ROM

testdisk.atr: img
	cp -f freezer64k.rom 512k/freezer.rom
	cp -f FLASH.COM PATCH.COM newdisk
	cp -f freezer32k.rom newdisk/FRZ32K.ROM
	cp -f freezer64k.rom newdisk/FRZ64K.ROM
	cp -f 512k/all05.rom newdisk/TEST.ROM
	cp -f 512k/ram.rom newdisk/RAMTEST.ROM
	unix2atr -m -d 5760 testdisk.atr newdisk

#	cat roms/basicxl.rom \
	#	roms/basicxe.rom \
	#	roms/action.rom \
	#	roms/mac65.rom \
	#	roms/galaxian.rom roms/anteater.rom \
	#	roms/defender.rom \

# 128k ROM layout:
#  0 Basic XL (OSS)
#  2 Basic XE (OSS)
#  4 Action (OSS)
#  6 Mac 65 (OSS)
#  8 Galaxian (8k)
#  9 Ant Eater (8k)
# 10 Defender (16k)

# 512k ROM layout:
#  0 dos2.0 (8k)
#  8 SDX 4.19 (SDX)
# 16 SDX 4.21 (SDX)
# 24 SDX 4.22 (SDX)
# 32 Basic XL (OSS)
# 34 Basic XE (OSS)
# 36 Mac 65 (OSS)
# 38 Action (OSS)
# 40 Defender (16k)
# 42 Donkey Kong (16k)
# 44 Pole Position (16k)
# 46 Popeye (16k)
# 48 Bc's Quest for Tires (16k)
# 50 Ant Eater (8k)
# 51 Asteroid (8k)
# 52 Galaxian (8k)
# 53 Pac Man (8k)
# 54 Zenji (8k)
# 55 The Learning Phone (8k)
# 56-59 <empty>

# 112k RAM layout:
#  0 SDX 4.22 (SDX)
#  8 Basic XE (OSS)
# 10 Pole Position (16k)
# 12 Pac Man (8k)
# 13 Galaxian (8k)

# NEW ROM (program at bank 0):
#   0 Turbo Freezer 2005 DiskCart
#  64 SDX 4.44
#  96 MAC/65 (OSS)
#  98 Donkey Kong (16k)
# 100 Galaxian (8k)

clean:
	make -C freezer clean
	rm -f *.com setbank*.rom cartemu*.rom 8kblank.rom 16kblank.rom \
	frz*.rom wrdisk*.rom prod.rom \
	chkrom chkrom.o crc16.o romcrc romcrc.o \
	cartmenu*.rom freezer*.atr
	rm -rf wrdisk proddisk disk05 disk05_128 disk11
