Burst-Befehl $1f: Fastload (bei der 1571: $9080)
Einsprung von $B8D9:
B8D2: 4C 4C 80 JMP $804C Burst-Load mit langsamen Bus (Ende) ==>
Datei suchen
B8D5: A9 08 LDA #$08 <-- (Einsprung)
B8D7: 24 76 BIT $76 langsamen Bus benutzen ?
B8D9: F0 F7 BEQ $B8D2 ja, (Ende) ==>
B8DB: 20 D4 AC JSR $ACD4 FSM-Bus vorbereiten, auf Ausgabe schalten
B8DE: 20 06 BA JSR $BA06 Filenamen holen
B8E1: B0 59 BCS $B93C Drive 1, dann Fehler
B8E3: 20 AE 84 JSR $84AE Drive ggf. initialisieren
B8E6: A5 6E LDA $6E Drivestatus holen
B8E8: D0 52 BNE $B93C Fehler, (Ende) ==>
B8EA: A9 80 LDA #$80 Flag: 'Datei hat nur einen Block' setzen
B8EC: 85 3C STA $3C
B8EE: 20 64 BA JSR $BA64 Fehlerbehandlung auf eigene Routinen biegen
B8F1: AD 00 02 LDA $0200 '*' als Filename ?
B8F4: C9 2A CMP #$2A
B8F6: D0 0F BNE $B907 nein, ==>
B8F8: A5 4C LDA $4C ja, letztes File laden
B8FA: F0 0B BEQ $B907 kein letztes File, ==>
B8FC: 48 PHA Track des letzten Files merken
B8FD: AD 8B 02 LDA $028B Sektornummer
B900: 8D 9C 02 STA $029C merken
B903: 68 PLA [Die Fehlervektoren werden vergessen !!!]
B904: 4C 41 B9 JMP $B941 Datei laden ==>
Einsprung von $B8F6, $B8FA:
B907: A9 00 LDA #$00
B909: A8 TAY [unnoetig]
B90A: AA TAX
B90B: 8D 91 02 STA $0291 moegl. Position der Laufwerksnummer setzen
B90E: 20 FD 81 JSR $81FD Laufwerksnummer holen
B911: AD 2F 02 LDA $022F Anzahl Dateinamen (=1) merken
B914: 48 PHA
B915: A9 01 LDA #$01 Anzahl Dateinamen =1 setzen
B917: 8D 2F 02 STA $022F
B91A: A9 FF LDA #$FF ['Aufrufadresse gefunden' (hier unnoetig)
B91C: 85 55 STA $55 vgl. &-Befehl $a961-$a974 mit $b90b-$b91e]
B91E: 20 B9 82 JSR $82B9 Datei suchen
B921: 68 PLA Anzahl Dateinamen (1) zurueckholen
B922: 8D 2F 02 STA $022F
B925: 20 95 BA JSR $BA95 Vektoren der Fehlerbehandlung zurueckholen
B928: 24 7C BIT $7C Burst Kommandobyte holen
B92A: 30 08 BMI $B934 b7=1: Dateityp nicht testen ? ja, ==>
B92C: A5 F4 LDA $F4 Dateityp holen
B92E: 29 07 AND #$07 [Fehler aus 1571-DOS beseitigt: nur Datei-
B930: C9 02 CMP #02 TYP ($B0-2) testen.]
B932: D0 05 BNE $B939 Typ = PRG ? nein, ==>
Einsprung von $B92A:
B934: AD 97 02 LDA $0297 Starttrack holen
B937: D0 08 BNE $B941 >0 (Datei gefunden), ==>
Einsprung von $B932:
B939: A2 02 LDX #$02 Datei nicht gefunden
B93B: 2C B $2C
Einsprung von $B8E1, $B8E8:
B93C: A2 0F LDX #$0F kein Laufwerk verfuegbar
B93E: 4C EC B9 JMP $B9EC
Datei laden
Einsprung von $B904, $B937:
B941: 85 4C STA $4C Starttrack merken (letzte benutzte Datei)
B943: A2 00 LDX #$00
B945: 95 0B STA $0B,X Tracknummer in Jobspeicher schreiben
B947: AD 9C 02 LDA $029C Startsektor
B94A: 8D 8B 02 STA $028B fuer 'letzte benutzte Datei' merken
B94D: 95 0C STA $0C,X Sektornummer in Jobspeicher schreiben
- Track ggf. einlesen; Zeiger auf Position im Cache setzen
Einsprung von $B98D:
B94F: 58 CLI
B950: A2 00 LDX #$00 Jobspeicher 0 verwenden
B952: A9 AA LDA #$AA TREAD_DV: Track einlesen; Zeiger $9f setzen
B954: 20 B7 BF JSR $BFB7 Job aufrufen
B957: AA TAX
B958: E0 02 CPX #$02 ist ein Lesefehler aufgetreten ?
B95A: 90 03 BCC $B95F
B95C: 4C D7 B9 JMP $B9D7 ja, ==>
- auf Dateiende pruefen
Einsprung von $B95A:
B95F: 78 SEI
B960: A0 00 LDY #$00 Pufferzeiger (Lo) auf 0 setzen
B962: 84 7E STY $7E
B964: B9 9F 00 LDA $009F,Y Zeiger auf den Block im Cache holen
B967: 29 7F AND #$7F b7 (Flag: 'T&S ins phy. Format gewandelt')
B969: 18 CLC ausblenden
B96A: 65 8C ADC $8C + Cacheanfang
B96C: 85 7F STA $7F als Pufferzeiger (Hi) merken
B96E: B1 7E LDA ($7E),Y Folgetrack holen
B970: F0 1E BEQ $B990 =0 (Dateiende) ? ja, ==>
B972: 06 3C ASL $3C Flag: 'Datei hat nur einen Block' loeschen
B974: 20 FC 01 JSR $01FC Jobrueckmeldung in x als Status ausgeben
- Block uebertragen
B977: A0 02 LDY #$02 Zeiger auf 1. Datenbyte setzen
Einsprung von $B980:
B979: B1 7E LDA ($7E),Y Datenbyte holen
B97B: AA TAX
B97C: 20 FC 01 JSR $01FC und an Computer senden
B97F: C8 INY
B980: D0 F7 BNE $B979 ganzen Block ausgeben, ==>
B982: A2 00 LDX #$00
B984: B1 7E LDA ($7E),Y T&S des Folgeblocks in Jobspeicher
B986: 95 0B STA $0B,X uebernehmen
B988: C8 INY
B989: B1 7E LDA ($7E),Y
B98B: 95 0C STA $0C,X
B98D: 4C 4F B9 JMP $B94F
- letzten Block der Datei ausgeben
Einsprung von $B970:
B990: A2 1F LDX #$1F Meldung: 'letzter Dateiblock' ausgeben
B992: 20 FC 01 JSR $01FC
B995: 24 3C BIT $3C Flag: 'Datei hat nur einen Block' testen
B997: 10 1F BPL $B9B8 Flag geloescht, ==>
- einzigen Block der Datei ausgeben
B999: A0 01 LDY #$01
B99B: B1 7E LDA ($7E),Y Zeiger auf letztes Byte im Block holen
B99D: 38 SEC [+1 waere Anzahl Bytes im Block]
B99E: E9 03 SBC #$03 -3 [2 Bytes Verkettungszeiger und
B9A0: 85 38 STA $38 2 Bytes Startadresse
B9A2: AA TAX 1 Byte ist schon abgezogen ==> -3.]
B9A3: 20 FC 01 JSR $01FC Anzahl Bytes ausgeben
B9A6: C8 INY
B9A7: B1 7E LDA ($7E),Y Startadresse (Lo) ausgeben
B9A9: AA TAX [Der Computer zaehlt bei der Startadresse
B9AA: 20 FC 01 JSR $01FC die Anzahl uebertragener Bytes nicht
B9AD: C8 INY weiter.]
B9AE: B1 7E LDA ($7E),Y Startadresse (Hi) ausgeben
B9B0: AA TAX
B9B1: 20 FC 01 JSR $01FC
B9B4: A0 04 LDY #$04 Zeiger auf Byte 4 setzen
B9B6: D0 0D BNE $B9C5 ==>
- Datei enthaelt mehrere Bloecke
Einsprung von $B997:
B9B8: A0 01 LDY #$01
B9BA: B1 7E LDA ($7E),Y Zeiger auf letztes Byte im Block holen
B9BC: AA TAX [+1 waere Anzahl Bytes im Block]
B9BD: CA DEX -1 [2 Bytes Verkettungszeiger
B9BE: 86 38 STX $38 1 Byte ist schon abgezogen == -1.]
B9C0: 20 FC 01 JSR $01FC Anzahl Bytes ausgeben
B9C3: A0 02 LDY #$02
- Datenbytes des letzten Blocks ausgeben
Einsprung von $B9B6, $B9CE:
B9C5: B1 7E LDA ($7E),Y Datenbyte holen
B9C7: AA TAX
B9C8: 20 FC 01 JSR $01FC und ausgeben
B9CB: C8 INY
B9CC: C6 38 DEC $38 Anzahl auszugebender Bytes vermindern
B9CE: D0 F5 BNE $B9C5 alle Bytes ausgeben, ==>
B9D0: 4C 4C 80 JMP $804C 00, Ok
Previous Page / Next Page