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 |