détails boot.bin & bi2.bin |
|||
Line 21: | Line 21: | ||
* 7 - 1 octet - version du jeu | * 7 - 1 octet - version du jeu | ||
* 8 - 1 octet - flag du streaming audio (0 ou 1) | * 8 - 1 octet - flag du streaming audio (0 ou 1) | ||
* 9 - 1 octet - StreamBufferSize - nombre de buffer streaming | |||
* 0x1c - 4 octets - DVD magic - 0xc2339f3d | * 0x1c - 4 octets - DVD magic - 0xc2339f3d | ||
* 0x20 - 0x3e0 octets - nom du jeu, peut contenir des kanjis | * 0x20 - 0x3e0 octets - nom du jeu, peut contenir des kanjis |
Revision as of 07:40, 9 August 2022
Le DVD GameCube est au format GCM (Gamecube Disk Image - extension gcm ou iso) et peut se diviser en 6 parties :
- boot.bin (Informations de base - Disk Header)
- bi2.bin (Informations additionnelles - Disk Header Information)
- apploader.img (Chargeur de l’exécutable principal)
- fst.bin (FileStringTable)
- boot.dol / elf (Exécutable principal)
- Fichiers
Le système de fichier est alors géré par la GameCube elle même, et on remarquera que les fichiers sont chargés par leur nom, donc peu importe leur ordre dans le DVD (Dolphin Emulator).
Le fichier dol et la FST peuvent être l'un avant l'autre ou non. On retrouvera cependant souvent le dol avant la FST. On notera que l'ensemble des ROMs GCM ont une taille fixe liée au format du mini DVD : 1 459 978 240 octets. De ce fait, il existe pour de nombreux jeux des espaces "libres" entre les fichiers pouvant être considérablement grands. Ces espaces contiennent souvent des données qui n'ont aucune utilité lors de l'exécution du jeu. Il pourrait s'agir de données aléatoires, ou de données écrasées lors de réécritures sur un même DVD par les développeurs. Il reste à déterminer si ces données sont identiques sur tous les exemplaires de DVDs d'un même jeu.
Structure du format GCM/ISO
boot.bin
Le fichier boot.bin est au début du DVD et a une taille de 0x440 octets. On y retrouve :
- 0 - 4 octets ASCII - code du jeu
- 4 - 2 octets ASCII - code de l'entreprise
- 6 - 1 octet - numéro du disque en commençant par 0
- 7 - 1 octet - version du jeu
- 8 - 1 octet - flag du streaming audio (0 ou 1)
- 9 - 1 octet - StreamBufferSize - nombre de buffer streaming
- 0x1c - 4 octets - DVD magic - 0xc2339f3d
- 0x20 - 0x3e0 octets - nom du jeu, peut contenir des kanjis
- 0x420 - 4 octets - offset du boot.dol
- 0x424 - 4 octets - offset de la File String Table (fst.bin)
- 0x428 - 4 octets - taille de la FST
- 0x42c - 4 octets - taille max de la FST (correspond souvent à sa taille)
bi2.bin
Le fichier bi2.bin a une taille de 0x2000 octets et se situe à la suite du fichier boot.bin (donc à l'offset 0x440 de l'iso). Il contient des informations régionales et de debug.
- 0 - 4 octets - DebugMonitorSize
- 4 - 4 octets - SimulatedMemorySize
- 8 - 4 octets - ArgumentOffset
- 0xc - 4 octets - DebugFlag - 0 pour any debugueur sur GDEV; 3 pour CodeWarrior sur EV
- 0x10 - 4 octets - TrackLocation
- 0x14 - 4 octets - TrackSize
- 0x18 - 4 octets - CountryCode - 0 pour Japon, 1 pour USA, 2 pour PAL, 4 pour Corée du Sud
boot.dol
Le fichier au format dol est un exécutable compilé pour l'architecture Gekko (powerpc). Son header fait 0x100 octets, et on trouvera la taille totale du dol en additionnant la taille du header et la taille de l'ensemble des 18 sections de celui-ci. A partir de l'offset 0x90, on trouvera 18 uint de 4 octets (big endian) contenant les tailles des 18 sections.
Apploader
L'apploader est un fichier, lancé par le BIOS de la GameCube (aussi appelé l'Initial Program Loader / IPL), qui permet de créer les différents espaces mémoires pour lancer l'exécutable du jeu (généralement au format dol). Il se situe à l'offset 0x2440, à la suite du fichier bi2.bin. Il portera un nom différent selon les programmes que l'on utilisera pour ouvrir l'image DVD du jeu : AppLoader.ldr / apploader.img (dolphin Emulator) etc.
La taille de l'apploader se calcul à partir de son header :
- Le header fait 0x20 octets
- apploader_size à l'offset 0x14, donc à l'offset 0x2454 de l'iso GCM.
- trailer_size à l'offset 0x18, donc à l'offset 0x2458 de l'iso GCM. La trailer_size est un espace réservé à d'éventuelles évolutions de l'apploader.
File String Table
La FST permet de packer l'arborescence de fichiers et de dossiers du jeu dans la suite de l'iso. Elle se divise en deux blocks :
- Le premier contient les entrées de la FST (dossiers et fichiers). (Big endian)
- Le second, le name_block, contient tous les noms des dossiers et des fichiers chacun terminés par un NULL byte (0x00). (Little endian)
Dans la première partie, on indexera tous les dossiers et les fichiers à partir du numéro 1. Chaque dossier ou fichier est traduit en 12 octets, et la toute première entrée est le nœud racine, portant l'index 0.
Les 12 octets d'une entrée pour un dossier :
- 1 octet pour le type, dossier=0x01.
- 3 octets uint pour l'offset du nom dans le name_block, commençant à l'offset 0 au début du name_block.
- 4 octets uint pour l'index du dossier parent.
- 4 octets uint pour l'index du dossier ou fichier suivant.
Les 12 octets d'une entrée pour un fichier :
- 1 octet pour le type, fichier=0x00.
- 3 octets uint pour l'offset du nom dans le name_block, commençant à l'offset 0 au début du name_block.
- 4 octets uint pour l'offset du fichier par rapport au début de l'iso GCM.
- 4 octets uint pour la taille du fichier.
Le nœud racine se situe au tout début de la FST, c'est un dossier avec les 3 octets de l'offset du nom et les 4 octets du dossier parent à 0x00. L'index du fichier suivant est égal au nombre total de dossiers et de fichiers du DVD. On trouvera alors l'offset du name_block en multipliant cet index par 12 et en y ajoutant 12 (taille du nœud racine).
L'alignement de l'ensemble des fichiers est important lors de la construction du boot.bin et de la FST. En effet, on alignera par exemple sur 4 octets, l'iso GCM ne fonctionnant pas au cas contraire.
Les DVD GCM JAP contiennent des caractères non utf-8 dans le name_block. L'application gcmtool.py, permettant de parser les iso GCM et de les patcher, ne prends pas en charge ces jeux là. Dolphin Emulator extraira les fichiers en traduisant le charset original en utf-8.
Le tris des dossiers et fichiers est non sensible à la casse (tous les noms en majuscules), et fait apparaître les caractères spéciaux avant les lettres.
Formats d'extraction
Le format GCReEx comporte les informations suivantes :
sys: |- apploader.img |- boot.bin (Information de base) |- bi2.bin (Information supplémentaires) |- fst.bin (FileStringTable) \- main.dol ("Executable" DOL) root: |- banner.bnr \+ ALL GAME DATA (AFS, etc)
Le format DiscEx comporte moins d'informations :
sys: |- apploader.img |- boot.bin (Information de base du jeu) \- bi2.bin (Information supplémentaires) game.iso : Copie repack de l'iso d'origine.
On retrouvera d'autres formats.
Ce wiki sur le format nkit offre une très bonne documentation sur le format GCM.