naechsten Eintrag im Directory suchen : ($c5ac) E: $73 = 0 oder $73 <>1 und $72<>0 : belegten Eintrag suchen (bei der ersten Suche muss $73=0 gesetzt werden um den Rest muss man sich nicht kuemmern) $73 = 1 und $72=0 : freien Eintrag suchen (findet immer nur den ersten Eintrag) A: $72: Sektor, in dem der 1. freie Eintrag gefunden wurde $73: Position des freien Eintrages im Dir-Block $71 : Sektor des naechsten belegten Eintrages $0232: Position des Eintrages im Dir-Block z: 1: (BEQ) keinen Eintrag gefunden; 0: Suche erfolgreich Suche vorbereiten (1. Eintrag suchen) Einsprung von $82C0, $82F1, $95D0, $B26F: 8424: A0 00 LDY #$00 Zeiger auf den 1. Block, in dem sich ein 8426: 84 72 STY $72 freier Eintrag befindet, loeschen 8428: 88 DEY 8429: 8C 6D 02 STY $026D $ff: noch keinen Eintrag gefunden 842C: AD 2B 02 LDA $022B Directory Track merken 842F: 85 4D STA $4D als aktuelle Tracknummer und 8431: AD E5 01 LDA $01E5 1. Direktory-Sektor merken als 8434: 85 4E STA $4E aktuelle Sektornummer und als 8436: 8D A6 02 STA $02A6 naechster Verzeichnissektor 8439: 20 CF 93 JSR $93CF fuer SA 17 Lesekanal suchen, 1. Block lesen Eintrag suchen Einsprung von $849E: 843C: AD A6 02 LDA $02A6 Ist noch ein Verzeichnisblock vorhanden 843F: D0 01 BNE $8442 ja, ==> 8441: 60 RTS nein, z=1, Ende ==> Einsprung von $843F: 8442: A9 07 LDA #$07 8 Direktory-Eintraege (0-7) 8444: 8D 31 02 STA $0231 8447: A9 00 LDA #$00 1. Byte aus Dir-Puffer holen 8449: 20 50 94 JSR $9450 (>0: Es folgt noch ein Block) 844C: 8D A6 02 STA $02A6 und merken Einsprung von $8498: 844F: 20 42 94 JSR $9442 Pufferzeiger holen 8452: CE 31 02 DEC $0231 Anzahl der uebrigen Eintraege -1 8455: A0 00 LDY #$00 8457: B1 64 LDA ($64),Y Filetyp <> 0 (nicht geloescht) 8459: D0 14 BNE $846F ja, ==> 845B: A5 72 LDA $72 muss noch ein freier Eintrag gesucht werden? 845D: D0 2A BNE $8489 nein, (schon gefunden) ==> 845F: 20 79 9D JSR $9D79 T&S der aktuellen Datei holen 8462: A5 4E LDA $4E Sektornummer des Dir-Blocks merken 8464: 85 72 STA $72 (loescht gleichzeitig das Such-Flag) 8466: A5 64 LDA $64 Position des freien Eintrages merken 8468: A6 73 LDX $73 (z-Flag setzen, wenn ein belegter Eintrag 846A: 85 73 STA $73 gesucht wird) 846C: F0 1B BEQ $8489 ($73<>0): war freier Eintrag gesucht ? 846E: 60 RTS ja, z=0, Ende ==> belegten Eintrag gefunden Einsprung von $8459: 846F: A2 01 LDX #$01 $73=0: war ein belegter Eintrag gesucht ? 8471: E4 73 CPX $73 8473: D0 2C BNE $84A1 ja, ==> 8475: F0 12 BEQ $8489 nein, weitersuchen ==> Suche bei der letzten gefundenen Datei fortsetzen Einsprung von $82E6, $B2A7: 8477: AD 2B 02 LDA $022B <-- (Dir-Block neu lesen) 847A: 85 4D STA $4D Direktory-Track setzen 847C: A5 71 LDA $71 Block holen, in dem letzter Eintrag 847E: 85 4E STA $4E Eintrag gefunden wurde 8480: 20 CF 93 JSR $93CF fuer SA 17 Lesekanal suchen und Block lesen 8483: AD 32 02 LDA $0232 Zeiger auf letzten Dir-Eintrag holen 8486: 20 22 94 JSR $9422 Pufferzeiger setzen Einsprung von $845D, $846C, $8475, $82CB, $8304, $95F0: 8489: A9 FF LDA #$FF <-- (Dir ist noch im Puffer) 848B: 8D 6D 02 STA $026D $ff: noch keinen Eintrag gefunden 848E: AD 31 02 LDA $0231 Ist noch ein Eintrag im aktuellen Block ? 8491: 30 08 BMI $849B nein, ==> 8493: A9 20 LDA #$20 $20: Laenge eines Dir-Eintrages 8495: 20 38 91 JSR $9138 Pufferzeiger auf naechsten Eintrag setzen 8498: 4C 4F 84 JMP $844F und pruefen Einsprung von $8491: 849B: 20 AA 93 JSR $93AA naechsten Block lesen 849E: 4C 3C 84 JMP $843C Eintrag suchen Position der gefundenen Datei merken Einsprung von $8473: 84A1: A5 64 LDA $64 Zeiger auf den Eintrag merken 84A3: 8D 32 02 STA $0232 84A6: 20 79 9D JSR $9D79 T&S der aktuellen Datei holen 84A9: A5 4E LDA $4E Dir-Block merken, in dem der Eintrag 84AB: 85 71 STA $71 gefunden wurde 84AD: 60 RTS z=0, Ende ==> Previous Page / Next Page |