Directory-Zeile im Zwischenpuffer erzeugen ($c6ce)

Einsprung von $B1D0:

854D: A5 52     LDA $52          aktuelle SA retten
854F: 48        PHA
8550: A5 50     LDA $50          aktuelle Kanalnummer retten
8552: 48        PHA
8553: 20 5D 85  JSR $855D        Zeile erzeugen
8556: 68        PLA
8557: 85 50     STA $50          Kanalnummer und SA
8559: 68        PLA
855A: 85 52     STA $52          zurueckholen
855C: 60        RTS

Einsprung von $8553:

855D: A9 11     LDA #$11
855F: 85 52     STA $52          Fuer die SA 17 (lesen) den internen Kanal
8561: 20 27 90  JSR $9027        zum Lesen holen
8564: 20 42 94  JSR $9442        Pufferzeiger holen
8567: AD 6D 02  LDA $026D        Wurde ein Dateiname gefunden ?
856A: 10 05     BPL $8571        ja, ==>
856C: 20 6B 86  JSR $866B        'Blocks Free' ausgeben
856F: 18        CLC
8570: 60        RTS

Einsprung von $856A:

8571: AD A4 02  LDA $02A4        Drivenummer ? [Diese Speicherzelle wird bei
                                 $82a6 auf 0 gesetzt, hier abgefragt und
                                 sonst nicht veraendert]
8574: F0 15     BEQ $858B        (normalerweise immer) ==>

Programm-Leiche

8576: CE A4 02  DEC $02A4        Drivenummer -1
8579: D0 03     BNE $857E        =0 ? nein, ==>
857B: 4C 2D 80  JMP $802D        31, Syntax Error

Einsprung von $8579:

857E: A9 00     LDA #$00
8580: 8D 8E 02  STA $028E        Basic-Zeilennummer (Hi) =0
8583: 8D A4 02  STA $02A4        Drivenummer = 0
8586: 20 27 86  JSR $8627        Dir-Titel erzeugen
8589: 38        SEC
858A: 60        RTS

Filenamen und Dateityp an die richtige Stelle im Puffer schreiben

Einsprung von $8574:

858B: A2 18     LDX #$18         Endposition der Zeile (Position des '<')
858D: A0 1D     LDY #$1D         Position der Filelaenge (Hi) im Directory
858F: B1 64     LDA ($64),Y      Laenge (Hi) holen
8591: 8D 8E 02  STA $028E        und merken
8594: F0 02     BEQ $8598        = 0 ? ja, ==>
8596: A2 16     LDX #$16         >0: Die Dateilaenge ist also 3-stellig
                                [Bei der 1581 koennen zwar auch 4-stellige
                                 Dateilaengen vorkommen, der Filename wird
                                 dann aber zu weit rechts ausgegeben.]

Einsprung von $8594:

8598: 88        DEY
8599: B1 64     LDA ($64),Y      Filelaenge (Lo) holen
859B: 8D 8D 02  STA $028D        und merken
859E: E0 16     CPX #$16         Ist die Filelaenge > 255 (3-stellig) ?
85A0: F0 0A     BEQ $85AC        ja, ==>
85A2: C9 0A     CMP #$0A         < 10 (1-stellig) ?
85A4: 90 06     BCC $85AC        ja, ==>
85A6: CA        DEX
85A7: C9 64     CMP #$64         < 100 (2-stellig) ?
85A9: 90 01     BCC $85AC        ja, ==>
85AB: CA        DEX              Dateilaenge: 100-255 Blocks (3-stellig)

Einsprung von $85A0, $85A4, $85A9:

85AC: 20 1C 86  JSR $861C        Dir-Zeilen-Puffer loeschen
85AF: B1 64     LDA ($64),Y      y=0: Filetyp holen
85B1: 48        PHA
85B2: 0A        ASL              b6=1 (Scratch-Schutz) ?
85B3: 10 05     BPL $85BA        nein, ==>
85B5: A9 3C     LDA #$3C
85B7: 9D AD 02  STA $02AD,X      '<' in Puffer schreiben

Einsprung von $85B3:

85BA: 68        PLA
85BB: 29 0F     AND #$0F         Filetyp isolieren
85BD: A8        TAY
85BE: B9 B7 DB  LDA $DBB7,Y      3. Buchstabe des Filetypes
85C1: 9D AC 02  STA $02AC,X      in Puffer schreiben
85C4: CA        DEX
85C5: B9 B1 DB  LDA $DBB1,Y      2. Buchstabe des Filetypes
85C8: 9D AC 02  STA $02AC,X      in Puffer schreiben
85CB: CA        DEX
85CC: B9 AB DB  LDA $DBAB,Y      1. Buchstabe des Filetypes
85CF: 9D AC 02  STA $02AC,X      in Puffer schreiben
85D2: CA        DEX
85D3: CA        DEX              File ordnungsgemaess geschlossen ?
85D4: B0 05     BCS $85DB        ja, ==>
85D6: A9 2A     LDA #$2A
85D8: 9D AD 02  STA $02AD,X      '*' in Puffer schreiben

Einsprung von $85D4:

