home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / DECODE.SDA / CRUNCH.SRC (.txt) < prev    next >
Encoding:
Commodore BASIC  |  2019-04-13  |  4.7 KB  |  130 lines

  1. 10 *= $C44A
  2. 20 ;CRUNCH.SRC
  3. 30 .S
  4. 40 .D CRUNCH
  5. 50 ;
  6. 60 TXTTAB = $2B
  7. 70 VARTAB = $2D
  8. 80 ARYTAB = $2F
  9. 90 STREND = $30
  10. 100 ;
  11. 110 CHRGET = $73
  12. 120 TXTPTR = $7A
  13. 130 CHRPUT = $81
  14. 140 PUTPTR = $88
  15. 150 ;
  16. 160 MAXLEN = $50
  17. 170 MAX =$FA
  18. 180 LENGTH = $FB
  19. 190 SABUF = $FC
  20. 200 ;
  21. 210 WARMST = $A002
  22. 220 LINKPRG = $A533
  23. 230 STROUT = $AB1E
  24. 240 ;
  25. 250 ADC44A LDX #$17; SAVE CHRGET, SET UP CHRPUT ROUTINE
  26. 260 SAVEIT LDA CHRGET,X:STA SAVEBUF,X:DEX:BPL SAVEIT:LDX #$07:CLC
  27. 270 LDA TXTTAB:ADC #$FF:STA CHRGET,X:INX:LDA TXTTAB+1:ADC #$FF:STA CHRGET,X:INX
  28. 280 LDA #$60:STA CHRGET,X
  29. 290 PUTIT LDA CHRGET,X:STA CHRPUT,X:DEX:BPL PUTIT
  30. 300 LDA #PUTPTR:STA CHRPUT+1:LDA #PUTPTR+1:STA CHRPUT+5:LDA #$8D:STA CHRPUT+6
  31. 310 ;
  32. 320 ; INITIALIZE COUNTER TO END-OF-LINE
  33. 330 LDA #MAXLEN:STA MAX:STA LENGTH
  34. 340 ;
  35. 350 ;CHECK FOR $AC IN "*= $TART" LINE, SKIP OVER DEFS IF FOUND
  36. 360 LDY #$05:LDA (TXTPTR),Y:CMP #$AC:BNE NEWFILE:INY:INY:INY:INY:LDX #$00
  37. 370 ;
  38. 380 START1 LDA (TXTPTR),Y:STA SABUF,X:INY:INX:CPX #$04:BCC START1
  39. 390 ;
  40. 400 ;ASCII HEX DIGITS NOW AT SABUF, TXTPTR STILL AT BASIC-1
  41. 410 DEY:TYA:CLC:ADC TXTPTR:STA TXTPTR:BCC START2:INC TXTPTR+1
  42. 420 ;
  43. 430 ;NEXT CALL TO CHRGET FETCHES THE BYTE FOLLOWING THE START ADDRESS
  44. 440 ;NOW FIND THE MATCHING STRING IN THE FIRST LINE OF PROGRAM CODE
  45. 450 START2 LDX #$00
  46. 460 START3 JSR CHRGET:BNE START5:JSR CHRGET:JSR CHRGET:BNE START4
  47. 470 ;
  48. 480 ;FOUND THIRD ZERO BYTE, NO START-OF-CODE SO PRINT MESSAGE AND QUIT
  49. 490 LDA #<NOCODE:LDY #>NOCODE:JSR STROUT:LDX #$17:JMP DONE2
  50. 500 ;
  51. 510 ;FOUND HIBYTE OF LINE LINK SO DISCARD LINE NUMBER AND FETCH BYTE OF LINE
  52. 520 START4 JSR CHRGET:JSR CHRGET:JMP START2
  53. 530 ;
  54. 540 START5 CMP SABUF,X:BNE START2:INX:CPX #$04:BCC START3:LDA #$0A:STA LENGTH
  55. 550 LDA #<CRUNCHING:LDY #>CRUNCHING:JSR STROUT
  56. 560 ;
  57. 570 ;FOUND, SO SET UP CHRPUT AND FALL THROUGH IN MIDLINE
  58. 580 LDA TXTPTR:STA PUTPTR:LDA TXTPTR+1:STA PUTPTR+1
  59. 590 ;
  60. 600 MIDLINE JSR CHRGET:BEQ ENDLINE:BPL MIDLINE1:INC LENGTH; TOKENIZED "OR"
  61. 610 MIDLINE1 JSR CHRPUT:INC LENGTH:BNE MIDLINE
  62. 620 ;
  63. 630 ;STEP CHRPUT BACK IF AT BEGINNING OF NEW FILE
  64. 640 NEWFILE LDA PUTPTR:BNE NEWFILE1:DEC PUTPTR+1
  65. 650 NEWFILE1 DEC PUTPTR
  66. 660 LDA #<CRUNCHING:LDY #>CRUNCHING:JSR STROUT
  67. 670 ;
  68. 680 ;CHECK TO SEE IF END OF PROGRAM
  69. 690 ENDLINE LDY #$02:LDA (TXTPTR),Y:BNE ENDLINE1:JMP DONE
  70. 700 ;
  71. 710 ;CHECK NEXT LINE FOR PSEUDOP, JUMP, RTS/RTI OR LABEL
  72. 720 ENDLINE1 LDY #$05:LDA (TXTPTR),Y:CMP #$2E:BEQ LABEL1; "." PSEUDOP
  73. 730 CMP #$3B:BEQ LABEL1; ";" PSEUDOP
  74. 740 CMP #$4A:BEQ ENDLINE2; J, CHECK M
  75. 750 CMP #$52:BNE ENDLINE3; R, CHECK T
  76. 760 ENDLINE2 INY:LDA (TXTPTR),Y:CMP #$4D:BEQ STOPLINE:CMP #$54:BEQ STOPLINE
  77. 770 ; NOT JM/RT, CAN'T BE JT, RM, JA OR RA SO FALL THROUGH
  78. 780 ENDLINE3 CMP #$41:BNE ENDLINE4; IF NOT "A" THEN NOT LABEL
  79. 790 ;
  80. 800 ;CHECK FOR "DEF" TOKEN (ADEFXX LABEL) OR "D" (ADXXXX LABEL)
  81. 810 INY:LDA (TXTPTR),Y:CMP #$96:BEQ LABEL:CMP #$44:BNE ENDLINE4
  82. 820 ;
  83. 830 ;CHECK FOR SPACE FOLLOWING ADC INSTRUCTION, OTHERWISE IT'S A LABEL
  84. 840 INY:INY:LDA (TXTPTR),Y:CMP #$20:BNE LABEL
  85. 850 ENDLINE4 JMP ADDLINE
  86. 860 ;
  87. 870 ;LABELLED LINES MAY BE .BYTE, RTS/RTI/JMP:  LEAVE IN ONE LINE IF FOUND
  88. 880 LABEL INY:LDA (TXTPTR),Y:CMP #$20:BNE LABEL; GET PAST THE LABEL
  89. 890 INY:LDA (TXTPTR),Y:CMP #$2E:BEQ PSEUDOP; .BYTE LINE
  90. 900 CMP #$4A:BEQ LABEL0:CMP #$52:BNE NEWLINE; J OR R ELSE SIMPLE LABEL
  91. 910 LABEL0 INY:LDA (TXTPTR),Y:CMP #$54:BEQ PSEUDOP:CMP #$4D:BNE NEWLINE; T OR M
  92. 920 LABEL1 BEQ PSEUDOP; JMPS TO ONE-LINERS
  93. 930 ;
  94. 940 ;IF UNLABELLED JMP/RTS/RTI FOUND, STOP LINE AFTER ADDING THIS INSTRUCTION
  95. 950 STOPLINE INY:LDA (TXTPTR),Y:BNE STOPLINE:DEY:DEY:DEY:TYA:CLC:ADC LENGTH
  96. 960 CMP MAX:BCS PSEUDOP:LDA MAX:STA LENGTH:BNE ADDLINE1
  97. 970 ;
  98. 980 ;START NEW LINE: MOVE LINE LINKS AND NUMBER AND (null) TO MIDLINE
  99. 990 NEWLINE LDA #$00:JSR CHRPUT:LDX #$03:STX LENGTH; ALLOW FOR LINE # EXPANSION
  100. 1000 NEWLINE1 JSR CHRGET:JSR CHRPUT:INC LENGTH:DEX:BPL NEWLINE1:JMP MIDLINE
  101. 1010 ;
  102. 1020 PSEUDOP LDA #$00:JSR CHRPUT:LDA MAX:STA LENGTH:LDX #$03
  103. 1030 PSEUDOP1 JSR CHRGET:JSR CHRPUT:DEX:BPL PSEUDOP1
  104. 1040 PSEUDOP2 JSR CHRGET:BNE PSEUDOP3:JMP ENDLINE
  105. 1050 PSEUDOP3 JSR CHRPUT:BNE PSEUDOP2
  106. 1060 ;
  107. 1070 ADDLINE INY:LDA (TXTPTR),Y:BNE ADDLINE; .Y-3 = LENGTH TO ADD
  108. 1080 DEY:DEY:DEY:TYA:CLC:ADC LENGTH:CMP MAX:BCS NEWLINE;CHECK FOR SPACE
  109. 1090 ;
  110. 1100 ;APPEND THE LINE AND DISCARD THE LINKS AND NUMBER
  111. 1110 ADDLINE1 LDA #$3A:JSR CHRPUT:INC LENGTH:LDX #$03
  112. 1120 ADDLINE2 JSR CHRGET:DEX:BPL ADDLINE2:JMP MIDLINE
  113. 1130 ;
  114. 1140 DONE LDX #$03:LDA #$00
  115. 1150 DONE1 JSR CHRPUT:DEX:BPL DONE1
  116. 1160 LDA PUTPTR:STA VARTAB:STA ARYTAB:STA STREND
  117. 1170 LDA PUTPTR+1:STA VARTAB+1:STA ARYTAB+1:STA STREND+1:LDX #$17
  118. 1180 DONE2 LDA SAVEBUF,X:STA CHRGET,X:DEX:BPL DONE2
  119. 1190 JSR LINKPRG:LDA #<CRUNCHED:LDY #>CRUNCHED:JSR STROUT:JMP (WARMST)
  120. 1200 SAVEBUF .BYTE 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  121. 1210 NOCODE .BYTE "[147][213]NABLE TO MATCH HEX DIGITS OF START":.BYTE 13
  122. 1220 .BYTE "ADDRESS (*= $XXXX) TO LABEL OF FIRST":.BYTE 13
  123. 1230 .BYTE "LINE OF CODE FOLLOWING DEFINITIONS.":.BYTE 13
  124. 1240 .BYTE "[211]HOULD BE ":.BYTE 34:.BYTE "AD0801":.BYTE 34:.BYTE "TYPE LABEL"
  125. 1250 .BYTE 13 0
  126. 1260 CRUNCHING .BYTE "[195]RUNCHING...":.BYTE 13 0
  127. 1270 CRUNCHED .BYTE "[145][195]RUNCHED!   ":.BYTE 13 0 0 0
  128. 1280 ;
  129. 1290 .END CRUNCH.SRC
  130.