Savegames/es: Difference between revisions
No edit summary |
No edit summary |
||
Line 43: | Line 43: | ||
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. | 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. | ||
Entonces hay el journal. | |||
La estructura del journal es: | |||
<pre> | <pre> | ||
struct sector_entry { | struct sector_entry { | ||
uint8_t virt_sec; // | uint8_t virt_sec; // Asignado al sector | ||
uint8_t prev_virt_sec; // | uint8_t prev_virt_sec; // Sector físico previamente asignado | ||
uint8_t phys_sec; // | uint8_t phys_sec; // Asignado desde el sector | ||
uint8_t prev_phys_sec; // | uint8_t prev_phys_sec; // Sector virtual previamente asignado | ||
uint8_t phys_realloc_cnt; // | uint8_t phys_realloc_cnt; // Cantidas de veces que el sector físico ha sido reasignado | ||
uint8_t virt_realloc_cnt; // | uint8_t virt_realloc_cnt; // Cantidas de veces que el sector virtual ha sido reasignado | ||
uint8_t chksums[8]; | uint8_t chksums[8]; | ||
} __attribute__((__packed__)); | } __attribute__((__packed__)); | ||
Line 63: | Line 63: | ||
</pre> | </pre> | ||
Con la constante mágica 0x080d6ce0. | |||
Los checksums de las entradas del blockmap/journal trabajan de la siguiente forma: | |||
* | * cada byte es el checksum de un bloque de tamaño 0x200 bytes encriptado | ||
* | * para calcular el checksum, el CRC16 del bloque ( con el valor iniciar 0xFFFF) es calculado, y los dos bytes del CRC16 son XOReados juntos para producir un checksum de 8 bits. | ||
=== | === Particiones=== | ||
Puede haber múltiples particiones en el chip. | |||
Las particiones están representadas por tablas de manchas del DIFI dentro de la estructura DISA. | |||
El orden de las manchas del DIFI es el orden de las particiones del chip. | |||
'''DISA''' | '''DISA''' | ||
Line 82: | Line 82: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! | ! Principio | ||
! | ! Longitud | ||
! | ! Descripción | ||
|- | |- | ||
| 0x00 | | 0x00 | ||
Line 92: | Line 92: | ||
| 0x04 | | 0x04 | ||
| 4 | | 4 | ||
| | | Desconocido (puede ser mágico, puede ser el mismo que todas las partidas) | ||
|- | |- | ||
| 0x08 | | 0x08 | ||
| 8 | | 8 | ||
| | | Tamaño de la tabla de particiones | ||
|- | |- | ||
| 0x10 | | 0x10 | ||
| 8 | | 8 | ||
| Offset | | Offset a la partición primaria de la tabla del DISA | ||
|- | |- | ||
| 0x18 | | 0x18 | ||
| 8 | | 8 | ||
| Offset | | Offset a la partición secundaria de la tabla del DISA | ||
|- | |- | ||
| 0x20 | | 0x20 | ||
| 8 | | 8 | ||
| | | Longitud de la tabla de particiones | ||
|- | |- | ||
| 0x28 | | 0x28 | ||
| 8 | | 8 | ||
| | | Offset de la entrada de guardado en la tabla de particiones | ||
|- | |- | ||
| 0x30 | | 0x30 | ||
| 8 | | 8 | ||
| | | Longitud de la entrada de guardado en la tabla de particiones | ||
|- | |- | ||
| 0x38 | | 0x38 | ||
| 8 | | 8 | ||
| | | Offset de la entrada de datos en la tabla de particiones | ||
|- | |- | ||
| 0x40 | | 0x40 | ||
| 8 | | 8 | ||
| | | Longitud de la entrada de datos en la tabla de particiones | ||
|- | |- | ||
| 0x48 | | 0x48 | ||
| 8 | | 8 | ||
| | | Offset de la partición de guardado | ||
|- | |- | ||
| 0x50 | | 0x50 | ||
| 8 | | 8 | ||
| | | Longitud de la partición de guardado | ||
|- | |- | ||
| 0x58 | | 0x58 | ||
| 8 | | 8 | ||
| | | Offset de la partición de datos | ||
|- | |- | ||
| 0x60 | | 0x60 | ||
| 8 | | 8 | ||
| | | Longitud de la partición de datos | ||
|- | |- | ||
| 0x68 | | 0x68 | ||
| 4 | | 4 | ||
| | | Tabla activa (y el offset hacia la filebase) | ||
|- | |- | ||
| 0x6C | | 0x6C | ||
| 0x20 | | 0x20 | ||
| Hash | | Hash desde la partición activa | ||
|- | |- | ||
| 0x8C | | 0x8C | ||
| 4*29 | | 4*29 | ||
| | | Desconocido | ||
|} | |} | ||