SRC = ..\Acid800\source\ 
SRC5200 = source\ 
SOUT = $(OUT)standalone\ 
YOUT = $(OUT)symbols\ 
BUILDER = $(OUT)..\AcidBuilder\AcidBuilder.exe
LIBDEPS = $(SRC)library.s $(SRC5200)lib5200.s

.SUFFIXES: .s .obx .atr .lzobx

{$(SRC)}.s.{$(OBJ)}.obx:
	@echo $(@F)
	@if not exist "$(OBJ)\" md "$(OBJ)\"
	@if not exist "$(YOUT)\" md "$(YOUT)\"
	@for %x in ("$(SRC)$(@B).s") do @mads -s -c -d:SYS5200=1 -t:"$(YOUT)$(@B).lab" -l:"$(YOUT)$(@B).lst" -o:"$(OBJ)$(@B).obx" -i:"$(SRC)\" -i:"$(SRC5200)\" -i:"$(OBJ)\" "%~fx"

{$(SRC)}.s.{$(SOUT)}.rom:
	@echo $(@F)
	@if not exist "$(SOUT)\" md "$(SOUT)\"
	@if not exist "$(YOUT)\" md "$(YOUT)\"
	@for %x in ("$(SRC)$(@B).s") do @mads -s -c -d:LIBBASE=$$A000 -d:SYS5200=1 -t:"$(YOUT)$(@B).lab" -l:"$(YOUT)$(@B).lst" -o:"$(OBJ)standalone.obx" -i:"$(SRC)\" -i:"$(SRC5200)\" -i:"$(OBJ)\" "%~fx"
	@"$(BUILDER)" lzpack "$(OBJ)standalone.obx" "$(OBJ)standalone.lzobx"
	@for %x in ("$(SRC5200)sacartridge.s") do @mads -s -c -d:LIBBASE=$$A000 -d:SYS5200=1 -b:$$a000 -t:"$(SOUT)$(@B).lab" -l:"$(SOUT)$(@B).lst" -o:"$(SOUT)$(@B).rom" -i:"$(SRC)\" -i:"$(OBJ)\" -i:"$(SRC5200)\" "%~fx"

.obx.lzobx:
	@"$(BUILDER)" lzpack "$(@R).obx" "$(@R).lzobx"

all: $(OUT)acid5200.rom standalone-tests

