    Burst-Befehle $02,$12: Write (bei der 1571: $83ec)

    Einsprung von $BC93:

    BC01: A5 25     LDA $25          wurde die Diskette gewechselt ?
    BC03: D0 F1     BNE $BBF6        ja, ==>
    BC05: A5 7C     LDA $7C          Burst-Kommandobyte holen; L-Flag (b7)=1:
    BC07: 10 03     BPL $BC0C        logisches Format angegeben ? nein, ==>
    BC09: 4C 81 BB  JMP $BB81        ja: Write mit logischen Sektorangaben ==>

    Write mit physikalischen Sektorangaben (bei der 1571: $8df6)

    Cache mit Spurdaten fuellen; ggf. alte Daten speichern

    Einsprung von $BC07:

    BC0C: A2 00     LDX #$00         Jobspeicher 0 waehlen
    BC0E: A5 7C     LDA $7C          Burst-Kommandobyte holen
    BC10: 29 10     AND #$10         S-Flag in den Job-Seitenspeicher (SIDS)
    BC12: 9D CE 01  STA $01CE,X      uebertragen
    BC15: AD 03 02  LDA $0203        Track- und Sektornummer in Jobspeicher
    BC18: 95 0B     STA $0B,X        schreiben
    BC1A: AD 04 02  LDA $0204
    BC1D: 95 0C     STA $0C,X
    BC1F: A9 B4     LDA #$B4         TPWRT_DV: ggf. Cache auf Diskette schreiben
    BC21: 20 B0 BF  JSR $BFB0        und neue Spur einlesen; Job ausfuehren
    BC24: 20 66 BF  JSR $BF66        Burst-Status setzen
    BC27: C9 02     CMP #$02         ist ein Fehler aufgetreten ?
    BC29: 90 0A     BCC $BC35        nein, ==>
    BC2B: A9 00     LDA #$00         Flag: 'Cachepuffer veraendert' loeschen
    BC2D: 85 87     STA $87

    Einsprung von $BBFE:

    BC2F: A5 7C     LDA $7C          Fehler-Flag im Burst-Kommandobyte setzen
    BC31: 09 08     ORA #$08
    BC33: 85 7C     STA $7C

    Daten vom Computer in den Cachepuffer uebertragen

    Einsprung von $BC29:

    BC35: 20 99 BC  JSR $BC99        Zeiger in Cachepuffer ($7e) berechnen
    BC38: A6 91     LDX $91          Sektorgroesse holen
    BC3A: E0 03     CPX #$03         Sektorgroesse in Speicherseiten berechnen
    BC3C: D0 01     BNE $BC3F        [Veraenderung ist nur bei 1024-Byte-Bloecken
    BC3E: E8        INX               notwedig.]

    Einsprung von $BC3C, $BC5C, $BC61:

    BC3F: AD 01 40  LDA $4001        Bus-Register auslesen; CLOCK-OUT kippen und
    BC42: 49 08     EOR #$08         damit ein neues Byte anfordern
    BC44: 2C 0D 40  BIT $400D        Flag: 'Byte empfangen' des SDR loeschen
    BC47: 8D 01 40  STA $4001        Burst-Clock setzen
    BC4A: A9 08     LDA #$08

    Einsprung von $BC54, $BC68:

    BC4C: 2C 01 40  BIT $4001        ATN testen
    BC4F: 30 14     BMI $BC65        ist ein ATN empfangen worden ? ja, ==>
    BC51: 2C 0D 40  BIT $400D        b3=1: auf Uebertragungsende testen
    BC54: F0 F6     BEQ $BC4C        Uebertragung abwarten, ==>
    BC56: AD 0C 40  LDA $400C        Byte aus SDR auslesen
    BC59: 91 7E     STA ($7E),Y      und in Cache schreiben
    BC5B: C8        INY
    BC5C: D0 E1     BNE $BC3F        ganze Speicherseite uebertragen, ==>
    BC5E: E6 7F     INC $7F          Cachezeiger Hi erhoehen
    BC60: CA        DEX              Anzahl zu uebertragender Seiten -1
    BC61: D0 DC     BNE $BC3F        noch eine Seite zu uebertragen, ==>
    BC63: F0 0C     BEQ $BC71        fertig mit dem Block ==>

    Einsprung von $BC4F:

    BC65: 20 15 AD  JSR $AD15        ATN-Modus testen
    BC68: 4C 4C BC  JMP $BC4C        und weiter warten

    Einsprung von $BC78:

    BC6B: AD EA 01  LDA $01EA        Burst-Status aus Zwischenspeicher holen
    BC6E: 4C FC BA  JMP $BAFC        und an den Computer senden

    Einsprung von $BC63:

    BC71: 20 03 AD  JSR $AD03        CLOCK OUT auf Lo setzen
    BC74: A5 7C     LDA $7C          Burst-Kommando holen
    BC76: 29 08     AND #$08         ist das Fehler-Flag gesetzt ?
    BC78: D0 F1     BNE $BC6B        ja, ==>
    BC7A: 20 5A BF  JSR $BF5A        Status an den Computer senden
    BC7D: 24 7C     BIT $7C          Burst-Kommando holen; ist das E-Flag (b6)=1
    BC7F: 70 0A     BVS $BC8B        (Schreibfehler ignorieren) ? ja, ==>
    BC81: AD EA 01  LDA $01EA        Jobrueckmeldung holen
    BC84: C9 02     CMP #$02         kein Fehler aufgetreten ?
    BC86: 90 03     BCC $BC8B        ja, ==>
    BC88: 4C 0A BB  JMP $BB0A        Fehlermeldung im Klartext ausgeben

    Einsprung von $BC7F, $BC86:

    BC8B: CE 05 02  DEC $0205        Anzahl abzuspeichernder Blocks -1
    BC8E: F0 06     BEQ $BC96        =0 (Ende), ==>
    BC90: 20 40 C0  JSR $C040        naechsten physikalischen Sektor holen
    BC93: 4C 01 BC  JMP $BC01        naechsten Block vom Compi holen ==>

    Einsprung von $BC8E:

    BC96: 4C 47 BF  JMP $BF47        Kopf ggf. auf die angegebene Spur setzen

    Zeiger in Cachepuffer berechnen

    Einsprung von $BC35:

    BC99: A0 00     LDY #$00         Zeiger Lo = 0
    BC9B: 84 7E     STY $7E
    BC9D: AD 04 02  LDA $0204        aktuelle Sektornummer holen
    BCA0: 38        SEC
    BCA1: E5 94     SBC $94          - 1. Sektornummer auf der Spur
    BCA3: A6 91     LDX $91

    Einsprung von $BCA9:

    BCA5: CA        DEX              * Sektorlaenge
    BCA6: F0 04     BEQ $BCAC
    BCA8: 0A        ASL
    BCA9: 4C A5 BC  JMP $BCA5

    Einsprung von $BCA6:

    BCAC: 18        CLC
    BCAD: 65 8C     ADC $8C          + Cache-Start
    BCAF: 85 7F     STA $7F          = Zeiger Hi
    BCB1: 60        RTS

        Previous Page / Next Page