    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