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