100 M0$="$8000" :REM MEM START
110 M0=32768:M=M0
120 FOR D=1 TO 2
130 :READ D$
140 :OP$=LEFT$(D$,3)
150 :IF OP$="INC" THEN GOSUB 1000
160 :IF OP$="RTS" THEN GOSUB 1100
170 :IF OP$="JMP" THEN GOSUB 1200
180 NEXT D
190 SYS M0 :REM EXECUTE!
200 END
1000 REM ---- INC ----
1010 POKE M,238:M=M+1
1020 GOSUB 4000
1030 RETURN
1100 REM ---- RTS ----
1110 POKE M,96:M=M+1
1120 RETURN
1200 REM ---- JMP ----
1201 REM TODO: THERE ARE 2 JMP CODES!
1210 POKE M,76:M=M+1
1220 GOSUB 4000
1230 RETURN
4000 REM -- POKE 2 BYTE ADDR --
4010 L=LEN(D$)
4020 HX$=MID$(D$,L-1,2)
4030 GOSUB 6000
4040 POKE M,HX:M=M+1
4050 HX$=MID$(D$,L-3,2)
4060 GOSUB 6000
4070 POKE M,HX:M=M+1
4080 RETURN
6000 REM -- 1 BYTE STR TO INT --
6010 REM IN:HX$ OUT:HX
6020 C0=ASC("0"):CA=ASC("A")
6030 C$=RIGHT$(HX$,1):C=ASC(C$)
6040 IF C$<"A" THEN HX=C-C0
6050 IF C$>="A" THEN HX=10+C-CA
6060 C$=LEFT$(HX$,1):C=ASC(C$)
6070 IF C$<"A" THEN HX=HX+16*(C-C0)
6080 IF C$>="A" THEN HX=HX+16*(10+C-CA)
6090 RETURN
8000 REM ---- ASM ----
8010 DATA "INC $D020"
8020 DATA "JMP $8000"
Comments