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. |