No edit summary |
No edit summary |
||
Line 8: | Line 8: | ||
<span class="pl-s">Le header de l'archive HSD correspond aux headers des fichiers ARC :</span> | <span class="pl-s">Le header de l'archive HSD correspond aux headers des fichiers ARC :</span> | ||
<span class="pl-s"></span> | |||
<span class="pl-s"></span> | typedef struct _HSD_ArchiveHeader { | ||
typedef struct _HSD_ArchiveHeader { u32 file_size; /* 0x00 */ | u32 file_size; /* 0x00 */ | ||
u32 data_size; /* 0x04 */ | u32 data_size; /* 0x04 */ | ||
u32 nb_reloc; /* 0x08 */ | u32 nb_reloc; /* 0x08 */ |
Revision as of 12:39, 14 November 2021
ARC semble être le diminutif d'archive.
On retrouve dans l'exécutable principal Start.dol l'usage de la chaîne de caractère "Archive_Parse: Byte-Order mismatch". La communauté du jeu GameCube "Super Smash Bros. Melee" a notamment reverse cette fonction de la librairie HSD (rien n'indique que la version de HSD soit la même, il faudrait vérifier) :
Le header de l'archive HSD correspond aux headers des fichiers ARC :
typedef struct _HSD_ArchiveHeader { u32 file_size; /* 0x00 */ u32 data_size; /* 0x04 */ u32 nb_reloc; /* 0x08 */ u32 nb_public; /* 0x0C */ u32 nb_extern; /* 0x10 */ u8 version[4]; /* 0x14 */ u32 pad[2]; /* 0x18 */ } HSD_ArchiveHeader;
Tous les headers des fichiers de "afs_data.afs" ont été vérifiés directement, sans décompression ou autre. Les fichiers compressés dans les PZZ n'ont pas été vérifiés par exemple. Seul les fichiers ARC utilisent des informations qui semblent correspondre à ce header. La fonction utilisant la chaîne de caractère "Archive_Parse: Byte-Order mismatch" est référencée deux fois dans Start.dol aux adresses 8004d548, et 80006c88. 8004d548 est appelé une fois au lancement du jeu. On y retrouve HSD_archiveParse(*bufferDest=r3=0x81489c40, *bufferSrc=r4=0x80f2b1c0, len?=r5=0x4d7b). On a bien en argument (*bufferSrc) un fichier qui ressemble aux fichiers ARC.