Advertisement
SteelGolem

BASIC ASM 7

Jan 1st, 2022 (edited)
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.99 KB | None | 0 0
  1. 10 REM TODO: INTEGER VALUES "#123"
  2. 100 PRINT:PRINT "ASSEMBLING...";
  3. 110 READ M0$
  4. 120 READ M0:M=M0
  5. 130 READ DN
  6. 140 FOR D=1 TO DN
  7. 150 READ D$
  8. 160 OP$=LEFT$(D$,3)
  9. 170 OP=-1
  10. 200 IF OP$="ADC" THEN OP=105
  11. 210 IF OP$="BNE" THEN OP=208
  12. 220 IF OP$="CLC" THEN OP=24
  13. 230 IF OP$="CLD" THEN OP=216
  14. 240 IF OP$="CMP" THEN OP=205
  15. 250 IF OP$="DEC" THEN OP=206
  16. 260 IF OP$="INC" THEN OP=238
  17. 270 IF OP$="INX" THEN OP=232
  18. 280 IF OP$="JMP" THEN OP=76
  19. 290 IF OP$="JSR" THEN OP=32
  20. 300 IF OP$="LDA" THEN OP=169
  21. 310 IF OP$="LDX" THEN OP=162
  22. 320 IF OP$="RTS" THEN OP=96
  23. 330 IF OP$="SBC" THEN OP=233
  24. 340 IF OP$="SED" THEN OP=248
  25. 350 IF OP$="STA" THEN OP=141
  26. 800 VL$="":LD=LEN(D$)
  27. 810 IF LD>3 THEN VL$=RIGHT$(D$,LD-4)
  28. 820 IF VL$="" THEN GOSUB 2000
  29. 830 IF LEN(VL$)=3 THEN GOSUB 2100
  30. 840 IF LEN(VL$)=5 THEN GOSUB 2200
  31. 850 NEXT D
  32. 860 PRINT "DONE."
  33. 870 PRINT "EXECUTE!":SYS M0
  34. 880 END
  35. 2000 REM -- POKE OP (NO VALUE) --
  36. 2010 POKE M,OP:M=M+1
  37. 2020 RETURN
  38. 2100 REM -- POKE OP $XX --
  39. 2110 POKE M,OP:M=M+1
  40. 2120 GOSUB 4100
  41. 2130 RETURN
  42. 2200 REM -- POKE OP $XXXX --
  43. 2210 POKE M,OP:M=M+1
  44. 2220 GOSUB 4000
  45. 2230 RETURN
  46. 4000 REM -- POKE $XXXX VL$ --
  47. 4010 HX$=MID$(VL$,4,2)
  48. 4020 GOSUB 6000
  49. 4030 POKE M,HX:M=M+1
  50. 4040 REM FALL THROUGH FOR HIGH BYTE
  51. 4100 REM -- POKE $XX VL$ --
  52. 4110 HX$=MID$(VL$,2,2)
  53. 4120 GOSUB 6000
  54. 4130 POKE M,HX:M=M+1
  55. 4140 RETURN
  56. 6000 REM -- 1 BYTE STR TO INT --
  57. 6010 REM IN:HX$ OUT:HX
  58. 6020 C0=ASC("0"):CA=ASC("A")
  59. 6030 C$=RIGHT$(HX$,1):C=ASC(C$)
  60. 6040 IF C$<"A" THEN HX=C-C0
  61. 6050 IF C$>="A" THEN HX=10+C-CA
  62. 6060 C$=LEFT$(HX$,1):C=ASC(C$)
  63. 6070 IF C$<"A" THEN HX=HX+16*(C-C0)
  64. 6080 IF C$>="A" THEN HX=HX+16*(10+C-CA)
  65. 6090 RETURN
  66. 8000 REM ---- ASM ----
  67. 8010 DATA "$8000",32768 :REM MEM START
  68. 8020 DATA 8 :REM LINE COUNT
  69. 8030 DATA "LDA $41" :REM +00
  70. 8040 DATA "JSR $FFD2" :REM +02
  71. 8050 DATA "LDA $42" :REM +05
  72. 8060 DATA "JSR $FFD2" :REM +07
  73. 8070 DATA "LDA $43" :REM +0A
  74. 8080 DATA "JSR $FFD2" :REM +0C
  75. 8090 DATA "INC $D020" :REM +0F
  76. 8100 DATA "JMP $800F" :REM +12
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement