'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