    JOBs $80, $90: READ_DV, WRITE_DV
         $aa, $ac: TREAD_DV, TWRT_DV
         $b2, $b4: TPREAD_DV, TPWRT_DV

    C900: 20 A6 CF  JSR $CFA6        Blockheader lesen
    C903: A5 88     LDA $88          Steht Kopf auf richtiger Spur ?
    C905: C5 1F     CMP $1F          (Solltrack=Track in Blockheader)
    C907: F0 03     BEQ $C90C        ja, ==>
    C909: 4C 88 CB  JMP $CB88        nein: Blockheader nicht gefunden ==>

    Einsprung von $C907:

    C90C: 8D 01 60  STA $6001        zu lesende Spur in Controller schreiben
    C90F: 20 B7 CF  JSR $CFB7        Zeiger auf Cacheanfang setzen
    C912: A5 96     LDA $96          aktuelle Diskettenseite merken
    C914: 85 39     STA $39          [Ich sehe keine Verwendung]
    C916: A5 92     LDA $92          Anzahl der Sektoren merken
    C918: 85 3A     STA $3A

    Folgesektor im Cache berechnen

    C91A: A5 21     LDA $21          Sektornummer aus Blockheader
    C91C: AA        TAX              merken
    C91D: C5 93     CMP $93          = groesste Sektornummer ?
    C91F: 08        PHP              (Ergebnis merken)
    C920: D0 06     BNE $C928        nein, ==>
    C922: A5 94     LDA $94          1. physikalische Sektornummer holen
    C924: AA        TAX              und merken
    C925: 38        SEC              -1 [Der letzte Sektor steht unmittelbar vor
    C926: E9 01     SBC #$01          dem 1. Sektor. Er ist sozusagen der 0. S.]

    Einsprung von $C920:

    C928: 38        SEC              - Nummer des 1. physikalischen Sektors
    C929: E5 94     SBC $94
    C92B: 18        CLC              +1 (da der Folgesektor gelesen werden soll)
    C92C: 69 01     ADC #$01
    C92E: A4 91     LDY $91          Blockgroesse holen

    Einsprung von $C934:

    C930: 88        DEY
    C931: F0 03     BEQ $C936        y-1 mal: Sektornummer *2
    C933: 0A        ASL
    C934: 90 FA     BCC $C930        = Zeiger Hi in den Cachepuffer

    Einsprung von $C931:

    C936: 20 8D CB  JSR $CB8D        Zeiger in Cachepuffer setzen

    physikalischen Folgesektor berechnen

    C939: 8A        TXA
    C93A: 28        PLP              wurde der letzte Sektor der Spur gefunden ?
    C93B: F0 05     BEQ $C942        ja, ==>
    C93D: 18        CLC
    C93E: 69 01     ADC #$01         Sektornummer +1
    C940: D0 02     BNE $C944        immer ==>

    Einsprung von $C93B:

    C942: A5 94     LDA $94          1. Sektor auf Spur

    Einsprung von $C940:

    C944: 8D 02 60  STA $6002        Sektornummer setzen
    C947: EA  ....  NOP            [20 NOPS]
    C95A: ....  EA  NOP

    Einsprung von $C9AC, $C9CB:

    C95B: AD DF 01  LDA $01DF        Controller-Befehl: Read Sector
    C95E: 20 F4 CB  JSR $CBF4        an Controller uebergeben
    C961: A4 91     LDY $91          Sektorengroesse
    C963: C0 03     CPY #$03         1024 Bytes ?
    C965: D0 02     BNE $C969        nein
    C967: C8        INY              ja, 4 Speicherseiten lesen
    C968: EA        NOP $128-BYTE             Sektoren werden nicht unterstuetzt

    Einsprung von $C965, $C971, $C980, $C985:

    C969: AD 00 60  LDA $6000        Controller-Status holen
    C96C: 29 03     AND #$03
    C96E: 4A        LSR
    C96F: 90 5D     BCC $C9CE        b0=0: Controller ready ? ja, ==>
    C971: F0 F6     BEQ $C969        b1=1: Byte Ready ? nein, ==>
    C973: 84 82     STY $82
    C975: A0 00     LDY #$00
    C977: AD 03 60  LDA $6003        Byte von Diskette lesen
    C97A: 91 4A     STA ($4A),Y      und in Cachepuffer schreiben
    C97C: A4 82     LDY $82
    C97E: E6 4A     INC $4A          Cachepufferzeiger erhoehen
    C980: D0 E7     BNE $C969
    C982: E6 4B     INC $4B
    C984: 88        DEY              Anzahl zu lesender Speicherseiten -1
    C985: D0 E2     BNE $C969        Block noch nicht fertig, ==>
    C987: 20 3F CD  JSR $CD3F        auf Lesefehler testen
    C98A: D0 42     BNE $C9CE        Fehler, ==>
    C98C: C6 3A     DEC $3A          Anzahl zu lesender Blocks =0 ?
    C98E: F0 3E     BEQ $C9CE        ja, ==>
    C990: AD 02 60  LDA $6002        Nummer des gerade gelesenen Sektors merken
    C993: EE 02 60  INC $6002        naechsten Sektor lesen
    C996: EA  ....  NOP            [20 NOPS]
    C9A9: ....  EA  NOP

    C9AA: C5 93     CMP $93          letzter Sektor auf der Spur ?
    C9AC: D0 AD     BNE $C95B        nein, ==>
    C9AE: A5 8C     LDA $8C          ja,
    C9B0: 85 4B     STA $4B          Cache-Zeiger auf Pufferanfang setzen
    C9B2: A5 94     LDA $94          1. Sektor laden
    C9B4: 8D 02 60  STA $6002
    C9B7: EA  ....  NOP            [20 NOPS]
    C9CA: ....  EA  NOP
    C9CB: 4C 5B C9  JMP $C95B        naechsten Sektor lesen

    Einsprung von $C96F, $C98A, $C98E:

    C9CE: 20 3F CD  JSR $CD3F        Controllerstatus pruefen
    C9D1: D0 0B     BNE $C9DE        Fehler, ==>
    C9D3: A5 96     LDA $96          aktuelle Seite
    C9D5: 85 97     STA $97          merken
    C9D7: A5 88     LDA $88          aktueller Track
    C9D9: 85 95     STA $95          als 'Track im Cache' merken
    C9DB: 4C E2 CD  JMP $CDE2        Ende, naechsten Job testen ==>

    Einsprung von $C9D1:

    C9DE: 4C CC CD  JMP $CDCC        Fehlercode in Jobpuffer schreiben

        Previous Page / Next Page