Puffer wechseln im Zwei-Puffer-Betrieb ($cf1e)
ggf. wird, wenn ein Puffer 'gestohlen' wurde, ein neuer Puffer gesucht
und mit den benoetigten Daten gefuellt.

Einsprung von $8FF2, $8FFB, $90AF, $90DA, $9101, $912D, $99CB, $9A47, $9A6F,
              $9FCA, $9FDD, $9FF2, $9FF8, $A11E, $A12B, $A12E, $A24C, $A25B,
              $A261, $A394, $A3A6, $A423, $A45C, $A4FA, $A544:

8D7D: 20 68 8D  JSR $8D68        Kanalnummer ans Tabellenende
8D80: A6 50     LDX $50
8D82: B5 D1     LDA $D1,X        1. Puffer inaktiv ?
8D84: 30 02     BMI $8D88        Ja, ==>
8D86: B5 D8     LDA $D8,X        2. Puffer unbelegt ?

Einsprung von $8D84:

8D88: C9 FF     CMP #$FF         (bzw. 1. Puffer unbelegt ?)
8D8A: F0 18     BEQ $8DA4        Ja, neuen Puffer suchen ==>
8D8C: B5 D1     LDA $D1,X        Aktiven Puffer wechseln
8D8E: 49 80     EOR #$80         dazu:
8D90: 95 D1     STA $D1,X        1. Puffer umschalten,
8D92: 48        PHA
8D93: B5 D8     LDA $D8,X        2. Puffer umschalten
8D95: 49 80     EOR #$80
8D97: 95 D8     STA $D8,X
8D99: A8        TAY
8D9A: 68        PLA              Aktiven Puffer nach A
8D9B: 10 01     BPL $8D9E        1. Puffer aktiv, dann ==>
8D9D: 98        TYA              2. Puffer ist aktiv

Einsprung von $8D9B:

8D9E: 29 BF     AND #$BF
8DA0: AA        TAX
8DA1: 4C ED 94  JMP $94ED        Alten Job abwarten, Ende ==>

Ersatz fuer gestohlenen Puffer suchen

Einsprung von $8D8A:

8DA4: B5 D1     LDA $D1,X        1. Puffer aktiv ?
8DA6: 10 02     BPL $8DAA        ja, ==>
8DA8: B5 D8     LDA $D8,X        [Das Ergebnis wurde bei der 1541 fuer die

Einsprung von $8DA6:

8DAA: 29 BF     AND #$BF          Drivenummerabfrage verwendet, die bei der
8DAC: A8        TAY               1581 nicht mehr existiert.]

8DAD: 20 04 92  JSR $9204        Puffer suchen
8DB0: 10 05     BPL $8DB7        gefunden, dann ==>
8DB2: A9 70     LDA #$70         70, NO CHANNEL
8DB4: 4C 7C 80  JMP $807C

Einsprung von $8DB0:

8DB7: A6 50     LDX $50          aktuelle Kanalnummer holen
8DB9: 09 80     ORA #$80         neuen Puffer inaktiv setzen
8DBB: B4 D1     LDY $D1,X        Wenn 1. Puffer inaktiv, dann
8DBD: 10 04     BPL $8DC3        1. Puffer neubesetzen
8DBF: 95 D1     STA $D1,X
8DC1: 30 02     BMI $8DC5        immer ==>

Einsprung von $8DBD:

8DC3: 95 D8     STA $D8,X        ansonsten 2. Puffer neubesetzen

Pufferinhalt wieder herstellen

Einsprung von $8DC1:

8DC5: A5 4D     LDA $4D          aktuelle T&S retten
8DC7: 48        PHA
8DC8: A5 4E     LDA $4E
8DCA: 48        PHA

8DCB: A9 01     LDA #$01         Sektornummer aus Puffer holen
8DCD: 85 42     STA $42          (s. $9450)
8DCF: B5 D1     LDA $D1,X        aktiven Puffer holen
8DD1: 10 02     BPL $8DD5
8DD3: B5 D8     LDA $D8,X

Einsprung von $8DD1:

8DD5: 29 BF     AND #$BF
8DD7: A8        TAY
8DD8: B9 F1 01  LDA $01F1,Y      Pufferadresse holen
8DDB: 85 43     STA $43
8DDD: A0 00     LDY #$00
8DDF: B1 42     LDA ($42),Y      Byte holen
8DE1: 85 4E     STA $4E          als aktuelle Sektornummer merken
8DE3: A9 00     LDA #$00         Tracknummer holen
8DE5: 85 42     STA $42          [Vergleichen Sie diesen Absatz mit dem
8DE7: B5 D1     LDA $D1,X         davor. Hier hat doch irgend jemand ganz
8DE9: 10 02     BPL $8DED         offensicht lich mit einer 'Suchen und
8DEB: B5 D8     LDA $D8,X         Ersetzen'-Funktion oder 'Macro'-Funkton

Einsprung von $8DE9:

8DED: 29 BF     AND #$BF          Unterprogramm-Aufrufe durch die ent-
8DEF: A8        TAY               sprechenden Routinen ersetzt (um das DOS
8DF0: B9 F1 01  LDA $01F1,Y       zu beschleunigen). Dabei haette hier ein
8DF3: 85 43     STA $43           einfaches 'dec $42' gleiche Dienste tun
8DF5: A0 00     LDY #$00          koennen.]
8DF7: B1 42     LDA ($42),Y      Byte aus Puffer holen
8DF9: 85 4D     STA $4D          als aktuelle Tracknummer merken
8DFB: F0 2A     BEQ $8E27        letzter Block ? ja, ==>

8DFD: 20 5F 90  JSR $905F        Aktuellen Filetyp holen
8E00: F0 0B     BEQ $8E0D        REL-File ? ja, ==>
8E02: 20 E9 9C  JSR $9CE9        Ist Jobcode = $90 (schreiben) ?
                                [Ein geschriebener Puffer muss ja nicht mehr
                                 eingelesen werden.]
8E05: D0 06     BNE $8E0D        nein, ==>
8E07: 20 4D 8E  JSR $8E4D        Aktiven Puffer wechseln
8E0A: 4C 1E 8E  JMP $8E1E

Einsprung von $8E00, $8E05:

8E0D: A6 50     LDX $50          Aktiven Puffer wechseln
8E0F: B5 D1     LDA $D1,X
8E11: 49 80     EOR #$80
8E13: 95 D1     STA $D1,X
8E15: B5 D8     LDA $D8,X
8E17: 49 80     EOR #$80
8E19: 95 D8     STA $D8,X
8E1B: 20 94 9D  JSR $9D94        Lesejob aufrufen

Einsprung von $8E0A:

8E1E: 68        PLA
8E1F: 85 4E     STA $4E          T&S zurueckholen
8E21: 68        PLA
8E22: 85 4D     STA $4D
8E24: 4C 30 8E  JMP $8E30

Einsprung von $8DFB:

8E27: 68        PLA              T&S zurueckholen
8E28: 85 4E     STA $4E
8E2A: 68        PLA
8E2B: 85 4D     STA $4D
8E2D: 20 4D 8E  JSR $8E4D        aktiven Puffer wechseln

Einsprung von $8E24:

8E30: 20 11 9F  JSR $9F11        aktiven Puffer holen
8E33: AA        TAX
8E34: 4C ED 94  JMP $94ED        Jobausfuehrung abwarten

    Previous Page / Next Page