'Stehlen' eines inaktiven Puffers ($d339)
A: a: gestohlener Puffer ($ff: kein Puffer gefunden)
[Wenn alle Puffer belegt sind, und trotzdem noch ein Puffer benoetigt wird,
 kann mit dieser Routine ein 'inaktiver Puffer' freigegeben werden.
 Inaktive Puffer enthalten normalerweise:
 - Daten, die von der 2-Puffer-Automatik im Voraus geladen worden sind, und
   die noch nicht sofort gebraucht werden (Diese Daten muessen spaeter ein
   zweites Mal geladen werden),
 - oder Daten, die abgespeichert werden sollen, sobald der Schreib-/Lese-
   kopf positioniert worden ist (In diesem Fall muss man nur den Schreib-
   vorgang abwarten).
 Dieses Konzept ist bei der 1581 jedoch nicht mehr sinnvoll, da das DOS so
 lange fast voellig angehalten wird, bis alle Schreib-/Lesejobs erledigt
 sind und das Laden und Speichern deshalb nicht mehr im Hintergrund
 geschieht.]

Einsprung von $920B:

9291: A5 40     LDA $40          Zwischenspeicher merken
9293: 48        PHA
9294: A0 00     LDY #$00

Einsprung von $92B0:

9296: B6 DF     LDX $DF,Y        am laengsten nicht benutzte Kanaele zuerst
9298: B5 D1     LDA $D1,X        testen
929A: 10 04     BPL $92A0        1. Puffer aktiv, dann ==>
929C: C9 FF     CMP #$FF         besitzt Kanal einen 1. Puffer ?
929E: D0 16     BNE $92B6        ja, versuchen zu 'stehlen' ==>

Einsprung von $929A, $92CB:

92A0: 8A        TXA
92A1: 18        CLC
92A2: 69 08     ADC #$08         2. Puffer testen
92A4: AA        TAX
92A5: B5 D1     LDA $D1,X
92A7: 10 04     BPL $92AD        Puffer aktiv, dann ==>
92A9: C9 FF     CMP #$FF         besitze Kanal einen 2. Puffer ?
92AB: D0 09     BNE $92B6        ja, versuchen zu 'stehlen' ==>

Einsprung von $92A7, $92CD:

92AD: C8        INY              naechsten Kanal versuchen
92AE: C0 06     CPY #$06
92B0: 90 E4     BCC $9296
92B2: A2 FF     LDX #$FF         keinen 'stehlbaren' Puffer gefunden
92B4: D0 20     BNE $92D6        immer ==>
Versuchen, den gefundenen Puffer zu stehlen

Einsprung von $929E, $92AB:

92B6: 86 40     STX $40          Kanalnummer (ggf. +8: 2. Puffer) merken
92B8: 29 3F     AND #$3F         Puffernummer isolieren
92BA: AA        TAX

Einsprung von $92BD:

92BB: B5 02     LDA $02,X        evtl. Job abwarten
92BD: 30 FC     BMI $92BB
92BF: C9 02     CMP #$02         ist ein Fehler aufgetreten ?
92C1: 90 0C     BCC $92CF        nein, ==>
92C3: C9 0F     CMP #$0F
92C5: F0 08     BEQ $92CF        Drive not ready ?, ==>
92C7: A6 40     LDX $40          Lesefehler, naechsten Puffer probieren
92C9: E0 08     CPX #$08         weitermachen bei:
92CB: 90 D3     BCC $92A0        2. Puffer, ==>
92CD: B0 DE     BCS $92AD        1. Puffer, naechster Kanal (bzw. Ende) ==>

Einsprung von $92C1, $92C5:

92CF: A4 40     LDY $40          Puffer freigeben
92D1: A9 FF     LDA #$FF
92D3: 99 D1 00  STA $00D1,Y

Einsprung von $92B4:

92D6: 68        PLA              Zwischenspeicher zurueckholen
92D7: 85 40     STA $40
92D9: 8A        TXA              gefundenen Puffer nach A
92DA: 60        RTS

    Previous Page / Next Page