    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