JTRANS_TS: logisches in physikalisches Format umwandeln
CEDC: 06 86 ASL $86 Soll umgewandelt werden (b7=0) ?
CEDE: B0 6E BCS $CF4E nein, Ende ==>
CEE0: A4 99 LDY $99 Index fuer 2-Byte Jobspeicher holen
CEE2: 06 85 ASL $85 Sind Parameter sowieso physikalisch (b7=0)?
CEE4: 90 44 BCC $CF2A ja, ==>
CEE6: A6 83 LDX $83
CEE8: B5 9F LDA $9F,X b7=1: wurde das Format bereits umgewandelt?
CEEA: 10 01 BPL $CEED nein, (also umwandeln) ==>
CEEC: 60 RTS [ja: Wenigstens die Diskettenseite muesste
neu nach $96 geschrieben werden !!!]
Einsprung von $CEEA:
CEED: B9 0B 00 LDA $000B,Y logische Spur - 1
CEF0: 38 SEC
CEF1: E9 01 SBC #$01
CEF3: 99 BC 01 STA $01BC,Y = physikalische Spur
CEF6: A5 75 LDA $75 Anzahl Sektoren pro Track
CEF8: 4A LSR / 2 = Sektoren pro Spur
CEF9: AA TAX = 1. logischer Block auf Rueckseite
CEFA: D9 0C 00 CMP $000C,Y Sektornummer >= a ?
CEFD: F0 05 BEQ $CF04 ja, (Seite 1) ==>
CEFF: 90 03 BCC $CF04 ja, (Seite 1) ==>
CF01: A9 00 LDA #$00 Seite 0 waehlen
CF03: 2C B $2C
Einsprung von $CEFD, $CEFF:
CF04: A9 01 LDA #$01 Seite 1 waehlen
CF06: 85 96 STA $96 als aktuelle Seite merken
CF08: F0 01 BEQ $CF0B Aktuelle Seite =1 ? nein, ==>
CF0A: 8A TXA ja:
Einsprung von $CF08:
CF0B: 85 39 STA $39 als 1. log. Sek. der Seite merken
CF0D: A6 83 LDX $83
CF0F: B9 0C 00 LDA $000C,Y logischer Sektor
CF12: 38 SEC
CF13: E5 39 SBC $39 - 1. log. Sektor der Disk-Seite
CF15: 09 80 ORA #$80 b7=1: Flag: 'T&S sind umgewandelt' setzen
CF17: 95 9F STA $9F,X als Zeiger (Hi) in Cachepuffer merken
CF19: 29 7F AND #$7F physikalische Sektornummer berechnen
CF1B: A6 91 LDX $91 Sektorgroesse holen
Einsprung von $CF21:
CF1D: CA DEX [Wenn ein physikalischer Sektor 512 Byte
CF1E: F0 04 BEQ $CF24 gross ist, passen immer 2 logische Sektoren
CF20: 4A LSR hinein. Also muss die Sektornummer /2
CF21: 4C 1D CF JMP $CF1D genommen werden (Normalfall).]
Einsprung von $CF1E:
CF24: 18 CLC
CF25: 65 94 ADC $94 + 1. physikalische Sektornummer der Spur
CF27: 4C 4A CF JMP $CF4A = phy. Sektornummer ==>
es wurden phy. T&S angegeben; Position im Cache berechnen
Einsprung von $CEE4:
CF2A: A6 83 LDX $83
CF2C: BD CE 01 LDA $01CE,X Seitennummer
CF2F: 85 96 STA $96 uebernehmen
CF31: B9 0B 00 LDA $000B,Y Tracknummer
CF34: 99 BC 01 STA $01BC,Y uebernehmen
CF37: B9 0C 00 LDA $000C,Y Sektornummer
CF3A: 48 PHA merken
CF3B: 38 SEC
CF3C: E5 94 SBC $94 - 1. Sektornummer auf der Spur
CF3E: A6 91 LDX $91 Sektorgroesse
Einsprung von $CF44:
CF40: CA DEX [Sektornummer auf 256 Byte grosse Bloecke
CF41: F0 04 BEQ $CF47 umrechnen. Bei 512 Byte grossen Sektoren
CF43: 0A ASL muss die Sektor nummer also *2 genommen
CF44: 4C 40 CF JMP $CF40 werden (Normalfall).]
Einsprung von $CF41:
CF47: 95 9F STA $9F,X Sektornummer merken
CF49: 68 PLA
Einsprung von $CF27:
CF4A: 99 BD 01 STA $01BD,Y physikalische Sektornummer merken
CF4D: 2C B $2C Ende ==>
Einsprung von $CEDE:
CF4E: 06 85 ASL $85 [Die Routine muss $85 genau 1 mal nach Links
CF50: 60 RTS shiften.]
Previous Page / Next Page