    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