.SUFFIXES	=
AFLAGS	   = -o $@
PLVM       = plvm
PLVMZP_APL = vmsrc/apple/plvmzp.inc
PLVM01     = rel/apple/A1PLASMA\#060280
PLVM02	   = rel/apple/PLASMA.SYSTEM\#FF2000
PLVMJIT    = rel/apple/PLVM.128\#FF2000
PLVM802	   = rel/apple/PLVM16\#FF2000
PLVM03	   = rel/apple/SOS.INTERP\#050000
PLVMJIT03  = rel/apple/SOS.INTERPJIT\#050000
SOSCMD     = rel/apple/SOS.CMD\#FE1000
SOSCMDJIT  = rel/apple/SOS.CMDJIT\#FE1000
CMD        = rel/apple/CMD\#061000
CMDJIT     = rel/apple/CMD.128\#061000
PLVMZP_C64 = vmsrc/c64/plvmzp.inc
PLVMC64    = rel/c64/PLASMA
ED         = rel/ED\#FE1000
ZIPCHIP    = rel/apple/ZIPCHIP\#FE1000
JIT        = rel/apple/JIT\#FE1000
JIT16      = rel/apple/JIT16\#FE1000
JITUNE     = rel/apple/JITUNE\#FE1000
SOS        = rel/apple/SOS\#FE1000
ROD        = rel/apple/ROD\#FE1000
COPY       = rel/apple/COPY\#FE1000
DEL        = rel/apple/DEL\#FE1000
REN        = rel/apple/REN\#FE1000
CAT        = rel/apple/CAT\#FE1000
NEWDIR     = rel/apple/NEWDIR\#FE1000
TYPE       = rel/apple/TYPE\#FE1000
INITSLOT   = rel/apple/INITSLOT\#FE1000
SIEVE      = rel/SIEVE\#FE1000
PRIMEGAP   = rel/PRIMEGAP\#FE1000
ARGS       = rel/ARGS\#FE1000
MATCHFILES = rel/apple/MATCHFILES\#FE1000
SPIPORT    = rel/apple/SPIPORT\#FE1000
SDFAT      = rel/apple/SDFAT\#FE1000
FATCAT     = rel/apple/FATCAT\#FE1000
FATGET     = rel/apple/FATGET\#FE1000
FATPUT     = rel/apple/FATPUT\#FE1000
FATWDSK    = rel/apple/FATWRITEDSK\#FE1000
FATRDSK    = rel/apple/FATREADDSK\#FE1000
FILEIO_APL = rel/apple/FILEIO\#FE1000
CONIO_APL  = rel/apple/CONIO\#FE1000
INT32      = rel/INT32\#FE1000
INT32TEST  = rel/INT32TEST\#FE1000
SANE       = rel/SANE\#FE1000
FPSTR      = rel/FPSTR\#FE1000
FPU        = rel/FPU\#FE1000
FPU_MF     = rel/FPU_MF\#FE1000
SNDSEQ     = rel/apple/SNDSEQ\#FE1000
PLAYSEQ    = rel/apple/PLAYSEQ\#FE1000
PLAYPCM    = rel/apple/PLAYPCM\#FE1000
SANITY     = rel/SANITY\#FE1000
RPNCALC    = rel/RPNCALC\#FE1000
RPNCALC_MF  = rel/RPNCALC_MF\#FE1000
LZ4        = rel/LZ4\#FE1000
LZ4CAT     = rel/LZ4CAT\#FE1000
MOUSE      = rel/apple/MOUSE\#FE1000
UTHERNET2  = rel/apple/UTHERNET2\#FE1000
UTHERNET   = rel/apple/UTHERNET\#FE1000
ETHERIP    = rel/ETHERIP\#FE1000
INET       = rel/INET\#FE1000
DHCP       = rel/DHCP\#FE1000
HTTPD      = rel/HTTPD\#FE1000
TFTPD      = rel/TFTPD\#FE1000
HGRLIB     = rel/apple/HGRLIB\#FE1000
GRLIB      = rel/apple/GRLIB\#FE1000
DGRLIB     = rel/apple/DGRLIB\#FE1000
VBLANK     = rel/apple/VBLANK\#FE1000
HGRSPRITE  = rel/apple/HGRSPRITE\#FE1000
HGRTILE    = rel/apple/HGRTILE\#FE1000
HGRFONT    = rel/apple/HGRFONT\#FE1000
LINES      = rel/LINES\#FE1000
TURTLE     = rel/TURTLE\#FE1000
SINCOS     = rel/SINCOS\#FE1000
GRAFIX     = rel/apple/GRAFIX\#FE1000
SFM        = rel/apple/SFM\#FE1000
SFMSPRT    = rel/apple/SFMSPRT\#FE1000
GFXDEMO    = rel/apple/GFXDEMO\#FE1000
JOYBUZZ    = rel/apple/JOYBUZZ\#FE1000
PORTIO     = rel/apple/PORTIO\#FE1000
ROGUE      = rel/ROGUE\#FE1000
ROGUEMAP   = rel/ROGUEMAP\#FE1000
ROGUECOMBAT= rel/ROGUECOMBAT\#FE1000
MON        = rel/apple/MON\#FE1000
CONIOTEST  = rel/apple/CONIOTEST\#FE1000
TILETEST   = rel/apple/TILETEST\#FE1000
HGRTEST    = rel/apple/HGRTEST\#FE1000
GRTEST     = rel/apple/GRTEST\#FE1000
DGRTEST    = rel/apple/DGRTEST\#FE1000
MAZE       = rel/apple/MAZE\#FE1000
MEMMGR     = rel/MEMMGR\#FE1000
MEMTEST    = rel/MEMTEST\#FE1000
FIBERTEST  = rel/FIBERTEST\#FE1000
FIBER      = rel/FIBER\#FE1000
LONGJMP    = rel/LONGJMP\#FE1000
HELLO      = hello
TEST       = test
TESTLIB    = testlib
PLASM      = xplasm
PLASMAPLASM = rel/PLASM\#FE1000
CODEOPT    = rel/CODEOPT\#FE1000
PLFORTH    = rel/PLFORTH\#FE1000
HRFORTH    = rel/HRFORTH\#FE1000
HR2FORTH   = rel/HR2FORTH\#FE1000
TX2FORTH   = rel/TX2FORTH\#FE1000
SEXPR      = rel/SEXPR\#FE1000
SMATH      = rel/SMATH\#FE1000
DRAWL      = rel/DRAWL\#FE1000
INCS       = toolsrc/plasm.h toolsrc/tokens.h toolsrc/symbols.h toolsrc/lex.h toolsrc/parse.h toolsrc/codegen.h
OBJS	   = toolsrc/plasm.c toolsrc/parse.c toolsrc/lex.c toolsrc/codegen.c
#
# Image filetypes for Virtual ][
#
PLATYPE	= .\$$ED
BINTYPE	= .BIN
SYSTYPE	= .SYS
TXTTYPE	= .TXT
#
# Image filetypes for CiderPress
#
#RELTYPE	= \#FE1000
#INTERPTYPE	= \#050000
#BINTYPE	= \#060000
#SYSTYPE	= \#FF2000
#TXTTYPE	= \#040000

