10 REM TODO: INTEGER VALUES "#123" 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 OP=-1 200 IF OP$="ADC" THEN OP=105 210 IF OP$="BNE" THEN OP=208 220 IF OP$="CLC" THEN OP=24 230 IF OP$="CLD" THEN OP=216 240 IF OP$="CMP" THEN OP=205 250 IF OP$="DEC" THEN OP=206 260 IF OP$="INC" THEN OP=238 270 IF OP$="INX" THEN OP=232 280 IF OP$="JMP" THEN OP=76 290 IF OP$="JSR" THEN OP=32 300 IF OP$="LDA" THEN OP=169 310 IF OP$="LDX" THEN OP=162 320 IF OP$="RTS" THEN OP=96 330 IF OP$="SBC" THEN OP=233 340 IF OP$="SED" THEN OP=248 350 IF OP$="STA" THEN OP=141 800 VL$="":LD=LEN(D$) 810 IF LD>3 THEN VL$=RIGHT$(D$,LD-4) 820 IF VL$="" THEN GOSUB 2000 830 IF LEN(VL$)=3 THEN GOSUB 2100 840 IF LEN(VL$)=5 THEN GOSUB 2200 850 NEXT D 860 PRINT "DONE." 870 PRINT "EXECUTE!":SYS M0 880 END 2000 REM -- POKE OP (NO VALUE) -- 2010 POKE M,OP:M=M+1 2020 RETURN 2100 REM -- POKE OP $XX -- 2110 POKE M,OP:M=M+1 2120 GOSUB 4100 2130 RETURN 2200 REM -- POKE OP $XXXX -- 2210 POKE M,OP:M=M+1 2220 GOSUB 4000 2230 RETURN 4000 REM -- POKE $XXXX VL$ -- 4010 HX$=MID$(VL$,4,2) 4020 GOSUB 6000 4030 POKE M,HX:M=M+1 4040 REM FALL THROUGH FOR HIGH BYTE 4100 REM -- POKE $XX VL$ -- 4110 HX$=MID$(VL$,2,2) 4120 GOSUB 6000 4130 POKE M,HX:M=M+1 4140 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