Articles

BIOS

BIOS (zkratka pro Basic Input/Output System a známý také jako BIOS ROM nebo Xbox ROM) je obraz firmwaru, který je namapován na horních 16 MB fyzického adresového prostoru procesoru (0xFF000000 – 0xFFFFFFFFFF). Stejně jako standardní systém BIOS počítače je zodpovědný za inicializaci hardwaru konzole Xbox a spuštění systému. Na rozdíl od systému PC BIOS však obraz systému Xbox BIOS obsahuje také jádro v komprimované a šifrované podobě.

Ve standardním systému Xbox je obraz systému BIOS uložen v paměti Flash ROM. Obraz systému BIOS má ve skutečnosti 256 kB a je čtyřikrát duplikován, aby zaplnil čip ROM o velikosti 1 MiB. Můžete si to ověřit spuštěním:

$ split -n 4 xbox.bin $ md5sum xa*542c62cb976a4993c8c5027dff9638ce xaa542c62cb976a4993c8c5027dff9638ce xab542c62cb976a4993c8c5027dff9638ce xac542c62cb976a4993c8c5027dff9638ce xad

Zjistíte, že se jedná o stejný soubor, který se opakuje čtyřikrát. To vysvětluje, jak je možné, že některé čipy BIOS mají 1 MiB a některé 256 kiB. Další věc je, že BIOS se opakuje od 0xFF000000, dokud nezaplní zbytek paměti. Jinými slovy, těch 256 kiB dat se opakuje 64krát.

Komponenty

Bios je rozdělen na různé komponenty. Ty jsou v jednotlivých systémech BIOS z velké části stejné, ale s určitými rozdíly.

3944 4034 4134 4817 5101 5530 5713 5838
Inicializační tabulka NV2A 0x00000 0x00000 0x00000 0x00000 0x00000 0x00000 0x00000 0x00000 0x00000
Inicializační tabulka MCPX 0x00070 0x00070 0x00070 0x00070 0x00070 0x00070 0x00070 0x00070 0x00070
X-Kódy 0x00080 0x00080 0x00080 0x00080 0x00080 0x00080 0x00080 0x00080 0x00080 . 0x00080
Řetězec autorských práv 0x00CFA 0x00CFA 0x00CFA 0x00DB9 0x00E49 0x00E59 0x00E59 0x00DCC
Kernel 0x0619C
Datový segment jádra 0x3944C
2BL
Vždy 0x6000 bajtů
0x39E00 0x39E00 0x39E00
FBL
Vždy 0x2880 bajtů
0x3D400 0x3D400 0x3D400 0x3D400 0x3D400 0x3D400
Zaváděcí program Decoy 0x3FE00 0x3FE00 0x3FE00 0x3FE00 0x3FE00 0x3FE00 0x3FE00 0x3FE00 0x3FE00

Pro informace, jak se tyto sekce používají, viz zaváděcí proces.

Inicializační tabulka NV2A

První DWORD je ukazatel na tabulku hodnot, které severní můstek NV2A používá ke své inicializaci, ale s nejméně významným bitem nastaveným vždy na 1 (pravděpodobně nějaký druh kontroly správnosti). Druhý DWORD je nemodifikovaný ukazatel na tabulku. Ve všech systémech Xbox BIOS je inicializační tabulka NV2A vždy na offsetu souboru 8, virtuální adresa 0xFF000008.

První DWORD inicializační tabulky NV2A je magické číslo 0x2B16D065 (tzv. „boot header“). Účel zbývajících hodnot v tabulce není znám.

Inicializační tabulka MCPX

Jedná se o tabulku hodnot používaných k inicializaci jižního můstku MCPX. Musí být umístěna na offsetu 0x70 v obraze ROM.

xcodes

Jedná se o operace xcode prováděné interpretem MCPX. Prvních pár řádků vypadá jako nesmysl (nevykonávají žádnou funkci), ale pak jsou první skutečné kódy, které jsem našel:

Ve verzích BIOSu 3944, 4034, 4134 začínají všechny xcodes:04 10 08 00 80 01 80 00 00

Kódy xcodes ve verzích BIOS 4817, 5101, 5530, 5713, 5838 začínají na:04 84 08 00 80 01 80 00 00

To mě vede k domněnce, že první tři verze BIOS, které mám, jsou kompatibilní s 1.0 MCPX a ostatní jsou kompatibilní s 1.1 MCPX.

Dále se někteří lidé domnívali, že mezi xcodes a copyrightovým řetězcem je další neznámá část. Pokud vím, tato sekce měla umožnit rozšíření instrukční sady xcode, protože 5838 BIOS má podstatně více xcodes než 3944 BIOS.