home *** CD-ROM | disk | FTP | other *** search
- 5 ;** TURN ON DRV LED **
- 7 SEI
- 9 LDA #$F7; 11110111 BIT 3 = 0 TURN OFF LED
- 11 AND $1C00; DSK CONTROLLER
- 13 PHA
- 15 LDA $7F; DRV # BUFF ALWAYS 0 ON 1541
- 17 BEQ $C110; WILL ALWAYS TAKE BRANCH
- 19 PLA
- 21 ORA #$00
- 23 BNE $C113
- 25 PLA
- 27 ORA #$08; 00001000 BIT 3 = 1 TURN ON LED
- 29 STA $1C00; DSK CONTROLLER
- 31 CLI
- 33 RTS
- 35 ;** TURN ON DRV LED **
- 37 SEI
- 39 LDA #$08; 00001000 BIT 3 = 1 TURN ON LED
- 41 ORA $1C00; DSK CONTROLLER
- 43 STA $1C00
- 45 CLI
- 47 RTS
- 49 ;** TURN OFF FLASHING ERROR LED **
- 51 LDA #$00
- 53 STA $026C; HOLDS # OF ERROR WORD
- 55 STA $026D; HOLDS LED MASK FOR FLASH (ERROR)
- 57 RTS
- 59 ;** TURN ON ERROR LED **
- 61 SEI
- 63 TXA
- 65 PHA
- 67 LDA #$50
- 69 STA $026C; HOLDS # OF ERROR WORD
- 71 LDX #$00
- 73 LDA $FECA,X; LED MASK FOR DRV 0
- 75 STA $026D; HOLDS LED MASK FOR FLASH (ERROR)
- 77 ORA $1C00;DSK CONTROLLER
- 79 STA $1C00
- 81 PLA
- 83 TAX
- 85 CLI
- 87 RTS
- 89 ;** PARSE CMND STRING IN CMND BUFF ($0200 $0228) **
- 91 LDA #$00
- 93 STA $02F9; DONT WRITE BAM FLG
- 95 LDA $028E; DRV # LAST SUCCESSFUL CMND
- 97 STA $7F; DRV # BUFF
- 99 JSR $E6BC; ROUT TO CLR ALL ERRORS PUT OK IN ERROR MESSAGE
- 101 LDA $84; ORIGINAL SEC ADDR BUFF
- 103 BPL $C160; CHK FOR SEC ADDR #$0F (CMND CHNL)
- 105 AND #$0F
- 107 CMP #$0F
- 109 BEQ $C160
- 111 JMP $D7B4; OPEN ROUT
- 113 JSR $C2B3; INTERPRET CMND IN BUFF ON RET Y = 0
- 115 LDA $(A3),Y; PTR TO CMND BUFF
- 117 STA $0275; CHRTR UNDER PARSER
- 119 LDX #$0B
- 121 LDA $FE89,X; CMND TABLE OF CMND CHRTRS
- 123 CMP $0275
- 125 BEQ $C17A; FND CORRECT CMND
- 127 DEX
- 129 BPL $C16A; CHK NEXT CHRTR
- 131 LDA #$31; CODE FOR BAD CMND
- 133 JMP $C1C8; ERROR ROUT
- 135 STX $022A; CMND CODE BUFF
- 137 CPX #$09; IF #$09 CMND MUST BE PARSED
- 139 BCC $C184; CORRECT ROM ROUT OF CMND
- 141 JSR $C1EE; ROUT TO PARSE CMND
- 143 LDX $022A; CMND CODE BUFF
- 145 LDA $FE95,X; LO BYTE CMND JMP TABLE
- 147 STA $6F; ADDR OF INDIRECT JMP FOR CMND ROUT
- 149 LDA $FEA1,X; HI BYTE CMND JMP TABLE
- 151 STA $70
- 153 JMP ($006F); EXEC THE CMND
- 155 ;** TERMINATE CMND **
- 157 LDA #$00
- 159 STA $02F9; DONT WRITE BAM FLG
- 161 LDA $026C; HOLDS # OF ERROR WORD
- 163 BNE $C1C8; BRANCH ON ERROR
- 165 LDY #$00
- 167 TYA
- 169 STY $80; CURRENT TRK # (0 AFTER USE)
- 171 STY $81; CURRENT SECT # (0 AFTER USE)
- 173 STY $A3; PTR TO CMND BUFF ($0200)
- 175 JSR $E6C7; ROUT FOR ERROR MESSAGE
- 177 JSR $C123; TURN OFF ERROR LED
- 179 LDA #$7F; CURRENT DRV #
- 181 STA $028E; LAST USED DRV BUFF
- 183 TAX
- 185 LDA #$00
- 187 STA $FF,X; DRV BUSY FLG
- 189 JSR $C1BD; ROUT TO CLR CMND BUFF
- 191 JMP $D4DA; CLR INTERNAL CMND CHNLS
- 193 LDY #$28; = LAST BYTE OF CMND BUFF ($0228)
- 195 LDA #$00; FILL CMND BUFF WITH 0'S
- 197 STA $0200,Y
- 199 DEY
- 201 BPL $C1C1
- 203 RTS
- 205 ;** CMND ERROR HANDLING **
- 207 LDY #$00
- 209 STY $80; CURRENT TRK # BUFF
- 211 STY $81; CURRENT SECT # BUFF
- 213 JMP $E645; ROUT FOR ERROR HANDLING
- 215 ;** SIMPLE PARSER **
- 217 LDX #$00
- 219 STX $027A; FILE TABLE PTR
- 221 LDA #$3A; CODE FOR COLON ":"
- 223 JSR $C268; ROUT TO LOOK FOR COLON IN CMND
- 225 BEQ $C1E2; ON RET IF Z FLG = 1 COLON FND
- 227 DEY; Y HOLDS POSISTION OF COLON IN CMND
- 229 DEY
- 231 STY $027A; FILE TABLE PTR
- 233 JMP $C368; ROUT TO SET DRV #
- 235 ;** FIND COLON ":" IN CMND **
- 237 LDY #$00
- 239 LDX #$00
- 241 LDA #$3A; CODE FOR COLON ":"
- 243 JMP $C268; ROUT TO PARSE CMND
- 245 JSR $C1E5; ROUT TO FIND POSISTION IN CMND OF COLON
- 247 BNE $C1F8; ON RET IF Z FLG = 1 COLON FND
- 249 LDA #$34; CODE FOR BAD CMND
- 251 JMP $C1C8; ROUT ROUT FOR CMND ERROR
- 253 ;** COLON ":" FND **
- 255 DEY
- 257 DEY
- 259 STY $027A; FILE TABLE PTR
- 261 ;** CHK FOR COMMA "," BEFORE COLON ":" **
- 263 TXA
- 265 BNE $C1F3; ON RET IF Z FLG = 1 COMMA FND
- 267 LDA #$3D; CODE FOR "="
- 269 JSR $C268; ROUTNE TO PARSE CMND
- 271 TXA
- 273 BEQ $C20A; ON RET IF Z FLG = 1 WILD CARD FND
- 275 LDA #$40; WILD CARD FND SET BIT 6 FILE STREAM IMAGE ($028B)
- 277 ORA #$21; IF WILD CARD FND ALWAYS SET BIT 5 $028B
- 279 STA $028B; FND WILD CARD BUFF
- 281 INX; SETS THE LENGTH OF FILENM 1 & 2
- 283 STX $0277; LENGTH OF FILENM #1 BUFF
- 285 STX $0278; LENGTH OF FILENM #2 BUFF
- 287 LDA $028A; CHK WILD CARD BUFF
- 289 BEQ $C228; IF Z FLG = 0 NO WILD CARDS
- 291 LDA #$80; THERE ARE WILD CARDS SET BIT 8 OF $028B
- 293 ORA $028B
- 295 STA $028B
- 297 LDA #$00; SET PATTERN FLG SO REST OF CMND CAN BE PARSED
- 299 STA $028A; PATTERN FLG
- 301 ;** CHK CMND REMAINING IF ANY **
- 303 TYA; Y HOLDS LENGTH OF CMND
- 305 BEQ $C254; IF Y = 0 NO MORE CMND TO PARSE
- 307 STA $027A,X; FILE TABLE PTR
- 309 LDA $0277; LENGTH FILENM #1 BUFF
- 311 STA $0279; FILENM PTR #2 BUFF
- 313 LDA #$8D; CODE FOR SHIFTED CARRAIGE RET
- 315 JSR $C268; ROUT TO PARSE CMND
- 317 INX; INX TO SET LENGTH OF CMND
- 319 STX $0278; LENGTH FILENM #2 BUFF
- 321 DEX; RESTORE X'S FORMER VALUE TO CONTINUE
- 323 LDA $028A; WILD CARD BUFF
- 325 BEQ $C245; IF 0 NO WILD CARDS
- 327 LDA #$08; WILD CARD FND SET BIT 3 FILENM IMAGE
- 329 CPX $0277; LENGTH OF FILENM #1
- 331 BEQ $C24C; IF FILENM 1 CHRTR BRANCH
- 333 ORA #$04; SET BIT 2 TO INDICATE MORE THAN 1 FILENM
- 335 ORA #$03
- 337 EOR $028B; FILENM IMAGE
- 339 STA $028B
- 341 LDA $028B; CHK IMAGE WITH CMND ENTRY
- 343 LDX $022A; CMND CODE #
- 345 AND $FEA5,X; HI BYTE CMND JMP TABLE
- 347 BNE $C260; IF NOT = BAD SYNTAX
- 349 RTS; (null)OD SYNTAX CONTINUE ON
- 351 ;** HANDLE BAD SYNTAX IN CMND **
- 353 STA $026C; ERROR WORD BUFF FOR RECOVERY OF BAD CMND
- 355 LDA #$30; CODE FOR BAD SYNTAX
- 357 JMP $C1C8; ROUT TO HANDLE ERROR
- 359 ; ** PARSE CMND ROUT **
- 361 ; ON ENTRY THE A REG HOLDS CHARACTER TO FIND
- 363 ; THE Y REG POINTS TO CHRTR IN CMND TO START SEARCH
- 365 ; THE X REG POINTS TO FILENM PTRS ($027A)
- 367 STA $0275; CHRTR UNDER PARSER
- 369 CPY $0274; LENGTH OF CMND BUFF
- 371 BCS $C29E; BRANCH IF = OR GREATER
- 373 LDA $(A3),Y; PTR TO NEXT BYTE IN CMND
- 375 INY
- 377 CMP $0275; CHRTR UNDER PARSER
- 379 BEQ $C2A0; IF = FND CHRTR LOOKING FOR
- 381 CMP #$2A; CHK FOR WILD CARD "*"
- 383 BEQ $C280; IF = FND WILD CARD
- 385 CMP #$3F; CHK FOR WILD CARD "?"
- 387 BNE $C283; IF = FND WILD CARD
- 389 INC $028A; FILENM PRESENT FLG
- 391 CMP #$2C; CODE FOR COMMA ","
- 393 BNE $C26B; IF = COMMA FND
- 395 TYA
- 397 STA $027B,X; FILENM TABLE PTR
- 399 LDA $028A; FILENM PRESENT FLG
- 401 AND #$7F; 01111111
- 403 BEQ $C299; IF 0 NO WILD CARD
- 405 LDA #$80; 10000000
- 407 STA $E7,X; PATTERN FLG FOR WILD CARD
- 409 STA $028A; FILENM PRESENT FLG
- 411 INX; COUNTS # OF FILENMS
- 413 CPX #$04; MAX # OF FILENMS ALLOWED
- 415 BCC $C26B; IF LESS THAN 4 (null) BACK FOR MORE
- 417 LDY #$00; INDICATES CHRTR NOT FND
- 419 LDA $0274; LENGTH OF CMND BUFF
- 421 STA $027B,X; TABLE OF FILENM PTR
- 423 LDA $028A; FILENM PRESENT FLG
- 425 AND #$7F; 01111111
- 427 BEQ $C2B1; IF = NO WILD CARD
- 429 LDA #$80; 10000000
- 431 STA $E7,X; PATTERN FLG WILD CARD FND
- 433 TYA; Y HOLDS CHRTR COUNT SETS Z FLG (FND)
- 435 RTS
- 437 ;** INIT CMND TABLES & PTRS **
- 439 LDY $A3; POINTS TO NEXT BYTE IN CMND BUFF
- 441 BEQ $C2CB
- 443 DEY
- 445 BEQ $C2CA
- 447 LDA $0200,Y; CMND BUFF ($0200 $0228)
- 449 CMP #$0D; CODE FOR CARRAIGE RET
- 451 BEQ $C2CB
- 453 DEY
- 455 LDA $0200,Y
- 457 CMP #$0D
- 459 BEQ $C2CB
- 461 INY; RESET LENGTH OF CMND
- 463 INY
- 465 STY $0274; LENGTH OF CMND BUFF
- 467 CPY #$2A; = MAX LENGTH OF CMND (SETS CARRY FLG)
- 469 LDY #$FF
- 471 BCC $C2DC; IF Z FLG 0 CMND OK
- 473 STY $022A; CMND CODE #
- 475 LDA #$32; CODE TO INDICATE CMND TOO LONG
- 477 JMP $C1C8; ROUT TO HANDLE ERROR
- 479 ;** 0 ALL VARIABLES & PTRS **
- 481 LDY #$00
- 483 TYA
- 485 STA $A3; NEXT BYTE IN CMND BUFF
- 487 STA $0258; RECORD SIZE BUFF (DIRECTORY)
- 489 STA $024A; FILE TYPE BUFF
- 491 STA $0296; FILE TYPE MATCH FLG
- 493 STA $D3; FILENM PTR #1
- 495 STA $0279; FILENM PTR #2
- 497 STA $0277; FILENM #1 CTR
- 499 STA $0278; FILENM #2 CTR
- 501 STA $028A; FILENM PRESENT FLG
- 503 STA $026C; ERROR WORD FLG (RECOVERY)
- 505 LDX #$05
- 507 STA $0279,X; CLR FILENM PTR TABLE
- 509 STA $D7,X; CLR SECT OF DIRECTORY ENTRIES
- 511 STA $DC,X; CLR INDEX OF DIRECTORY ENTRIES
- 513 STA $E1,X; CLR DEFAULT FLGS (ALWAYS 0 1541)
- 515 STA $E6,X; PATTERN, REPLACE, CLOSE, TYPE FLGS
- 517 STA $027F,X; TABLE OF FILENM PTRS
- 519 STA $0284,X; FIRST FILE LINK TRK & SECT TABLES
- 521 DEX
- 523 BNE $C2FD
- 525 RTS
- 527 ; ** SET DRV & TABLE PTRS **
- 529 LDA $0278; FILENM #2 CTR
- 531 STA $0277; FILENM #1 CTR
- 533 LDA #$01
- 535 STA $0278; CLR THE VARIABLES
- 537 STA $0279; FILENM #2 CTR
- 539 LDY $028E; LAST DRV USED FLG
- 541 LDX #$00
- 543 STX $D3; FILENM #1 PTR
- 545 LDA $027A,X; FILENM PTR TABLE
- 547 JSR $C33C; ROUT TO SET DRV #
- 549 LDX $D3; FILENM #1 PTR
- 551 STA $027A,X; FILENM PTR TABLE
- 553 TYA; MOVE DRV # TO Y
- 555 STA $E2,X; DEFAULT FLGS (0 1541)
- 557 INX
- 559 CPX $0278; FILENM #2 CTR
- 561 BCC $C325; BRANCH BACK IF NOT DONE
- 563 RTS
- 565 ; ** SET DRV # FROM TEXT OR DEFAULT TO 0 **
- 567 ; ON ENTRY Y IS DEFAULT DRV
- 569 ; ON EXIT Y IS THE DRV SPECIFIED OR THE DEFAULT DRV
- 571 ; ON ENTRY A IS THE INDEX TO THE CMND BUFF
- 573 TAX
- 575 LDY #$00; MAKE DEFAULT DRV 0
- 577 LDA #$3A; CODE FOR COLON ":"
- 579 CMP $0201,X; FIND SYNTAX IN CMND BUFF
- 581 BEQ $C352; FND COLON ":"
- 583 CMP $0200,X; IF COLON HERE SYNTAX FOR DEFAULT DRV
- 585 BNE $C361; COLON NOT FND
- 587 INX
- 589 TYA; SETS DEFAULT TO 0
- 591 AND #$01
- 593 TAY; RESTORE DRV #
- 595 TXA; RESTORE INDEX TO CMND BUFF
- 597 RTS
- 599 ; ** SET DRV # FROM SYNTAX **
- 601 LDA $0200,X; CMND BUFF
- 603 INX
- 605 INX; TO SET X TO 1ST CHRTR IN CMND
- 607 CMP #$30; ASCII FOR DRV 0
- 609 BEQ $C34D
- 611 CMP #$31; ASCII FOR DRV 1
- 613 BEQ $C34D
- 615 BNE $C34C; IF NOT = DEFAULT DRV
- 617 TYA; TRANSFER DRV FROM Y TO A
- 619 ORA #$80; SET BIT 7 FOR DEFAULT DRV
- 621 AND #$81; CLR ODD BITS
- 623 BNE $C34F; END THIS ROUT
- 625 ; ** SET DRV # FROM ANY SYNTAX **
- 627 LDA #$00
- 629 STA $028B; FILENM IMAGE
- 631 LDY $027A; FILENM PTR TABLE
- 633 LDA $(A3),Y; NEXT BYTE IN CMND BUFF PTR
- 635 JSR $C3BD; ROUT TO FIND 0 OR 1
- 637 ; ON RET A = 0 OR 1 IF DRV NOT SPECIFIED
- 639 ; IF NOT A = #$80 OR #$81 IF SPECIFIED
- 641 BPL $C388; BRANCH NOT SPECIFIED
- 643 INY; PTR TO CMND BUFF
- 645 CPY $0274; CMND LENGTH BUFF
- 647 BCS $C383; BRANCH END OF CMND
- 649 LDY $0274; CMND LENGTH BUFF
- 651 DEY; POINT TO LAST CHRTR IN CMND WITH Y
- 653 BNE $C370
- 655 DEC $028B; FILENM BUFF (BECOMES #$FF FLG DEFAULT)
- 657 LDA #$00; FLG DEFAULT 0
- 659 AND #$01
- 661 STA $7F; DRV # BUFF
- 663 JMP $C100; ROUT TO TURN ON DRV LED
- 665 ; ** TOGGLE DRV # **
- 667 LDA $7F; DRV # BUFF
- 669 EOR #$01; FLIP BIT 0
- 671 AND #$01; MASK BITS 1 TO 7
- 673 STA $7F
- 675 RTS
- 677 ; ** SET PTRS TO ONE FILENM CHK TYPE **
- 679 LDY #$00
- 681 LDA $0277; FILENM #1 CTR
- 683 CMP $0278; FILENM #2 CTR
- 685 BEQ $C3B8; IF = NO SECOND FILENM
- 687 DEC $0278
- 689 LDY $0278
- 691 LDA $027A,Y; FILENM PTR TABLE
- 693 TAY; Y USED TO LOAD FILE TYPE
- 695 LDA $(A3),Y; NEXT BYTE IN CMND BUFF PTR
- 697 LDY #$04; # OF FILE TYPES LESS 1
- 699 CMP $FEBB,Y; HI BYTE FILE TYPE TABLE
- 701 BEQ $C3B8; IF = FND MATCH
- 703 DEY
- 705 BNE $C3B0; LOOK FOR MATCH
- 707 ; IF NO MATCH FND FILE IS DEL TYPE
- 709 TYA; Y HOLDS FILE TYPE
- 711 STA $0296; FILE TYPE MATCH FLG
- 713 RTS
- 715 ; ** TEST A FOR ASCII 0 OR 1 **
- 717 CMP #$30
- 719 BEQ $C3C7
- 721 CMP #$31
- 723 BEQ $C3C7
- 725 ORA #$80; SET BIT 7 (NO MATCH FND)
- 727 AND #$81; CONVERT ASCII TO HEX (SAVE BIT 7)
- 729 RTS
- 731 ; ** SEARCH TO FIND FILE **
- 733 LDA #$00
- 735 STA $6F; TEMPORY WORK BUFF (DRV MASK)
- 737 STA $028D; DRV SEARCH FLG
- 739 PHA; SAVE A
- 741 LDX $0278; FILENM #1 CTR
- 743 PLA ;RESTORE A TO 0
- 745 ORA $6F; DRV MASK
- 747 PHA; SAVE A
- 749 LDA #$01
- 751 STA $6F; TEMP WORK BUFF
- 753 DEX; PTR TO FILENM TABLE
- 755 BMI $C3EF; END OF FILENM
- 757 LDA $E2,X; DEFAULT DRV FLG (0 ON 1541)
- 759 BPL $C3E8; IF DEFAULT BIT 7 SET
- 761 ASL $6F
- 763 ASL $6F
- 765 LSR; IF DRV = 1 CARRY BIT IS SET
- 767 BCC $C3D5; BRANCH BACK
- 769 ASL $6F; DRV WAS 0 IF HERE
- 771 BNE $C3D5; BRANCH BACK
- 773 PLA
- 775 TAX; USE X FOR INDEX
- 777 LDA $C34F,X; SEARCH TABLE
- 779 PHA; SAVE VALUE FROM SEARCH TABLE
- 781 AND #$03
- 783 STA $028C; # OF SEARCHES BUFF
- 785 PLA
- 787 ASL
- 789 BPL $C43C; IF BIT 7 NOT SET BRANCH
- 791 LDA $E2; DEFAULT FLG
- 793 AND #$01
- 795 STA $7F; DRV # BUFF
- 797 LDA $028C; # OF SEARCHES BUFF
- 799 BEQ $C434; IF 0 ONLY ONE DRV
- 801 JSR $C63D; ROUT TO CHK DRV STATUS
- 803 BEQ $C420; IF A 0 DRV READY
- 805 JSR $C38F; ROUT TO TOGGLE DRV #
- 807 LDA #$00
- 809 STA $028C; # OF SEARCHES BUFF
- 811 JSR $C63D; ROUT TO CHK DRV STATUS
- 813 BEQ $C439; ROUT TO TERMINATE
- 815 LDA #$74; IF HERE DRV NOT READY
- 817 JSR $C1C8; ERROR ROUT
- 819 JSR $C38F; ROUT TO TOGGLE DRV #
- 821 JSR $C63D; ROUT TO CHK DRV STATUS
- 823 PHP
- 825 JSR $C38F; ROUT TO TOGGLE DRV #
- 827 PLP
- 829 BEQ $C439; IF Z FLG = 0 SECOND DRV ACTIVE
- 831 LDA #$00; SECOND DRV NOT ACTIVE IF HERE
- 833 STA $028C; # OF SEARCHES BUFF
- 835 BEQ $C439; ONLY ONE DRV BRANCH
- 837 JSR $C63D; CHK DRV STATUS
- 839 BNE $C41B; BRANCH IF DRV NOT READY
- 841 JMP $C100; TURN ON DRV LED
- 843 ROL
- 845 JMP $C400
- 847 ; ** SEARCH TABLE **
- 849 .BYTE 000 128 065; 00 80 41
- 851 .BYTE 001 001 001 001; 01 01 01 01
- 853 .BYTE 129 129 129 129; 81 81 81 81
- 855 .BYTE 066 066 066 066; 42 42 42 42
- 857 ; ** FIND FILE IN CMND **
- 859 JSR $C3CA; SEARCH ROUT
- 861 LDA #$00; IF 0 NOT DELETED OF UNUSED DIRECTORY FILE
- 863 STA $0292; INDEX FIRST ENTRY
- 865 JSR $C5AC; SEARCH DIRECTORY
- 867 BNE $C475; IF NOT 0 (null)OD FILENM FND
- 869 DEC $028C; # OF SEARCHES
- 871 BPL $C462; IF MORE TO SEARCH BRANCH
- 873 RTS
- 875 LDA #$01
- 877 STA $028D; DRV SEARCH FLG
- 879 JSR $C38F; TOGGLE DRV #
- 881 JSR $C100; TURN ON DRV LED
- 883 JMP $C452
- 885 JSR $C617; SEARCH ROUT
- 887 BEQ $C485; FILE NOT FND BRANCH
- 889 JSR $C4D8; COMPARE FILE NAMES
- 891 LDA $028F
- 893 BEQ $C47E; FND FILE BRANCH
- 895 RTS
- 897 LDA $0253; FND FILE FLG
- 899 BMI $C470; IF MINUS MATCH NOT FND
- 901 BPL $C475; FND MATCH LOOK FOR MORE
- 903 LDA $028F; FND FILE FLG
- 905 BEQ $C45C; IF 0 ALL FILES FND
- 907 RTS
- 909 ; ** FIND NEXT FILENM MATCHING ANY FILE **
- 911 JSR $C604; READ NEXT BLK DIRECTORY
- 913 BEQ $C4AA; NO FILES FND BRANCH
- 915 BNE $C4BA; FILES FND BRANCH
- 917 LDA #$01
- 919 STA $028D; DRV SEARCH FLG
- 921 JSR $C38F; TOGGLE DRV
- 923 JSR $C100; TURN ON DRV LED
- 925 ; ** FIND STARTING ENTRY IN DIRECTORY **
- 927 LDA #$00
- 929 STA $0292; INDEX FIRST ENTRY 0 = NOT DELETED OR UNUSED DIRECTORY
- 931 JSR $C5AC; SEARCH ROUT
- 933 BNE $C4BA; IF = (null)OD FILENM FND
- 935 STA $028F; FND FILE FLG
- 937 LDA $028F; FND FILE FLG
- 939 BNE $C4D7; IF NOT 0 ALL FILES FND
- 941 DEC $028C; # OF DRVS BUFF
- 943 BPL $C492; IF MINUS NO MORE DRVS
- 945 RTS
- 947 ; ** KEEP SCANNING DIRECTORY **
- 949 JSR $C617; SEARCH FOR ENTRIES
- 951 BEQ $C4AA; IF 0 NO MORE ENTRIES
- 953 JSR $C4D8; COMPARE FILE NAMES
- 955 LDX $0253; DIRECTORY ENTRY FND FLG
- 957 BPL $C4C9; MATCH FND BRANCH
- 959 LDA $028F; DIRECTORY SEARCH FND FLG
- 961 BEQ $C4B5; ALL FILES FND BRANCH
- 963 BNE $C4D7; ALL FILES NOT FND BRANCH
- 965 LDA $0296; FILE TYPE FND FLG
- 967 BEQ $C4D7; IF EQAUL FND MATCH
- 969 LDA $E7,X; PATTERN TYPE FLG
- 971 AND #$07; FILE TYPE MASK
- 973 CMP $0296; MATCH FND FLG
- 975 BNE $C4B5; MATCH NOT FND BRANCH
- 977 RTS
- 979 ; ** COMPARE FILE NAMES WITH DIRECTORY **
- 981 LDX #$FF; SET TO MINUS
- 983 STX $0253; DIRECTORY ENTRY FND FLG
- 985 INX; = 0
- 987 STX $028A; PATTERN PRESENT FLG
- 989 JSR $C589; CHK FOR UNFND FILES
- 991 BEQ $C4EC; NO UNFND FILES BRANCH
- 993 RTS
- 995 JSR $C594; DECREMENT FILE COUNT
- 997 BNE $C4E6; NO MORE FILES THIS DRV BRANCH
- 999 LDA $7F; DRV # BUFF
- 1001 EOR $E2,X; DEFAULT FLG
- 1003 LSR
- 1005 BCC $C4FE; DRV CORRECT FOR THIS FILE BRANCH
- 1007 AND #$40; USE DEFAULT DRV CHK
- 1009 BEQ $C4E7; NO DEFAULT DRV BRANCH
- 1011 LDA #$02
- 1013 CMP $028C; # OF DRVS BUFF
- 1015 BEQ $C4E7; TWO DRVS CANT USE DEFAULT BRANCH
- 1017 LDA $027A,X; FILENM PTR TABLE
- 1019 TAX; IF HERE THERES A MATCH
- 1021 JSR $C6A6; FIND END OF CMND
- 1023 LDY #$03; Y IS THE PTR
- 1025 JMP $C51D
- 1027 LDA $0200,X; CMND BUFF
- 1029 CMP ($94),Y; DIRECTORY BUFF PTR
- 1031 BEQ $C51B; (null)OD MATCH BRANCH
- 1033 CMP #$3F; CODE FOR "?" WILD CARD
- 1035 BNE $C4E7; NO MATCH BRANCH
- 1037 LDA ($94),Y; DIRECTORY BUFF PTR
- 1039 CMP #$A0; CODE FOR END OF FILENM
- 1041 BEQ $C4E7; TRY NEXT FILENM BRANCH
- 1043 INX
- 1045 INY
- 1047 CPX $0276; COMPARISON LIMIT PTR
- 1049 BCS $C52B; END OF CMND BRANCH
- 1051 LDA $0200,X; CMND BUFF
- 1053 CMP #$2A; CODE FOR "*"
- 1055 BEQ $C535; EVERTHING MATCHES BRANCH
- 1057 BNE $C50A; TRY FOR A MATCH BRANCH
- 1059 CPY #$13
- 1061 BCS $C535; END OF NAME IN DIRECTORY BRANCH
- 1063 LDA $($94),Y; DIRECTORY BUFF PTR
- 1065 CMP #$A0; CODE FOR END OF FILENM
- 1067 BNE $C4E7; NOT END OF NAME BRANCH
- 1069 LDX $0279; FILENM #2 CTR
- 1071 STX $0253; DIRECTORY ENTRY FND FLG
- 1073 LDA $E7,X; PATTERN FLG
- 1075 AND #$80
- 1077 STA $028A; PATTERN PRESENT FLG
- 1079 LDA $0294; INDEX IN BUFF
- 1081 STA $DD,X; INDEX OF DIRECTORY ENTRIES
- 1083 LDA $81; SECT # BUFF
- 1085 STA $D8,X; SECT OF DIRECTORY ENTRIES BUFF
- 1087 LDY #$00
- 1089 LDA ($94),Y; DIRECTORY ENTRY PTR
- 1091 INY
- 1093 PHA; SAVE FILE TYPE
- 1095 AND #$40; CHK FOR LOCKED FILE
- 1097 STA $6F; TEMP WORK BUFF
- 1099 PLA; GET FILE TYPE
- 1101 AND #$DF
- 1103 BMI $C55C; IF MINUS REPLACEMENT FILE BRANCH
- 1105 ORA #$20
- 1107 AND #$27
- 1109 ORA $6F; TEMP WORK BUFF
- 1111 STA $6F
- 1113 LDA #$80
- 1115 AND $E7,X; PATTERN FLG
- 1117 ORA $6F
- 1119 STA $E7,X
- 1121 LDA $E2,X; DEFAULT FLG
- 1123 AND #$80; SAVE DEFAULT BIT
- 1125 ORA $7F; CURRENT DRV # (0)
- 1127 STA $E2,X
- 1129 LDA ($94),Y; DIRECTORY ENTRY PTR
- 1131 STA $0280,X; FILE LINK TRK BUFF
- 1133 INY
- 1135 LDA ($94),Y
- 1137 STA $0285,X; FILE LINK SECT BUFF
- 1139 LDA $0258; RECORD SIZE BUFF
- 1141 BNE $C589; IF NOT 0 CHK FOR UNFND ENTRIES BRANCH
- 1143 LDY #$15
- 1145 LDA ($94),Y; DIRECTORY ENTRY PTR
- 1147 STA $0258; RECORD SIZE BUFF
- 1149 ; ** CHK TABLE FOR UNFND FILES **
- 1151 LDA #$FF
- 1153 STA $028F; DIRECTORY SEARCH FND FLG
- 1155 LDA $0278; FILENM #2 CTR (# OF FILES TO TEST)
- 1157 STA $0279; FILENM #2 PTR
- 1159 DEC $0279
- 1161 BPL $C59A; FILES LEFT BRANCH
- 1163 RTS
- 1165 LDX $0279
- 1167 LDA $E7,X; PATTERN FLG
- 1169 BMI $C5A6; FILE NOT FND BRANCH
- 1171 LDA $0280,X; FILE LINK TRK BUFF
- 1173 BNE $C594; FILE FND BRANCH
- 1175 LDA #$00
- 1177 STA $028F; ALL FILES FND FLG
- 1179 RTS
- 1181 ; ** SEARCH DIRECTORY **
- 1183 LDY #$00
- 1185 STY $0291; SECT OF FIRST AVAIL ENTRY BUFF
- 1187 DEY
- 1189 STY $0253; DIRECTORY ENTRY FND FLG
- 1191 LDA $FE85; #$12 DIRECTORY TRK
- 1193 STA $80; CURRENT TRK# BUFF
- 1195 LDA #$01
- 1197 STA $81; CURRENT SECT# BUFF
- 1199 STA $0293; LAST BLK BUFF = 0 LAST BLK
- 1201 JSR $D475; OPEN INTERNAL READ CHNL
- 1203 LDA $0293; LAST BLK BUFF
- 1205 BNE $C5CA; LAST SECT BRANCH
- 1207 RTS
- 1209 LDA #$07
- 1211 STA $0295; FILE ENTRY COUNT BUFF
- 1213 LDA #$00
- 1215 JSR $D4F6; READ A BYTE
- 1217 STA $0293; LAST BLK BUFF
- 1219 JSR $D4E8; GET ACTIVE BUFF PTR
- 1221 DEC $0295; FILE ENTRY COUNT BUFF
- 1223 LDY #$00
- 1225 LDA ($94),Y; DIRECTORY BUFF PTR
- 1227 BNE $C5FB; NOT DELETED OR BLANK ENTRY BRANCH
- 1229 LDA $0291; FIRST AVAIL SECT BUFF
- 1231 BNE $C617; DELETED FILE ALREADY FND BRANCH
- 1233 JSR $DE3B; SET TRK & SECT FROM HEADER
- 1235 LDA $81; SECT# BUFF
- 1237 STA $0291; SECT FIRST AVAIL ENTRY BUFF
- 1239 LDA $94; DIRECTORY BUFF PTR
- 1241 LDX $0292; INDEX FIRST AVAIL ENTRY BUFF
- 1243 STA $0292
- 1245 BEQ $C617; NEED VALID ENTRIES NOT DELETED BRANCH
- 1247 RTS
- 1249 ; ** FND VALID ENTRY **
- 1251 LDX #$01
- 1253 CPX $0292; INDEX FIRST AVAIL ENTRY BUFF
- 1255 BNE $C62F; NOT VALID ENTRY BRANCH
- 1257 BEQ $C617; WANT DELETED ENTRY NOT VALID BRANCH
- 1259 LDA $FE85; #$12 DIRECTORY TRK
- 1261 STA $80; CURRENT TRK # BUFF
- 1263 LDA $0290; DIRECTORY SECT BUFF
- 1265 STA $81; CURRENT SECT # BUFF
- 1267 JSR $D475; OPEN INTERNAL READ CHNL
- 1269 LDA $0294; CURRENT INDEX IN BUFF
- 1271 JSR $D4C8; SET UP PTR TO ACTIVE BUFF
- 1273 LDA #$FF
- 1275 STA $0253; DIRECTORY ENTRY FND FLG
- 1277 LDA $0295; FILE ENTRY CTR BUFF
- 1279 BMI $C629; NO ENTRIES LEFT TO FIND BRANCH
- 1281 LDA #$20
- 1283 JSR $D1C6
- 1285 JMP $C5D7; PROCESS ENTRY
- 1287 ; ** GET NEXT BUFF OF ENTRIES **
- 1289 JSR $D44D; READ NEXT BLK OF FILE
- 1291 JMP $C5C4; TEST FOR LAST SECT
- 1293 ; ** FND VALID ENTRY SAVE PTRS **
- 1295 LDA $94; DIRECTORY BUFF PTR
- 1297 STA $0294; CURRENT INDEX IN BUFF
- 1299 JSR $DE3B; SET TRK & SECT FROM HEADER
- 1301 LDA $81; CURRENT SECT #
- 1303 STA $0290; DIRECTORY SECT BUFF
- 1305 RTS
- 1307 ; ** CHK FOR DSK & INITAILIZE **
- 1309 LDA $68; AUTO INIT FLG
- 1311 BNE $C669; NO INIT BRANCH
- 1313 LDX $7F; CURRENT DRV # BUFF
- 1315 LSR $1C,X; WRITE PROTECT STAUS FLG
- 1317 BCC $C669; NO CHANGE IN DSK BRANCH
- 1319 LDA #$FF; RET CODE
- 1321 STA $0298; CMND RET FLG
- 1323 JSR $D00E; INIT DRV
- 1325 LDY #$FF; DEFAULT CODE
- 1327 CMP #$02
- 1329 BEQ $C65F; NO SYNC BRANCH
- 1331 CMP #$03
- 1333 BEQ $C65F; NO HEADER BRANCH
- 1335 CMP #$0F
- 1337 BEQ $C65F; NO DRV BRANCH
- 1339 LDY #$00
- 1341 LDX $7F; CURRENT DRV # BUFF
- 1343 TYA
- 1345 STA $FF,X; NO DRV FLG
- 1347 BNE $C669; BAD STATUS BRANCH
- 1349 JSR $D042; INIT DRV
- 1351 LDX $7F; CURRENT DRV # BUFF
- 1353 LDA $FF,X; NO DRV FLG
- 1355 RTS
- 1357 ; ** TRANSFER FILENM FROM BUFF **
- 1359 ; ON ENTRY A IS CMND SIZE
- 1361 ; X IS START INDEX IN CMND
- 1363 ; Y IS BUFF #
- 1365 PHA; SAVE CMND SIZE
- 1367 JSR $C6A6; FIND END OF CMND
- 1369 JSR $C688; TRANSFER CMND BUFF
- 1371 PLA
- 1373 SEC
- 1375 SBC $024B; LENGTH OF CMND
- 1377 TAX
- 1379 BEQ $C687; DONT PAD CMND BRANCH
- 1381 BCC $C687; " " " "
- 1383 ; ** PAD CMND **
- 1385 LDA #$A0; CODE TO PAD WITH
- 1387 STA ($94),Y; DIRECTORY BUFF PTR
- 1389 INY
- 1391 DEX
- 1393 BNE $C681; MORE PAD BRANCH
- 1395 RTS
- 1397 ; ** TRANSFER CMND BUFF **
- 1399 ; X IS INDEX TO BEGINNING OF CMND
- 1401 ; Y IS BUFF PTR
- 1403 TYA
- 1405 ASL
- 1407 TAY
- 1409 LDA $0099,Y; NEXT BYTE IN BUFF PTR
- 1411 STA $94; DIRECTORY BUFF PTR
- 1413 LDA $009A,Y; NEXT BYTE IN BUFF PTR
- 1415 STA $95; DIRECTORY BUFF PTR
- 1417 LDY #$00
- 1419 LDA $0200,X; MOVE FROM CMND BUFF
- 1421 STA ($94),Y; STORE IN DIRECTORY BUFF
- 1423 INY
- 1425 BEQ $C6A5; CMND MOVED BRANCH
- 1427 INX
- 1429 CPX $0276; LIMIT COMPARISON BUFF
- 1431 BCC $C697; MOVE MORE BRANCH
- 1433 RTS
- 1435 ; ** FIND LIMIT (END OF CMND) **
- 1437 LDA #$00
- 1439 STA $024B; LENGTH OF CMND BUFF
- 1441 TXA
- 1443 PHA; SAVE START PTR
- 1445 LDA $0200,X; CMND BUFF
- 1447 CMP #$2C; CODE FOR COMMA ","
- 1449 BEQ $C6C8; END OF CMND BRANCH
- 1451 CMP #$3D; CODE FOR EQUAL "="
- 1453 BEQ $C6C8; END OD CMND BRANCH
- 1455 INC $024B; LENGTH OF CMND BUFF
- 1457 INX
- 1459 LDA #$0F; MAX CMND SIZE
- 1461 CMP $024B
- 1463 BCC $C6C8; CMND FULL BRANCH
- 1465 CPX $0274; CMND SIZE BUFF
- 1467 BCC $C6AD; NOT END OF CMND BRANCH
- 1469 STX $0276; LIMIT COMPARISON BUFF
- 1471 PLA; PULL STARTING PTR
- 1473 TAX
- 1475 RTS
- 1477 ; ** GET FILE ENTRY FROM DIRECTORY **
- 1479 LDA $83; CURRENT SEC ADDR BUFF
- 1481 PHA
- 1483 LDA $82; INDEX CURRENT FILE BUFF
- 1485 PHA
- 1487 JSR $C6DE; GET FILE ENTRY
- 1489 PLA; INDEX CURRENT FILE
- 1491 STA $82; INDEX CURRENT FILE BUFF
- 1493 PLA; CURRENT SEC ADDR
- 1495 STA $83; CURRENT SEC ADDR BUFF
- 1497 RTS
- 1499 ; ** GET FILE ENTRY **
- 1501 LDA #$11; INTERNAL READ SEC ADDR
- 1503 STA $83; CURRENT SEC ADDR BUFF
- 1505 JSR $D0EB; FIND READ CHNL
- 1507 JSR $D4E8; GET ACTIVE BUFF PTR
- 1509 LDA $0253; DIRECTORY ENTRY FND FLG
- 1511 BPL $C6F7; MORE ENTRIES BRANCH
- 1513 LDA $028D; DRV SEARCH FLG
- 1515 BNE $C6FC; ANOTHER DRV TO CHK BRANCH
- 1517 JSR $C806; BLKS FREE MESSAGE
- 1519 CLC
- 1521 RTS
- 1523 LDA $028D; DRV SEARCH FLG
- 1525 BEQ $C71B; NO MORE DRVS BRANCH
- 1527 DEC $028D
- 1529 BNE $C70E; NEW DIRECTORY BRANCH
- 1531 DEC $028D
- 1533 JSR $C38F; SWITCH DRVS
- 1535 JSR $C806; SEND BLK FREE MESSAGE
- 1537 SEC
- 1539 JMP $C38F; SWITCH DRVS
- 1541 LDA #$00
- 1543 STA $0273; # OF BLKS CTR
- 1545 STA $028D; DRV SEARCH FLG
- 1547 JSR $C7B7; NEW DIRECTORY
- 1549 SEC
- 1551 RTS
- 1553 LDX #$18; LENGTH OF ENTRY IN DIRECTORY
- 1555 LDY #$1D; POSISTION OF HI BYTE # OF BLKS
- 1557 LDA ($94),Y; LO BYTE#OF BLKS IN FILE
- 1559 STA $0273; # OF BLKS CTR
- 1561 BEQ $C728
- 1563 LDX #$16; DIRECTORY LENGTH LESS 2
- 1565 DEY; POINTS TO LO BYTE# OF BLKS IN FILE
- 1567 LDA ($94),Y; LO BYTE#OF BLKS IN FILE
- 1569 STA $0272; # OF BLKS CTR
- 1571 CPX #$16
- 1573 BEQ $C73C; MAX DIRECTORY BRANCH
- 1575 CMP #$0A
- 1577 BCC $C73C; CLR NAME BUFF BUFF
- 1579 DEX
- 1581 CMP #$64
- 1583 BCC $C73C
- 1585 DEX
- 1587 JSR $C7AC; BLANK NAME BUFF
- 1589 LDA ($94),Y; FILE TYPE
- 1591 PHA
- 1593 ASL; IF (null)OD TYPE SET CARRY
- 1595 BPL $C748; PULL FILE TYPE
- 1597 LDA #$3C; CODE FOR "<"
- 1599 STA $02B2,X; NAME BUFF
- 1601 PLA; PULL FILE TYPE
- 1603 AND #$0F; MASK HI BITS
- 1605 TAY; INDEX
- 1607 LDA $FEC5,Y; FILE TYPE TABLE
- 1609 STA $02B1,X; NAME BUFF
- 1611 DEX
- 1613 LDA $FEC0,Y; FILE TYPE TABLE
- 1615 STA $02B1,X
- 1617 DEX
- 1619 LDA $FEBB,Y; FILE TYPE TABLE
- 1621 STA $02B1,X
- 1623 DEX
- 1625 DEX
- 1627 BCS $C76B; (null)OD ENTRY BRANCH
- 1629 LDA #$2A; CODE FOR "*" IMPROPERLY CLOSED FILE
- 1631 STA $02B2,X; NAME BUFF
- 1633 LDA #$A0; SHIFTED SPACE BETWEEN NAME & TYPE
- 1635 STA $02B1,X
- 1637 DEX
- 1639 LDY #$12; PTR END OF NAME
- 1641 LDA ($94),Y; MOVE NAME DIRECTORY BUFF
- 1643 STA $02B1,X; TO NAME BUFF
- 1645 DEX
- 1647 DEY
- 1649 CPY #$03
- 1651 BCS $C773; MORE NAME BRANCH
- 1653 LDA #$22; QUOTATION MARK
- 1655 STA $02B1,X; BEFORE NAME
- 1657 INX
- 1659 CPX #$20
- 1661 LDA $02B1,X
- 1663 BCS $C793
- 1665 CMP #$22; QUOTE
- 1667 BEQ $C793; END OF NAME BRANCH
- 1669 CMP #$A0; SHIFTED SPACE
- 1671 BNE $C783; MORE NAME BRANCH
- 1673 LDA #$22; QUOTE
- 1675 STA $02B1,X; END OF NAME QUOTE
- 1677 INX
- 1679 CPX #$20
- 1681 BCS $C7A7; FIND NEXT FILE
- 1683 LDA #$7F
- 1685 AND $02B1,X
- 1687 STA $02B1,X; CLR HI BIT REMAINING CHARCHTERS
- 1689 BPL $C798; MORE CHRTRS BRANCH
- 1691 JSR $C4B5; FIND NEXT FILE
- 1693 SEC
- 1695 RTS
- 1697 ; ** BLANK NAME BUFF **
- 1699 LDY #$1B; LENGTH OF NAME BUFF
- 1701 LDA #$20; CODE FOR SPACE
- 1703 STA $02B2,Y; NAME BUFF
- 1705 DEY
- 1707 BNE $C7B0; MORE SPACE BRANCH
- 1709 RTS
- 1711 ; ** NEW DIRECTORY IN LISTING **
- 1713 JSR $F119; SET BLK ACCESS (BAM) PTR
- 1715 JSR $F0DF; READ BAM TO $0700 $07FF
- 1717 JSR $C7AC; BLANK NAME BUFF
- 1719 LDA #$FF
- 1721 STA $6F; TEMP WORK BUFF
- 1723 LDX $7F; CURRENT DRV # BUFF
- 1725 STX $0272; # OF BLKS BUFF
- 1727 LDA #$00
- 1729 STA $0273; # OF BLKS BUFF
- 1731 LDX $F9; CURRENT CMND #
- 1733 LDA $FEE0,X; HI BYTE PTR DATA BUFF
- 1735 STA $95; DIRECTORY BUFF
- 1737 LDA $FE88; #$90 OFFSET OF NAME IN BAM SECT
- 1739 STA $94; DIRECTORY BUFF
- 1741 LDY #$16; MAX NAME LENGTH
- 1743 LDA ($94),Y; PTR DIRECTORY BUFF
- 1745 CMP #$A0; SHIFTED SPACE
- 1747 BNE $C7ED; STORE CHRTR BRANCH
- 1749 LDA #$31; ASCII 1
- 1751 BIT $94B1; ** FORCES BRANCH TO $C7ED **
- 1753 CMP #$A0; SHIFTED SPACE
- 1755 BNE $C7ED; NOT SHIFTED SPACE BRANCH
- 1757 LDA #$20; CODE FOR SPACE
- 1759 STA $02B3,Y; NAME BUFF
- 1761 DEY
- 1763 BPL $C7E5; MORE CHRTRS BRANCH
- 1765 LDA #$12; CODE REVERSE PRINT
- 1767 STA $02B1; NAME BUFF
- 1769 LDA #$22; CODE FOR QUOTE
- 1771 STA $02B2; NAME BUFF
- 1773 STA $02C3; END OF NAME BUFF
- 1775 LDA #$20; CODE FOR SPACE
- 1777 STA $02C4; SPACE BETWEEN NAME ("NAME"X)
- 1779 RTS
- 1781 ; ** SET UP BLKS FREE MESSAGE **
- 1783 JSR $C7AC; BLANK NAME BUFF
- 1785 LDY #$0B; MESSAGE LENGTH - 1
- 1787 LDA $C817,Y; BLKS FREE MESSAGE
- 1789 STA $02B1,Y; NAME BUFF
- 1791 DEY
- 1793 BPL $C80B; MORE MESSAGE BRANCH
- 1795 JMP $EF4D; GET # OF FREE BLKS
- 1797 .FILE DISK ROM 2
-