Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

DOL (File format): Difference between revisions

No edit summary
Line 23: Line 23:
! Offset !! Taille !! Description
! Offset !! Taille !! Description
|-
|-
| 0x000 || 4 × 18 || Offsets des sections - indique où commence la section par rapport au début du dol. 0 pour une section non utilisée.
| 0x000 || style="width:10%;" | 4 × 18 || Offsets des sections - indique où commence la section par rapport au début du dol. 0 pour une section non utilisée.
|-
|-
| 0x048 || 4 × 18 || Adresses virtuelles des sections - indique où chaque section doit être copiée par le loader en adressage virtuel. 0 pour une section non utilisée.
| 0x048 || 4 × 18 || Adresses virtuelles des sections - indique où chaque section doit être copiée par le loader en adressage virtuel. 0 pour une section non utilisée.

Revision as of 06:36, 22 April 2022

← Gotcha Force

Cet article est pour le format de fichier DOL. Voir DOL (Gotcha Force) pour les recherches en cours sur les dol Gotcha Force.

Cette section est en cours de rédaction.
Des recherches sont encore nécessaires et certains paragraphes peuvent être faux.

Les fichiers DOL (pour le nom de code de la gamecube dolphin) sont des des fichiers que l'on retrouve dans les iso/GCM GameCube ou Wii. Les observations se concentrent ici sur les dol GameCube.

Format

Le fichier dol est un fichier système de la GameCube et il se place directement dans l'iso/GCM indépendamment du système de fichiers (FST). Son offset dans l'iso est stocké à l'offset 0x420 de l'iso.

Header

Le header fait 0x100 octets. Il décrit comment le fichier doit être chargé en mémoire et où aller quand on l'exécute.

Header du fichier
Offset Taille Description
0x000 4 × 18 Offsets des sections - indique où commence la section par rapport au début du dol. 0 pour une section non utilisée.
0x048 4 × 18 Adresses virtuelles des sections - indique où chaque section doit être copiée par le loader en adressage virtuel. 0 pour une section non utilisée.
0x090 4 × 18 Taille des sections en octets. 0 pour une section non utilisée.
0x0d8 4 Adresse virtuelle du bss - le début de la zone des variables non initialisées (.bss), initialisé à 0.
0x0dc 4 Taille du bss en octets.
0x0e0 4 Entry point - indique l'adresse virtuelle de la fonction principale à exécuter après avoir chargé le dol en mémoire. Cette fonction ne doit pas se terminer.
0x0e4 0x1c Padding.
0x100 Fin du header. Début des données des sections.

Les 7 première sections sont des sections .text qui contiennent du bytecode exécutable. On peut y retrouver des routines capturant des interruptions ainsi que du padding.

Les 11 sections suivantes sont des sections .data qui contiennent des données initialisées.

L’intervalle du .bss peut contenir des intervalles .text ou .data. Le .bss est alors automatiquement splitté lors de sa création pour ne pas écraser les sections déjà existantes.

Les sections doivent être alignée sur 32 octets. L'apploader aligne la taille sur les 32 octets supérieurs.

Organisation de la mémoire

Yet Another GameCube Documentation / YAGCD propose une très bonne documentation sur le fonctionnement matériel de la GameCube.

Organisation globale de la mémoire

L'organisation globale de la mémoire décrit comment l'adressage utilisé dans le dol permet d'accéder aux différents composants matériels de la GameCube. Ceci est très intéressant notamment pour les accès aux différents bus / interfaces.

Mapping mémoire
Début Fin Taille Description
0x00000000 0x017fffff 24MB Adresses physique de la RAM
0x80000000 0x817fffff 24MB Adresses logiques (Virtuelles) de la RAM, mises en cache
0xC0000000 0xC17fffff 24MB Adresses logiques (Virtuelles) de la RAM, sans cache
0xc8000000 2MB Embedded Framebuffer (EFB)
0xCC000000 Hardware registers
0xCC000000 CP - Command Processor
0xCC001000 PE - Pixel Engine
0xCC002000 VI - Video Interface
0xCC003000 PI - Processor Interface (Interrupt Interface)
0xCC004000 MI - Memory Interface
0xCC005000 AI - Audio Interface
0xCC006000 DI - DVD Interface
0xCC006400 SI - Serial Interface
0xCC006800 EXI - External Interface
0xCC006C00 Streaming Interface
0xCC008000 GX FIFO (Graphic display lists)
0xe0000000 0xe0003fff 16k L2 Cache
0xfff00000 1MB IPL (mappé ici lors du boot)

La taille des registres matériels semble être renseignée dans un module Ghidra permettant de loader les fichiers dol.

Mémoire du programme (dol)

L'espace utilisateur se situe dans les 24MB de la RAM en adressage virtuel mis en cache, des adresses 0x80003100 à 0x817fffff.

Les 0x3100 premiers octets contiennent des informations système ("Dolphin OS Globals") notamment les routines appelées lors des interruptions spécifique à powerpc. On y retrouvera aussi tout un tas d'information sur l'iso ou encore l'offset de la FST etc.

Mapping mémoire
Adresse Description
0x80003100 Début du mapping des sections .text (généralement)
0x80003140 Entry point (early SDK v1.0 applications)
0x81200000 Adresse de chargement de l'Apploader
0x81300000 Adresse de chargement du Bootrom/IPL
? Stack - pile du programme
? Heap - mémoire tas - ArenaLo décrit le bas et ArenaHigh le haut collé à la FST
? FST - Taille variable
0x817fffff Fin de l'adressage virtuel

Il est tout d'abord intéressant de noter que la mémoire tas et la pile sont dans l'intervalle 0x80120000 - 0x817fffff. Leur taille varie. La pile est gérée par le registre r1 et augmente dans les adresses positives. La mémoire tas quand à elle est allouée via l'api du SDK.

Le dol peut être mappé de 0x80003100 à 0x81200000 ce qui laisse 18 Mo pour le programme. Il est alors à préciser que le mapping des sections du dol initial en mémoire délimite une partie de ce que le programme utilise. En effet, les adresses qui n'appartiennent pas aux sections sont utilisées dans le programme.

La FST est chargée en fonction de son positionnement par rapport au dol dans l'iso/GCM:

  • dol_offset_FST < dol_offset_iso -> virtual_address_FST > dol_address_FST
  • dol_offset_FST > dol_offset_iso -> virtual_address_FST < dol_address_FST

SI - Serial Interface

Les sources de Dolphin Emulator donnent des indices sur l'usage du registre hardaware SI. On y retrouve la connexion des périphériques GBA (Game Boy Advance), CONTROLLER, KEYBOARD, STEERING, TARUKONGA. L'interface SI utilise le protocole Joybus.

EXI

Les sources de Dolphin Emulator montrent l'usage de EXI. On y retrouve MemoryCard, MaskROM, AD16, Microphone, Ethernet, AGP, EthernetXLink, EthernetTapServer.

Logiciels

Ces logiciels ci-dessous permettent de manipuler les fichiers dol :

Catégorie:Format de fichier Catégorie:Gotcha Force