home *** CD-ROM | disk | FTP | other *** search
- 1 PLA
- 3 STA $80; TRK NUM BUFF
- 5 JMP $CF6F; GET ACTIVE BUFF
- 7 PLA
- 9 STA $81; SECT NUM BUFF
- 11 PLA
- 13 STA $80; TRK NUM BUFF
- 15 JSR $CF8C; TOGGLE INACTIVE & ACTIVE BUFFS
- 17 JSR $DF93; GET ACTIVE BUFF
- 19 TAX
- 21 JMP $D599; WAIT FOR ROUT TO FINISH
- 23 LDA #$70; CODE NO BUFFS AVAILABLE
- 25 JMP $C1C8; ERROR HANDLING
- 27 ; ** SET UP DOUBLE BUFFERING **
- 29 JSR $CF09; UPDATE LEAST USED TABLE
- 31 JSR $DFB7; GET INACTIVE BUFF
- 33 BNE $CF8B; FOUND BUFF BRANCH
- 35 JSR $D28E; GET FREE BUFF
- 37 BMI $CF76; NO BUFFS BRANCH
- 39 JSR $DFC2; PUT BUFF FOUND INACTIVE
- 41 RTS
- 43 ; ** TOGGLE INACTIVE & ACTIVE BUFFS **
- 45 LDX $82; INDEX CURRENT CHNL
- 47 LDA $A7,X; CHNL TABLES
- 49 EOR #$80; SET BIT 7 ACTIVE/INACTIVE
- 51 STA $A7,X
- 53 LDA $AE,X; CHNL TABLES
- 55 EOR #$80; SET BIT 7 ACTIVE/INACTIVE
- 57 STA $AE,X
- 59 RTS
- 61 ; ** WRITE TO INTERNAL WRITE CHNL **
- 63 LDX #$12; SEC ADDR WRITE
- 65 STX $83; SEC ADDR BUFF
- 67 LSR $D107; FIND WRITE CHNL
- 69 JSR $C100; TURN ON DRV LED
- 71 JSR $D125; GET FILE TYPE
- 73 BCC $CFAF; NOT RELATIVE FILE BRANCH
- 75 LDA #$20; OVERFLOW FLAG BIT
- 77 JSR $DD9D; CLEAR OVERFLOW FLAG
- 79 LDA $83; SEC ADDR BUFF
- 81 CMP #$0F
- 83 BEQ $CFD8; CMND CHNL BRANCH
- 85 BNE $CFBF; NOT CMND BRANCH
- 87 LDA $84; ORIGINAL SEC ADDR
- 89 AND #$8F
- 91 CMP #$0F
- 93 BCS $CFD8; DATA CHNL BRANCH
- 95 JSR $D125; GET FILE TYPE
- 97 BCS $CFC9; NOT SEQUENTIAL FILE BRANCH
- 99 LDA $85; TEMP DATA
- 101 JMP $D1D9; WRITE BYTE TO CHNL
- 103 BNE $CFCE; RANDOM ACCESS BRANCH
- 105 JMP $E0AB; RELATIVE FILE JUMP
- 107 LDA $85; TEMP DATA
- 109 JSR $CFF1; USR FILE WRITE
- 111 LDY $82; INDEX CURRENT CHNL
- 113 JMP $D3EE; SET UP TO WRITE NEXT BYTE
- 115 LDA #$04; CODE FOR CMND CHNL
- 117 STA $82; INDEX CURRENT CHNL
- 119 JSR $D4E8; TEST IF BUFF FULL (GET LAST BYTE)
- 121 CMP #$2A
- 123 BEQ $CFE8; BUFF FULL BRANCH
- 125 LDA $85; CMND MESSAGE BYTE
- 127 JSR $CFF1; WRITE TO CMND CHNL
- 129 LDA $F8; EOI FLAG
- 131 BEQ $CFED; LAST BYTE BRANCH
- 133 RTS
- 135 INC $0255; SET CMND WAITING FLAG
- 137 RTS
- 139 ; ** PUT BYTE IN A INTO ACTIVE BUFF **
- 141 PHA
- 143 JSR $DF933; GET ACTIVE BUFF
- 145 BPL $CFFD; ACTIVE BUFF BRANCH
- 147 PLA
- 149 LDA #$61; FILE NOT OPEN CODE
- 151 JMP $C1C8; ERROR HANDLING
- 153 ASL
- 155 TAX
- 157 PLA
- 159 STA ($99,X); NEXT BYTE IN BUFF PTR
- 161 INC $99,X; IF LAST BYTE Z FLAG SET
- 163 RTS
- 165 ; ** INIT DRVS **
- 167 JSR $C1D1; PARSE CMND
- 169 JSR $D042; INIT DRVS
- 171 JMP $C194; TERMINATE CMND
- 173 ; ** INIT DRV SPECIFIED **
- 175 JSR $F10F; GET BAM PTR
- 177 TAY
- 179 LDX $A7,Y; CHNL TABLES
- 181 CPX #$FF; INACTIVE CODE
- 183 BNE $D02C; VALID BUFF BRANCH
- 185 PHA
- 187 JSR $D28E; FIND UNUSED BUFF
- 189 TAX
- 191 BPL $D024; FOUND BUFF BRANCH
- 193 LDA #$70; NO CHNL ERROR CODE
- 195 JSR $E648; ERROR HANDLING
- 197 PLA; BAM PTR
- 199 TAY
- 201 TXA; NEW BUFF NUM
- 203 ORA #$80; SET BIT 7 INACTIVE
- 205 STA $00A7,Y; CHNL TABLES
- 207 TXA
- 209 AND #$0F
- 211 STA $F9; CMND NUM
- 213 LDX #$00
- 215 STX $81; SECT NUM BUFF
- 217 LDX $FE85; #$12 DIRECTORY TRK
- 219 STX $80; TRK NUM BUFF
- 221 JSR $D6D3; FIND IMAGE BAM HEADER
- 223 LDA #$B0; CODE FOR SEEK
- 225 JMP $D58C; EXEC CODE (SEEK)
- 227 ; ** INIT DRV **
- 229 JSR $F0D1; ZERO TRK NUMS
- 231 JSR $D313; SET CHNL FOR BAM
- 233 JSR $D00E; GET BUFF FOR BAM
- 235 LDX $7F; DRV NUM BUFF
- 237 LDA #$00
- 239 STA $0251,X; DIRTY BAM FLAG (0 OK)
- 241 TXA
- 243 ASL
- 245 TAX
- 247 LDA $16; IMAGE 1ST I.D. CHAR
- 249 STA $12,X; MASTER I.D BUFF
- 251 LDA $17; 2ND I.D. CHAR
- 253 STA $13; MASTER I.D. BUFF
- 255 JSR $D586; READ BAM INTO BUFF
- 257 LDA $F9; CMND CODE
- 259 ASL
- 261 TAX
- 263 LDA #$02
- 265 STA $99,X; NEXT BYTE IN BUFF PTR
- 267 LDA ($99,X)
- 269 LDX $7F; DRV NUM BUFF
- 271 STA $0101,X; DOS VERSION FRON TRK 18
- 273 LDA #$00
- 275 STA $1C,X; WRITE PROTECT FLAG
- 277 STA $FF,X; NO DRV FLAG
- 279 JSR $EF3A; COUNT FREE BLKS IN BAM
- 281 LDY #$04
- 283 LDA #$00
- 285 TAX
- 287 CLC
- 289 ADC ($6D),Y; START OF BIT MAP PTR
- 291 BCC $D083
- 293 INX; HI BYTE COUNTER
- 295 INY
- 297 INY
- 299 INY
- 301 INY; Y NOW POINTS TO NEXT TRK
- 303 CPY #$48; DIRECTORY TRK
- 305 BEQ $D083; SKIP DIRECTORY TRK
- 307 CPY #$90; CODE FOR DONE
- 309 BNE $D07D; MORE BRANCH
- 311 PHA
- 313 TXA
- 315 LDX $7F; DRV NUM BUFF
- 317 STA $O2FC,X; HI BYTE DISK BLKS FREE
- 319 PLA
- 321 STA $02FA,X; LO " " " "
- 323 RTS
- 325 ; ** READ AHEAD **
- 327 JSR $D6D0; GET HEADER IMAGE
- 329 JSR $D0C3; READ FIRST BLK INTO BUFF
- 331 JSR $D599; WAIT FOR READ TO FINISH
- 333 JSR $D137; GET 1ST BYTE FROM BUFF
- 335 STA $80; TRK NUM BUFF
- 337 JSR $D137
- 339 STA $81; SECT BUFF
- 341 RTS
- 343 ; ** READ AHEAD DOUBLE BUFF **
- 345 JSR $D09B; READ DATA BLK GET NEXT
- 347 LDA $80; TRK NUM BUFF
- 349 BNE $D0B7; NOT END OF FILE BRANCH
- 351 RTS
- 353 JSR $CF1E; SET UP DOUBLE BUFFS
- 355 JSR $D6D0; GET HEADER IMAGE
- 357 JSR $D0C3; READ 1ST BLK INTO BUFF
- 359 JMP $CF1E
- 361 ; ** EXEC READ OF TRK & SECT **
- 363 LDA #$80; CODE FOR READ CMND
- 365 BNE $D0C9; EXEC READ BRANCH
- 367 LDA #$90; CODE FOR WRITE CMND
- 369 STA $024D; CMND BUFF
- 371 JSR $DF93; GET BUFF NUM
- 373 TAX
- 375 JSR $D506; SET DRV NUM
- 377 TXA
- 379 PHA
- 381 ASL
- 383 TAX; INDEX FOR BUFF TABLE
- 385 LDA #$00
- 387 STA $99,X; NEXT BYTE IN BUFF PTR
- 389 JSR $D125; GET FILE TYPE
- 391 CMP #$04
- 393 BCS $D0E8; NOT SEQUENTIAL FILE BRANCH
- 395 INC $B5,X; LO BYTE RECORD # BUFF
- 397 BNE $D0E8
- 399 INC $BB,X; HI " " " "
- 401 PLA
- 403 TAX
- 405 RTS
- 407 ; ** FIND READ CHNL **
- 409 LDA $83; SEC ADDR BUFF
- 411 CMP #$13
- 413 BCC $D0F3; SEC ADDR TOO BIG BRANCH
- 415 AND #$0F
- 417 CMP #$0F
- 419 BNE $D0F9; NOT CMND CHNL BRANCH
- 421 LDA #$10; ERROR CODE SEC ADDR
- 423 TAX
- 425 SEC
- 427 LDA $022B,X; CHNL STATUS BUFF
- 429 BMI $D106; NO CHNL ASSIGNED FOR SEC ADD BRANCH
- 431 AND #$0F
- 433 STA $82; INDEX CURRENT CHNL
- 435 TAX
- 437 CLC
- 439 RTS
- 441 ; ** FIND WRITE CHNL **
- 443 LDA $83; SEC ADDR BUFF
- 445 CMP #$13
- 447 BCC $D10F; SEC ADD TOO BIG BRANCH
- 449 AND #$0F
- 451 TAX
- 453 LDA $022B,X; INDEX CHNL STATUS
- 455 TAY
- 457 ASL
- 459 BCC $D121; NO SEC ADD FOR THIS CHNL BRANCH
- 461 BMI $D123; " " " " " "
- 463 TYA
- 465 AND #$0F
- 467 STA $82; INDEX CURREN CHNL
- 469 TAX
- 471 CLC
- 473 RTS
- 475 BMI $D119; INACTIVE CHNL BRANCH
- 477 SEC
- 479 RTS
- 481 ; ** GET FILE TYPE **
- 483 LDX $82; CHNL NUM BUFF
- 485 LDA $EC,X; FILE TYPE TABLE
- 487 LSR
- 489 AND #$07
- 491 CMP #$04; SETS Z FLAG IF RELATIVE FILE
- 493 RTS
- 495 ; ** SET BUFF PTRS **
- 497 JSR $DF93; GET ACTIVE BUFF NUM
- 499 ASL
- 501 TAX
- 503 LDY $82; CHNL NUM BUFF
- 505 RTS
- 507 ; ** READ 1 BYTE FROM ACTIVE BUFF **
- 509 ; IF LAST BYTE IN BUFF Z FLAG SET
- 511 JSR $D12F; SET BUFF PTRS
- 513 LDA $0244,Y; PTR LAST CHAR READ
- 515 BEQ $D151; LAST CHAR READ BRANCH
- 517 LDA ($99,X); NEXT BYTE IN BUFF PTR
- 519 PHA
- 521 LDA $99,X
- 523 CMP $0244,Y
- 525 BNE $D14D; PULL DATA OFF STACK BRANCH
- 527 LDA #$FF; CODE INACTIVE
- 529 STA $99,X; INACTIVE BUFF
- 531 PLA
- 533 INC $99,X
- 535 RTS
- 537 LDA ($99,X); NEXT BYTE IN BUFF PTR
- 539 INC $99,X
- 541 RTS
- 543 ; ** READ BYTE FROM FILE **
- 545 JSR $D137; GET BYTE ACTIVE BUFF
- 547 BNE $D191; NOT LAST BYTE BRANCH
- 549 STA $85; TEMP DATA BUFF
- 551 LDA $0244,Y; LAST CHAR READ PTR
- 553 BEQ $D16A
- 555 LDA #$80; EOI CODE
- 557 STA $00F2,Y; CHNL STATUS BUFF
- 559 LDA $85; TEMP DATA BUFF
- 561 RTS
- 563 JSR $CF1E; DOUBLE BUFF ROUT
- 565 LDA #$00
- 567 JSR $D4C8; SET BUFF PTRS
- 569 JSR $D137; GET TRK LINK
- 571 CMP #$00
- 573 BEQ $D192; END OF FILE BRANCH
- 575 STA $80; TRK NUM BUFF
- 577 JSR $D137; SECT LINK
- 579 STA $81; SECT BUFF
- 581 JSR $C1FE; BEGING DOUBLE BUFF
- 583 JSR $D1D3; SET DRV NUM
- 585 JSR $D6D0; SET NEXT HEADER IMAGE
- 587 JSR $D0C3; READ NEXT BLK IN FILE
- 589 JSR $CF1E; TOGGLE BUFFS READ AHEAD
- 591 LDA $85; TEMP DATA BUFF
- 593 RTS
- 595 JSR $D137; GET NEXT BYTE
- 597 LDY $82; INDEX CURRENT CHNL
- 599 STA $0244,Y; LAST CHAR READ PTR
- 601 LDA $85; TEMP DATA BUFF
- 603 RTS
- 605 ; ** WRITE CHAR TO ACTIVE CHNL **
- 607 JSR $CFF1; WRITE BYTE TO CHNL
- 609 BEQ $D1A3; BUFF FULL BRANCH
- 611 RTS
- 613 JSR $D1D3; SET DRV NUM
- 615 JSR $F11E; GET NEXT TRK & SECT
- 617 LDA #$00
- 619 JSR $D4C8; SET BUFF PTRS
- 621 LDA $80; TRK NUM BUFF
- 623 JSR $CFF1; SAVE TRK LINK
- 625 LDA $81; SECT NUM BUFF
- 627 JSR $CFF1; SAVE SECT LINK
- 629 JSR $D0C7; WRITE BUFF TO DISK
- 631 JSR $CF1E; TOGGLE BUFFS SET INACTIVE BUFF
- 633 JSR $D6D0; SET HEADER IMAGE NEXT BLK
- 635 LDA #$02; SKIP TRK & SEC LINK
- 637 JMP $D4C8; SET PTRS NEXT BUFF
- 639 ; ** INCREMENT ACTIVE BUFF POINTER **
- 641 STA $6F; TEMP WORK BUFF
- 643 JSR $D4E8; GET ACTIVE BUFF PTR
- 645 CLC
- 647 ADC $6F
- 649 STA $99,X; NEXT BYTE IN BUFF PTR
- 651 STA $94; DIRECTORY BUFF PTR
- 653 RTS
- 655 ; ** SET DRV NUM **
- 657 JSR $DF93; GET ACTIVE BUFF
- 659 TAX
- 661 LDA $025B,X; LAST CMND BUFF
- 663 AND #$01
- 665 STA $7F; DRV NUM BUFF
- 667 RTS
- 669 ; ** OPEN NEW WRITE CHNL **
- 671 SEC
- 673 BCS $D1E3; FORCE BRANCH
- 675 ; ** OPEN NEW READ CHNL **
- 677 CLC
- 679 PHP
- 681 STA $6F; TEMP WORK BUFF
- 683 JSR $D227; FREE CHNLS
- 685 JSR $D37F; FIND FREE INDEX CHNL
- 687 STA $82; INDEX CURRENT CHNL
- 689 LDX $83; SEC ADDR BUFF
- 691 PLP
- 693 BCC $D1F5; READ BRANCH
- 695 ORA #$80; SET BIT 7 (WRITE)
- 697 STA $022B,X; CURRENT STATUS BUFF
- 699 AND #$3F; MASK WRITE BIT
- 701 TAY
- 703 LDA #$FF; INACTIVE BUFF CODE
- 705 STA $00A7,Y; CHNL TABLES
- 707 STA $00AE,Y; CHNL TABLES
- 709 STA $00CD,Y; SIDE SECT TABLES
- 711 DEC $6F; HOLDS NUM OF BUFFS
- 713 BMI $D226; NO MORE BUFFS BRANCH
- 715 JSR $D28E; ALLOCATE NEW BUFF
- 717 BPL $D217; BUFF NOT ALLOCATED BRANCH
- 719 JSR $D25A; REALEASE BUFFS
- 721 LDA #$70; NO CHNL ERROR CODE
- 723 JMP $C1C8; ERROR HANDLING
- 725 STA $00A7,Y; CHNL TABLES
- 727 DEC $6F; # OF BUFFS TO ALLOCATE
- 729 BMI $D226; NO MORE BUFFS BRANCH
- 731 JSR $D28E; ALLOCATE NEW BUFF
- 733 BMI $D20F; BUFF NOT ALLOCATED BRANCH
- 735 STA $00AE,Y; CHNL TABLES
- 737 RTS
- 739 ; ** FREE CHNL FROM SEC ADDR **
- 741 LDA $83; SEC ADDR BUFF
- 743 CMP #$0F
- 745 BNE $D22E; NOT CMND CHNL BRANCH
- 747 RTS
- 749 ; ** FREE DATA CHNL FROM SEC ADDR **
- 751 LDX $83; SEC ADDR BUFF
- 753 LDA $022B,X; CHNL STATUS TABLE
- 755 CMP #$FF
- 757 BEQ $D259; INACTIVE BUFF BRANCH
- 759 AND #$3F; MASK HI BITS
- 761 STA $82; INDEX CURRENT CHNL
- 763 LDA #$FF; INACTIVE CODE
- 765 STA $022B,X; CHNL STATUS TABLE
- 767 LDX $82
- 769 LDA #$00
- 771 STA $F2,X; CHNL STATUS
- 773 JSR $D25A; RELEASE BUFFS
- 775 LDX $82
- 777 LDA #$01
- 779 DEX
- 781 BMI $D253; NO MORE CHNLS BRANCH
- 783 ASL
- 785 BNE $D24D; ALWAYS BRANCHES
- 787 ORA $0256; USE WORD BUFF
- 789 STA $0256; BIT = 1 FREE BIT = 0 USED
- 791 RTS
- 793 ; ** RELEASE BUFFS WITH CHNLS **
- 795 LDX $82; INDEX CURRENT CHNL
- 797 LDA $A7,X; CHNL TABLES
- 799 CMP #$FF; INACTIVE CODE
- 801 BEQ $D26B; INACTIVE BRANCH
- 803 PHA
- 805 LDA #$FF
- 807 STA $A7,X; SET CHNL INACTIVE
- 809 PLA
- 811 JSR $D2F3; FREE BUFF
- 813 LDX $82
- 815 LDA $AE,X; CHNL TABLES
- 817 CMP #$FF; INACTIVE CODE
- 819 BEQ $D27C; ALREADY FREE BRANCH
- 821 PHA
- 823 LDA #$FF
- 825 STA $AE,X
- 827 PLA
- 829 JSR $D2F3
- 831 LDX $82
- 833 LDA $CD,X; SIDE SECT TABLES
- 835 CMP #$FF
- 837 BEQ $D2D8; ALREADY FREE BRANCH
- 839 PHA
- 841 LDA #$FF; INACTIVE CODE
- 843 STA $CD,X
- 845 PLA
- 847 JSR $D2F3; FREE BUFF
- 849 RTS
- 851 ; ** GET FREE BUFF NUM **
- 853 TYA; Y HOLDS CHNL NUM
- 855 PHA
- 857 LDY #$01
- 859 JSR $D2BA; FIND FREE BUFF
- 861 BPL $D2A3; FREE BUFF FOUND BRANCH
- 863 DEY
- 865 JSR $D2BA
- 867 BPL $D2A3
- 869 JSR $D339; TRY TO FREE A BUFF
- 871 TAX
- 873 BMI $D2B6; NO FREE BUFF BRANCH
- 875 LDA $00,X; CMND
- 877 BMI $D2A3; WAIT TO FINISH TO GET BUFF
- 879 LDA $7F; DRV NUM BUFF
- 881 STA $00,X; CMND BUFF
- 883 STA $025B,X; LAST CMND BY BUFF
- 885 TXA
- 887 ASL
- 889 TAY
- 891 LDA #$02; PTR BEYOND TRK & SEC
- 893 STA $0099,Y; NEXT BYTE IN BUFF PTR
- 895 PLA
- 897 TAY
- 899 TXA
- 901 RTS
- 903 LDX #$07; TEST BIT
- 905 LDA $024F,Y; BUFF ALLOCATION TABLE
- 907 AND $EFE9,X; BIT MASK TABLE
- 909 BEQ $D2C8; FOUND FREE BUFF BRANCH
- 911 DEX
- 913 BPL $D2BC; MORE BUFFS BRANCH
- 915 RTS
- 917 LDA $024F,Y
- 919 EOR $EFE9,X
- 921 STA $024F,Y; FREE BUFF
- 923 TXA; BUFF NUM
- 925 DEY
- 927 BMI $D2D8; FINISHED BRANCH
- 929 CLC
- 931 ADC #$08
- 933 TAX
- 935 RTS
- 937 ; ** FREE INACTIVE BUFF **
- 939 LDX $82; INDEX CURRENT CHNL
- 941 LDA $A7,X; CHNL TABLES
- 943 BMI $D2E9; BIT 7 SET BRANCH
- 945 TXA; HOLDS CHNL NUM
- 947 CLC
- 949 ADC #$07; MAX NUM CHNLS - 1
- 951 TAX; ALTERNATE CHNL
- 953 LDA $A7,X
- 955 BPL $D2D9; ALTERNATE BUFF ACTIVE TOO BRANCH
- 957 CMP #$FF; BUFF FREE CODE
- 959 BEQ $D2D9; BUFF FREE BRANCH
- 961 PHA
- 963 LDA #$FF
- 965 STA $A7,X; BUFF FREE
- 967 PLA
- 969 AND #$0F
- 971 TAY:INY
- 973 LDX #$10; 16 BITS
- 975 ROR $0250; BUFF ALLOCATION
- 977 ROR $024F; " "
- 979 DEY
- 981 BNE $D303; BUFF WANTED BRANCH
- 983 CLC; TURN CARRY OFF FOR BUFF WANTED
- 985 DEX
- 987 BPL $D2F9; MORE BITS TO HANDLE BRANCH
- 989 RTS
- 991 ; ** CLEAR ALL CHNLS EXCEPT CMND CHNL **
- 993 LDA #$0E
- 995 STA $83; SEC ADDR BUFF
- 997 JSR $D227; FREE CHNL THATS DESIGNATED IN SEC ADD
- 999 DEC $83
- 1001 BNE $D30B; MORE CHNLS BRANCH
- 1003 RTS
- 1005 ; ** CLOSE ALL CHNLS EXCEPT CMND **
- 1007 LDA #$0E
- 1009 STA $83; SEC ADDR BUFF
- 1011 LDX $83
- 1013 LDA $022B,X; STATUS CHNL TABLE
- 1015 CMP #$FF
- 1017 BEQ $D334; NO CHNL ASSIGNED BRANCH
- 1019 AND #$3F; MASK OFF HI BITS
- 1021 STA $82; INDEX CURRENT CHNL
- 1023 JSR $DF93; GET ACTIVE BUFF NUM
- 1025 TAX; HOLDS BUFF NUM
- 1027 LDA $025B,X; LAST CMND IN CMND BUFF
- 1029 AND #$01
- 1031 CMP $7F; DRV NUM BUFF
- 1033 BNE $D334; MORE TO CLOSE BRANCH
- 1035 JSR $D227; FREE THIS CHNL
- 1037 DEC $83; SEC ADDR BUFF
- 1039 BPL $D317; MORE TO CLOSE BRANCH
- 1041 RTS
- 1043 ; ** GET INACTIVE BUFF **
- 1045 LDA $6F; TEMP WORK BUFF
- 1047 PHA
- 1049 LDY #$00
- 1051 LDX $FA,Y; LEAST USED BUFF TABLE
- 1053 LDA $A7,X; CHNL TABLES
- 1055 BPL $D348; ACTIVE BUFF BRANCH
- 1057 CMP #$FF
- 1059 BNE $D35E; INACTIVE BUFF BRANCH
- 1061 TXA; HOLDS CHNL NUM
- 1063 CLC
- 1065 ADC #$07; MAX NUM OF CHNLS
- 1067 TAX; POINTS TO ALTERNATE BUFF
- 1069 LDA $A7,X; CHNL TABELS BUFF STATUS
- 1071 BPL $D355; BUFF ACTIVE BRANCH
- 1073 CMP #$FF
- 1075 BNE $D35E; ALTERNATE BUFF ACTIVE BRANCH
- 1077 INY
- 1079 CPY #$05; MAX CHNLS + 1
- 1081 BCC $D33E; MORE CHNLS BRANCH
- 1083 LDX #$FF; CODE FOR FAILED
- 1085 BNE $D37A; EXIT BRANCH
- 1087 STX $6F; TEMP WORK BUFF
- 1089 AND #$3F; MASK OFF HI BITS
- 1091 TAX
- 1093 LDA $00,X; CMND BUFF
- 1095 BMI $D363; CMND IN PROGRESS BRANCH
- 1097 CMP #$02; ERROR CODE
- 1099 BCC $D373; NO ERROR BRANCH
- 1101 LDX $6F
- 1103 CPX #$07
- 1105 BCC $D348; CHK ALTERNATE BUFF BRANCH
- 1107 BCS $D355; CHKED ALTERNATE CHK NEXT BRANCH
- 1109 LDY $6F
- 1111 LDA #$FF
- 1113 STA $00A7,Y; BUFF STATUS INACTIVE
- 1115 PLA; ORIGINAL BUFF NUM
- 1117 STA $6F
- 1119 TXA
- 1121 RTS
- 1123 ; ** FIND FREE CHNL INDEX **
- 1125 LDA #$00
- 1127 LDA #$01
- 1129 BIT $0256; TEST FOR SAME BIT HER AND ACCUMULATOR
- 1131 BNE $D391; FREE CHNL SAME BIT
- 1133 INY
- 1135 ASL
- 1137 BNE $D383; MORE TO TEST BRANCH
- 1139 LDA #$70; CODE NO CHNL ERROR
- 1141 JMP $C1C8; ERROR HANDLING
- 1143 EOR #$FF; FLIP BITS
- 1145 AND $0256; INUSE INDEX
- 1147 STA $0256
- 1149 TYA
- 1151 RTS
- 1153 ; ** GET NEXT BYTE FROM CHNL **
- 1155 JSR $D0EB; FIND READ CHNL
- 1157 JSR $C100; TURN ON DRV LED
- 1159 JSR $D3AA; GET 1 BYTE FROM ANY TYPE FILE
- 1161 LDX $82; CHNL NUM BUFF
- 1163 LDA $023E,X; DATA BYTE BUFF
- 1165 RTS
- 1167 ; ** GET 1 BYTE ANY TYPE FILE **
- 1169 LDX $82; CHNL NUM BUFF
- 1171 JSR $D125; FIND FILE TYPE IF Z FLAG SET RELATIVE
- 1173 BNE $D384; NOT RELATIVE BRANCH
- 1175 JMP $E120; RELATIVE FILE JUMP
- 1177 LDA $83; SEC ADDR BUFF
- 1179 CMP #$0F
- 1181 BEQ $D414; CMND CHNL BRANCH
- 1183 LDA $F2,X; CHNL STATUS
- 1185 AND #$08
- 1187 BNE $D3D3; NOT EOI (END) BRANCH
- 1189 JSR $D125; GET FILE TYPE
- 1191 CMP #$07; RANDOM ACCESS CODE
- 1193 BNE $D3CE; NOT RANDOM ACCESS BRANCH
- 1195 LDA #$89; IF HERE DIRECT ACCESS FILE
- 1197 STA $F2,X; CHNL STATUS
- 1199 JMP $D3DE; GET NEXT CHAR
- 1201 LDA #$00; IF HERE EOI SENT
- 1203 STA $F2;X; CHNL STATUS
- 1205 RTS
- 1207 ; ** TEST FOR LOAD **
- 1209 LDA $83; SEC ADDR BUFF
- 1211 BEQ $D409; LOAD BRANCH
- 1213 JSR $D125; GET FILE TYPE
- 1215 CMP #$04
- 1217 BCC $D400; NOT RANDOM ACCESS BRANCH
- 1219 JSR $D125
- 1221 LDA $99,X; NEXT BYTE IN BUFF PTR
- 1223 CMP $0244,Y; CHNL NEXT BYTE PTR
- 1225 BNE $D3EC; NOT LAST CHAR BRANCH
- 1227 LDA #$00
- 1229 STA $99,X; SET PTR TO 0
- 1231 INC $99,X
- 1233 LDA ($99,X)
- 1235 STA $023E,Y; DATA BYTE
- 1237 LDA $99,X
- 1239 CMP $0244,Y
- 1241 BNE $D3FF; NOT LAST CHAR BRANCH
- 1243 LDA $81; SECT NUM BUFF
- 1245 STA $00F2,Y; CHNL STATUS (EOI)
- 1247 RTS
- 1249 JSR $D156; READ NEXT BYTE
- 1251 LDX $82; INDEX CURRENT CHNL
- 1253 STA $023E,X; DATA BYTE
- 1255 RTS
- 1257 LDA $0254; DIRECTORY LIST FLAG
- 1259 BEQ $D400; NOT DIRECTORY LIST BRANCH
- 1261 JSR $ED67; GET DIRECTORY
- 1263 JMP $D403
- 1265 ; ** GET BYTE FROM ERROR CHNL **
- 1267 JSR $D4E8:CMP #$D4; GET ACTIVE BUFF PTR
- 1269 BNE $D433; NOT PTR TO ERROR BUFF BRANCH
- 1271 LDA $95; DIRECTORY PTR
- 1273 CMP #$02
- 1275 BNE $D433; NOT HIGH BYTE ERROR BUFF BRANCH
- 1277 LDA #$0D; CODE FOR RETURN
- 1279 STA $85; TEMP DATA
- 1281 JSR $C123; TURN OFF ERROR LED
- 1283 LDA #$00
- 1285 JSR $E6C1; TRANS ERROR MES TO ERROR BUFF
- 1287 DEC $A5; NEXT BYTE ERROR BUFF PTR
- 1289 LDA #$80; CODE EOI
- 1291 BNE $D445; FORCED BRANCH
- 1293 JSR $D137; READ BYTE ERROR MESSAGE
- 1295 STA $85; TEMP DATA
- 1297 BNE $D443
- 1299 LDA #$D4; LO BYTE ERORR BUFF -1
- 1301 JSR $D4C8; SET PTRS
- 1303 LDA #$02; HI BYTE ERROR BUFF
- 1305 STA $9A,X; NEXT BYTE IN BUFF PTR
- 1307 LDA #$88; CODE READY TO TALK
- 1309 STA $F7; CHNL STATUS
- 1311 LDA $85; TEMP DATA
- 1313 STA $0243; LAST BYTE READ BUFF
- 1315 RTS
- 1317 ; ** READ NEXT TRK & SECT LINK **
- 1319 ; IF 1ST BYTE 0 SET END OF FILE (EOF)
- 1321 JSR $DF93; GET ACTIVE BUFF NUM
- 1323 ASL
- 1325 TAX
- 1327 LDA #$00
- 1329 STA $99,X; NEXT BYTE IN BUFF PTR
- 1331 LDA ($99,X)
- 1333 BEQ $D45F; NO BORE BLKS BRANCH
- 1335 DEC $99,X
- 1337 JMP $D156; FORCE READ NEXT SECT $99,X = #$FF
- 1339 RTS
- 1341 ; ** DIRECT BLK READ **
- 1343 LDA #$80; READ CMND
- 1345 BNE $D466; FORCED BRANCH
- 1347 ; ** DIRECT BLK WRITE **
- 1349 LDA #$90; WRITE CMND
- 1351 ORA $7F; DRV NUM BUFF
- 1353 STA $024D; TEMP CMND BUFF
- 1355 LDA $F9; CURRENT CMND BUFF
- 1357 JSR $D6D3; SET HEADER IMAGE
- 1359 LDX $F9
- 1361 JMP $D593; ECECUTE CMND (WRITE)
- 1363 ; ** OPEN INTERNAL READ CHNL PROGRAM FILES **
- 1365 LDA #$01; CODE FOR PROGRAM TYPE FILE
- 1367 ; ** OPEN INTERNAL READ CHNL ANY TYPE FILE **
- 1369 STA $024A; ACTIVE FILE TYPE BUFF
- 1371 LDA #$11
- 1373 STA $83; SEC ADDR BUFF
- 1375 JSR $DC46; OPEN READ CHNL
- 1377 LDA #$02; SETS PTR PAST TRK & SEC LINK
- 1379 JMP $D4C8; SET PTRS
- 1381 ; ** OPEN INTERNAL WRITE CHNL **
- 1383 LDA #$12
- 1385 STA $83; SEC ADDR BUFF
- 1387 JMP $DCDA; OPEN WRITE CHNL
- 1389 ; ** ALLOCATE NEXT DIRECTORY BLK **
- 1391 JSR $DE3B; SET TRK & SEC VALUES FOR HEADER
- 1393 LDA #$01
- 1395 STA $6F; TEMP WORK BUFF
- 1397 LDA $69; SECT INCREMENT USED FOR SEQUENTIAL FILES
- 1399 PHA
- 1401 LDA #$03; CODE TO INCREMENT DIRECTORY TRK
- 1403 STA $69
- 1405 JSR $F12D; FIND NEXT AVAILABLE TRK & SEC
- 1407 PLA
- 1409 STA $69
- 1411 LDA #$00
- 1413 JSR $D4C8; SET PTR TO 1ST BYTE ACTIVE BUFF
- 1415 LDA $80; TRK NUM BUFF
- 1417 JSR $CFF1; STORE TRK LINK IN BUFF
- 1419 LDA $81; SECT NUM BUFF
- 1421 JSR $CFF1; STORE SECT LINK IN BUFF
- 1423 JSR $D0C7; WRITE BUFF TO DISK
- 1425 JSR $D599; WAIT FOR ROUT TO FINISH
- 1427 LDA #$00
- 1429 JSR $D4C8; SET PTR TO 1ST BYTE IN BUFF
- 1431 JSR $CFF1; FILL BUFF WITH #$00
- 1433 BNE $D4BB; FILL BUFF BRANCH
- 1435 JSR $CFF1; SET TRK LINK TO #$00
- 1437 LDA #$FF
- 1439 JMP $CFF1; SECT LINK TO #$FF
- 1441 ; ** SET PTR IN ACTIVE DATA BUFF **
- 1443 STA $6F; TEMP WORK HOLDS NEW PTR
- 1445 JSR $DF93; GET ACTIVE BUFF NUM
- 1447 ASL
- 1449 TAX
- 1451 LDA $9A,X; NEXT BYTE IN BUFF PTR
- 1453 STA $95; DIRECTORY BUFF PTR
- 1455 LDA $6F
- 1457 STA $99,X; NEXT BYTE IN BUFF PTR
- 1459 STA $94; DIRECTORY BUFF PTR
- 1461 RTS
- 1463 ; ** FREE BOTH INTERNAL CHNLS SEC ADD #$11 & #$12 **
- 1465 LDA #$11
- 1467 STA $83; SEC ADDR BUFF
- 1469 JSR $D227; FREE INTERNAL READ CHNL
- 1471 LDA #$12
- 1473 STA $83
- 1475 JMP $D227; FREE INTERNAL WRITE CHNL
- 1477 ; ** GET ACTIVE BUFF PTR **
- 1479 JSR $DF93; GET ACTIVE BUFF NUM
- 1481 ASL
- 1483 TAX
- 1485 LDA $9A,X; NEXT BYTE IN BUFF PTR
- 1487 STA $95; DIRECTORY BUFF PTR
- 1489 LDA $99,X; NEXT BYTE IN BUFF PTR
- 1491 STA $94; DIRECTORY BUFF PTR
- 1493 RTS
- 1495 ; ** DIRECT READ ONE BYTE **
- 1497 ; A HOLDS POSISTION OF BYTE IN BUFF
- 1499 STA $71; TEMP STORAGE
- 1501 JSR $DF93; GET ACTIVE BUFF NUM
- 1503 TAX; HOLDS ACTIVE BUFF
- 1505 LDA $FEE0,X; HI BYTE PTR DATA BUFF
- 1507 STA $72; TEMP STORAGE
- 1509 LDY #$00
- 1511 LDA ($71),Y; BYTE TO READ
- 1513 RTS
- 1515 ; ** SET UP CMND USING LAST DRV NUM **
- 1517 LDA $025B,X; LAST CMND CODE
- 1519 AND #$01; LEAVES DRV NUM BITS
- 1521 ORA $024D; TEMP CMND CODE BUFF
- 1523 ; ** SET UP NEW CMND **
- 1525 PHA; SAVE NEW CMND
- 1527 STX $F9; NEW CMND BUFF
- 1529 TXA; BUFF NUM
- 1531 ASL
- 1533 TAX
- 1535 LDA $07,X; SECT NUM
- 1537 STA $024D; TEMP CMND BUFF
- 1539 LDA $06,X; TRK NUM
- 1541 BEQ $D54A; ILLEGAL TRK BRANCH
- 1543 CMP $FED7; #$24 HIGHEST TRK + 1
- 1545 BCS $D54A; ILLEGAL TRK BRANCH
- 1547 TAX; TRK NUM
- 1549 PLA; CMND
- 1551 PHA; INSURE CMND NOT LOST
- 1553 AND #$F0; MASK DRV BITS
- 1555 CMP #$90; WRITE CMND
- 1557 BNE $D57A; NOT WRITE BRANCH
- 1559 PLA
- 1561 PHA
- 1563 LSR; FIND DRV NUM BIT
- 1565 BCS $D535; DRV # 1 BRANCH
- 1567 LDA $0101; DOS VERSION
- 1569 BCC $D538; DRV # 0 BRANCH
- 1571 LDA $0102; DOS VERSION
- 1573 BEQ $D53F; DOS VERSION 0 (OK) BRANCH
- 1575 CMP $FED5; DOS NUM #$41 (65) (A)
- 1577 BNE $D572; BAD DOS VERSION BRANCH
- 1579 TXA; HOLDS TRK NUM
- 1581 JSR $F24B; CALCULATE SECTS
- 1583 CMP $024D; HOLDS SECT FROM CMND
- 1585 BEQ $D54A; LEGAL SECT BRANCH
- 1587 BCS $D57A; ILLEGAL TRK OR SEC BRANCH
- 1589 JSR $D552; STORE TRK & SEC
- 1591 LDA #$66; CODE BAD TRK & SEC
- 1593 JMP $E645; ERROR HANDLING
- 1595 ; ** SET TRK & SECT VALUES **
- 1597 LDA $F9; HOLDS BUFF NUM
- 1599 ASL
- 1601 TAX
- 1603 LDA $06,X; TRK NUM
- 1605 STA $80; TRK NUM BUFF
- 1607 LDA $07,X; SECT NUM
- 1609 STA $81; SECT NUM BUFF
- 1611 RTS
- 1613 ; ** CHK BAD TRK & SEC VALUES **
- 1615 LDA $80; TRACCK NUM BUFF
- 1617 BEQ $D54D; ILLEGAL TRK BRANCH
- 1619 CMP $FED7; #$24 HIGHEST TRK + 1
- 1621 BCS $D54D; ILLEGAL TRK BRANCH
- 1623 JSR $F24B; CALCULATE SECTS
- 1625 CMP $81; SECT NUM BUFF
- 1627 BEQ $D54D; ILLEGAL # OF SECTS BRANCH
- 1629 BCC $D54D
- 1631 RTS
- 1633 ; ** BAD DOS VERSION **
- 1635 JSR $D552; STORE TRK & SEC VALUES
- 1637 LDA #$73; CODE BAD DOS
- 1639 JMP $E645; ERROR HANDLING
- 1641 ; ** FINISH CMND EXECD **
- 1643 LDX $F9; BUFF USED FOR CMND
- 1645 PLA; SAVE CMND
- 1647 STA $024D; TEMP CMND BUFF
- 1649 STA $00,X; EXEC CMND
- 1651 STA $025B,X; LAST CMND BUFF
- 1653 RTS
- 1655 ; ** EXEC READ CMND **
- 1657 LDA #$80
- 1659 BNE $D58C; FORCED BRANCH
- 1661 ; ** EXEC WRITE CMND **
- 1663 LDA #$90
- 1665 ORA $7F; DRV NUM BUFF
- 1667 LDX $F9; HOLDS BUFF NUM
- 1669 STA $024D; TEMP CMND BUFF
- 1671 LDA $024D
- 1673 JSR $D50E; EXEC CMND
- 1675 ; ** WAIT FOR ROUT TO FINISH **
- 1677 JSR $D5A6; CHK IF FINISHED
- 1679 BCS $D599; NOT FINISHED BRANCH
- 1681 PHA; SAVE ERROR CODE
- 1683 LDA #$00; CODE CMND COMPLETE
- 1685 STA $0298; CMND COMPLETE FLAG
- 1687 PLA
- 1689 RTS
- 1691 ; ** CHK CMND FINISHED **
- 1693 LDA $00,X; CMND CODE
- 1695 BMI $D5A8; NOT FINISHED BRANCH
- 1697 CMP #$02; ERROR CODE
- 1699 BCC $D5C2; NO ERROR BRANCH
- 1701 CMP #$08; WRITE PROTECT ERROR
- 1703 BEQ $D5BA; WRITE ERROR BRANCH
- 1705 CMP #$0B; I.D. MISMATCH CODE
- 1707 BEQ $D5BA
- 1709 CMP $0F; NON FATAL ERROR CODE
- 1711 BNE $D5C6; TRY AGAIN BRANCH
- 1713 BIT $0298; TEST BIT 7 CMND COMPLETE
- 1715 BMI $D5C2; IF SET DISK INITD
- 1717 ; IF SET 1ST ATTEMPT AT CMND SET CARRY CLEAR (OK)
- 1719 JMP $D63F; TRY TO RECOVER BRANCH
- 1721 CLC
- 1723 RTS
- 1725 SEC; CARRY SET FAILURE
- 1727 RTS
- 1729 TYA; HOLDS DRV NUM
- 1731 PHA
- 1733 LDA $7F; DRV NUM BUFF
- 1735 PHA
- 1737 LDA $025B,X; LAST CMND BUFF
- 1739 AND #$01; MASK NON DRV BITS
- 1741 STA $7F
- 1743 TAY
- 1745 LDA $FECA,Y; #$08 LED MASK DRV # 0
- 1747 STA $026D; ERROR LED BUFF (FLASH)
- 1749 JSR $D6A6; LAST RECOVERY ATTEMPT
- 1751 CMP #$02; ERROR CODE
- 1753 BCS $D5E3; RECOVERY WORKED BRANCH
- 1755 JMP $D66D; RECOVERY FAILED JUMP
- 1757 LDA $025B,X; ORIGINAL CMND
- 1759 AND #$F0; MASK DRV BITS
- 1761 PHA
- 1763 CMP #$90; WRITE CODE
- 1765 BNE $D5F4; NOT WRITE BRANCH
- 1767 LDA $7F; DRV NUM BUFF
- 1769 ORA #$B8; CODE SEEK SECT
- 1771 STA $025B,X
- 1773 BIT $6A; BIT 6 = HEAD ON TRK
- 1775 BVS $D631; HEAD ON TRK BRANCH
- 1777 .FILE DISK ROM 4
-