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