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
Comments