Guest User

Untitled

a guest
Dec 9th, 2020
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.93 KB | None | 0 0
  1. 10opsize%=24
  2. 20DIM prog% 650*opsize%
  3. 30REM Install a BRK handler to fix the error message
  4. 40oldbrk%=!&202 AND &FFFF
  5. 50DIM newbrk% 32
  6. 60DIM msg% 16
  7. 70P%=msg%
  8. 80[EQUB 255:EQUS "Done":EQUB 0:]
  9. 90P%=newbrk%
  10. 210[\ Change the msg address and continue to the old BRK vec
  11. 220LDA #msg% AND 255:STA &FD:LDA #msg% DIV 256:STA &FE:JMP oldbrk%:]
  12. 225nops%=0
  13. 230P%=prog%
  14. 240f%=OPENIN("data")
  15. 250IF EOF#(f%) THEN GOTO 430
  16. 260op$=CHR$(BGET#(f%))+CHR$(BGET#(f%))+CHR$(BGET#(f%))
  17. 270space%=BGET#(f%)
  18. 280sign%=BGET#(f%)
  19. 290num%=0
  20. 300REPEAT
  21. 310digit%=BGET#(f%)
  22. 320IF digit%>=ASC("0") THEN num%=num%*10+digit%-ASC("0")
  23. 330UNTIL digit%<32
  24. 340IF sign%=ASC("-") THEN num%=-num%
  25. 360[LDA #0
  26. 370STA P%-2
  27. 380]
  28. 390IF op$="acc" THEN PROCacc
  29. 400IF op$="nop" THEN PROCjmpnop(6)
  30. 410IF op$="jmp" THEN PROCjmpnop(3)
  31. 415nops%=nops%+1
  32. 420GOTO 250
  33. 430[RTS:]
  34. 440addr%=-opsize%
  35. 450found%=FALSE
  36. 460!&70=0
  37. 470ON ERROR GOTO 520
  38. 480?&202=newbrk% AND 255
  39. 490?&203=newbrk% DIV 256
  40. 500CALL prog%
  41. 510found%=TRUE
  42. 520?&202=oldbrk% AND &FF
  43. 530?&203=oldbrk% DIV 256
  44. 540ON ERROR OFF
  45. 550IF addr%<0 THEN PRINT "Part 1: ";!&70
  46. 555IF found% THEN PRINT "Part 2: ";!&70:END
  47. 560IF addr%>=0 PROCflipjmpnop(addr%+prog%)
  48. 561FOR I%=0 TO nops%-1
  49. 562prog%?(I%*opsize%)=&A9
  50. 563NEXT
  51. 570REPEAT
  52. 580addr%=addr%+opsize%
  53. 585IF (addr%-prog%) DIV opsize% >= nops% THEN PRINT "Not found":END
  54. 590UNTIL prog%?(addr%+5)=&4C
  55. 600PROCflipjmpnop(addr%+prog%)
  56. 610GOTO 460
  57. 630DEF PROCacc
  58. 640[
  59. 650CLC
  60. 660LDX #&FC
  61. 670LDA &70 + 4, X
  62. 680ADC P%+10-&FC, X
  63. 690STA &70 + 4, X
  64. 700INX
  65. 720BNE P%-8
  66. 725BEQ P%+6
  67. 730EQUD num%
  68. 780]
  69. 785!P%=num%
  70. 790ENDPROC
  71. 800DEF PROCjmpnop(offset%)
  72. 810[JMP P%+offset%:]
  73. 820[JMP P%-8+num%*opsize%:]
  74. 830FOR I%=1 TO opsize%-11
  75. 840[NOP:]
  76. 850NEXT
  77. 860ENDPROC
  78. 870DEF PROCflipjmpnop(addr%)
  79. 880LOCAL oaddr%
  80. 890oaddr%=!(addr%+6) AND &FFFF
  81. 900IF oaddr%=addr%+8 THEN oaddr%=addr%+11 ELSE oaddr%=addr%+8
  82. 910addr%?6 = oaddr% AND &FF
  83. 920addr%?7 = oaddr% DIV 256
  84. 930ENDPROC
  85.  
Advertisement
Add Comment
Please, Sign In to add comment