100 PRINT:PRINT "ASSEMBLING..."; 110 READ M0$ 120 READ M0:M=M0 130 READ DN 140 FOR D=1 TO DN 150 :READ D$ 160 :OP$=LEFT$(D$,3) 170 :IF OP$="INC" THEN GOSUB 1000 180 :IF OP$="RTS" THEN GOSUB 1100 190 :IF OP$="JMP" THEN GOSUB 1200 200 :IF OP$="DEC" THEN GOSUB 1300 210 :IF OP$="LDA" THEN GOSUB 1400 220 :IF OP$="JSR" THEN GOSUB 1500 230 :IF OP$="STA" THEN GOSUB 1600 240 :IF OP$="CMP" THEN GOSUB 1700 250 :IF OP$="BNE" THEN GOSUB 1800 260 :IF OP$="LDX" THEN GOSUB 1900 270 :IF OP$="INX" THEN GOSUB 2000 280 :IF OP$="CLC" THEN GOSUB 2100 290 :IF OP$="ADC" THEN GOSUB 2200 300 :IF OP$="SED" THEN GOSUB 2300 310 :IF OP$="SBC" THEN GOSUB 2400 320 :IF OP$="CLD" THEN GOSUB 2500 330 NEXT D 340 PRINT "DONE." 350 PRINT "EXECUTE!" 360 SYS M0 :REM EXECUTE! 370 END 1000 REM ---- INC $XXXX ---- 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 $XXXX ---- 1210 POKE M,76:M=M+1 1220 GOSUB 4000 1230 RETURN 1300 REM ---- DEC $XXXX ---- 1310 POKE M,206:M=M+1 1320 GOSUB 4000 1330 RETURN 1400 REM ---- LDA $XX ---- 1410 POKE M,169:M=M+1 1420 GOSUB 4100 1430 RETURN 1500 REM ---- JSR $XXXX ---- 1510 POKE M,32:M=M+1 1520 GOSUB 4000 1530 RETURN 1600 REM ---- STA $XXXX ---- 1610 POKE M,141:M=M+1 1620 GOSUB 4000 1630 RETURN 1700 REM ---- CMP $XXXX ---- 1710 POKE M,205:M=M+1 1720 GOSUB 4000 1730 RETURN 1800 REM ---- BNE $XX ---- 1810 POKE M,208:M=M+1 1820 GOSUB 4100 1830 RETURN 1900 REM ---- LDX $XX ---- 1910 POKE M,162:M=M+1 1920 GOSUB 4100 1930 RETURN 2000 REM ---- INX ---- 2010 POKE M,232:M=M+1 2020 RETURN 2100 REM ---- CLC ---- 2110 POKE M,24:M=M+1 2120 RETURN 2200 REM ---- ADC $XX ---- 2210 POKE M,105:M=M+1 2220 GOSUB 4100 2230 RETURN 2300 REM ---- SED ---- 2310 POKE M,248:M=M+1 2320 RETURN 2400 REM ---- SBC $XX ---- 2410 POKE M,233:M=M+1 2420 GOSUB 4100 2430 RETURN 2500 REM ---- CLD ---- 2510 POKE M,216:M=M+1 2520 RETURN 4000 REM -- POKE 2 BYTES @ END OF D$ -- 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 4100 REM -- POKE 1 BYTE @ END OF D$ -- 4110 L=LEN(D$) 4120 HX$=MID$(D$,L-1,2) 4130 GOSUB 6000 4140 POKE M,HX:M=M+1 4150 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 "$8000",32768 :REM MEM START 8020 DATA 8 :REM LINE COUNT 8030 DATA "LDA $41" :REM +00 8040 DATA "JSR $FFD2" :REM +02 8050 DATA "LDA $42" :REM +05 8060 DATA "JSR $FFD2" :REM +07 8070 DATA "LDA $43" :REM +0A 8080 DATA "JSR $FFD2" :REM +0C 8090 DATA "INC $D020" :REM +0F 8100 DATA "JMP $800F" :REM +12