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