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

  1. 1 LDX $82; INDEX CURRENT CHNL
  2. 3 LDA $CD,X; SIDE SECT TABLE
  3. 5 JMP $CFFD; STORE BYTE IN BUFF
  4. 7 ; ** SET OR CLEAR CARRY FLG **
  5. 9 BCC $DD9D; CARRY FLG CLEAR BRANCH
  6. 11 LDX $82; INDEX CURRENT CHNL
  7. 13 ORA $EC,X; CHNL FILE TYPE
  8. 15 BNE $DDA3; NEW FILE TYPE BRANCH
  9. 17 LDX $82
  10. 19 EOR #$FF; FLIP ALL BITS
  11. 21 AND $EC,X
  12. 23 STA $EC,X
  13. 25 RTS
  14. 27 ; ** TEST FLG **
  15. 29 LDX $82; INDEX CURRENT CHNL
  16. 31 AND $EC,X; CHNL FILE TYPE
  17. 33 RTS
  18. 35 ; ** TEST FOR WRITE CMND **
  19. 37 JSR $DF93; GET ACTIVE BUFF NUM
  20. 39 TAX; HOLDS BUFF NUM
  21. 41 LDA $025B,X; LAST CMND BUFF
  22. 43 AND #$F0; MASK DRV BITS
  23. 45 CMP #$90; SETS Z FLG IF WRITE (#$90)
  24. 47 RTS
  25. 49 ; ** TEST FOR ACTIVE FILES @ READ & WRITE INDEX **
  26. 51 LDX #$00
  27. 53 STX $71; TEMP WORK
  28. 55 LDA $022B,X; BUFF NUM THIS SEC ADD
  29. 57 CMP #$FF; INACTIVE CODE
  30. 59 BNE $DDCA; TEST MORE BRANCH
  31. 61 LDX $71
  32. 63 INX
  33. 65 CPX #$10; MAXIMUM SEC ADDRES
  34. 67 BCC $DDB9; CHECK MORE BRANCH
  35. 69 RTS
  36. 71 STX $71; TEMP WORK (SEC ADD)
  37. 73 AND #$3F; MASK HI BITS
  38. 75 TAY
  39. 77 LDA $00EC,Y; FILE TYPE THIS SEC ADD
  40. 79 AND #$01; MASK NON DRV BITS
  41. 81 STA $70; TEMP WORK BUFF
  42. 83 LDX $0253; DIRECTORY ENTRY FND FLG
  43. 85 LDA $E2,X; DRV NUM THIS SEC ADD
  44. 87 AND #$01; MASK NON DRV BITS
  45. 89 CMP $70; HOLDS DRV NUM
  46. 91 BNE $DDC2; MORE TEST BRANCH
  47. 93 LDA $0260,Y; SECT DIRECTORY ENTRY BUFF
  48. 95 CMP $D8,X; SECT DIRECTORY ENTRIES
  49. 97 BNE $DDC2; MORE TEST BRANCH
  50. 99 LDA $0266,Y; INDEX DIRECTORY ENTRY BY BUFF
  51. 101 CMP $DD,X; INDEX OF DIRECTORY ENTRIES
  52. 103 BNE $DDC2; TEST MORE BRANCH
  53. 105 CLC; ALL TESTS (null)OD FND ACTIVE FILE
  54. 107 RTS
  55. 109 ; ** WRITE OUT BUFF IF DIRTY **
  56. 111 ; IT'S DIRTY IF RAM DOES NOT MATCH DISK NOT DIRTY NO WRITE
  57. 113 JSR $DF9E; GET ACTIVE BUFF NUM
  58. 115 BVC $DDFC; IF V FLG CLEAR NOT DIRTY
  59. 117 JSR $DE5E; WRITE OUT BUFF TO DISK
  60. 119 JSR $D599; WAIT FOR WRITE TO FINISH
  61. 121 RTS
  62. 123 ; ** PUT TRK & SECT INTO HEADER **
  63. 125 JSR $DE2B; SET PTRS TO HEADER
  64. 127 LDA $80; TRK NUM BUFF
  65. 129 STA ($94),Y; DIRECTORY BUFF
  66. 131 INY
  67. 133 LDA $81; SECT NUM BUFF
  68. 135 STA ($94),Y
  69. 137 JMP $E105; SET DIRTY BUFF FLG
  70. 139 ; ** SET TRK & SECT FROM LINK IN BUFF **
  71. 141 JSR $DE2B; SET PTR TO HEADER
  72. 143 LDA ($94),Y; DIRECTORY BUFF
  73. 145 STA $80; TRK NUM BUFF
  74. 147 INY
  75. 149 LDA ($94),Y
  76. 151 STA $81; SECT NUM BUFF
  77. 153 RTS
  78. 155 ; ** SET TRK LINK TO 0 SECT TO LAST NON 0 CHAR IN BUFF **
  79. 157 JSR $DE2B; SET PTR TO HEADER
  80. 159 LDA #$00
  81. 161 STA ($94),Y; DIRECTORY BUFF
  82. 163 INY
  83. 165 LDX $82; INDEX CURRENT CHNL
  84. 167 LDA $C1,X; NEXT RECORD NUM TABLE
  85. 169 TAX
  86. 171 DEX
  87. 173 TXA
  88. 175 STA ($94),Y; SECT LINK
  89. 177 RTS
  90. 179 ; ** SET UP PTR TO ACTIVE BUFF **
  91. 181 JSR $DF93; GET ACTIVE BUFF NUM
  92. 183 ASL
  93. 185 TAX
  94. 187 LDA $9A,X; NEXT BYTE IN BUFF PTR
  95. 189 STA $95; DIRECTORY BUFF
  96. 191 LDA #$00
  97. 193 STA $94; LO BYTE DIRECTORY BUFF
  98. 195 LDY #$00
  99. 197 RTS
  100. 199 ; ** SET TRK & SECT FROM HEADER **
  101. 201 JSR $D0EB; FIND READ CHNL
  102. 203 JSR $DF93; GET ACTIVE BUFF NUM
  103. 205 STA $F9; CMND NUM BUFF
  104. 207 ASL
  105. 209 TAY
  106. 211 LDA $0006,Y; TRK NUM
  107. 213 STA $80; TRK NUM BUFF
  108. 215 LDA $0007,Y; SECT NUM
  109. 217 STA $81; SECT NUM BUFF
  110. 219 RTS
  111. 221 ; ** EXECUTE READ & WRITE CMNDS **
  112. 223 LDA #$90; CODE FOR WRITE
  113. 225 STA $024D; TEMP CMND BUFF
  114. 227 BNE $DE7F; FORCED BRANCH
  115. 229 LDA #$80; WRITE CMND
  116. 231 STA $024D
  117. 233 BNE $DE7F; FORCED BRANCH
  118. 235 LDA #$90; WRITE CMND
  119. 237 STA $024D
  120. 239 BNE $DE8B; FORCED BRANCH
  121. 241 LDA #$80; READ CMND
  122. 243 STA $024D
  123. 245 BNE $DE8B; FORCED BRANCH
  124. 247 LDA #$90; WRITE CMND
  125. 249 STA $024D
  126. 251 BNE $DE75; FORCED BRANCH
  127. 253 LDA #$80; WRITE CMND
  128. 255 STA $024D
  129. 257 LDX $82; INDEX CURRENT CHNL
  130. 259 LDA $CD,X; SIDE SECT TABLES
  131. 261 TAX
  132. 263 BPL $DE92; CONTINUE BRANCH
  133. 265 JSR $D6D0; SET HEADER FROM TRK & SEC
  134. 267 JSR $DF93; GET ACTIVE BUFF NUM
  135. 269 TAX
  136. 271 LDA $7F; DRV NUM BUFF
  137. 273 STA $025B,X; LAST CMND BUFF
  138. 275 JSR $E115; CLEAR DIRTY BUFF FLG
  139. 277 JSR $DF93; GET ACTIVE BUFF NUM
  140. 279 TAX
  141. 281 JMP $D506; SET LAST USED BUFF
  142. 283 ; ** SET TRK & SECT FROM LINK IN BUFF **
  143. 285 LDA #$00
  144. 287 JSR $D4C8; SET BUFF PTR 1ST BYTE IN BUFF
  145. 289 JSR $D137; READ TRK LINK
  146. 291 STA $80; TRK NUM BUFF
  147. 293 JSR $D137; READ SECT LINK
  148. 295 STA $81; SECT BUFF
  149. 297 RTS
  150. 299 ; ** TRANSFER BYTES BETWEEN TWO BUFFS **
  151. 301 ; A = NUM OF BYTES TO MOVE
  152. 303 ; X = TO BUFF NUM
  153. 305 ; Y = FROM BUFF NUM
  154. 307 PHA; SAVE NUM OF BYTES TO MOVE
  155. 309 LDA #$00
  156. 311 STA $6F; TEMP WORK
  157. 313 STA $71;  "    "
  158. 315 LDA $FEE0,Y; HI BYTE DATA BUFF (FROM)
  159. 317 STA $70; TEMP WORK
  160. 319 LDA $FEE0,X; HI BYTE DATA BUFF (TO)
  161. 321 STA $72; TEMP WORK
  162. 323 PLA; BYTES TO MOVE
  163. 325 TAY; INDEX
  164. 327 DEY
  165. 329 LDA ($6F),Y; FROM BYTE
  166. 331 STA ($71),Y; TO BYTE
  167. 333 DEY
  168. 335 BPL $DEB9; MOVE MORE BRANCH
  169. 337 RTS
  170. 339 ; ** CLEAR BUFF **
  171. 341 ; A HOLDS BUFF NUM
  172. 343 TAY
  173. 345 LDA $FEE0,Y; HI BYTE DTAT BUFF
  174. 347 STA $70; TEMP WORK
  175. 349 LDA #$00
  176. 351 STA $6F
  177. 353 TAY
  178. 355 STA ($6F),Y
  179. 357 INY
  180. 359 BNE $DECC; MORE TO CLEAR BRANCH
  181. 361 RTS
  182. 363 ; ** SET SIDE SECT PTR TO 0 **
  183. 365 LDA #$00
  184. 367 JSR $DEDC; SET DIREC BUFF TO SIDE SEC PTR
  185. 369 LDY #$02
  186. 371 LDA ($94),Y; SIDE SEC PTR
  187. 373 RTS
  188. 375 ; ** USE SIDE SECT PTR TO SET DIRECTORY BUFF **
  189. 377 ; A HOLDS LO BYTE
  190. 379 STA $94; DIRECTORY BUFF
  191. 381 LDX $82; INDEX CURRENT CHNL
  192. 383 LDA $CD,X; SIDE SECT TABLES
  193. 385 TAX
  194. 387 LDA $FEE0,X; HI BYTE DATA BUFF
  195. 389 STA $95; DIRECTORY BUFF
  196. 391 RTS
  197. 393 ; ** USE SIDE SECT PTR TO SET DIR BUFF & BUFF TAB **
  198. 395 ; A HOLDS LO BYTE
  199. 397 PHA
  200. 399 JSR $DEDC; SET DIR BUFF FROM SS PTR
  201. 401 PHA
  202. 403 TXA
  203. 405 ASL
  204. 407 TAX
  205. 409 PLA; HI BYTE SS BUFF PTR
  206. 411 STA $9A,X; NEXT BYTE IN BUFF PTR
  207. 413 PLA; LO BYTE SS BUFF PTR
  208. 415 STA $99,X; NEXT BYTE IN BUFF PTR
  209. 417 RTS
  210. 419 ; ** USE SIDE SEC # & SIDE SEC INDEX TO SET SIDE SEC & BUFF TAB **
  211. 421 JSR $DF66; TEST SIDE SEC PRESENT & IN RANGE
  212. 423 BMI $DF0B; OUT OF RANGE BRANCH
  213. 425 BVC $DF12; PRESENT BRANCH
  214. 427 LDX $82; INDEX CURRENT CHNL
  215. 429 LDA $CD,X; SIDE SECT TABLES
  216. 431 JSR $DF1B; READ SIDE SECT
  217. 433 JSR $DF66; TEAST AGAIN
  218. 435 BPL $DF12; IN RANGE BRANCH
  219. 437 JSR $E1CB; SET SIDE SEC & BUF TAB TO LAST RECORD
  220. 439 BIT $FECE; #$7F SET FLGS
  221. 441 RTS
  222. 443 LDA $D6; INDEX TO SIDE SECT
  223. 445 JSR $DEE9; SET DIRECT BUFF & BUFF TAB
  224. 447 BIT $FECD; #$3F SET FLGS
  225. 449 RTS
  226. 451 ; ** INDIRECT BLK READ OR WRITE **
  227. 453 ; A = BUFF NUM
  228. 455 ; X = ACTIVE BUFF
  229. 457 ; Y POINTS TO TRK & SECT TO R/W
  230. 459 STA $F9; CMND NUM BUFF
  231. 461 LDA #$80; READ CMND
  232. 463 BNE $DF25; NOT READ BRANCH
  233. 465 STA $F9
  234. 467 LDA #$90; WRITE CMND
  235. 469 PHA
  236. 471 LDA $EC,X; CHNL FILE TYPE
  237. 473 AND #$01; MASK NON DRV BITS
  238. 475 STA $7F; DRV NUM BUFF
  239. 477 PLA; HOLDS CMND
  240. 479 ORA $7F
  241. 481 STA $024D; TEMP CMND BUFF
  242. 483 LDA ($94),Y; DIRECTORY BUFF
  243. 485 STA $80; TRK NUM BUFF
  244. 487 INY
  245. 489 LDA ($94),Y
  246. 491 STA $81; SECT BUFF NUM
  247. 493 LDA $F9
  248. 495 JSR $D6D3; SET UP HEADER
  249. 497 LDX $F9
  250. 499 JMP $D593; EXECUTE CMND
  251. 501 ; ** SET SIDE SECT PTRS **
  252. 503 LDX $82; INDEX CURRENT CHNL
  253. 505 LDA $CD,X; SIDE SECT TABLES
  254. 507 JMP $D4EB; SET DIRECTORY BUFF PTRS
  255. 509 ; ** CALCULATE SIDE SECTS **
  256. 511 LDA #$78; NUM OF SIDE SECT IN A BUFF
  257. 513 JSR $DF5C; ADD NUM OF SIDE SECTS NEEDED
  258. 515 DEX
  259. 517 BPL $DF4C
  260. 519 LDA $72; HOLDS SIDE SEC INDEXES
  261. 521 LSR; TWO BYTES TRK & SEC FOR EACH INDEX
  262. 523 JSR $DF5C
  263. 525 LDA $73; NUM OF SIDE SECTS
  264. 527 CLC
  265. 529 ADC $70
  266. 531 STA $70
  267. 533 BCC $DF65; END
  268. 535 INC $71
  269. 537 RTS
  270. 539 ; ** TEST SIDE SECT # & SIDE SECT IMAGE & PRESENCE **
  271. 541 ; MEANING OF FLGS ON RETURN
  272. 543 ; N RANRETURNE    V PRESENT
  273. 545 ; 0 OK       0 YES     ER0
  274. 547 ; 0 MAYBE    1 NO      ER1
  275. 549 ; 1 BAD      0 YES     ER2
  276. 551 ; 1 BAD      1 NO      ER3
  277. 553 JSR $DED2; SET PTR 0 GET SIDE SEC #
  278. 555 CMP $D5; NUM OF SIDE SECT
  279. 557 BNE $DF7B
  280. 559 LDY $D6; INDEX TO SIDE SECT
  281. 561 LDA ($94),Y
  282. 563 BEQ $DF77; WRONG SIDE SECT PRESENT
  283. 565 BIT $FECD; #$3F ER0 CLEARS N & V FLGS
  284. 567 RTS
  285. 569 BIT $FECF; #$BF ER2 OUT OF RANGE
  286. 571 RTS
  287. 573 LDA $D5
  288. 575 CMP #$06; NUM SIDE SECT LINKS
  289. 577 BCS $DF8B; GREATER THAN 6 BRANCH
  290. 579 ASL
  291. 581 TAY
  292. 583 LDA #$04; LO BYTE PTR
  293. 585 STA $94; DIRECTORY BUFF
  294. 587 LDA ($94),Y
  295. 589 BNE $DF8F
  296. 591 BIT $FED0; #$FF ER3 OUT OF RANGE
  297. 593 RTS
  298. 595 BIT $FECE; #$7F ER1 NOT PRESENT
  299. 597 RTS
  300. 599 ; ** GET ACTIVE BUFF NUM **
  301. 601 LDX $82; INDEX CURRENT CHNL
  302. 603 LDA $A7,X; CHNL STATUS TABLE
  303. 605 BPL $DF9B; BUFF ACTIVE BRANCH
  304. 607 LDA $AE,X; CHNL STATUS TABLE
  305. 609 AND #$BF; MASK DIRTY BIT
  306. 611 ; ON EXIT A = ACTIVE BUFF NUM
  307. 613 ;         X = INDEX
  308. 615 ;         N FLG = 1 NOT ACTIVE
  309. 617 RTS
  310. 619 ; ** GET ACTIVE BUFF & SET BUFF USED **
  311. 621 ; ON EXIT A = ACTIVE BUFF NUM
  312. 623 ;         X= INDEX
  313. 625 ;         N FLG = 1 NO ACTIVE BUFF
  314. 627 ;         V FLG = 1 BUFF DIRTY
  315. 629 LDX $82; INDEX CURRENT CHNL
  316. 631 STX $0257; LAST BUFF USED
  317. 633 LDA $A7,X; CHNL STATUS TABLE
  318. 635 BPL $DFB0; BUFF ACTIVE BRANCH
  319. 637 TXA
  320. 639 CLC
  321. 641 ADC #$07; MINIMUM # CHNLS + 1
  322. 643 STA $0257
  323. 645 LDA $AE,X; CHNL STATUS TABLE
  324. 647 STA $70; TEMP WORK
  325. 649 AND #$1F
  326. 651 BIT $70; SET N & V FLGS
  327. 653 RTS
  328. 655 ; ** GET CHNLS INACTIVE BUFF NUM **
  329. 657 ; ON ENTRY INDEX = CHNL NUM
  330. 659 ; ON EXIT A = BUFF # #$FF IF NONE
  331. 661 LDX $82; INDEX CURRENT CHNL
  332. 663 LDA $A7,X; CHNL STATUS TABLE
  333. 665 BMI $DFBF; BUFF INACTIVE BRANCH
  334. 667 LDA $AE,X; CHNL STATUS TABLE
  335. 669 CMP #$FF; SET Z FLG
  336. 671 RTS
  337. 673 ; ** SET INACTIVE BUFF NUM **
  338. 675 LDX $82; INDEX CURRENT CHNL
  339. 677 ORA #$80; SET INACTIVE BIT
  340. 679 LDY $A7,X; CHNL STATUS TABLE
  341. 681 BPL $DFCD; OTHER BUFF INACTIVE BRANCH
  342. 683 STA $A7,X
  343. 685 RTS
  344. 687 STA $AE,X; CHNL STATUS TABLE
  345. 689 RTS
  346. 691 ; ** SET UP NEXT RELATIVE RECORD **
  347. 693 LDA #$20
  348. 695 JSR $DD9D; CLEAR RECORD OVERFLOW FLG
  349. 697 LDA #$80
  350. 699 JSR $DDA6; TEST LAST RECORD FLG
  351. 701 BNE $E01D; NOT LAST RECORD BRANCH
  352. 703 LDX $82; INDEX CURRENT CHNL
  353. 705 INC $B5,X; LO BYTE CHNL TABLE
  354. 707 BNE $DFE4
  355. 709 INC $BB,X; HI  "      "      "
  356. 711 LDX $82
  357. 713 LDA $C1,X; [130] REC[176]D NUM TABLE
  358. 715 BEQ $E018; NO [130] REC[176]D BRANCH
  359. 717 JSR $D4E8; [161] BUFF PTR
  360. 719 LDX $82
  361. 721 CMP $C1,X;[130] REC[176]D # TABLE
  362. 723 BCC $DFF6
  363. 725 JSR $E03C; SET UP [130] BUFF
  364. 727 LDX $82; INDEX CURRENT CHNL
  365. 729 LDA $C1,X
  366. 731 JSR $D4C8; SET PTR [164] [130] REC[176]D
  367. 733 LDA ($99,X); PTR [130] BYTE IN BUFF TABLE
  368. 735 STA $85; TEMP [131]
  369. 737 LDA #$20
  370. 739 JSR $DD9D; CLEAR REC[176]D OVERFLOW FLG
  371. 741 JSR $E304; ADVANCE PTR
  372. 743 PHA
  373. 745 BCC $E034; HAVE [168] CROSSED BLK BOUNDRY
  374. 747 LDA #$00
  375. 749 JSR $D4F6; [135] TRK LINK [131] BLK
  376. 751 BNE $E034; [168] LAST TRK BRANCH
  377. 753 PLA
  378. 755 CMP #$02
  379. 757 BEQ $E02A
  380. 759 LDA #$80
  381. 761 JSR $DD97; TEST LAST REC[176]D FLG
  382. 763 JSR $D12F; [161] PTRS
  383. 765 LDA $99,X; [130] BYTE IN BUFF TABLE
  384. 767 STA $0244,Y; LAST CHAR PTR
  385. 769 LDA #$0D; CARRIAGE [142]
  386. 771 STA $85; TEMP [131] BYTE
  387. 773 RTS
  388. 775 JSR $E035; S[164]RE [130] REC[176]D [197]UE
  389. 777 LDX $82; INDEX [130] CHNL
  390. 779 LDA #$00
  391. 781 STA $C1,X; [130] REC[176]D TABLE
  392. 783 RTS
  393. 785 PLA; [162] [130] REC[176]D NUM
  394. 787 LDX $82; INDEX CURRENT CHNL
  395. 789 STA $C1,X; [130] REC[176]D TABLE
  396. 791 JMP $E16E; SET PTR [164] LAST CHAR
  397. 793 ; [172][172] SET UP [130] REC[176]D IN BUFF [172][172]
  398. 795 JSR $D1D3; SET DRV NUM
  399. 797 JSR $DE95; SET TRK & SEC FROM LINKS
  400. 799 JSR $DF9E; TEST [139] BUFF DIRTY
  401. 801 BVC $E05D; CLEAN BUFF BRANCH
  402. 803 JSR $DE5E; WRITE BUFF
  403. 805 JSR $CF1E; [164]GGLE INACTIVE[173]ACTIVE BUFFS
  404. 807 LDA #$02
  405. 809 JSR $D4C8; SET THE PTRS
  406. 811 JSR $DDAB; TEST LAST CMND WRITE
  407. 813 BNE $E07B; [168] WRITE BRANCH
  408. 815 JSR $DE57; [135] IN BUFF NEEDED
  409. 817 JMP $D599; [146] [129] [135] [164] FINISH
  410. 819 JSR $CF1E; [164]GGLE INACTIVE[173]ACTIVE BUFFS
  411. 821 JSR $DDAB; TEST LAST CMND WRITE
  412. 823 BNE $E06B; [168] WRITE BRANCH
  413. 825 JSR $DE57; [135] IN BUFF NEEDED
  414. 827 JSR $D599; [146] [129] [135] [164] FINISH
  415. 829 JSR $DE95; SET TRK & SEC FROM LINK
  416. 831 LDA #$80
  417. 833 BEQ $E07B; LAST BLK NO DOUBLE BUFF
  418. 835 JSR $CF1E; [164]GGLE INACTIVE[173]ACTIVE BUFFS
  419. 837 JSR $DE57; [135] IN BUFF NEEDED
  420. 839 JSR $CF1E
  421. 841 RTS
  422. 843 ; [172][172] PUT RELATIVE FILE IN BUFF [172][172]
  423. 845 JSR $E105; SET DIRTY BUFF FLG
  424. 847 JSR $DF93; [161] ACTIVE BUFF NUM
  425. 849 ASL
  426. 851 TAX
  427. 853 LDA $85; TEMP [131] BYTE
  428. 855 STA ($99,X); [130] BYTE IN BUFF PTR
  429. 857 LDY $99,X; LO BYTE PTR
  430. 859 INY
  431. 861 BNE $E096
  432. 863 LDY $82; INDEX CURRENT CHNL
  433. 865 LDA $00C1,Y; [130] REC[176]D # TABLE
  434. 867 BEQ $E09E
  435. 869 LDY #$02
  436. 871 TYA
  437. 873 LDY $82
  438. 875 CMP $00C1,Y
  439. 877 BNE $E0A3; [130] REC[176]D [168] PTR
  440. 879 LDA #$20
  441. 881 JMP $DD97; SET REC[176]D OVERFLOW FLG
  442. 883 INC $99,X
  443. 885 BNE $E0AA; D[145]T NEED [130] BUFF
  444. 887 JSR $E03C; [161] [130] BUFF
  445. 889 RTS
  446. 891 ; [172][172] WRITE RELATIVE FILE [172][172]
  447. 893 LDA #$A0
  448. 895 JSR $DDA6; SET LAST REC[176]D & OVERFLOW FLG
  449. 897 BNE $E0D9; FLG SET BRANCH
  450. 899 LDA $85; TEMP [131] BYTE
  451. 901 JSR $E07C; PUT BYTE IN BUFF
  452. 903 LDA $F8; TEMP [129] EOI
  453. 905 BEQ $E0C8; EOI [168] SENT BRANCH
  454. 907 RTS
  455. 909 LDA #$20
  456. 911 JSR $DDA6; TEST [129] OVERFLOW
  457. 913 BEQ $E0C8; NO OVERFLOW BRANCH
  458. 915 LDA #$51
  459. 917 STA $026C; ERR[176] W[176]D [129] RECOVERY
  460. 919 JSR $E0F3; CLEAR REST OF REC[176]D
  461. 921 JSR $E153; SET UP [130] REC[176]D
  462. 923 LDA $026C
  463. 925 BEQ $E0D6; NO ERR[176] BRANCH
  464. 927 JMP $C1C8; ERR[176] H[175]LING
  465. 929 JMP $E6BC;   "      "
  466. 931 [175] #$80
  467. 933 BNE $E0E2; LAST REC[176]D SET BRANCH
  468. 935 LDA $F8; TEMP [129] EOI
  469. 937 BEQ $E0BC; NO EOI BRANCH
  470. 939 RTS
  471. 941 LDA $85; TEMP [131] BYTE
  472. 943 PHA
  473. 945 JSR $E31C; ADD RELATIVE FILE
  474. 947 PLA
  475. 949 STA $85
  476. 951 LDA #$80
  477. 953 JSR $DD9D; CLEAR LAST REC[176]D FLG
  478. 955 JMP $E0B2; JUMP [129] M[176]E
  479. 957 ; [172][172] CLEAR REST OF RELATIVE FILE [172][172]
  480. 959 LDA #$20
  481. 961 JSR $DDA6; TEST OVERFLOW FLG
  482. 963 BNE $E104; OVERFLOW BRANCH
  483. 965 LDA #$00
  484. 967 STA $85; TEMP [131] BYTE
  485. 969 JSR $E07C; PUT NULL BYTE IN BUFF
  486. 971 JMP $E0F3; FILL BUFF 0'S
  487. 973 RTS
  488. 975 ; [172][172] SET DIRTY BUFF FLG (CHANGE IN BUFF) [172][172]
  489. 977 LDA #$40
  490. 979 JSR $DD97; SET THE FLG
  491. 981 JSR $DF9E; [161] ACTIVE BUFF NUM
  492. 983 [176]A #$40; SET BUFF DIRTY FLG
  493. 985 LDX $0257; LAST BUFF USED
  494. 987 STA $A7,X; CHNL STATUS TABLE
  495. 989 RTS
  496. 991 ; [172][172] CLEAR DIRTY BUFF FLG [172][172]
  497. 993 JSR $DF9E; [161] ACTIVE BUFF NUM
  498. 995 [175] #$BF; CLEAR FLG
  499. 997 LDX $0257; LAST BUFF USED
  500. 999 STA $A7,X; CHNL STATUS TABLE
  501. 1001 RTS
  502. 1003 ; [172][172] [135] RELATIVE FILE [172][172]
  503. 1005 LDA #$80
  504. 1007 JSR $DDA6; TEST LAST REC[176]D FLG
  505. 1009 BNE $E15E; LAST REC[176]D ERR[176]
  506. 1011 JSR $D12F; SET POITERS [164] EXISTING BUFF
  507. 1013 LDA $99,X; [130] BYTE IN BUFF PTR
  508. 1015 CMP $0244,Y; LAST CHAR PTR
  509. 1017 BEQ $E153; [130] REC[176]D BRANCH
  510. 1019 INC $99,X
  511. 1021 BNE $E13B; D[145]T NEED [130] BUFF
  512. 1023 JSR $E03C; [135] [130] BUFF
  513. 1025 JSR $D12F
  514. 1027 LDA ($99,X); [131] BYTE
  515. 1029 STA $023E,Y; CHNL [131] BYTE
  516. 1031 LDA #$89; CODE R[175]OM ACCESS [135]Y
  517. 1033 STA $00F2,Y; CHNL STATUS BUFF
  518. 1035 LDA $99,X; [130] BYTE IN BUFF PTR
  519. 1037 CMP $0244,Y; LAST CHAR PTR
  520. 1039 BEQ $E14D; S[128] EOI BRANCH
  521. 1041 RTS
  522. 1043 LDA #$81; CODE R[175]OM ACCESS EOI
  523. 1045 STA $00F2,Y; CHNL STATUS BUFF
  524. 1047 RTS
  525. 1049 JSR $DFD0; [161] [130] REC[176]D
  526. 1051 JSR $D12F; SET PTRS [164] EXISTING BUFF
  527. 1053 LDA $85; TEMP [131] BYTE
  528. 1055 JMP $E13D; [154]INUE
  529. 1057 LDX $82; INDEX CURRENT CHNL
  530. 1059 LDA #$0D; CODE CARRIAGE [142]
  531. 1061 STA $023E,X; MOST RECENT BYTE [135] BUFF
  532. 1063 LDA #$81; CODE R[175]OM ACCESS EOI
  533. 1065 STA $F2,X
  534. 1067 LDA #$50; CODE NO REC[176]D ERR[176]
  535. 1069 JSR $C1C8; ERR[176] H[175]LING
  536. 1071 ; [172][172] SET PTR LAST CHAR IN BUFF [172][172]
  537. 1073 LDX $82; INDEX CURRENT CHNL
  538. 1075 LDA $C1,X; [130] REC[176]D NUM TABLE
  539. 1077 STA $87; TEMP RESULT
  540. 1079 DEC $87
  541. 1081 CMP #$02; PTR 1ST [131] BYTE
  542. 1083 BNE $E17E
  543. 1085 LDA #$FF; PTR LAST BYTE
  544. 1087 STA $87
  545. 1089 LDA $C7,X; REC[176]D [195]GTH TABLE
  546. 1091 STA $88;TEMP RESULT
  547. 1093 JSR $D4E8; PUT PTR IN ACTIVE BUFF
  548. 1095 LDX $82
  549. 1097 CMP $87
  550. 1099 BCC $E1A4; $87 GREATER BRANCH
  551. 1101 BEQ $E1A4
  552. 1103 JSR $CF1E; [164]GGLE INACTIVE[173]ACTIVE BUFF
  553. 1105 JSR $E1B2; FIND LAST CHAR
  554. 1107 BCC $E19D
  555. 1109 LDX $82
  556. 1111 STA $0244,X; LAST CHAR PTR
  557. 1113 JMP $CF1E
  558. 1115 JSR $CF1E
  559. 1117 LDA #$FF; LAST BYTE PTR
  560. 1119 STA $87; TEMP RESULT
  561. 1121 JSR $E1B2; FIND LAST N[145] 0 CHAR
  562. 1123 BCS $E1AC
  563. 1125 JSR $D4E8; [161] PTR ACTIVE BUFF
  564. 1127 LDX $82; INDEX CURRENT CHNL
  565. 1129 STA $0244,X; CHNL LAST CHAR PTR
  566. 1131 RTS
  567. 1133 ; [172][172] FIND N[145] ZERO CHAR IN REC[176]D [172][172]
  568. 1135 JSR $DE2B; SET PTR START OF BUFF
  569. 1137 LDY $87; TEMP RESULT
  570. 1139 LDA ($94),Y; DIREC[164]RY BUFF
  571. 1141 BNE $E1C8; [168] ZERO BRANCH
  572. 1143 DEY
  573. 1145 CPY #$02
  574. 1147 BCC $E1C4; [168] START OF REC[176]D
  575. 1149 DEC $88; TEMP REC[176]D SIZE
  576. 1151 BNE $E1B7; [168] D[145]E BRANCH
  577. 1153 DEC $88
  578. 1155 CLC; REC[176]D [168] [165]D
  579. 1157 RTS
  580. 1159 TYA
  581. 1161 SEC; REC[176]D [165]D
  582. 1163 RTS
  583. 1165 ; [172][172] SET SIDE SECT & BUFF TAB [164] [128] LAST REC[176]D [172][172]
  584. 1167 JSR $DED2; SET SIDE SEC PTR
  585. 1169 STA $D5; SIDE SEC NUM BUFF
  586. 1171 LDA #$04
  587. 1173 STA $94; LO BYTE DIRECT PTR
  588. 1175 LDY #$0A; SIDE SEC OFFSET [171] 6
  589. 1177 BNE $E1DC; [129]CED BRANCH
  590. 1179 DEY
  591. 1181 DEY
  592. 1183 BMI $E202; ERRO BRANCH
  593. 1185 LDA ($94),Y; DIRECT BUFF PTR
  594. 1187 BEQ $E1D8; HAVE'NT [165]D LAST SIDE SEC
  595. 1189 TYA
  596. 1191 LSR
  597. 1193 CMP $D5
  598. 1195 BEQ $E1EF; [165]D LAST SIDE SEC
  599. 1197 STA $D5
  600. 1199 LDX $82; INDEX CURRENT CHNL
  601. 1201 LDA $CD,X; SIDE SECT TABLE
  602. 1203 JSR $DF1B; INDIRECT [135] LAST SECT
  603. 1205 LDY #$00
  604. 1207 STY $94;LO BYTE DIRECT PTR
  605. 1209 LDA ($94),Y; TRK LINK
  606. 1211 BNE $E202; ERR[176] BRANCH
  607. 1213 INY
  608. 1215 LDA ($94),Y; SECT LINK
  609. 1217 TAY
  610. 1219 DEY
  611. 1221 STY $D6; INDEX SIDE SECT
  612. 1223 TYA
  613. 1225 JMP $DEE9; SET DIR BUFF & BUF TAB W[173]SIDE SEC PTR
  614. 1227 LDA #$67; CODE [158] TRK[173]SECT ERR[176]
  615. 1229 JSR $E645; ERR[176] H[175]LING
  616. 1231 ; [172][172] [185]ISTI[145] PTR IN REC[176]D [172][172]
  617. 1233 ; SETS [164] LAST REC[176]D [139] OUT OF RANGE
  618. 1235 JSR $C2B3; INIT PTRS & TABLES
  619. 1237 LDA $0201; 2ND CHAR CMND BUFF
  620. 1239 STA $83; CURRENT SEC ADDR
  621. 1241 JSR $D0EB; FIND [135] CHNL
  622. 1243 BCC $E219; CHNL [165]D
  623. 1245 LDA #$70; CODE NO CHNL ERR[176]
  624. 1247 JSR $C1C8; ERR[176] H[175]LING
  625. 1249 LDA #$A0
  626. 1251 JSR $DD9D; CLEAR LAST REC & OVERFLOW FLG
  627. 1253 JSR $D125; [161] FILE TYPE
  628. 1255 BEQ $E228; RELATIVE FILE BRANCH
  629. 1257 LDA #$64; CODE FILE TYPE MISMATCH
  630. 1259 JSR $C1C8; ERR[176] H[175]LING
  631. 1261 LDA $EC,X; CHNL FILE TYPE
  632. 1263 [175] #$01
  633. 1265 STA $7F; DRV NUM BUFF
  634. 1267 LDA $0202; 3RD CHAR CMND BUFF
  635. 1269 STA $B5,X; REC[176]D NUM TABLES
  636. 1271 LDA $0203; 4TH CHAR CMND BUFF
  637. 1273 STA $BB,X; REC[176]D NUM TABLES
  638. 1275 LDX $82; INDEX CURRENT CHNL
  639. 1277 LDA #$89; CODE R[175]OM ACCESS [135]Y
  640. 1279 STA $F2,X; CHNL STATUS BUFF
  641. 1281 LDA $0204; 5TH CHAR
  642. 1283 BEQ $E253
  643. 1285 SEC
  644. 1287 SBC #$01
  645. 1289 BEQ $E253
  646. 1291 CMP $C7,X; REC[176]D [195]GTH BUFF
  647. 1293 BCC $E253
  648. 1295 LDA #$51; CODE REC[176]D OVERFLOW
  649. 1297 STA $026C; ERR[176] W[176]D
  650. 1299 LDA #$00
  651. 1301 STA $D4; PTR START OF REC[176]D
  652. 1303 JSR $CE0E; CALCULATE SIDE SEC PTRS
  653. 1305 .FILE DISK ROM 6
  654.