benoetigte Datenbloecke ggf. einlesen ($e29c) Einsprung von $A20D, $A43B: A235: A5 64 LDA $64 Zeiger auf Side-Sektor-Eintrag merken A237: 85 58 STA $58 A239: A5 65 LDA $65 A23B: 85 59 STA $59 A23D: 20 73 A2 JSR $A273 befindet sich der richtige Block im Puffer? A240: F0 22 BEQ $A264 ja, ==> A242: 20 2E 9D JSR $9D2E Puffer ggf. schreiben A245: 20 49 9D JSR $9D49 T&S des Folgeblocks holen A248: A5 4D LDA $4D existiert Folgeblock ? A24A: F0 19 BEQ $A265 nein, ==> [Der naechste Absatz war bei der 1541 fehlerhaft ($e2b4-$e2bf) und fuehrte zu dem Fehlverhalten des 'P'-Befehls] A24C: 20 7D 8D JSR $8D7D Puffer wechseln A24F: 20 73 A2 JSR $A273 enthaelt er den richtigen Block ? A252: D0 11 BNE $A265 nein, ==> A254: 20 49 9D JSR $9D49 T&S des Folgeblocks holen A257: A5 4D LDA $4D existiert Folgeblock ? A259: F0 09 BEQ $A264 nein, ==> A25B: 20 7D 8D JSR $8D7D Puffer wechseln A25E: 20 94 9D JSR $9D94 Folgeblock einlesen A261: 4C 7D 8D JMP $8D7D Puffer wechseln Einsprung von $A240, $A259: A264: 60 RTS Einsprung von $A24A, $A252: A265: A0 00 LDY #$00 T&S des gesuchten Datenblocks dem A267: B1 58 LDA ($58),Y Side-Sektor entnehmen A269: 85 4D STA $4D A26B: C8 INY A26C: B1 58 LDA ($58),Y A26E: 85 4E STA $4E A270: 4C EA 8F JMP $8FEA Block und ggf. Folgeblock lesen Prueft, ob der richtige Daten-Block im Puffer ist Einsprung von $A23D, $A24F: A273: 20 7C 9D JSR $9D7C T&S des aktiven Puffers holen A276: A0 00 LDY #$00 A278: B1 58 LDA ($58),Y T&S im Side-Sektor mit A27A: C5 4D CMP $4D T&S des Datenblocks vergleichen A27C: F0 01 BEQ $A27F Track gleich, ==> A27E: 60 RTS Einsprung von $A27C: A27F: C8 INY A280: B1 58 LDA ($58),Y A282: C5 4E CMP $4E Sektor gleich ? A284: D0 11 BNE $A297 nein, ==> A286: AD 01 01 LDA $0101 Fehler im 1541-ROM behoben: A289: 29 10 AND #$10 Ist das Flag '2. Teil des Records geladen' A28B: F0 0A BEQ $A297 gesetzt ? nein, ==> [Ja: In diesem Fall stimmen zwar T&S des aktiven Datenpuffers, es befindet sich aber unter Umstaenden nicht der Folgeblock im anderen Puffer, sondern der vorhergegende (Wenn z.B. der Vorgaenger-Block abgespeichert werden muss, kann die 2-Puffer-Automatik den uebernaechsten Block nicht schon im Voraus lesen). Dies merkt die Routine, die das letzte benutzte Zeichen im Record sucht (s. $a0fd), nicht und sucht bei der 1541 im falschen Block. Bei der 1581 werden deshalb vorsichtshalber beide Blocks neu geladen, wenn der letzte Record beim Lesen/Schreiben einen Pufferwechsel noetig gemacht hat.] A28D: AD 01 01 LDA $0101 Flag '2. Teil des Records geladen' A290: 29 EF AND #$EF loeschen A292: 8D 01 01 STA $0101 A295: 49 10 EOR #$10 z-Flag loeschen (= falscher Block im Puffer) Einsprung von $A284, $A28B: A297: 60 RTS Previous Page / Next Page |