US E-reader save format Base Address = 0x00000 (Bank 0, address 0x0000) Offset Size Description 0x0000 0x6FFC Bank 0 continuation of save data. 0x6FFD 0x6004 All 0xFF 0xD000 0x0053 43617264 2D452052 65616465 72203230 30310000 67B72B2E 32333333 2F282D2E 31323332 302B2B30 31323433 322F2A2C 30333333 312F282C 30333233 3230292D 30303131 2F2D2320 61050000 80FD7700 000001 0xD053 0x0FAD All 0x00s 0xE000 0x1000 Repeat 0xD000-0xDFFF 0xF000 0x0F80 All 0xFFs 0xFF80 0x0080 All 0x00s Base Address = 0x10000 (Bank 1, address 0x0000) Offset Size Description 0x0000 0x04 CRC (calculated starting from 0x0004, and amount of data to calculate is 0x30 + [0x002C] + [0x0030].) 0x0004 0x24 Program Title (Null terminated) - US = Straight Ascii, Jap = Shift JIS 0x0028 0x04 Program Type 0x0204 = ARM/THUMB Code/data (able to use the GBA hardware directly, Linked to 0x02000000) 0x0C05 = 6502 code/data (NES limitations, 1 16K program rom + 1-2 8K CHR rom, mapper 0 and 1) 0x0400 = Z80 code/data (Linked to 0x0100) 0x002C 0x04 Program Size = First 2 bytes of Program data, + 2 0x0030 0x04 Unknown 0x0034 Program Size Program Data (vpk compressed) First 2 bytes = Size of vpk compressed data 0xEFFF 0x01 End of save area in bank 1. Resume save data in bank 0. The CRC is calculated on Beginning of Program Title, to End of Program Data. If the First byte of Program Title is 0xFF, then there is no save present. If the CRC calculation does not match stored CRC, then the ereader comes up with an ereader memory error. CRC calculation Details CRC table is calculated from polynomial 0x04C11DB7 (standard CRC32 polynomial) with Reflection In. (Table entry 0 is 0, and 1 is 0x77073096...) CRC calculation routine uses Initial value of 0xAA478422. The Calculation routine is not a standard CRC32 routine, but a custom made one, Look in "crc calc.c" for the complete calculation algorithm. Revision history v1.0 - First release V1.1 - Updated/Corrected info about program type. v1.2 - Updated info on Japanese text encoding v1.3 - Info on large 60K+ vpk files.