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