home *** CD-ROM | disk | FTP | other *** search
- 1 JMP $D586; READ BAM TERM ROUT
- 3 AND #$0F; SET BAM CMND NUM
- 5 STA $F9
- 7 RTS
- 9 LDA #$06; BAM CHANNEL NUM
- 11 LDX $7F; DRV NUM
- 13 BNE $F118
- 15 CLC
- 17 ADC #$07; BAM CHANNEL DRV # 1
- 19 RTS
- 21 JSR $F10F
- 23 TAX
- 25 RTS
- 27 ; ** FIND NEXT AVAIL TRK & SECT **
- 29 JSR $DE3E; SET TRK & SEC FROM MOST RECENT HDR
- 31 LDA #$03
- 33 STA $6F; TEMP WORK
- 35 LDA #$01
- 37 ORA $02F9; DONT WRITE BAM FLAG
- 39 STA $02F9; PREVENT BAM WRITE
- 41 LDA $6F
- 43 PHA
- 45 JSR $F011; SET BAM IMAGE IN MEM
- 47 PLA
- 49 STA $6F
- 51 LDA ($6D),Y; BAM PTR
- 53 BNE $F173; NO SECTS FREE
- 55 LDA $80; TRK NUM BUFF
- 57 CMP $FE85; #$12 DIRECTORY TRK
- 59 BEQ $F15A
- 61 BCC $F15F; LESS THAN #$12
- 63 INC $80
- 65 LDA $80
- 67 CMP $FED7; #$24 MAX TRK + 1
- 69 BNE $F12D
- 71 LDX $FE85
- 73 DEX
- 75 STX $80
- 77 LDA #$00
- 79 STA $81; SECT NUM BUFF
- 81 DEC $6F
- 83 BNE $F12D
- 85 LDA #$72; CODE DISK FULL
- 87 JSR $C1C8; ERROR HANDLING
- 89 DEC $80; TRK NUM
- 91 BNE $F12D; CHK NEXT TRK
- 93 LDX $FE85; #$12 DIRECTORY TRK
- 95 INX
- 97 STX $80
- 99 LDA #$00
- 101 STA $81; SECT NUM BUFF
- 103 DEC $6F
- 105 BNE $F12D
- 107 BEQ $F15A; DISK FULL
- 109 ; ** FIND OPTIMUM NEXT SECT (+ 10) THIS TRK **
- 111 ; NORMAL INCREMENT ON DIRECTORY TRK IS 4 OTHERS 10
- 113 LDA $81; SECT NUM BUFF
- 115 CLC
- 117 ADC $69; #$0A SECT INCREMENT
- 119 STA $81
- 121 LDA $80; TRK NUM BUFF
- 123 JSR $F24B; FIND MAX SECT
- 125 STA $024E; TEMP WORK FOR BEST SEC
- 127 STA $024D; TEMP CMND NUM
- 129 CMP $81
- 131 BCS $F195; NEW SECT LESS THAN MAX
- 133 SEC
- 135 LDA $81
- 137 SBC $024E
- 139 STA $81
- 141 BEQ $F195
- 143 DEC $81; SECT NUM
- 145 JSR $F1FA; PUT BAM IN MEM
- 147 BEQ $F19D; NO SECT AVAIL
- 149 JMP $EF90; SET NEW SECT USED IN BAM
- 151 LDA #$00
- 153 STA $81
- 155 JSR $F1FA
- 157 BNE $F19A
- 159 JMP $F1F5; ABORT ROUT
- 161 ; ** FIND OPTIMUM INITIAL TRK & SECT **
- 163 LDA #$01
- 165 ORA $02F9; DONT WRITE BAM FLAG
- 167 STA $02F9; BAMWRITE PENDING
- 169 LDA $86; TEMP RESULT
- 171 PHA
- 173 LDA #$01
- 175 STA $86
- 177 LDA $FE85; #$12 DIRECTORY TRK
- 179 SEC
- 181 SBC $86; TRK CTR
- 183 STA $80; TRK NUM BUFF
- 185 BCC $F1CB; LESS THAN 0
- 187 BEQ $F1CB; EQUAL TO 0
- 189 JSR $F011; SET PTR TO BAM
- 191 LDA ($6D),Y; NUM OF FREE BLKS
- 193 BNE $F1E6; SECTS FREE THIS TRK
- 195 LDA $FE85; #$12 DIRECTORY TRK
- 197 CLC
- 199 ADC $86
- 201 STA $80; TRK NUM
- 203 INC $86
- 205 CMP $FED7; #$24 MAX TRK + 1
- 207 BCC $F1DF
- 209 LDA #$67; CODE SYSTEM TRK/SECT ERROR
- 211 JSR $E645; ERROR HANDLING
- 213 JSR $F011; SET PTR TO BAM
- 215 LDA ($6D),Y; NUM FREE BLKS
- 217 BEQ $F1B8; NO SECTS THIS TRK
- 219 PLA
- 221 STA $86; TRK CTR
- 223 LDA #$00
- 225 STA $81; SECT NUM
- 227 JSR $F1FA; SET BAM FIND 1ST AVAIL SEC
- 229 BEQ $F1F5; NO SECT
- 231 JMP $EF90; MARK SECT USED IN BAM
- 233 LDA #$71; CODE ERROR IN BAM
- 235 JSR $E645; ERROR HANDLING
- 237 ; ** SET BAM FIND FIRST AVAIL SECT **
- 239 JSR $F011; SET PTR TO BAM
- 241 TYA
- 243 PHA
- 245 JSR $F220; VALIDATE BIT MAP
- 247 LDA $80; TRK NUM BUFF
- 249 JSR $F24B; FIND MAX SEC THIS TRK
- 251 STA $024E; TEMP WORK BEST SECT
- 253 PLA
- 255 STA $6F; TEMP WORK
- 257 LDA $81; SECT NUM
- 259 CMP $024E
- 261 BCS $F21D; SECT NUM TOO LARGE
- 263 JSR $EFD5; CALCULATE INDEX IN BAM
- 265 BNE $F21F; SECT FREE
- 267 INC $81
- 269 BNE $F20D; FORCED BRANCH
- 271 LDA #$00
- 273 RTS
- 275 ; ** VALIDATE BIT MAP **
- 277 LDA $6F
- 279 PHA
- 281 LDA #$00
- 283 STA $6F; TEMP WORK
- 285 LDY $FE86; #$04 # BYTES/TRK IN BAM
- 287 DEY:LDX #$07; BIT CTR
- 289 LDA ($6D),Y; BAM BYTE THIS TRK
- 291 AND $EFE9,X; BIT MASK TABLE
- 293 BEQ $F236; SECT ALLOCATED
- 295 INC $6F; SECT FREE INC COUNT
- 297 DEX; DEC BIT COUNT 1 BIT/SECT
- 299 BPL $F22D
- 301 DEY; BUTE CTR 8 SEC/BYTE
- 303 BNE $F22B
- 305 LDA ($6D),Y; NUM OF BYTES FREE THIS TRK
- 307 CMP $6F
- 309 BNE $F246; ERROR
- 311 PLA
- 313 STA $6F
- 315 RTS
- 317 LDA #$71; CODE ERROR IN BAM
- 319 JSR $E645; ERROR HANDLING
- 321 ; ** GET NUM OF SECTS ALLOWED A TRK **
- 323 ; A = NUM OF SECTS ON RETURN
- 325 LDX $FED6; #$04 NUM OF ZONES
- 327 CMP $FED6,X; ZONE BOUNDRIES + 1
- 329 DEX
- 331 BCS $F24E; MORE
- 333 LDA $FED1,X; NUM OF SEC/TRK
- 335 RTS
- 337 ; ** KILL PROTECTION DOES NOTHING **
- 339 RTS
- 341 ; ** DISK CONTROLLER ROUTS **
- 343 ; ** CONTROLLER INITIALIZATION **
- 345 LDA $6F; 01101111
- 347 STA $1C02; DATA DIRECTION PORT B
- 349 AND #$F0; TURN OFF MOTOR & LED PHASE = A
- 351 STA $1C00; DISK CONTROLLER
- 353 LDA $1C0C; PERIPHIAL CONTROL REG
- 355 AND #$FE
- 357 ORA #$0E
- 359 ORA #$E0
- 361 STA $1C0C; NEG EDGE LATCH MODE
- 363 LDA #$41; DISABLE SER/OUT LINE
- 365 STA $1C0B; AUX CONTROL REG
- 367 LDA #$00; SET 20 MILSEC TIMER
- 369 STA $1C06; TIMER 1 LO LATCH
- 371 LDA #$3A
- 373 STA $1C07; TIMER 1 HI LATCH
- 375 STA $1C05; TIMER 1 HI COUNT
- 377 LDA #$7F; CLEAR ALL IRQ SOURCES
- 379 STA $1C0E; INTERRUPT ENABLE REG
- 381 LDA #$C0; CLEAR/ENABLE IRQ TIMER
- 383 STA $1C0D; INTERRUPT FLAG REG
- 385 STA $1C0E
- 387 LDA #$FF
- 389 STA $3E; CURRENT DRV #$FF INACTIVE
- 391 STA $51; TRK BEING FORMATTED BUFF #$FF INACT
- 393 LDA #$08; CODE HEADER BLK ID
- 395 STA $39; HEADER BLK ID BUFF
- 397 ; *** CHANGE THIS ONE FOR ILLEGAL TRKS ***
- 399 LDA #$07; CODE DATA BLK ID
- 401 STA $47; DATA BLK ID BUFF THIS ONE TOO
- 403 LDA #$05; LO BYTE
- 405 STA $62; PTR HEAD STEPPING
- 407 LDA #$FA; HI BYTE
- 409 STA $63
- 411 LDA #$C8; ASCII 200 STEPS
- 413 STA $64; MIN STEPS FAST TEPPING
- 415 LDA #$04; # OF STEPS ACCELERAT/DECELLERATE HEAD
- 417 STA $5E; NUM OF STEPS BUFF
- 419 LDA #$04; ACCELERATION/DECELERATION FACTOR
- 421 STA $5F; ACEL/DECEL FACTOR BUFF
- 423 ; ** MAIN CONTROLLER LOOP **
- 425 ; SCANS CMND BUFFS $00 TO $04
- 427 TSX; SAVE STACK PTR
- 429 STX $49; STACK PTR BUFF
- 431 LDA $1C04:LDA $1C0C; PERIPH CONT REG
- 433 ORA #$0E; SET BITS 1 2 3 ENABLE SER/OUT
- 435 STA $1C0C
- 437 LDY #$05; CMND BUFF COUNT
- 439 LDA $0000,Y; CMND BUFFS
- 441 BPL $F2F3; NO CMND
- 443 CMP #$D0; CODE JUMP
- 445 BNE $F2CD; NOT JUMP
- 447 TYA; USE FOR INDEX
- 449 JMP $F370; EXECUTE JUMP
- 451 AND #$01
- 453 BEQ $F2D8; VALID DRV NUM
- 455 STY $3F; POSISTION LAST CMND
- 457 LDA #$0F; CODE BAD DRV NUM
- 459 JMP $F969; ERROR HANDLING
- 461 TAX; CMND DRV NUM
- 463 STA $3D; DRV NUM ALWAYS 0
- 465 CMP $3E; CURRENT DRV
- 467 BEQ $F2E9; IF #$FF DRV OFF
- 469 JSR $F97E; TURN DRV ON
- 471 LDA $3D; ALWAYS 0
- 473 STA $3E; ACTIVE DRV BUFF
- 475 JMP $F99C; TERM ROUT
- 477 LDA $20; DISK DRV STATUS
- 479 BMI $F2F0; DRV NOT READY
- 481 ASL
- 483 BPL $F2F9; HEAD NOT STEPPING
- 485 JMP $F99C; HEAD STEPPER ROUT
- 487 DEY
- 489 BPL $F2C0; MORE CMND BUFFS
- 491 JMP $F99C; HEAD STEPPER ROUNTINE
- 493 LDA #$20; DRV RUNNING CODE
- 495 STA $20; DRV STATUS BUFF
- 497 LDY #$05
- 499 STY $3F; POS LAST CMND
- 501 JSR $F393; SET PTR TO BUFF
- 503 BMI $F320; CHECH STEP HEAD THIS CMND
- 505 DEC $3F; MORE TO CHK
- 507 BPL $F301; NO CMND BIT 7 0
- 509 LDY $41; POS NEXT CMND
- 511 JSR $F395; GET NEXT CMND
- 513 LDA $42; NEXT TRK MOVE HEAD
- 515 STA $4A; NUM STEPS MOVE HEAD
- 517 ASL $4A
- 519 LDA #$60; CODE HEAD STEPPING
- 521 STA $20; DRV STATUS REG
- 523 LDA ($32),Y; HEADER TABLE PTRS
- 525 STA $22; TRK UNDER HEAD
- 527 JMP $F99C; TERM ROUT
- 529 AND #$01
- 531 CMP $3D; ALWAYS 0
- 533 BNE $F306; NEVER BRANCH
- 535 LDA $22; TRK UNDER HEAD
- 537 BEQ $F33C; ON TRK
- 539 SEC
- 541 SBC ($32),Y; ACTIVE HEADER PTR TABLE
- 543 BEQ $F33C; ON TRK
- 545 EOR #$FF; FLIP ALL BITS
- 547 STA $42
- 549 INC $42:LDA $3F
- 551 STA $41
- 553 JMP $F306; CHK FOR MORE CMNDS
- 555 ; ** FIND ZONE FOR TRK **
- 557 LDX #$04; NUM OF ZONES
- 559 LDA ($32),Y
- 561 STA $40; BYTE CTR
- 563 CMP $FED6,Y; ZONE TABLE
- 565 DEX
- 567 BCS $F342
- 569 LDA $FED1,X; SECTS/TRK/ZONE
- 571 STA $43
- 573 TXA
- 575 ASL:ASL:ASL:ASL:ASL
- 577 STA $44; TEMP WORK
- 579 LDA $1C00; DISK CONTROLLER
- 581 AND #$9F
- 583 ORA $44
- 585 STA $1C00; DENSITY SET
- 587 LDX $3D; DRV NUM
- 589 LDA $45; CMND NUM
- 591 CMP #$40; CODE BUMP TO TRK 1
- 593 BEQ $F37C
- 595 CMP #$60; CODE EXECUTE
- 597 BEQ $F36E
- 599 JMP $F3B1; CHK IF SEEK
- 601 ; ** EXECUTE A CMND **
- 603 LDA $3F
- 605 CLC
- 607 ADC #$03
- 609 STA $31; HI BYTE BUFF PTR
- 611 LDA #$00
- 613 STA $30; LO BYTE
- 615 JMP ($0030)
- 617 ; ** BUMP HEAD TO TRK 1 **
- 619 LDA #$60
- 621 STA $20; DRV STATUS BUFF
- 623 LDA $1C00; DISK CONTROLLER
- 625 AND #$FC; SET TO PHASE A
- 627 STA $1C00
- 629 LDA #$A4; NUM OF TRKS TO MOVE
- 631 STA $4A
- 633 LDA #$01; NEW TRK NUM
- 635 STA $22; TACK UNDER HEAD
- 637 JMP $F969
- 639 ; ** SEARCH FOR (null)OD HEADER BLK **
- 641 LDY $3F; BUFF CMND IN
- 643 LDA $0000,Y; CMND
- 645 PHA
- 647 BPL $F3AB; NOT CMND BIT 7 0
- 649 AND #$78
- 651 STA $45; TEMP FOR CMND CODE
- 653 TYA
- 655 ASL
- 657 ADC #$06
- 659 STA $32; VALUES HEADER TABLE PTR
- 661 TYA
- 663 CLC
- 665 ADC #$03
- 667 STA #31
- 669 LDY #$00
- 671 STY $30; ACTIVE BUFF PTR
- 673 PLA; CMND CODE
- 675 RTS
- 677 LDX #$5A; NUM OF TRYS TO FIND HEADER
- 679 STX $4B
- 681 LDX #$00
- 683 LDA #$52; GCR FOR 8 HEADER ID
- 685 STA $24
- 687 JSR $F556; WAIT FOR SYNC (#$FF)
- 689 BVC $F3BE; WAIT FOR BYTE AFTER SYNC
- 691 CLV
- 693 LDA $1C01; HOLDS GCR BYTE HEAD READ
- 695 CMP $24; ID FOR HEADER
- 697 BNE $F407; TRY AGAIN
- 699 BVC $F3C8; WAIT FOR BYTE AFTER ID
- 701 CLV
- 703 LDA $1C01
- 705 STA $25,X; GCR STORAGE HEADER 8 BYTES
- 707 INX
- 709 CPX #$07
- 711 BNE $F3C8
- 713 JSR $F497; COVERT HEADER TO HEX
- 715 LDY #$04
- 717 LDA #$00
- 719 EOR $0016,Y; HEADER IMAGE
- 721 DEY
- 723 BPL $F3DC; MORE CHKSUM TO GET
- 725 CMP #$00
- 727 BNE $F41E; HEADER CHKSUM ERROR
- 729 LDX $3E
- 731 LDA $18; TRK IMAGE
- 733 STA $22,X; TRK UNDER HEAD
- 735 LDA $45; CMND NUM
- 737 CMP #$30; SEEK CODE
- 739 BEQ $F410
- 741 LDA $3E
- 743 ASL
- 745 TAY
- 747 LDA $0012,Y; DISK ID
- 749 CMP $16; 1ST ID
- 751 BNE $F41B; DISK ID MISMATCH ERROR
- 753 LDA $0013,Y; 2ND ID
- 755 CMP $17
- 757 BNE $F41B
- 759 JMP $F423; FIND BEST SECT
- 761 DEC $4B; SYNC CTR
- 763 BNE $F3BB; TRY AGAIN FOR HEADER
- 765 LDA #$02; CODE HEADER NOT FOUND
- 767 JSR $F969; ERROR HANDLING
- 769 LDA $16; 1ST ID THIS DISK
- 771 STA $12; 1ST ID BUFF
- 773 LDA $17; 2ND ID
- 775 STA $13
- 777 LDA #$01; ERROR CODE (OK)
- 779 BIT $0BA9; SKIP NEXT 2 BYTES
- 781 BIT 09A9; SKIP NEXT 2 BYTES
- 783 ;$F41B LDA #$0B
- 785 ;$F41E LDA #$09
- 787 JMP $F969; ERROR HANDLING
- 789 ; ** GET BEST SECT ON THIS TRK **
- 791 LDA #$7F
- 793 STA $4C; CURRENT SECT BUFF
- 795 LDA $19; SECT JUST READ FROM HEADER
- 797 CLC
- 799 ADC #$02
- 801 CMP $43; # OF SECTS THIS TRK
- 803 BCC $F432; TOO MANY SECTS
- 805 SBC $43
- 807 STA $4D; NEXT SECT TO CHK
- 809 LDX #$05
- 811 STX $3F; # OF CMND BUFFS
- 813 LDX #$FF
- 815 JSR $F393; SET PTRS
- 817 BPL $F483; DEC JOB BUFFS
- 819 STA $44; TEMP WORK
- 821 AND #$01
- 823 CMP $3E; CURRENT DRV
- 825 BNE $F483; WRONG DRV
- 827 LDY #$00
- 829 LDA ($32),Y
- 831 CMP $40
- 833 BNE $F483; WRONG TRK FOR CMND
- 835 LDA $45
- 837 CMP #$60; CODE FOR EXECUTE
- 839 BEQ $F461
- 841 LDY #$01
- 843 SEC
- 845 LDA ($32),Y; CMNDS SECT
- 847 SBC $4D; HOLDS NEXT SECT TO CHK
- 849 BPL $F461; ANOTHER SECT
- 851 CLC
- 853 ADC $43
- 855 CMP $4C; DISTANCE TO NEXT SECT
- 857 BCS $F483; DO OTHER CMND 1ST
- 859 PHA
- 861 LDA $45; HOLDS CMND
- 863 BEQ $F47E; READ CMND BRANCH
- 865 PLA; MUST BE WRITE CMND
- 867 CMP #$09; 9 OR LESS SECTS AWAY
- 869 BCC $F483; DO OTHER COMMANS FIRST
- 871 CMP #$0C; MORE THAN 12 SECTS AWAY
- 873 BCS $F483; DO OTHER CMND FIRST
- 875 STA $4C; HOLDS DISTANCE TO SECT
- 877 LDA $3F; BUFF PTR
- 879 TAX
- 881 ADC #$03
- 883 STA $31; ACTIVE BUFF PTR
- 885 BNE $F483; FORCED BRANCH
- 887 PLA; DISTANCE TO SECT FOR READ
- 889 CMP #$06; LESS THAN 6 SEC AHEAD
- 891 BCC $F473; READ SECT
- 893 DEC $3F; # CMND BUFFS
- 895 BPL $F43A; START OVER
- 897 TXA
- 899 BPL $F48D; READ CMND FOUND
- 901 JMP $F99C; FINISHED
- 903 STX $3F
- 905 JSR $F393
- 907 LDA $45
- 909 JMP $F4CA; READ TRK AND SECT
- 911 ; ** CONVERT HEADER FROM GCR TO HEX **
- 913 LDA $30; PTR ACTIVE BUFF
- 915 PHA
- 917 LDA $31
- 919 PHA
- 921 LDA #$24
- 923 STA $30
- 925 LDA #$00
- 927 STA $31; NOW POINTS $0024 WORK AREA
- 929 LDA #$00
- 931 STA $34; POINTS TO LAST CHAR TO CONVERT
- 933 JSR $F7E6; CONVERT GCR TO HEX
- 935 LDA $55
- 937 STA $18; IMAGE TRK #
- 939 LDA $54
- 941 STA $19; IMAGE SECT #
- 943 LDA $53
- 945 STA $1A; IMAGE HEADER CHKSUM
- 947 JSR $F7E6; CONVERT LAST 4 BYTES
- 949 LDA $52
- 951 STA $17; IMAGE 2ND ID
- 953 LDA $53
- 955 STA $16; IMAGE 1ST ID
- 957 PLA
- 959 STA $31; ACTIVE BUFF PTR
- 961 PLA
- 963 STA $30
- 965 RTS
- 967 ; ** READ TRK & SECT IN HEADER TABLE **
- 969 CMP #$00
- 971 BEQ $F4D1; READ CMND
- 973 JMP $F56E; WRITE CMND
- 975 JSR $F50A; FIND HEADER SET DATA BLK
- 977 BVC $F4D4; WAIT FOR CHAR AFTER SYNC
- 979 CLV
- 981 LDA $1C00;GCR BYTE FROM HEAD
- 983 STA ($30),Y; DATA BUFF
- 985 INY
- 987 BNE $F4D4; READ MORE
- 989 LDY #$BA; LOOP FOR LAST 70 BYTES
- 991 BVC $F4E1
- 993 CLV
- 995 LDA $1C01
- 997 STA $0100,Y; OVERFLOW BUFF
- 999 ; 256 HEX BYTES = 326 GCR BYTES
- 1001 INY
- 1003 BNE $F4E1; READ MORE
- 1005 JSR $F8E0; CONVERT GCR TO HEX
- 1007 LDA $38
- 1009 CMP #$47; #$07 HEADER ID
- 1011 BEQ $F4FB
- 1013 LDA #$04; CODE DATA BLK NOT FOUND
- 1015 JMP $F969; ERROR HANDLING
- 1017 JSR $F5E9; CALCULATE DATA CHKSUM
- 1019 CMP $3A
- 1021 BEQ $F505; CHKSUM OK
- 1023 LDA #$05; DATA BLK CHKSUM ERROR
- 1025 BIT $01A9; SKIP NEXT TWO BYTES
- 1027 ;$F505 LDA #$01
- 1029 JMP $F969; ERROR HANDLING
- 1031 ; ** FIND SPECIFIC HEADER **
- 1033 JSR $F510; SET UP HEADER IMAGE
- 1035 JMP $F556; WAIT FOR SYNC
- 1037 LDA $3D; DRV NUM ALWAYS 0
- 1039 ASL
- 1041 TAX; X = 0
- 1043 LDA $12,X; 1ST ID
- 1045 STA $16; IMAGE 1ST ID
- 1047 LDA $13,X; 2ND ID
- 1049 STA $17; IMAGE 2ND ID
- 1051 LDY #$00
- 1053 LDA ($32),Y
- 1055 STA $18; IMAGE TRK NUM
- 1057 INY
- 1059 LDA ($32),Y
- 1061 STA $19; IMAGE SECT NUM
- 1063 LDA #$00
- 1065 EOR $16
- 1067 EOR $17
- 1069 EOR $18
- 1071 EOR $19
- 1073 STA $1A; IMAGE HEADER CHKSUM
- 1075 JSR $F934; CONVERT HEADER TO GCR
- 1077 LDX #$5A; CTR # OF SYNC MARKS
- 1079 JSR $F556; WAIT FOR SYNC
- 1081 LDY #$00
- 1083 BVC $F53D; WAIT FOR CHAR AFTER SYNC
- 1085 CLV
- 1087 LDA $1C01; GCR BYTE FROM READ HEAD
- 1089 CMP $0024,Y; GCR IMAGE HEADER
- 1091 BNE $F54E; NOT RIGHT HEADER
- 1093 INY
- 1095 CPY #$08
- 1097 BNE $F53D; READ REST OF HEADER
- 1099 RTS
- 1101 DEX; SYNC MARK CTR
- 1103 BNE $F538; TRY FOR ANOTHER SYNC
- 1105 LDA #$02; BLK HEADER NOT FOUND
- 1107 JMP $F969; ERROR HANDLING
- 1109 ; ** WAIT FOR SYNC MARK (#$FF GCR) **
- 1111 LDA #$D0; 20 MILLISECONDS
- 1113 STA $1805; TIMER 1 HIGH COUNT
- 1115 LDA #$03; NO SYNC FOUND ERROR
- 1117 BIT $1805
- 1119 BPL $F553; TRY AGAIN
- 1121 BIT $1C00; DISK CONTROLLER
- 1123 BMI $F55D; TRY AGAIN
- 1125 LDA $1C01; GCR BYTE READ FROM HEAD
- 1127 CLV; RESET LATCH CLEAR OVERFLOW FLAG
- 1129 LDY #$00
- 1131 RTS
- 1133 ; ** WRITE DATA BUFF TO DISK **
- 1135 CMP #$10; CODE FOR WRITE
- 1137 BEQ $F575
- 1139 JMP $F969; CHK FOR VERIFY
- 1141 JSR $F5E9; GET CHKSUM FOR DATA BLK
- 1143 STA $3A
- 1145 LDA $1C00; DISK CONTROLLER
- 1147 AND #$10; CHK WRITE PROTECT SENSE
- 1149 BNE $F586
- 1151 LDA #$08; WRITE PROTECT ERROR
- 1153 JMP $F969; ERROR HANDLING
- 1155 JSR $F78F; CONVERT DATA TO GCR
- 1157 JSR $F510; FIND CORRECT HEADER BLK
- 1159 LDX #$09
- 1161 BVC $F58E; WAIT FOR 8 BYTES TO PASS
- 1163 CLV ; HEADER GAP BETWEEN HEADER &
- 1165 DEX; DATA BLK
- 1167 BNE $F58E
- 1169 LDA #$FF; OUTPUT FOR I/O
- 1171 STA $1C03; DATA DIRECTION REG
- 1173 LDA $1C0C; PERIPHIAL CONT REG
- 1175 AND #$1F; TURN ON WRITE MODE
- 1177 ORA #$C0
- 1179 STA $1C0C
- 1181 LDA #$FF; FOR HEADER GAP MARKS
- 1183 LDX #$05
- 1185 STA $1C01; GCR BYTE TO WRITE HEAD
- 1187 CLV
- 1189 BVC $F5AB; WAIT
- 1191 CLV
- 1193 DEX
- 1195 BNE $F5AB; WRITE MORE GAP MARKS
- 1197 LDY #$BB
- 1199 LDA $0100,Y; OVERFLOW FOR GCR
- 1201 BVC $F5B6
- 1203 CLV
- 1205 STA $1C01; GCR BYTE TO WRITE HEAD
- 1207 INY
- 1209 BNE $F5B3; WRITE MORE OVERFLOW BUFF
- 1211 LDA ($30),Y; RESI OF GCR BYTES BUFF
- 1213 BVC $F5C1; WAIT FOR BYTE TO BE WRITTEN
- 1215 CLV
- 1217 STA $1C01; GCR BYTE TO WRITE HEAD
- 1219 INY
- 1221 BNE $F5BF; WRITE MORE BUFF
- 1223 BVC $F5CA; WAIT FOR FINAL BYTE TO WRITE
- 1225 LDA $1C0C; PERIPHIAL CONTROL REG
- 1227 ORA #$E0; SET TO READ MODE
- 1229 STA $1C0C
- 1231 LDA #$00; INPUT I/O
- 1233 STA $1C03; DATA DIRECTION REG
- 1235 JSR $F5F2; CONVERT GCR TO HEX JUST WRITTEN
- 1237 ; IT WILL NOW BE VERIFIED
- 1239 LDA $3F; POSISTION OF WRITE CMND
- 1241 LDA $0000,Y; CMND BUFF
- 1243 EOR #$30; CHANGE TO VERIFY CMND
- 1245 STA $0000,Y
- 1247 JMP $F3B1; EXECUTE VERIFY
- 1249 ; ** CALCULATE DATA BLK CHKSUM **
- 1251 LDA #$00
- 1253 TAY; INDEX
- 1255 EOR ($30),Y; DATA BUFF
- 1257 INY
- 1259 BNE $F5EC; EOR MORE BYTES
- 1261 RTS
- 1263 ; ** CONVERT GCR 10 BITS TO HEXT 8 BITS **
- 1265 LDA #$00
- 1267 STA $2E; SET PTRS & BUFFS
- 1269 STA $30
- 1271 STA $4F
- 1273 LDA $31
- 1275 STA $4E
- 1277 LDA #$01; $01BB OVERFLOW BUFF
- 1279 STA $31
- 1281 STA $2F
- 1283 LDA #$BB
- 1285 STA $34
- 1287 STA $36
- 1289 JSR $F7E6; CONVERT 5 BYTES GCR 4 BYTES HEX
- 1291 LDA $52; DATA BLK ID
- 1293 STA $38
- 1295 LDY $36
- 1297 LDA $53
- 1299 STA ($2E),Y; HEX BYTES TO OVERFLOW BUFF
- 1301 INY
- 1303 LDA $54
- 1305 STA ($2E),Y
- 1307 INY
- 1309 LDA $55
- 1311 STA ($2E),Y
- 1313 INY
- 1315 STY $36; SAVE Y INDEX
- 1317 JSR $F7E6; CONVER NEXT 5 GCR BYTES
- 1319 ; SEE ABOVE FOR REST OF ROUT
- 1321 LDY $36
- 1323 LDA $52
- 1325 STA ($2E),Y
- 1327 INY
- 1329 LDA $53
- 1331 STA ($2E),Y
- 1333 INY
- 1335 BEQ $F643
- 1337 LDA $54
- 1339 STA ($2E),Y
- 1341 INY
- 1343 LDA $55
- 1345 STA ($2E),Y
- 1347 INY
- 1349 STY $36
- 1351 BNE $F624
- 1353 LDA $54
- 1355 STA ($30),Y; DATA BUFF
- 1357 INY
- 1359 LDA $55
- 1361 STA ($30),Y
- 1363 INY
- 1365 STY $36
- 1367 JSR $F7E6
- 1369 LDY $36
- 1371 LDA $52
- 1373 STA ($30),Y
- 1375 INY
- 1377 LDA $53
- 1379 STA ($30),Y; GCR DATA BUFF
- 1381 INY
- 1383 LDA $54
- 1385 STA ($30),Y
- 1387 INY
- 1389 LDA $55
- 1391 STA ($30),Y
- 1393 INY
- 1395 STY $36
- 1397 CPY #$BB; END OF OVERFLOW BUFF
- 1399 BCC $F64F; PUT MORE IN OVERFLOW
- 1401 ; ** REARRANGE CONVERTED BYTES TO PROPER BUFF **
- 1403 LDA #$45; BUFF PTR
- 1405 STA $2E
- 1407 LDA $31
- 1409 STA $2F
- 1411 LDA #$BA; BEGINNING OVERFLOW
- 1413 LDA ($30),Y
- 1415 STA ($2E),Y; BYTE IN PROPER PLACE
- 1417 DEY
- 1419 BNE $F678; MORE TO MOVE
- 1421 LDA ($30),Y
- 1423 STA ($2E),Y
- 1425 LDX #$BB; BEGINNING OF OVERFLOW
- 1427 LDA $0101,X
- 1429 STA ($30),Y
- 1431 INY
- 1433 INX
- 1435 BNE $F685; MORE TO MOVE
- 1437 STX $50; GCR FLAG (ALL BYTES MOVED)
- 1439 RTS
- 1441 ; ** VERIFY DATA BLK **
- 1443 CMP #$20; VERIFY CMND
- 1445 BEQ $F698
- 1447 JMP $F6CA; SECT SEEK
- 1449 JSR $F5E9; GET DATA BLK CHKSUM
- 1451 STA $3A
- 1453 JSR $F78F; CONVERT DATA TO GCR
- 1455 ; NEEDS TO BE DONE TO CHK HEADER
- 1457 JSR $F50A; FIND SECT GET DATA
- 1459 LDY #$BB; START OF OVERFLOW BUFF
- 1461 LDA $0100,Y
- 1463 BVC $F6A8; WAIT FOR DISK BYTE
- 1465 CLV
- 1467 EOR $1C01; GCR BYTE FROM READ HEAD
- 1469 BNE $F6C5; NO MATCH WITH BUFF
- 1471 INY
- 1473 BNE $F6A5; MATCH NEXT DISK BYTE W/BUFF
- 1475 LDA ($30),Y; GCR BYTES IN DATA BUFF
- 1477 BVC $F6B5; WAIT FOR DISK BYTE
- 1479 CLV
- 1481 EOR $1C01; GCR BYTE FROM READ HEAD
- 1483 BNE $F6C5; BUFF & DISK BYTE NO MATCH
- 1485 INY
- 1487 CMP #$FD
- 1489 BNE $F6B3; MATCH MORE BYTES
- 1491 JMP $F418; TERM ROUT
- 1493 LDA #$07; WRITE/VERIFY ERROR
- 1495 JMP $F969; ERROR HANDLING
- 1497 JSR $F510; SECT SEARCH
- 1499 JMP $F418; TERM ROUT
- 1501 ; ** CONVERT HEX (8 BITS) TO GCR (10 BITS) **
- 1503 LDA #$00
- 1505 STA $57; GCR STORAGE
- 1507 STA $5A
- 1509 LDY $34; LAST CHAR CONVERTED PTR
- 1511 LDA $52; 1ST 8 BIT BYTE
- 1513 AND #$F0; 11110000 MASK LO BITS
- 1515 LSR;01111000
- 1517 LSR;00111100
- 1519 LSR;00011110
- 1521 LSR;00001111
- 1523 TAX
- 1525 LDA $F77F,X; 5 BIT GCR EQUIVALENTS
- 1527 ; EXAMPLE 00011111
- 1529 ASL; 00111110
- 1531 ASL; 01111100
- 1533 ASL; 11111000
- 1535 STA $56; GCR STORAGE
- 1537 LDA $52; HEX STORAGE
- 1539 AND #$0F; 00001111
- 1541 TAX
- 1543 LDA $F77F,X; 00011111
- 1545 ROR; 00111110
- 1547 ROR $57
- 1549 ROR
- 1551 ROR $57
- 1553 AND #$07; 00000111
- 1555 ORA $56
- 1557 STA ($30),Y; GCR DATA BUFF
- 1559 INY
- 1561 LDA $53; 2ND 8 BIT BYTE
- 1563 ;FOLLOW LOGIC ABOVE
- 1565 AND #$F0
- 1567 LSR:LSR:LSR:LSR
- 1569 TAX
- 1571 LDA $F77F,X
- 1573 ASL
- 1575 ORA $57
- 1577 STA $57
- 1579 LDA $53
- 1581 AND #$0F
- 1583 TAX
- 1585 LDA $F77F,X
- 1587 ROL:ROL:ROL:ROL
- 1589 STA $58:ROL
- 1591 AND #$01
- 1593 ORA $57
- 1595 STA ($30),Y
- 1597 INY
- 1599 LDA $54; 3RD 8 BIT BYTE
- 1601 AND #$F0
- 1603 LSR:LSR:LSR:LSR
- 1605 TAX
- 1607 LDA $F77F,X
- 1609 CLC
- 1611 ROR
- 1613 ORA $58
- 1615 STA ($30),Y
- 1617 INY
- 1619 ROR
- 1621 AND #$80
- 1623 STA $59
- 1625 LDA $54
- 1627 AND #$0F
- 1629 TAX
- 1631 LDA $F77F,X
- 1633 ASL:ASL
- 1635 AND #$7C
- 1637 ORA $59
- 1639 STA $59
- 1641 LDA $55; 4TH 8 BIT BYTE
- 1643 AND #$F0
- 1645 LSR
- 1647 LSR
- 1649 LSR
- 1651 LSR
- 1653 TAX
- 1655 LDA $F77F,X
- 1657 ROR
- 1659 ROR $5A
- 1661 ROR
- 1663 ROR $5A
- 1665 ROR
- 1667 ROR $5A
- 1669 AND #$03
- 1671 ORA $59
- 1673 STA ($30),Y
- 1675 INY
- 1677 BNE $F76F
- 1679 LDA $2F
- 1681 STA $31
- 1683 LDA $55
- 1685 AND #$0F
- 1687 TAX
- 1689 LDA $F77F,X
- 1691 ORA $5A
- 1693 STA ($30),Y
- 1695 INY
- 1697 STY $34
- 1699 RTS
- 1701 ; ** 5 BIT GCR EQUIVALENTS **
- 1703 ; 4 BIT NIBBLE 5 BIT GCR
- 1705 ; #$00 0000 #$0A 01010
- 1707 ; 01 0001 0B 01011
- 1709 ; 02 0010 12 10010
- 1711 ; 03 0011 13 10011
- 1713 ; 04 0100 0E 01110
- 1715 ; 05 0101 0F 01111
- 1717 ; 06 0110 16 10110
- 1719 ; 07 0111 17 10111
- 1721 ; 08 1000 09 01001
- 1723 ; 09 1001 19 11001
- 1725 ; 0A 1010 1A 11010
- 1727 ; 0B 1011 1B 11011
- 1729 ; 0C 1100 0D 01101
- 1731 ; 0D 1101 1D 11101
- 1733 ; 0E 1110 1E 11110
- 1735 ; 0F 1111 15 10101
- 1737 *= $F78F
- 1739 ; ** INIT PTRS TO BUFFS **
- 1741 LDA #$00
- 1743 STA $30
- 1745 STA $2E
- 1747 STA $36
- 1749 LDA #$BB; LO BYTE OVERFLOW BUFF
- 1751 STA $34
- 1753 STA $50
- 1755 LDA $31
- 1757 STA $2F
- 1759 LDA #$01
- 1761 STA $31
- 1763 LDA $47
- 1765 STA $52
- 1767 LDA $36
- 1769 STA ($2E),Y
- 1771 .FILE DISK ROM 9
-