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

  1. 1 ;JSR $DEF8 SET SIDE SEC PTRS
  2. 3 *= $E25B
  3. 5 BVC $E265; NOT BEYOND LAST RECORD
  4. 7 LDA #$80
  5. 9 JSR $DD97; SET LAST RECORD FLAG
  6. 11 JMP $E15E; SET PTRS LAST RECORD
  7. 13 JSR $E275; POSISTION TO DESIRED RECORD
  8. 15 LDA #$80
  9. 17 JSR $DDA6; TEST LAST RECORD FLAG
  10. 19 BEQ $E272; FND LAST RECORD
  11. 21 JMP $E15E; SET PTRS LAST RECORD
  12. 23 JMP $C194; TERMINATE ROUTINE
  13. 25 ; ** POSISTION TO RECORD **
  14. 27 ; PUTS REL FILE IN ACTIVE BUFF
  15. 29 ; PUTS NEXT BLK IN INACTIVE BUFF
  16. 31 JSR $E29C; PUT DATA BLKS IN BUFFS
  17. 33 LDA $D7; REL FILE PTR TO TRK
  18. 35 JSR $D4C8; SET BUFF PTRS
  19. 37 LDX $82; INDEX CURRENT CHNL
  20. 39 LDA $C7,X; RECORD LENGTH TABLE
  21. 41 SEC
  22. 43 SBC $D4; STAR OF RECORD PTR
  23. 45 BCS $E289; OFFSET GREATER THAN 0
  24. 47 JMP $E202; ERROR HANDLING
  25. 49 CLC
  26. 51 ADC $D7
  27. 53 BCC $E291
  28. 55 ADC #$01
  29. 57 SEC
  30. 59 JSR $E009; SET UP NEXT RECORD
  31. 61 JMP $E138; COMPLETE THE SET UP
  32. 63 ;**** UNUSED IN 1541 ****
  33. 65 LDA #$51; CODE RECORD OVERFLOW
  34. 67 JSR $C1C8; ERROR HANDLING
  35. 69 ; ** PUT CORRECT DATA BLKS INTO BUFFS **
  36. 71 LDA $94; LO BYTE DIRECT PTR
  37. 73 STA $89; TEMP RESULT
  38. 75 LDA $95; HI BYTE
  39. 77 STA $8A; TEMP RESULT
  40. 79 JSR $E2D0; CHK IF BLK IN BUFF
  41. 81 BNE $E2AA; NOT THERE
  42. 83 RTS
  43. 85 JSR $DDF1; CLEAR THE BUFF
  44. 87 JSR $DE0C; SET TRK & SEC FROM LINK
  45. 89 LDA $80
  46. 91 BEQ $E2C2; NO MORE TRKS
  47. 93 JSR $E2D3; CHK IF BLK IN BUFF
  48. 95 BNE $E2BF; NOT THERE
  49. 97 JSR $CF1E; TOGGLE ACTIVE/INACTIVE BUFF
  50. 99 JMP $D2DA; FREE INACTIVE BUFF
  51. 101 JSR $D2DA
  52. 103 LDY #$00
  53. 105 LDA ($89),Y
  54. 107 STA $80; TRK NUM BUFF
  55. 109 INY
  56. 111 LDA ($89),Y
  57. 113 STA $81; SECT NUM BUFF
  58. 115 JMP $D0AF; READ BOTH BLKS
  59. 117 ; ** CHK IF BLK IN BUFF **
  60. 119 JSR $DE3E; SET TRK & SEC FROM HEADER
  61. 121 LDY #$00
  62. 123 LDA ($89),Y
  63. 125 CMP $80
  64. 127 BEQ $E2DC; OK COMPARE SECTS
  65. 129 RTS
  66. 131 INY
  67. 133 LDA ($89),Y
  68. 135 CMP $81
  69. 137 RTS
  70. 139 ; ** SET NULL RECORDS ACTIVE BUFF **
  71. 141 JSR $DE2B; SET PTRS START OF DATA BUFF
  72. 143 LDY #$02
  73. 145 LDA #$00
  74. 147 STA ($94),Y; PUT 0'S AT $XX02
  75. 149 INY
  76. 151 BNE $E2E9; MORE 0'S
  77. 153 JSR $E304; CALCULATE POSISTION NEXT RECORD
  78. 155 STA $C1,X; RECORD NUM BUFF
  79. 157 TAY
  80. 159 LDA #$FF
  81. 161 STA ($94),Y; IST CHAR IN BUFF
  82. 163 JSR $E304; CALCULATE POSISTION NEXT RECORD
  83. 165 BCC $E2F1; MORE RECORDS
  84. 167 BNE $E303; DONE
  85. 169 LDA #$00
  86. 171 STA $C1,X; NEXT RECORD NUM TABLE
  87. 173 RTS
  88. 175 ; ** ADD RECORD SIZE & NEXT RECORD PTR **
  89. 177 LDX $82; INDEX NEXT CHNL
  90. 179 LDA $C1,X; NEXT RECORD NUM TABLE
  91. 181 SEC
  92. 183 BEQ $E318
  93. 185 CLC
  94. 187 ADC $C7,X; RECORD LENGTH TABLE
  95. 189 BCC $E31B
  96. 191 BNE $E318
  97. 193 LDA #$02; SKIP TRK & SEC LINK
  98. 195 BIT $FECC; #$00 SET FLAGS
  99. 197 RTS
  100. 199 ADC #$01; ADJUST LINK
  101. 201 SEC
  102. 203 RTS
  103. 205 ; ** ADD BLKS TO RELATIVE FILE **
  104. 207 JSR $D1D3; SET DRV NUM
  105. 209 JSR $E1CB; SET END OF FILE
  106. 211 JSR $E29C; POSISTION CORRECT DATA BLKS IN BUFF
  107. 213 JSR $CF7B; SET UP DOUBLE BUFF
  108. 215 LDA $D6; INDEX SIDE SECT
  109. 217 STA $87; TEMP RESULT
  110. 219 LDA $D5; NUM SIDE SECT
  111. 221 STA $86; TEMP RESULT
  112. 223 LDA #$00; CLEAR 1 BLK FLAG
  113. 225 STA $88; TEMP RESULT
  114. 227 LDA #$00
  115. 229 STA $D4; START OF RECORD PTR
  116. 231 JSR $CE0E; CALCULATE SIDE SEC PTRS
  117. 233 JSR $EF4D; CALCULATE FREE BLKS
  118. 235 LDY $82; INDEX CURRENT CHNL
  119. 237 LDX $C7,Y; RECORD LENGTH TABLE
  120. 239 DEX
  121. 241 TXA
  122. 243 CLC
  123. 245 ADC $D7; RECORD PTR
  124. 247 BCC $E355; NO SPAN TO NEXT BLK
  125. 249 INC $D6; SIDE SEC PTR
  126. 251 INC $D6
  127. 253 BNE $E355
  128. 255 INC $D5; SIDE SEC NUM
  129. 257 LDA #$10; SIDE SEC OFFSET
  130. 259 STA $D6
  131. 261 LDA $87; SIDE SEC INDEX
  132. 263 CLC
  133. 265 ADC #$02
  134. 267 JSR $DEE9; SET DIRECT BUFF & BUFF TAB
  135. 269 LDA $D5; SIDE SEC NUM
  136. 271 CMP #$06; NUM OF SIDE SEC LINKS
  137. 273 BCC $E368; VALID RANGE < = #$06
  138. 275 LDA #$52; CODE FILE TOO BIG
  139. 277 JSR $C1C88; ERROR HANDLING
  140. 279 LDA $D6; SIDE SEC PTR
  141. 281 SEC
  142. 283 SBC $87; SIDE SEC INDEX
  143. 285 BCS $E372
  144. 287 SBC #$0F; SIDE SEC INDEX - 1
  145. 289 CLC
  146. 291 STA $72; TEMP WORK SIDE SEC INDEXES
  147. 293 LDA $D5; SIDE SEC NUM
  148. 295 SBC $86; SIDE SEC NUM
  149. 297 STA $73; TEMP WORK SIDE SEC NEEDED
  150. 299 LDX #$00
  151. 301 STX $70; TEMP WORK ACCUMULATOR
  152. 303 STX $71
  153. 305 TAX
  154. 307 JSR $DF51; CALCULATE BLKS NEEDED
  155. 309 LDA $71; HI BYTE BLKS NEEDED
  156. 311 BNE $E38F
  157. 313 LDX $70
  158. 315 DEX
  159. 317 BNE $E38F
  160. 319 INC $88
  161. 321 CMP $0273; TEMP NUM OF BLKS
  162. 323 BCC $E39D; ENOUGH BLKS
  163. 325 BNE $E363; NOT ENOUGH BLKS
  164. 327 LDA $0272; TEMP NUM OF BLKS
  165. 329 CMP $70
  166. 331 BCC $E363; NOT ENOUGH BLKS
  167. 333 LDA #$01
  168. 335 JSR $D4F6; READ SECT LINK
  169. 337 CLC
  170. 339 ADC #$01
  171. 341 LDX $82; INDEX CURRENT CHNL
  172. 343 STA $C1,X; NEXT RECORD NUM TABLE
  173. 345 JSR $F11E; GET NEXT AVAIL TRK & SEC
  174. 347 JSR $DDFD; SET TRK & SEC LINK CURRENT BLK
  175. 349 LDA $88; USED FOR ADD 1 BLK FLAG
  176. 351 BNE $E3C8
  177. 353 JSR $DE5E; WRITE BLK TO DSK
  178. 355 JSR $CF1E; SWITCH BUFFS
  179. 357 JSR $D6D0; SET HEADER FROM TRK & SEC
  180. 359 JSR $F11E; GET NEXT AVAIL TRK & SEC
  181. 361 JSR $DDFD; SET TRK & SEC LINK
  182. 363 JSR $E2E2; CLEAR BUFF
  183. 365 JMP $E3D4; WRITE TO DSK
  184. 367 JSR $CF1E
  185. 369 JSR $D6D0
  186. 371 JSR $E2E2:JSR $DE19
  187. 373 JSR $DE5E
  188. 375 JSR $DE0C; SET TRK & SEC FROM LINK
  189. 377 LDA $80; TRK NUM
  190. 379 PHA
  191. 381 LDA $81; SECT
  192. 383 PHA
  193. 385 JSR $DE3E; SET TRK & SEC FROM LAST SEC READ
  194. 387 LDA $81
  195. 389 PHA
  196. 391 LDA $80
  197. 393 PHA
  198. 395 JSR $DF45; CALCULATE SIDE SEC PTR
  199. 397 TAX
  200. 399 BNE $E3F9; DONT NEED ANOTHER SIDE SEC
  201. 401 JSR $E44E; GET ANOTHER SIDE SEC
  202. 403 LDA #$10; SIDE SEC OFFSET
  203. 405 JSR $DEE9; SET SIDE SEC PTR
  204. 407 INC $86; SIDE SEC CTR
  205. 409 PLA
  206. 411 JSR $DD8D; WRITE INTO SIDE SEC BUFF
  207. 413 PLA; SIDE SEC SECT
  208. 415 JSR $DD8D
  209. 417 PLA
  210. 419 STA $81
  211. 421 PLA
  212. 423 STA $80
  213. 425 BEQ $E418; NO MORE BLKS IN FILE
  214. 427 LDA $86; SIDE SEC CTR
  215. 429 CMP $D5; END COUNT
  216. 431 BNE $E3B6; NOT ENOUGH NEW BLKS
  217. 433 JSR $DF45; GET SIDE SEC PTR
  218. 435 CMP $D6; END PTR
  219. 437 BCC $E3B6; ALMOST DONE
  220. 439 BEQ $E3C8; ONE MORE BLK
  221. 441 JSR $DF45
  222. 443 PHA
  223. 445 LDA #$00
  224. 447 JSR $DEDC; SET DIREC BUFF W/SIDE SEC PTR
  225. 449 LDA #$00
  226. 451 TAY
  227. 453 STA ($94),Y; SIDE SEC LINK
  228. 455 INY
  229. 457 PLA
  230. 459 SEC
  231. 461 SBC #$01
  232. 463 STA ($94),Y
  233. 465 JSR $DE6C; WRITE BLK SIDE SEC TO DSK
  234. 467 JSR $D599; WAIT FOR WRITE TO FINISH
  235. 469 JSR $EEF4; WITE BAM
  236. 471 JSR $CE0E; FIND REL FILE CALC SS NUM & INDEX
  237. 473 JSR $CF1E; GET TO BEGINNING BUFF
  238. 475 ;JSR $DEF8; POSISTION SIDE SEC BUF TAB SS NUM SS INDEX
  239. 477 *= $E43F
  240. 479 BVS $E444; OUT OF RANGE
  241. 481 JMP $E275; OK POSITION RECORD
  242. 483 LDA #$80; OUT OF RANGE
  243. 485 JSR $DD97; SET LAST RECORD FLAG
  244. 487 LDA #$50; CODE NO RECORD ERROR
  245. 489 JSR $C1C8; ERROR HANDLING
  246. 491 ; ** CREATE NEW SIDE SEC CHANGE OLD SIDE SECS **
  247. 493 JSR $F11E; FIND AVAIL TRK & SEC
  248. 495 JSR $CF1E; TOGGLE TO INAVTIVE BUFF
  249. 497 JSR $DDF1; WRITE BUFF IF DIRTY
  250. 499 JSR $DF93; FIND ACTIVE BUFF
  251. 501 PHA; HOLDS ACTIVE BUFF
  252. 503 JSR $DEC1; CLEAR THE BUFF
  253. 505 LDX $82; INDEX CURRENT CHNL
  254. 507 LDA $CD,X; SIDE SECT TABLE
  255. 509 TAY
  256. 511 PLA
  257. 513 TAX
  258. 515 LDA #$10; SIDE SECT OFFSET
  259. 517 JSR $DEA5
  260. 519 LDA #$00
  261. 521 JSR $DEDC; SET POINT TO OLD BUFF
  262. 523 LDY #$02
  263. 525 LDA ($94),Y; SIDE SEC NUM
  264. 527 PHA
  265. 529 LDA #$00
  266. 531 JSR $D4C8; POINT TO NE SIDE SEC BUFF
  267. 533 PLA; SIDE SEC NUM
  268. 535 CLC
  269. 537 ADC #$01
  270. 539 STA ($94),Y
  271. 541 ASL
  272. 543 ADC #$04
  273. 545 STA $89; TEMP RESULT POINTS TO NEW SS VALUE
  274. 547 TAY
  275. 549 SEC
  276. 551 SBC #$02
  277. 553 STA $8A
  278. 555 LDA $80; TRK NUM
  279. 557 STA $87
  280. 559 STA ($94),Y
  281. 561 INY
  282. 563 LDA $81; SECT NUM
  283. 565 STA $88
  284. 567 STA ($94),Y
  285. 569 LDY #$00
  286. 571 TYA
  287. 573 STA ($94),Y; TRK LINK NEW SIDE SEC
  288. 575 INY
  289. 577 LDA #$11
  290. 579 STA ($94),Y
  291. 581 LDA #$10; SIDE SECT OFFSET
  292. 583 JSR $D4C8; SET PTR NEW SIDE SEC
  293. 585 JSR $DE50; WRITE SIDE SEC TO DSK
  294. 587 JSR $D599; WAIT FOR WRITE TO FINISH
  295. 589 ; ** NEW SIDE SEC FINISHED UPDATE OLD SIDE SEC **
  296. 591 LDX $82; INDEX CURRENT CHNL
  297. 593 LDA $CD,X; SIDE SECT TABLE
  298. 595 PHA
  299. 597 JSR $DF9E; GET ACTIVE BUFF NUM
  300. 599 LDX $82
  301. 601 STA $CD,X
  302. 603 PLA
  303. 605 LDX $0257; LAST BUFF USED
  304. 607 STA $A7,X; CHNL STATUS BUFF
  305. 609 LDA #$00
  306. 611 JSR $D4C8; SET PTR NEW SIDE SEC
  307. 613 LDY #$00
  308. 615 LDA $80; TRK NUM
  309. 617 STA ($94),Y
  310. 619 INY
  311. 621 LDA $81; SECT NUM
  312. 623 STA ($94),Y
  313. 625 JMP $E4DE
  314. 627 JSR $DF93; GET ACTIVE BUFF NUM
  315. 629 LDX $82; INDEX CURRENT CHNL
  316. 631 JSR $DF1B; READ NEXT SIDE SEC NUM
  317. 633 LDA #$00
  318. 635 JSR $D4C8
  319. 637 DEC $8A
  320. 639 DEC $8A
  321. 641 LDY $89; PTR INTO BUFF
  322. 643 LDA $87; NEW SIDE SEC TRK PTR
  323. 645 STA ($94),Y
  324. 647 INY
  325. 649 LDA $88; NEW SIDE SEC PTR
  326. 651 STA ($94),Y
  327. 653 JSR $DE5E; WRITE REVISED SECT
  328. 655 JSR $D599; WAIT FOR WRITE TO FINISH
  329. 657 LDY $8A
  330. 659 CPY #$03
  331. 661 BCS $E4D1; MORE SIDE SEC TO UPDATE
  332. 663 JMP $CF1E; RESET ACTIVE BUFF
  333. 665 ; ** ERROR MESSAGE TABLE **
  334. 667 ; $EF4C 00                   OK
  335. 669 ; $E500 20 21 22 23 24 27    READ ERROR
  336. 671 ; $E50B 52                   FILE TOO LARGE
  337. 673 ; $E517 50                   RECORD NOT PRESENT
  338. 675 ; $E522 51                   OVERFLOW IN RECORD
  339. 677 ; $E52F 25 28                WRITE ERROR
  340. 679 ; $E533 26                   WRITE PROTECT ON
  341. 681 ; $E540 29                   DSK ID MISMATCH
  342. 683 ; $E546 30 31 32 33 34       SYNTAX ERROR
  343. 685 ; $E552 60                   WRITE FILE OPEN
  344. 687 ; $E556 63                   FILE EXISTS
  345. 689 ; $E55F 64                   FILE TYPE MISMATCH
  346. 691 ; $E567 65                   NO BLK
  347. 693 ; $E570 66 67                ILLEGAL TRK OR SECT
  348. 695 ; $E589 61                   FILE NOT OPEN
  349. 697 ; $E592 01                   FILES SCRATCHED
  350. 699 ; $E59F 70                   NO CHNL
  351. 701 ; $E5AA 71                   DIRECTORY ERROR
  352. 703 ; $E5AF 72                   DSK FULL
  353. 705 ; $E5B6 73                   CBM DOS V2.6 4030
  354. 707 ; $E5C8 74                   DRV NOT READY
  355. 709 ; ** TABLE TOKENIZED WORDS **
  356. 711 ; $E5D5 #$09 ERROR
  357. 713 ; $E5DB #$0A WRITE
  358. 715 ; $E5E1 #$03 FILE
  359. 717 ; $E5E6 #$04 OPEN
  360. 719 ; $E5EB #$05 MISMATCH
  361. 721 ; $E5F4 #$06 NOT
  362. 723 ; $E5F8 #$07 FND
  363. 725 ; $E5FE #$08 DSK
  364. 727 ; $E603 #$0B RECORD
  365. 729 ; ** HANDLE ERRORS FROM CONTROLLER **
  366. 731 ; A = ERROR CODE NUM
  367. 733 ; X = COMMAND NUM
  368. 735 *= $E60A
  369. 737 PHA
  370. 739 STX $F9; COMMAND NUM BUFF
  371. 741 TXA
  372. 743 ASL
  373. 745 TAX
  374. 747 LDA $06,X; TRK COMMAND HEADER
  375. 749 STA $80; TRK NUM BUFF
  376. 751 LDA $07,X; SECT COMMAND HEADER
  377. 753 STA $81; SECT NUM BUFF
  378. 755 PLA
  379. 757 AND #$0F
  380. 759 BEQ $E625; #$ 10 TO 14 ERROR HANDLING
  381. 761 CMP #$0F; DRV ERROR CODE
  382. 763 BNE $E627; ERROR HANDLING
  383. 765 LDA #$74; DRV ERROR
  384. 767 BNE $E62D; FORCED BRANCH
  385. 769 LDA #$06:ORA #$20
  386. 771 TAX
  387. 773 DEX
  388. 775 DEX
  389. 777 TXA
  390. 779 PHA; DOS ERROR CODE
  391. 781 LDA $022A:CMP #$00; COMMAND NUM ERROR
  392. 783 BNE $E644; NOT VALID COMMAND
  393. 785 LDA #$FF
  394. 787 STA $022A
  395. 789 PLA
  396. 791 JSR $EC67; TRANS ERROR MES ERROR BUFF
  397. 793 JSR $D042; INIT DRV
  398. 795 JMP $E648; FINISH ERROR HANDLING
  399. 797 PLA
  400. 799 JSR $EC67; TRANS ERROR MESS ERROR BUFF
  401. 801 JSR $C1BD; CLEAR COMMAND BUFF
  402. 803 LDA #$00
  403. 805 STA $02F9; DONT WRITE BAM FLAG
  404. 807 JSR $C12C; FLASH ERROR LED
  405. 809 JSR $D4DA; FREE INTERNAL READ/WRITE CHAN
  406. 811 LDA #$00
  407. 813 STA $A3; NEXT BYTE IN COMMAND BUFF PTR
  408. 815 LDA #$45:TXS; CLEAN THE STACK
  409. 817 LDA $84; ORIGINAL SEC ADDR
  410. 819 AND #$0F
  411. 821 STA $83; CURRENT SEC ADDR
  412. 823 CMP #$0F
  413. 825 BEQ $E698; COMMAND CHNL ERROR
  414. 827 SEI
  415. 829 LDA $79; LISTEN FLAG
  416. 831 BNE $E688; LISTENING
  417. 833 LDA $7A; TALK FLAG
  418. 835 BNE $E680; TALKING
  419. 837 LDX $83; SEC ADDR
  420. 839 LDA $022B,X; CHNL STATUS TABLE
  421. 841 CMP #$FF
  422. 843 BEQ $E698; INACTIVE BRANCH
  423. 845 AND #$0F
  424. 847 STA $82; CURRENT CHNL INDEX
  425. 849 JMP $E68E
  426. 851 ; ** TALK ERROR RECOVERY **
  427. 853 ; RELEASES ALL BUS LINES (null) IDLE
  428. 855 JSR $D0EB; FIND READ CHNL
  429. 857 NOP:NOP:NOP
  430. 859 BNE $E68E; NO READ CHNL
  431. 861 JSR $D107; FIND A WRITE CHNL
  432. 863 NOP:NOP:NOP
  433. 865 ; THE ABOVE CODE USED TO BE JSR $EA4E RELEASE ALL BUS LINE
  434. 867 JSR $D125; GET FILE TYPE
  435. 869 ; ABOVE CODE NOT USED ON SOME 1541'S
  436. 871 CMP #$04; RELATIVE FILE
  437. 873 BCS $E698
  438. 875 JSR $D227; FREE CHNL BY SEC ADD
  439. 877 JMP $EBE7; (null) IDLE
  440. 879 ; ** CONVERT HEX TO BCD **
  441. 881 ; A = HEX NUM
  442. 883 ; ON EXIT A = BCD
  443. 885 TAX; HEX TO BCD NUM
  444. 887 LDA #$00
  445. 889 SED
  446. 891 CPX #$00
  447. 893 BEQ $E6AA; CONVERSION DONE
  448. 895 CLC
  449. 897 ADC #$01
  450. 899 DEX
  451. 901 JMP $E69F; MORE CONVERSION
  452. 903 ; ** CONVERT BCD TO ASCII **
  453. 905 ; ON EXIT X = BCD NUM
  454. 907 ; ($A5),Y = ASCII
  455. 909 CLD
  456. 911 TAX
  457. 913 LSR:LSR:LSR:LSR; DIVIDE BY 16
  458. 915 JSR $E6B4; CONVERT MOST SIGNIFICANT BIT ASCII
  459. 917 TXA; ORIGINAL BCD NUM
  460. 919 AND #$0F; MASK OFF HIGH BITS
  461. 921 ORA #$30; CONVERT TO ASCII
  462. 923 STA ($A5),Y
  463. 925 INY
  464. 927 RTS
  465. 929 ; ** TRANSFER ERROR MESSAGE TO ERROR BUFF **
  466. 931 JSR $C123; TURN OFF ERROR LED
  467. 933 LDA #$00; CODE NO ERROR
  468. 935 LDY #$00:STY $80; TRK NUM BUFF
  469. 937 STY $81; SECT  "      "
  470. 939 LDY #$00:LDX #$D5
  471. 941 STX $A5; POINTS TO ERRO BUFF $02D5
  472. 943 LDX #$02
  473. 945 STX $A6
  474. 947 JSR $E6AB; CONVERT A (BCD) TO ASCII
  475. 949 LDA #$2C; CODE FOR ","
  476. 951 STA ($A5),Y; AT END OF ERROR CODE
  477. 953 INY
  478. 955 LDA $025D,Y; 1ST CHAR OF ERROR
  479. 957 STA $0243
  480. 959 TXA
  481. 961 JSR $E706; MOVE ERROR MESS ERROR BUFF
  482. 963 LDA #$2C
  483. 965 STA ($A5),Y
  484. 967 INY
  485. 969 LDA $80; TRK NUM BUFF
  486. 971 JSR $E69B; CONVERT TRK TO ASCII
  487. 973 LDA #$2C
  488. 975 STA ($A5),Y
  489. 977 INY
  490. 979 LDA $81; SECT NUM
  491. 981 JSR $E69B; CONVERT SEC TO ASCII
  492. 983 DEY
  493. 985 TYA
  494. 987 CLC
  495. 989 ADC #$D5
  496. 991 STA $0249; POINTS TO START ERROR BUFF
  497. 993 INC $A5; LO BYTE PTR
  498. 995 LDA #$88
  499. 997 STA $F7; READY TO TALK
  500. 999 RTS
  501. 1001 ; ** MOVE ERROR MESSAGE FROM ERROR TABLE TO BUFF **
  502. 1003 TAX; ERROR MESSAGE NUM
  503. 1005 LDA $86
  504. 1007 PHA
  505. 1009 LDA $87
  506. 1011 PHA; #$86 & 87 USED TEMP PTR
  507. 1013 LDA #$FC
  508. 1015 STA $86
  509. 1017 LDA #$E4
  510. 1019 STA $87; $E4FC ROM ERROR MESSAGE TABLE
  511. 1021 TXA; ERROR NUM
  512. 1023 LDX #$00
  513. 1025 CMP ($86,X)
  514. 1027 BEQ $E73D; MATCH FND
  515. 1029 PHA
  516. 1031 JSR $E775; ADVANCE PTR
  517. 1033 BCC $E727; MORE TOO CHK
  518. 1035 JSR $E775
  519. 1037 BCC $E722; NOT DONE WITH MESSAGE
  520. 1039 LDA $87
  521. 1041 CMP #$E6
  522. 1043 BCC $E735; MORE TOO CHK
  523. 1045 BNE $E739; PAST END OF TABLE
  524. 1047 LDA #$0A
  525. 1049 CMP $86
  526. 1051 BCC $E739; PAST END OF TABLE
  527. 1053 PLA
  528. 1055 JMP $E718; CONTINUE CHKING
  529. 1057 PLA
  530. 1059 JMP $E74D; CNAT FIND NUM IN TABLE
  531. 1061 JSR $E767; (null) TO END OF ERROR NUMS
  532. 1063 BCC $E73D; NOT AT END
  533. 1065 JSR $E754; PUT ERROR NAME IN BUFF
  534. 1067 JSR $E767
  535. 1069 BCC $E742; MORE TO DO
  536. 1071 JSR $E754
  537. 1073 PLA
  538. 1075 STA $87
  539. 1077 PLA
  540. 1079 STA $86
  541. 1081 RTS
  542. 1083 ; ** CHK TOKEN WORD PUT IN BUFF **
  543. 1085 CMP #$20; MAXIMUM TOKEN NUM + 1
  544. 1087 BCS $E763; NOT TOKEN WORD
  545. 1089 TAX
  546. 1091 LDA #$20
  547. 1093 STA ($A5),Y; PTR TO TOKEN WORDS
  548. 1095 INY
  549. 1097 TXA
  550. 1099 JSR $E706; ADD TOKEN WORD TO MESSAGE
  551. 1101 RTS
  552. 1103 STA ($A5),Y
  553. 1105 INY
  554. 1107 RTS
  555. 1109 ; ** ADVANCE ERROR PTR **
  556. 1111 INC $86; LO BYTE PTR
  557. 1113 BNE $E76D
  558. 1115 INC $87; HI BYTE
  559. 1117 LDA ($86,X); NEXT CHAR ERROR MESSAGE
  560. 1119 ASL; SET CARRY FLAG
  561. 1121 LDA ($86,X)
  562. 1123 AND #$7F; MASK BIT 7
  563. 1125 RTS
  564. 1127 JSR $E76D
  565. 1129 INC $86
  566. 1131 BNE $E77E
  567. 1133 INC $87
  568. 1135 RTS
  569. 1137 RTS
  570. 1139 ; *** CODE FROM $E780 TO E7A1 NO LONGER USED ***
  571. 1141 ; *** WAS UTILITY LOAD PROGRAMS ***
  572. 1143 ; *** CAN BE FND ON OLDER DSK DRVS ***
  573. 1145 *= $E7A2
  574. 1147 RTS
  575. 1149 ; ** UTILITY LOADER **
  576. 1151 LDA #$8D
  577. 1153 JSR $C268; PARSE COMMAND
  578. 1155 JSR $F258; KILL PROTECTION DOES NOTHING 1541
  579. 1157 LDA $0278; FILENAME # 2 CTR
  580. 1159 PHA
  581. 1161 LDA #$01
  582. 1163 STA $0278
  583. 1165 LDA #$FF
  584. 1167 STA $86; SET 1ST BYTE FLAG
  585. 1169 JSR $C44F; LOCATE FILE ON DSK
  586. 1171 LDA $0280; TRK FILE LINK
  587. 1173 BNE $E7C5; FILE FND
  588. 1175 LDA #$39; CODE FILE NOT FND
  589. 1177 JSR $C1C8; ERROR HANDLING
  590. 1179 PLA
  591. 1181 STA $0278; ORIGINAL FILE COUNT
  592. 1183 LDA $0280; TRK FILE LINK
  593. 1185 STA $80; TRK NUM BUFF
  594. 1187 LDA $0285; SECT FILE LINK
  595. 1189 STA $81; SECT NUM BUFF
  596. 1191 LDA #$03; CODE USER TYPE
  597. 1193 JSR $D477; OPEN FILE
  598. 1195 LDA #$00
  599. 1197 STA $87; INIT CHKSUM
  600. 1199 JSR $E839; GET LO BYTE LOAD FROM FILE
  601. 1201 STA $88
  602. 1203 JSR $E84B; ADD BYTE TO CHKSUM
  603. 1205 JSR $E839; GET HI BYTE LOAD ADDR
  604. 1207 STA $89
  605. 1209 JSR $E84B; ADD BYTE TO CHKSUM
  606. 1211 LDA $86
  607. 1213 BEQ $E7FA; NOT LOAD ADDR
  608. 1215 LDA $88
  609. 1217 PHA
  610. 1219 LDA $89
  611. 1221 PHA
  612. 1223 LDA #$00
  613. 1225 STA $86
  614. 1227 JSR $E839; GET DATA BYTE COUNT
  615. 1229 STA $8A
  616. 1231 JSR $E84B; ADD BYTE TO CHKSUM
  617. 1233 JSR $E839; GET DATA BYTE FROM FILE
  618. 1235 LDY #$00
  619. 1237 STA ($88),Y; STORE BYTE LOAD ADDR
  620. 1239 JSR $E84B
  621. 1241 LDA $88
  622. 1243 CLC
  623. 1245 ADC #$01
  624. 1247 STA $88
  625. 1249 BCC $E817
  626. 1251 INC $89
  627. 1253 DEC $8A; BYTE CTR
  628. 1255 BNE $E802
  629. 1257 JSR $CA35; GET DATA BYTE W/O EOI
  630. 1259 LDA $85; CHKSUM
  631. 1261 CMP $87; COMPUTED CHKSUM
  632. 1263 BEQ $E82C
  633. 1265 JSR $DE3E; SET TRK & SEC FROM HEADER
  634. 1267 LDA #$50; CODE NO RECORD ERROR
  635. 1269 JSR $E645; ERROR HANDLING
  636. 1271 LDA $F8; EOI FLAG
  637. 1273 BNE $E7D8; NOT DONE
  638. 1275 PLA
  639. 1277 STA $89
  640. 1279 PLA
  641. 1281 STA $88
  642. 1283 JMP ($0088); INDIRECT JUMP TO ROUTINE
  643. 1285 ; ** GET BYTE CHK FOR EOI **
  644. 1287 JSR $CA35; GET BYTE
  645. 1289 LDA $F8; EOI FLAG
  646. 1291 BNE $E848; NOT END OF INFO
  647. 1293 JSR $DE3E; EOI SET TRK & HEADER
  648. 1295 LDA #$51; CODE FOR EOI
  649. 1297 JSR $E645; ERROR HANDLING
  650. 1299 LDA $85; DATA BYTE
  651. 1301 RTS
  652. 1303 ; ** CALCULATE CHKSUM  **
  653. 1305 CLC
  654. 1307 ADC $87
  655. 1309 ADC #$00
  656. 1311 STA $87
  657. 1313 RTS
  658. 1315 ; ** SERIAL BUS COMMUNICATIONS **
  659. 1317 ; ** IRQ FOR ATTENTION SENT FROM 64 **
  660. 1319 LDA $1801; 1801 NOT USED CLEARS IRQ FLAG
  661. 1321 LDA #$01
  662. 1323 STA $7C; ATTENTION REQUEST WAITING
  663. 1325 RTS
  664. 1327 ; ** ACT ON ATTENTION REQUEST FROM 64 **
  665. 1329 SEI
  666. 1331 LDA #$00
  667. 1333 STA $7C; ATTN REQ WAITING FLAG
  668. 1335 STA $79; LISTEN FLAG
  669. 1337 STA $7A; TALK FLAG
  670. 1339 LDX #$45
  671. 1341 TXS; CLEAN THE STACK
  672. 1343 LDA #$80; CODE NO EOI
  673. 1345 STA $F8; EOI FLAG
  674. 1347 STA $7D; ATTN MODE FLAG
  675. 1349 JSR $E9B7; WAIT FOR CLOCK LINE HIGH
  676. 1351 JSR $E9A5; SET DATA LINE LOW (RESPONSE)
  677. 1367 LDA $1800
  678. 1369 ORA #$10; 00010000
  679. 1371 STA $1800; GET HARDWARE CONTROL
  680. 1373 LDA $1800
  681. 1375 BPL $E8D7; ATT SIGNAL (null)NE
  682. 1377 AND #$04; 00000100
  683. 1379 BNE $E87B; CLOCK LINE LOW
  684. 1381 JSR $E9C9; GET COMMAND NUM BYTE
  685. 1383 CMP #$3F; CODE UNLISTEN
  686. 1385 BNE $E891
  687. 1387 LDA #$00
  688. 1389 STA $79; LISTEN FLAG
  689. 1391 BEQ $E902; FORCED BRANCH
  690. 1393 CMP #$5F; CODE UNTALK
  691. 1395 BNE $E89B
  692. 1397 LDA #$00
  693. 1399 STA $7A; TALK FLAG
  694. 1401 BEQ $E902; FORCED BRANCH
  695. 1403 CMP $78; TALK ADDR
  696. 1405 BNE $E8A9
  697. 1407 LDA #$01
  698. 1409 STA $7A; SET TALK FLAG
  699. 1411 LDA #$00
  700. 1413 STA $79; CLEAR LISTEN FLAG
  701. 1415 BEQ $E8D2; FORCED BRANCH
  702. 1417 CMP $77; LISTEN ADDR
  703. 1419 BNE $E8B7
  704. 1421 LDA #$01
  705. 1423 STA $79; LISTEN FLAG
  706. 1425 LDA #$00
  707. 1427 STA $7A; TALK FLAG
  708. 1429 BEQ $E8D2; FORCED BRANCH
  709. 1431 TAX; COMMAND NUM
  710. 1433 AND #$60
  711. 1435 CMP #$60
  712. 1437 BNE $E8FD; NOT SEC ADDR
  713. 1439 TXA
  714. 1441 STA $84; ORIGINAL SEC ADD
  715. 1443 AND #$0F
  716. 1445 STA $83; SEC ADDR BUFF
  717. 1447 LDA $84
  718. 1449 AND #$F0
  719. 1451 CMP #$E0; CODE FOR CLOSE
  720. 1453 BNE $E902
  721. 1455 CLI
  722. 1457 JSR $DAC0; CLOSE FILE
  723. 1459 SEI
  724. 1461 BIT $1800; TEST FOR ATTN SIGNAL
  725. 1463 BMI $E884; STILL PRESENT
  726. 1465 LDA #$00
  727. 1467 STA $7D; ATTN MODE FLAG
  728. 1469 LDA $1800; I/O
  729. 1471 AND #$EF
  730. 1473 STA $1800; CLEAR ATTN ACK
  731. 1475 LDA $79; LISTEN FLAG
  732. 1477 BEQ $E8ED; NO LISTEN
  733. 1479 JSR $EA2E; LISTEN ROUTINE
  734. 1481 JMP $EBE7; IDLE LOOP
  735. 1483 LDA $7A; TALK FLAG
  736. 1485 BEQ $E8FA; NO TALK
  737. 1487 JSR $E99C; FREE DATA LINE
  738. 1489 JSR $E9AE; SET CLOCK LOW
  739. 1491 JSR $E909; TALK ROUTINE
  740. 1493 JMP $EA4E; RELEASE LINES (null) IDLE
  741. 1495 ; ** SET DEVICE NOT PRESENT **
  742. 1497 LDA #$10
  743. 1499 STA $1800; ALL LINES OFF EXCEPT ATTN ACK
  744. 1501 BIT $1800
  745. 1503 BPL $E8D7; ATTN SIGNAL (null)NE
  746. 1505 BMI $E902
  747. 1507 ; ** TALK ROUTINES **
  748. 1509 SEI
  749. 1511 JSR $D0EB; FIND READ CHNL
  750. 1513 BCS $E915; NO READ CHNL
  751. 1515 LDX $82; INDEX CURRENT CHNL
  752. 1517 LDA $F2,X; CHNL STATUS BUFF
  753. 1519 BMI $E916; INACTIVE STATUS OK
  754. 1521 RTS
  755. 1523 ; ** VERIFY ATTENTION SIGNAL **
  756. 1525 JSR $EA59; TEST FOR ATTN SIGNAL
  757. 1527 JSR $E9C0; TEST CLOCK SIGNAL (null)NE
  758. 1529 AND #$01
  759. 1531 PHP; DATA BYTE
  760. 1533 JSR $E9B7; SET CLOCK LINE HIGH
  761. 1535 PLP
  762. 1537 BEQ $E937; VERIFY ERROR SEND EOI
  763. 1539 JSR $EA59; TEST FOR ATTN SIGNAL
  764. 1541 JSR $E9C0; TEST DATA LINE LO
  765. 1543 AND #$01
  766. 1545 BNE $E925; LINE NOT HI NO RESPONSE
  767. 1547 LDX $82; INDEX CURRENT CHNL
  768. 1549 LDA $F2,X; CHNL STATUS
  769. 1551 AND #$08
  770. 1553 BNE $E94B; NO EOI
  771. 1555 ; ** SEND EOI TO 64 **
  772. 1557 JSR $EA59; TEST FOR ATTN SIGNAL
  773. 1559 JSR $E9C0; SEND EOI TEST DATA LINE
  774. 1561 AND #$01
  775. 1563 BNE $E937; DATA LINE NOT HI NO RESPONSE
  776. 1565 JSR $EA59
  777. 1567 JSR $E9C0
  778. 1569 AND #$01
  779. 1571 BEQ $E941; DATA LINE NOT LO NO RESPONSE
  780. 1573 JSR $E9AE; SET CLOCK LINE LO
  781. 1575 JSR $EA59; TEST FOR ATTN SIGNAL
  782. 1577 JSR $E9C0; SEND EOI TEST DATA LINE
  783. 1579 AND #$01
  784. 1581 BNE $E94B; LINE NOT HI NO RESPONSE
  785. 1583 LDA #$08
  786. 1585 STA $98; BIT CTR FOR I/O
  787. 1587 JSR $E9C0; WAIT FOR RESPONSE
  788. 1589 AND #$01
  789. 1591 BNE $E999; LINE NOT HI NO RESPONSE
  790. 1593 LDX $82; INDEX CURRENT CHNL
  791. 1595 LDA $023E,X; CHNL DATA BYTE
  792. 1597 ROR
  793. 1599 STA $023E,X
  794. 1601 BCS $E973; SEND A 1 BIT ON BUS
  795. 1603 JSR $E9A5; SEND A 0 BIT ON BUS
  796. 1605 BNE $E976; CLOCK THE BIT
  797. 1607 JSR $E99C; SEND 1 BIT
  798. 1609 JSR $E9B7; SET CLOCK LINE HI
  799. 1611 LDA $23; SPEED FLAG
  800. 1613 BNE $E980; CLOCK SPEED OK
  801. 1615 JSR $FEF3; SLOW DOWN CLOCK SPEED
  802. 1617 JSR $FEFB; SET CLOCK LOW RELEASE DATA
  803. 1619 DEC $98; BIT CTR
  804. 1621 BNE $E95C; MORE BITS
  805. 1623 JSR $EA59; TEST ATTN MODE
  806. 1625 JSR $E9C0; WAIT FOR RESPONSE
  807. 1627 AND #$01
  808. 1629 BEQ $E987; NO RESPONSE
  809. 1631 CLI
  810. 1633 JSR $D3AA; GET ANOTHER BYTE
  811. 1635 SEI
  812. 1637 JMP $E90F; CONTINUE TALK
  813. 1639 JMP $EA4E; RELEASE ALL LINES (null) IDLE
  814. 1641 LDA $1800; I/O
  815. 1643 AND #$FD; DATA OUT LINE HI
  816. 1645 STA $1800
  817. 1647 RTS
  818. 1649 LDA $1800
  819. 1651 ORA #$02; DATA OUT LINE LO
  820. 1653 STA $1800
  821. 1655 RTS
  822. 1657 LDA $1800
  823. 1659 ORA #$08; CLOCK LINE LO
  824. 1661 STA $1800
  825. 1663 RTS
  826. 1665 LDA $1800
  827. 1667 AND #$F7; CLOCK LINE HI
  828. 1669 STA $1800
  829. 1671 RTS
  830. 1673 LDA $1800
  831. 1675 CMP $1800
  832. 1677 BNE $E9C0; NO RESPONSE
  833. 1679 RTS
  834. 1681 ; ** LISTEN ROUTINES **
  835. 1683 LDA #$08
  836. 1685 STA $98; BIT CTR
  837. 1687 JSR $EA59; TEST ATTN SIGNAL
  838. 1689 JSR $E9C0; TEST CLOCK LINE SET
  839. 1691 AND #$04
  840. 1693 BNE $E9CD; NOT SET NO RESPONSE
  841. 1695 JSR $E99C; SET DATA LINE HI
  842. 1697 LDA #$01
  843. 1699 JMP $FF20; 255 MICR SECOND DELAY
  844. 1701 JSR $EA59; TEST FOR ATTN SIGNAL
  845. 1703 LDA $180D; INTERRUPT FLAG REG
  846. 1705 AND #$40
  847. 1707 BNE $E9F2; TIMER RUN OUT EOI
  848. 1709 JSR $E9C0; TEST CLOCK LINE SET
  849. 1711 AND #$04
  850. 1713 BEQ $E9DF; NO RSPONSE
  851. 1715 BNE $EA0B; RESPONSE
  852. 1717 JSR $E9A5; SET DATA LINE LO RESPONSE
  853. 1719 LDX #$0A
  854. 1721 DEX
  855. 1723 BNE $E9F7; DELAY TURN AROUND TIME
  856. 1725 JSR $E99C; SET DATA LINE HI
  857. 1727 JSR $EA59; TEST ATTN SIGNAL
  858. 1729 JSR $E9C0; TEST CLOCK LINE SET
  859. 1731 AND #$04
  860. 1733 BEQ $E9FD; NO RESPONSE
  861. 1735 LDA #$00
  862. 1737 STA $F8; EOI FLAG
  863. 1739 LDA $1800; I/O
  864. 1741 EOR #$01; FIND COMPLEMENT DATA BIT
  865. 1743 LSR; SHIFT DATA BIT TO CARRY FLAG
  866. 1745 AND #$02; TEST CLOCK LINE HI
  867. 1747 BNE $EA0B; NOT HI (null) BACK
  868. 1749 NOP:NOP:NOP
  869. 1751 ROR $85; STORE BIT IN DATA BYTE
  870. 1753 JSR $EA59; TEST ATTN SIGNAL
  871. 1755 JSR $E9C0; TEST CLOCK LINE SET
  872. 1757 AND #$04
  873. 1759 BEQ $EA1A; NO RESPONSE
  874. 1761 DEC $98; BIT CTR
  875. 1763 BNE $EA0B; MORE BITS
  876. 1765 JSR $E9A5; SET DATA LINE LOW
  877. 1767 LDA $85; DATA BYTE
  878. 1769 RTS
  879. 1771 .F DISK ROM 7
  880.