home *** CD-ROM | disk | FTP | other *** search
- 1 ; ** LISTEN ROUT **
- 3 SEI
- 5 JSR $D107; FIND WRITE CHNL
- 7 BCS $EA39; NO WRITE CHNL BRANCH
- 9 LDA $F2,X; CHNL STATUS BUFF
- 11 ROR
- 13 BCS $EA44; WRITE CHNL INACTIVE
- 15 LDA $84; ORIGINAL SEC ADDR
- 17 AND #$F0
- 19 CMP #$F0
- 21 BEQ $EA44; OPEN CMND BRANCH
- 23 JMP $EA4E; NOT ACTIVE CHNL JUMP
- 25 JSR $E9C9; GET A BYTE
- 27 CLI
- 29 JSR $CFB77; FILE DATA BYTE
- 31 JMP $EA2E; (null) BACK TO LISTEN
- 33 LDA #$00
- 35 STA $1800; I/O RELEASE ALL BUS LINES
- 37 JMP $EBE7; IDLE MODE WAIT FOR SOMETHING
- 39 JMP $E85B; ATTN REQUEST FROM 64
- 41 LDA $7D; ATTN MODE FLG
- 43 BEQ $EA63; NOT ATTN MODE BRANCH
- 45 LDA $1800; I/O
- 47 BPL $EA6B; ATTN SIGNAL (null)NE
- 49 RTS
- 51 LDA $1800
- 53 BPL $EA62; ATTN SIGNAL (null)NE
- 55 JMP $E85B; ATTN REQUEST FROM 64
- 57 JMP $E8D7; CARRY OUT CMND
- 59 ; ** FLASH ERROR LED **
- 61 LDX #$00
- 63 BIT $6FA6; SKIP 2 BYTES
- 65 ;$EA71 LDX $6F HOLDS ERROR NUM
- 67 TXS; USE STACK FOR STORAGE
- 69 TSX
- 71 LDA #$08; LED MASK
- 73 ORA $1C00; INTERNAL I/O TURN ON LED
- 75 ; ** BIT MAP $1C00 INTERNAL I/O **
- 77 ; BIT 0 & 1 STEP HEAD
- 79 ; BIT 2 MOTOR ON OFF 1 = ON
- 81 ; BIT 3 TURN ON LED 1 = ON
- 83 ; BIT 4 WRITE PROTECT 1 = ON
- 85 ; BIT 5 & 6 DENSITY (SPEED)
- 87 ; BIT 7 SYNC DETECT
- 89 JMP $FEEA
- 91 TYA
- 93 CLC
- 95 ADC #$01
- 97 BNE $EA7F; LOOP TIMER
- 99 DEY; HI BYTE TIMER
- 101 BNE $EA7E; LOOP TIMER
- 103 LDA $1C00; INTERNAL I/O
- 105 AND #$F7; LED MASK
- 107 STA $1C00; TURN OFF LED
- 109 TYA
- 111 CLC
- 113 ADC #$01
- 115 BNE $EA90; LOOP TIMER
- 117 DEY; HI BYTE TIMER
- 119 BNE $EA8F; LOOP TIMER
- 121 DEX
- 123 BPL $EA75; FLASH LED AGAIN
- 125 CPX #$FC; TIME BETWEEN FLASHES
- 127 BNE $EA8E
- 129 BEQ $EA74; REPEAT
- 131 ; ** INITIALIZE DSK MEMORY **
- 133 SEI
- 135 CLD
- 137 LDX #$FF
- 139 JMP $FF10; SET DATA DIRECTION REG
- 141 INX; NOT USED
- 143 ; ** FILL ZERO PAGE ASCENDING PATTERN **
- 145 LDY #$00
- 147 LDX #$00
- 149 TXA
- 151 STA $00,X
- 153 INX
- 155 BNE $EAAC; MORE TO DO
- 157 TXA; HOLDS 0
- 159 CMP $00,X
- 161 BNE $EA6E; ERROR BRANC
- 163 INC $00,X
- 165 INY
- 167 BNE $EAB7
- 169 CMP $00,X
- 171 BNE $EA6E; ERROR BRANCH
- 173 STY $00,X
- 175 LDA $00,X
- 177 BNE $EA6E
- 179 INX
- 181 BNE $EAB2; MORE TO CHECK
- 183 ; ** TEST 2 64K BIT ROMS **
- 185 INC $6F:STX $76; SET NEXT ERROR NUM
- 187 ; #$01 = E/F #$02 = C/D ROM
- 189 LDA #$00
- 191 STA $75; LO BYTE PAGE NUM
- 193 TAY
- 195 LDX #$20; 32 PAGES
- 197 CLC
- 199 DEC $76
- 201 ADC ($75),Y
- 203 INY
- 205 BNE $EAD7; ANOTHER BYTE ON PAGE
- 207 DEX; PAGE NUM
- 209 BNE $EAD5; ANOTHER PAGE
- 211 ADC #$00; ADD LAST CARRY
- 213 TAX; HOLDS CHECKSUM
- 215 CMP $76; HI BYTE PAGE COUNT
- 217 BNE $EB1F; ERROR HANDLING
- 219 CPX #$C0
- 221 BEQ $EAC9; DONE
- 223 ; ** TEST DSK RAM **
- 225 LDA #$01; PAGE NUM
- 227 STA $76
- 229 INC $6F; ERROR NUM #$03 = RAM
- 231 LDX #$07; NUM OF PAGES $0000 T0 $0700
- 233 TYA
- 235 CLC
- 237 ADC $76; HI BYTE PAGE NUM
- 239 STA ($75),Y
- 241 INY
- 243 BNE $EAF2; FILL RAM PAGE
- 245 INC $76
- 247 DEX
- 249 BNE $EAF2
- 251 LDX #$07; NUM OF PAGES
- 253 DEC $76
- 255 DEY
- 257 TYA
- 259 CLC
- 261 ADC $76
- 263 CMP ($75),Y
- 265 BNE $EB1F; ERROR HANDLING
- 267 EOR #$FF; FLIP BITS COMPLIMENT
- 269 STA ($75),Y; RAM
- 271 EOR ($75),Y
- 273 STA ($75),Y
- 275 BNE $EB1F
- 277 TYA
- 279 BNE $EB04; MORE THIS PAGE
- 281 DEX
- 283 BNE $EB02; MORE PAGES
- 285 BEQ $EB22
- 287 JMP $FA71; REPORT THE ERROR
- 289 LDX #$45
- 291 TXS; RESET (CLEAR) THE STACK
- 293 LDA $1C00; INTERNAL I/O
- 295 AND #$F7; LED MASK
- 297 STA $1C00; TURN OFF LED
- 299 LDA #$01; INTERRUPT ON NEG EDGE
- 301 STA $180C; PERIPHIAL CONT REG
- 303 LDA #$82; 10000010
- 305 STA $180D; INTERRUPT FLG REG
- 307 STA $180E; INTERRUPT ENABLE REG
- 309 ; ** GET DEVICE NUM FROM BITS 5 & 6 $1800 **
- 311 LDA $1800; I/O
- 313 AND #$60
- 315 ASL
- 317 ROL:ROL:ROL
- 319 ORA #$48; TALK ADDR
- 321 STA $78; TALK ADDR BUFF
- 323 EOR #$60; LISTEN ADDR
- 325 STA $77; LISTEN ADDR BUFF
- 327 ; ** INITIALIZE BUFF PTR TABLE **
- 329 LDX #$00:LDY #$00:LDA #$00
- 331 STA $99,X; BUFF TABLE
- 333 INX
- 335 LDA $FEE0,Y; HI BYTE DATA BUFFS
- 337 STA $99,X
- 339 INX:INY
- 341 CPY #$05
- 343 BNE $EB4F; MORE
- 345 LDA #$00; LO BYTE
- 347 STA $99,X
- 349 INX
- 351 LDA #$02
- 353 STA $99,X
- 355 INX
- 357 LDA #$D5
- 359 STA $99,X
- 361 INX
- 363 LDA #$02
- 365 STA $99,X
- 367 LDA #$FF; INACTIVE CODE
- 369 LDX #$12; MAXIMUM SEC ADDR
- 371 STA $022B,X; STATUS BUFF EACH CHNL
- 373 DEX
- 375 BPL $EB76; SET ALL BUFFS INACTIVE
- 377 LDX #$05; MAXIMUM CHNLS
- 379 STA $A7,X; TABLE CHNLS EACH BUFF
- 381 STA $AE,X; " " " "
- 383 STA $CD,X; " " " "
- 385 DEX
- 387 BPL $EB7E; MORE
- 389 LDA #$05
- 391 STA $AB; BUFF COUNT
- 393 LDA #$06; BUFF COUNT + 1
- 395 STA $AC
- 397 LDA #$FF
- 399 STA $AD
- 401 STA $B4
- 403 LDA #$05; ERROR CHNL
- 405 STA $023B
- 407 LDA #$84
- 409 STA $023A
- 411 LDA #$0F
- 413 STA $0256
- 415 LDA #$01; CODE READY TO LISTEN
- 417 STA $F6
- 419 LDA #$88; CODE READY TO TALK
- 421 STA $F7
- 423 LDA #$E0
- 425 STA $024F
- 427 LDA #$FF
- 429 STA $0250
- 431 LDA #$01
- 433 STA $1C; WRITE PROTECT FLG
- 435 STA $1D; " " "
- 437 JSR $CB63; INITIALIZE USER JUMP TABLE
- 439 JSR $CEFA; INITIALIZE LEAST USED TABLE
- 441 JSR $F295; INITIALIZE DSK [154]ROLLER
- 443 LDA #$22
- 445 STA $65; LO BYTE NMI ROUTIME
- 447 LDA #$EB
- 449 STA $66; HI " " "
- 451 LDA #$0A; NORMAL SECT INCREMENT
- 453 STA $69
- 455 LDA #$05; NORMAL RECOVERY COUNT
- 457 STA $6A
- 459 LDA #$73; ERROR CODE POWER ON MESSAGE
- 461 JSR $E6C1
- 463 LDA #$00
- 465 STA $1800; RELEASE ALL LINES
- 467 LDA #$1A
- 469 STA $1802; DATA DIRECTION REG
- 471 JSR $E780; CHECK BOOT SYSTEM ROUT
- 473 ; ** IDLE LOOP (WAIT FOR A CMND) **
- 475 CLI
- 477 LDA $1800; I/O
- 479 AND #$E5; SET CLOCK DATA ATTN LINES
- 481 STA $1800
- 483 LDA $0255; CMND WAITING FLG
- 485 BEQ $EBFF; NO CMND
- 487 LDA #$00
- 489 STA $0255; RESET FLG
- 491 STA $67; NMI FLG (NO NMI)
- 493 JSR $C146; PARSE & EXECUTE CMND
- 495 CLI
- 497 LDA $7C; ATTENTION PENDING FLG
- 499 BEQ $EC07; NO PENDING
- 501 JMP $E85B; SERVICE ATTN REQUEST
- 503 CLI
- 505 LDA #$0E; MAXIMUM SEC ADDR
- 507 STA $72; TEMP WORK
- 509 LDA #$00
- 511 STA $6F; TEMP WORK
- 513 STA $70; " "
- 515 LDX $72; SEC ADD CTR
- 517 LDA $02BB,X; CHNL STATUS BUFF
- 519 CMP #$FF
- 521 BEQ $EC2B; INACTIVE BUFF
- 523 AND #$3F
- 525 STA $82; INDEX CURRENT CHNL
- 527 JSR $DF93; GET ACTIVE BUFF NUM
- 529 TAX
- 531 LDA $025B,X; LAST CMND BY BUFF
- 533 AND #$01
- 535 TAX
- 537 INC $6F,X; NUM OF ACTIVE FILES
- 539 DEC $72; SEC ADDR COUNT
- 541 BPL $EC12; MORE SEC ADD TO CHECK
- 543 LDY #$04; NUM OF BUFFS - 1
- 545 LDA $0000,Y; CURRENT CMND NUM
- 547 BPL $EC3B; NO CMND IN PROGRESS
- 549 AND #$01; MASK OFF NON DRIVE BITS
- 551 TAX
- 553 INC $6F,X
- 555 DEY
- 557 BPL $EC31; MORE BUFFS TO CHECK
- 559 SEI
- 561 LDA $1C00; INTERNAL I/O
- 563 AND #$F7; LED MASK
- 565 PHA
- 567 LDA $7F; DRIVE NUM
- 569 STA $86; TEMP RESULT
- 571 LDA #$00
- 573 STA $7F
- 575 LDA $6F; ACTIVE FILE COUNT
- 577 BEQ $EC5C; NOTHING TO DO (null) IDLE
- 579 LDA $1C; WRITE PROTECT FLG DRV 0
- 581 BEQ $EC58
- 583 JSR $D313; CLOSE ALL FILES
- 585 PLA; LED DATA BYTE
- 587 ORA #$08; TURN ON LED DRIVE 0
- 589 PHA
- 591 INC $7F; DRIVE NUM BUFF
- 593 LDA $70; ACTIVE FILE COUNT
- 595 BEQ $EC6D; NOTHING TO DO
- 597 LDA $1D; WRITE PROTECT FLG DRV 1
- 599 BEQ $EC69
- 601 JSR $D313; CLOSE ALL FILES
- 603 PLA; LEAD DATA BYTE
- 605 ORA #$00; LED MASK DRV 1
- 607 PHA
- 609 LDA $86; ORIGINAL DRIVE NUM
- 611 STA $7F; DRIVE NUM BUFF
- 613 PLA
- 615 LDX $026C; ERROR WORD BUFF
- 617 BEQ $EC98; LED NOT FLASHING BRANCH
- 619 ; ** ERROR LED FLASHING **
- 621 LDA $1C00; DSK CONTROLLER
- 623 CPX #$80
- 625 BNE $EC81; SAME ERROE STILL IN $026C
- 627 JMP $EC8B; DIFFERENT ERROR NUM
- 629 LDX $1805; TIMER # 1 HI CTR
- 631 BMI $EC98; STILL TIMING
- 633 LDX #$A0; 8 MILLI SECONDS
- 635 STX $1805
- 637 DEC $O26C; ERROR WORD
- 639 BNE $EC98
- 641 EOR $026D; TOGGLE THE LED
- 643 LDX #$10
- 645 STX $026C; START NEW TIMING CYCLE
- 647 STA $1C00; DSK CONTROLLER
- 649 JMP $EBFF; TOP OF THE LOOP
- 651 ; ** LOAD THE DIRECTORY **
- 653 LDA #$00
- 655 STA $83; SEC ADDR BUFF
- 657 LDA #$01
- 659 JSR $D1E2; ALLOCATE CHNL & BUFF
- 661 LDA #$00
- 663 JSR $D4C8; SET BUFF PTR START OF BUFF
- 665 LDX $82; INDEX CURRENT CHNL
- 667 LDA #$00
- 669 STA $0244,X; LST CHAR IN BUFF PTR
- 671 JSR $DF93; GET ACTIVE BUFF NUM
- 673 TAX; HOLDS BUFF NUM
- 675 LDA $7F; DRIVE NUM BUFF
- 677 STA $025B,X; LAST CMND BY BUFF
- 679 LDA #$01
- 681 JSR $CFF1; PUT LO BYTE LOAD ADD IN BUFF
- 683 LDA #$04
- 685 JSR $CFF1; PUT HI " " " "
- 687 LDA #$01
- 689 JSR $CFF1; PUTS DUMMY LINK $0101 INTO BUFF
- 691 JSR $CFF1; PUT IN BUFF ALSO
- 693 LDA $0272; HOLDS LO BYTE BLOCK CT USED 1ST LINE #
- 695 JSR $CFF1
- 697 LDA #$00
- 699 JSR $CFF1; HI BYTE LINE NUM
- 701 JSR $ED59; MOVE DSK NAME TO BUFF
- 703 JSR $DF93; GETA ACTIVE BUFF NUM
- 705 ASL
- 707 TAX
- 709 DEC $99,X; BUFF TAB
- 711 DEC $99,X
- 713 LDA #$00
- 715 JSR $CFF1; END OF PROG NULL BYTE
- 717 LDA #$01
- 719 JSR $CFF1; DUMMY PROG LINE LINK $0101
- 721 JSR $CFF1
- 723 JSR $C6CE; GET ACTIVE BUFF & FILENM
- 725 BCC $ED23; LAST ENRTY
- 727 LDA $0272; BLK CT USED FOR LO BYTE LINE #
- 729 JSR $CFF1
- 731 LDA $0273; HI BYTE BLK CY HI BYTE LINE #
- 733 JSR $CFF1
- 735 JSR $ED59; MOVE FILENM/TYPE INTO BUFF
- 737 LDA #$00
- 739 JSR $CFF1; END OF PROG LINE NULL BYTE
- 741 BNE $ECEA; BUFF NOT FULL
- 743 JSR $DF93; GET ACTIVE BUFF NUM
- 745 ASL
- 747 TAX
- 749 LDA #$00
- 751 STA $99,X; LO BYTE PTR BUFF TAB
- 753 LDA #$88; CODE READY TO TALK
- 755 LDY $82; INDEX CURRENT CHNL
- 757 STA $0254; DIRECTORY LISTING FULL FLG
- 759 STA $00F2,Y; CHNL STATUS BUFF
- 761 LDA $85; TEMP DATA BYTE
- 763 RTS
- 765 ; ** END DIRECTORY LOAD **
- 767 LDA $0272; LO BYTE BLOCK COUNT
- 769 JSR $CFF1; PUT IN BUFF LO BYTE LINE #
- 771 LDA $0273; HI BYTE
- 773 JSR $CFF1
- 775 JSR $ED59; GET FILENM/TYPE
- 777 JSR $DF93; GET ACTIVE BUFF NUM
- 779 ASL
- 781 TAX
- 783 DEC $99,X; LO BYTE PTR BUFF TAB
- 785 DEC $99,X
- 787 LDA #$00; PUT 3 0'S END OF PROGRAM
- 789 JSR $CFF1
- 791 JSR $CFF1
- 793 JSR $CFF1
- 795 JSR $DF93; GET ACTIVE BUFF NUM
- 797 ASL
- 799 TAY
- 801 LDA $0099,Y; LO BYTE PTR BUFF TAB
- 803 LDX $82; INDEX CURRENT CHNL
- 805 STA $0244,X; PTR LAST NON 0 BYTE
- 807 DEC $0244,X; NOW POINTS CORRECTLY
- 809 JMP $ED0D; SET CHNL STATUS/FLGS
- 811 ; ** TRANSFER FILENM TO LISTING BUFF **
- 813 LDY #$00
- 815 LDA $02B1,Y; DIRECTORY BUFF
- 817 JSR $CFF1; PUT IN BUFF
- 819 INY
- 821 CPY #$1B
- 823 BNE $ED5B; MORE TO MOVE
- 825 RTS
- 827 ; ** GET CHARACHTER FOR DIRECTORY LOAD **
- 829 JSR $D137; GET BYTE FROM DATA BUFF
- 831 BEQ $ED6D; END OF FILE
- 833 RTS
- 835 STA $85; TEMP FOR DATA BYTE
- 837 LDY $82; INDEX CURRENT CHNL
- 839 LDA $0244,Y; LO BYTE PTR DIR BUFF
- 841 BEQ $ED7E; BUFF FULL
- 843 LDA #$80; CODE EOF
- 845 STA $00F2,Y; CHNL STATUS BUFF
- 847 LDA $85
- 849 RTS
- 851 PHA; SAVE NULL BYTE
- 853 JSR $ECEA; CREATE FALSE LISTING/BUFF
- 855 PLA
- 857 RTS
- 859 ; ** VALIDATE THE DSK **
- 861 JSR $C1D1; PARSE CMND GET DRIVE #
- 863 JSR $D042; INITIALIZE DRIVE
- 865 LDA #$40; CODE BAM DIRTY (CHANGED)
- 867 STA $02F9; DONT WRITE BAM FLG
- 869 JSR $EEB7; PUT NEW EMPTY BAM IN RAM
- 871 LDA #$00; CODE SEARCH VALID DIR ENTRY
- 873 STA $0292; INDEX 1ST AVAIL ENTRY
- 875 JSR $C5AC; SEARCH DIR VALID ENTRY
- 877 BNE $EDD9; ENTRY FOUND
- 879 LDA #$00; NO MORE ENTRIES
- 881 STA $81; SECT NUM BUFF
- 883 LDA $FE85; #$12 DIRECT TRACK
- 885 STA $80; TRACK NUM BUFF
- 887 JSR $EDE5; WRITE BAM USED DIR SECTS
- 889 LDA #$00; CODE BAM CLEAN
- 891 STA $02F9; DONT WRITE BAM FLG
- 893 JSR $EEFF; WRITE BAM TO DSK
- 895 JMP $C194; TERM ROUT
- 897 ; ** PUT DIRECTORY ENTRY IN BAM **
- 899 INY; PTR ENTRY BUFF
- 901 LDA ($94),Y; TRACK LINK
- 903 PHA
- 905 INY
- 907 LDA ($94),Y; SECT LINK
- 909 PHA
- 911 LDY #$13; PTR SIDE SEC TRACK LINK
- 913 LDA ($94),Y
- 915 BEQ $EDCB; NOT RELATIVE FILE
- 917 STA $80; TRACK NUM BUFF
- 919 INY:LDA ($94),Y; PTR ENTRY BUFF
- 921 STA $81; SIDE SEC SECT LINK
- 923 JSR $EDE5; MARK SIDE SEC USED IN BAM
- 925 PLA
- 927 STA $81; SECT NUM BUFF
- 929 PLA
- 931 STA $80; TRACK NUM BUFF
- 933 JSR $EDE5; MARK MAIN FILE SEC USED IN BAM
- 935 JSR $C604; SEARCH NEXT VALID ENTRY
- 937 BEQ $ED9C; NO MORE ENTRIES
- 939 LDY #$00
- 941 LDA ($94),Y; FILE TYPE
- 943 BMI $EDB3; PROPERLY CLOSED FILE
- 945 JSR $C8B6; DELETE FILE NOT CLOSED
- 947 JMP $EDD4; FIND NEXT ENTRY
- 949 ; ** TRACE FILE LINKS WRITE TO BAM **
- 951 JSR $D55F; CHECK IF TRK & SEC (null)OD
- 953 JSR $EF90; MARK TRK & SEC USED IN BAM
- 955 JSR $D475; OPEN INTERNAL READ CHNL
- 957 LDA #$00
- 959 JSR $D4C8; SET PTRS 1ST BYTE IN BUFF
- 961 JSR $D137; GET BYTE (TRACK LINK)
- 963 STA $80; TRACK NUM BUFF
- 965 JSR $D137; GET BYTE (SECT LINK)
- 967 STA $81; SECT NUM BUFF
- 969 LDA #$80
- 971 BNE $EE04; MARK SECT USED
- 973 JMP $D227; LAST BLOCK FREE CHNL
- 975 JSR $EF90; MARK SECT USED IN BAM
- 977 JSR $D44D; READ NEXT BLOCK OF FILE
- 979 JMP $EDEE; CONTINUE
- 981 ; ** FORMAT A DSK (NEW) **
- 983 JSR $C312; SET UP DRIVE & TABLE PTRS
- 985 LDA $E2; DEFAULT FLG (DRIVE NUM)
- 987 BPL $EE19; (null)OD DRIVE NUM
- 989 LDA #$33; CODE BAD DRIVE NUM
- 991 JMP $C1C8; ERROR HANDLING
- 993 AND #$01; MASK NON DRIVE BITS
- 995 STA $7F; DRIVE NUM BUFF
- 997 JSR $C100; TURN ON DRIVE LED
- 999 LDA $7F
- 1001 ASL
- 1003 TAX
- 1005 LDY $027B; FILENM PTR TABLE
- 1007 CPY $0274; CMND LENGTH BUFF
- 1009 BEQ $EE46; NO NEW DSK ID (SHORT NEW)
- 1011 LDA $0200,Y; DSK ID FROM CMND
- 1013 STA $12,X; 1ST ID CHAR BUFF
- 1015 LDA $0201,X
- 1017 STA $13,X; 2ND ID CHAR
- 1019 JSR $D307; CLEAR ALL CHNLS
- 1021 LDA #$01; TRACK # 1
- 1023 STA $80; TRACK NUM BUFF
- 1025 JSR $C8C6; SET JUMP CMND FOR FORMAT
- 1027 JSR $F005; CLEAR BAM
- 1029 JMP $EE56; CONTINUE
- 1031 ; ** CLEAR DIRECTORY ONLY **
- 1033 JSR $D042; INITIALIZE DRIVE
- 1035 LDX $7F; DRIVE NUM BUFF
- 1037 LDA $0101,X; DOS VERSION BUFF
- 1039 CMP $FED5; #$41 (A)
- 1041 BEQ $EE56; (null)OD DOS VERSION
- 1043 JMP $D572; ERROR JUMP
- 1045 JSR $EEB7; CREATE NEW BAM
- 1047 LDA $F9; CMND NUM
- 1049 TAY
- 1051 ASL
- 1053 TAX
- 1055 LDA $FE88; #$90 OFFSET DSK NAME BAM SEC
- 1057 STA $99,X; NEXT BYTE IN BUFF PTR
- 1059 LDX $027A; FILENM PTR TABLE
- 1061 LDA #$1B; FILENM LENGTH
- 1063 JSR $C66E; TRANS NEW DSK NAME TO BAM
- 1065 LDY #$12; DSK ID POSISTION ZERO PAGE
- 1067 LDX $7F; DRIVE NUM BUFF
- 1069 LDA $FED5; DOS VERSION (#$41)
- 1071 STA $0101,X; DOS VERSION BUFF
- 1073 TXA
- 1075 ASL
- 1077 TAX
- 1079 LDA $12,X; 1ST ID NUM
- 1081 STA ($94),Y; DIRECTORY BUFF
- 1083 INY
- 1085 LDA $13,X; 2ND ID NUM
- 1087 STA ($94),X
- 1089 INY:INY
- 1091 LDA #$32; ASCII 2 DOS VERSION
- 1093 STA ($94),Y
- 1095 INY
- 1097 LDA $FED5; #$41 DOS VERSION
- 1099 STA ($94),Y
- 1101 LDY #$02; PTR 3RD BYTE IN BAM
- 1103 STA ($6D),Y; START OF BIT MAP PTR
- 1105 LDA $FE85; #$12 DIRECTORY TRACK
- 1107 STA $80; TRACK NUM BUFF
- 1109 JSR $EF93; MARK TRK 18 SEC 0 USED
- 1111 LDA #$01
- 1113 STA $81; SECT NUM BUFF
- 1115 JSR $EF93; MARK TRK 18 SEC 1 USED
- 1117 JSR $EEFF; WRITE BAM TO DSK
- 1119 JSR $F005; CLEAR ALL BAM
- 1121 LDY #$01
- 1123 LDA #$FF
- 1125 STA ($6D),Y; DIRECT 1ST SEC LINK
- 1127 JSR $D464; WRITE DIRECT BLOCK TO DSK
- 1129 DEC $81; SECT NUM BUFF
- 1131 JSR $D460; READ BAM INTO RAM
- 1133 JMP $C194; TERM ROUT
- 1135 ; ** CREATE NEW BAM MAP **
- 1137 JSR $F0D1; FILL BAM WITH 0
- 1139 LDY #$00
- 1141 LDA #$12; DIECTORY TRACK NUM
- 1143 STA ($6D),Y; TRACK LINK
- 1145 INY
- 1147 TYA
- 1149 STA ($6D),Y; SECT LINK
- 1151 INY:INY:INY
- 1153 LDA #$00
- 1155 STA $6F; TEMP WORK
- 1157 STA $70; " "
- 1159 STA $71; BIT MANIPULATION AREA
- 1161 TYA
- 1163 LSR:LSR; FIND TRACK NUM
- 1165 JSR $F24B; CALUCULATE HIGHEST SEC THIS TRK
- 1167 STA ($6D),Y; USED FOR FREE SECTS
- 1169 INY
- 1171 TAX; HOLDS SECTS
- 1173 SEC; FREE SECT BIT IN C FLG
- 1175 ROL $6F
- 1177 ROL $70
- 1179 ROL $71; PUSH FREE BIT
- 1181 DEX
- 1183 BNE $EED9; PUSH MORE BITS
- 1185 LDA $6F,X; NOW HOLD BIT MAP THIS TRK
- 1187 STA ($6D),Y
- 1189 INY
- 1191 INX
- 1193 CPX #$03
- 1195 BCC $EEE3; MORE BITS TO DO
- 1197 CPY #$90
- 1199 BCC $EEC7; MORE TRACKS TO DO
- 1201 JMP $D075; CALCULATE BLOCKS FREE
- 1203 ; ** WRITE BAM TO DRIVE **
- 1205 JSR $DF93; GET ACTIVE BUFF NUM
- 1207 TAX; HOLDS BUFF
- 1209 LDA $025B,X; LAST CMND NUM
- 1211 AND #$01
- 1213 STA $7F; DRIVE NUM BUFF
- 1215 LDY $7F
- 1217 LDA $0251,Y; DIRTY BAM FLG
- 1219 BNE $EF07; DIRTY BAM (CHANGED)
- 1221 RTS
- 1223 LDA #$00
- 1225 STA $0251,Y; CLEAR DIRTY BAM FLG
- 1227 JSR $EF3A; SET PTR TO BAM
- 1229 LDA $7F; DRIVE NUM BUFF
- 1231 ASL
- 1233 PHA
- 1235 JSR $F0A5; PUT MEMORY IN BAM
- 1237 PLA
- 1239 CLC
- 1241 ADC #$01
- 1243 JSR $F0A5; " " " "
- 1245 LDA $80
- 1247 PHA
- 1249 LDA #$01
- 1251 STA $80; TRACK NUM BUFF
- 1253 ASL:ASL
- 1255 STA $6D; START OF BIT MAP PTR
- 1257 JSR $F220; CHECK BIT MAP FOR TRACK
- 1259 INC $80
- 1261 LDA $80
- 1263 CMP $FED7; #$24 MAXIMUM TRACKS
- 1265 BCC $EF24; CHECK NEXT TRACK
- 1267 PLA; ORIGINAL TRACK NUM
- 1269 STA $80
- 1271 JMP $D58A; WRITE BAM TO DSK
- 1273 ; ** READ BAM TO RAM **
- 1275 JSR $F10F; GET BAM CHNL NUM
- 1277 TAX
- 1279 JSR $F0DF; READ BAM TO RAM
- 1281 LDX $F9; CMND NUM
- 1283 LDA $FEE0,X; HI BYTE PTR TO DATA BUFF
- 1285 STA $6E; START OF BIT MAP PTR
- 1287 LDA #$00
- 1289 STA $6D; LO BYTE
- 1291 RTS
- 1293 ; ** GET NUM OF FREE BLOCKS **
- 1295 LDX $7F; DRIVE NUM BUFF
- 1297 LDA $02FA,X; LO BYTE BLOSKS FREE
- 1299 STA $0272; LO BYTE FREE BLOCKS TEMP
- 1301 LDA $02FC,X; HI BYTE
- 1303 STA $0273
- 1305 RTS
- 1307 ; ** FREE A BLOCK ON TRACK IN BAM **
- 1309 JSR $EFF1; WRITE BAM
- 1311 JSR $EFCF; CALCULATE BAM INDEX
- 1313 SEC; CARRY SET = NO ACTION
- 1315 BNE $EF87; ALREADY FREE
- 1317 LDA ($6D),Y; START OF BAM PTR
- 1319 ORA $EFE9,X; BIT MAP MASK
- 1321 STA ($6D),Y
- 1323 JSR $EF88; SET DIRTY BAM FLG
- 1325 LDY $6F; NUM OF BLOCKS FREE PTR
- 1327 CLC
- 1329 LDA ($6D),Y; BLOCKS FREE
- 1331 ADC #$01
- 1333 STA ($6D),Y
- 1335 LDA $80; TRACK NUM BUFF
- 1337 CMP $FE85; #$12 DIRECTORY TRACK
- 1339 BEQ $EFBA
- 1341 INC $02FA,X; LO BYTE BLOCKS FREE
- 1343 BNE $EF87
- 1345 INC $02FC,X; HI BYTE
- 1347 RTS
- 1349 ; ** SET DIRTY BAM FLG **
- 1351 ; BAM IN RAM DIFFERENT FROM DSK
- 1353 LDX $7F; DRIVE NUM BUFF
- 1355 LDA #$01
- 1357 STA $0251,X; DIRTY BAM FLG
- 1359 RTS
- 1361 ; ** MARK BLOCK USED IN BAM **
- 1363 JSR $EFF1; WRITE OUT BAM
- 1365 JSR $EFCF; CALCULATE INDEX TO BAM
- 1367 BEQ $EFCE; ALREADY MARKED USED
- 1369 LDA ($6D),Y; BAM ENTRY
- 1371 EOR $EFE9,X; BIT MAP MASK
- 1373 STA ($6D),Y
- 1375 JSR $EF88; SET DIRTY BAM FLG
- 1377 LDY $6F; NUM OF BLKS FREE PTR
- 1379 LDA ($6D),Y
- 1381 SEC
- 1383 SBC #$01
- 1385 STA ($6D),Y
- 1387 LDA $80; TRACK NUM BUFF
- 1389 CMP $FE85; #$12 DIRECTORY TRACK
- 1391 BEQ $EFBD
- 1393 LDA $02FA,X; LO BYTE BLOCKS FREE
- 1395 BNE $EFBA
- 1397 DEC $02FC,X; HI BYTE
- 1399 DEC $02FA,X
- 1401 LDA $02FC,X
- 1403 BNE $EFCE
- 1405 LDA $02FA,X
- 1407 CMP #$03
- 1409 BCS $EFCE; GREATER THAN 2 BRANCH
- 1411 LDA #$72; CODE DSK FULL
- 1413 JSR $E6C7; ERROR HANDLING
- 1415 RTS
- 1417 ; ** CALCULATE BAM INDEX FOR FREE & USED BLOCKS **
- 1419 ; ON EXIT Z FLG = 0 BLOCK FREE
- 1421 ; Z FLG = 1 BLOCK USED
- 1423 JSR $F011; SET BAM IN MEMORY
- 1425 TYA; Y HOLDS PTR START BIT MAP
- 1427 STA $6F; TEMP WORK
- 1429 LDA $81; SECT NUM BUFF
- 1431 LSR; DIVIDE BY 8 FIND 3 BYTES
- 1433 LSR; FOR TRK & SEC
- 1435 LSR
- 1437 SEC
- 1439 ADC $6F
- 1441 TAY
- 1443 LDA $81
- 1445 AND #$07; FIND BIT FOR SECT
- 1447 TAX
- 1449 LDA ($6D),Y; BAM BYTE W/BIT FOR BLOCK
- 1451 AND $EFE9,X; BIT MASK
- 1453 RTS
- 1455 ; ** BIT MAP MASK TABLE **
- 1457 ; BYTE 1 1 BYTE 2 2
- 1459 ; 4 4 8 8
- 1461 ; 10 16 20 32
- 1463 ; 40 64 80 128
- 1465 *= $EFF1
- 1467 ; ** WRITE BAM TO DSK **
- 1469 LDA #$FF
- 1471 BIT $02F9; DONT WRITE BAM FLG
- 1473 BEQ $F004
- 1475 BPL $F004
- 1477 BVS $F004
- 1479 LDA #$00:STA $02F9
- 1481 JMP $D58A; WRITE BAM TO DSK
- 1483 RTS
- 1485 ; ** ZERO BAM **
- 1487 JSR $EF3A; SET BAM PTRS
- 1489 LDY #$00
- 1491 TYA
- 1493 STA ($6D),Y
- 1495 INY
- 1497 BNE $F00B
- 1499 RTS
- 1501 ; ** SET BAM IN MEMORY **
- 1503 LDA $6F; TEMP WORK AREA
- 1505 PHA
- 1507 LDA $70
- 1509 PHA
- 1511 LDX $7F; DRIVE NUM BUFF
- 1513 LDA $FF,X; NO DRIVE FLG
- 1515 BEQ $F022; DRIVE OK
- 1517 LDA #$74; CODE DRIVE NOT READY
- 1519 JSR $E648; ERROR HANDLING
- 1521 JSR $F10F; SET UP BAM
- 1523 STA $6F; CHNL NUM
- 1525 TXA; DRIVE NUM
- 1527 ASL
- 1529 STA $70
- 1531 TAX
- 1533 LDA $80; TRACK NUM BUFF
- 1535 CMP $029D,Y; BAM TRACK TABLE
- 1537 BEQ $F03E
- 1539 INX; POINTS TO ALTERNATE BAM CHNL
- 1541 STX $70
- 1543 CMP $029D,X
- 1545 BEQ $F03E
- 1547 JSR $F05B; READ BAM MOVE TO CORRECT RAM
- 1549 LDA $70; ALT BAM CHNL
- 1551 LDX $7F; DRIVE NUM
- 1553 STA $029B,X; LAST CHNL USED PTR
- 1555 ASL:ASL
- 1557 CLC
- 1559 ADC #$A1
- 1561 STA $6D; LO BYTE START OF BAM
- 1563 LDA #$02
- 1565 ADC #$00; CLEAR CARRY FLG
- 1567 STA $6E; HI BYTE
- 1569 LDY #$00
- 1571 PLA; ORIGINAL TEMP WORK VALUES
- 1573 STA $70
- 1575 PLA
- 1577 STA $6F
- 1579 RTS
- 1581 ; ** SWAP IMAGES IN BAM **
- 1583 LDX $6F; INDEX IN BUFF
- 1585 JSR $F0DF; READ BAM
- 1587 LDA $7F; DRIVE NUM BUFF
- 1589 TAX
- 1591 ASL
- 1593 ORA $029B,X; LEAST USED BAM PTR
- 1595 EOR #$01
- 1597 AND #$03
- 1599 STA $70
- 1601 JSR $F0A5; PUT MEMORY IMAGE IN BAM
- 1603 LDA $F9; CMND NUM
- 1605 ASL
- 1607 TAX
- 1609 LDA $80; TRACK NUM BUFF
- 1611 ASL:ASL
- 1613 STA $99,X; LO BYTE NEXT BYTE BUFF POINT
- 1615 LDA $70
- 1617 ASL:ASL
- 1619 TAY
- 1621 LDA ($99),Y; BAM BUFF
- 1623 STA $02A1,Y; BAM IMAGE
- 1625 LDA #$00
- 1627 STA ($99,X); HELD BAM BYTE
- 1629 INC $99,X; LO BYTE ORIG BAM PTR
- 1631 INY; POINTS TO NEW BAM IMAGE
- 1633 TYA
- 1635 AND #$03
- 1637 BNE $F07F; MOVE NEXT BYTE
- 1639 LDX $70; DRIVE NUM
- 1641 LDA $80; TRACK NUM
- 1643 STA $029D,X; IMAGE TRK # PTR
- 1645 LDA $02F9; DONT WRITE BAM FLG
- 1647 BNE $F09F; DONT WRITE
- 1649 JMP $D58A; WRITE BAM TO DSK
- 1651 ORA #$80; WRITE BAM PENDING CODE
- 1653 STA $02F9
- 1655 RTS
- 1657 ; ** PUT MEMORY IMAGE OF BAM IN CORRECT RAM **
- 1659 TAY
- 1661 LDA $029D,Y; PTR BAM TRK #
- 1663 BEQ $F0D0; NO IMAGE IN RAM
- 1665 PHA
- 1667 LDA #$00
- 1669 STA $029D,Y
- 1671 LDA $F9; CMND NUM
- 1673 ASL
- 1675 TAX
- 1677 PLA
- 1679 ASL:ASL
- 1681 STA $99,X; NEXT BYTE IN BUFF PTR
- 1683 TYA
- 1685 ASL:ASL
- 1687 TAY
- 1689 LDA $02A1,Y; BAM IMAGE BYTE
- 1691 STA ($99,X); RAM MEMORY
- 1693 LDA #$00
- 1695 STA $02A1,Y; CLEAR BAM BYTE
- 1697 INC $99,X
- 1699 INY
- 1701 TYA
- 1703 AND #$03
- 1705 BNE $F0BE; MOVE NEXT BYTE
- 1707 RTS
- 1709 ; ** ZERO TRACK NUM FOR BAM IMAGE **
- 1711 LDA $7F; DRIVE NUM BUFF
- 1713 ASL
- 1715 TAX
- 1717 LDA #$00
- 1719 STA $029D,X; TRACK # BAM IMAGE
- 1721 INX
- 1723 STA $029D,X
- 1725 RTS
- 1727 ; ** READ BAM FROM DSK IF NOT IN RAM **
- 1729 LDA $A7,X; CHNL EACH BUFF TABLE
- 1731 CMP #$FF
- 1733 BNE $F10A; BAM IN MEMORY
- 1735 TXA
- 1737 PHA
- 1739 JSR $D28E; FIND FREE BUFF
- 1741 TAX; HOLDS BUFF NUM
- 1743 BPL $F0F2; BUFF FOUND
- 1745 LDA #$70; CODE NO CHNL
- 1747 JSR $C1C8; ERROR HANDLING
- 1749 STX $F9; CMND NUM
- 1751 PLA; CHNL NUM
- 1753 TAY
- 1755 TXA; BUFF NUM
- 1757 ORA #$80; SETS BUFF INACTIVE
- 1759 STA $00A7,Y; CHNL FOR BUFF TABLE
- 1761 ASL
- 1763 TAX
- 1765 LDA $FE85; #$12 DIRECTORY TRACK
- 1767 STA $06,X; TRACK CMND BUFF
- 1769 LDA #$00
- 1771 STA $07,X; SECT CMND BUFF
- 1773 .F DISK ROM 8
-