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 |