SRC = source\ 
SOUT = $(OUT)standalone\ 
YOUT = $(OUT)symbols\ 

.SUFFIXES: .s .obx .atr

{$(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:SYS800=1 -t:"$(YOUT)$(@B).lab" -l:"$(YOUT)$(@B).lst" -o:"$(OBJ)$(@B).obx" -i:"$(SRC)\" -i:"$(OBJ)\" "%~fx"

{$(SRC)}.s.{$(SOUT)}.xex:
	@echo $(@F)
	@if not exist "$(SOUT)\" md "$(SOUT)\"
	@for %x in ("$(SRC)$(@B).s") do @mads -s -c -d:SYS800=1 -d:GENLIBRARY=1 -d:STANDALONE=1 -t:"$(SOUT)$(@B).lab" -l:"$(SOUT)$(@B).lst" -o:"$(SOUT)$(@B).xex" -i:"$(SRC)\" "%~fx"
	
all: $(OUT)acid800.atr 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)acid800.atr" del "$(OUT)acid800.atr"
	@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)acid800.atr: $(SRC)disk.s $(OBJ)loader.obx tests
	@echo $(@F)
	@if not exist "$(OUT)\" md "$(OUT)\"
	@for %x in ("$(SRC)disk.s") do @mads -s -c -d:SYS800=1 -o:"$(OUT)acid800.atr" -i:"$(OBJ)\" -l:"$(OBJ)disk.lst" "%~fx"

$(OBJ)loader.obx: $(SRC)loader.s $(OBJ)menu.obx

tests:	\
	$(OBJ)antic_default.obx \
	$(OBJ)antic_nmist.obx \
	$(OBJ)antic_addresswrap.obx \
	$(OBJ)antic_dlistwrap.obx \
	$(OBJ)antic_dlitiming.obx \
	$(OBJ)antic_hiresbug.obx \
	$(OBJ)antic_vcount.obx \
	$(OBJ)antic_wsync.obx \
	$(OBJ)antic_addrmirror.obx \
	$(OBJ)antic_pmdma.obx \
	$(OBJ)antic_charcontrol.obx \
	$(OBJ)antic_dmapattern.obx \
	$(OBJ)antic_blockednmi.obx \
	$(OBJ)antic_hscrolbug.obx \
	$(OBJ)antic_virtdma.obx \
	$(OBJ)antic_vscroll.obx \
	$(OBJ)antic_vscroldli.obx \
	$(OBJ)antic_pfstarttiming.obx \
	$(OBJ)antic_pfstoptiming.obx \
	$(OBJ)antic_linebuffering.obx \
	$(OBJ)pokey_default.obx \
	$(OBJ)pokey_noise.obx \
	$(OBJ)pokey_irqtiming.obx \
	$(OBJ)pokey_timerirq.obx \
	$(OBJ)pokey_timertiming.obx \
	$(OBJ)pokey_timergranularity.obx \
	$(OBJ)pokey_twotone.obx \
	$(OBJ)pokey_seroc.obx \
	$(OBJ)pokey_serclock.obx \
	$(OBJ)pokey_serdirect.obx \
	$(OBJ)pokey_sertiming.obx \
	$(OBJ)pokey_skstat.obx \
	$(OBJ)pokey_asyncrecv.obx \
	$(OBJ)pokey_addrmirror.obx \
	$(OBJ)pokey_inittiming.obx \
	$(OBJ)pia_basic.obx \
	$(OBJ)pia_irq.obx \
	$(OBJ)cpu_insn.obx \
	$(OBJ)cpu_flags.obx \
	$(OBJ)cpu_decimal.obx \
	$(OBJ)cpu_timing.obx \
	$(OBJ)cpu_bugs.obx \
	$(OBJ)cpu_clisei.obx \
	$(OBJ)cpu_illegal.obx \
	$(OBJ)cpu_65c816.obx \
	$(OBJ)gtia_default.obx \
	$(OBJ)gtia_phantomdma.obx \
	$(OBJ)gtia_consol.obx \
	$(OBJ)gtia_vdelay.obx \
	$(OBJ)gtia_collision.obx \
	$(OBJ)gtia_collision2.obx \
	$(OBJ)gtia_pmretrigger.obx \
	$(OBJ)gtia_pmresize.obx \
	$(OBJ)gtia_pmoverlap.obx \
	$(OBJ)gtia_psuedomodee.obx \
	$(OBJ)gtia_addrmirror.obx \
	$(OBJ)mmu_xlbanking.obx \
	$(OBJ)mod_options.obx \
	$(OBJ)mod_disp80.obx \
	$(OBJ)mod_vbxe80.obx \
	$(OBJ)mod_scroll40.obx \
	$(OBJ)mod_dispmin.obx

