Savegames/es: Difference between revisions
| No edit summary | No edit summary | ||
| Line 26: | Line 26: | ||
| *Se ha observado que el xorpad se repite cada 0x1000 bytes (podría ser la longitud máxima pero aún no se ha probado). | *Se ha observado que el xorpad se repite cada 0x1000 bytes (podría ser la longitud máxima pero aún no se ha probado). | ||
| ===  | === Nivel de desgaste === | ||
| La 3DS utiliza un esquema para prevenir el nivel de desgaste de los chips FLASH de las partidas. Eso lo consigue utilizando blockmaps i un journal. El blockmap se encuentra en el offset 0 del chip, y es seguido inmediatamente por el journal. El estado inicial es dictado por el blockmap, y el journal es entonces aplicado. | |||
| Primero hay 8 bytes cuyos fines se desconocen aún. Luego viene el blockmap. | |||
| La estructura del blockmap es simple: | |||
| <pre> | <pre> | ||
| struct header_entry { | struct header_entry { | ||
|          uint8_t phys_sec; //  |          uint8_t phys_sec; // cuando se establece el sépitmo bit, el bloque tiene  checksums,  de lo contrario los checksums  son cero | ||
|          uint8_t alloc_cnt; |          uint8_t alloc_cnt; | ||
|          uint8_t chksums[8]; |          uint8_t chksums[8]; | ||
| Line 40: | Line 40: | ||
| </pre> | </pre> | ||
| Hay un journal por sector, contando desde el sector físico 1(el sector 0 contiene el blockmap/journal). | |||
| Los siguientes dos bytes que siguen al blockmap son el CRC16 (con 0xFFFF como valor inicial (como el modbus)) de los primeros 8 bytes del blockmap. | |||
| Then comes the journal. | Then comes the journal. | ||