Articles

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.