home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / genie-commodore-file-library / C64-128Toolkit / DISKROMSOURCE1.SDA / DISK / ROM2 (.txt) < prev   
Encoding:
Commodore BASIC  |  2019-04-13  |  22.1 KB  |  895 lines

  1. 1 ; ** BLKS FREE MESSAGE **
  2. 3 .BYTE 066 076 079 067 075 083; BLKS
  3. 5 .BYTE 032 070 082 073 073 046; FREE.
  4. 7 ; ** SCRATCH FILES **
  5. 9 JSR $C398; SET PTRS CHK TYPE FILENM
  6. 11 JSR $C320; SET UP ALL DRVS
  7. 13 JSR $C3CA; FIND FILE
  8. 15 LDA #$00
  9. 17 STA $86; TEMP RESULT BUFF
  10. 19 JSR $C49D; FIND START ENTRY IN DIRECTORY
  11. 21 BMI $C872; NOT SUCCESSFULL BRANCH
  12. 23 ; ** CODE TO SAVE SECTS OF UNCLOSED FILE **
  13. 25 JSR $DDB7; TEST FOR ACTIVE FILES
  14. 27 BCC $C86D; FILE ACTIVE BRANCH
  15. 29 ; ** CODE TO PREVENT SCRATCH OF LOCKED FILE **
  16. 31 LDY #$00
  17. 33 LDA ($94),Y; FILE TYPE DIRECTORY BUFF
  18. 35 AND #$40; TEST FOR LOCKED FILE
  19. 37 BNE $C86D; LOCKED FILE BRANCH
  20. 39 JSR $C8B6; DELETE DIRECTORY ENTRY
  21. 41 LDY #$13
  22. 43 LDA ($94),Y; THIS BYTE TELLS IF RELATIVE FILE
  23. 45 BEQ $C855; NOT RELATIVE FILE BRANCH
  24. 47 STA $80; CURRENT TRK NUM BUFF
  25. 49 INY
  26. 51 LDA ($94),Y; THIS IS SECT PTR FOR RELATIVE
  27. 53 STA $81; CURRENT SECT NUM BUFF
  28. 55 JSR $C87D; FREE SIDE SECTS & WRITE BAM
  29. 57 ; ** CODE PREVENTS FREEING SECTS OF FILE IF REPLACE NOT COMPLETE **
  30. 59 LDX $0253; DIRECTORY ENTRY FOUND FLAG
  31. 61 LDA #$20
  32. 63 AND $E7,X; PATTERN FLAG
  33. 65 BNE $C86B; UNCLOSED FILE BRANCH
  34. 67 LDA $0280,X; TRK FILE LINK
  35. 69 STA $80; CURRENT TRK NUM BUFF
  36. 71 LDA $0285,X; SECT FILE LINK
  37. 73 STA $81; CURRENT SECT NUM BUFF
  38. 75 JSR $C87D; FREE BLKS & UPDATE BAM
  39. 77 INC $86; TEMP RESULT
  40. 79 JSR $C48B; MATCH NEXT FILENM
  41. 81 BPL $C835; MATCH FOUND BRANCH
  42. 83 LDA $86; NUM OF FILES SCRATCHED
  43. 85 STA $80; CURRENT TRK NUM BUFF
  44. 87 LDA #$01
  45. 89 LDY #$00
  46. 91 JMP $C1A3; TERM ROUT
  47. 93 ; ** DELETE FILE BY LINKS **
  48. 95 JSR $EF5F; MARK 1ST FILE BLK FREE IN BAM
  49. 97 JSR $D475; OPEN INTERNAL READ CHNL
  50. 99 JSR $F119; SET BAM PTRS IN IN BUFF TABLES
  51. 101 LDA $A7,X; TABLE OF CHNLS PTR
  52. 103 CMP #$FF
  53. 105 BEQ $C894; INACTIVE BUFF BRANCH
  54. 107 LDA $02F9; DONT WRITE BAM FLAG
  55. 109 ORA #$40; SET BIT 6 (BOTH BUFFS ACTIVE)
  56. 111 STA $02F9
  57. 113 LDA #$00
  58. 115 JSR $D4C8; SET PTRS ACTIVE BUFF
  59. 117 JSR $D156; READ TRK LINK FROM BUFF
  60. 119 STA $80; CURRENT TRK NUM BUFF
  61. 121 JSR $D156; READ SECT LINK
  62. 123 STA $81; CURRENT SECT NUM BUFF
  63. 125 LDA $80
  64. 127 BNE $C8AD; MORE TRKS BRANCH
  65. 129 JSR $EEF4; WRITE BAM
  66. 131 JMP $D227; FREE INTERNAL READ CHNL
  67. 133 JSR $E55F; FREE TRK
  68. 135 JSR $D44D; READ NEXT BLK
  69. 137 JMP $C894; DE-ALLOCATE NEW BLK
  70. 139 ; ** DELETE DIRECTORY ENTRY **
  71. 141 LDY #$00; PTR 1ST CHAR
  72. 143 TYA
  73. 145 STA ($94),Y; FILE TYPE DIRECTORY BUFF
  74. 147 JSR $DE5E; WRITE DIRECTORY BLK
  75. 149 JMP $D599; WAIT FOR WRITE TO COMPLETE
  76. 151 ; ** DUPLICATE DISK CODE (CANT USE) **
  77. 153 LDA #$31; CODE BAD CMND
  78. 155 JMP $C1C8; ERROR HANDLING
  79. 157 ; ** FORMAT DISK **
  80. 159 LDA #$4C; CODE FOR JUMP (JMP)
  81. 161 STA $0600; RAM BUFF
  82. 163 LDA #$C7
  83. 165 STA $0601
  84. 167 LDA #$FA
  85. 169 STA $0602; BECOMES JMP $FAC7 (NEW DISK)
  86. 171 LDA #$03
  87. 173 JSR $D6D3; SET ACTIVE BUFF
  88. 175 LDA $7F; CURRENT DRV NUM
  89. 177 ORA #$E0; CODE FOR EXEC
  90. 179 STA $03; CMND BUFF $0600
  91. 181 LDA $03
  92. 183 BMI $C8E0; WAIT FOR CMND TO FINISH
  93. 185 CMP #$02; ERROR
  94. 187 BCC $C8EF; CODE EXEC OK BRANCH
  95. 189 LDA #$03; ERROR CODE
  96. 191 LDX #$00
  97. 193 JMP $E60A; ERROR HANDLING
  98. 195 RTS
  99. 197 ; ** COPY DISK FILES **
  100. 199 LDA #$E0
  101. 201 STA $024F; BUFF ALLOCATION PTR
  102. 203 JSR $F0D1; SET TRK & SECT LINK
  103. 205 JSR $F119; BAM ROUT
  104. 207 LDA #$FF; BAM OUT OF MEM
  105. 209 STA $A7,X; TABLE OF CHNLS
  106. 211 LDA #$0F
  107. 213 STA $0256; USE WORD (FREE ALL)
  108. 215 JSR $C1E5; PARSE CMND
  109. 217 BNE $C90C; COLON ":" FOUND BRANCH
  110. 219 JMP $C8C1; COLON NOT FOUND CMND = CX=Y NO (null)OD ON 1541
  111. 221 JSR $C1F8; PARSE CMND
  112. 223 JSR $C320; PUT DRV #'S IN FILE TABLE
  113. 225 LDA $028B; CMND IMAGE
  114. 227 AND #$55
  115. 229 BNE $C928; CONCATENATE OR NORMAL COPY BRANCH
  116. 231 LDX $027A; TABLE FILENM PTRS
  117. 233 LDA $0200,X; CMND BUFF
  118. 235 CMP #$2A; CODE FOR COLON ":"
  119. 237 BNE $C928; NO WILD CARD BRANCH
  120. 239 LDA #$30; CODE FOR ERROR
  121. 241 JMP $C1C8; ERROR HANDLING
  122. 243 LDA $028B; CMND IMAGE
  123. 245 AND #$D9
  124. 247 BNE $C923; BAD SYNTAX BRANCH
  125. 249 JMP $C952; COPY FILE
  126. 251 ; ** COPY WHOLE DISK (NO (null)OD 1541) **
  127. 253 LDA #$00
  128. 255 STA $0258
  129. 257 STA $028C
  130. 259 STA $0280
  131. 261 STA $0281
  132. 263 LDA $E3
  133. 265 AND #$01
  134. 267 STA $7F
  135. 269 ORA #$01
  136. 271 STA $0291
  137. 273 LDA $027B
  138. 275 STA $027A
  139. 277 RTS
  140. 279 ; ** COPY FILES TO ONE FILE **
  141. 281 JSR $C44F; LOOK UP FILE
  142. 283 LDA $0278; FILENM # 2 CTR
  143. 285 CMP #$03
  144. 287 BCC $C9A1; NOT CONCATENATE BRANCH
  145. 289 LDA $E2; DEFAULT FLAG
  146. 291 CMP $E3; DRV NUM
  147. 293 BNE $C9A1; NOT CONCATENATE BRANCH
  148. 295 LDA $DD; INDEX DIRECTORY ENTRYS
  149. 297 CMP $DE;    "       "       "
  150. 299 BNE $C9A1; [168] C[145]CATENATE BRANCH
  151. 301 LDA $D8; SECT DIREC[164]RY ENTRIES
  152. 303 CMP $D9;    "       "        "
  153. 305 BNE $C9A1; NOT CONCATENATE BRANCH
  154. 307 ; ** CONCATENATE FILES **
  155. 309 JSR $CACC; CHK FOR INPUT FILE
  156. 311 LDA #$01
  157. 313 STA $0279; FILENM # 2 PTR
  158. 315 JSR $C9FA; OPEN INTERNAL READ CHNL
  159. 317 JSR $D125; GET FILE TYPE
  160. 319 BEQ $C982; SCRATCHED FILE BRANCH
  161. 321 CMP #$02
  162. 323 BNE $C987; NOT DELETED BRANCH
  163. 325 LDA #$64; CODE FOR MISMATCH
  164. 327 JSR $C1C8; ERROR HANDLING
  165. 329 LDA #$12
  166. 331 STA $83; SEC ADDR BUFF
  167. 333 LDA $023C; BUFF PTR
  168. 335 STA $023D; BUFF PTR
  169. 337 LDA #$FF; CLOSE READ CHNL
  170. 339 STA $023C; BUFF PTR
  171. 341 JSR $DA2A; COPY 1ST FILE
  172. 343 LDX #$02
  173. 345 JSR $C9B9; COPY 2ND FILE
  174. 347 JMP $C194; END ROUT
  175. 349 ; ** COPY FILE **
  176. 351 JSR $C9A7; COPY ROUT
  177. 353 JMP $C194; TERM ROUT
  178. 355 JSR $CAE7; CHK I/O FILE
  179. 357 LDA $E2; DEFAULT FLAG
  180. 359 AND #$01; CLEAR DEFAULT BIT
  181. 361 STA $7F; CURRENT DRV NUM BUFF
  182. 363 JSR $D486; OPEN INTERNAL WRITE CHNL
  183. 365 JSR $D6E4; ADD FILE NAME TO DIRECTORY
  184. 367 LDX $0277; FILENM # 1 CTR
  185. 369 STX $0279; FILENM # 2 PTR
  186. 371 JSR $C9FA; OPEN INTERNAL READ CHNL
  187. 373 LDA #$11; SEC ADDR INTERNAL READ
  188. 375 STA $83; SEC ADDR BUFF
  189. 377 JSR $D0EB; FIND READ CHNL
  190. 379 JSR $D125; CHK RELATIVE FILE
  191. 381 BNE $C9CE; NOT RELATIVE BRANCH
  192. 383 JSR $CA53; COPY RELATIVE FILE
  193. 385 LDA #$08
  194. 387 STA $F8; EOI BUFF
  195. 389 JMP $C9D8; GET BYTE INTERNAL READ CHNL
  196. 391 JSR $CF9B; WRITE BYTE TO DISK
  197. 393 ; ** READ BYTE INTERNAL READ CHNL **
  198. 395 JSR $CA35
  199. 397 LDA #$80; CODE FOR LAST RECORD
  200. 399 JSR $DDA6; CHK TO SEE IF LAST RECORD
  201. 401 BEQ $C9D5; NOT LAST RECORD BRANCH
  202. 403 JSR $D125; GET FILE TYPE
  203. 405 BEQ $C9EA; MORE FILES BRANCH
  204. 407 JSR $CF9B; WRITE LAST BYTE TO DISK
  205. 409 LDX $0279; FILENM # 2 PTR
  206. 411 INX
  207. 413 CPX $0278; FILENM # 2 CTR
  208. 415 BCC $C9B9; MORE FILES BRANCH
  209. 417 LDA #$12; SEC ADDR INTERNAL WRITE
  210. 419 STA $83; SEC ADDR BUFF
  211. 421 JMP $DB02; CLOSE COPY CHNL
  212. 423 ; ** OPEN INTERNAL READ CHNL **
  213. 425 LDX $0279; FILENM # 2 PTR
  214. 427 LDA $E2,X; DRV NUM
  215. 429 AND #$01; MASK OFF DEFAULT BIT
  216. 431 STA $7F; CURRENT DRV NUM BUFF
  217. 433 LDA $FE85; #$12 DIRECTORY TRK
  218. 435 STA $80; CURRENT TRK NUM BUFF
  219. 437 LDA $D8,X; SECT DIRECTORY ENTRIES
  220. 439 STA $81; CURRENT SECT NUM BUFF
  221. 441 JSR $D475; OPEN INTERNAL READ CHNL
  222. 443 LDX $0279; FILENM # 2 PTR
  223. 445 LDA $DD,X; INDEX OF DIRECTORY ENTRIES
  224. 447 JSR $D4C8; SET TRK & SECT PTRS
  225. 449 LDX $0279; FILENM # 2 PTR
  226. 451 LDA $E7,X; PATTERN FLAG
  227. 453 AND #$07; FILE TYPE MASK
  228. 455 STA $024A; FILE TYPE BUFF
  229. 457 LDA #$00
  230. 459 STA $0258; RECORD SIZE
  231. 461 JSR $D9A0; OPEN READ CHNL
  232. 463 LDY #$01
  233. 465 JSR $D125; GET FILE TYPE
  234. 467 BEQ $CA31; NOT RELATIVE FILE BRANCH
  235. 469 INY
  236. 471 TYA
  237. 473 JMP $D4C8; SET TRK & SECT PTRS
  238. 475 ; ** GET BYTE FROM INTERNAL READ CHNL **
  239. 477 LDA #$11; SEC ADDR
  240. 479 STA $83; SEC ADDR BUFF
  241. 481 JSR $D39B; GET THE BYTE
  242. 483 STA $85; TEMP DATA BYTE
  243. 485 LDX $82; INDEX CURRENT CHNL
  244. 487 LDA $F2,X; CHNL STATUS BUFF
  245. 489 AND #$08; CODE NOT EOI
  246. 491 STA $F8; TEMP EOI BUFF
  247. 493 BNE $CA52; NOT RELATIVE FILE BRANCH
  248. 495 JSR $D125; GET FILE TYPE
  249. 497 BEQ $CA52; RELATIVE FILE BRANCH
  250. 499 LDA #$80; CODE LAST RECORD
  251. 501 JSR $DD97; SET LAST RECORD FLAG
  252. 503 RTS
  253. 505 ; ** COPY RELATIVE FILES **
  254. 507 JSR $D1D3; SET DRV NUM
  255. 509 JSR $E1CB; POSISTION SIDE SECT TO LAST RECORD
  256. 511 LDA $D6; INDEX SIDE SECT
  257. 513 PHA
  258. 515 LDA $D5; NUM SIDE SECT BUFF
  259. 517 PHA
  260. 519 LDA #$12; SEC ADDR
  261. 521 STA $83; SEC ADDR BUFF
  262. 523 JSR $D107; FIND WRITE CHNL
  263. 525 JSR $D1D3; SET DRV NUM
  264. 527 JSR $E1CB; POSISTION SIDE SECT TO LAST RECORD
  265. 529 JSR $E29C; POSISTION DATA BLKS
  266. 531 LDA $D6; INDEX SIDE SECT
  267. 533 STA $87; TEMP RESULT
  268. 535 LDA $D5; NUM SIDE SECT BUFF
  269. 537 STA $86; TEMP RESULT
  270. 539 LDA #$00
  271. 541 STA $88; USED FOR LO BYTES RECORD PTR
  272. 543 STA $D4; PTR START OF RECORD
  273. 545 STA $D7; RELATIVE FILE PTR TO TRK
  274. 547 PLA
  275. 549 STA $D5; NUM SIDE SECT BUFF
  276. 551 PLA
  277. 553 STA $D6; INDEX SIDE SECT
  278. 555 JMP $E33B; TERM ROUT
  279. 557 ; ** RENAME FILE **
  280. 559 JSR $C320; SET DRVS IN CMND (0)
  281. 561 LDA $E3; DRV NUM
  282. 563 AND #$01; MASK DEFAULT BIT
  283. 565 STA $E3
  284. 567 CMP $E2; DEFAULT FLAG
  285. 569 BEQ $CA97
  286. 571 ORA #$80; SET BIT 7 SEARCH BOTH DRVS
  287. 573 STA $E2; DEFAULT FLAG
  288. 575 JSR $C44F; LOOK UP BOTH FILENMS
  289. 577 JSR $CAE7; FIND FILES NAMED
  290. 579 LDA $E3; DRV NUM
  291. 581 AND #$01; MASK DEFAULT BIT
  292. 583 STA $7F; CURRENT DRV NUM BUFF
  293. 585 LDA $D9; SECT OF DIRECTORY ENTRY
  294. 587 STA $81; CURRENT SECT NUM
  295. 589 JSR $DE57; READ DIRECTORY SECT
  296. 591 JSR $D599; WAIT FOR ROUT TO FINISH
  297. 593 LDA $DE; INDEX DIRECTORY ENTRIES
  298. 595 CLC
  299. 597 ADC #$03; POINTS TO FIRST CHAR IN FILENM
  300. 599 JSR $D4C8; SET PTRS TO FILENM
  301. 601 JSR $DF93; STORE ACTIVE BUFF NUM
  302. 603 TAY
  303. 605 LDX $027A; TABLE FILENM PTRS
  304. 607 LDA #$10; MAX NUM OF CHARS
  305. 609 JSR $C66E; TRANSFER FILENM FROM CMND TO BUFF
  306. 611 JSR $DE5E; WRITE REVISED DIRECTORY
  307. 613 JSR $D599; WAIT FOR ROUT TO FINISH
  308. 615 JMP $C194; TREMINATE ROUT
  309. 617 ; ** CHK INPUT FILE **
  310. 619 LDA $E8; REPLACE FLAG
  311. 621 AND #$07; FILE TYPE MASK
  312. 623 STA $024A; FILE TYPE BUFF
  313. 625 LDX $0278; FILENM # 2 CTR
  314. 627 DEX
  315. 629 CPX $0277; FILENM # 1 CTR
  316. 631 BCC $CAE6; FILE FOUND BRANCH
  317. 633 LDA $02280,X; TRK FILE LINK
  318. 635 BNE $CAD6; MORE BRANCH
  319. 637 LDA #$62; ERROR CODE
  320. 639 JMP $C1C8; ERROR HANDLING
  321. 641 RTS
  322. 643 ; ** CHK I/O FILE **
  323. 645 JSR $CACC; FIND INPUT FILE
  324. 647 LDA $280,X; TRK LINK
  325. 649 BEQ $CAF4; NO TRKS LEFT BRANCH
  326. 651 LDA #$63; CODE FOR ERROR
  327. 653 JMP $C1C8; ERROR HANDLING
  328. 655 DEX
  329. 657 BPL $CAEA; CHK MORE BRANCH
  330. 659 RTS
  331. 661 ; ** MEM ACCESS CMNDS **
  332. 663 LDA $0201; 2ND CHAR IN CMND
  333. 665 CMP #$2D; CODE FOR "-" M-R & M-W ETC
  334. 667 BNE $CB4B; NOT MEM CMND ERROR BRANCH
  335. 669 LDA $0203; LO BYTE OF ADDR
  336. 671 STA $6F; TEMP STORAGE
  337. 673 LDA $0204; HI BYTE OF ADDR
  338. 675 STA $70
  339. 677 LDY #$00
  340. 679 LDA $0202; TYPE OF CMND E R W
  341. 681 CMP #$52;
  342. 683 BEQ $CB20; MEM READ BRANCH
  343. 685 JSR $F258; KILL PROTECTION ROUT (NO (null)OD 1541)
  344. 687 CMP #$57
  345. 689 BEQ $CB50; MEM WRITE BRANCH
  346. 691 CMP #$45
  347. 693 BNE $CB4B; ERROR BRANCH
  348. 695 JMP (006F); EXEC MEM CMND
  349. 697 LDA ($6F),Y
  350. 699 STA $85; TEMP DATA BUFF
  351. 701 LDA $0274; CMND SIZE BUFF
  352. 703 CMP #$06
  353. 705 BCC $CB45; IF LEE THAN 6 MEM READ BRANCH
  354. 707 ; ** MULTI BYTE MEM READ **
  355. 709 LDX $0205; NUM OF BYTES TO READ IN CMND
  356. 711 DEX
  357. 713 BEQ $CB45; ONLY ONE BYTE TO READ BRANCH
  358. 715 TXA
  359. 717 CLC
  360. 719 ADC $6F; LO BYTE MEM CMND
  361. 721 INC $6F
  362. 723 STA $0249; LAST CHAR PTR
  363. 725 LDA $6F
  364. 727 STA $A5;
  365. 729 LDA $70; TEMP WORK BUFF
  366. 731 STA $A6
  367. 733 JMP $D443; CONTINUE READ MEM JUMP
  368. 735 ; **  1 BYTE MEM READ **
  369. 737 JSR $DOEB; FIND READ CHNL
  370. 739 JMP $D43A; GET THE BYTE AND TERM
  371. 741 LDA #$31; CODE FOR BAD CMND
  372. 743 JMP $C1C8; ERRO HANDLING
  373. 745 ; ** MEM WRITE **
  374. 747 LDA $0206,Y
  375. 749 STA ($6F),Y
  376. 751 INY
  377. 753 CPY $0205; NUM OF BYTES TO WRITE
  378. 755 BCC $CB50; MORE BYTES BRANCH
  379. 757 RTS
  380. 759 ; ** USER CMNDS **
  381. 761 LDY $0201; 2ND BYTE OF CMND
  382. 763 CPY #$30; 0
  383. 765 BNE $CB6C; NOT "U0" BRANCH
  384. 767 ; **  U0 RESTORES PTR TO JUMP TABLE **
  385. 769 LDA #$EA; LO BYTE USER JMP ADDR
  386. 771 STA $6B; USER JUMP PTR LO
  387. 773 LDA #$FF; HI BYTE USER JMP ADDR
  388. 775 STA $6C
  389. 777 RTS
  390. 779 ; ** U1 CMND **
  391. 781 JSR $CB72; EXEC CODE FROM JUMP TABLE
  392. 783 JMP $C194; TERM ROUT
  393. 785 DEY
  394. 787 TYA
  395. 789 AND #$0F; CONVERT ASCII TO HEX
  396. 791 ASL
  397. 793 TAY
  398. 795 LDA ($6B),Y; LO BYTE U JMP ADDR
  399. 797 STA $75
  400. 799 INY
  401. 801 LDA ($6B),Y; HI BYTE U JMP ADDR
  402. 803 STA $76
  403. 805 JMP ($0075); INDIRECT JUMP EXEC
  404. 807 ; ** OPEN DIRECT ACCESS BUFF (OPEN CMND) **
  405. 809 LDA $028E; LAST DRV NUM FROM LAST CMND
  406. 811 STA $7F; CURRENT DRV BUFF
  407. 813 LDA $83; SEC ADDR BUFF
  408. 815 PHA
  409. 817 JSR $C63D; INITIALIZE DISK
  410. 819 PLA; SEC ADDR
  411. 821 STA $83
  412. 823 LDX $0274; CMND LENGTH BUFF
  413. 825 DEX
  414. 827 BNE $CBA5; SPECIFIC BUFF BRANCH
  415. 829 LDA #$01
  416. 831 JSR $DE12; OPEN NEW READ CHNL
  417. 833 JMP $CBF1
  418. 835 LDA #$70; NO CHNL AVAIL CODE
  419. 837 JMP $C1C8; ERROR HANDLING
  420. 839 ; ** SPECIFIC BUFF **
  421. 841 LDY #$01
  422. 843 JSR $CC7C; CHK BLKS
  423. 845 LDX $0285; NUM OF BUFF REQUESTED
  424. 847 CPX #$05; HIGHEST BUFF THAT CAN BE USED
  425. 849 BCS $CBA0; BUFF TO HIGH BRANCH
  426. 851 ; ** FIND BUFFS IN USE **
  427. 853 LDA #$00
  428. 855 STA $6F; TEMP STORAGE
  429. 857 STA $70;     "        "
  430. 859 SEC
  431. 861 ROL $6F
  432. 863 ROL $70
  433. 865 DEX
  434. 867 BPL $CBB8; MORE TO DO BRANCH
  435. 869 LDA $6F
  436. 871 AND $024F; HOLDS BUFFS IN USE
  437. 873 BNE $CBA0; BUFF IN USE BRANCH
  438. 875 LDA $70
  439. 877 AND $0250; HOLDS BUFFS IN USE
  440. 879 BNE $CBA0; BUFF IN USE BRANCH
  441. 881 LDA $6F
  442. 883 ORA $024F
  443. 885 STA $024F; MARK BUFF REQUESTED IN USE
  444. 887 LDA $70
  445. 889 ORA $0250
  446. 891 STA $0250;    "    "        "
  447. 893 LDA #$00
  448. 895 JSR $D1E2; [159] [162] [135] CHNL
  449. 897 LDX $82; CURRENT CHNL BUFF
  450. 899 LDA $0285; SECT FILE LINK
  451. 901 STA $A7,X; TABLE OF CHNLS
  452. 903 TAX
  453. 905 LDA $7F; CURRENT DRV BUFF
  454. 907 STA $00,X; EXEC CMND BUFF
  455. 909 STA $025B,X; LAST EXEC CMND BUFF
  456. 911 LDX $83; SEC ADDR BUFF
  457. 913 LDA $022B,X; INDEX TABLE
  458. 915 [176]A #$40; CODE [129] [135] & WRITE
  459. 917 STA $022B,X
  460. 919 LDY $82; CURRENT CHNL BUFF
  461. 921 LDA #$FF
  462. 923 STA $0244,Y; LAST CHAR PTR
  463. 925 LDA #$89; CODE [129] R[175]OM ACCESS
  464. 927 STA $00F2,Y; CHNL STATUS BUFF
  465. 929 LDA $00A7,Y; CHNL NUM
  466. 931 STA $023E,Y; 1ST CHAR IN BUFF
  467. 933 ASL
  468. 935 TAX; INDEX PTR
  469. 937 LDA #$01
  470. 939 STA $99,X; [130] BYTE IN BUFF PTR
  471. 941 LDA #$0E; CODE DIRECT ACCESS FILE
  472. 943 STA $00EC,Y; FILE TYPE BUFF
  473. 945 JMP $C194; TERM ROUT
  474. 947 ; [172][172] BLK CMNDS [172][172]
  475. 949 LDY #$00
  476. 951 LDX #$00
  477. 953 LDA #$2D; CODE [129] "-"
  478. 955 JSR $C268; PARSE CMND
  479. 957 BNE $CC30; "-" FOUND BRANCH
  480. 959 LDA #$31; BAD CMND CODE
  481. 961 JMP $C1C8; ERR[176] H[175]LING
  482. 963 LDA #$30; CODE [129] BAD SYNTAX
  483. 965 JMP $C1C8
  484. 967 TXA
  485. 969 BNE $CC2B; BAD SYNTAX BRANCH
  486. 971 LDX #$05; NUM OF CMNDS [171] 1
  487. 973 LDA $0200,Y; CHAR AFTER "-"
  488. 975 CMP $CC5D,X; BLK CMND TABLE
  489. 977 BEQ $CC42; FOUND CMND BRANCH
  490. 979 DEX
  491. 981 BPL $CC38; M[176]E [164] CHK BRANCH
  492. 983 BMI $CC26; [168] FOUND BRANCH
  493. 985 TXA
  494. 987 [176]A #$80
  495. 989 STA $022A; CMND CODE BUFF
  496. 991 JSR $CC6F; PARSE BLK PARAM
  497. 993 LDA $022A
  498. 995 ASL
  499. 997 TAX
  500. 999 LDA $CC64,X; BLK JUMP TABLE
  501. 1001 STA $70
  502. 1003 LDA $CC63,X
  503. 1005 STA $6F
  504. 1007 JMP ($006F); INDIRECT JUMP [164] ROUT
  505. 1009 ; [172][172] BLK CMND TABLE [172][172]
  506. 1011 .BYTE 065 070 082 087; A F R W
  507. 1013 .BYTE 069 080;         E P
  508. 1015 ; [172][172] BLK JUMP TABLE [172][172]
  509. 1017 .BYTE 003 205 245 204; 03 CD F5 CC
  510. 1019 .BYTE 086 205 115 205; 56 CD 73 CD
  511. 1021 .BYTE 163 205 189 205; A3 CD BD CD
  512. 1023 ; [172][172] PARSE BLK [172][172]
  513. 1025 LDY #$00
  514. 1027 LDX #$00
  515. 1029 LDA #$3A; CODE [129] ":"
  516. 1031 JSR $C268; PARSE CMND
  517. 1033 BNE $CC7C; FOUND ":" BRANCH Y HOLDS [185]IISTI[145] [170]1
  518. 1035 LDY #$03; PARAM START
  519. 1037 LDA $0200,Y; CMND BUFF
  520. 1039 CMP #$20; SPACE
  521. 1041 BEQ $CC8B; FOUND SPACE BRANCH
  522. 1043 CMP #$1D; SKIP 1 CHAR
  523. 1045 BEQ $CC8B; FOUND SKIP BRANCH
  524. 1047 CMP #$2C; ","
  525. 1049 BNE $CC92; [168] COMMA BRANCH
  526. 1051 INY
  527. 1053 CPY $0274; CMND SIZE BUFF
  528. 1055 BCC $CC7C; M[176]E [164] [135] BRANCH
  529. 1057 RTS
  530. 1059 JSR $CCA1; C[145]VERT [198]II [164] HEX
  531. 1061 INC $0277; FI[195]M # 1 CTR
  532. 1063 LDY $0279; FI[195]M # 2 PTR
  533. 1065 CPX #$04; MAX # OF FILES
  534. 1067 BCC $CC8B; M[176]E BRANCH
  535. 1069 BCS $CC2B; BAD SYNTAX BRANCH
  536. 1071 ; [172][172] C[145]VERT [198]II [164] HEX [172][172]
  537. 1073 LDA #$00
  538. 1075 STA $6F; TEMP W[176]K BUFF
  539. 1077 STA $70;  "    "     "
  540. 1079 STA $72;  "    "     "
  541. 1081 LDX #$FF
  542. 1083 LDA $0200,Y; CMND BUFF
  543. 1085 CMP #$40
  544. 1087 BCS $CCCA; [168] A NUM BRANCH
  545. 1089 CMP #$30
  546. 1091 BCC $CCCA; [168] [198]II BRANCH
  547. 1093 [175] #$0F; MASK HI BITS
  548. 1095 PHA
  549. 1097 LDA $70; SH[139]T [197]UES IN TEMPS
  550. 1099 STA $71
  551. 1101 LDA $6F
  552. 1103 STA $70
  553. 1105 PLA
  554. 1107 STA $6F
  555. 1109 INY
  556. 1111 CPY $0274; CMND SIZE BUFF
  557. 1113 BCC $CCAB; M[176]E CMND BRANCH
  558. 1115 STY $0279; FI[195]M # 2 PTR
  559. 1117 CLC
  560. 1119 LDA #$00
  561. 1121 INX
  562. 1123 CPX #$03
  563. 1125 BCS $CCE4; D[145]E BRANCH
  564. 1127 LDY $6F,X
  565. 1129 DEY
  566. 1131 BMI $CCD0; Y [179] 0 BRANCH
  567. 1133 ADC $CCF2,X; DECIMAL TABLE
  568. 1135 BCC $CCD7; M[176]E BRANCH
  569. 1137 CLC
  570. 1139 INC $72
  571. 1141 BNE $CCD7; M[176]E BRANCH
  572. 1143 PHA
  573. 1145 LDX $0277; FI[195]M # 1 CTR
  574. 1147 LDA $72
  575. 1149 STA $0280,X; TRK FILE LINK
  576. 1151 PLA
  577. 1153 STA $0285,X; SECT FILE LINK
  578. 1155 RTS
  579. 1157 ; [172][172] DECIMAL TABLE [172][172]
  580. 1159 .BYTE 001 010 100; 01 0A 64
  581. 1161 ; [172][172] [184]E BLKS IN BAM [172][172]
  582. 1163 JSR $CDF5; CHK [129] [203]OD BLK
  583. 1165 JSR $EF5F; SET UP TRK & SECT
  584. 1167 JMP $C194; TERM ROUT
  585. 1169 LDA #$01; [168] USED 1541
  586. 1171 STA $02F9; "   "    "
  587. 1173 ; ** MARK BLK USED IN BAM **
  588. 1175 JSR $CDF5; CHK FOR (null)OD BLK
  589. 1177 LDA $81; CURRENT SECT NUM BUFF
  590. 1179 PHA
  591. 1181 JSR $F1FA; SET BAM
  592. 1183 BEQ $CD19; SECT USED NO MORE ON TRK BRANCH
  593. 1185 PLA
  594. 1187 CMP $81
  595. 1189 BNE $CD2C; ALREADY USED BRANCH
  596. 1191 JSR $EF90; MARK BLK USED
  597. 1193 JMP $C194; TERM ROUT
  598. 1195 PLA; GET RID OF SECT ALREADY IN USE
  599. 1197 LDA #$00
  600. 1199 STA $81; CURRENT SECT BUFF
  601. 1201 INC $80; CURRENT TRK BUFF
  602. 1203 LDA $80
  603. 1205 CMP $FED7; #$24 HIGHEST TRK
  604. 1207 BCS $CD31; OUT OF TRKS & SECTS BRANCH
  605. 1209 JSR $F1FA; SET BAM FIND NEXT AVAIL TRK & SEC
  606. 1211 BEQ $CD1A; NO SECT AVAIL THIS TRK BRANCH
  607. 1213 LDA #$65; CODE NO BLK ERROR
  608. 1215 JSR $E645; ERROR HANDLING
  609. 1217 LDA #$65
  610. 1219 JSR $C1C8; ERROR HANDLING
  611. 1221 ; ** BLK READ TEST PARAM **
  612. 1223 JSR $CDF2; TEST SEC SET UP TRK & SEC
  613. 1225 JMP $D460; READ BLK
  614. 1227 ; ** READ BLK W/O INCREMENT **
  615. 1229 JSR $D12F; SET PARAM
  616. 1231 LDA ($99),X; NEXT BYTE IN BUFF PTR
  617. 1233 RTS
  618. 1235 ; ** BLK READ **
  619. 1237 JSR $CD36; TEST PARAM
  620. 1239 LDA #$00
  621. 1241 JSR $D4C8; SET TRK & SEC PTRS
  622. 1243 JSR $CD3C; READ BLK
  623. 1245 STA $0244,Y; LAST CHAR PTR
  624. 1247 LDA #$89; RANDOM ACCESS CHNL CODE
  625. 1249 STA $00F2,Y; CHNL STATUS BUFF
  626. 1251 RTS
  627. 1253 ; ** BLK READ SECT **
  628. 1255 JSR $CD42; SET UP TO READ SECT
  629. 1257 JSR $D3EC; READ THE SECT
  630. 1259 JMP $C194; TERM ROUT
  631. 1261 ; ** U1 BLK READ SECT **
  632. 1263 ; U1 CMND IS THE ONE TO USE
  633. 1265 JSR $CC6F; PARSE BLK PARAM
  634. 1267 JSR $CD42; SET UP SECT TO READ
  635. 1269 LDA $0244,Y; LAST CHAR PTR
  636. 1271 STA $023E,Y; MOST RECENT READ BYTE
  637. 1273 LDA #$FF
  638. 1275 STA $0244,Y
  639. 1277 JMP $C194; TERM ROUT
  640. 1279 ; ** BLK WRITE SECT **
  641. 1281 JSR $CDF2; TEST BUFF SET UP TRK & SEC
  642. 1283 JSR $D4E8; GET BUFF PTRS A POINTS TO BUFF
  643. 1285 TAY
  644. 1287 DEY
  645. 1289 CMP #$02
  646. 1291 BCS $CD81; GREATER THAN 2 BRANCH
  647. 1293 LDY #$01
  648. 1295 LDA #$00
  649. 1297 JSR $D4C8; SET BUFF PTRS
  650. 1299 TYA
  651. 1301 JSR $CCF1; PUT BYTE IN ACTIVE BUFF
  652. 1303 TXA
  653. 1305 PHA
  654. 1307 JSR $D464; WRITE THE BLK
  655. 1309 PLA
  656. 1311 TAX
  657. 1313 JSR $D3EE; SET CHNL READY
  658. 1315 JMP $C194; TERM ROUT
  659. 1317 ; ** U2 BLK WRITE SECT **
  660. 1319 JSR $CC6F; PARSE BLK PARAM
  661. 1321 JSR $CDF2; TEST BUFF SET UP TRK & SEC
  662. 1323 JSR $D464; WRITE BLK
  663. 1325 JMP $C194; TERM ROUT
  664. 1327 ; ** BLK EXEC SECT **
  665. 1329 JSR $F258; KILL DISK PROTECTION (NO (null)OD 1541) **
  666. 1331 JSR $CD36; TEST BUFF SET UP TRK & SEC
  667. 1333 LDA #$00; CODE LO BYTE JUMP
  668. 1335 STA $6F; TEMP WORK
  669. 1337 LDX $F9; EXEC CODE
  670. 1339 LDA $FEE0,X; HI BYTE DATA BUFF (RAM)
  671. 1341 STA $70; TEMP WORK
  672. 1343 JSR $CDBA; EXEC BLK
  673. 1345 JMP $C194; TERM ROUT
  674. 1347 JMP ($006F); BLK EXEC
  675. 1349 ; ** SET BUFF PTR **
  676. 1351 JSR $CDD2; FIND BUFF
  677. 1353 LDA $F9; EXEC CODE
  678. 1355 ASL
  679. 1357 TAX
  680. 1359 LDA $0286; SECT FILE LINK
  681. 1361 STA $99,X; NEXT BYTE IN BUFF PTR
  682. 1363 JSR $D12F; SET UP PTRS
  683. 1365 JSR $D3EE; SET CHNL FOR I/O
  684. 1367 JMP $C194; TERM ROUT
  685. 1369 ; ** TEST BUFF FOR SEC ADDR **
  686. 1371 LDX $D3; FILENM # 1 PTR
  687. 1373 INC $D3
  688. 1375 LDA $0285,X; SEC FILE ADDR
  689. 1377 TAY
  690. 1379 DEY
  691. 1381 DEY
  692. 1383 CPY #$0C
  693. 1385 BCC $CDE5; SEC ADD BETWEEN 2 AND 14 BRANCH
  694. 1387 LDA #$70; NO CHNL CODE
  695. 1389 JMP $C1C8; ERROR HANDLING
  696. 1391 STA $83; CURRENT SEC ADDR
  697. 1393 JSR $D0EB; FIND READ CHNL
  698. 1395 BCS $CDE0; NO CHNL BRANCH
  699. 1397 JSR $DF93; GET ACTIVE BUFF
  700. 1399 STA $F9; EXEC CMND
  701. 1401 RTS
  702. 1403 ; ** TEST BLK PARAM **
  703. 1405 JSR $CDD2; TEST FOR BUFF IN USE
  704. 1407 LDX $D3; CHNL NUM BUFF
  705. 1409 LDA $0285,X; DRV NUM WANTED
  706. 1411 AND #$01
  707. 1413 STA $7F; CURRENT DRV BUFF
  708. 1415 LDA $0287,X; SECT FILE LINK
  709. 1417 STA $81; CURRENT SECT NUM
  710. 1419 LDA $0286,X; TRK FILE LINK
  711. 1421 STA $80; CURRENT TRK NUM
  712. 1423 JSR $D55F; CHK FOR (null)OD TRK & SEC
  713. 1425 JMP $C100; TURN ON DRV LED
  714. 1427 ; ** FIND RELATIVE FILE **
  715. 1429 JSR $CE2C; GET TOTAL BYTES
  716. 1431 JSR $CE6E; DIVIDE BY 254
  717. 1433 LDA $90; HOLDS REMAINDER
  718. 1435 STA $D7; POINTS TO LAST SECT
  719. 1437 JSR $CE71; DIVIDE BY 120
  720. 1439 INC $D7
  721. 1441 INC $D7; BYPASS LINK BYTES TRK & SEC
  722. 1443 LDA $8B; HOLDS QUOTIENT RESULT
  723. 1445 STA $D5; SIDE SEC # BUFF
  724. 1447 LDA $90; REMAINDER OF DIVISION
  725. 1449 ASL; EACH SIDE SEC IS 2 BYTES
  726. 1451 CLC
  727. 1453 ADC #$10; SKIP INITIAL LINK TABLE
  728. 1455 STA $D6; PTR TO SECT HOLDING SIDE SECS
  729. 1457 RTS
  730. 1459 ; ** CALCULATE RECORD LOCATION IN BYTES **
  731. 1461 JSR $CEC9; ZERO RESULT AREA
  732. 1463 STA $92; ACCUMULATOR
  733. 1465 LDX $82; INDEX CURRENT CHNL
  734. 1467 LDA $B5,X; LO BYTE RECORD NUM
  735. 1469 STA $90; ACCUMULATOR
  736. 1471 LDA $BB,X; HI BYTE RECORD NUM
  737. 1473 STA $91; ACCUMULATOR
  738. 1475 BNE $CE41; HI BYTE NOT 0 BRANCH
  739. 1477 LDA $90
  740. 1479 BEQ $CE4C; ADJUST ZERO FIRST RECORD
  741. 1481 LDA $90
  742. 1483 SEC
  743. 1485 SBC #$01
  744. 1487 STA $90
  745. 1489 BCS $CE4C; C FLAG SET BRANCH
  746. 1491 DEC $91; HI BYTE RECORD SIZE
  747. 1493 LDA $C7,X; RECORD SIZE BUFF
  748. 1495 STA $6F; TEMP WORK
  749. 1497 LSR $6F
  750. 1499 BCC $CE57; NO ADDITION BRANCH
  751. 1501 JSR $CEED; ADDITION ROUT
  752. 1503 JSR $CEE5; MULTIPLICATION ROUT
  753. 1505 LDA $6F
  754. 1507 BNE $CE50; NOT FINISHED BRANCH
  755. 1509 LDA $D4; BYTE PTR
  756. 1511 CLC
  757. 1513 ADC $8B; RESULT
  758. 1515 STA $8B
  759. 1517 BCC $CE6D; FINISHED BRANCH
  760. 1519 INC $8C; RESULT
  761. 1521 BNE $CE6D; FINISHED BRANCH
  762. 1523 INC $8D; RESULT
  763. 1525 RTS
  764. 1527 ; ** DIVIDE ROUT **
  765. 1529 ;$8B = QUOTIENT $90 = REMAINDER
  766. 1531 LDA #$FE; 254 ASCII
  767. 1533 BIT $78A9; *** SKIP TWO BYTES ***
  768. 1535 STA $6F; TEMP WORK
  769. 1537 LDX #$03
  770. 1539 LDA $8F,X; RESULT
  771. 1541 PHA
  772. 1543 LDA $8A,X; TEMP RESULT
  773. 1545 STA $8F,X
  774. 1547 PLA
  775. 1549 STA $8A,X
  776. 1551 DEX
  777. 1553 BNE $CE77; MORE DIVIDE BRANCH
  778. 1555 JSR $CED9; ZERO X ZERO RESULT 1 & 2
  779. 1557 LDX #$00
  780. 1559 LDA $90,X; ACCUMULATOR
  781. 1561 STA $8F,X;   "    "
  782. 1563 INX
  783. 1565 CPX #$04
  784. 1567 BCC $CE89; MORE DIVIDE BRANCH
  785. 1569 LDA #$00
  786. 1571 STA $92; HI BYTE ACCUMULATOR
  787. 1573 BIT $6F; CHK FOR DIVIDE BY 120
  788. 1575 BMI $CEA3; DIVIDE BY 254 BRANCH
  789. 1577 ASL $8F; SET THE CARRY
  790. 1579 PHP
  791. 1581 LSR $8F; RESTORE ORIGINAL VALUE
  792. 1583 PLP
  793. 1585 JSR $CEE6; MULTIPLICATION ROUT
  794. 1587 JSR $CEED; ADDITION ROUT
  795. 1589 JSR $CEE5; MULTIPLICATION ROUT
  796. 1591 BIT $6F; CHK DIVIDE BY 120
  797. 1593 BMI $CEB0; DIVIDE BY 254 BRANCH
  798. 1595 JSR $CEE2; MULTIPLICATION BY 4
  799. 1597 LDA $8F; ACCUMULATOR
  800. 1599 CLC
  801. 1601 ADC $90; REMAINDER
  802. 1603 STA $90
  803. 1605 BCC $CEBF; TEST REMAINDER BRANCH
  804. 1607 INC $91; ACCUMULATOR
  805. 1609 BNE $CEBF
  806. 1611 INC $92; RESULT
  807. 1613 LDA $92
  808. 1615 ORA $91
  809. 1617 BNE $CE87; REMAINDER TOO LARGE BRANCH
  810. 1619 LDA $90; REMAINDER
  811. 1621 SEC
  812. 1623 SBC $6F; TEMP WORK
  813. 1625 BCC $CED8; REMAINDER TOO LARGE BRANCH
  814. 1627 INC $8B; QUOTIENT
  815. 1629 BNE $CED6; REMAINDER SMALLER BRANCH
  816. 1631 INC $8C; RESULT
  817. 1633 BNE $CED6; REMAINDER TOO LARGE BRANCH
  818. 1635 INC $8D; RESULT
  819. 1637 STA $90; REMAINDER
  820. 1639 RTS
  821. 1641 ; ** ZERO REULTS **
  822. 1643 LDA #$00
  823. 1645 STA $8B
  824. 1647 STA $8C
  825. 1649 STA $8D
  826. 1651 RTS
  827. 1653 ; ** MULTIPLY ACCUMULATOR BY 4 **
  828. 1655 JSR $CEE5
  829. 1657 CLC
  830. 1659 ROL $90
  831. 1661 ROL $91
  832. 1663 ROL $92
  833. 1665 RTS
  834. 1667 ; ** ADD ACCUMULATOR TO RESULT **
  835. 1669 CLC
  836. 1671 LDX #$FD
  837. 1673 LDA $8E,X
  838. 1675 ADC $93,X
  839. 1677 STA $8E,X
  840. 1679 INX
  841. 1681 BNE $CEF0; MORE ADD BRANCH
  842. 1683 RTS
  843. 1685 ; ** INITIALIZE LEAST USED TABLE **
  844. 1687 LDX #$00
  845. 1689 TXA
  846. 1691 STA $FA,X; LEAST USED BUFF
  847. 1693 INX
  848. 1695 CPX #$04; CMND CHNL NUM
  849. 1697 BNE $CEFC; MORE BRANCH
  850. 1699 LDA #$06; CODE FOR FLOATING BAM
  851. 1701 STA $FA,X
  852. 1703 RTS
  853. 1705 ; ** UPDATE LEAST USED TABLE **
  854. 1707 LDY #$04; CODE FOR CMND CHNL
  855. 1709 LDX $82; CURRENT CHNL
  856. 1711 LDA $00FA,Y; VALUE LEAST USED
  857. 1713 STX $FA,Y
  858. 1715 CMP $82
  859. 1717 BEQ $CF1D; LEAST USED BRANCH
  860. 1719 DEY
  861. 1721 BMI $CEFA; NO MORE CHNLS BRANCH
  862. 1723 TAX
  863. 1725 JMP $CF0D; MORE TO CHK BRANCH
  864. 1727 RTS
  865. 1729 ; ** SWITCH ACTIVE & INACTIVE BUFFS **
  866. 1731 JSR $CF09; UPDATE LEAST USED TABLE
  867. 1733 JSR $DFB7; GET INACTIVE BUFF IN A
  868. 1735 BNE $CF6C; INACTIVE BUFF BRANCH
  869. 1737 JSR $D1D3; SET DRV NUM TO 1
  870. 1739 JSR $D28E; GET FREE BUFF
  871. 1741 BMI $CF76; NO BUFF BRANCH
  872. 1743 JSR $DFC2; STORE INACTIVE BUFF
  873. 1745 LDA $80; CURRENT TRK NUM BUFF
  874. 1747 PHA
  875. 1749 LDA $81; CURRENT SECT BUFF
  876. 1751 PHA
  877. 1753 LDA #$01; CODE FOR 1 BYTE
  878. 1755 JSR $D4F6; DIRECT READ BYTES IN A
  879. 1757 STA $81; CURRENT SECT BUFF
  880. 1759 LDA #$00
  881. 1761 JSR $D4F6; DIRECT READ
  882. 1763 STA $80; TRK NUM BUFF
  883. 1765 BEQ $CF66; LAST SECT IN FILE BRANCH
  884. 1767 JSR $D125; GET FILE TYPE
  885. 1769 BEQ $CF57; RELATIVE FILE BRANCH
  886. 1771 JSR $DDAB; CHK IF READ OR WRITE
  887. 1773 BNE $CF57; READ BRANCH
  888. 1775 JSR $CF8C; TOGGLE BUFFS
  889. 1777 JMP $CF5D
  890. 1779 JSR $CF8C;    "     "
  891. 1781 JSR $DE57; READ NEXT SECT
  892. 1783 PLA
  893. 1785 STA $81; SECT BUFF
  894. 1787 .FILE DISK ROM 3
  895.