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
|