home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / DISKROMSOURCE4.SDA / DISK / ROM10 (.txt) next >
Encoding:
Commodore BASIC  |  2019-04-13  |  10.1 KB  |  440 lines

  1. 1 INY
  2. 3 INY; SKIP CHECKSUM
  3. 5 LDA $0628; SECT NUM
  4. 7 STA $0300,Y
  5. 9 INY
  6. 11 LDA $51; TRK NUM
  7. 13 STA $0300,Y
  8. 15 INY
  9. 17 LDA $13,X; ID # 2
  10. 19 INY:STA $0300,Y
  11. 21 LDA $12,X; ID # 1
  12. 23 STA $0300,Y
  13. 25 INY
  14. 27 LDA #$0F; PAD BYTES
  15. 29 STA $0300,Y
  16. 31 INY
  17. 33 STA $0300,Y
  18. 35 INY
  19. 37 LDA #$00; CALCULATE HEADER CHECKSUM
  20. 39 EOR $02FA,Y
  21. 41 EOR $02FB,Y
  22. 43 EOR $02FC,Y
  23. 45 EOR $02FD,Y
  24. 47 STA $02F9,Y; CHECKSUM
  25. 49 INC $0268; SECT COUNT
  26. 51 LDA $0268
  27. 53 CMP $43; # SECTS THIS TRK
  28. 55 BCC $FC3F; MORE IMAGES
  29. 57 TYA; # SECTS
  30. 59 PHA
  31. 61 INX; BECOMES #$01
  32. 63 TXA
  33. 65 STA $0500,X; DUMMY CHAR
  34. 67 INX
  35. 69 BNE $FC88; FILE BUFF WITH #$01
  36. 71 LDA #$03; HI BYTE BUFF 0300
  37. 73 STA $31
  38. 75 JSR $FE30; CONVERT HEADERS TO GCR
  39. 77 PLA
  40. 79 TAY
  41. 81 DEY
  42. 83 JSR $FDE5; CONVERT OVERFLOW TO GCR
  43. 85 JSR $FDF5
  44. 87 LDA #$05:STA $31
  45. 89 JSR $FE59; CALCULATE DATA BLK CHECKSUM
  46. 91 STA $3A
  47. 93 JSR $F78F; CONVERT DUMMY DATA BLK TO GCR (ALL #$01)
  48. 95 ; ** BEGIN FORMATTING THE TRK **
  49. 97 LDA #$00
  50. 99 STA $32; POINTS TI 1ST HEADER
  51. 101 JSR $FE0E; CLEAR THE TRK
  52. 103 LDA #$FF; SYNC CHAR
  53. 105 STA $1C01; READ/WRITE PORT
  54. 107 LDX #$05; 5 SYNCS
  55. 109 BVC $FCB8; WAIT
  56. 111 CLV
  57. 113 DEX
  58. 115 BNE $FCB8; MORE SYNC MARKS
  59. 117 LDX #$0A; 10 BYTES
  60. 119 LDY $32; START OF GCR HEADERS
  61. 121 BVC $FCC2; WAIT
  62. 123 CLV
  63. 125 LDA $0300,Y
  64. 127 STA $1C01; WRITE HEADER BYTE TO DSK
  65. 129 INY
  66. 131 DEX
  67. 133 BNE $FCC2; MORE TO WRITE THIS HEADER
  68. 135 LDX #$09; HEADER GAP SIZE 9 BYTES
  69. 137 BVC $FCD1
  70. 139 CLV
  71. 141 LDA #$55; HEADER GAP BYTE
  72. 143 STA $1C01; WRITE TO DSK
  73. 145 DEX
  74. 147 BNE $FCD1; MORE GAP BYTES
  75. 149 LDA #$FF; SYNC MARK
  76. 151 LDX #$05; 5 SYNC MARKS
  77. 153 BVC $FCE0; WAIT
  78. 155 CLV
  79. 157 STA $1C01; WRITE SYNC TO TRK
  80. 159 DEX
  81. 161 BNE $FCE0; MORE SYNCS
  82. 163 LDX #$BB; POINT TO OVERFLOW BUFF
  83. 165 BVC $FCEB:CLV
  84. 167 LDA $0100,X
  85. 169 STA $1C01; WRITE TO DSK
  86. 171 INX
  87. 173 BNE $FCEB; MORE OVERFLOW
  88. 175 LDY #$00; POINTS TO DATA BUFF
  89. 177 BVC $FCF9; WAIT
  90. 179 CLV
  91. 181 LDA ($30),Y
  92. 183 STA $1C01; WRITE TO DSK
  93. 185 INY
  94. 187 BNE $FCF9; MORE DATA BUFF
  95. 189 LDA #$55; GAP BETWEEN DATA & HEADER
  96. 191 LDX $0626; HOLDS # OF GAP BYTES
  97. 193 BVC $FD09; WAIT
  98. 195 CLV
  99. 197 STA 41C01; WRITE GAP TO TRK
  100. 199 DEX
  101. 201 BNE $FD09; MORE GAPS
  102. 203 LDA $32
  103. 205 CLC
  104. 207 ADC #$0A; 10 BYTES POINT NEXT HEADER
  105. 209 STA $32
  106. 211 DEC $0628; SECT CTR
  107. 213 BNE $FCB1; WRITE MORE SECTS ON TRK
  108. 215 BVC $FD1E; WAIT FOR LAST BYTE
  109. 217 CLV
  110. 219 BVC $FD21
  111. 221 CLV
  112. 223 JSR $FE00; TURN OFF WRITE
  113. 225 ; ** VERIFY FORMAT **
  114. 227 LDA #$C8; NUM OF TRYS
  115. 229 STA $0623
  116. 231 LDA #$00; SET PTRS TO $0300
  117. 233 STA $30
  118. 235 LDA #$03
  119. 237 STA $31
  120. 239 LDA $43; # OF SECTS THIS TRK
  121. 241 STA $0628
  122. 243 JSR $F556; WAIT FOR SYNC
  123. 245 LDX #$0A; HEADER CHAR TO READ
  124. 247 LDY #$00
  125. 249 BVC $FD40; WAIT
  126. 251 CLV
  127. 253 LDA $1C01; READ THE BYTE
  128. 255 CMP ($30),Y
  129. 257 BNE $FD58; NO MATCH
  130. 259 INY
  131. 261 DEX
  132. 263 BNE $FD40; MORE HEADER TO READ
  133. 265 CLC
  134. 267 LDA $30
  135. 269 ADC #$0A; POINT TO NEXT HEADER
  136. 271 STA $30
  137. 273 JMP $FD62; CHECK THE DATA BLK
  138. 275 DEC $0623; BAD VERIFY
  139. 277 BNE $FD2C; MORE TRYS (null) BACK
  140. 279 LDA #$06; TRIED 200 TIMES ERROR
  141. 281 JMP $FDD3; ERROR HANDLING
  142. 283 JSR $F556; WAIT FOR SYNC
  143. 285 LDY #$BB; START OVERFLOW BUFF
  144. 287 BVC $FD67; WAIT
  145. 289 CLV
  146. 291 LDA $1C01; READ A BYTE
  147. 293 CMP $0100,Y
  148. 295 BNE $FD58; NO MATCH THIS DATA BUFF
  149. 297 INY
  150. 299 BNE $FD67; MORE TO CHECK THIS SECT
  151. 301 LDX #$FC; # OF REST OF SEC BYTES LESS OFF BYTES
  152. 303 BVC $FD77; WAIT
  153. 305 CLV
  154. 307 LDA $1C01; READ A BYTE
  155. 309 CMP $0500,Y
  156. 311 BNE $FD58; NO MATCH
  157. 313 INY
  158. 315 DEX
  159. 317 BNE $FD77; MORE SECT TO CHECK
  160. 319 DEC $0628; # OF SEC THIS TRK
  161. 321 BNE $FD39; MORE SECTS TO CHECK
  162. 323 INC $51; TRK CTR
  163. 325 LDA $51
  164. 327 CMP #$24; # OF TRKS + 1
  165. 329 BCS $FD96; DONE END VERIFY
  166. 331 JMP $F99C; STEP HEAD NEXT TRK
  167. 333 LDA #$FF
  168. 335 STA $51
  169. 337 LDA #$00
  170. 339 STA $50; (null)OD LOAD NO GCR IN BUFF
  171. 341 LDA #$01; OK ERROR CODE
  172. 343 JMP $F969; ERROR HANDLING
  173. 345 ; ** CLEAN TRK WITH SYNC MARKS **
  174. 347 LDA $1C0C; PERIPHIAL CONTROL REG
  175. 349 AND #$1F; LATCH SIGNAL
  176. 351 ORA #$C0
  177. 353 STA $1C0C
  178. 355 LDA #$FF; OUTPUT PORT
  179. 357 STA $1C03; DATA DIRECTION REG
  180. 359 STA $1C01; SYNC MARK
  181. 361 LDX #$28; HI CTR
  182. 363 LDY #$00
  183. 365 BVC $FDB9; WAIT
  184. 367 CLV
  185. 369 DEY
  186. 371 BNE $FDB9
  187. 373 DEX
  188. 375 BNE $FDB9
  189. 377 RTS
  190. 379 ; ** WRITE # OF BYTES ($0621/2) TO DSK **
  191. 381 LDX $0621
  192. 383 LDY $0622
  193. 385 BVC $FDC9; WAIT
  194. 387 CLV
  195. 389 DEX
  196. 391 BNE $FDC9
  197. 393 DEY
  198. 395 BPL $FDC9
  199. 397 RTS
  200. 399 ; ** FORMAT ERROR HANDLING **
  201. 401 DEC $0620; TRY CTR
  202. 403 BEQ $FDDB; SEND ERROR
  203. 405 JMP $F99C; TRY AGAIN
  204. 407 LDY #$FF
  205. 409 STY $51; TRK CTR
  206. 411 INY
  207. 413 STY $50; DATA IN BUFF GCR FLG
  208. 415 JMP $F969; ERROR HANDLING
  209. 417 ; ** MOVE BYTES IN BUFFS **
  210. 419 LDA $0300,Y
  211. 421 STA $0345,Y; MOVED DOWN
  212. 423 DEY
  213. 425 BNE $FDE5; MORE TO MOVE
  214. 427 LDA $0300; LAST BYTE TO MOVE IS 1ST
  215. 429 STA $0345
  216. 431 RTS
  217. 433 LDY #$44
  218. 435 LDA $01BB,Y
  219. 437 STA ($30),Y; FROM OVERFLOW BUFF
  220. 439 DEY
  221. 441 BPL $FDF7; MORE TO MOVE
  222. 443 RTS
  223. 445 ; ** TURN OFF WRIYE MODE **
  224. 447 LDA $1C0C; SET BITS 5 6 & 7
  225. 449 ORA #$E0
  226. 451 STA $1C0C; PERIPHIAL CONTROL REG
  227. 453 LDA #$00; INPUT PORT
  228. 455 STA $1C03; DATA DIRECTION REG
  229. 457 RTS
  230. 459 ; ** CLEAR TRK WITH NON SYNC CHARS **
  231. 461 LDA $1C0C; PERIPHIAL CONTROL REG
  232. 463 AND #$1F; FORCE LOW FOR OUTPUT
  233. 465 ORA #$C0
  234. 467 STA $1C0C; PERIPHIAL CONTROL REG
  235. 469 LDA #$FF; DTAT OUT MODE
  236. 471 STA $1C03; DATA DIRECTION REG
  237. 473 LDA #$55; GAP BYTE
  238. 475 STA $1C01; WRITE TO DSK PORT
  239. 477 LDX #$28; CTRS
  240. 479 LDY #$00
  241. 481 BVC $FE26; WAIT
  242. 483 CLV
  243. 485 DEY
  244. 487 BNE $FE26; MORE NON SYNC
  245. 489 DEX
  246. 491 BNE $FE26
  247. 493 RTS
  248. 495 ; ** CONVERT HEADER IMAGES IN $0300 TO GCR W/OUT HEADER ID **
  249. 497 LDA #$00; LO BYTE PTRS
  250. 499 STA $30
  251. 501 STA $2E
  252. 503 STA $36
  253. 505 LDA #$BB; 1ST BYTE OVERFLOW
  254. 507 STA $34; HI BYTE PTRS
  255. 509 LDA $31
  256. 511 STA $2F
  257. 513 LDA #$01
  258. 515 STA $31
  259. 517 LDY $36
  260. 519 LDA ($2E),Y
  261. 521 STA $52; GCR CONVERSION AREA
  262. 523 INY
  263. 525 LDA ($2E),Y
  264. 527 STA $53
  265. 529 INY
  266. 531 LDA ($2E),Y
  267. 533 STA $54
  268. 535 INY
  269. 537 LDA ($2E),Y
  270. 539 STA $55
  271. 541 INY
  272. 543 BEQ $FE64
  273. 545 STY $36; SAVE INDEX
  274. 547 JSR $F6D0; CONVERT TO 5 GCR BYTES
  275. 549 JMP $FE44; CONVERT AND STORE LAST 4 BYTES
  276. 551 JMP $F6D0; MAIN IRQ ROUT
  277. 553 ; ** MAIN IRQ ROUT **
  278. 555 ; CHECKED EVERY 10 MILLISECONDS FOR SOMETHING TO DO **
  279. 557 PHA; SAVE REGISTERS
  280. 559 TXA
  281. 561 PHA
  282. 563 TYA
  283. 565 PHA
  284. 567 LDA $180D; INTERRUPT FLG REG
  285. 569 AND #$02
  286. 571 BEQ $FE76; NO ATTENTION SIG FROM 64
  287. 573 JSR $E853; BUS HANDLING ROUTS
  288. 575 LDA $1C0D; INTERRUPT FLG REG
  289. 577 ASL; PUSH BIT 6
  290. 579 BPL $FE75; NO DSK CONTROLLER ROUTS
  291. 581 JSR $F2B0; DSK CONTROLLER ROUTS
  292. 583 PLA; RESTORE REGISTERS
  293. 585 TAY
  294. 587 PLA
  295. 589 TAX
  296. 591 PLA
  297. 593 RTI
  298. 595 ; ** CONSTANTS IN ROM **
  299. 597 ;$FE85  #$12 DIRECTORY TRK NUM
  300. 599 ;$FE86  #$04 NUM OF BYTES/TRK IN BAM
  301. 601 ;$FE87  #$04 OFFSET OF BAM IN THE SECT
  302. 603 ;$FE88  #$90 OFFSET OF DSK NAME IN BAM SECT
  303. 605 ; ** CMMAND TABLE **
  304. 607 ;$FE89  #$56  V VALIDATE DSK
  305. 609 ;         49  I INIT DSK
  306. 611 ;         44  D DUPLICATE DSK (NOT ON 1541)
  307. 613 ;         4D  M MEM OPERATION
  308. 615 ;         42  B BLK OPERATION
  309. 617 ;         55  U USER JUMP CMNDS
  310. 619 ;         50  P POSISTION (REL FILES)
  311. 621 ;         26  & UTILITY LOADER
  312. 623 ;         43  C COPY FILE (NOT ON 1541)
  313. 625 ;         52  R RENAME FILE
  314. 627 ;         53  S SCRATCH A FILE
  315. 629 ;         4E  N NEW (FORMAT) DSK
  316. 631 ; ** CMND JUMP TABLE **
  317. 633 ;       LO BYTE        HI BYTE  COMND
  318. 635 ;$FE95   #$84   $FEA1   #$ED      V
  319. 637 ;          05             D0      I
  320. 639 ;          C1             C8      D
  321. 641 ;          F8             CA      M
  322. 643 ;          1B             CC      B
  323. 645 ;          5C             CB      U
  324. 647 ;          07             E2      P
  325. 649 ;          A3             E7      &
  326. 651 ;          F0             C8      C
  327. 653 ;          88             CA      R
  328. 655 ;          23             C8      S
  329. 657 ;          0D             EE      N
  330. 659 ; ** IMAGES FOR CMNDS **
  331. 661 ;$FEAD  #$51 01010001 DSK COPY
  332. 663 ;         DD 11011101 RENAME (NOT PARSED)
  333. 665 ;         1C 00011100 SCRATCH  "   "
  334. 667 ;         9E 10011110 NEW      "   "
  335. 669 ;         1C 00011100 LOAD
  336. 671 ; ** MODE TABLE **
  337. 673 ;$FEB2  #$52  R READ
  338. 675 ;         57  W WRITE
  339. 677 ;         41  A APPEND
  340. 679 ;         4D  M MODIFY
  341. 681 ; ** MISC CONSTANTS **
  342. 683 ;$FEB6  #$44 D  $FEBB  #$44 D
  343. 685 ;         53 S           53 S
  344. 687 ;         50 P           50 P
  345. 689 ;         55 U           55 U
  346. 691 ;         4C L           52 R
  347. 693 ;$FEC0    45 E  $FEC5    4C L
  348. 695 ;         45 E           51 Q
  349. 697 ;         52 R           47 G
  350. 699 ;         53 S           52 R
  351. 701 ;         45 E           4C L
  352. 703 ; ** LED MASKS **
  353. 705 ;$FECA #$08 DRIVE 0  #$00 DRIVE 1 (NOT ON 1541)
  354. 707 ; ** ERROR FLG VARIABLES FOR BIT **
  355. 709 ;$FECC  #$00
  356. 711 ;         3F
  357. 713 ;         7F
  358. 715 ;         BF
  359. 717 ;         FF
  360. 719 ; ** NUM OF SECTS/TRK/ZONE **
  361. 721 ;$FED1  #$11  17 TRK/ZONE 4 31 35
  362. 723 ;         12  18            25 30
  363. 725 ;         13  19            18 24
  364. 727 ;         15  21            01 17
  365. 729 ; ** DOS VERSION **
  366. 731 ;$FED5  #$41 A
  367. 733 ; ** NUM OF ZONES **
  368. 735 ;$FED6  #$04
  369. 737 ; ** ZONE BOUNDRIES **
  370. 739 ;$FED7  #$24 #36 END/ZONE 4
  371. 741 ;         1F  31          3
  372. 743 ;         19  25          2
  373. 745 ;         12  18          1
  374. 747 ; ** OFFSETS ERROR RECOVERY **
  375. 749 ;$FEDB #$01
  376. 751 ;        FF
  377. 753 ;        FF
  378. 755 ;        01
  379. 757 ;        00
  380. 759 ; ** HI BYTE PTRS DATA BUFFS **
  381. 761 ;$FEE0   #$03  BUFF 0  $0300 03FF
  382. 763 ;          04         1   0400 04FF
  383. 765 ;          05         2   0500 05FF
  384. 767 ;          06         3   0600 06FF
  385. 769 ;          07         4   0700 07FF
  386. 771 ; ** DATA CHECKSUM FOR ROM CHECK **
  387. 773 ;$FEE6  #$3E
  388. 775 ; ** PTR NMI VECTOR **
  389. 777 *= $FEE7
  390. 779 JMP ($0065)
  391. 781 ; ** POWER ON ERROR ROUT **
  392. 783 STA $1C00; DSK CONTROLLER
  393. 785 STA $1C02; DATA DIRECTION REG
  394. 787 JMP $EA7D; LED BLINK ROUT
  395. 789 ; ** SLOW SERIAL ROUT **
  396. 791 TXA
  397. 793 LDX #$05; 40 MICROSECOND DELAY
  398. 795 DEX
  399. 797 BNE $FEF6
  400. 799 TAX
  401. 801 RTS
  402. 803 JSR $E9AE; ** NOT USED
  403. 805 JMP $E99C; ** NOT USED
  404. 807 ; ** NMI ROUT CHECK U+ U- **
  405. 809 LDA $0202; 3RD BYTE CMND BUFF
  406. 811 CMP #$2D; "-"
  407. 813 BEQ $FF0D
  408. 815 SEC
  409. 817 SBC #$2B; "+"
  410. 819 BNE $FEE7; NOT U+
  411. 821 STA $23; TEMP STORE
  412. 823 RTS
  413. 825 STX $1803; DATA DIRECTION PORT
  414. 827 LDA #$02; DATA OUT
  415. 829 STA $1800; SERIAL DATA I/O
  416. 831 LDA #$1A
  417. 833 STA $1802; DATA DIRECTION PORT
  418. 835 JMP $EAA7; BACK TO INIT
  419. 837 LDA $1800
  420. 839 AND #$01; SERIAL DATA OUT
  421. 841 BNE $FF20; WAIT
  422. 843 LDA #$01
  423. 845 STA $1805; TIMER 1 HIGH COUNT
  424. 847 JMP $E9DF; BACK TO SERIAL BUS LISTEN
  425. 849 ; ** TABLE OF JUMP VECTORS **
  426. 851 ;$FFE6;  LO #$C6  HI #$C8 FORMAT ROM
  427. 853 ;             8F       F9 TURN OFF ROM
  428. 855 ;             5F       CD U BLK READ
  429. 857 ;             97       CD U BLK WRITE
  430. 859 ;             00       05 LINK BUFF 2
  431. 861 ;             03       05   "     "
  432. 863 ;             06       05   "     "
  433. 865 ;             09       05   "     "
  434. 867 ;             0C       05   "     "
  435. 869 ;             0F       05   "     "
  436. 871 ;             01       FF NMI ROM ROUT
  437. 873 ;             A0       EA DSK INIT ROM ROUT
  438. 875 ;             67       EE SYSTEM ROM ROUT
  439. 877 .END DISK/ROM0
  440.