85DB: A9 A0     LDA #$A0         ein Freiraum lassen
85DD: 9D AC 02  STA $02AC,X      [Es wird 'Shift-Space' verwendet, damit
                                 auch bei 16 Zeichen langen Filenamen das
85E0: CA        DEX               zweite '"' an die richtige Stelle kommt.]
85E1: A0 12     LDY #$12         Filenamen kopieren

Einsprung von $85EC:

85E3: B1 64     LDA ($64),Y
85E5: 9D AC 02  STA $02AC,X
85E8: CA        DEX
85E9: 88        DEY
85EA: C0 03     CPY #$03         Anfang (T&S des Files) erreicht ?
85EC: B0 F5     BCS $85E3        nein, ==>

Filenamen in '"' einschliessen

85EE: A9 22     LDA #$22
85F0: 9D AC 02  STA $02AC,X      '"' am Namensanfang setzen

Einsprung von $8601:

85F3: E8        INX
85F4: E0 20     CPX #$20         Zeilenende erreicht ?
85F6: B0 0B     BCS $8603        ja, ==>
85F8: BD AC 02  LDA $02AC,X      Zeichen aus Filenamen holen
85FB: C9 22     CMP #$22'        = '"' ?
85FD: F0 04     BEQ $8603        ja, ==>
85FF: C9 A0     CMP #$A0         = 'Shift-Space' ?
8601: D0 F0     BNE $85F3        nein, ==>

Einsprung von $85F6, $85FD:

8603: A9 22     LDA #$22'        zweites '"' setzen
8605: 9D AC 02  STA $02AC,X
vom '"' bis zum Zeilenende alle Zeichen 'entshiften' (b7 loeschen)

Einsprung von $8615:

8608: E8        INX
8609: E0 20     CPX #$20         Zeilenende erreicht ?
860B: B0 0A     BCS $8617        ja, ==>
860D: A9 7F     LDA #$7F
860F: 3D AC 02  AND $02AC,X      b7=0
8612: 9D AC 02  STA $02AC,X
8615: 10 F1     BPL $8608        immer ==>

Einsprung von $860B:

8617: 20 04 83  JSR $8304        naechsten Dir-Eintrag holen
861A: 38        SEC
861B: 60        RTS

Directoryzeilen-Puffer loeschen ($c7ac)

Einsprung von $85AC, $862D, $866B:

861C: A0 1B     LDY #$1B
861E: A9 20     LDA #$20         Puffer mit Spaces fuellen

Einsprung von $8624:

8620: 99 AB 02  STA $02AB,Y
8623: 88        DEY
8624: D0 FA     BNE $8620
8626: 60        RTS

Directory-Titel erzeugen ($c7b7)

Einsprung von $8586, $9942:

8627: 20 AE 84  JSR $84AE        Laufwerk ggf. initialisieren
862A: 20 33 B6  JSR $B633        Verzeichnis-Header lesen
862D: 20 1C 86  JSR $861C        Dir-Zeilen-Puffer loeschen
8630: A9 FF     LDA #$FF
8632: 85 40     STA $40
8634: A9 00     LDA #$00         Basic-Zeilennummer (Drivenummer) = 0
8636: 8D 8D 02  STA $028D
8639: 8D 8E 02  STA $028E
863C: A6 6C     LDX $6C          aktuelle Puffernummer holen
863E: BD F1 01  LDA $01F1,X      Pufferadresse holen
8641: 85 65     STA $65
8643: AD 77 DB  LDA $DB77        Position des Disknamens holen
8646: 85 64     STA $64
8648: A0 16     LDY #$16         22 Bytes Disknamen+ID

Einsprung von $8656:

864A: B1 64     LDA ($64),Y      in Dir-Zeile kopieren
864C: C9 A0     CMP #$A0
864E: D0 02     BNE $8652        Shift-Spaces in Spaces umwandeln
8650: A9 20     LDA #$20

Einsprung von $864E:

8652: 99 AE 02  STA $02AE,Y
8655: 88        DEY
8656: 10 F2     BPL $864A
8658: A9 12     LDA #$12         RVS-ON an Pufferanfang setzen
865A: 8D AC 02  STA $02AC
865D: A9 22     LDA #$22         Filenamen in '"' einschliessen
865F: 8D AD 02  STA $02AD
8662: 8D BE 02  STA $02BE
8665: A9 20     LDA #$20         Zeichen vor der ID = 'Space'
8667: 8D BF 02  STA $02BF
866A: 60        RTS

'Blocks Free'-Meldung ausgeben ($c806)

Einsprung von $856C:

866B: 20 1C 86  JSR $861C        Ausgabepuffer loeschen
866E: A0 0B     LDY #$0B

Einsprung von $8677:

8670: B9 7C 86  LDA $867C,Y      Meldung in Puffer kopieren
8673: 99 AC 02  STA $02AC,Y
8676: 88        DEY
8677: 10 F7     BPL $8670
8679: 4C 5B B6  JMP $B65B        Freie Blocks als Basic-Zeilennummer merken

867C: 42 4C 4F 43 4B 53 20 46  blocks f
8684: 52 45 45 2E              ree.
    Previous Page / Next Page