standalone-tests:	\
	$(SOUT)antic_default.xex \
	$(SOUT)antic_nmist.xex \
	$(SOUT)antic_addresswrap.xex \
	$(SOUT)antic_dlistwrap.xex \
	$(SOUT)antic_dlitiming.xex \
	$(SOUT)antic_hiresbug.xex \
	$(SOUT)antic_vcount.xex \
	$(SOUT)antic_wsync.xex \
	$(SOUT)antic_addrmirror.xex \
	$(SOUT)antic_pmdma.xex \
	$(SOUT)antic_charcontrol.xex \
	$(SOUT)antic_dmapattern.xex \
	$(SOUT)antic_blockednmi.xex \
	$(SOUT)antic_hscrolbug.xex \
	$(SOUT)antic_virtdma.xex \
	$(SOUT)antic_vscroll.xex \
	$(SOUT)antic_vscroldli.xex \
	$(SOUT)antic_pfstarttiming.xex \
	$(SOUT)antic_pfstoptiming.xex \
	$(SOUT)antic_linebuffering.xex \
	$(SOUT)pokey_default.xex \
	$(SOUT)pokey_noise.xex \
	$(SOUT)pokey_irqtiming.xex \
	$(SOUT)pokey_timerirq.xex \
	$(SOUT)pokey_timertiming.xex \
	$(SOUT)pokey_timergranularity.xex \
	$(SOUT)pokey_twotone.xex \
	$(SOUT)pokey_seroc.xex \
	$(SOUT)pokey_serclock.xex \
	$(SOUT)pokey_serdirect.xex \
	$(SOUT)pokey_sertiming.xex \
	$(SOUT)pokey_skstat.xex \
	$(SOUT)pokey_asyncrecv.xex \
	$(SOUT)pokey_addrmirror.xex \
	$(SOUT)pokey_inittiming.xex \
	$(SOUT)pia_basic.xex \
	$(SOUT)pia_irq.xex \
	$(SOUT)cpu_insn.xex \
	$(SOUT)cpu_flags.xex \
	$(SOUT)cpu_decimal.xex \
	$(SOUT)cpu_timing.xex \
	$(SOUT)cpu_bugs.xex \
	$(SOUT)cpu_clisei.xex \
	$(SOUT)cpu_illegal.xex \
	$(SOUT)cpu_65c816.xex \
	$(SOUT)gtia_default.xex \
	$(SOUT)gtia_phantomdma.xex \
	$(SOUT)gtia_consol.xex \
	$(SOUT)gtia_vdelay.xex \
	$(SOUT)gtia_collision.xex \
	$(SOUT)gtia_collision2.xex \
	$(SOUT)gtia_pmretrigger.xex \
	$(SOUT)gtia_pmresize.xex \
	$(SOUT)gtia_pmoverlap.xex \
	$(SOUT)gtia_psuedomodee.xex \
	$(SOUT)gtia_addrmirror.xex \
	$(SOUT)mmu_xlbanking.xex \
	$(SOUT)mod_options.xex \
	$(SOUT)mod_disp80.xex \
	$(SOUT)mod_vbxe80.xex \
	$(SOUT)mod_scroll40.xex \
	$(SOUT)mod_dispmin.xex

