Byte aus aktueller Datei holen ($d156)
Es wird der Zwei-Puffer-Modus verwendet. Dieser bringt bei der 1581 keinen
Vorteil (sondern nur den Nachteil, dass 2 Puffer gebraucht werden).
E: $50     : Kanalnummer
A: $0234+KN: Kanalstatus
   a       : Byte aus der Datei

Byte aus aktuellem Puffer holen

Einsprung von $871E, $8723, $935C, $93B9, $9B8D:

909B: 20 71 90  JSR $9071        Byte holen
909E: D0 66     BNE $9106        Blockende ? nein, ==>
90A0: 85 54     STA $54          Datenbyte zwischenspeichern
90A2: B9 42 02  LDA $0242,Y      Dateiende ?
90A5: F0 08     BEQ $90AF        nein, ==>
90A7: A9 80     LDA #$80         b7=1: Lesekanal; b3=0: EOI-Flag setzen
90A9: 99 34 02  STA $0234,Y      Kanalstatus setzen
90AC: A5 54     LDA $54
90AE: 60        RTS

T&S des uebernaechsten Blocks holen

Einsprung von $90A5:

90AF: 20 7D 8D  JSR $8D7D        Puffer umschalten (er enthaelt bereits den
90B2: A9 00     LDA #$00         Folgeblock)
90B4: 85 40     STA $40
90B6: A6 50     LDX $50
90B8: B5 D1     LDA $D1,X        Aktuellen Puffer holen
90BA: 10 02     BPL $90BE
90BC: B5 D8     LDA $D8,X

Einsprung von $90BA:

90BE: 29 BF     AND #$BF
90C0: 0A        ASL
90C1: AA        TAX
90C2: B5 BC     LDA $BC,X        Pufferzeiger setzen
90C4: 85 65     STA $65
90C6: A5 40     LDA $40          = 0
90C8: 95 BB     STA $BB,X
90CA: 85 64     STA $64
90CC: 20 71 90  JSR $9071        1. Byte aus Puffer holen
90CF: C9 00     CMP #$00         Ist es der letzter Block der Datei ?
90D1: F0 34     BEQ $9107        ja, ==>
90D3: 85 4D     STA $4D          Folgetrack merken
90D5: 20 71 90  JSR $9071        2. Byte holen
90D8: 85 4E     STA $4E          Folgesektor merken
90DA: 20 7D 8D  JSR $8D7D        Puffer wieder zurueckschalten

oebernaechsten Block einlesen

90DD: A6 50     LDX $50          Was soll das ?
90DF: B5 D1     LDA $D1,X        Puffer holen, die erste
90E1: 10 02     BPL $90E5
90E3: B5 D8     LDA $D8,X

Einsprung von $90E1:

90E5: 29 BF     AND #$BF
90E7: AA        TAX              [Hier ist eine Laufwerksnummernabfrage
                                 entfallen]
                                Puffer holen, die zweite
90E8: A6 50     LDX $50          Kanalnummer holen
90EA: B5 D1     LDA $D1,X        Aktiven Puffer holen
90EC: 10 02     BPL $90F0        (wenn erster nicht aktiv, dann zweiten
90EE: B5 D8     LDA $D8,X        Puffer holen)

Einsprung von $90EC:

90F0: 29 BF     AND #$BF
90F2: 0A        ASL              2-Byte-Tabelle
90F3: A8        TAY
90F4: A5 4D     LDA $4D          T&S des Folgeblocks in Jobpuffer schreiben
90F6: 99 0B 00  STA $000B,Y
90F9: A5 4E     LDA $4E
90FB: 99 0C 00  STA $000C,Y
90FE: 20 FE 8F  JSR $8FFE        Block einlesen
9101: 20 7D 8D  JSR $8D7D        Puffer wieder umschalten
9104: A5 54     LDA $54          Datenbyte zurueckholen

Einsprung von $909E:

9106: 60        RTS

Letzten Dateiblock behandeln

Einsprung von $90D1:

9107: 20 71 90  JSR $9071        Blocklaenge holen
910A: A4 50     LDY $50          und als Blocklaenge des aktuellen
910C: 99 42 02  STA $0242,Y      Kanals merken
910F: A5 54     LDA $54          Datenbyte zurueckholen
9111: 60        RTS

    Previous Page / Next Page