    CRC-Pruefsumme des Blockheaders testen

    Einsprung von $CD36:

    DA63: A5 38     LDA $38          Vgl. ROM-Test ($ab1d)
    DA65: 48        PHA
    DA66: A5 39     LDA $39          Rechenregister retten
    DA68: 48        PHA
    DA69: A5 3A     LDA $3A
    DA6B: 48        PHA
    DA6C: A5 3B     LDA $3B
    DA6E: 48        PHA
    DA6F: A5 3C     LDA $3C
    DA71: 48        PHA
    DA72: A5 3D     LDA $3D
    DA74: 48        PHA
    DA75: A5 3E     LDA $3E
    DA77: 48        PHA
    DA78: A9 30     LDA #$30         Startwert ist $b230
    DA7A: 85 3D     STA $3D
    DA7C: A9 B2     LDA #$B2
    DA7E: 85 3E     STA $3E
    DA80: A0 00     LDY #$00

    Einsprung von $DAD3:

    DA82: B9 1F 00  LDA $001F,Y      2-Byte Wert aus Blockheader
    DA85: 85 39     STA $39          nach $38/$39 holen
    DA87: AA        TAX
    DA88: C8        INY
    DA89: B9 1F 00  LDA $001F,Y
    DA8C: 85 38     STA $38
    DA8E: 8A        TXA
    DA8F: A2 10     LDX #$10         16 Bits muessen getestet werden

    [da91  -- --     lda   39       (zum besseren Verstaendnis) ]

    Einsprung von $DACE:

    DA91: 85 3A     STA $3A          Hi-Byte fuer BIT-Test merken
    DA93: 18        CLC
    DA94: 26 38     ROL $38          naechstes Bit zum Testen bereitstellen
    DA96: 26 39     ROL $39

    DA98: A9 00     LDA #$00
    DA9A: 85 3B     STA $3B
    DA9C: 85 3C     STA $3C
    DA9E: 24 3A     BIT $3A          ist das zu testende Bit (b7) =0 ?
    DAA0: 10 08     BPL $DAAA        ja,   ($3b/$3c = $0000) ==>
    DAA2: A9 21     LDA #$21         nein, ($3b/$3c = $1021)
    DAA4: 85 3B     STA $3B
    DAA6: A9 10     LDA #$10
    DAA8: 85 3C     STA $3C

    Einsprung von $DAA0:

    DAAA: 24 3E     BIT $3E          ist das MSB der Pruefsumme =1 ?
    DAAC: 10 0C     BPL $DABA        nein, ==>
    DAAE: A5 3B     LDA $3B          ja, Wert in $3b/$3c austauschen
    DAB0: 49 21     EOR #$21
    DAB2: 85 3B     STA $3B          (aus $0000 wird $1021,
    DAB4: A5 3C     LDA $3C           aus $1021 wird $0000)
    DAB6: 49 10     EOR #$10
    DAB8: 85 3C     STA $3C

    Einsprung von $DAAC:

    DABA: 18        CLC              Pruefsumme *2
    DABB: 26 3D     ROL $3D
    DABD: 26 3E     ROL $3E

    DABF: A5 3D     LDA $3D          $3d/$3e = $3d/$3e eor $3b/$3c
    DAC1: 45 3B     EOR $3B
    DAC3: 85 3D     STA $3D
    DAC5: A5 3E     LDA $3E
    DAC7: 45 3C     EOR $3C
    DAC9: 85 3E     STA $3E
    DACB: A5 39     LDA $39
    DACD: CA        DEX              muessen noch Bits getestet werden?
    DACE: D0 C1     BNE $DA91        ja, ==>
    DAD0: C8        INY
    DAD1: C0 05     CPY #$05         naechsten 16-Bit-Wert holen ?
    DAD3: 90 AD     BCC $DA82        ja, ==>
    DAD5: A4 3D     LDY $3D          Die Pruefsumme muss $0000 ergeben
    DAD7: A6 3E     LDX $3E
    DAD9: 68        PLA              Register zurueckholen
    DADA: 85 3E     STA $3E
    DADC: 68        PLA
    DADD: 85 3D     STA $3D
    DADF: 68        PLA
    DAE0: 85 3C     STA $3C
    DAE2: 68        PLA
    DAE3: 85 3B     STA $3B
    DAE5: 68        PLA
    DAE6: 85 3A     STA $3A
    DAE8: 68        PLA
    DAE9: 85 39     STA $39
    DAEB: 68        PLA
    DAEC: 85 38     STA $38
    DAEE: C0 00     CPY #$00         Pruefsumme <> $0000 ?
    DAF0: D0 06     BNE $DAF8        ja, ==>
    DAF2: E0 00     CPX #$00
    DAF4: D0 02     BNE $DAF8        ja, ==>
    DAF6: 18        CLC
    DAF7: 60        RTS

    Einsprung von $DAF0, $DAF4:

    DAF8: A9 09     LDA #$09         CRC-Error
    DAFA: 4C CC CD  JMP $CDCC

        Previous Page / Next Page