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