apple: $(PLVMZP_APL) $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVMJIT) $(PLVM802) $(PLVM03) $(PLVMJIT03) \
$(CMD) $(CMDJIT) $(JIT) $(JIT16) $(JITUNE) $(SOSCMD) $(SOSCMDJIT) $(PLASMAPLASM) $(CODEOPT) $(PLFORTH) \
$(HRFORTH) $(HR2FORTH) $(TX2FORTH) $(SEXPR) $(SMATH) $(DRAWL) $(ZIPCHIP) $(MATCHFILES) $(ARGS) $(MEMMGR) \
$(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(COPY) $(DEL) $(REN) $(CAT) $(NEWDIR) $(TYPE) \
$(INITSLOT) $(SOS) $(ROD) $(SIEVE) $(PRIMEGAP) $(MOUSE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) \
$(HTTPD) $(TFTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(SFM) $(SFMSPRT) $(GRAFIX) $(GFXDEMO) $(LINES) $(TURTLE) \
$(SINCOS) $(HGRTILE) $(HGRFONT) $(HGRSPRITE) $(HGRLIB) $(TILETEST) $(HGRTEST) $(GRLIB) $(DGRLIB) $(VBLANK) \
$(GRTEST) $(DGRTEST) $(MAZE) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) \
$(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(INT32) $(INT32TEST) $(SANE) $(FPSTR) $(FPU) $(FPU_MF) $(SANITY) \
$(LZ4) $(LZ4CAT) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ) $(PLAYPCM) $(CONIOTEST)

	-rm vmsrc/plvmzp.inc

c64: $(PLVMZP_C64) $(PLASM) $(PLVM) $(PLVMC64)
	-rm vmsrc/plvmzp.inc

all: apple c64

clean:
	-rm *FE1000 *FF2000 $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVMJIT) $(PLVM03)
	-rm -rf rel
	-rm samplesrc/*.o samplesrc/*~ samplesrc/*.a
	-rm toolsrc/*.o toolsrc/*~ toolsrc/*.a
	-rm toolsrc/apple/*.o toolsrc/apple/*~ toolsrc/apple/*.a
	-rm toolsrc/c64/*.o toolsrc/c64/*~ toolsrc/c64/*.a
	-rm vmsrc/*.o vmsrc/*~ vmsrc/*.a vmsrc/*.sym
	-rm vmsrc/apple/*.o vmsrc/apple/*~ vmsrc/apple/*.a vmsrc/apple/*.sym
	-rm vmsrc/c64/*.o vmsrc/c64/*~ vmsrc/c64/*.a vmsrc/c64/*.sym
	-rm libsrc/*.o libsrc/*~ libsrc/*.a
	-rm libsrc/apple/*.o libsrc/apple/*~ libsrc/apple/*.a
	-rm libsrc/c64/*.o libsrc/c64/*~ libsrc/c64/*.a
	-rm utilsrc/*.o utilsrc/*~ utilsrc/*.a
	-rm utilsrc/apple/*.o utilsrc/apple/*~ utilsrc/apple/*.a
	-rm utilsrc/c64/*.o utilsrc/c64/*~ utilsrc/c64/*.a

#
# PLASMA compiler: plasm
#
$(PLASM): $(OBJS) $(INCS)
	cc $(OBJS) -o $(PLASM)

$(PLASMAPLASM): toolsrc/plasm.pla toolsrc/lex.pla toolsrc/parse.pla toolsrc/codegen.pla toolsrc/codeseq.plh
	./$(PLASM) -AMOW toolsrc/plasm.pla
	acme --setpc 4094 -o $(PLASMAPLASM) toolsrc/plasm.a

$(CODEOPT): toolsrc/codeopt.pla toolsrc/codeseq.plh
	./$(PLASM) -AMOW toolsrc/codeopt.pla
	acme --setpc 4094 -o $(CODEOPT) toolsrc/codeopt.a

$(HRFORTH): toolsrc/hrforth.pla
	./$(PLASM) -AMOW toolsrc/hrforth.pla
	acme --setpc 4094 -o $(HRFORTH) toolsrc/hrforth.a

$(HR2FORTH): toolsrc/hr2forth.pla
	./$(PLASM) -AMOW toolsrc/hr2forth.pla
	acme --setpc 4094 -o $(HR2FORTH) toolsrc/hr2forth.a

$(TX2FORTH): toolsrc/tx2forth.pla
	./$(PLASM) -AMOW toolsrc/tx2forth.pla
	acme --setpc 4094 -o $(TX2FORTH) toolsrc/tx2forth.a

$(PLFORTH): toolsrc/plforth.pla
	./$(PLASM) -AMOW toolsrc/plforth.pla
	acme --setpc 4094 -o $(PLFORTH) toolsrc/plforth.a

$(SEXPR): lisp/s-expr.pla
	./$(PLASM) -AMOW lisp/s-expr.pla
	acme --setpc 4094 -o $(SEXPR) lisp/s-expr.a

$(SMATH): lisp/s-expr.pla lisp/s-math.pla
	./$(PLASM) -AMOW lisp/s-math.pla
	acme --setpc 4094 -o $(SMATH) lisp/s-math.a

$(DRAWL): lisp/s-expr.pla lisp/drawl.pla
	./$(PLASM) -AMOW lisp/drawl.pla
	acme --setpc 4094 -o $(DRAWL) lisp/drawl.a

#
# PLASMA VMs
#
vmsrc/lib6502/lib6502.a: vmsrc/lib6502/lib6502.h vmsrc/lib6502/lib6502.c
	make -C vmsrc/lib6502

$(PLVM): vmsrc/plvm.h vmsrc/plvm.c vmsrc/cmdsys.c vmsrc/sysio.c vmsrc/a1cffa.c vmsrc/lib6502/lib6502.a
	cc vmsrc/plvm.c vmsrc/cmdsys.c vmsrc/sysio.c vmsrc/a1cffa.c vmsrc/lib6502/lib6502.a -o $(PLVM)

$(PLVMZP_APL): FORCE
	-mkdir -p rel
	-mkdir -p rel/apple
	-rm -f vmsrc/plvmzp.inc
	-cp vmsrc/apple/plvmzp.inc vmsrc/plvmzp.inc

$(PLVMZP_C64): FORCE
	-mkdir -p rel
	-mkdir -p rel/c64
	-rm -f vmsrc/plvmzp.inc
	-cp vmsrc/c64/plvmzp.inc vmsrc/plvmzp.inc

FORCE:

vmsrc/c64/cmd.a: vmsrc/c64/cmd.pla $(PLASM)
	./$(PLASM) -AOW vmsrc/c64/cmd.pla

$(PLVMC64): vmsrc/c64/plvmc64.s vmsrc/c64/cmd.a
	acme -f cbm -o $(PLVMC64) -l vmsrc/c64/plvmc64.sym vmsrc/c64/plvmc64.s

vmsrc/apple/a1cmd.a: vmsrc/apple/a1cmd.pla $(PLASM)
	./$(PLASM) -AOW vmsrc/apple/a1cmd.pla

$(PLVM01): vmsrc/apple/plvm01.s vmsrc/apple/a1cmd.a
	acme -o $(PLVM01) -l vmsrc/apple/plvm01.sym vmsrc/apple/plvm01.s

$(CMD): vmsrc/apple/cmd.pla vmsrc/apple/cmdstub.s $(PLVM02) $(PLASM)
	./$(PLASM) -AOW vmsrc/apple/cmd.pla
	acme --setpc 8192 -o $(CMD)  -l vmsrc/apple/cmd.sym vmsrc/apple/cmdstub.s

$(CMDJIT): vmsrc/apple/cmdjit.pla vmsrc/apple/cmdjitstub.s $(PLVMJIT) $(PLASM)
	./$(PLASM) -AOW vmsrc/apple/cmdjit.pla
	acme --setpc 8192 -o $(CMDJIT) -l vmsrc/apple/cmdjit.sym vmsrc/apple/cmdjitstub.s

$(SOSCMD): vmsrc/apple/soscmd.pla $(PLVM03) $(PLASM)
	./$(PLASM) -AMOW vmsrc/apple/soscmd.pla
	acme --setpc 4094 -o $(SOSCMD) vmsrc/apple/soscmd.a

$(SOSCMDJIT): vmsrc/apple/soscmdjit.pla libsrc/jitcore.pla $(PLVMJIT03) $(PLASM)
	./$(PLASM) -AMOW vmsrc/apple/soscmdjit.pla
	acme --setpc 4094 -o $(SOSCMDJIT) vmsrc/apple/soscmdjit.a

$(PLVM02): vmsrc/apple/plvm02.s
	acme -o $(PLVM02) -l vmsrc/apple/plvm02.sym vmsrc/apple/plvm02.s

$(PLVMJIT): vmsrc/apple/plvmjit02.s
	acme -o $(PLVMJIT) -l vmsrc/apple/plvmjit02.sym vmsrc/apple/plvmjit02.s

$(PLVM802): vmsrc/apple/plvm802.s
	acme -o $(PLVM802) -l vmsrc/apple/plvm802.sym vmsrc/apple/plvm802.s

vmsrc/apple/sossys.a: vmsrc/apple/sossys.pla $(PLASM)
	./$(PLASM) -AOW vmsrc/apple/sossys.pla

$(PLVM03): vmsrc/apple/plvm03.s vmsrc/apple/sossys.a
	acme -o $(PLVM03) -l vmsrc/apple/plvm03.sym vmsrc/apple/plvm03.s

vmsrc/apple/sossysjit.a: vmsrc/apple/sossysjit.pla $(PLASM)
	./$(PLASM) -AOW vmsrc/apple/sossysjit.pla

$(PLVMJIT03): vmsrc/apple/plvmjit03.s vmsrc/apple/sossysjit.a
	acme -o $(PLVMJIT03) -l vmsrc/apple/plvmjit03.sym vmsrc/apple/plvmjit03.s
#
# Sample code
#
test:	samplesrc/test.pla samplesrc/testlib.pla $(PLVM) $(PLASM)
	./$(PLASM) -AMOW samplesrc/test.pla
	acme --setpc 4094 -o $(TEST) samplesrc/test.a
	./$(PLASM) -AMOW samplesrc/testlib.pla
	acme --setpc 4094 -o $(TESTLIB) samplesrc/testlib.a
	./$(PLVM) test

$(ED): toolsrc/ed.pla inc/conio.plh libsrc/apple/conio.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW toolsrc/ed.pla
	acme --setpc 4094 -o $(ED) toolsrc/ed.a

$(MATCHFILES): libsrc/apple/matchfiles.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/matchfiles.pla
	acme --setpc 4094 -o $(MATCHFILES) libsrc/apple/matchfiles.a

$(ARGS): libsrc/args.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/args.pla
	acme --setpc 4094 -o $(ARGS) libsrc/args.a

$(MEMMGR): libsrc/memmgr.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/memmgr.pla
	acme --setpc 4094 -o $(MEMMGR) libsrc/memmgr.a

$(MEMTEST): samplesrc/memtest.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/memtest.pla
	acme --setpc 4094 -o $(MEMTEST) samplesrc/memtest.a

$(FIBER): libsrc/fiber.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/fiber.pla
	acme --setpc 4094 -o $(FIBER) libsrc/fiber.a

$(LINES): libsrc/lines.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/lines.pla
	acme --setpc 4094 -o $(LINES) libsrc/lines.a

$(TURTLE): libsrc/turtle.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/turtle.pla
	acme --setpc 4094 -o $(TURTLE) libsrc/turtle.a

$(SINCOS): libsrc/sincos.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/sincos.pla
	acme --setpc 4094 -o $(SINCOS) libsrc/sincos.a

$(FIBERTEST): samplesrc/fibertest.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/fibertest.pla
	acme --setpc 4094 -o $(FIBERTEST) samplesrc/fibertest.a

$(LONGJMP): libsrc/longjmp.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/longjmp.pla
	acme --setpc 4094 -o $(LONGJMP) libsrc/longjmp.a

$(SFM): samplesrc/sfm.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/sfm.pla
	acme --setpc 4094 -o $(SFM) samplesrc/sfm.a

$(SFMSPRT): samplesrc/sfmsprt.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/sfmsprt.pla
	acme --setpc 4094 -o $(SFMSPRT) samplesrc/sfmsprt.a

$(ROGUE): samplesrc/rogue.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/rogue.pla
	acme --setpc 4094 -o $(ROGUE) samplesrc/rogue.a

$(ROGUECOMBAT): samplesrc/rogue.combat.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/rogue.combat.pla
	acme --setpc 4094 -o $(ROGUECOMBAT) samplesrc/rogue.combat.a

$(ROGUEMAP): samplesrc/rogue.map.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/rogue.map.pla
	acme --setpc 4094 -o $(ROGUEMAP) samplesrc/rogue.map.a

hello:	samplesrc/hello.pla $(PLVM) $(PLASM)
	./$(PLASM) -AMOW samplesrc/hello.pla
	acme --setpc 4094 -o $(HELLO) samplesrc/hello.a
	./$(PLVM) HELLO

$(CONIOTEST): samplesrc/coniotest.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/coniotest.pla
	acme --setpc 4094 -o $(CONIOTEST) samplesrc/coniotest.a

$(ROD): samplesrc/rod.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/rod.pla
	acme --setpc 4094 -o $(ROD) samplesrc/rod.a

$(SIEVE): samplesrc/sieve.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMW samplesrc/sieve.pla
	acme --setpc 4094 -o $(SIEVE) samplesrc/sieve.a

$(PRIMEGAP): samplesrc/primegap.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMW samplesrc/primegap.pla
	acme --setpc 4094 -o $(PRIMEGAP) samplesrc/primegap.a

$(INT32): libsrc/int32.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/int32.pla
	acme --setpc 4094 -o $(INT32) libsrc/int32.a

$(INT32TEST): samplesrc/int32test.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/int32test.pla
	acme --setpc 4094 -o $(INT32TEST) samplesrc/int32test.a

$(SANE): libsrc/sane.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/sane.pla
	acme --setpc 4094 -o $(SANE) libsrc/sane.a

$(FPSTR): libsrc/fpstr.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/fpstr.pla
	acme --setpc 4094 -o $(FPSTR) libsrc/fpstr.a

$(FPU): libsrc/fpu.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/fpu.pla
	acme --setpc 4094 -o $(FPU) libsrc/fpu.a

$(FPU_MF): libsrc/fpu_mf.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/fpu_mf.pla
	acme --setpc 4094 -o $(FPU_MF) libsrc/fpu_mf.a

$(SANITY): samplesrc/sanity.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/sanity.pla
	acme --setpc 4094 -o $(SANITY) samplesrc/sanity.a

$(LZ4): libsrc/lz4.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/lz4.pla
	acme --setpc 4094 -o $(LZ4) libsrc/lz4.a

$(RPNCALC): samplesrc/rpncalc.pla libsrc/fpu.pla inc/fpu.plh libsrc/fpstr.pla inc/fpstr.plh inc/conio.plh $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/rpncalc.pla
	acme --setpc 4094 -o $(RPNCALC) samplesrc/rpncalc.a

$(RPNCALC_MF): samplesrc/rpncalc.pla libsrc/fpu_mf.pla inc/fpu.plh libsrc/fpstr.pla inc/fpstr.plh inc/conio.plh $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/rpncalc.pla
	acme --setpc 4094 -o $(RPNCALC_MF) samplesrc/rpncalc.a

$(ETHERIP): libsrc/etherip.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/etherip.pla
	acme --setpc 4094 -o $(ETHERIP) libsrc/etherip.a

$(INET): libsrc/inet.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/inet.pla
	acme --setpc 4094 -o $(INET) libsrc/inet.a

$(DHCP): libsrc/dhcp.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/dhcp.pla
	acme --setpc 4094 -o $(DHCP) libsrc/dhcp.a

$(HTTPD): samplesrc/httpd.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/httpd.pla
	acme --setpc 4094 -o $(HTTPD) samplesrc/httpd.a

$(TFTPD): utilsrc/tftpd.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW utilsrc/tftpd.pla
	acme --setpc 4094 -o $(TFTPD) utilsrc/tftpd.a

$(MOUSE): libsrc/apple/mouse.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/mouse.pla
	acme --setpc 4094 -o $(MOUSE) libsrc/apple/mouse.a

$(UTHERNET): libsrc/apple/uthernet.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/uthernet.pla
	acme --setpc 4094 -o $(UTHERNET) libsrc/apple/uthernet.a

$(UTHERNET2): libsrc/apple/uthernet2.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/uthernet2.pla
	acme --setpc 4094 -o $(UTHERNET2) libsrc/apple/uthernet2.a

$(FILEIO_APL): libsrc/apple/fileio.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/fileio.pla
	acme --setpc 4094 -o $(FILEIO_APL) libsrc/apple/fileio.a

$(CONIO_APL): libsrc/apple/conio.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/conio.pla
	acme --setpc 4094 -o $(CONIO_APL) libsrc/apple/conio.a

$(FILEIO_C64): libsrc/c64/fileio.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/c64/fileio.pla
	acme --setpc 4094 -o $(FILEIO_C64) libsrc/c64/fileio.a

$(CONIO_C64): libsrc/c64/conio.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/c64/conio.pla
	acme --setpc 4094 -o $(CONIO_C64) libsrc/c64/conio.a

$(SNDSEQ): libsrc/apple/sndseq.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/sndseq.pla
	acme --setpc 4094 -o $(SNDSEQ) libsrc/apple/sndseq.a

$(PLAYSEQ): samplesrc/playseq.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/playseq.pla
	acme --setpc 4094 -o $(PLAYSEQ) samplesrc/playseq.a

$(PLAYPCM): samplesrc/playpcm.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/playpcm.pla
	acme --setpc 4094 -o $(PLAYPCM) samplesrc/playpcm.a

$(GRAFIX): libsrc/apple/grafix.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/grafix.pla
	acme --setpc 4094 -o $(GRAFIX) libsrc/apple/grafix.a

$(GFXDEMO): samplesrc/gfxdemo.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/gfxdemo.pla
	acme --setpc 4094 -o $(GFXDEMO) samplesrc/gfxdemo.a

$(FATCAT): samplesrc/fatcat.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/fatcat.pla
	acme --setpc 4094 -o $(FATCAT) samplesrc/fatcat.a

$(FATGET): samplesrc/fatget.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/fatget.pla
	acme --setpc 4094 -o $(FATGET) samplesrc/fatget.a

$(FATPUT): samplesrc/fatput.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/fatput.pla
	acme --setpc 4094 -o $(FATPUT) samplesrc/fatput.a

$(FATWDSK): samplesrc/fatwritedsk.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/fatwritedsk.pla
	acme --setpc 4094 -o $(FATWDSK) samplesrc/fatwritedsk.a

$(FATRDSK): samplesrc/fatreaddsk.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW samplesrc/fatreaddsk.pla
	acme --setpc 4094 -o $(FATRDSK) samplesrc/fatreaddsk.a

$(SDFAT): libsrc/apple/sdfat.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/sdfat.pla
	acme --setpc 4094 -o $(SDFAT) libsrc/apple/sdfat.a

$(SPIPORT): libsrc/apple/spiport.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/spiport.pla
	acme --setpc 4094 -o $(SPIPORT) libsrc/apple/spiport.a

$(JOYBUZZ): libsrc/apple/joybuzz.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/joybuzz.pla
	acme --setpc 4094 -o $(JOYBUZZ) libsrc/apple/joybuzz.a

$(PORTIO): libsrc/apple/portio.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/portio.pla
	acme --setpc 4094 -o $(PORTIO) libsrc/apple/portio.a

$(HGRLIB): libsrc/apple/hgrlib.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/hgrlib.pla
	acme --setpc 4094 -o $(HGRLIB) libsrc/apple/hgrlib.a

$(GRLIB): libsrc/apple/grlib.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/grlib.pla
	acme --setpc 4094 -o $(GRLIB) libsrc/apple/grlib.a

$(DGRLIB): libsrc/apple/dgrlib.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/dgrlib.pla
	acme --setpc 4094 -o $(DGRLIB) libsrc/apple/dgrlib.a

$(VBLANK): libsrc/apple/vblank.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/vblank.pla
	acme --setpc 4094 -o $(VBLANK) libsrc/apple/vblank.a

$(TILETEST): samplesrc/tiletest.pla $(PLASM)
	./$(PLASM) -AMOW samplesrc/tiletest.pla
	acme --setpc 4094 -o $(TILETEST) samplesrc/tiletest.a

$(HGRTILE): libsrc/apple/hgrtile.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/hgrtile.pla
	acme --setpc 4094 -o $(HGRTILE) libsrc/apple/hgrtile.a

$(HGRFONT): libsrc/apple/hgrfont.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/hgrfont.pla
	acme --setpc 4094 -o $(HGRFONT) libsrc/apple/hgrfont.a

$(HGRSPRITE): libsrc/apple/hgrsprite.pla $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/hgrsprite.pla
	acme --setpc 4094 -o $(HGRSPRITE) libsrc/apple/hgrsprite.a

$(MAZE): samplesrc/maze.pla $(HGRLIB) $(HGRTILE) $(PLASM)
	./$(PLASM) -AMOW samplesrc/maze.pla
	acme --setpc 4094 -o $(MAZE) samplesrc/maze.a

$(HGRTEST): samplesrc/hgrtest.pla $(HGRLIB) $(PLASM)
	./$(PLASM) -AMOW samplesrc/hgrtest.pla
	acme --setpc 4094 -o $(HGRTEST) samplesrc/hgrtest.a

$(GRTEST): samplesrc/grtest.pla $(GRLIB) $(PLASM)
	./$(PLASM) -AMOW samplesrc/grtest.pla
	acme --setpc 4094 -o $(GRTEST) samplesrc/grtest.a

$(DGRTEST): samplesrc/dgrtest.pla $(DGRLIB) $(PLASM)
	./$(PLASM) -AMOW samplesrc/dgrtest.pla
	acme --setpc 4094 -o $(DGRTEST) samplesrc/dgrtest.a

$(LZ4CAT): utilsrc/lz4cat.pla inc/lz4.plh $(PLVM02) $(PLASM)
	./$(PLASM) -AMOW utilsrc/lz4cat.pla
	acme --setpc 4094 -o $(LZ4CAT) utilsrc/lz4cat.a

$(MON): utilsrc/apple/mon.pla $(PLASM)
	./$(PLASM) -AMOW utilsrc/apple/mon.pla
	acme --setpc 4094 -o $(MON) utilsrc/apple/mon.a

$(COPY): utilsrc/apple/copy.pla $(MATCHFILES) $(PLASM)
	./$(PLASM) -AMOW utilsrc/apple/copy.pla
	acme --setpc 4094 -o $(COPY) utilsrc/apple/copy.a

$(DEL): utilsrc/apple/del.pla $(MATCHFILES) $(PLASM)
	./$(PLASM) -AMOW utilsrc/apple/del.pla
	acme --setpc 4094 -o $(DEL) utilsrc/apple/del.a

$(REN): utilsrc/apple/ren.pla $(PLASM)
	./$(PLASM) -AMOW utilsrc/apple/ren.pla
	acme --setpc 4094 -o $(REN) utilsrc/apple/ren.a

$(CAT): utilsrc/apple/cat.pla $(MATCHFILES) $(PLASM)
	./$(PLASM) -AMOW utilsrc/apple/cat.pla
	acme --setpc 4094 -o $(CAT) utilsrc/apple/cat.a

$(NEWDIR): utilsrc/apple/newdir.pla $(PLASM)
	./$(PLASM) -AMOW utilsrc/apple/newdir.pla
	acme --setpc 4094 -o $(NEWDIR) utilsrc/apple/newdir.a

$(TYPE): utilsrc/apple/type.pla $(PLASM)
	./$(PLASM) -AMOW utilsrc/apple/type.pla
	acme --setpc 4094 -o $(TYPE) utilsrc/apple/type.a

$(INITSLOT): utilsrc/apple/initslot.pla $(PLASM)
	./$(PLASM) -AMOW utilsrc/apple/initslot.pla
	acme --setpc 4094 -o $(INITSLOT) utilsrc/apple/initslot.a

$(SOS): utilsrc/apple/sos.pla $(PLVM03) $(PLASM)
	./$(PLASM) -AMOW utilsrc/apple/sos.pla
	acme --setpc 4094 -o $(SOS) utilsrc/apple/sos.a

$(ZIPCHIP): utilsrc/apple/zipchip.pla $(PLASM)
	./$(PLASM) -AMOW utilsrc/apple/zipchip.pla
	acme --setpc 4094 -o $(ZIPCHIP) utilsrc/apple/zipchip.a

$(JIT): libsrc/apple/jit.pla libsrc/jitcore.pla $(PLVMJIT) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/jit.pla
	acme --setpc 4094 -o $(JIT) libsrc/apple/jit.a

$(JIT16): libsrc/apple/jit16.pla libsrc/jit16core.pla $(PLVMJIT) $(PLASM)
	./$(PLASM) -AMOW libsrc/apple/jit16.pla
	acme --setpc 4094 -o $(JIT16) libsrc/apple/jit16.a

$(JITUNE): utilsrc/apple/jitune.pla $(PLVMJIT) $(PLASM)
	./$(PLASM) -AMOW utilsrc/apple/jitune.pla
	acme --setpc 4094 -o $(JITUNE) utilsrc/apple/jitune.a
