BIOS
Le BIOS (acronyme de Basic Input/Output System et également connu sous le nom de BIOS ROM ou Xbox ROM) est une image de micrologiciel qui est mappée sur les 16MiB supérieurs de l’espace d’adresse physique du CPU (0xFF000000 – 0xFFFFFFFF). Comme le BIOS standard d’un PC, il est responsable de l’initialisation du matériel de la Xbox et du démarrage du système. Cependant, contrairement au BIOS PC, l’image du BIOS Xbox contient également le noyau sous une forme compressée et cryptée.
Sur une Xbox standard, l’image du BIOS est stockée dans la ROM Flash. L’image du BIOS est en fait de 256 kiB, dupliquée 4 fois pour remplir la puce ROM de 1 MiB. Vous pouvez le vérifier en exécutant:
$ split -n 4 xbox.bin $ md5sum xa*542c62cb976a4993c8c5027dff9638ce xaa542c62cb976a4993c8c5027dff9638ce xab542c62cb976a4993c8c5027dff9638ce xac542c62cb976a4993c8c5027dff9638ce xad
Vous remarquerez que c’est le même fichier répété 4 fois. Cela explique pourquoi certaines puces BIOS font 1 MiB et d’autres 256 kiB. La chose suivante est que le BIOS est répété à partir de 0xFF000000 jusqu’à ce qu’il remplisse le reste de la mémoire. En d’autres termes, ces 256 kiB de données sont répétés 64 fois.
Composants
Le BIOS est divisé en différents composants. Ceux-ci sont en grande partie les mêmes d’un BIOS à l’autre, mais avec quelques différences.
3944 | 4034 | 4134 | 4817 | 5101 | 5530 | 5713 | 5838 | ||
---|---|---|---|---|---|---|---|---|---|
Table d’initialisation du NV2A | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | |
Table d’initialisation du MCPX | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | |
X-Codes | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | |
Chaîne de droits d’auteur | 0x00CFA | 0x00CFA | 0x00CFA | 0x00DB9 | 0x00E49 | 0x00E59 | 0x00E59 | 0x00DCC | |
Kernel | 0x0619C | ||||||||
Segment de données du noyau | 0x3944C | ||||||||
2BL Toujours 0x6000 bytes |
0x39E00 | 0x39E00 | |||||||
FBL Toujours 0x2880 bytes |
0x3D400 | 0x3D400 | 0x3D400 | 0x3D400 | 0x3D400 | ||||
Chargeur de démarrage leurre | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 |
Pour savoir comment ces sections sont utilisées, voir Processus de démarrage.
Table d’initialisation NV2A
Le premier DWORD est un pointeur vers une table de valeurs que le northbridge NV2A utilise pour s’initialiser, mais avec le bit le moins significatif toujours à 1 (probablement une sorte de contrôle de sanité). Le second DWORD est le pointeur de la table non modifiée. Sur tous les BIOS Xbox, la table d’initialisation NV2A se trouve toujours au décalage de fichier 8, à l’adresse virtuelle 0xFF000008.
Le premier DWORD de la table d’initialisation NV2A est le nombre magique 0x2B16D065 (appelé « en-tête de démarrage »). Le but des autres valeurs de la table est inconnu.
Table d’initialisation MCPX
C’est une table de valeurs utilisée pour initialiser la passerelle sud MCPX. Elle doit être placée à l’offset 0x70 dans l’image ROM.
xcodes
Ce sont les opérations xcode exécutées par l’interprète MCPX. Les deux premières lignes semblent n’avoir aucun sens (elles n’exécutent aucune fonctionnalité), mais ensuite les premiers codes réels que j’ai trouvés sont:
Les xcodes dans les versions 3944, 4034, 4134 du BIOS commencent tous par :04 10 08 00 80 01 80 00 00
Les xcodes dans les versions du BIOS 4817, 5101, 5530, 5713, 5838 commencent tous par:04 84 08 00 80 01 80 00 00
Cela me porte à croire que les trois premières versions du BIOS que j’ai sont compatibles avec le 1.0 MCPX, et les autres sont compatibles avec le 1.1 MCPX.
Puis, certaines personnes croyaient qu’il y avait une autre section inconnue entre les xcodes et la chaîne de copyright. D’après ce que je peux dire, cette section devait permettre au jeu d’instructions xcode de s’étendre, car le BIOS 5838 a considérablement plus de xcodes que le BIOS 3944.