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 |