home *** CD-ROM | disk | FTP | other *** search
- 1 ;JSR $DEF8 SET SIDE SEC PTRS
- 3 *= $E25B
- 5 BVC $E265; NOT BEYOND LAST RECORD
- 7 LDA #$80
- 9 JSR $DD97; SET LAST RECORD FLAG
- 11 JMP $E15E; SET PTRS LAST RECORD
- 13 JSR $E275; POSISTION TO DESIRED RECORD
- 15 LDA #$80
- 17 JSR $DDA6; TEST LAST RECORD FLAG
- 19 BEQ $E272; FND LAST RECORD
- 21 JMP $E15E; SET PTRS LAST RECORD
- 23 JMP $C194; TERMINATE ROUTINE
- 25 ; ** POSISTION TO RECORD **
- 27 ; PUTS REL FILE IN ACTIVE BUFF
- 29 ; PUTS NEXT BLK IN INACTIVE BUFF
- 31 JSR $E29C; PUT DATA BLKS IN BUFFS
- 33 LDA $D7; REL FILE PTR TO TRK
- 35 JSR $D4C8; SET BUFF PTRS
- 37 LDX $82; INDEX CURRENT CHNL
- 39 LDA $C7,X; RECORD LENGTH TABLE
- 41 SEC
- 43 SBC $D4; STAR OF RECORD PTR
- 45 BCS $E289; OFFSET GREATER THAN 0
- 47 JMP $E202; ERROR HANDLING
- 49 CLC
- 51 ADC $D7
- 53 BCC $E291
- 55 ADC #$01
- 57 SEC
- 59 JSR $E009; SET UP NEXT RECORD
- 61 JMP $E138; COMPLETE THE SET UP
- 63 ;**** UNUSED IN 1541 ****
- 65 LDA #$51; CODE RECORD OVERFLOW
- 67 JSR $C1C8; ERROR HANDLING
- 69 ; ** PUT CORRECT DATA BLKS INTO BUFFS **
- 71 LDA $94; LO BYTE DIRECT PTR
- 73 STA $89; TEMP RESULT
- 75 LDA $95; HI BYTE
- 77 STA $8A; TEMP RESULT
- 79 JSR $E2D0; CHK IF BLK IN BUFF
- 81 BNE $E2AA; NOT THERE
- 83 RTS
- 85 JSR $DDF1; CLEAR THE BUFF
- 87 JSR $DE0C; SET TRK & SEC FROM LINK
- 89 LDA $80
- 91 BEQ $E2C2; NO MORE TRKS
- 93 JSR $E2D3; CHK IF BLK IN BUFF
- 95 BNE $E2BF; NOT THERE
- 97 JSR $CF1E; TOGGLE ACTIVE/INACTIVE BUFF
- 99 JMP $D2DA; FREE INACTIVE BUFF
- 101 JSR $D2DA
- 103 LDY #$00
- 105 LDA ($89),Y
- 107 STA $80; TRK NUM BUFF
- 109 INY
- 111 LDA ($89),Y
- 113 STA $81; SECT NUM BUFF
- 115 JMP $D0AF; READ BOTH BLKS
- 117 ; ** CHK IF BLK IN BUFF **
- 119 JSR $DE3E; SET TRK & SEC FROM HEADER
- 121 LDY #$00
- 123 LDA ($89),Y
- 125 CMP $80
- 127 BEQ $E2DC; OK COMPARE SECTS
- 129 RTS
- 131 INY
- 133 LDA ($89),Y
- 135 CMP $81
- 137 RTS
- 139 ; ** SET NULL RECORDS ACTIVE BUFF **
- 141 JSR $DE2B; SET PTRS START OF DATA BUFF
- 143 LDY #$02
- 145 LDA #$00
- 147 STA ($94),Y; PUT 0'S AT $XX02
- 149 INY
- 151 BNE $E2E9; MORE 0'S
- 153 JSR $E304; CALCULATE POSISTION NEXT RECORD
- 155 STA $C1,X; RECORD NUM BUFF
- 157 TAY
- 159 LDA #$FF
- 161 STA ($94),Y; IST CHAR IN BUFF
- 163 JSR $E304; CALCULATE POSISTION NEXT RECORD
- 165 BCC $E2F1; MORE RECORDS
- 167 BNE $E303; DONE
- 169 LDA #$00
- 171 STA $C1,X; NEXT RECORD NUM TABLE
- 173 RTS
- 175 ; ** ADD RECORD SIZE & NEXT RECORD PTR **
- 177 LDX $82; INDEX NEXT CHNL
- 179 LDA $C1,X; NEXT RECORD NUM TABLE
- 181 SEC
- 183 BEQ $E318
- 185 CLC
- 187 ADC $C7,X; RECORD LENGTH TABLE
- 189 BCC $E31B
- 191 BNE $E318
- 193 LDA #$02; SKIP TRK & SEC LINK
- 195 BIT $FECC; #$00 SET FLAGS
- 197 RTS
- 199 ADC #$01; ADJUST LINK
- 201 SEC
- 203 RTS
- 205 ; ** ADD BLKS TO RELATIVE FILE **
- 207 JSR $D1D3; SET DRV NUM
- 209 JSR $E1CB; SET END OF FILE
- 211 JSR $E29C; POSISTION CORRECT DATA BLKS IN BUFF
- 213 JSR $CF7B; SET UP DOUBLE BUFF
- 215 LDA $D6; INDEX SIDE SECT
- 217 STA $87; TEMP RESULT
- 219 LDA $D5; NUM SIDE SECT
- 221 STA $86; TEMP RESULT
- 223 LDA #$00; CLEAR 1 BLK FLAG
- 225 STA $88; TEMP RESULT
- 227 LDA #$00
- 229 STA $D4; START OF RECORD PTR
- 231 JSR $CE0E; CALCULATE SIDE SEC PTRS
- 233 JSR $EF4D; CALCULATE FREE BLKS
- 235 LDY $82; INDEX CURRENT CHNL
- 237 LDX $C7,Y; RECORD LENGTH TABLE
- 239 DEX
- 241 TXA
- 243 CLC
- 245 ADC $D7; RECORD PTR
- 247 BCC $E355; NO SPAN TO NEXT BLK
- 249 INC $D6; SIDE SEC PTR
- 251 INC $D6
- 253 BNE $E355
- 255 INC $D5; SIDE SEC NUM
- 257 LDA #$10; SIDE SEC OFFSET
- 259 STA $D6
- 261 LDA $87; SIDE SEC INDEX
- 263 CLC
- 265 ADC #$02
- 267 JSR $DEE9; SET DIRECT BUFF & BUFF TAB
- 269 LDA $D5; SIDE SEC NUM
- 271 CMP #$06; NUM OF SIDE SEC LINKS
- 273 BCC $E368; VALID RANGE < = #$06
- 275 LDA #$52; CODE FILE TOO BIG
- 277 JSR $C1C88; ERROR HANDLING
- 279 LDA $D6; SIDE SEC PTR
- 281 SEC
- 283 SBC $87; SIDE SEC INDEX
- 285 BCS $E372
- 287 SBC #$0F; SIDE SEC INDEX - 1
- 289 CLC
- 291 STA $72; TEMP WORK SIDE SEC INDEXES
- 293 LDA $D5; SIDE SEC NUM
- 295 SBC $86; SIDE SEC NUM
- 297 STA $73; TEMP WORK SIDE SEC NEEDED
- 299 LDX #$00
- 301 STX $70; TEMP WORK ACCUMULATOR
- 303 STX $71
- 305 TAX
- 307 JSR $DF51; CALCULATE BLKS NEEDED
- 309 LDA $71; HI BYTE BLKS NEEDED
- 311 BNE $E38F
- 313 LDX $70
- 315 DEX
- 317 BNE $E38F
- 319 INC $88
- 321 CMP $0273; TEMP NUM OF BLKS
- 323 BCC $E39D; ENOUGH BLKS
- 325 BNE $E363; NOT ENOUGH BLKS
- 327 LDA $0272; TEMP NUM OF BLKS
- 329 CMP $70
- 331 BCC $E363; NOT ENOUGH BLKS
- 333 LDA #$01
- 335 JSR $D4F6; READ SECT LINK
- 337 CLC
- 339 ADC #$01
- 341 LDX $82; INDEX CURRENT CHNL
- 343 STA $C1,X; NEXT RECORD NUM TABLE
- 345 JSR $F11E; GET NEXT AVAIL TRK & SEC
- 347 JSR $DDFD; SET TRK & SEC LINK CURRENT BLK
- 349 LDA $88; USED FOR ADD 1 BLK FLAG
- 351 BNE $E3C8
- 353 JSR $DE5E; WRITE BLK TO DSK
- 355 JSR $CF1E; SWITCH BUFFS
- 357 JSR $D6D0; SET HEADER FROM TRK & SEC
- 359 JSR $F11E; GET NEXT AVAIL TRK & SEC
- 361 JSR $DDFD; SET TRK & SEC LINK
- 363 JSR $E2E2; CLEAR BUFF
- 365 JMP $E3D4; WRITE TO DSK
- 367 JSR $CF1E
- 369 JSR $D6D0
- 371 JSR $E2E2:JSR $DE19
- 373 JSR $DE5E
- 375 JSR $DE0C; SET TRK & SEC FROM LINK
- 377 LDA $80; TRK NUM
- 379 PHA
- 381 LDA $81; SECT
- 383 PHA
- 385 JSR $DE3E; SET TRK & SEC FROM LAST SEC READ
- 387 LDA $81
- 389 PHA
- 391 LDA $80
- 393 PHA
- 395 JSR $DF45; CALCULATE SIDE SEC PTR
- 397 TAX
- 399 BNE $E3F9; DONT NEED ANOTHER SIDE SEC
- 401 JSR $E44E; GET ANOTHER SIDE SEC
- 403 LDA #$10; SIDE SEC OFFSET
- 405 JSR $DEE9; SET SIDE SEC PTR
- 407 INC $86; SIDE SEC CTR
- 409 PLA
- 411 JSR $DD8D; WRITE INTO SIDE SEC BUFF
- 413 PLA; SIDE SEC SECT
- 415 JSR $DD8D
- 417 PLA
- 419 STA $81
- 421 PLA
- 423 STA $80
- 425 BEQ $E418; NO MORE BLKS IN FILE
- 427 LDA $86; SIDE SEC CTR
- 429 CMP $D5; END COUNT
- 431 BNE $E3B6; NOT ENOUGH NEW BLKS
- 433 JSR $DF45; GET SIDE SEC PTR
- 435 CMP $D6; END PTR
- 437 BCC $E3B6; ALMOST DONE
- 439 BEQ $E3C8; ONE MORE BLK
- 441 JSR $DF45
- 443 PHA
- 445 LDA #$00
- 447 JSR $DEDC; SET DIREC BUFF W/SIDE SEC PTR
- 449 LDA #$00
- 451 TAY
- 453 STA ($94),Y; SIDE SEC LINK
- 455 INY
- 457 PLA
- 459 SEC
- 461 SBC #$01
- 463 STA ($94),Y
- 465 JSR $DE6C; WRITE BLK SIDE SEC TO DSK
- 467 JSR $D599; WAIT FOR WRITE TO FINISH
- 469 JSR $EEF4; WITE BAM
- 471 JSR $CE0E; FIND REL FILE CALC SS NUM & INDEX
- 473 JSR $CF1E; GET TO BEGINNING BUFF
- 475 ;JSR $DEF8; POSISTION SIDE SEC BUF TAB SS NUM SS INDEX
- 477 *= $E43F
- 479 BVS $E444; OUT OF RANGE
- 481 JMP $E275; OK POSITION RECORD
- 483 LDA #$80; OUT OF RANGE
- 485 JSR $DD97; SET LAST RECORD FLAG
- 487 LDA #$50; CODE NO RECORD ERROR
- 489 JSR $C1C8; ERROR HANDLING
- 491 ; ** CREATE NEW SIDE SEC CHANGE OLD SIDE SECS **
- 493 JSR $F11E; FIND AVAIL TRK & SEC
- 495 JSR $CF1E; TOGGLE TO INAVTIVE BUFF
- 497 JSR $DDF1; WRITE BUFF IF DIRTY
- 499 JSR $DF93; FIND ACTIVE BUFF
- 501 PHA; HOLDS ACTIVE BUFF
- 503 JSR $DEC1; CLEAR THE BUFF
- 505 LDX $82; INDEX CURRENT CHNL
- 507 LDA $CD,X; SIDE SECT TABLE
- 509 TAY
- 511 PLA
- 513 TAX
- 515 LDA #$10; SIDE SECT OFFSET
- 517 JSR $DEA5
- 519 LDA #$00
- 521 JSR $DEDC; SET POINT TO OLD BUFF
- 523 LDY #$02
- 525 LDA ($94),Y; SIDE SEC NUM
- 527 PHA
- 529 LDA #$00
- 531 JSR $D4C8; POINT TO NE SIDE SEC BUFF
- 533 PLA; SIDE SEC NUM
- 535 CLC
- 537 ADC #$01
- 539 STA ($94),Y
- 541 ASL
- 543 ADC #$04
- 545 STA $89; TEMP RESULT POINTS TO NEW SS VALUE
- 547 TAY
- 549 SEC
- 551 SBC #$02
- 553 STA $8A
- 555 LDA $80; TRK NUM
- 557 STA $87
- 559 STA ($94),Y
- 561 INY
- 563 LDA $81; SECT NUM
- 565 STA $88
- 567 STA ($94),Y
- 569 LDY #$00
- 571 TYA
- 573 STA ($94),Y; TRK LINK NEW SIDE SEC
- 575 INY
- 577 LDA #$11
- 579 STA ($94),Y
- 581 LDA #$10; SIDE SECT OFFSET
- 583 JSR $D4C8; SET PTR NEW SIDE SEC
- 585 JSR $DE50; WRITE SIDE SEC TO DSK
- 587 JSR $D599; WAIT FOR WRITE TO FINISH
- 589 ; ** NEW SIDE SEC FINISHED UPDATE OLD SIDE SEC **
- 591 LDX $82; INDEX CURRENT CHNL
- 593 LDA $CD,X; SIDE SECT TABLE
- 595 PHA
- 597 JSR $DF9E; GET ACTIVE BUFF NUM
- 599 LDX $82
- 601 STA $CD,X
- 603 PLA
- 605 LDX $0257; LAST BUFF USED
- 607 STA $A7,X; CHNL STATUS BUFF
- 609 LDA #$00
- 611 JSR $D4C8; SET PTR NEW SIDE SEC
- 613 LDY #$00
- 615 LDA $80; TRK NUM
- 617 STA ($94),Y
- 619 INY
- 621 LDA $81; SECT NUM
- 623 STA ($94),Y
- 625 JMP $E4DE
- 627 JSR $DF93; GET ACTIVE BUFF NUM
- 629 LDX $82; INDEX CURRENT CHNL
- 631 JSR $DF1B; READ NEXT SIDE SEC NUM
- 633 LDA #$00
- 635 JSR $D4C8
- 637 DEC $8A
- 639 DEC $8A
- 641 LDY $89; PTR INTO BUFF
- 643 LDA $87; NEW SIDE SEC TRK PTR
- 645 STA ($94),Y
- 647 INY
- 649 LDA $88; NEW SIDE SEC PTR
- 651 STA ($94),Y
- 653 JSR $DE5E; WRITE REVISED SECT
- 655 JSR $D599; WAIT FOR WRITE TO FINISH
- 657 LDY $8A
- 659 CPY #$03
- 661 BCS $E4D1; MORE SIDE SEC TO UPDATE
- 663 JMP $CF1E; RESET ACTIVE BUFF
- 665 ; ** ERROR MESSAGE TABLE **
- 667 ; $EF4C 00 OK
- 669 ; $E500 20 21 22 23 24 27 READ ERROR
- 671 ; $E50B 52 FILE TOO LARGE
- 673 ; $E517 50 RECORD NOT PRESENT
- 675 ; $E522 51 OVERFLOW IN RECORD
- 677 ; $E52F 25 28 WRITE ERROR
- 679 ; $E533 26 WRITE PROTECT ON
- 681 ; $E540 29 DSK ID MISMATCH
- 683 ; $E546 30 31 32 33 34 SYNTAX ERROR
- 685 ; $E552 60 WRITE FILE OPEN
- 687 ; $E556 63 FILE EXISTS
- 689 ; $E55F 64 FILE TYPE MISMATCH
- 691 ; $E567 65 NO BLK
- 693 ; $E570 66 67 ILLEGAL TRK OR SECT
- 695 ; $E589 61 FILE NOT OPEN
- 697 ; $E592 01 FILES SCRATCHED
- 699 ; $E59F 70 NO CHNL
- 701 ; $E5AA 71 DIRECTORY ERROR
- 703 ; $E5AF 72 DSK FULL
- 705 ; $E5B6 73 CBM DOS V2.6 4030
- 707 ; $E5C8 74 DRV NOT READY
- 709 ; ** TABLE TOKENIZED WORDS **
- 711 ; $E5D5 #$09 ERROR
- 713 ; $E5DB #$0A WRITE
- 715 ; $E5E1 #$03 FILE
- 717 ; $E5E6 #$04 OPEN
- 719 ; $E5EB #$05 MISMATCH
- 721 ; $E5F4 #$06 NOT
- 723 ; $E5F8 #$07 FND
- 725 ; $E5FE #$08 DSK
- 727 ; $E603 #$0B RECORD
- 729 ; ** HANDLE ERRORS FROM CONTROLLER **
- 731 ; A = ERROR CODE NUM
- 733 ; X = COMMAND NUM
- 735 *= $E60A
- 737 PHA
- 739 STX $F9; COMMAND NUM BUFF
- 741 TXA
- 743 ASL
- 745 TAX
- 747 LDA $06,X; TRK COMMAND HEADER
- 749 STA $80; TRK NUM BUFF
- 751 LDA $07,X; SECT COMMAND HEADER
- 753 STA $81; SECT NUM BUFF
- 755 PLA
- 757 AND #$0F
- 759 BEQ $E625; #$ 10 TO 14 ERROR HANDLING
- 761 CMP #$0F; DRV ERROR CODE
- 763 BNE $E627; ERROR HANDLING
- 765 LDA #$74; DRV ERROR
- 767 BNE $E62D; FORCED BRANCH
- 769 LDA #$06:ORA #$20
- 771 TAX
- 773 DEX
- 775 DEX
- 777 TXA
- 779 PHA; DOS ERROR CODE
- 781 LDA $022A:CMP #$00; COMMAND NUM ERROR
- 783 BNE $E644; NOT VALID COMMAND
- 785 LDA #$FF
- 787 STA $022A
- 789 PLA
- 791 JSR $EC67; TRANS ERROR MES ERROR BUFF
- 793 JSR $D042; INIT DRV
- 795 JMP $E648; FINISH ERROR HANDLING
- 797 PLA
- 799 JSR $EC67; TRANS ERROR MESS ERROR BUFF
- 801 JSR $C1BD; CLEAR COMMAND BUFF
- 803 LDA #$00
- 805 STA $02F9; DONT WRITE BAM FLAG
- 807 JSR $C12C; FLASH ERROR LED
- 809 JSR $D4DA; FREE INTERNAL READ/WRITE CHAN
- 811 LDA #$00
- 813 STA $A3; NEXT BYTE IN COMMAND BUFF PTR
- 815 LDA #$45:TXS; CLEAN THE STACK
- 817 LDA $84; ORIGINAL SEC ADDR
- 819 AND #$0F
- 821 STA $83; CURRENT SEC ADDR
- 823 CMP #$0F
- 825 BEQ $E698; COMMAND CHNL ERROR
- 827 SEI
- 829 LDA $79; LISTEN FLAG
- 831 BNE $E688; LISTENING
- 833 LDA $7A; TALK FLAG
- 835 BNE $E680; TALKING
- 837 LDX $83; SEC ADDR
- 839 LDA $022B,X; CHNL STATUS TABLE
- 841 CMP #$FF
- 843 BEQ $E698; INACTIVE BRANCH
- 845 AND #$0F
- 847 STA $82; CURRENT CHNL INDEX
- 849 JMP $E68E
- 851 ; ** TALK ERROR RECOVERY **
- 853 ; RELEASES ALL BUS LINES (null) IDLE
- 855 JSR $D0EB; FIND READ CHNL
- 857 NOP:NOP:NOP
- 859 BNE $E68E; NO READ CHNL
- 861 JSR $D107; FIND A WRITE CHNL
- 863 NOP:NOP:NOP
- 865 ; THE ABOVE CODE USED TO BE JSR $EA4E RELEASE ALL BUS LINE
- 867 JSR $D125; GET FILE TYPE
- 869 ; ABOVE CODE NOT USED ON SOME 1541'S
- 871 CMP #$04; RELATIVE FILE
- 873 BCS $E698
- 875 JSR $D227; FREE CHNL BY SEC ADD
- 877 JMP $EBE7; (null) IDLE
- 879 ; ** CONVERT HEX TO BCD **
- 881 ; A = HEX NUM
- 883 ; ON EXIT A = BCD
- 885 TAX; HEX TO BCD NUM
- 887 LDA #$00
- 889 SED
- 891 CPX #$00
- 893 BEQ $E6AA; CONVERSION DONE
- 895 CLC
- 897 ADC #$01
- 899 DEX
- 901 JMP $E69F; MORE CONVERSION
- 903 ; ** CONVERT BCD TO ASCII **
- 905 ; ON EXIT X = BCD NUM
- 907 ; ($A5),Y = ASCII
- 909 CLD
- 911 TAX
- 913 LSR:LSR:LSR:LSR; DIVIDE BY 16
- 915 JSR $E6B4; CONVERT MOST SIGNIFICANT BIT ASCII
- 917 TXA; ORIGINAL BCD NUM
- 919 AND #$0F; MASK OFF HIGH BITS
- 921 ORA #$30; CONVERT TO ASCII
- 923 STA ($A5),Y
- 925 INY
- 927 RTS
- 929 ; ** TRANSFER ERROR MESSAGE TO ERROR BUFF **
- 931 JSR $C123; TURN OFF ERROR LED
- 933 LDA #$00; CODE NO ERROR
- 935 LDY #$00:STY $80; TRK NUM BUFF
- 937 STY $81; SECT " "
- 939 LDY #$00:LDX #$D5
- 941 STX $A5; POINTS TO ERRO BUFF $02D5
- 943 LDX #$02
- 945 STX $A6
- 947 JSR $E6AB; CONVERT A (BCD) TO ASCII
- 949 LDA #$2C; CODE FOR ","
- 951 STA ($A5),Y; AT END OF ERROR CODE
- 953 INY
- 955 LDA $025D,Y; 1ST CHAR OF ERROR
- 957 STA $0243
- 959 TXA
- 961 JSR $E706; MOVE ERROR MESS ERROR BUFF
- 963 LDA #$2C
- 965 STA ($A5),Y
- 967 INY
- 969 LDA $80; TRK NUM BUFF
- 971 JSR $E69B; CONVERT TRK TO ASCII
- 973 LDA #$2C
- 975 STA ($A5),Y
- 977 INY
- 979 LDA $81; SECT NUM
- 981 JSR $E69B; CONVERT SEC TO ASCII
- 983 DEY
- 985 TYA
- 987 CLC
- 989 ADC #$D5
- 991 STA $0249; POINTS TO START ERROR BUFF
- 993 INC $A5; LO BYTE PTR
- 995 LDA #$88
- 997 STA $F7; READY TO TALK
- 999 RTS
- 1001 ; ** MOVE ERROR MESSAGE FROM ERROR TABLE TO BUFF **
- 1003 TAX; ERROR MESSAGE NUM
- 1005 LDA $86
- 1007 PHA
- 1009 LDA $87
- 1011 PHA; #$86 & 87 USED TEMP PTR
- 1013 LDA #$FC
- 1015 STA $86
- 1017 LDA #$E4
- 1019 STA $87; $E4FC ROM ERROR MESSAGE TABLE
- 1021 TXA; ERROR NUM
- 1023 LDX #$00
- 1025 CMP ($86,X)
- 1027 BEQ $E73D; MATCH FND
- 1029 PHA
- 1031 JSR $E775; ADVANCE PTR
- 1033 BCC $E727; MORE TOO CHK
- 1035 JSR $E775
- 1037 BCC $E722; NOT DONE WITH MESSAGE
- 1039 LDA $87
- 1041 CMP #$E6
- 1043 BCC $E735; MORE TOO CHK
- 1045 BNE $E739; PAST END OF TABLE
- 1047 LDA #$0A
- 1049 CMP $86
- 1051 BCC $E739; PAST END OF TABLE
- 1053 PLA
- 1055 JMP $E718; CONTINUE CHKING
- 1057 PLA
- 1059 JMP $E74D; CNAT FIND NUM IN TABLE
- 1061 JSR $E767; (null) TO END OF ERROR NUMS
- 1063 BCC $E73D; NOT AT END
- 1065 JSR $E754; PUT ERROR NAME IN BUFF
- 1067 JSR $E767
- 1069 BCC $E742; MORE TO DO
- 1071 JSR $E754
- 1073 PLA
- 1075 STA $87
- 1077 PLA
- 1079 STA $86
- 1081 RTS
- 1083 ; ** CHK TOKEN WORD PUT IN BUFF **
- 1085 CMP #$20; MAXIMUM TOKEN NUM + 1
- 1087 BCS $E763; NOT TOKEN WORD
- 1089 TAX
- 1091 LDA #$20
- 1093 STA ($A5),Y; PTR TO TOKEN WORDS
- 1095 INY
- 1097 TXA
- 1099 JSR $E706; ADD TOKEN WORD TO MESSAGE
- 1101 RTS
- 1103 STA ($A5),Y
- 1105 INY
- 1107 RTS
- 1109 ; ** ADVANCE ERROR PTR **
- 1111 INC $86; LO BYTE PTR
- 1113 BNE $E76D
- 1115 INC $87; HI BYTE
- 1117 LDA ($86,X); NEXT CHAR ERROR MESSAGE
- 1119 ASL; SET CARRY FLAG
- 1121 LDA ($86,X)
- 1123 AND #$7F; MASK BIT 7
- 1125 RTS
- 1127 JSR $E76D
- 1129 INC $86
- 1131 BNE $E77E
- 1133 INC $87
- 1135 RTS
- 1137 RTS
- 1139 ; *** CODE FROM $E780 TO E7A1 NO LONGER USED ***
- 1141 ; *** WAS UTILITY LOAD PROGRAMS ***
- 1143 ; *** CAN BE FND ON OLDER DSK DRVS ***
- 1145 *= $E7A2
- 1147 RTS
- 1149 ; ** UTILITY LOADER **
- 1151 LDA #$8D
- 1153 JSR $C268; PARSE COMMAND
- 1155 JSR $F258; KILL PROTECTION DOES NOTHING 1541
- 1157 LDA $0278; FILENAME # 2 CTR
- 1159 PHA
- 1161 LDA #$01
- 1163 STA $0278
- 1165 LDA #$FF
- 1167 STA $86; SET 1ST BYTE FLAG
- 1169 JSR $C44F; LOCATE FILE ON DSK
- 1171 LDA $0280; TRK FILE LINK
- 1173 BNE $E7C5; FILE FND
- 1175 LDA #$39; CODE FILE NOT FND
- 1177 JSR $C1C8; ERROR HANDLING
- 1179 PLA
- 1181 STA $0278; ORIGINAL FILE COUNT
- 1183 LDA $0280; TRK FILE LINK
- 1185 STA $80; TRK NUM BUFF
- 1187 LDA $0285; SECT FILE LINK
- 1189 STA $81; SECT NUM BUFF
- 1191 LDA #$03; CODE USER TYPE
- 1193 JSR $D477; OPEN FILE
- 1195 LDA #$00
- 1197 STA $87; INIT CHKSUM
- 1199 JSR $E839; GET LO BYTE LOAD FROM FILE
- 1201 STA $88
- 1203 JSR $E84B; ADD BYTE TO CHKSUM
- 1205 JSR $E839; GET HI BYTE LOAD ADDR
- 1207 STA $89
- 1209 JSR $E84B; ADD BYTE TO CHKSUM
- 1211 LDA $86
- 1213 BEQ $E7FA; NOT LOAD ADDR
- 1215 LDA $88
- 1217 PHA
- 1219 LDA $89
- 1221 PHA
- 1223 LDA #$00
- 1225 STA $86
- 1227 JSR $E839; GET DATA BYTE COUNT
- 1229 STA $8A
- 1231 JSR $E84B; ADD BYTE TO CHKSUM
- 1233 JSR $E839; GET DATA BYTE FROM FILE
- 1235 LDY #$00
- 1237 STA ($88),Y; STORE BYTE LOAD ADDR
- 1239 JSR $E84B
- 1241 LDA $88
- 1243 CLC
- 1245 ADC #$01
- 1247 STA $88
- 1249 BCC $E817
- 1251 INC $89
- 1253 DEC $8A; BYTE CTR
- 1255 BNE $E802
- 1257 JSR $CA35; GET DATA BYTE W/O EOI
- 1259 LDA $85; CHKSUM
- 1261 CMP $87; COMPUTED CHKSUM
- 1263 BEQ $E82C
- 1265 JSR $DE3E; SET TRK & SEC FROM HEADER
- 1267 LDA #$50; CODE NO RECORD ERROR
- 1269 JSR $E645; ERROR HANDLING
- 1271 LDA $F8; EOI FLAG
- 1273 BNE $E7D8; NOT DONE
- 1275 PLA
- 1277 STA $89
- 1279 PLA
- 1281 STA $88
- 1283 JMP ($0088); INDIRECT JUMP TO ROUTINE
- 1285 ; ** GET BYTE CHK FOR EOI **
- 1287 JSR $CA35; GET BYTE
- 1289 LDA $F8; EOI FLAG
- 1291 BNE $E848; NOT END OF INFO
- 1293 JSR $DE3E; EOI SET TRK & HEADER
- 1295 LDA #$51; CODE FOR EOI
- 1297 JSR $E645; ERROR HANDLING
- 1299 LDA $85; DATA BYTE
- 1301 RTS
- 1303 ; ** CALCULATE CHKSUM **
- 1305 CLC
- 1307 ADC $87
- 1309 ADC #$00
- 1311 STA $87
- 1313 RTS
- 1315 ; ** SERIAL BUS COMMUNICATIONS **
- 1317 ; ** IRQ FOR ATTENTION SENT FROM 64 **
- 1319 LDA $1801; 1801 NOT USED CLEARS IRQ FLAG
- 1321 LDA #$01
- 1323 STA $7C; ATTENTION REQUEST WAITING
- 1325 RTS
- 1327 ; ** ACT ON ATTENTION REQUEST FROM 64 **
- 1329 SEI
- 1331 LDA #$00
- 1333 STA $7C; ATTN REQ WAITING FLAG
- 1335 STA $79; LISTEN FLAG
- 1337 STA $7A; TALK FLAG
- 1339 LDX #$45
- 1341 TXS; CLEAN THE STACK
- 1343 LDA #$80; CODE NO EOI
- 1345 STA $F8; EOI FLAG
- 1347 STA $7D; ATTN MODE FLAG
- 1349 JSR $E9B7; WAIT FOR CLOCK LINE HIGH
- 1351 JSR $E9A5; SET DATA LINE LOW (RESPONSE)
- 1367 LDA $1800
- 1369 ORA #$10; 00010000
- 1371 STA $1800; GET HARDWARE CONTROL
- 1373 LDA $1800
- 1375 BPL $E8D7; ATT SIGNAL (null)NE
- 1377 AND #$04; 00000100
- 1379 BNE $E87B; CLOCK LINE LOW
- 1381 JSR $E9C9; GET COMMAND NUM BYTE
- 1383 CMP #$3F; CODE UNLISTEN
- 1385 BNE $E891
- 1387 LDA #$00
- 1389 STA $79; LISTEN FLAG
- 1391 BEQ $E902; FORCED BRANCH
- 1393 CMP #$5F; CODE UNTALK
- 1395 BNE $E89B
- 1397 LDA #$00
- 1399 STA $7A; TALK FLAG
- 1401 BEQ $E902; FORCED BRANCH
- 1403 CMP $78; TALK ADDR
- 1405 BNE $E8A9
- 1407 LDA #$01
- 1409 STA $7A; SET TALK FLAG
- 1411 LDA #$00
- 1413 STA $79; CLEAR LISTEN FLAG
- 1415 BEQ $E8D2; FORCED BRANCH
- 1417 CMP $77; LISTEN ADDR
- 1419 BNE $E8B7
- 1421 LDA #$01
- 1423 STA $79; LISTEN FLAG
- 1425 LDA #$00
- 1427 STA $7A; TALK FLAG
- 1429 BEQ $E8D2; FORCED BRANCH
- 1431 TAX; COMMAND NUM
- 1433 AND #$60
- 1435 CMP #$60
- 1437 BNE $E8FD; NOT SEC ADDR
- 1439 TXA
- 1441 STA $84; ORIGINAL SEC ADD
- 1443 AND #$0F
- 1445 STA $83; SEC ADDR BUFF
- 1447 LDA $84
- 1449 AND #$F0
- 1451 CMP #$E0; CODE FOR CLOSE
- 1453 BNE $E902
- 1455 CLI
- 1457 JSR $DAC0; CLOSE FILE
- 1459 SEI
- 1461 BIT $1800; TEST FOR ATTN SIGNAL
- 1463 BMI $E884; STILL PRESENT
- 1465 LDA #$00
- 1467 STA $7D; ATTN MODE FLAG
- 1469 LDA $1800; I/O
- 1471 AND #$EF
- 1473 STA $1800; CLEAR ATTN ACK
- 1475 LDA $79; LISTEN FLAG
- 1477 BEQ $E8ED; NO LISTEN
- 1479 JSR $EA2E; LISTEN ROUTINE
- 1481 JMP $EBE7; IDLE LOOP
- 1483 LDA $7A; TALK FLAG
- 1485 BEQ $E8FA; NO TALK
- 1487 JSR $E99C; FREE DATA LINE
- 1489 JSR $E9AE; SET CLOCK LOW
- 1491 JSR $E909; TALK ROUTINE
- 1493 JMP $EA4E; RELEASE LINES (null) IDLE
- 1495 ; ** SET DEVICE NOT PRESENT **
- 1497 LDA #$10
- 1499 STA $1800; ALL LINES OFF EXCEPT ATTN ACK
- 1501 BIT $1800
- 1503 BPL $E8D7; ATTN SIGNAL (null)NE
- 1505 BMI $E902
- 1507 ; ** TALK ROUTINES **
- 1509 SEI
- 1511 JSR $D0EB; FIND READ CHNL
- 1513 BCS $E915; NO READ CHNL
- 1515 LDX $82; INDEX CURRENT CHNL
- 1517 LDA $F2,X; CHNL STATUS BUFF
- 1519 BMI $E916; INACTIVE STATUS OK
- 1521 RTS
- 1523 ; ** VERIFY ATTENTION SIGNAL **
- 1525 JSR $EA59; TEST FOR ATTN SIGNAL
- 1527 JSR $E9C0; TEST CLOCK SIGNAL (null)NE
- 1529 AND #$01
- 1531 PHP; DATA BYTE
- 1533 JSR $E9B7; SET CLOCK LINE HIGH
- 1535 PLP
- 1537 BEQ $E937; VERIFY ERROR SEND EOI
- 1539 JSR $EA59; TEST FOR ATTN SIGNAL
- 1541 JSR $E9C0; TEST DATA LINE LO
- 1543 AND #$01
- 1545 BNE $E925; LINE NOT HI NO RESPONSE
- 1547 LDX $82; INDEX CURRENT CHNL
- 1549 LDA $F2,X; CHNL STATUS
- 1551 AND #$08
- 1553 BNE $E94B; NO EOI
- 1555 ; ** SEND EOI TO 64 **
- 1557 JSR $EA59; TEST FOR ATTN SIGNAL
- 1559 JSR $E9C0; SEND EOI TEST DATA LINE
- 1561 AND #$01
- 1563 BNE $E937; DATA LINE NOT HI NO RESPONSE
- 1565 JSR $EA59
- 1567 JSR $E9C0
- 1569 AND #$01
- 1571 BEQ $E941; DATA LINE NOT LO NO RESPONSE
- 1573 JSR $E9AE; SET CLOCK LINE LO
- 1575 JSR $EA59; TEST FOR ATTN SIGNAL
- 1577 JSR $E9C0; SEND EOI TEST DATA LINE
- 1579 AND #$01
- 1581 BNE $E94B; LINE NOT HI NO RESPONSE
- 1583 LDA #$08
- 1585 STA $98; BIT CTR FOR I/O
- 1587 JSR $E9C0; WAIT FOR RESPONSE
- 1589 AND #$01
- 1591 BNE $E999; LINE NOT HI NO RESPONSE
- 1593 LDX $82; INDEX CURRENT CHNL
- 1595 LDA $023E,X; CHNL DATA BYTE
- 1597 ROR
- 1599 STA $023E,X
- 1601 BCS $E973; SEND A 1 BIT ON BUS
- 1603 JSR $E9A5; SEND A 0 BIT ON BUS
- 1605 BNE $E976; CLOCK THE BIT
- 1607 JSR $E99C; SEND 1 BIT
- 1609 JSR $E9B7; SET CLOCK LINE HI
- 1611 LDA $23; SPEED FLAG
- 1613 BNE $E980; CLOCK SPEED OK
- 1615 JSR $FEF3; SLOW DOWN CLOCK SPEED
- 1617 JSR $FEFB; SET CLOCK LOW RELEASE DATA
- 1619 DEC $98; BIT CTR
- 1621 BNE $E95C; MORE BITS
- 1623 JSR $EA59; TEST ATTN MODE
- 1625 JSR $E9C0; WAIT FOR RESPONSE
- 1627 AND #$01
- 1629 BEQ $E987; NO RESPONSE
- 1631 CLI
- 1633 JSR $D3AA; GET ANOTHER BYTE
- 1635 SEI
- 1637 JMP $E90F; CONTINUE TALK
- 1639 JMP $EA4E; RELEASE ALL LINES (null) IDLE
- 1641 LDA $1800; I/O
- 1643 AND #$FD; DATA OUT LINE HI
- 1645 STA $1800
- 1647 RTS
- 1649 LDA $1800
- 1651 ORA #$02; DATA OUT LINE LO
- 1653 STA $1800
- 1655 RTS
- 1657 LDA $1800
- 1659 ORA #$08; CLOCK LINE LO
- 1661 STA $1800
- 1663 RTS
- 1665 LDA $1800
- 1667 AND #$F7; CLOCK LINE HI
- 1669 STA $1800
- 1671 RTS
- 1673 LDA $1800
- 1675 CMP $1800
- 1677 BNE $E9C0; NO RESPONSE
- 1679 RTS
- 1681 ; ** LISTEN ROUTINES **
- 1683 LDA #$08
- 1685 STA $98; BIT CTR
- 1687 JSR $EA59; TEST ATTN SIGNAL
- 1689 JSR $E9C0; TEST CLOCK LINE SET
- 1691 AND #$04
- 1693 BNE $E9CD; NOT SET NO RESPONSE
- 1695 JSR $E99C; SET DATA LINE HI
- 1697 LDA #$01
- 1699 JMP $FF20; 255 MICR SECOND DELAY
- 1701 JSR $EA59; TEST FOR ATTN SIGNAL
- 1703 LDA $180D; INTERRUPT FLAG REG
- 1705 AND #$40
- 1707 BNE $E9F2; TIMER RUN OUT EOI
- 1709 JSR $E9C0; TEST CLOCK LINE SET
- 1711 AND #$04
- 1713 BEQ $E9DF; NO RSPONSE
- 1715 BNE $EA0B; RESPONSE
- 1717 JSR $E9A5; SET DATA LINE LO RESPONSE
- 1719 LDX #$0A
- 1721 DEX
- 1723 BNE $E9F7; DELAY TURN AROUND TIME
- 1725 JSR $E99C; SET DATA LINE HI
- 1727 JSR $EA59; TEST ATTN SIGNAL
- 1729 JSR $E9C0; TEST CLOCK LINE SET
- 1731 AND #$04
- 1733 BEQ $E9FD; NO RESPONSE
- 1735 LDA #$00
- 1737 STA $F8; EOI FLAG
- 1739 LDA $1800; I/O
- 1741 EOR #$01; FIND COMPLEMENT DATA BIT
- 1743 LSR; SHIFT DATA BIT TO CARRY FLAG
- 1745 AND #$02; TEST CLOCK LINE HI
- 1747 BNE $EA0B; NOT HI (null) BACK
- 1749 NOP:NOP:NOP
- 1751 ROR $85; STORE BIT IN DATA BYTE
- 1753 JSR $EA59; TEST ATTN SIGNAL
- 1755 JSR $E9C0; TEST CLOCK LINE SET
- 1757 AND #$04
- 1759 BEQ $EA1A; NO RESPONSE
- 1761 DEC $98; BIT CTR
- 1763 BNE $EA0B; MORE BITS
- 1765 JSR $E9A5; SET DATA LINE LOW
- 1767 LDA $85; DATA BYTE
- 1769 RTS
- 1771 .F DISK ROM 7
-