clean:
	@if {$(OBJ)}=={} (echo ERROR: OBJ is empty; I won't clean the root. && exit /b 10)
	@if {$(OUT)}=={} (echo ERROR: OUT is empty; I won't clean the root. && exit /b 10)
	@if exist "$(OBJ)*.obx" del "$(OBJ)*.obx"
	@if exist "$(OUT)acid5200.rom" del "$(OUT)acid5200.rom"
	@if exist "$(OUT)*.lst" del "$(OUT)*.lst"
	@if exist "$(OUT)*.lab" del "$(OUT)*.lab"
	@if exist "$(YOUT)*.lst" del "$(YOUT)*.lst"
	@if exist "$(YOUT)*.lab" del "$(YOUT)*.lab"
	@if exist "$(SOUT)*.xex" del "$(SOUT)*.xex"
	@if exist "$(SOUT)*.lst" del "$(SOUT)*.lst"
	@if exist "$(SOUT)*.lab" del "$(SOUT)*.lab"

$(OUT)acid5200.rom: $(SRC5200)cartridge.s tests $(LIBDEPS) $(SRC5200)display5200.s $(SRC)menu.s
	@echo $(@F)
	@if not exist "$(OUT)\" md "$(OUT)\"
	@for %x in ("$(SRC5200)cartridge.s") do @mads -s -c -d:SYS5200=1 -o:"$(OUT)acid5200.rom" -b:$$4000 -i:"$(OBJ)\" -i:"$(SRC)\" -i:"$(SRC5200)\" -l:"$(OUT)acid5200.lst" -t:"$(OUT)acid5200.lab" "%~fx"

tests:	\
	$(OBJ)antic_default.lzobx \
	$(OBJ)antic_nmist.lzobx \
	$(OBJ)antic_addresswrap.lzobx \
	$(OBJ)antic_dlistwrap.lzobx \
	$(OBJ)antic_dlitiming.lzobx \
	$(OBJ)antic_hiresbug.lzobx \
	$(OBJ)antic_vcount.lzobx \
	$(OBJ)antic_wsync.lzobx \
	$(OBJ)antic_addrmirror.lzobx \
	$(OBJ)antic_pmdma.lzobx \
	$(OBJ)antic_charcontrol.lzobx \
	$(OBJ)antic_dmapattern.lzobx \
	$(OBJ)antic_blockednmi.lzobx \
	$(OBJ)antic_hscrolbug.lzobx \
	$(OBJ)antic_virtdma.lzobx \
	$(OBJ)antic_vscroll.lzobx \
	$(OBJ)antic_vscroldli.lzobx \
	$(OBJ)antic_pfstarttiming.lzobx \
	$(OBJ)antic_pfstoptiming.lzobx \
	$(OBJ)antic_linebuffering.lzobx \
	$(OBJ)pokey_default.lzobx \
	$(OBJ)pokey_noise.lzobx \
	$(OBJ)pokey_irqtiming.lzobx \
	$(OBJ)pokey_timerirq.lzobx \
	$(OBJ)pokey_timergranularity.lzobx \
	$(OBJ)pokey_twotone.lzobx \
	$(OBJ)pokey_seroc.lzobx \
	$(OBJ)pokey_asyncrecv.lzobx \
	$(OBJ)pokey_addrmirror.lzobx \
	$(OBJ)pokey_inittiming.lzobx \
	$(OBJ)cpu_insn.lzobx \
	$(OBJ)cpu_flags.lzobx \
	$(OBJ)cpu_decimal.lzobx \
	$(OBJ)cpu_timing.lzobx \
	$(OBJ)cpu_bugs.lzobx \
	$(OBJ)cpu_clisei.lzobx \
	$(OBJ)cpu_illegal.lzobx \
	$(OBJ)gtia_default.lzobx \
	$(OBJ)gtia_phantomdma.lzobx \
	$(OBJ)gtia_consol.lzobx \
	$(OBJ)gtia_vdelay.lzobx \
	$(OBJ)gtia_collision.lzobx \
	$(OBJ)gtia_collision2.lzobx \
	$(OBJ)gtia_pmretrigger.lzobx \
	$(OBJ)gtia_pmresize.lzobx \
	$(OBJ)gtia_pmoverlap.lzobx \
	$(OBJ)gtia_psuedomodee.lzobx \
	$(OBJ)gtia_addrmirror.lzobx \
	$(OBJ)mod_options.lzobx \

standalone-tests:	\
	$(SOUT)antic_default.rom \
	$(SOUT)antic_nmist.rom \
	$(SOUT)antic_addresswrap.rom \
	$(SOUT)antic_dlistwrap.rom \
	$(SOUT)antic_dlitiming.rom \
	$(SOUT)antic_hiresbug.rom \
	$(SOUT)antic_vcount.rom \
	$(SOUT)antic_wsync.rom \
	$(SOUT)antic_addrmirror.rom \
	$(SOUT)antic_pmdma.rom \
	$(SOUT)antic_charcontrol.rom \
	$(SOUT)antic_dmapattern.rom \
	$(SOUT)antic_blockednmi.rom \
	$(SOUT)antic_hscrolbug.rom \
	$(SOUT)antic_virtdma.rom \
	$(SOUT)antic_vscroll.rom \
	$(SOUT)antic_vscroldli.rom \
	$(SOUT)antic_pfstarttiming.rom \
	$(SOUT)antic_pfstoptiming.rom \
	$(SOUT)antic_linebuffering.rom \
	$(SOUT)pokey_default.rom \
	$(SOUT)pokey_noise.rom \
	$(SOUT)pokey_irqtiming.rom \
	$(SOUT)pokey_timerirq.rom \
	$(SOUT)pokey_timergranularity.rom \
	$(SOUT)pokey_twotone.rom \
	$(SOUT)pokey_seroc.rom \
	$(SOUT)pokey_asyncrecv.rom \
	$(SOUT)pokey_addrmirror.rom \
	$(SOUT)pokey_inittiming.rom \
	$(SOUT)cpu_insn.rom \
	$(SOUT)cpu_flags.rom \
	$(SOUT)cpu_decimal.rom \
	$(SOUT)cpu_timing.rom \
	$(SOUT)cpu_bugs.rom \
	$(SOUT)cpu_clisei.rom \
	$(SOUT)cpu_illegal.rom \
	$(SOUT)gtia_default.rom \
	$(SOUT)gtia_phantomdma.rom \
	$(SOUT)gtia_consol.rom \
	$(SOUT)gtia_vdelay.rom \
	$(SOUT)gtia_collision.rom \
	$(SOUT)gtia_collision2.rom \
	$(SOUT)gtia_pmretrigger.rom \
	$(SOUT)gtia_pmresize.rom \
	$(SOUT)gtia_pmoverlap.rom \
	$(SOUT)gtia_psuedomodee.rom \
	$(SOUT)gtia_addrmirror.rom

$(SOUT)menu.rom						$(OBJ)menu.obx:						$(SRC)menu.s $(SRC)options.s $(LIBDEPS)
$(SOUT)antic_default.rom			$(OBJ)antic_default.obx:			$(SRC)antic_default.s $(LIBDEPS)
$(SOUT)antic_nmist.rom				$(OBJ)antic_nmist.obx:				$(SRC)antic_nmist.s $(LIBDEPS)
$(SOUT)antic_addresswrap.rom		$(OBJ)antic_addresswrap.obx:		$(SRC)antic_addresswrap.s $(LIBDEPS)
$(SOUT)antic_dlistwrap.rom			$(OBJ)antic_dlistwrap.obx:			$(SRC)antic_dlistwrap.s $(LIBDEPS)
$(SOUT)antic_dlitiming.rom			$(OBJ)antic_dlitiming.obx:			$(SRC)antic_dlitiming.s $(LIBDEPS)
$(SOUT)antic_hiresbug.rom			$(OBJ)antic_hiresbug.obx:			$(SRC)antic_hiresbug.s $(LIBDEPS)
$(SOUT)antic_vcount.rom				$(OBJ)antic_vcount.obx:				$(SRC)antic_vcount.s $(LIBDEPS)
$(SOUT)antic_wsync.rom				$(OBJ)antic_wsync.obx:				$(SRC)antic_wsync.s $(LIBDEPS)
$(SOUT)antic_addrmirror.rom			$(OBJ)antic_addrmirror.obx:			$(SRC)antic_addrmirror.s $(LIBDEPS)
$(SOUT)antic_pmdma.rom				$(OBJ)antic_pmdma.obx:				$(SRC)antic_pmdma.s $(LIBDEPS)
$(SOUT)antic_charcontrol.rom		$(OBJ)antic_charcontrol.obx:		$(SRC)antic_charcontrol.s $(LIBDEPS)
$(SOUT)antic_dmapattern.rom			$(OBJ)antic_dmapattern.obx:			$(SRC)antic_dmapattern.s $(LIBDEPS)
$(SOUT)antic_blockednmi.rom			$(OBJ)antic_blockednmi.obx:			$(SRC)antic_blockednmi.s $(LIBDEPS)
$(SOUT)antic_hscrolbug.rom			$(OBJ)antic_hscrolbug.obx:			$(SRC)antic_hscrolbug.s $(LIBDEPS)
$(SOUT)antic_virtdma.rom			$(OBJ)antic_virtdma.obx:			$(SRC)antic_virtdma.s $(LIBDEPS)
$(SOUT)antic_vscroll.rom			$(OBJ)antic_vscroll.obx:			$(SRC)antic_vscroll.s $(LIBDEPS)
$(SOUT)antic_vscroldli.rom			$(OBJ)antic_vscroldli.obx:			$(SRC)antic_vscroldli.s $(LIBDEPS)
$(SOUT)antic_pfstarttiming.rom		$(OBJ)antic_pfstarttiming.obx:		$(SRC)antic_pfstarttiming.s $(LIBDEPS)
$(SOUT)antic_pfstoptiming.rom		$(OBJ)antic_pfstoptiming.obx:		$(SRC)antic_pfstoptiming.s $(LIBDEPS)
$(SOUT)antic_linebuffering.rom		$(OBJ)antic_linebuffering.obx:		$(SRC)antic_linebuffering.s $(LIBDEPS)
$(SOUT)pokey_default.rom			$(OBJ)pokey_default.obx:			$(SRC)pokey_default.s $(LIBDEPS)
$(SOUT)pokey_noise.rom				$(OBJ)pokey_noise.obx:				$(SRC)pokey_noise.s $(LIBDEPS)
$(SOUT)pokey_irqtiming.rom			$(OBJ)pokey_irqtiming.obx:			$(SRC)pokey_irqtiming.s $(LIBDEPS)
$(SOUT)pokey_timerirq.rom			$(OBJ)pokey_timerirq.obx:			$(SRC)pokey_timerirq.s $(LIBDEPS)
$(SOUT)pokey_timergranularity.rom	$(OBJ)pokey_timergranularity.obx:	$(SRC)pokey_timergranularity.s $(LIBDEPS)
$(SOUT)pokey_twotone.rom			$(OBJ)pokey_twotone.obx:			$(SRC)pokey_twotone.s $(LIBDEPS)
$(SOUT)pokey_seroc.rom				$(OBJ)pokey_seroc.obx:				$(SRC)pokey_seroc.s $(LIBDEPS)
$(SOUT)pokey_asyncrecv.rom			$(OBJ)pokey_asyncrecv.obx:			$(SRC)pokey_asyncrecv.s $(LIBDEPS)
$(SOUT)pokey_addrmirror.rom			$(OBJ)pokey_addrmirror.obx:			$(SRC)pokey_addrmirror.s $(LIBDEPS)
$(SOUT)pokey_inittiming.rom			$(OBJ)pokey_inittiming.obx:			$(SRC)pokey_inittiming.s $(LIBDEPS)
$(SOUT)cpu_insn.rom					$(OBJ)cpu_insn.obx:					$(SRC)cpu_insn.s $(LIBDEPS)
$(SOUT)cpu_flags.rom				$(OBJ)cpu_flags.obx:				$(SRC)cpu_flags.s $(LIBDEPS)
$(SOUT)cpu_decimal.rom				$(OBJ)cpu_decimal.obx:				$(SRC)cpu_decimal.s $(LIBDEPS)
$(SOUT)cpu_timing.rom				$(OBJ)cpu_timing.obx:				$(SRC)cpu_timing.s $(LIBDEPS)
$(SOUT)cpu_bugs.rom					$(OBJ)cpu_bugs.obx:					$(SRC)cpu_bugs.s $(LIBDEPS)
$(SOUT)cpu_clisei.rom				$(OBJ)cpu_clisei.obx:				$(SRC)cpu_clisei.s $(LIBDEPS)
$(SOUT)cpu_illegal.rom				$(OBJ)cpu_illegal.obx:				$(SRC)cpu_illegal.s $(LIBDEPS)
$(SOUT)gtia_default.rom				$(OBJ)gtia_default.obx:				$(SRC)gtia_default.s $(LIBDEPS)
$(SOUT)gtia_phantomdma.rom			$(OBJ)gtia_phantomdma.obx:			$(SRC)gtia_phantomdma.s $(LIBDEPS)
$(SOUT)gtia_consol.rom				$(OBJ)gtia_consol.obx:				$(SRC)gtia_consol.s $(LIBDEPS)
$(SOUT)gtia_vdelay.rom				$(OBJ)gtia_vdelay.obx:				$(SRC)gtia_vdelay.s $(LIBDEPS)
$(SOUT)gtia_collision.rom			$(OBJ)gtia_collision.obx:			$(SRC)gtia_collision.s $(LIBDEPS)
$(SOUT)gtia_collision2.rom			$(OBJ)gtia_collision2.obx:			$(SRC)gtia_collision2.s $(LIBDEPS)
$(SOUT)gtia_pmretrigger.rom			$(OBJ)gtia_pmretrigger.obx:			$(SRC)gtia_pmretrigger.s $(LIBDEPS)
$(SOUT)gtia_pmresize.rom			$(OBJ)gtia_pmresize.obx:			$(SRC)gtia_pmresize.s $(LIBDEPS)
$(SOUT)gtia_pmoverlap.rom			$(OBJ)gtia_pmoverlap.obx:			$(SRC)gtia_pmoverlap.s $(LIBDEPS)
$(SOUT)gtia_psuedomodee.rom			$(OBJ)gtia_psuedomodee.obx:			$(SRC)gtia_psuedomodee.s $(LIBDEPS)
$(SOUT)gtia_addrmirror.rom			$(OBJ)gtia_addrmirror.obx:			$(SRC)gtia_addrmirror.s $(LIBDEPS)
$(SOUT)mod_options.rom				$(OBJ)mod_options.obx:				$(SRC)mod_options.s $(SRC)options.s $(LIBDEPS)
