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.