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

  1. 1 PLA
  2. 3 STA $80; TRK NUM BUFF
  3. 5 JMP $CF6F; GET ACTIVE BUFF
  4. 7 PLA
  5. 9 STA $81; SECT NUM BUFF
  6. 11 PLA
  7. 13 STA $80; TRK NUM BUFF
  8. 15 JSR $CF8C; TOGGLE INACTIVE & ACTIVE BUFFS
  9. 17 JSR $DF93; GET ACTIVE BUFF
  10. 19 TAX
  11. 21 JMP $D599; WAIT FOR ROUT TO FINISH
  12. 23 LDA #$70; CODE NO BUFFS AVAILABLE
  13. 25 JMP $C1C8; ERROR HANDLING
  14. 27 ; ** SET UP DOUBLE BUFFERING **
  15. 29 JSR $CF09; UPDATE LEAST USED TABLE
  16. 31 JSR $DFB7; GET INACTIVE BUFF
  17. 33 BNE $CF8B; FOUND BUFF BRANCH
  18. 35 JSR $D28E; GET FREE BUFF
  19. 37 BMI $CF76; NO BUFFS BRANCH
  20. 39 JSR $DFC2; PUT BUFF FOUND INACTIVE
  21. 41 RTS
  22. 43 ; ** TOGGLE INACTIVE & ACTIVE BUFFS **
  23. 45 LDX $82; INDEX CURRENT CHNL
  24. 47 LDA $A7,X; CHNL TABLES
  25. 49 EOR #$80; SET BIT 7 ACTIVE/INACTIVE
  26. 51 STA $A7,X
  27. 53 LDA $AE,X; CHNL TABLES
  28. 55 EOR #$80; SET BIT 7 ACTIVE/INACTIVE
  29. 57 STA $AE,X
  30. 59 RTS
  31. 61 ; ** WRITE TO INTERNAL WRITE CHNL **
  32. 63 LDX #$12; SEC ADDR WRITE
  33. 65 STX $83; SEC ADDR BUFF
  34. 67 LSR $D107; FIND WRITE CHNL
  35. 69 JSR $C100; TURN ON DRV LED
  36. 71 JSR $D125; GET FILE TYPE
  37. 73 BCC $CFAF; NOT RELATIVE FILE BRANCH
  38. 75 LDA #$20; OVERFLOW FLAG BIT
  39. 77 JSR $DD9D; CLEAR OVERFLOW FLAG
  40. 79 LDA $83; SEC ADDR BUFF
  41. 81 CMP #$0F
  42. 83 BEQ $CFD8; CMND CHNL BRANCH
  43. 85 BNE $CFBF; NOT CMND BRANCH
  44. 87 LDA $84; ORIGINAL SEC ADDR
  45. 89 AND #$8F
  46. 91 CMP #$0F
  47. 93 BCS $CFD8; DATA CHNL BRANCH
  48. 95 JSR $D125; GET FILE TYPE
  49. 97 BCS $CFC9; NOT SEQUENTIAL FILE BRANCH
  50. 99 LDA $85; TEMP DATA
  51. 101 JMP $D1D9; WRITE BYTE TO CHNL
  52. 103 BNE $CFCE; RANDOM ACCESS BRANCH
  53. 105 JMP $E0AB; RELATIVE FILE JUMP
  54. 107 LDA $85; TEMP DATA
  55. 109 JSR $CFF1; USR FILE WRITE
  56. 111 LDY $82; INDEX CURRENT CHNL
  57. 113 JMP $D3EE; SET UP TO WRITE NEXT BYTE
  58. 115 LDA #$04; CODE FOR CMND CHNL
  59. 117 STA $82; INDEX CURRENT CHNL
  60. 119 JSR $D4E8; TEST IF BUFF FULL (GET LAST BYTE)
  61. 121 CMP #$2A
  62. 123 BEQ $CFE8; BUFF FULL BRANCH
  63. 125 LDA $85; CMND MESSAGE BYTE
  64. 127 JSR $CFF1; WRITE TO CMND CHNL
  65. 129 LDA $F8; EOI FLAG
  66. 131 BEQ $CFED; LAST BYTE BRANCH
  67. 133 RTS
  68. 135 INC $0255; SET CMND WAITING FLAG
  69. 137 RTS
  70. 139 ; ** PUT BYTE IN A INTO ACTIVE BUFF **
  71. 141 PHA
  72. 143 JSR $DF933; GET ACTIVE BUFF
  73. 145 BPL $CFFD; ACTIVE BUFF BRANCH
  74. 147 PLA
  75. 149 LDA #$61; FILE NOT OPEN CODE
  76. 151 JMP $C1C8; ERROR HANDLING
  77. 153 ASL
  78. 155 TAX
  79. 157 PLA
  80. 159 STA ($99,X); NEXT BYTE IN BUFF PTR
  81. 161 INC $99,X; IF LAST BYTE Z FLAG SET
  82. 163 RTS
  83. 165 ; ** INIT DRVS **
  84. 167 JSR $C1D1; PARSE CMND
  85. 169 JSR $D042; INIT DRVS
  86. 171 JMP $C194; TERMINATE CMND
  87. 173 ; ** INIT DRV SPECIFIED **
  88. 175 JSR $F10F; GET BAM PTR
  89. 177 TAY
  90. 179 LDX $A7,Y; CHNL TABLES
  91. 181 CPX #$FF; INACTIVE CODE
  92. 183 BNE $D02C; VALID BUFF BRANCH
  93. 185 PHA
  94. 187 JSR $D28E; FIND UNUSED BUFF
  95. 189 TAX
  96. 191 BPL $D024; FOUND BUFF BRANCH
  97. 193 LDA #$70; NO CHNL ERROR CODE
  98. 195 JSR $E648; ERROR HANDLING
  99. 197 PLA; BAM PTR
  100. 199 TAY
  101. 201 TXA; NEW BUFF NUM
  102. 203 ORA #$80; SET BIT 7 INACTIVE
  103. 205 STA $00A7,Y; CHNL TABLES
  104. 207 TXA
  105. 209 AND #$0F
  106. 211 STA $F9; CMND NUM
  107. 213 LDX #$00
  108. 215 STX $81; SECT NUM BUFF
  109. 217 LDX $FE85; #$12 DIRECTORY TRK
  110. 219 STX $80; TRK NUM BUFF
  111. 221 JSR $D6D3; FIND IMAGE BAM HEADER
  112. 223 LDA #$B0; CODE FOR SEEK
  113. 225 JMP $D58C; EXEC CODE (SEEK)
  114. 227 ; ** INIT DRV **
  115. 229 JSR $F0D1; ZERO TRK NUMS
  116. 231 JSR $D313; SET CHNL FOR BAM
  117. 233 JSR $D00E; GET BUFF FOR BAM
  118. 235 LDX $7F; DRV NUM BUFF
  119. 237 LDA #$00
  120. 239 STA $0251,X; DIRTY BAM FLAG (0 OK)
  121. 241 TXA
  122. 243 ASL
  123. 245 TAX
  124. 247 LDA $16; IMAGE 1ST I.D. CHAR
  125. 249 STA $12,X; MASTER I.D BUFF
  126. 251 LDA $17; 2ND I.D. CHAR
  127. 253 STA $13; MASTER I.D. BUFF
  128. 255 JSR $D586; READ BAM INTO BUFF
  129. 257 LDA $F9; CMND CODE
  130. 259 ASL
  131. 261 TAX
  132. 263 LDA #$02
  133. 265 STA $99,X; NEXT BYTE IN BUFF PTR
  134. 267 LDA ($99,X)
  135. 269 LDX $7F; DRV NUM BUFF
  136. 271 STA $0101,X; DOS VERSION FRON TRK 18
  137. 273 LDA #$00
  138. 275 STA $1C,X; WRITE PROTECT FLAG
  139. 277 STA $FF,X; NO DRV FLAG
  140. 279 JSR $EF3A; COUNT FREE BLKS IN BAM
  141. 281 LDY #$04
  142. 283 LDA #$00
  143. 285 TAX
  144. 287 CLC
  145. 289 ADC ($6D),Y; START OF BIT MAP PTR
  146. 291 BCC $D083
  147. 293 INX; HI BYTE COUNTER
  148. 295 INY
  149. 297 INY
  150. 299 INY
  151. 301 INY; Y NOW POINTS TO NEXT TRK
  152. 303 CPY #$48; DIRECTORY TRK
  153. 305 BEQ $D083; SKIP DIRECTORY TRK
  154. 307 CPY #$90; CODE FOR DONE
  155. 309 BNE $D07D; MORE BRANCH
  156. 311 PHA
  157. 313 TXA
  158. 315 LDX $7F; DRV NUM BUFF
  159. 317 STA $O2FC,X; HI BYTE DISK BLKS FREE
  160. 319 PLA
  161. 321 STA $02FA,X; LO  "    "     "      "
  162. 323 RTS
  163. 325 ; ** READ AHEAD **
  164. 327 JSR $D6D0; GET HEADER IMAGE
  165. 329 JSR $D0C3; READ FIRST BLK INTO BUFF
  166. 331 JSR $D599; WAIT FOR READ TO FINISH
  167. 333 JSR $D137; GET 1ST BYTE FROM BUFF
  168. 335 STA $80; TRK NUM BUFF
  169. 337 JSR $D137
  170. 339 STA $81; SECT BUFF
  171. 341 RTS
  172. 343 ; ** READ AHEAD DOUBLE BUFF **
  173. 345 JSR $D09B; READ DATA BLK GET NEXT
  174. 347 LDA $80; TRK NUM BUFF
  175. 349 BNE $D0B7; NOT END OF FILE BRANCH
  176. 351 RTS
  177. 353 JSR $CF1E; SET UP DOUBLE BUFFS
  178. 355 JSR $D6D0; GET HEADER IMAGE
  179. 357 JSR $D0C3; READ 1ST BLK INTO BUFF
  180. 359 JMP $CF1E
  181. 361 ; ** EXEC READ OF TRK & SECT **
  182. 363 LDA #$80; CODE FOR READ CMND
  183. 365 BNE $D0C9; EXEC READ BRANCH
  184. 367 LDA #$90; CODE FOR WRITE CMND
  185. 369 STA $024D; CMND BUFF
  186. 371 JSR $DF93; GET BUFF NUM
  187. 373 TAX
  188. 375 JSR $D506; SET DRV NUM
  189. 377 TXA
  190. 379 PHA
  191. 381 ASL
  192. 383 TAX; INDEX FOR BUFF TABLE
  193. 385 LDA #$00
  194. 387 STA $99,X; NEXT BYTE IN BUFF PTR
  195. 389 JSR $D125; GET FILE TYPE
  196. 391 CMP #$04
  197. 393 BCS $D0E8; NOT SEQUENTIAL FILE BRANCH
  198. 395 INC $B5,X; LO BYTE RECORD # BUFF
  199. 397 BNE $D0E8
  200. 399 INC $BB,X; HI  "     "    "   "
  201. 401 PLA
  202. 403 TAX
  203. 405 RTS
  204. 407 ; ** FIND READ CHNL **
  205. 409 LDA $83; SEC ADDR BUFF
  206. 411 CMP #$13
  207. 413 BCC $D0F3; SEC ADDR TOO BIG BRANCH
  208. 415 AND #$0F
  209. 417 CMP #$0F
  210. 419 BNE $D0F9; NOT CMND CHNL BRANCH
  211. 421 LDA #$10; ERROR CODE SEC ADDR
  212. 423 TAX
  213. 425 SEC
  214. 427 LDA $022B,X; CHNL STATUS BUFF
  215. 429 BMI $D106; NO CHNL ASSIGNED FOR SEC ADD BRANCH
  216. 431 AND #$0F
  217. 433 STA $82; INDEX CURRENT CHNL
  218. 435 TAX
  219. 437 CLC
  220. 439 RTS
  221. 441 ; ** FIND WRITE CHNL **
  222. 443 LDA $83; SEC ADDR BUFF
  223. 445 CMP #$13
  224. 447 BCC $D10F; SEC ADD TOO BIG BRANCH
  225. 449 AND #$0F
  226. 451 TAX
  227. 453 LDA $022B,X; INDEX CHNL STATUS
  228. 455 TAY
  229. 457 ASL
  230. 459 BCC $D121; NO SEC ADD FOR THIS CHNL BRANCH
  231. 461 BMI $D123; "   "   "   "   "    "
  232. 463 TYA
  233. 465 AND #$0F
  234. 467 STA $82; INDEX CURREN CHNL
  235. 469 TAX
  236. 471 CLC
  237. 473 RTS
  238. 475 BMI $D119; INACTIVE CHNL BRANCH
  239. 477 SEC
  240. 479 RTS
  241. 481 ; ** GET FILE TYPE **
  242. 483 LDX $82; CHNL NUM BUFF
  243. 485 LDA $EC,X; FILE TYPE TABLE
  244. 487 LSR
  245. 489 AND #$07
  246. 491 CMP #$04; SETS Z FLAG IF RELATIVE FILE
  247. 493 RTS
  248. 495 ; ** SET BUFF PTRS **
  249. 497 JSR $DF93; GET ACTIVE BUFF NUM
  250. 499 ASL
  251. 501 TAX
  252. 503 LDY $82; CHNL NUM BUFF
  253. 505 RTS
  254. 507 ; ** READ 1 BYTE FROM ACTIVE BUFF **
  255. 509 ; IF LAST BYTE IN BUFF Z FLAG SET
  256. 511 JSR $D12F; SET BUFF PTRS
  257. 513 LDA $0244,Y; PTR LAST CHAR READ
  258. 515 BEQ $D151; LAST CHAR READ BRANCH
  259. 517 LDA ($99,X); NEXT BYTE IN BUFF PTR
  260. 519 PHA
  261. 521 LDA $99,X
  262. 523 CMP $0244,Y
  263. 525 BNE $D14D; PULL DATA OFF STACK BRANCH
  264. 527 LDA #$FF; CODE INACTIVE
  265. 529 STA $99,X; INACTIVE BUFF
  266. 531 PLA
  267. 533 INC $99,X
  268. 535 RTS
  269. 537 LDA ($99,X); NEXT BYTE IN BUFF PTR
  270. 539 INC $99,X
  271. 541 RTS
  272. 543 ; ** READ BYTE FROM FILE **
  273. 545 JSR $D137; GET BYTE ACTIVE BUFF
  274. 547 BNE $D191; NOT LAST BYTE BRANCH
  275. 549 STA $85; TEMP DATA BUFF
  276. 551 LDA $0244,Y; LAST CHAR READ PTR
  277. 553 BEQ $D16A
  278. 555 LDA #$80; EOI CODE
  279. 557 STA $00F2,Y; CHNL STATUS BUFF
  280. 559 LDA $85; TEMP DATA BUFF
  281. 561 RTS
  282. 563 JSR $CF1E; DOUBLE BUFF ROUT
  283. 565 LDA #$00
  284. 567 JSR $D4C8; SET BUFF PTRS
  285. 569 JSR $D137; GET TRK LINK
  286. 571 CMP #$00
  287. 573 BEQ $D192; END OF FILE BRANCH
  288. 575 STA $80; TRK NUM BUFF
  289. 577 JSR $D137; SECT LINK
  290. 579 STA $81; SECT BUFF
  291. 581 JSR $C1FE; BEGING DOUBLE BUFF
  292. 583 JSR $D1D3; SET DRV NUM
  293. 585 JSR $D6D0; SET NEXT HEADER IMAGE
  294. 587 JSR $D0C3; READ NEXT BLK IN FILE
  295. 589 JSR $CF1E; TOGGLE BUFFS READ AHEAD
  296. 591 LDA $85; TEMP DATA BUFF
  297. 593 RTS
  298. 595 JSR $D137; GET NEXT BYTE
  299. 597 LDY $82; INDEX CURRENT CHNL
  300. 599 STA $0244,Y; LAST CHAR READ PTR
  301. 601 LDA $85; TEMP DATA BUFF
  302. 603 RTS
  303. 605 ; ** WRITE CHAR TO ACTIVE CHNL **
  304. 607 JSR $CFF1; WRITE BYTE TO CHNL
  305. 609 BEQ $D1A3; BUFF FULL BRANCH
  306. 611 RTS
  307. 613 JSR $D1D3; SET DRV NUM
  308. 615 JSR $F11E; GET NEXT TRK & SECT
  309. 617 LDA #$00
  310. 619 JSR $D4C8; SET BUFF PTRS
  311. 621 LDA $80; TRK NUM BUFF
  312. 623 JSR $CFF1; SAVE TRK LINK
  313. 625 LDA $81; SECT NUM BUFF
  314. 627 JSR $CFF1; SAVE SECT LINK
  315. 629 JSR $D0C7; WRITE BUFF TO DISK
  316. 631 JSR $CF1E; TOGGLE BUFFS SET INACTIVE BUFF
  317. 633 JSR $D6D0; SET HEADER IMAGE NEXT BLK
  318. 635 LDA #$02; SKIP TRK & SEC LINK
  319. 637 JMP $D4C8; SET PTRS NEXT BUFF
  320. 639 ; ** INCREMENT ACTIVE BUFF POINTER **
  321. 641 STA $6F; TEMP WORK BUFF
  322. 643 JSR $D4E8; GET ACTIVE BUFF PTR
  323. 645 CLC
  324. 647 ADC $6F
  325. 649 STA $99,X; NEXT BYTE IN BUFF PTR
  326. 651 STA $94; DIRECTORY BUFF PTR
  327. 653 RTS
  328. 655 ; ** SET DRV NUM **
  329. 657 JSR $DF93; GET ACTIVE BUFF
  330. 659 TAX
  331. 661 LDA $025B,X; LAST CMND BUFF
  332. 663 AND #$01
  333. 665 STA $7F; DRV NUM BUFF
  334. 667 RTS
  335. 669 ; ** OPEN NEW WRITE CHNL **
  336. 671 SEC
  337. 673 BCS $D1E3; FORCE BRANCH
  338. 675 ; ** OPEN NEW READ CHNL **
  339. 677 CLC
  340. 679 PHP
  341. 681 STA $6F; TEMP WORK BUFF
  342. 683 JSR $D227; FREE CHNLS
  343. 685 JSR $D37F; FIND FREE INDEX CHNL
  344. 687 STA $82; INDEX CURRENT CHNL
  345. 689 LDX $83; SEC ADDR BUFF
  346. 691 PLP
  347. 693 BCC $D1F5; READ BRANCH
  348. 695 ORA #$80; SET BIT 7 (WRITE)
  349. 697 STA $022B,X; CURRENT STATUS BUFF
  350. 699 AND #$3F; MASK WRITE BIT
  351. 701 TAY
  352. 703 LDA #$FF; INACTIVE BUFF CODE
  353. 705 STA $00A7,Y; CHNL TABLES
  354. 707 STA $00AE,Y; CHNL TABLES
  355. 709 STA $00CD,Y; SIDE SECT TABLES
  356. 711 DEC $6F; HOLDS NUM OF BUFFS
  357. 713 BMI $D226; NO MORE BUFFS BRANCH
  358. 715 JSR $D28E; ALLOCATE NEW BUFF
  359. 717 BPL $D217; BUFF NOT ALLOCATED BRANCH
  360. 719 JSR $D25A; REALEASE BUFFS
  361. 721 LDA #$70; NO CHNL ERROR CODE
  362. 723 JMP $C1C8; ERROR HANDLING
  363. 725 STA $00A7,Y; CHNL TABLES
  364. 727 DEC $6F; # OF BUFFS TO ALLOCATE
  365. 729 BMI $D226; NO MORE BUFFS BRANCH
  366. 731 JSR $D28E; ALLOCATE NEW BUFF
  367. 733 BMI $D20F; BUFF NOT ALLOCATED BRANCH
  368. 735 STA $00AE,Y; CHNL TABLES
  369. 737 RTS
  370. 739 ; ** FREE CHNL FROM SEC ADDR **
  371. 741 LDA $83; SEC ADDR BUFF
  372. 743 CMP #$0F
  373. 745 BNE $D22E; NOT CMND CHNL BRANCH
  374. 747 RTS
  375. 749 ; ** FREE DATA CHNL FROM SEC ADDR **
  376. 751 LDX $83; SEC ADDR BUFF
  377. 753 LDA $022B,X; CHNL STATUS TABLE
  378. 755 CMP #$FF
  379. 757 BEQ $D259; INACTIVE BUFF BRANCH
  380. 759 AND #$3F; MASK HI BITS
  381. 761 STA $82; INDEX CURRENT CHNL
  382. 763 LDA #$FF; INACTIVE CODE
  383. 765 STA $022B,X; CHNL STATUS TABLE
  384. 767 LDX $82
  385. 769 LDA #$00
  386. 771 STA $F2,X; CHNL STATUS
  387. 773 JSR $D25A; RELEASE BUFFS
  388. 775 LDX $82
  389. 777 LDA #$01
  390. 779 DEX
  391. 781 BMI $D253; NO MORE CHNLS BRANCH
  392. 783 ASL
  393. 785 BNE $D24D; ALWAYS BRANCHES
  394. 787 ORA $0256; USE WORD BUFF
  395. 789 STA $0256; BIT = 1 FREE BIT = 0 USED
  396. 791 RTS
  397. 793 ; ** RELEASE BUFFS WITH CHNLS **
  398. 795 LDX $82; INDEX CURRENT CHNL
  399. 797 LDA $A7,X; CHNL TABLES
  400. 799 CMP #$FF; INACTIVE CODE
  401. 801 BEQ $D26B; INACTIVE BRANCH
  402. 803 PHA
  403. 805 LDA #$FF
  404. 807 STA $A7,X; SET CHNL INACTIVE
  405. 809 PLA
  406. 811 JSR $D2F3; FREE BUFF
  407. 813 LDX $82
  408. 815 LDA $AE,X; CHNL TABLES
  409. 817 CMP #$FF; INACTIVE CODE
  410. 819 BEQ $D27C; ALREADY FREE BRANCH
  411. 821 PHA
  412. 823 LDA #$FF
  413. 825 STA $AE,X
  414. 827 PLA
  415. 829 JSR $D2F3
  416. 831 LDX $82
  417. 833 LDA $CD,X; SIDE SECT TABLES
  418. 835 CMP #$FF
  419. 837 BEQ $D2D8; ALREADY FREE BRANCH
  420. 839 PHA
  421. 841 LDA #$FF; INACTIVE CODE
  422. 843 STA $CD,X
  423. 845 PLA
  424. 847 JSR $D2F3; FREE BUFF
  425. 849 RTS
  426. 851 ; ** GET FREE BUFF NUM **
  427. 853 TYA; Y HOLDS CHNL NUM
  428. 855 PHA
  429. 857 LDY #$01
  430. 859 JSR $D2BA; FIND FREE BUFF
  431. 861 BPL $D2A3; FREE BUFF FOUND BRANCH
  432. 863 DEY
  433. 865 JSR $D2BA
  434. 867 BPL $D2A3
  435. 869 JSR $D339; TRY TO FREE A BUFF
  436. 871 TAX
  437. 873 BMI $D2B6; NO FREE BUFF BRANCH
  438. 875 LDA $00,X; CMND
  439. 877 BMI $D2A3; WAIT TO FINISH TO GET BUFF
  440. 879 LDA $7F; DRV NUM BUFF
  441. 881 STA $00,X; CMND BUFF
  442. 883 STA $025B,X; LAST CMND BY BUFF
  443. 885 TXA
  444. 887 ASL
  445. 889 TAY
  446. 891 LDA #$02; PTR BEYOND TRK & SEC
  447. 893 STA $0099,Y; NEXT BYTE IN BUFF PTR
  448. 895 PLA
  449. 897 TAY
  450. 899 TXA
  451. 901 RTS
  452. 903 LDX #$07; TEST BIT
  453. 905 LDA $024F,Y; BUFF ALLOCATION TABLE
  454. 907 AND $EFE9,X; BIT MASK TABLE
  455. 909 BEQ $D2C8; FOUND FREE BUFF BRANCH
  456. 911 DEX
  457. 913 BPL $D2BC; MORE BUFFS BRANCH
  458. 915 RTS
  459. 917 LDA $024F,Y
  460. 919 EOR $EFE9,X
  461. 921 STA $024F,Y; FREE BUFF
  462. 923 TXA; BUFF NUM
  463. 925 DEY
  464. 927 BMI $D2D8; FINISHED BRANCH
  465. 929 CLC
  466. 931 ADC #$08
  467. 933 TAX
  468. 935 RTS
  469. 937 ; ** FREE INACTIVE BUFF **
  470. 939 LDX $82; INDEX CURRENT CHNL
  471. 941 LDA $A7,X; CHNL TABLES
  472. 943 BMI $D2E9; BIT 7 SET BRANCH
  473. 945 TXA; HOLDS CHNL NUM
  474. 947 CLC
  475. 949 ADC #$07; MAX NUM CHNLS - 1
  476. 951 TAX; ALTERNATE CHNL
  477. 953 LDA $A7,X
  478. 955 BPL $D2D9; ALTERNATE BUFF ACTIVE TOO BRANCH
  479. 957 CMP #$FF; BUFF FREE CODE
  480. 959 BEQ $D2D9; BUFF FREE BRANCH
  481. 961 PHA
  482. 963 LDA #$FF
  483. 965 STA $A7,X; BUFF FREE
  484. 967 PLA
  485. 969 AND #$0F
  486. 971 TAY:INY
  487. 973 LDX #$10; 16 BITS
  488. 975 ROR $0250; BUFF ALLOCATION
  489. 977 ROR $024F;    "       "
  490. 979 DEY
  491. 981 BNE $D303; BUFF WANTED BRANCH
  492. 983 CLC; TURN CARRY OFF FOR BUFF WANTED
  493. 985 DEX
  494. 987 BPL $D2F9; MORE BITS TO HANDLE BRANCH
  495. 989 RTS
  496. 991 ; ** CLEAR ALL CHNLS EXCEPT CMND CHNL **
  497. 993 LDA #$0E
  498. 995 STA $83; SEC ADDR BUFF
  499. 997 JSR $D227; FREE CHNL THATS DESIGNATED IN SEC ADD
  500. 999 DEC $83
  501. 1001 BNE $D30B; MORE CHNLS BRANCH
  502. 1003 RTS
  503. 1005 ; ** CLOSE ALL CHNLS EXCEPT CMND **
  504. 1007 LDA #$0E
  505. 1009 STA $83; SEC ADDR BUFF
  506. 1011 LDX $83
  507. 1013 LDA $022B,X; STATUS CHNL TABLE
  508. 1015 CMP #$FF
  509. 1017 BEQ $D334; NO CHNL ASSIGNED BRANCH
  510. 1019 AND #$3F; MASK OFF HI BITS
  511. 1021 STA $82; INDEX CURRENT CHNL
  512. 1023 JSR $DF93; GET ACTIVE BUFF NUM
  513. 1025 TAX; HOLDS BUFF NUM
  514. 1027 LDA $025B,X; LAST CMND IN CMND BUFF
  515. 1029 AND #$01
  516. 1031 CMP $7F; DRV NUM BUFF
  517. 1033 BNE $D334; MORE TO CLOSE BRANCH
  518. 1035 JSR $D227; FREE THIS CHNL
  519. 1037 DEC $83; SEC ADDR BUFF
  520. 1039 BPL $D317; MORE TO CLOSE BRANCH
  521. 1041 RTS
  522. 1043 ; ** GET INACTIVE BUFF **
  523. 1045 LDA $6F; TEMP WORK BUFF
  524. 1047 PHA
  525. 1049 LDY #$00
  526. 1051 LDX $FA,Y; LEAST USED BUFF TABLE
  527. 1053 LDA $A7,X; CHNL TABLES
  528. 1055 BPL $D348; ACTIVE BUFF BRANCH
  529. 1057 CMP #$FF
  530. 1059 BNE $D35E; INACTIVE BUFF BRANCH
  531. 1061 TXA; HOLDS CHNL NUM
  532. 1063 CLC
  533. 1065 ADC #$07; MAX NUM OF CHNLS
  534. 1067 TAX; POINTS TO ALTERNATE BUFF
  535. 1069 LDA $A7,X; CHNL TABELS BUFF STATUS
  536. 1071 BPL $D355; BUFF ACTIVE BRANCH
  537. 1073 CMP #$FF
  538. 1075 BNE $D35E; ALTERNATE BUFF ACTIVE BRANCH
  539. 1077 INY
  540. 1079 CPY #$05; MAX CHNLS + 1
  541. 1081 BCC $D33E; MORE CHNLS BRANCH
  542. 1083 LDX #$FF; CODE FOR FAILED
  543. 1085 BNE $D37A; EXIT BRANCH
  544. 1087 STX $6F; TEMP WORK BUFF
  545. 1089 AND #$3F; MASK OFF HI BITS
  546. 1091 TAX
  547. 1093 LDA $00,X; CMND BUFF
  548. 1095 BMI $D363; CMND IN PROGRESS BRANCH
  549. 1097 CMP #$02; ERROR CODE
  550. 1099 BCC $D373; NO ERROR BRANCH
  551. 1101 LDX $6F
  552. 1103 CPX #$07
  553. 1105 BCC $D348; CHK ALTERNATE BUFF BRANCH
  554. 1107 BCS $D355; CHKED ALTERNATE CHK NEXT BRANCH
  555. 1109 LDY $6F
  556. 1111 LDA #$FF
  557. 1113 STA $00A7,Y; BUFF STATUS INACTIVE
  558. 1115 PLA; ORIGINAL BUFF NUM
  559. 1117 STA $6F
  560. 1119 TXA
  561. 1121 RTS
  562. 1123 ; ** FIND FREE CHNL INDEX **
  563. 1125 LDA #$00
  564. 1127 LDA #$01
  565. 1129 BIT $0256; TEST FOR SAME BIT HER AND ACCUMULATOR
  566. 1131 BNE $D391; FREE CHNL SAME BIT
  567. 1133 INY
  568. 1135 ASL
  569. 1137 BNE $D383; MORE TO TEST BRANCH
  570. 1139 LDA #$70; CODE NO CHNL ERROR
  571. 1141 JMP $C1C8; ERROR HANDLING
  572. 1143 EOR #$FF; FLIP BITS
  573. 1145 AND $0256; INUSE INDEX
  574. 1147 STA $0256
  575. 1149 TYA
  576. 1151 RTS
  577. 1153 ; ** GET NEXT BYTE FROM CHNL **
  578. 1155 JSR $D0EB; FIND READ CHNL
  579. 1157 JSR $C100; TURN ON DRV LED
  580. 1159 JSR $D3AA; GET 1 BYTE FROM ANY TYPE FILE
  581. 1161 LDX $82; CHNL NUM BUFF
  582. 1163 LDA $023E,X; DATA BYTE BUFF
  583. 1165 RTS
  584. 1167 ; ** GET 1 BYTE ANY TYPE FILE **
  585. 1169 LDX $82; CHNL NUM BUFF
  586. 1171 JSR $D125; FIND FILE TYPE IF Z FLAG SET RELATIVE
  587. 1173 BNE $D384; NOT RELATIVE BRANCH
  588. 1175 JMP $E120; RELATIVE FILE JUMP
  589. 1177 LDA $83; SEC ADDR BUFF
  590. 1179 CMP #$0F
  591. 1181 BEQ $D414; CMND CHNL BRANCH
  592. 1183 LDA $F2,X; CHNL STATUS
  593. 1185 AND #$08
  594. 1187 BNE $D3D3; NOT EOI (END) BRANCH
  595. 1189 JSR $D125; GET FILE TYPE
  596. 1191 CMP #$07; RANDOM ACCESS CODE
  597. 1193 BNE $D3CE; NOT RANDOM ACCESS BRANCH
  598. 1195 LDA #$89; IF HERE DIRECT ACCESS FILE
  599. 1197 STA $F2,X; CHNL STATUS
  600. 1199 JMP $D3DE; GET NEXT CHAR
  601. 1201 LDA #$00; IF HERE EOI SENT
  602. 1203 STA $F2;X; CHNL STATUS
  603. 1205 RTS
  604. 1207 ; ** TEST FOR LOAD **
  605. 1209 LDA $83; SEC ADDR BUFF
  606. 1211 BEQ $D409; LOAD BRANCH
  607. 1213 JSR $D125; GET FILE TYPE
  608. 1215 CMP #$04
  609. 1217 BCC $D400; NOT RANDOM ACCESS BRANCH
  610. 1219 JSR $D125
  611. 1221 LDA $99,X; NEXT BYTE IN BUFF PTR
  612. 1223 CMP $0244,Y; CHNL NEXT BYTE PTR
  613. 1225 BNE $D3EC; NOT LAST CHAR BRANCH
  614. 1227 LDA #$00
  615. 1229 STA $99,X; SET PTR TO 0
  616. 1231 INC $99,X
  617. 1233 LDA ($99,X)
  618. 1235 STA $023E,Y; DATA BYTE
  619. 1237 LDA $99,X
  620. 1239 CMP $0244,Y
  621. 1241 BNE $D3FF; NOT LAST CHAR BRANCH
  622. 1243 LDA $81; SECT NUM BUFF
  623. 1245 STA $00F2,Y; CHNL STATUS (EOI)
  624. 1247 RTS
  625. 1249 JSR $D156; READ NEXT BYTE
  626. 1251 LDX $82; INDEX CURRENT CHNL
  627. 1253 STA $023E,X; DATA BYTE
  628. 1255 RTS
  629. 1257 LDA $0254; DIRECTORY LIST FLAG
  630. 1259 BEQ $D400; NOT DIRECTORY LIST BRANCH
  631. 1261 JSR $ED67; GET DIRECTORY
  632. 1263 JMP $D403
  633. 1265 ; ** GET BYTE FROM ERROR CHNL **
  634. 1267 JSR $D4E8:CMP #$D4; GET ACTIVE BUFF PTR
  635. 1269 BNE $D433; NOT PTR TO ERROR BUFF BRANCH
  636. 1271 LDA $95; DIRECTORY PTR
  637. 1273 CMP #$02
  638. 1275 BNE $D433; NOT HIGH BYTE ERROR BUFF BRANCH
  639. 1277 LDA #$0D; CODE FOR RETURN
  640. 1279 STA $85; TEMP DATA
  641. 1281 JSR $C123; TURN OFF ERROR LED
  642. 1283 LDA #$00
  643. 1285 JSR $E6C1; TRANS ERROR MES TO ERROR BUFF
  644. 1287 DEC $A5; NEXT BYTE ERROR BUFF PTR
  645. 1289 LDA #$80; CODE EOI
  646. 1291 BNE $D445; FORCED BRANCH
  647. 1293 JSR $D137; READ BYTE ERROR MESSAGE
  648. 1295 STA $85; TEMP DATA
  649. 1297 BNE $D443
  650. 1299 LDA #$D4; LO BYTE ERORR BUFF -1
  651. 1301 JSR $D4C8; SET PTRS
  652. 1303 LDA #$02; HI BYTE ERROR BUFF
  653. 1305 STA $9A,X; NEXT BYTE IN BUFF PTR
  654. 1307 LDA #$88; CODE READY TO TALK
  655. 1309 STA $F7; CHNL STATUS
  656. 1311 LDA $85; TEMP DATA
  657. 1313 STA $0243; LAST BYTE READ BUFF
  658. 1315 RTS
  659. 1317 ; ** READ NEXT TRK & SECT LINK **
  660. 1319 ; IF 1ST BYTE 0 SET END OF FILE (EOF)
  661. 1321 JSR $DF93; GET ACTIVE BUFF NUM
  662. 1323 ASL
  663. 1325 TAX
  664. 1327 LDA #$00
  665. 1329 STA $99,X; NEXT BYTE IN BUFF PTR
  666. 1331 LDA ($99,X)
  667. 1333 BEQ $D45F; NO BORE BLKS BRANCH
  668. 1335 DEC $99,X
  669. 1337 JMP $D156; FORCE READ NEXT SECT $99,X = #$FF
  670. 1339 RTS
  671. 1341 ; ** DIRECT BLK READ **
  672. 1343 LDA #$80; READ CMND
  673. 1345 BNE $D466; FORCED BRANCH
  674. 1347 ; ** DIRECT BLK WRITE **
  675. 1349 LDA #$90; WRITE CMND
  676. 1351 ORA $7F; DRV NUM BUFF
  677. 1353 STA $024D; TEMP CMND BUFF
  678. 1355 LDA $F9; CURRENT CMND BUFF
  679. 1357 JSR $D6D3; SET HEADER IMAGE
  680. 1359 LDX $F9
  681. 1361 JMP $D593; ECECUTE CMND (WRITE)
  682. 1363 ; ** OPEN INTERNAL READ CHNL PROGRAM FILES **
  683. 1365 LDA #$01; CODE FOR PROGRAM TYPE FILE
  684. 1367 ; ** OPEN INTERNAL READ CHNL ANY TYPE FILE **
  685. 1369 STA $024A; ACTIVE FILE TYPE BUFF
  686. 1371 LDA #$11
  687. 1373 STA $83; SEC ADDR BUFF
  688. 1375 JSR $DC46; OPEN READ CHNL
  689. 1377 LDA #$02; SETS PTR PAST TRK & SEC LINK
  690. 1379 JMP $D4C8; SET PTRS
  691. 1381 ; ** OPEN INTERNAL WRITE CHNL **
  692. 1383 LDA #$12
  693. 1385 STA $83; SEC ADDR BUFF
  694. 1387 JMP $DCDA; OPEN WRITE CHNL
  695. 1389 ; ** ALLOCATE NEXT DIRECTORY BLK **
  696. 1391 JSR $DE3B; SET TRK & SEC VALUES FOR HEADER
  697. 1393 LDA #$01
  698. 1395 STA $6F; TEMP WORK BUFF
  699. 1397 LDA $69; SECT INCREMENT USED FOR SEQUENTIAL FILES
  700. 1399 PHA
  701. 1401 LDA #$03; CODE TO INCREMENT DIRECTORY TRK
  702. 1403 STA $69
  703. 1405 JSR $F12D; FIND NEXT AVAILABLE TRK & SEC
  704. 1407 PLA
  705. 1409 STA $69
  706. 1411 LDA #$00
  707. 1413 JSR $D4C8; SET PTR TO 1ST BYTE ACTIVE BUFF
  708. 1415 LDA $80; TRK NUM BUFF
  709. 1417 JSR $CFF1; STORE TRK LINK IN BUFF
  710. 1419 LDA $81; SECT NUM BUFF
  711. 1421 JSR $CFF1; STORE SECT LINK IN BUFF
  712. 1423 JSR $D0C7; WRITE BUFF TO DISK
  713. 1425 JSR $D599; WAIT FOR ROUT TO FINISH
  714. 1427 LDA #$00
  715. 1429 JSR $D4C8; SET PTR TO 1ST BYTE IN BUFF
  716. 1431 JSR $CFF1; FILL BUFF WITH #$00
  717. 1433 BNE $D4BB; FILL BUFF BRANCH
  718. 1435 JSR $CFF1; SET TRK LINK TO #$00
  719. 1437 LDA #$FF
  720. 1439 JMP $CFF1; SECT LINK TO #$FF
  721. 1441 ; ** SET PTR IN ACTIVE DATA BUFF **
  722. 1443 STA $6F; TEMP WORK HOLDS NEW PTR
  723. 1445 JSR $DF93; GET ACTIVE BUFF NUM
  724. 1447 ASL
  725. 1449 TAX
  726. 1451 LDA $9A,X; NEXT BYTE IN BUFF PTR
  727. 1453 STA $95; DIRECTORY BUFF PTR
  728. 1455 LDA $6F
  729. 1457 STA $99,X; NEXT BYTE IN BUFF PTR
  730. 1459 STA $94; DIRECTORY BUFF PTR
  731. 1461 RTS
  732. 1463 ; ** FREE BOTH INTERNAL CHNLS SEC ADD #$11 & #$12 **
  733. 1465 LDA #$11
  734. 1467 STA $83; SEC ADDR BUFF
  735. 1469 JSR $D227; FREE INTERNAL READ CHNL
  736. 1471 LDA #$12
  737. 1473 STA $83
  738. 1475 JMP $D227; FREE INTERNAL WRITE CHNL
  739. 1477 ; **  GET ACTIVE BUFF PTR **
  740. 1479 JSR $DF93; GET ACTIVE BUFF NUM
  741. 1481 ASL
  742. 1483 TAX
  743. 1485 LDA $9A,X; NEXT BYTE IN BUFF PTR
  744. 1487 STA $95; DIRECTORY BUFF PTR
  745. 1489 LDA $99,X; NEXT BYTE IN BUFF PTR
  746. 1491 STA $94; DIRECTORY BUFF PTR
  747. 1493 RTS
  748. 1495 ; ** DIRECT READ ONE BYTE **
  749. 1497 ; A HOLDS POSISTION OF BYTE IN BUFF
  750. 1499 STA $71; TEMP STORAGE
  751. 1501 JSR $DF93; GET ACTIVE BUFF NUM
  752. 1503 TAX; HOLDS ACTIVE BUFF
  753. 1505 LDA $FEE0,X; HI BYTE PTR DATA BUFF
  754. 1507 STA $72; TEMP STORAGE
  755. 1509 LDY #$00
  756. 1511 LDA ($71),Y; BYTE TO READ
  757. 1513 RTS
  758. 1515 ; ** SET UP CMND USING LAST DRV NUM **
  759. 1517 LDA $025B,X; LAST CMND CODE
  760. 1519 AND #$01; LEAVES DRV NUM BITS
  761. 1521 ORA $024D; TEMP CMND CODE BUFF
  762. 1523 ; ** SET UP NEW CMND **
  763. 1525 PHA; SAVE NEW CMND
  764. 1527 STX $F9; NEW CMND BUFF
  765. 1529 TXA; BUFF NUM
  766. 1531 ASL
  767. 1533 TAX
  768. 1535 LDA $07,X; SECT NUM
  769. 1537 STA $024D; TEMP CMND BUFF
  770. 1539 LDA $06,X; TRK NUM
  771. 1541 BEQ $D54A; ILLEGAL TRK BRANCH
  772. 1543 CMP $FED7; #$24 HIGHEST TRK + 1
  773. 1545 BCS $D54A; ILLEGAL TRK BRANCH
  774. 1547 TAX; TRK NUM
  775. 1549 PLA; CMND
  776. 1551 PHA; INSURE CMND NOT LOST
  777. 1553 AND #$F0; MASK DRV BITS
  778. 1555 CMP #$90; WRITE CMND
  779. 1557 BNE $D57A; NOT WRITE BRANCH
  780. 1559 PLA
  781. 1561 PHA
  782. 1563 LSR; FIND DRV NUM BIT
  783. 1565 BCS $D535; DRV # 1 BRANCH
  784. 1567 LDA $0101; DOS VERSION
  785. 1569 BCC $D538; DRV # 0 BRANCH
  786. 1571 LDA $0102; DOS VERSION
  787. 1573 BEQ $D53F; DOS VERSION 0 (OK) BRANCH
  788. 1575 CMP $FED5; DOS NUM #$41 (65) (A)
  789. 1577 BNE $D572; BAD DOS VERSION BRANCH
  790. 1579 TXA; HOLDS TRK NUM
  791. 1581 JSR $F24B; CALCULATE SECTS
  792. 1583 CMP $024D; HOLDS SECT FROM CMND
  793. 1585 BEQ $D54A; LEGAL SECT BRANCH
  794. 1587 BCS $D57A; ILLEGAL TRK OR SEC BRANCH
  795. 1589 JSR $D552; STORE TRK & SEC
  796. 1591 LDA #$66; CODE BAD TRK & SEC
  797. 1593 JMP $E645; ERROR HANDLING
  798. 1595 ; ** SET TRK & SECT VALUES **
  799. 1597 LDA $F9; HOLDS BUFF NUM
  800. 1599 ASL
  801. 1601 TAX
  802. 1603 LDA $06,X; TRK NUM
  803. 1605 STA $80; TRK NUM BUFF
  804. 1607 LDA $07,X; SECT NUM
  805. 1609 STA $81; SECT NUM BUFF
  806. 1611 RTS
  807. 1613 ; ** CHK BAD TRK & SEC VALUES **
  808. 1615 LDA $80; TRACCK NUM BUFF
  809. 1617 BEQ $D54D; ILLEGAL TRK BRANCH
  810. 1619 CMP $FED7; #$24 HIGHEST TRK + 1
  811. 1621 BCS $D54D; ILLEGAL TRK BRANCH
  812. 1623 JSR $F24B; CALCULATE SECTS
  813. 1625 CMP $81; SECT NUM BUFF
  814. 1627 BEQ $D54D; ILLEGAL # OF SECTS BRANCH
  815. 1629 BCC $D54D
  816. 1631 RTS
  817. 1633 ; ** BAD DOS VERSION **
  818. 1635 JSR $D552; STORE TRK & SEC VALUES
  819. 1637 LDA #$73; CODE BAD DOS
  820. 1639 JMP $E645; ERROR HANDLING
  821. 1641 ; ** FINISH CMND EXECD **
  822. 1643 LDX $F9; BUFF USED FOR CMND
  823. 1645 PLA; SAVE CMND
  824. 1647 STA $024D; TEMP CMND BUFF
  825. 1649 STA $00,X; EXEC CMND
  826. 1651 STA $025B,X; LAST CMND BUFF
  827. 1653 RTS
  828. 1655 ; ** EXEC READ CMND **
  829. 1657 LDA #$80
  830. 1659 BNE $D58C; FORCED BRANCH
  831. 1661 ; ** EXEC WRITE CMND **
  832. 1663 LDA #$90
  833. 1665 ORA $7F; DRV NUM BUFF
  834. 1667 LDX $F9; HOLDS BUFF NUM
  835. 1669 STA $024D; TEMP CMND BUFF
  836. 1671 LDA $024D
  837. 1673 JSR $D50E; EXEC CMND
  838. 1675 ; ** WAIT FOR ROUT TO FINISH **
  839. 1677 JSR $D5A6; CHK IF FINISHED
  840. 1679 BCS $D599; NOT FINISHED BRANCH
  841. 1681 PHA; SAVE ERROR CODE
  842. 1683 LDA #$00; CODE CMND COMPLETE
  843. 1685 STA $0298; CMND COMPLETE FLAG
  844. 1687 PLA
  845. 1689 RTS
  846. 1691 ; ** CHK CMND FINISHED **
  847. 1693 LDA $00,X; CMND CODE
  848. 1695 BMI $D5A8; NOT FINISHED BRANCH
  849. 1697 CMP #$02; ERROR CODE
  850. 1699 BCC $D5C2; NO ERROR BRANCH
  851. 1701 CMP #$08; WRITE PROTECT ERROR
  852. 1703 BEQ $D5BA; WRITE ERROR BRANCH
  853. 1705 CMP #$0B; I.D. MISMATCH CODE
  854. 1707 BEQ $D5BA
  855. 1709 CMP $0F; NON FATAL ERROR CODE
  856. 1711 BNE $D5C6; TRY AGAIN BRANCH
  857. 1713 BIT $0298; TEST BIT 7 CMND COMPLETE
  858. 1715 BMI $D5C2; IF SET DISK INITD
  859. 1717 ; IF SET 1ST ATTEMPT AT CMND SET CARRY CLEAR (OK)
  860. 1719 JMP $D63F; TRY TO RECOVER BRANCH
  861. 1721 CLC
  862. 1723 RTS
  863. 1725 SEC; CARRY SET FAILURE
  864. 1727 RTS
  865. 1729 TYA; HOLDS DRV NUM
  866. 1731 PHA
  867. 1733 LDA $7F; DRV NUM BUFF
  868. 1735 PHA
  869. 1737 LDA $025B,X; LAST CMND BUFF
  870. 1739 AND #$01; MASK NON DRV BITS
  871. 1741 STA $7F
  872. 1743 TAY
  873. 1745 LDA $FECA,Y; #$08 LED MASK DRV # 0
  874. 1747 STA $026D; ERROR LED BUFF (FLASH)
  875. 1749 JSR $D6A6; LAST RECOVERY ATTEMPT
  876. 1751 CMP #$02; ERROR CODE
  877. 1753 BCS $D5E3; RECOVERY WORKED BRANCH
  878. 1755 JMP $D66D; RECOVERY FAILED JUMP
  879. 1757 LDA $025B,X; ORIGINAL CMND
  880. 1759 AND #$F0; MASK DRV BITS
  881. 1761 PHA
  882. 1763 CMP #$90; WRITE CODE
  883. 1765 BNE $D5F4; NOT WRITE BRANCH
  884. 1767 LDA $7F; DRV NUM BUFF
  885. 1769 ORA #$B8; CODE SEEK SECT
  886. 1771 STA $025B,X
  887. 1773 BIT $6A; BIT 6 = HEAD ON TRK
  888. 1775 BVS $D631; HEAD ON TRK BRANCH
  889. 1777 .FILE DISK ROM 4
  890.