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