From: MagerValp (MagerValp_at_cling.gu.se)
Date: 2003-09-19 17:28:39
To add protection against corrupted rom images and flash programming failures, I'm implementing CRC-32 checks in the C1's boot rom. My ld65 config looks like this: MEMORY { LOWZP: start = $00, size = $80, type = rw; HIGHZP: start = $c0, size = $40, type = rw; LORAM: start = $0200, size = $1e00; FLASH: start = $2000, size = $1e00; ROM: start = $c000, size = $4000, file = %O, define = yes; } SEGMENTS { ZEROPAGE: load = LOWZP, type = zp; DEVZP: load = HIGHZP, type = zp, start = $e0; VOLZP: load = HIGHZP, type = zp, start = $f0; BSS: load = LORAM, type = bss, define = yes, align = $100; VOLBSS: load = LORAM, type = bss, start = $1f00; DEVBSS: load = LORAM, type = bss, start = $1f40; CHECKSUM: load = ROM, type = wprot; CODE: load = ROM, type = wprot; RODATA: load = ROM, type = wprot, align = $100; DATA: load = ROM, type = rw; RELOC: load = ROM, run = FLASH, type = rw, define = yes; VOLVECTORS: load = ROM, type = ro, start = $ff00; DEVVECTORS: load = ROM, type = ro, start = $ff40; CTLVECTORS: load = ROM, type = ro, start = $ff50; DBGVECTORS: load = ROM, type = ro, start = $ff60; GFXVECTORS: load = ROM, type = ro, start = $ff80; VERSION: load = ROM, type = ro, start = $fff0; CPUVECTORS: load = ROM, type = ro, start = $fffa; } I have reserved 4 bytes in the CHECKSUM segment, and I'm assuming that there's no way of getting ld65 to automagically fill it with the CRC of the rest of the ROM. So what I did was write a small perl script that reads the last 16380 bytes of the generated file, computes the CRC-32 checksum, and writes it all back. In the rom I have a corre- sponding routine that I grabbed from 6502.org, and this is where the trouble starts. Perl, 6502.org, zip, and cksum all give me different values for the same data: % perl -MString::CRC -e 'printf("%08x\n", crc("\x00" x 16380, 32));' bfb3e861 % dd if=/dev/zero of=testrom bs=16380 count=1 % zip testrom.zip testrom % unzip -v testrom.zip 16380 Defl:N 33 100% 09-19-103 16:53 36aefd86 testrom % cksum testrom | awk '{printf "%08x", $1}' 2fd654c8 ...and the assembler routine from 6502.org gives me c9510279. *sigh* Has anyone here successfully used the crc-32 code from 6502.org? -- Wildstar delenda est ___ . . . . . + . . o _|___|_ + . + . + . Per Olofsson, arkadspelare o-o . . . o + MagerValp_at_cling.gu.se - + + . http://www.cling.gu.se/~cl3polof/ ---------------------------------------------------------------------- To unsubscribe from the list send mail to majordomo_at_musoftware.de with the string "unsubscribe cc65" in the body(!) of the mail.
This archive was generated by hypermail 2.1.3 : 2003-09-19 17:34:17 CEST