$(SOUT)menu.obx						$(OBJ)menu.obx:						$(SRC)menu.s $(SRC)options.s $(SRC)library.s
$(SOUT)antic_default.obx			$(OBJ)antic_default.obx:			$(SRC)antic_default.s $(SRC)library.s
$(SOUT)antic_nmist.obx				$(OBJ)antic_nmist.obx:				$(SRC)antic_nmist.s $(SRC)library.s
$(SOUT)antic_addresswrap.obx		$(OBJ)antic_addresswrap.obx:		$(SRC)antic_addresswrap.s $(SRC)library.s
$(SOUT)antic_dlistwrap.obx			$(OBJ)antic_dlistwrap.obx:			$(SRC)antic_dlistwrap.s $(SRC)library.s
$(SOUT)antic_dlitiming.obx			$(OBJ)antic_dlitiming.obx:			$(SRC)antic_dlitiming.s $(SRC)library.s
$(SOUT)antic_hiresbug.obx			$(OBJ)antic_hiresbug.obx:			$(SRC)antic_hiresbug.s $(SRC)library.s
$(SOUT)antic_vcount.obx				$(OBJ)antic_vcount.obx:				$(SRC)antic_vcount.s $(SRC)library.s
$(SOUT)antic_wsync.obx				$(OBJ)antic_wsync.obx:				$(SRC)antic_wsync.s $(SRC)library.s
$(SOUT)antic_addrmirror.obx			$(OBJ)antic_addrmirror.obx:			$(SRC)antic_addrmirror.s $(SRC)library.s
$(SOUT)antic_pmdma.obx				$(OBJ)antic_pmdma.obx:				$(SRC)antic_pmdma.s $(SRC)library.s
$(SOUT)antic_charcontrol.obx		$(OBJ)antic_charcontrol.obx:		$(SRC)antic_charcontrol.s $(SRC)library.s
$(SOUT)antic_dmapattern.obx			$(OBJ)antic_dmapattern.obx:			$(SRC)antic_dmapattern.s $(SRC)library.s
$(SOUT)antic_blockednmi.obx			$(OBJ)antic_blockednmi.obx:			$(SRC)antic_blockednmi.s $(SRC)library.s
$(SOUT)antic_hscrolbug.obx			$(OBJ)antic_hscrolbug.obx:			$(SRC)antic_hscrolbug.s $(SRC)library.s
$(SOUT)antic_virtdma.obx			$(OBJ)antic_virtdma.obx:			$(SRC)antic_virtdma.s $(SRC)library.s
$(SOUT)antic_vscroll.obx			$(OBJ)antic_vscroll.obx:			$(SRC)antic_vscroll.s $(SRC)library.s
$(SOUT)antic_vscroldli.obx			$(OBJ)antic_vscroldli.obx:			$(SRC)antic_vscroldli.s $(SRC)library.s
$(SOUT)antic_pfstarttiming.obx		$(OBJ)antic_pfstarttiming.obx:		$(SRC)antic_pfstarttiming.s $(SRC)library.s
$(SOUT)antic_pfstoptiming.obx		$(OBJ)antic_pfstoptiming.obx:		$(SRC)antic_pfstoptiming.s $(SRC)library.s
$(SOUT)antic_linebuffering.obx		$(OBJ)antic_linebuffering.obx:		$(SRC)antic_linebuffering.s $(SRC)library.s
$(SOUT)pokey_default.obx			$(OBJ)pokey_default.obx:			$(SRC)pokey_default.s $(SRC)library.s
$(SOUT)pokey_noise.obx				$(OBJ)pokey_noise.obx:				$(SRC)pokey_noise.s $(SRC)library.s
$(SOUT)pokey_irqtiming.obx			$(OBJ)pokey_irqtiming.obx:			$(SRC)pokey_irqtiming.s $(SRC)library.s
$(SOUT)pokey_timerirq.obx			$(OBJ)pokey_timerirq.obx:			$(SRC)pokey_timerirq.s $(SRC)library.s
$(SOUT)pokey_timertiming.obx		$(OBJ)pokey_timertiming.obx:		$(SRC)pokey_timertiming.s $(SRC)library.s
$(SOUT)pokey_timergranularity.obx	$(OBJ)pokey_timergranularity.obx:	$(SRC)pokey_timergranularity.s $(SRC)library.s
$(SOUT)pokey_twotone.obx			$(OBJ)pokey_twotone.obx:			$(SRC)pokey_twotone.s $(SRC)library.s
$(SOUT)pokey_seroc.obx				$(OBJ)pokey_seroc.obx:				$(SRC)pokey_seroc.s $(SRC)library.s
$(SOUT)pokey_serclock.obx			$(OBJ)pokey_serclock.obx:			$(SRC)pokey_serclock.s $(SRC)library.s
$(SOUT)pokey_serdirect.obx			$(OBJ)pokey_serdirect.obx:			$(SRC)pokey_serdirect.s $(SRC)library.s
$(SOUT)pokey_sertiming.obx			$(OBJ)pokey_sertiming.obx:			$(SRC)pokey_sertiming.s $(SRC)library.s
$(SOUT)pokey_skstat.obx				$(OBJ)pokey_skstat.obx:				$(SRC)pokey_skstat.s $(SRC)library.s
$(SOUT)pokey_asyncrecv.obx			$(OBJ)pokey_asyncrecv.obx:			$(SRC)pokey_asyncrecv.s $(SRC)library.s
$(SOUT)pokey_addrmirror.obx			$(OBJ)pokey_addrmirror.obx:			$(SRC)pokey_addrmirror.s $(SRC)library.s
$(SOUT)pokey_inittiming.obx			$(OBJ)pokey_inittiming.obx:			$(SRC)pokey_inittiming.s $(SRC)library.s
$(SOUT)pia_basic.obx				$(OBJ)pia_basic.obx:				$(SRC)pia_basic.s $(SRC)library.s
$(SOUT)pia_irq.obx					$(OBJ)pia_irq.obx:					$(SRC)pia_irq.s $(SRC)library.s
$(SOUT)cpu_insn.obx					$(OBJ)cpu_insn.obx:					$(SRC)cpu_insn.s $(SRC)library.s
$(SOUT)cpu_flags.obx				$(OBJ)cpu_flags.obx:				$(SRC)cpu_flags.s $(SRC)library.s
$(SOUT)cpu_decimal.obx				$(OBJ)cpu_decimal.obx:				$(SRC)cpu_decimal.s $(SRC)library.s
$(SOUT)cpu_timing.obx				$(OBJ)cpu_timing.obx:				$(SRC)cpu_timing.s $(SRC)library.s
$(SOUT)cpu_bugs.obx					$(OBJ)cpu_bugs.obx:					$(SRC)cpu_bugs.s $(SRC)library.s
$(SOUT)cpu_clisei.obx				$(OBJ)cpu_clisei.obx:				$(SRC)cpu_clisei.s $(SRC)library.s
$(SOUT)cpu_illegal.obx				$(OBJ)cpu_illegal.obx:				$(SRC)cpu_illegal.s $(SRC)library.s
$(SOUT)cpu_65c816.obx				$(OBJ)cpu_65c816.obx:				$(SRC)cpu_65c816.s $(SRC)library.s
$(SOUT)gtia_default.obx				$(OBJ)gtia_default.obx:				$(SRC)gtia_default.s $(SRC)library.s
$(SOUT)gtia_phantomdma.obx			$(OBJ)gtia_phantomdma.obx:			$(SRC)gtia_phantomdma.s $(SRC)library.s
$(SOUT)gtia_consol.obx				$(OBJ)gtia_consol.obx:				$(SRC)gtia_consol.s $(SRC)library.s
$(SOUT)gtia_vdelay.obx				$(OBJ)gtia_vdelay.obx:				$(SRC)gtia_vdelay.s $(SRC)library.s
$(SOUT)gtia_collision.obx			$(OBJ)gtia_collision.obx:			$(SRC)gtia_collision.s $(SRC)library.s
$(SOUT)gtia_collision2.obx			$(OBJ)gtia_collision2.obx:			$(SRC)gtia_collision2.s $(SRC)library.s
$(SOUT)gtia_pmretrigger.obx			$(OBJ)gtia_pmretrigger.obx:			$(SRC)gtia_pmretrigger.s $(SRC)library.s
$(SOUT)gtia_pmresize.obx			$(OBJ)gtia_pmresize.obx:			$(SRC)gtia_pmresize.s $(SRC)library.s
$(SOUT)gtia_pmoverlap.obx			$(OBJ)gtia_pmoverlap.obx:			$(SRC)gtia_pmoverlap.s $(SRC)library.s
$(SOUT)gtia_psuedomodee.obx			$(OBJ)gtia_psuedomodee.obx:			$(SRC)gtia_psuedomodee.s $(SRC)library.s
$(SOUT)gtia_addrmirror.obx			$(OBJ)gtia_addrmirror.obx:			$(SRC)gtia_addrmirror.s $(SRC)library.s
$(SOUT)mmu_xlbanking.obx			$(OBJ)mmu_xlbanking.obx:			$(SRC)mmu_xlbanking.s $(SRC)library.s
$(SOUT)mod_options.obx				$(OBJ)mod_options.obx:				$(SRC)mod_options.s $(SRC)options.s $(SRC)library.s
$(SOUT)mod_disp80.obx				$(OBJ)mod_disp80.obx:				$(SRC)mod_disp80.s $(SRC)library.s
$(SOUT)mod_vbxe80.obx				$(OBJ)mod_vbxe80.obx:				$(SRC)mod_vbxe80.s $(SRC)library.s
$(SOUT)mod_scroll40.obx				$(OBJ)mod_scroll40.obx:				$(SRC)mod_scroll40.s $(SRC)library.s
$(SOUT)mod_dispmin.obx				$(OBJ)mod_dispmin.obx:				$(SRC)mod_dispmin.s $(SRC)library.s
