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

  1. 100 POKE 55,0:POKE 56,40:CLR
  2. 110 PRINT CHR$(147)
  3. 120 A$="": INPUT "INSTRUCTIONS Y OR <CR>/NO";A$
  4. 130 IF A$="" THEN 390
  5. 140 PRINT CHR$(147);
  6. 150 PRINT "1) THE DISASSEMBLER CAN TAKE CODE"
  7. 160 PRINT "   FROM MEMORY OR DISK.  IF FROM"
  8. 170 PRINT "   DISK,IT MUST BE A PROGRAM FILE"
  9. 180 PRINT "   WHERE THE FIRST TWO BYTES ARE"
  10. 190 PRINT "   ARE USED AS THE START ADRESS."
  11. 200 PRINT
  12. 210 PRINT "2) THE AREA OF MEMORY STARTING FROM"
  13. 220 PRINT "   10 K CAN BE USED AS A BUFFER TO"
  14. 230 PRINT "   DISASSEMBLE FROM."
  15. 240 PRINT
  16. 250 PRINT "3) THE PROGRAM PROMPTS THE USER"
  17. 260 PRINT "   FOR ALL INPUT WHEN NEEDED.ENTER A"
  18. 270 PRINT "   <CR> TO CHANGE PREVIOUS OPTION"
  19. 280 PRINT "   OR IF VALUE NOT APPLICABLE."
  20. 290 PRINT
  21. 300 PRINT "4) PRESSING THE 'SHIFT KEY' DURING"
  22. 310 PRINT "   OUTPUT HALTS THE SCREEN SCROLL"
  23. 320 PRINT "   UNTIL IT IS RELEASED."
  24. 330 PRINT
  25. 340 PRINT "   PRESSING THE '*' TERMINATES THE"
  26. 350 PRINT "   CURRENT DISASSEMBLY AND ALLOWS"
  27. 360 PRINT "   NEW PARAMETERS TO BE ENTERED."
  28. 370 PRINT:PRINT "PRESS ANY KEY TO CONTINUE"
  29. 380 A$="":GET A$:IF A$="" THEN380
  30. 390 PRINT CHR$(147)
  31. 400 PRINT "READING DATA PLEASE WAIT ....."
  32. 410 DIM MN$(255),AM%(255)
  33. 420 FORI=0TO255: READ MN$(I),AM%(I): NEXT
  34. 430 PRINT CHR$(147)
  35. 440 LC=0:FC=0:SP=0:FP=0:D=0:FG=0:ED=0
  36. 450 A$="":INPUT"INPUT DEVICE: DISK OR MEMORY";A$
  37. 460 IF LEFT$(A$,1)="D" THEN FG=1:OPEN 15,8,15:GOTO 500
  38. 470 IF LEFT$(A$,1)="M" THEN 630
  39. 480 IF A$="" THEN POKE 55,0:POKE 56,158:CLR:END
  40. 490 GOTO450
  41. 500 A$="":INPUT"ENTER NAME OF FILE";A$
  42. 510 IF A$="" THEN CLOSE 15:GOTO 450
  43. 520 OPEN 5,8,5,A$+",P,R":INPUT#15,E1,E$
  44. 530 IF E1<>0 THEN PRINT E$:CLOSE 5:GOTO 500
  45. 540 S1=2100:S2=2200:S3=2300
  46. 550 GET#5,T1$,T2$
  47. 560 LC=ASC(T1$+CHR$(0))+256*ASC(T2$+CHR$(0))
  48. 570 A$="":PRINT "ENTER LOAD ADRESS IF DIFFERENT"
  49. 580 INPUT "   FROM THAT ON DISK";A$
  50. 590 IF A$="" THEN 620
  51. 600 A=VAL(A$):IF A<0 OR A>65535 THEN 570
  52. 610 LC=A
  53. 620 GOTO 780
  54. 630 A=-1:INPUT"ENTER START ADDRESS";A
  55. 640 IF A=-1 THEN 450
  56. 650 IF A<0 OR A>65535 THEN 630
  57. 660 LC=A
  58. 670 A$="":INPUT "ENTER LOAD ADRESS IF DIFFERENT";A$
  59. 680 IF A$="" THEN 710
  60. 690 A=VAL(A$):IF A<0 OR A>65535 THEN 670
  61. 700 D=LC-A
  62. 710 A=0:INPUT"ENTER END ADDRESS";A
  63. 720 IF A>0 AND A<65536 THEN SP=A:GOTO 770
  64. 730 IF A>65535 THEN SP=65535:GOTO 770
  65. 740 A=0:INPUT"ENTER # OF BYTES";A
  66. 750 IF A=0 THEN 710
  67. 760 SP=LC+A:IF SP>65535 THEN SP=65535
  68. 770 S1=3100:S2=3200:S3=3300
  69. 780 A$="":PRINT"OUTPUT DEVICE:"
  70. 790 INPUT"     SCREEN,DISK,OR PRINTER";A$
  71. 800 IF LEFT$(A$,1)="S" THEN OPEN 6,3:GOTO 980
  72. 810 IF LEFT$(A$,1)<>"P" THEN 860
  73. 820 OPEN 6,4,6:A$="":INPUT"ENTER HEADER OR <CR>";A$
  74. 830 IF A$="" THEN 980
  75. 840 PRINT#6,CHR$(14);SPC(INT((110-LEN(A$))/4));A$:PRINT#6," ":PRINT#6," ":FP=1
  76. 850 FC=57:GOTO 980
  77. 860 IF LEFT$(A$,1)<>"D" THEN 780
  78. 870 IF FG<>1 THEN OPEN 15,8,15
  79. 880 A$="":INPUT"ENTER OUTPUT FILE NAME";A$
  80. 890 IF A$="" THEN 780
  81. 900 OPEN 6,8,6,A$+",S,W":INPUT#15,E1,E$
  82. 910 IF E1=0 THEN 980
  83. 920 CLOSE6
  84. 930 IF E1<>63 THEN PRINT E$:GOTO 880
  85. 940 B$="":PRINT"FILE EXISTS,"
  86. 950 INPUT"     DO YOU WISH TO OVERWRITE";B$
  87. 960 IF LEFT$(B$,1)<>"Y" THEN 880
  88. 970 OPEN 6,8,6,"@:"+A$+",S,W"
  89. 980 IF S1=2100 THEN GOSUB 2020
  90. 990 IF S1=3100 THEN GOSUB 2150
  91. 1000 PRINT#6,LC-D;SPC(6-LEN(STR$(LC)));OC;SPC(4-LEN(STR$(OC)));:LC=LC+1
  92. 1010 ON AM%(OC) GOTO1310,1020,1040,1060,1080,1100,1130,1160,1190,1210,1230,1240,1260,1290
  93. 1020 IF S2=2200 THEN GOSUB 2050:PRINT#6,"(";E;",X )";:GOTO1330
  94. 1030 IF S2=3200 THEN GOSUB 2170:PRINT#6,"(";E;",X )";:GOTO1330
  95. 1040 IF S2=2200 THEN GOSUB 2050:PRINT#6,"(";E;"),Y";:GOTO1330
  96. 1050 IF S2=3200 THEN GOSUB 2170:PRINT#6,"(";E;"),Y";:GOTO1330
  97. 1060 IF S3=2300 THEN GOSUB 2090:PRINT#6," ";E;",Y";:GOTO1330
  98. 1070 IF S3=3300 THEN GOSUB 2200:PRINT#6," ";E;",Y";:GOTO1330
  99. 1080 IF S2=2200 THEN GOSUB 2050:PRINT#6," ";E;",Y";:GOTO1330
  100. 1090 IF S2=3200 THEN GOSUB 2170:PRINT#6," ";E;",Y";:GOTO1330
  101. 1100 IF S2=2200 THEN GOSUB 2050:PRINT#6,"#";E;
  102. 1110 IF S2=3200 THEN GOSUB 2170:PRINT#6,"#";E;
  103. 1120 GOTO1330
  104. 1130 IF S2=2200 THEN GOSUB 2050:PRINT#6," ";E;
  105. 1140 IF S2=3200 THEN GOSUB 2170:PRINT#6," ";E;
  106. 1150 GOTO1330
  107. 1160 IF S3=2300 THEN GOSUB 2090:PRINT#6," ";E;
  108. 1170 IF S3=3300 THEN GOSUB 2200:PRINT#6," ";E;
  109. 1180 GOTO1330
  110. 1190 IF S3=2300 THEN GOSUB 2090:PRINT#6," ";E;",X";:GOTO1330
  111. 1200 IF S3=3300 THEN GOSUB 2200:PRINT#6," ";E;",X";:GOTO1330
  112. 1210 IF S2=2200 THEN GOSUB 2050:PRINT#6," ";E;",X";:GOTO1330
  113. 1220 IF S2=3200 THEN GOSUB 2170:PRINT#6," ";E;",X";:GOTO1330
  114. 1230 PRINT#6,SPC(11);MN$(OC);"     ";"A";:GOTO1330
  115. 1240 IF S3=2300 THEN GOSUB 2090:PRINT#6,"(";E;")";:GOTO1330
  116. 1250 IF S3=3300 THEN GOSUB 2200:PRINT#6,"(";E;")";:GOTO1330
  117. 1260 IF S2=2200 THEN GOSUB 2050:IF E>127 THEN E=E-256
  118. 1270 IF S2=3200 THEN GOSUB 2170:IF E>127 THEN E=E-256
  119. 1280 PRINT#6," ";LC+E;:GOTO1330
  120. 1290 E=OC:PRINT#6,SPC(11);MN$(OC);"   ";E;
  121. 1300 GOTO1330
  122. 1310 PRINT#6,"           ";
  123. 1320 PRINT#6,MN$(OC);
  124. 1330 PRINT#6:FC=FC-1:IF FC=0 AND FP=1 THEN PRINT#6,CHR$(11):FC=60
  125. 1340 GET A$:IF A$="*" THEN1370
  126. 1350 SYS 65439:IF PEEK(653)=1 THEN 1350
  127. 1360 IF ED<>1 THEN 980
  128. 1370 CLOSE6:CLOSE5:CLOSE15:GOTO440
  129. 1380 DATA BRK,1,ORA,2,.BYT,14,.BYT,14
  130. 1390 DATA .BYT,14,ORA,7,ASL,7,.BYT,14
  131. 1400 DATA PHP,1,ORA,6,ASL,11,.BYT,14
  132. 1410 DATA .BYT,14,ORA,8,ASL,8,.BYT,14
  133. 1420 DATA BPL,13,ORA,3,.BYT,14,.BYT,14
  134. 1430 DATA .BYT,14,ORA,10,ASL,10,.BYT,14
  135. 1440 DATA CLC,1,ORA,4,.BYT,14,.BYT,14
  136. 1450 DATA .BYT,14,ORA,9,ASL,9,.BYT,14
  137. 1460 DATA JSR,8,AND,2,.BYT,14,.BYT,14
  138. 1470 DATA BIT,7,AND,7,ROL,7,.BYT,14
  139. 1480 DATA PLP,1,AND,6,ROL,11,.BYT,14
  140. 1490 DATA BIT,8,AND,8,ROL,8,.BYT,14
  141. 1500 DATA BMI,13,AND,3,.BYT,14,.BYT,14
  142. 1510 DATA .BYT,14,AND,10,ROL,10,.BYT,14
  143. 1520 DATA SEC,1,AND,4,.BYT,14,.BYT,14
  144. 1530 DATA .BYT,14,AND,9,ROL,9,.BYT,14
  145. 1540 DATA RTI,1,EOR,2,.BYT,14,.BYT,14
  146. 1550 DATA .BYT,14,EOR,7,LSR,7,.BYT,14
  147. 1560 DATA PHA,1,EOR,6,LSR,11,.BYT,14
  148. 1570 DATA JMP,8,EOR,8,LSR,8,.BYT,14
  149. 1580 DATA BVC,13,EOR,3,.BYT,14,.BYT,14
  150. 1590 DATA .BYT,14,EOR,10,LSR,10,.BYT,14
  151. 1600 DATA CLI,1,EOR,4,.BYT,14,.BYT,14
  152. 1610 DATA .BYT,14,EOR,9,LSR,9,.BYT,14
  153. 1620 DATA RTS,1,ADC,2,.BYT,14,.BYT,14
  154. 1630 DATA .BYT,14,ADC,7,ROR,7,.BYT,14
  155. 1640 DATA PLA,1,ADC,6,ROR,11,.BYT,14
  156. 1650 DATA JMP,12,ADC,8,ROR,8,.BYT,14
  157. 1660 DATA BVS,13,ADC,3,.BYT,14,.BYT,14
  158. 1670 DATA .BYT,14,ADC,10,ROR,10,.BYT,14
  159. 1680 DATA SEI,1,ADC,4,.BYT,14,.BYT,14
  160. 1690 DATA .BYT,14,ADC,9,ROR,9,.BYT,14
  161. 1700 DATA .BYT,14,STA,2,.BYT,14,.BYT,14
  162. 1710 DATA STY,7,STA,7,STX,7,.BYT,14
  163. 1720 DATA DEY,1,.BYT,14,TXA,1,.BYT,14
  164. 1730 DATA STY,8,STA,8,STX,8,.BYT,14
  165. 1740 DATA BCC,13,STA,3,.BYT,14,.BYT,14
  166. 1750 DATA STY,10,STA,10,STX,5,.BYT,14
  167. 1760 DATA TYA,1,STA,4,TXS,1,.BYT,14
  168. 1770 DATA .BYT,14,STA,9,.BYT,14,.BYT,14
  169. 1780 DATA LDY,6,LDA,2,LDX,6,.BYT,14
  170. 1790 DATA LDY,7,LDA,7,LDX,7,.BYT,14
  171. 1800 DATA TAY,1,LDA,6,TAX,1,.BYT,14
  172. 1810 DATA LDY,8,LDA,8,LDX,8,.BYT,14
  173. 1820 DATA BCS,13,LDA,3,.BYT,14,.BYT,14
  174. 1830 DATA LDY,10,LDA,10,LDX,10,.BYT,14
  175. 1840 DATA CLV,1,LDA,4,TSX,1,.BYT,14
  176. 1850 DATA LDY,9,LDA,9,LDX,4,.BYT,14
  177. 1860 DATA CPY,6,CMP,2,.BYT,14,.BYT,14
  178. 1870 DATA CPY,7,CMP,7,DEC,7,.BYT,14
  179. 1880 DATA INY,1,CMP,6,DEX,1,.BYT,14
  180. 1890 DATA CPY,8,CMP,8,DEC,8,.BYT,14
  181. 1900 DATA BNE,13,CMP,3,.BYT,14,.BYT,14
  182. 1910 DATA .BYT,14,CMP,10,DEC,10,.BYT,14
  183. 1920 DATA CLD,1,CMP,4,.BYT,14,.BYT,14
  184. 1930 DATA .BYT,14,CMP,9,DEC,9,.BYT,14
  185. 1940 DATA CPX,6,SBC,2,.BYT,14,.BYT,14
  186. 1950 DATA CPX,7,SBC,7,INC,7,.BYT,14
  187. 1960 DATA INX,1,SBC,6,NOP,1,.BYT,14
  188. 1970 DATA CPX,8,SBC,8,INC,8,.BYT,14
  189. 1980 DATA BEQ,13,SBC,3,.BYT,14,.BYT,14
  190. 1990 DATA .BYT,14,SBC,10,INC,10,.BYT,14
  191. 2000 DATA SED,1,SBC,4,.BYT,14,.BYT,14
  192. 2010 DATA .BYT,14,SBC,9,INC,9,.BYT,14
  193. 2020 GET#5,TE$:IF ST>0 THEN ED=1
  194. 2030 OC=ASC(TE$+CHR$(0))
  195. 2040 RETURN
  196. 2050 GET#5,TE$:IF ST>0 THEN ED=1
  197. 2060 E=ASC(TE$+CHR$(0))
  198. 2070 PRINT#6,E;SPC(10-LEN(STR$(E)));MN$(OC);"   ";:LC=LC+1
  199. 2080 RETURN
  200. 2090 GET#5,TE$,TF$:IF ST>0 THEN ED=1
  201. 2100 TE=ASC(TE$+CHR$(0)):TF=ASC(TF$+CHR$(0))
  202. 2110 E=TE+256*TF:LC=LC+2
  203. 2120 PRINT#6,TE;SPC(4-LEN(STR$(TE)));TF;SPC(5-LEN(STR$(TF)));
  204. 2130 PRINT#6,MN$(OC);"   ";
  205. 2140 RETURN
  206. 2150 OC=PEEK(LC):IF LC+1>SP THEN ED=1
  207. 2160 RETURN
  208. 2170 E=PEEK(LC):PRINT#6,E;SPC(10-LEN(STR$(E)));MN$(OC);"   ";
  209. 2180 IF LC+1>SP THEN ED=1
  210. 2190 LC=LC+1:RETURN
  211. 2200 E1=PEEK(LC):E2=PEEK(LC+1)
  212. 2210 E=E1+256*E2:IF LC+2>SP THEN ED=1
  213. 2220 PRINT#6,E1;SPC(4-LEN(STR$(E1)));E2;SPC(5-LEN(STR$(E2)));MN$(OC);"   ";
  214. 2230 LC=LC+2:RETURN
  215.