'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 |