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

  1. 1 ; ** LISTEN ROUT **
  2. 3 SEI
  3. 5 JSR $D107; FIND WRITE CHNL
  4. 7 BCS $EA39; NO WRITE CHNL BRANCH
  5. 9 LDA $F2,X; CHNL STATUS BUFF
  6. 11 ROR
  7. 13 BCS $EA44; WRITE CHNL INACTIVE
  8. 15 LDA $84; ORIGINAL SEC ADDR
  9. 17 AND #$F0
  10. 19 CMP #$F0
  11. 21 BEQ $EA44; OPEN CMND BRANCH
  12. 23 JMP $EA4E; NOT ACTIVE CHNL JUMP
  13. 25 JSR $E9C9; GET A BYTE
  14. 27 CLI
  15. 29 JSR $CFB77; FILE DATA BYTE
  16. 31 JMP $EA2E; (null) BACK TO LISTEN
  17. 33 LDA #$00
  18. 35 STA $1800; I/O RELEASE ALL BUS LINES
  19. 37 JMP $EBE7; IDLE MODE WAIT FOR SOMETHING
  20. 39 JMP $E85B; ATTN REQUEST FROM 64
  21. 41 LDA $7D; ATTN MODE FLG
  22. 43 BEQ $EA63; NOT ATTN MODE BRANCH
  23. 45 LDA $1800; I/O
  24. 47 BPL $EA6B; ATTN SIGNAL (null)NE
  25. 49 RTS
  26. 51 LDA $1800
  27. 53 BPL $EA62; ATTN SIGNAL (null)NE
  28. 55 JMP $E85B; ATTN REQUEST FROM 64
  29. 57 JMP $E8D7; CARRY OUT CMND
  30. 59 ; ** FLASH ERROR LED **
  31. 61 LDX #$00
  32. 63 BIT $6FA6; SKIP 2 BYTES
  33. 65 ;$EA71 LDX $6F HOLDS ERROR NUM
  34. 67 TXS; USE STACK FOR STORAGE
  35. 69 TSX
  36. 71 LDA #$08; LED MASK
  37. 73 ORA $1C00; INTERNAL I/O TURN ON LED
  38. 75 ; ** BIT MAP $1C00 INTERNAL I/O **
  39. 77 ; BIT 0 & 1 STEP HEAD
  40. 79 ; BIT 2 MOTOR ON OFF 1 = ON
  41. 81 ; BIT 3 TURN ON LED 1 = ON
  42. 83 ; BIT 4 WRITE PROTECT 1 = ON
  43. 85 ; BIT 5 & 6 DENSITY (SPEED)
  44. 87 ; BIT 7 SYNC DETECT
  45. 89 JMP $FEEA
  46. 91 TYA
  47. 93 CLC
  48. 95 ADC #$01
  49. 97 BNE $EA7F; LOOP TIMER
  50. 99 DEY; HI BYTE TIMER
  51. 101 BNE $EA7E; LOOP TIMER
  52. 103 LDA $1C00; INTERNAL I/O
  53. 105 AND #$F7; LED MASK
  54. 107 STA $1C00; TURN OFF LED
  55. 109 TYA
  56. 111 CLC
  57. 113 ADC #$01
  58. 115 BNE $EA90; LOOP TIMER
  59. 117 DEY; HI BYTE TIMER
  60. 119 BNE $EA8F; LOOP TIMER
  61. 121 DEX
  62. 123 BPL $EA75; FLASH LED AGAIN
  63. 125 CPX #$FC; TIME BETWEEN FLASHES
  64. 127 BNE $EA8E
  65. 129 BEQ $EA74; REPEAT
  66. 131 ; ** INITIALIZE DSK MEMORY **
  67. 133 SEI
  68. 135 CLD
  69. 137 LDX #$FF
  70. 139 JMP $FF10; SET DATA DIRECTION REG
  71. 141 INX; NOT USED
  72. 143 ; ** FILL ZERO PAGE ASCENDING PATTERN **
  73. 145 LDY #$00
  74. 147 LDX #$00
  75. 149 TXA
  76. 151 STA $00,X
  77. 153 INX
  78. 155 BNE $EAAC; MORE TO DO
  79. 157 TXA; HOLDS 0
  80. 159 CMP $00,X
  81. 161 BNE $EA6E; ERROR BRANC
  82. 163 INC $00,X
  83. 165 INY
  84. 167 BNE $EAB7
  85. 169 CMP $00,X
  86. 171 BNE $EA6E; ERROR BRANCH
  87. 173 STY $00,X
  88. 175 LDA $00,X
  89. 177 BNE $EA6E
  90. 179 INX
  91. 181 BNE $EAB2; MORE TO CHECK
  92. 183 ; ** TEST 2 64K BIT ROMS **
  93. 185 INC $6F:STX $76; SET NEXT ERROR NUM
  94. 187 ; #$01 = E/F #$02 = C/D ROM
  95. 189 LDA #$00
  96. 191 STA $75; LO BYTE PAGE NUM
  97. 193 TAY
  98. 195 LDX #$20; 32 PAGES
  99. 197 CLC
  100. 199 DEC $76
  101. 201 ADC ($75),Y
  102. 203 INY
  103. 205 BNE $EAD7; ANOTHER BYTE ON PAGE
  104. 207 DEX; PAGE NUM
  105. 209 BNE $EAD5; ANOTHER PAGE
  106. 211 ADC #$00; ADD LAST CARRY
  107. 213 TAX; HOLDS CHECKSUM
  108. 215 CMP $76; HI BYTE PAGE COUNT
  109. 217 BNE $EB1F; ERROR HANDLING
  110. 219 CPX #$C0
  111. 221 BEQ $EAC9; DONE
  112. 223 ; ** TEST DSK RAM **
  113. 225 LDA #$01; PAGE NUM
  114. 227 STA $76
  115. 229 INC $6F; ERROR NUM #$03 = RAM
  116. 231 LDX #$07; NUM OF PAGES $0000 T0 $0700
  117. 233 TYA
  118. 235 CLC
  119. 237 ADC $76; HI BYTE PAGE NUM
  120. 239 STA ($75),Y
  121. 241 INY
  122. 243 BNE $EAF2; FILL RAM PAGE
  123. 245 INC $76
  124. 247 DEX
  125. 249 BNE $EAF2
  126. 251 LDX #$07; NUM OF PAGES
  127. 253 DEC $76
  128. 255 DEY
  129. 257 TYA
  130. 259 CLC
  131. 261 ADC $76
  132. 263 CMP ($75),Y
  133. 265 BNE $EB1F; ERROR HANDLING
  134. 267 EOR #$FF; FLIP BITS COMPLIMENT
  135. 269 STA ($75),Y; RAM
  136. 271 EOR ($75),Y
  137. 273 STA ($75),Y
  138. 275 BNE $EB1F
  139. 277 TYA
  140. 279 BNE $EB04; MORE THIS PAGE
  141. 281 DEX
  142. 283 BNE $EB02; MORE PAGES
  143. 285 BEQ $EB22
  144. 287 JMP $FA71; REPORT THE ERROR
  145. 289 LDX #$45
  146. 291 TXS; RESET (CLEAR) THE STACK
  147. 293 LDA $1C00; INTERNAL I/O
  148. 295 AND #$F7; LED MASK
  149. 297 STA $1C00; TURN OFF LED
  150. 299 LDA #$01; INTERRUPT ON NEG EDGE
  151. 301 STA $180C; PERIPHIAL CONT REG
  152. 303 LDA #$82; 10000010
  153. 305 STA $180D; INTERRUPT FLG REG
  154. 307 STA $180E; INTERRUPT ENABLE REG
  155. 309 ; ** GET DEVICE NUM FROM BITS 5 & 6 $1800 **
  156. 311 LDA $1800; I/O
  157. 313 AND #$60
  158. 315 ASL
  159. 317 ROL:ROL:ROL
  160. 319 ORA #$48; TALK ADDR
  161. 321 STA $78; TALK ADDR BUFF
  162. 323 EOR #$60; LISTEN ADDR
  163. 325 STA $77; LISTEN ADDR BUFF
  164. 327 ; ** INITIALIZE BUFF PTR TABLE **
  165. 329 LDX #$00:LDY #$00:LDA #$00
  166. 331 STA $99,X; BUFF TABLE
  167. 333 INX
  168. 335 LDA $FEE0,Y; HI BYTE DATA BUFFS
  169. 337 STA $99,X
  170. 339 INX:INY
  171. 341 CPY #$05
  172. 343 BNE $EB4F; MORE
  173. 345 LDA #$00; LO BYTE
  174. 347 STA $99,X
  175. 349 INX
  176. 351 LDA #$02
  177. 353 STA $99,X
  178. 355 INX
  179. 357 LDA #$D5
  180. 359 STA $99,X
  181. 361 INX
  182. 363 LDA #$02
  183. 365 STA $99,X
  184. 367 LDA #$FF; INACTIVE CODE
  185. 369 LDX #$12; MAXIMUM SEC ADDR
  186. 371 STA $022B,X; STATUS BUFF EACH CHNL
  187. 373 DEX
  188. 375 BPL $EB76; SET ALL BUFFS INACTIVE
  189. 377 LDX #$05; MAXIMUM CHNLS
  190. 379 STA $A7,X; TABLE CHNLS EACH BUFF
  191. 381 STA $AE,X;   "      "      "     "
  192. 383 STA $CD,X;   "      "      "     "
  193. 385 DEX
  194. 387 BPL $EB7E; MORE
  195. 389 LDA #$05
  196. 391 STA $AB; BUFF COUNT
  197. 393 LDA #$06; BUFF COUNT + 1
  198. 395 STA $AC
  199. 397 LDA #$FF
  200. 399 STA $AD
  201. 401 STA $B4
  202. 403 LDA #$05; ERROR CHNL
  203. 405 STA $023B
  204. 407 LDA #$84
  205. 409 STA $023A
  206. 411 LDA #$0F
  207. 413 STA $0256
  208. 415 LDA #$01; CODE READY TO LISTEN
  209. 417 STA $F6
  210. 419 LDA #$88; CODE READY TO TALK
  211. 421 STA $F7
  212. 423 LDA #$E0
  213. 425 STA $024F
  214. 427 LDA #$FF
  215. 429 STA $0250
  216. 431 LDA #$01
  217. 433 STA $1C; WRITE PROTECT FLG
  218. 435 STA $1D;   "      "     "
  219. 437 JSR $CB63; INITIALIZE USER JUMP TABLE
  220. 439 JSR $CEFA; INITIALIZE LEAST USED TABLE
  221. 441 JSR $F295; INITIALIZE DSK [154]ROLLER
  222. 443 LDA #$22
  223. 445 STA $65; LO BYTE NMI ROUTIME
  224. 447 LDA #$EB
  225. 449 STA $66; HI  "    "     "
  226. 451 LDA #$0A; NORMAL SECT INCREMENT
  227. 453 STA $69
  228. 455 LDA #$05; NORMAL RECOVERY COUNT
  229. 457 STA $6A
  230. 459 LDA #$73; ERROR CODE POWER ON MESSAGE
  231. 461 JSR $E6C1
  232. 463 LDA #$00
  233. 465 STA $1800; RELEASE ALL LINES
  234. 467 LDA #$1A
  235. 469 STA $1802; DATA DIRECTION REG
  236. 471 JSR $E780; CHECK BOOT SYSTEM ROUT
  237. 473 ; ** IDLE LOOP (WAIT FOR A CMND) **
  238. 475 CLI
  239. 477 LDA $1800; I/O
  240. 479 AND #$E5; SET CLOCK DATA ATTN LINES
  241. 481 STA $1800
  242. 483 LDA $0255; CMND WAITING FLG
  243. 485 BEQ $EBFF; NO CMND
  244. 487 LDA #$00
  245. 489 STA $0255; RESET FLG
  246. 491 STA $67; NMI FLG (NO NMI)
  247. 493 JSR $C146; PARSE & EXECUTE CMND
  248. 495 CLI
  249. 497 LDA $7C; ATTENTION PENDING FLG
  250. 499 BEQ $EC07; NO PENDING
  251. 501 JMP $E85B; SERVICE ATTN REQUEST
  252. 503 CLI
  253. 505 LDA #$0E; MAXIMUM SEC ADDR
  254. 507 STA $72; TEMP WORK
  255. 509 LDA #$00
  256. 511 STA $6F; TEMP WORK
  257. 513 STA $70;  "   "
  258. 515 LDX $72; SEC ADD CTR
  259. 517 LDA $02BB,X; CHNL STATUS BUFF
  260. 519 CMP #$FF
  261. 521 BEQ $EC2B; INACTIVE BUFF
  262. 523 AND #$3F
  263. 525 STA $82; INDEX CURRENT CHNL
  264. 527 JSR $DF93; GET ACTIVE BUFF NUM
  265. 529 TAX
  266. 531 LDA $025B,X; LAST CMND BY BUFF
  267. 533 AND #$01
  268. 535 TAX
  269. 537 INC $6F,X; NUM OF ACTIVE FILES
  270. 539 DEC $72; SEC ADDR COUNT
  271. 541 BPL $EC12; MORE SEC ADD TO CHECK
  272. 543 LDY #$04; NUM OF BUFFS - 1
  273. 545 LDA $0000,Y; CURRENT CMND NUM
  274. 547 BPL $EC3B; NO CMND IN PROGRESS
  275. 549 AND #$01; MASK OFF NON DRIVE BITS
  276. 551 TAX
  277. 553 INC $6F,X
  278. 555 DEY
  279. 557 BPL $EC31; MORE BUFFS TO CHECK
  280. 559 SEI
  281. 561 LDA $1C00; INTERNAL I/O
  282. 563 AND #$F7; LED MASK
  283. 565 PHA
  284. 567 LDA $7F; DRIVE NUM
  285. 569 STA $86; TEMP RESULT
  286. 571 LDA #$00
  287. 573 STA $7F
  288. 575 LDA $6F; ACTIVE FILE COUNT
  289. 577 BEQ $EC5C; NOTHING TO DO (null) IDLE
  290. 579 LDA $1C; WRITE PROTECT FLG DRV 0
  291. 581 BEQ $EC58
  292. 583 JSR $D313; CLOSE ALL FILES
  293. 585 PLA; LED DATA BYTE
  294. 587 ORA #$08; TURN ON LED DRIVE 0
  295. 589 PHA
  296. 591 INC $7F; DRIVE NUM BUFF
  297. 593 LDA $70; ACTIVE FILE COUNT
  298. 595 BEQ $EC6D; NOTHING TO DO
  299. 597 LDA $1D; WRITE PROTECT FLG DRV 1
  300. 599 BEQ $EC69
  301. 601 JSR $D313; CLOSE ALL FILES
  302. 603 PLA; LEAD DATA BYTE
  303. 605 ORA #$00; LED MASK DRV 1
  304. 607 PHA
  305. 609 LDA $86; ORIGINAL DRIVE NUM
  306. 611 STA $7F; DRIVE NUM BUFF
  307. 613 PLA
  308. 615 LDX $026C; ERROR WORD BUFF
  309. 617 BEQ $EC98; LED NOT FLASHING BRANCH
  310. 619 ; ** ERROR LED FLASHING **
  311. 621 LDA $1C00; DSK CONTROLLER
  312. 623 CPX #$80
  313. 625 BNE $EC81; SAME ERROE STILL IN $026C
  314. 627 JMP $EC8B; DIFFERENT ERROR NUM
  315. 629 LDX $1805; TIMER # 1 HI CTR
  316. 631 BMI $EC98; STILL TIMING
  317. 633 LDX #$A0; 8 MILLI SECONDS
  318. 635 STX $1805
  319. 637 DEC $O26C; ERROR WORD
  320. 639 BNE $EC98
  321. 641 EOR $026D; TOGGLE THE LED
  322. 643 LDX #$10
  323. 645 STX $026C; START NEW TIMING CYCLE
  324. 647 STA $1C00; DSK CONTROLLER
  325. 649 JMP $EBFF; TOP OF THE LOOP
  326. 651 ; ** LOAD THE DIRECTORY **
  327. 653 LDA #$00
  328. 655 STA $83; SEC ADDR BUFF
  329. 657 LDA #$01
  330. 659 JSR $D1E2; ALLOCATE CHNL & BUFF
  331. 661 LDA #$00
  332. 663 JSR $D4C8; SET BUFF PTR START OF BUFF
  333. 665 LDX $82; INDEX CURRENT CHNL
  334. 667 LDA #$00
  335. 669 STA $0244,X; LST CHAR IN BUFF PTR
  336. 671 JSR $DF93; GET ACTIVE BUFF NUM
  337. 673 TAX; HOLDS BUFF NUM
  338. 675 LDA $7F; DRIVE NUM BUFF
  339. 677 STA $025B,X; LAST CMND BY BUFF
  340. 679 LDA #$01
  341. 681 JSR $CFF1; PUT LO BYTE LOAD ADD IN BUFF
  342. 683 LDA #$04
  343. 685 JSR $CFF1; PUT HI  "     "   "   "
  344. 687 LDA #$01
  345. 689 JSR $CFF1; PUTS DUMMY LINK $0101 INTO BUFF
  346. 691 JSR $CFF1; PUT IN BUFF ALSO
  347. 693 LDA $0272; HOLDS LO BYTE BLOCK CT USED 1ST LINE #
  348. 695 JSR $CFF1
  349. 697 LDA #$00
  350. 699 JSR $CFF1; HI BYTE LINE NUM
  351. 701 JSR $ED59; MOVE DSK NAME TO BUFF
  352. 703 JSR $DF93; GETA ACTIVE BUFF NUM
  353. 705 ASL
  354. 707 TAX
  355. 709 DEC $99,X; BUFF TAB
  356. 711 DEC $99,X
  357. 713 LDA #$00
  358. 715 JSR $CFF1; END OF PROG NULL BYTE
  359. 717 LDA #$01
  360. 719 JSR $CFF1; DUMMY PROG LINE LINK $0101
  361. 721 JSR $CFF1
  362. 723 JSR $C6CE; GET ACTIVE BUFF & FILENM
  363. 725 BCC $ED23; LAST ENRTY
  364. 727 LDA $0272; BLK CT USED FOR LO BYTE LINE #
  365. 729 JSR $CFF1
  366. 731 LDA $0273; HI BYTE BLK CY HI BYTE LINE #
  367. 733 JSR $CFF1
  368. 735 JSR $ED59; MOVE FILENM/TYPE INTO BUFF
  369. 737 LDA #$00
  370. 739 JSR $CFF1; END OF PROG LINE NULL BYTE
  371. 741 BNE $ECEA; BUFF NOT FULL
  372. 743 JSR $DF93; GET ACTIVE BUFF NUM
  373. 745 ASL
  374. 747 TAX
  375. 749 LDA #$00
  376. 751 STA $99,X; LO BYTE PTR BUFF TAB
  377. 753 LDA #$88; CODE READY TO TALK
  378. 755 LDY $82; INDEX CURRENT CHNL
  379. 757 STA $0254; DIRECTORY LISTING FULL FLG
  380. 759 STA $00F2,Y; CHNL STATUS BUFF
  381. 761 LDA $85; TEMP DATA BYTE
  382. 763 RTS
  383. 765 ; ** END DIRECTORY LOAD **
  384. 767 LDA $0272; LO BYTE BLOCK COUNT
  385. 769 JSR $CFF1; PUT IN BUFF LO BYTE LINE #
  386. 771 LDA $0273; HI BYTE
  387. 773 JSR $CFF1
  388. 775 JSR $ED59; GET FILENM/TYPE
  389. 777 JSR $DF93; GET ACTIVE BUFF NUM
  390. 779 ASL
  391. 781 TAX
  392. 783 DEC $99,X; LO BYTE PTR BUFF TAB
  393. 785 DEC $99,X
  394. 787 LDA #$00; PUT 3 0'S END OF PROGRAM
  395. 789 JSR $CFF1
  396. 791 JSR $CFF1
  397. 793 JSR $CFF1
  398. 795 JSR $DF93; GET ACTIVE BUFF NUM
  399. 797 ASL
  400. 799 TAY
  401. 801 LDA $0099,Y; LO BYTE PTR BUFF TAB
  402. 803 LDX $82; INDEX CURRENT CHNL
  403. 805 STA $0244,X; PTR LAST NON 0 BYTE
  404. 807 DEC $0244,X; NOW POINTS CORRECTLY
  405. 809 JMP $ED0D; SET CHNL STATUS/FLGS
  406. 811 ; ** TRANSFER FILENM TO LISTING BUFF **
  407. 813 LDY #$00
  408. 815 LDA $02B1,Y; DIRECTORY BUFF
  409. 817 JSR $CFF1; PUT IN BUFF
  410. 819 INY
  411. 821 CPY #$1B
  412. 823 BNE $ED5B; MORE TO MOVE
  413. 825 RTS
  414. 827 ; ** GET CHARACHTER FOR DIRECTORY LOAD **
  415. 829 JSR $D137; GET BYTE FROM DATA BUFF
  416. 831 BEQ $ED6D; END OF FILE
  417. 833 RTS
  418. 835 STA $85; TEMP FOR DATA BYTE
  419. 837 LDY $82; INDEX CURRENT CHNL
  420. 839 LDA $0244,Y; LO BYTE PTR DIR BUFF
  421. 841 BEQ $ED7E; BUFF FULL
  422. 843 LDA #$80; CODE EOF
  423. 845 STA $00F2,Y; CHNL STATUS BUFF
  424. 847 LDA $85
  425. 849 RTS
  426. 851 PHA; SAVE NULL BYTE
  427. 853 JSR $ECEA; CREATE FALSE LISTING/BUFF
  428. 855 PLA
  429. 857 RTS
  430. 859 ; ** VALIDATE THE DSK **
  431. 861 JSR $C1D1; PARSE CMND GET DRIVE #
  432. 863 JSR $D042; INITIALIZE DRIVE
  433. 865 LDA #$40; CODE BAM DIRTY (CHANGED)
  434. 867 STA $02F9; DONT WRITE BAM FLG
  435. 869 JSR $EEB7; PUT NEW EMPTY BAM IN RAM
  436. 871 LDA #$00; CODE SEARCH VALID DIR ENTRY
  437. 873 STA $0292; INDEX 1ST AVAIL ENTRY
  438. 875 JSR $C5AC; SEARCH DIR VALID ENTRY
  439. 877 BNE $EDD9; ENTRY FOUND
  440. 879 LDA #$00; NO MORE ENTRIES
  441. 881 STA $81; SECT NUM BUFF
  442. 883 LDA $FE85; #$12 DIRECT TRACK
  443. 885 STA $80; TRACK NUM BUFF
  444. 887 JSR $EDE5; WRITE BAM USED DIR SECTS
  445. 889 LDA #$00; CODE BAM CLEAN
  446. 891 STA $02F9; DONT WRITE BAM FLG
  447. 893 JSR $EEFF; WRITE BAM TO DSK
  448. 895 JMP $C194; TERM ROUT
  449. 897 ; ** PUT DIRECTORY ENTRY IN BAM **
  450. 899 INY; PTR ENTRY BUFF
  451. 901 LDA ($94),Y; TRACK LINK
  452. 903 PHA
  453. 905 INY
  454. 907 LDA ($94),Y; SECT LINK
  455. 909 PHA
  456. 911 LDY #$13; PTR SIDE SEC TRACK LINK
  457. 913 LDA ($94),Y
  458. 915 BEQ $EDCB; NOT RELATIVE FILE
  459. 917 STA $80; TRACK NUM BUFF
  460. 919 INY:LDA ($94),Y; PTR ENTRY BUFF
  461. 921 STA $81; SIDE SEC SECT LINK
  462. 923 JSR $EDE5; MARK SIDE SEC USED IN BAM
  463. 925 PLA
  464. 927 STA $81; SECT NUM BUFF
  465. 929 PLA
  466. 931 STA $80; TRACK NUM BUFF
  467. 933 JSR $EDE5; MARK MAIN FILE SEC USED IN BAM
  468. 935 JSR $C604; SEARCH NEXT VALID ENTRY
  469. 937 BEQ $ED9C; NO MORE ENTRIES
  470. 939 LDY #$00
  471. 941 LDA ($94),Y; FILE TYPE
  472. 943 BMI $EDB3; PROPERLY CLOSED FILE
  473. 945 JSR $C8B6; DELETE FILE NOT CLOSED
  474. 947 JMP $EDD4; FIND NEXT ENTRY
  475. 949 ; ** TRACE FILE LINKS WRITE TO BAM **
  476. 951 JSR $D55F; CHECK IF TRK & SEC (null)OD
  477. 953 JSR $EF90; MARK TRK & SEC USED IN BAM
  478. 955 JSR $D475; OPEN INTERNAL READ CHNL
  479. 957 LDA #$00
  480. 959 JSR $D4C8; SET PTRS 1ST BYTE IN BUFF
  481. 961 JSR $D137; GET BYTE (TRACK LINK)
  482. 963 STA $80; TRACK NUM BUFF
  483. 965 JSR $D137; GET BYTE (SECT LINK)
  484. 967 STA $81; SECT NUM BUFF
  485. 969 LDA #$80
  486. 971 BNE $EE04; MARK SECT USED
  487. 973 JMP $D227; LAST BLOCK FREE CHNL
  488. 975 JSR $EF90; MARK SECT USED IN BAM
  489. 977 JSR $D44D; READ NEXT BLOCK OF FILE
  490. 979 JMP $EDEE; CONTINUE
  491. 981 ; ** FORMAT A DSK (NEW) **
  492. 983 JSR $C312; SET UP DRIVE & TABLE PTRS
  493. 985 LDA $E2; DEFAULT FLG (DRIVE NUM)
  494. 987 BPL $EE19; (null)OD DRIVE NUM
  495. 989 LDA #$33; CODE BAD DRIVE NUM
  496. 991 JMP $C1C8; ERROR HANDLING
  497. 993 AND #$01; MASK NON DRIVE BITS
  498. 995 STA $7F; DRIVE NUM BUFF
  499. 997 JSR $C100; TURN ON DRIVE LED
  500. 999 LDA $7F
  501. 1001 ASL
  502. 1003 TAX
  503. 1005 LDY $027B; FILENM PTR TABLE
  504. 1007 CPY $0274; CMND LENGTH BUFF
  505. 1009 BEQ $EE46; NO NEW DSK ID (SHORT NEW)
  506. 1011 LDA $0200,Y; DSK ID FROM CMND
  507. 1013 STA $12,X; 1ST ID CHAR BUFF
  508. 1015 LDA $0201,X
  509. 1017 STA $13,X; 2ND ID CHAR
  510. 1019 JSR $D307; CLEAR ALL CHNLS
  511. 1021 LDA #$01; TRACK # 1
  512. 1023 STA $80; TRACK NUM BUFF
  513. 1025 JSR $C8C6; SET JUMP CMND FOR FORMAT
  514. 1027 JSR $F005; CLEAR BAM
  515. 1029 JMP $EE56; CONTINUE
  516. 1031 ; ** CLEAR DIRECTORY ONLY **
  517. 1033 JSR $D042; INITIALIZE DRIVE
  518. 1035 LDX $7F; DRIVE NUM BUFF
  519. 1037 LDA $0101,X; DOS VERSION BUFF
  520. 1039 CMP $FED5; #$41 (A)
  521. 1041 BEQ $EE56; (null)OD DOS VERSION
  522. 1043 JMP $D572; ERROR JUMP
  523. 1045 JSR $EEB7; CREATE NEW BAM
  524. 1047 LDA $F9; CMND NUM
  525. 1049 TAY
  526. 1051 ASL
  527. 1053 TAX
  528. 1055 LDA $FE88; #$90 OFFSET DSK NAME BAM SEC
  529. 1057 STA $99,X; NEXT BYTE IN BUFF PTR
  530. 1059 LDX $027A; FILENM PTR TABLE
  531. 1061 LDA #$1B; FILENM LENGTH
  532. 1063 JSR $C66E; TRANS NEW DSK NAME TO BAM
  533. 1065 LDY #$12; DSK ID POSISTION ZERO PAGE
  534. 1067 LDX $7F; DRIVE NUM BUFF
  535. 1069 LDA $FED5; DOS VERSION (#$41)
  536. 1071 STA $0101,X; DOS VERSION BUFF
  537. 1073 TXA
  538. 1075 ASL
  539. 1077 TAX
  540. 1079 LDA $12,X; 1ST ID NUM
  541. 1081 STA ($94),Y; DIRECTORY BUFF
  542. 1083 INY
  543. 1085 LDA $13,X; 2ND ID NUM
  544. 1087 STA ($94),X
  545. 1089 INY:INY
  546. 1091 LDA #$32; ASCII 2 DOS VERSION
  547. 1093 STA ($94),Y
  548. 1095 INY
  549. 1097 LDA $FED5; #$41 DOS VERSION
  550. 1099 STA ($94),Y
  551. 1101 LDY #$02; PTR 3RD BYTE IN BAM
  552. 1103 STA ($6D),Y; START OF BIT MAP PTR
  553. 1105 LDA $FE85; #$12 DIRECTORY TRACK
  554. 1107 STA $80; TRACK NUM BUFF
  555. 1109 JSR $EF93; MARK TRK 18 SEC 0 USED
  556. 1111 LDA #$01
  557. 1113 STA $81; SECT NUM BUFF
  558. 1115 JSR $EF93; MARK TRK 18 SEC 1 USED
  559. 1117 JSR $EEFF; WRITE BAM TO DSK
  560. 1119 JSR $F005; CLEAR ALL BAM
  561. 1121 LDY #$01
  562. 1123 LDA #$FF
  563. 1125 STA ($6D),Y; DIRECT 1ST SEC LINK
  564. 1127 JSR $D464; WRITE DIRECT BLOCK TO DSK
  565. 1129 DEC $81; SECT NUM BUFF
  566. 1131 JSR $D460; READ BAM INTO RAM
  567. 1133 JMP $C194; TERM ROUT
  568. 1135 ; ** CREATE NEW BAM MAP **
  569. 1137 JSR $F0D1; FILL BAM WITH 0
  570. 1139 LDY #$00
  571. 1141 LDA #$12; DIECTORY TRACK NUM
  572. 1143 STA ($6D),Y; TRACK LINK
  573. 1145 INY
  574. 1147 TYA
  575. 1149 STA ($6D),Y; SECT LINK
  576. 1151 INY:INY:INY
  577. 1153 LDA #$00
  578. 1155 STA $6F; TEMP WORK
  579. 1157 STA $70;  "    "
  580. 1159 STA $71; BIT MANIPULATION AREA
  581. 1161 TYA
  582. 1163 LSR:LSR; FIND TRACK NUM
  583. 1165 JSR $F24B; CALUCULATE HIGHEST SEC THIS TRK
  584. 1167 STA ($6D),Y; USED FOR FREE SECTS
  585. 1169 INY
  586. 1171 TAX; HOLDS SECTS
  587. 1173 SEC; FREE SECT BIT IN C FLG
  588. 1175 ROL $6F
  589. 1177 ROL $70
  590. 1179 ROL $71; PUSH FREE BIT
  591. 1181 DEX
  592. 1183 BNE $EED9; PUSH MORE BITS
  593. 1185 LDA $6F,X; NOW HOLD BIT MAP THIS TRK
  594. 1187 STA ($6D),Y
  595. 1189 INY
  596. 1191 INX
  597. 1193 CPX #$03
  598. 1195 BCC $EEE3; MORE BITS TO DO
  599. 1197 CPY #$90
  600. 1199 BCC $EEC7; MORE TRACKS TO DO
  601. 1201 JMP $D075; CALCULATE BLOCKS FREE
  602. 1203 ; ** WRITE BAM TO DRIVE **
  603. 1205 JSR $DF93; GET ACTIVE BUFF NUM
  604. 1207 TAX; HOLDS BUFF
  605. 1209 LDA $025B,X; LAST CMND NUM
  606. 1211 AND #$01
  607. 1213 STA $7F; DRIVE NUM BUFF
  608. 1215 LDY $7F
  609. 1217 LDA $0251,Y; DIRTY BAM FLG
  610. 1219 BNE $EF07; DIRTY BAM (CHANGED)
  611. 1221 RTS
  612. 1223 LDA #$00
  613. 1225 STA $0251,Y; CLEAR DIRTY BAM FLG
  614. 1227 JSR $EF3A; SET PTR TO BAM
  615. 1229 LDA $7F; DRIVE NUM BUFF
  616. 1231 ASL
  617. 1233 PHA
  618. 1235 JSR $F0A5; PUT MEMORY IN BAM
  619. 1237 PLA
  620. 1239 CLC
  621. 1241 ADC #$01
  622. 1243 JSR $F0A5;  "    "     "  "
  623. 1245 LDA $80
  624. 1247 PHA
  625. 1249 LDA #$01
  626. 1251 STA $80; TRACK NUM BUFF
  627. 1253 ASL:ASL
  628. 1255 STA $6D; START OF BIT MAP PTR
  629. 1257 JSR $F220; CHECK BIT MAP FOR TRACK
  630. 1259 INC $80
  631. 1261 LDA $80
  632. 1263 CMP $FED7; #$24 MAXIMUM TRACKS
  633. 1265 BCC $EF24; CHECK NEXT TRACK
  634. 1267 PLA; ORIGINAL TRACK NUM
  635. 1269 STA $80
  636. 1271 JMP $D58A; WRITE BAM TO DSK
  637. 1273 ; ** READ BAM TO RAM **
  638. 1275 JSR $F10F; GET BAM CHNL NUM
  639. 1277 TAX
  640. 1279 JSR $F0DF; READ BAM TO RAM
  641. 1281 LDX $F9; CMND NUM
  642. 1283 LDA $FEE0,X; HI BYTE PTR TO DATA BUFF
  643. 1285 STA $6E; START OF BIT MAP PTR
  644. 1287 LDA #$00
  645. 1289 STA $6D; LO BYTE
  646. 1291 RTS
  647. 1293 ; ** GET NUM OF FREE BLOCKS **
  648. 1295 LDX $7F; DRIVE NUM BUFF
  649. 1297 LDA $02FA,X; LO BYTE BLOSKS FREE
  650. 1299 STA $0272; LO BYTE FREE BLOCKS TEMP
  651. 1301 LDA $02FC,X; HI BYTE
  652. 1303 STA $0273
  653. 1305 RTS
  654. 1307 ; ** FREE A BLOCK ON TRACK IN BAM **
  655. 1309 JSR $EFF1; WRITE BAM
  656. 1311 JSR $EFCF; CALCULATE BAM INDEX
  657. 1313 SEC; CARRY SET = NO ACTION
  658. 1315 BNE $EF87; ALREADY FREE
  659. 1317 LDA ($6D),Y; START OF BAM PTR
  660. 1319 ORA $EFE9,X; BIT MAP MASK
  661. 1321 STA ($6D),Y
  662. 1323 JSR $EF88; SET DIRTY BAM FLG
  663. 1325 LDY $6F; NUM OF BLOCKS FREE PTR
  664. 1327 CLC
  665. 1329 LDA ($6D),Y; BLOCKS FREE
  666. 1331 ADC #$01
  667. 1333 STA ($6D),Y
  668. 1335 LDA $80; TRACK NUM BUFF
  669. 1337 CMP $FE85; #$12 DIRECTORY TRACK
  670. 1339 BEQ $EFBA
  671. 1341 INC $02FA,X; LO BYTE BLOCKS FREE
  672. 1343 BNE $EF87
  673. 1345 INC $02FC,X; HI BYTE
  674. 1347 RTS
  675. 1349 ; ** SET DIRTY BAM FLG **
  676. 1351 ; BAM IN RAM DIFFERENT FROM DSK
  677. 1353 LDX $7F; DRIVE NUM BUFF
  678. 1355 LDA #$01
  679. 1357 STA $0251,X; DIRTY BAM FLG
  680. 1359 RTS
  681. 1361 ; ** MARK BLOCK USED IN BAM **
  682. 1363 JSR $EFF1; WRITE OUT BAM
  683. 1365 JSR $EFCF; CALCULATE INDEX TO BAM
  684. 1367 BEQ $EFCE; ALREADY MARKED USED
  685. 1369 LDA ($6D),Y; BAM ENTRY
  686. 1371 EOR $EFE9,X; BIT MAP MASK
  687. 1373 STA ($6D),Y
  688. 1375 JSR $EF88; SET DIRTY BAM FLG
  689. 1377 LDY $6F; NUM OF BLKS FREE PTR
  690. 1379 LDA ($6D),Y
  691. 1381 SEC
  692. 1383 SBC #$01
  693. 1385 STA ($6D),Y
  694. 1387 LDA $80; TRACK NUM BUFF
  695. 1389 CMP $FE85; #$12 DIRECTORY TRACK
  696. 1391 BEQ $EFBD
  697. 1393 LDA $02FA,X; LO BYTE BLOCKS FREE
  698. 1395 BNE $EFBA
  699. 1397 DEC $02FC,X; HI BYTE
  700. 1399 DEC $02FA,X
  701. 1401 LDA $02FC,X
  702. 1403 BNE $EFCE
  703. 1405 LDA $02FA,X
  704. 1407 CMP #$03
  705. 1409 BCS $EFCE; GREATER THAN 2 BRANCH
  706. 1411 LDA #$72; CODE DSK FULL
  707. 1413 JSR $E6C7; ERROR HANDLING
  708. 1415 RTS
  709. 1417 ; ** CALCULATE BAM INDEX FOR FREE & USED BLOCKS **
  710. 1419 ; ON EXIT Z FLG = 0 BLOCK FREE
  711. 1421 ;         Z FLG = 1 BLOCK USED
  712. 1423 JSR $F011; SET BAM IN MEMORY
  713. 1425 TYA; Y HOLDS PTR START BIT MAP
  714. 1427 STA $6F; TEMP WORK
  715. 1429 LDA $81; SECT NUM BUFF
  716. 1431 LSR; DIVIDE BY 8 FIND 3 BYTES
  717. 1433 LSR; FOR TRK & SEC
  718. 1435 LSR
  719. 1437 SEC
  720. 1439 ADC $6F
  721. 1441 TAY
  722. 1443 LDA $81
  723. 1445 AND #$07; FIND BIT FOR SECT
  724. 1447 TAX
  725. 1449 LDA ($6D),Y; BAM BYTE W/BIT FOR BLOCK
  726. 1451 AND $EFE9,X; BIT MASK
  727. 1453 RTS
  728. 1455 ; ** BIT MAP MASK TABLE **
  729. 1457 ; BYTE  1  1   BYTE  2   2
  730. 1459 ;       4  4         8   8
  731. 1461 ;      10 16        20  32
  732. 1463 ;      40 64        80 128
  733. 1465 *= $EFF1
  734. 1467 ; ** WRITE BAM TO DSK **
  735. 1469 LDA #$FF
  736. 1471 BIT $02F9; DONT WRITE BAM FLG
  737. 1473 BEQ $F004
  738. 1475 BPL $F004
  739. 1477 BVS $F004
  740. 1479 LDA #$00:STA $02F9
  741. 1481 JMP $D58A; WRITE BAM TO DSK
  742. 1483 RTS
  743. 1485 ; ** ZERO BAM **
  744. 1487 JSR $EF3A; SET BAM PTRS
  745. 1489 LDY #$00
  746. 1491 TYA
  747. 1493 STA ($6D),Y
  748. 1495 INY
  749. 1497 BNE $F00B
  750. 1499 RTS
  751. 1501 ; ** SET BAM IN MEMORY **
  752. 1503 LDA $6F; TEMP WORK AREA
  753. 1505 PHA
  754. 1507 LDA $70
  755. 1509 PHA
  756. 1511 LDX $7F; DRIVE NUM BUFF
  757. 1513 LDA $FF,X; NO DRIVE FLG
  758. 1515 BEQ $F022; DRIVE OK
  759. 1517 LDA #$74; CODE DRIVE NOT READY
  760. 1519 JSR $E648; ERROR HANDLING
  761. 1521 JSR $F10F; SET UP BAM
  762. 1523 STA $6F; CHNL NUM
  763. 1525 TXA; DRIVE NUM
  764. 1527 ASL
  765. 1529 STA $70
  766. 1531 TAX
  767. 1533 LDA $80; TRACK NUM BUFF
  768. 1535 CMP $029D,Y; BAM TRACK TABLE
  769. 1537 BEQ $F03E
  770. 1539 INX; POINTS TO ALTERNATE BAM CHNL
  771. 1541 STX $70
  772. 1543 CMP $029D,X
  773. 1545 BEQ $F03E
  774. 1547 JSR $F05B; READ BAM MOVE TO CORRECT RAM
  775. 1549 LDA $70; ALT BAM CHNL
  776. 1551 LDX $7F; DRIVE NUM
  777. 1553 STA $029B,X; LAST CHNL USED PTR
  778. 1555 ASL:ASL
  779. 1557 CLC
  780. 1559 ADC #$A1
  781. 1561 STA $6D; LO BYTE START OF BAM
  782. 1563 LDA #$02
  783. 1565 ADC #$00; CLEAR CARRY FLG
  784. 1567 STA $6E; HI BYTE
  785. 1569 LDY #$00
  786. 1571 PLA; ORIGINAL TEMP WORK VALUES
  787. 1573 STA $70
  788. 1575 PLA
  789. 1577 STA $6F
  790. 1579 RTS
  791. 1581 ; ** SWAP IMAGES IN BAM **
  792. 1583 LDX $6F; INDEX IN BUFF
  793. 1585 JSR $F0DF; READ BAM
  794. 1587 LDA $7F; DRIVE NUM BUFF
  795. 1589 TAX
  796. 1591 ASL
  797. 1593 ORA $029B,X; LEAST USED BAM PTR
  798. 1595 EOR #$01
  799. 1597 AND #$03
  800. 1599 STA $70
  801. 1601 JSR $F0A5; PUT MEMORY IMAGE IN BAM
  802. 1603 LDA $F9; CMND NUM
  803. 1605 ASL
  804. 1607 TAX
  805. 1609 LDA $80; TRACK NUM BUFF
  806. 1611 ASL:ASL
  807. 1613 STA $99,X; LO BYTE NEXT BYTE BUFF POINT
  808. 1615 LDA $70
  809. 1617 ASL:ASL
  810. 1619 TAY
  811. 1621 LDA ($99),Y; BAM BUFF
  812. 1623 STA $02A1,Y; BAM IMAGE
  813. 1625 LDA #$00
  814. 1627 STA ($99,X); HELD BAM BYTE
  815. 1629 INC $99,X; LO BYTE ORIG BAM PTR
  816. 1631 INY; POINTS TO NEW BAM IMAGE
  817. 1633 TYA
  818. 1635 AND #$03
  819. 1637 BNE $F07F; MOVE NEXT BYTE
  820. 1639 LDX $70; DRIVE NUM
  821. 1641 LDA $80; TRACK NUM
  822. 1643 STA $029D,X; IMAGE TRK # PTR
  823. 1645 LDA $02F9; DONT WRITE BAM FLG
  824. 1647 BNE $F09F; DONT WRITE
  825. 1649 JMP $D58A; WRITE BAM TO DSK
  826. 1651 ORA #$80; WRITE BAM PENDING CODE
  827. 1653 STA $02F9
  828. 1655 RTS
  829. 1657 ; ** PUT MEMORY IMAGE OF BAM IN CORRECT RAM **
  830. 1659 TAY
  831. 1661 LDA $029D,Y; PTR BAM TRK #
  832. 1663 BEQ $F0D0; NO IMAGE IN RAM
  833. 1665 PHA
  834. 1667 LDA #$00
  835. 1669 STA $029D,Y
  836. 1671 LDA $F9; CMND NUM
  837. 1673 ASL
  838. 1675 TAX
  839. 1677 PLA
  840. 1679 ASL:ASL
  841. 1681 STA $99,X; NEXT BYTE IN BUFF PTR
  842. 1683 TYA
  843. 1685 ASL:ASL
  844. 1687 TAY
  845. 1689 LDA $02A1,Y; BAM IMAGE BYTE
  846. 1691 STA ($99,X); RAM MEMORY
  847. 1693 LDA #$00
  848. 1695 STA $02A1,Y; CLEAR BAM BYTE
  849. 1697 INC $99,X
  850. 1699 INY
  851. 1701 TYA
  852. 1703 AND #$03
  853. 1705 BNE $F0BE; MOVE NEXT BYTE
  854. 1707 RTS
  855. 1709 ; ** ZERO TRACK NUM FOR BAM IMAGE **
  856. 1711 LDA $7F; DRIVE NUM BUFF
  857. 1713 ASL
  858. 1715 TAX
  859. 1717 LDA #$00
  860. 1719 STA $029D,X; TRACK # BAM IMAGE
  861. 1721 INX
  862. 1723 STA $029D,X
  863. 1725 RTS
  864. 1727 ; ** READ BAM FROM DSK IF NOT IN RAM **
  865. 1729 LDA $A7,X; CHNL EACH BUFF TABLE
  866. 1731 CMP #$FF
  867. 1733 BNE $F10A; BAM IN MEMORY
  868. 1735 TXA
  869. 1737 PHA
  870. 1739 JSR $D28E; FIND FREE BUFF
  871. 1741 TAX; HOLDS BUFF NUM
  872. 1743 BPL $F0F2; BUFF FOUND
  873. 1745 LDA #$70; CODE NO CHNL
  874. 1747 JSR $C1C8; ERROR HANDLING
  875. 1749 STX $F9; CMND NUM
  876. 1751 PLA; CHNL NUM
  877. 1753 TAY
  878. 1755 TXA; BUFF NUM
  879. 1757 ORA #$80; SETS BUFF INACTIVE
  880. 1759 STA $00A7,Y; CHNL FOR BUFF TABLE
  881. 1761 ASL
  882. 1763 TAX
  883. 1765 LDA $FE85; #$12 DIRECTORY TRACK
  884. 1767 STA $06,X; TRACK CMND BUFF
  885. 1769 LDA #$00
  886. 1771 STA $07,X; SECT CMND BUFF
  887. 1773 .F DISK ROM 8
  888.