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. |
| | | |
− | Then comes the journal.
| + | Entonces hay el journal. |
− | The journal structure is as follows:
| + | La estructura del journal es: |
| <pre> | | <pre> |
| struct sector_entry { | | struct sector_entry { |
− | uint8_t virt_sec; // Mapped to sector | + | uint8_t virt_sec; // Asignado al sector |
− | uint8_t prev_virt_sec; // Physical sector previously mapped to | + | uint8_t prev_virt_sec; // Sector físico previamente asignado |
− | uint8_t phys_sec; // Mapped from sector | + | uint8_t phys_sec; // Asignado desde el sector |
− | uint8_t prev_phys_sec; // Virtual sector previously mapped to | + | uint8_t prev_phys_sec; // Sector virtual previamente asignado |
− | uint8_t phys_realloc_cnt; // Amount of times physical sector has been remapped | + | uint8_t phys_realloc_cnt; // Cantidas de veces que el sector físico ha sido reasignado |
− | uint8_t virt_realloc_cnt; // Amount of times virtual sector has been remapped | + | 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> |
| | | |
− | With magic being a constant 0x080d6ce0.
| + | Con la constante mágica 0x080d6ce0. |
| | | |
− | The checksums in the blockmap/journal entries work as follows:
| + | Los checksums de las entradas del blockmap/journal trabajan de la siguiente forma: |
− | * each byte is the checksum of an encrypted 0x200 bytes large block | + | * cada byte es el checksum de un bloque de tamaño 0x200 bytes encriptado |
− | * to calculate the checksum, a CRC16 of the block (with starting value 0xFFFF) is calculated, and the two bytes of the CRC16 are XORed together to produce the 8bit checksum | + | * 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. |
| | | |
− | === Partitions === | + | === Particiones=== |
| | | |
− | There can be multiple partitions on the chip.
| + | Puede haber múltiples particiones en el chip. |
− | The partitions are represented by tables of DIFI blobs inside a DISA structure.
| + | Las particiones están representadas por tablas de manchas del DIFI dentro de la estructura DISA. |
− | The order of the DIFI blobs is the order of the partitions in the chip.
| + | 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" |
| |- | | |- |
− | ! Start | + | ! Principio |
− | ! Length | + | ! Longitud |
− | ! Description | + | ! Descripción |
| |- | | |- |
| | 0x00 | | | 0x00 |
Line 92: |
Line 92: |
| | 0x04 | | | 0x04 |
| | 4 | | | 4 |
− | | Unknown (maybe magic, the same in all the save files so far) | + | | Desconocido (puede ser mágico, puede ser el mismo que todas las partidas) |
| |- | | |- |
| | 0x08 | | | 0x08 |
| | 8 | | | 8 |
− | | Partition table size | + | | Tamaño de la tabla de particiones |
| |- | | |- |
| | 0x10 | | | 0x10 |
| | 8 | | | 8 |
− | | Offset to primary partition table in DISA | + | | Offset a la partición primaria de la tabla del DISA |
| |- | | |- |
| | 0x18 | | | 0x18 |
| | 8 | | | 8 |
− | | Offset to secondary partition table in DISA | + | | Offset a la partición secundaria de la tabla del DISA |
| |- | | |- |
| | 0x20 | | | 0x20 |
| | 8 | | | 8 |
− | | Partition table's length | + | | Longitud de la tabla de particiones |
| |- | | |- |
| | 0x28 | | | 0x28 |
| | 8 | | | 8 |
− | | SAVE Partition entry offset in the partition table | + | | Offset de la entrada de guardado en la tabla de particiones |
| |- | | |- |
| | 0x30 | | | 0x30 |
| | 8 | | | 8 |
− | | SAVE Partition entry length in the partition table | + | | Longitud de la entrada de guardado en la tabla de particiones |
| |- | | |- |
| | 0x38 | | | 0x38 |
| | 8 | | | 8 |
− | | DATA Partition entry offset in the partition table | + | | Offset de la entrada de datos en la tabla de particiones |
| |- | | |- |
| | 0x40 | | | 0x40 |
| | 8 | | | 8 |
− | | DATA Partition entry length in the partition table | + | | Longitud de la entrada de datos en la tabla de particiones |
| |- | | |- |
| | 0x48 | | | 0x48 |
| | 8 | | | 8 |
− | | SAVE Partition offset | + | | Offset de la partición de guardado |
| |- | | |- |
| | 0x50 | | | 0x50 |
| | 8 | | | 8 |
− | | SAVE Partition length | + | | Longitud de la partición de guardado |
| |- | | |- |
| | 0x58 | | | 0x58 |
| | 8 | | | 8 |
− | | DATA Partition offset | + | | Offset de la partición de datos |
| |- | | |- |
| | 0x60 | | | 0x60 |
| | 8 | | | 8 |
− | | DATA Partition length | + | | Longitud de la partición de datos |
| |- | | |- |
| | 0x68 | | | 0x68 |
| | 4 | | | 4 |
− | | Active table (and the offset to the filebase) | + | | Tabla activa (y el offset hacia la filebase) |
| |- | | |- |
| | 0x6C | | | 0x6C |
| | 0x20 | | | 0x20 |
− | | Hash from active table | + | | Hash desde la partición activa |
| |- | | |- |
| | 0x8C | | | 0x8C |
| | 4*29 | | | 4*29 |
− | | Unknown | + | | Desconocido |
| |} | | |} |
| | | |