    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