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 |