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 |