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