ROM-Signatur pruefen (CRC-Test) (bei der 1571: $924e)

Einsprung von $AA39, $FF5D:

AB1D: 08        PHP              vlg. Blockheader-CRC-Test ($da63)
AB1E: 78        SEI
AB1F: A5 02     LDA $02          Register retten
AB21: 48        PHA
AB22: A5 03     LDA $03
AB24: 48        PHA
AB25: A5 04     LDA $04
AB27: 48        PHA
AB28: A5 05     LDA $05
AB2A: 48        PHA
AB2B: A5 06     LDA $06
AB2D: 48        PHA
AB2E: A5 07     LDA $07
AB30: 48        PHA
AB31: A5 08     LDA $08
AB33: 48        PHA
AB34: A5 09     LDA $09
AB36: 48        PHA
AB37: A5 0A     LDA $0A
AB39: 48        PHA

AB3A: A9 FF     LDA #$FF         #$ffff: Startwert fuer Pruefsumme
AB3C: 85 07     STA $07
AB3E: 85 08     STA $08
AB40: A9 00     LDA #$00         Startadresse auf $8000
AB42: 85 09     STA $09
AB44: A9 80     LDA #$80
AB46: 85 0A     STA $0A
AB48: A0 02     LDY #$02         bei $8002 anfangen

Einsprung von $AB97, $AB9B:

AB4A: B1 09     LDA ($09),Y      Der Test arbeitet mit 16-Bit-Werten
AB4C: 85 03     STA $03          Wert aus ROM nach $03/$02
AB4E: AA        TAX
AB4F: C8        INY
AB50: B1 09     LDA ($09),Y
AB52: 85 02     STA $02
AB54: 8A        TXA
AB55: A2 10     LDX #$10         16 Verschiebungen

[----  -- --     LDA   03       (Nur zum besseren Verstaendnis !!!)]

Einsprung von $AB94:

AB57: 85 04     STA $04          (aktuelles b15 merken)
AB59: 18        CLC              Nun werden alle 16 Bits aus $02/$03 der
AB5A: 26 02     ROL $02          Reihe nach (von Hi nach Lo) getestet.
AB5C: 26 03     ROL $03

AB5E: A9 00     LDA #$00         Ist das Bit nicht gesetzt, wird der
AB60: 85 05     STA $05          Wert $0000, nach $05/$06 geschrieben.
AB62: 85 06     STA $06
AB64: 24 04     BIT $04
AB66: 10 08     BPL $AB70
AB68: A9 21     LDA #$21         Ist es gesetzt, dann wird der Wert $1021
AB6A: 85 05     STA $05          nach $05/$06 geschrieben
AB6C: A9 10     LDA #$10
AB6E: 85 06     STA $06

Einsprung von $AB66:

AB70: 24 08     BIT $08          Ist das MSB von $07/$08 gesetzt, dann
AB72: 10 0C     BPL $AB80        wird die Abfrage genau umgedreht
AB74: A5 05     LDA $05          ($1021, wenn Bit=0)
AB76: 49 21     EOR #$21
AB78: 85 05     STA $05
AB7A: A5 06     LDA $06
AB7C: 49 10     EOR #$10
AB7E: 85 06     STA $06

Einsprung von $AB72:

AB80: 18        CLC              $07/$08 * 2
AB81: 26 07     ROL $07          (Das MSB wird geloescht)
AB83: 26 08     ROL $08
AB85: A5 07     LDA $07          $07/$08 = $07/$08 eor $05/06
AB87: 45 05     EOR $05
AB89: 85 07     STA $07
AB8B: A5 08     LDA $08
AB8D: 45 06     EOR $06
AB8F: 85 08     STA $08
AB91: A5 03     LDA $03          naechstes Bit testen
AB93: CA        DEX
AB94: D0 C1     BNE $AB57
AB96: C8        INY
AB97: D0 B1     BNE $AB4A        Naechsten 16-Bit Wert holen, ==>
AB99: E6 0A     INC $0A          naechste Seite bearbeiten
AB9B: D0 AD     BNE $AB4A        bis ROM-Ende weitermachen, ==>

AB9D: A4 07     LDY $07          Pruefsumme in y/x merken
AB9F: A6 08     LDX $08

ABA1: 68        PLA              Register zurueckholen
ABA2: 85 0A     STA $0A
ABA4: 68        PLA
ABA5: 85 09     STA $09
ABA7: 68        PLA
ABA8: 85 08     STA $08
ABAA: 68        PLA
ABAB: 85 07     STA $07
ABAD: 68        PLA
ABAE: 85 06     STA $06
ABB0: 68        PLA
ABB1: 85 05     STA $05
ABB3: 68        PLA
ABB4: 85 04     STA $04
ABB6: 68        PLA
ABB7: 85 03     STA $03
ABB9: 68        PLA
ABBA: 85 02     STA $02          (alles klar ?)

ABBC: CC 00 80  CPY $8000        Ist die Pruefsumme Ok. ?
ABBF: D0 07     BNE $ABC8        nein, ==>
ABC1: EC 01 80  CPX $8001
ABC4: D0 02     BNE $ABC8        nein, ==>
ABC6: 28        PLP
ABC7: 60        RTS              ROM Ok.

Einsprung von $ABBF, $ABC4:

ABC8: A2 03     LDX #$03         4x LED Blinken
ABCA: 86 40     STX $40
ABCC: 4C F5 AE  JMP $AEF5        Laufwerk verriegeln ==>

    Previous Page / Next Page