BIOS
BIOS (en akronym för Basic Input/Output System och även känt som BIOS ROM eller Xbox ROM) är en firmware-avbildning som är mappad till de översta 16 MB av processorns fysiska adressutrymme (0xFF000000 – 0xFFFFFFFFFF). I likhet med standard BIOS för datorer ansvarar den för att initialisera Xbox-hårdvaran och starta upp systemet. Till skillnad från PC BIOS innehåller Xbox BIOS-avbildningen även kärnan i komprimerad och krypterad form.
På en standard Xbox lagras BIOS-avbildningen i Flash ROM. BIOS-avbildningen är i själva verket 256 kiB, dubblerad fyra gånger för att fylla ROM-chipet på 1 MiB. Du kan kontrollera detta genom att köra:
$ split -n 4 xbox.bin $ md5sum xa*542c62cb976a4993c8c5027dff9638ce xaa542c62cb976a4993c8c5027dff9638ce xab542c62cb976a4993c8c5027dff9638ce xac542c62cb976a4993c8c5027dff9638ce xad
Du kommer att märka att det är samma fil som upprepas 4 gånger. Det förklarar varför vissa BIOS-chip är 1 MiB och andra 256 kiB. Nästa sak är att BIOS upprepas från 0xFF000000 tills det fyller resten av minnet. Med andra ord upprepas dessa 256 kiB data 64 gånger.
Komponenter
Bios är uppdelad i olika komponenter. Dessa är i stort sett desamma från BIOS till BIOS, men med vissa skillnader.
3944 | 4034 | 4134 | 4817 | 5101 | 5530 | 5713 | 5838 | |||
---|---|---|---|---|---|---|---|---|---|---|
NV2A Initialiseringstabell | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | |
MCPX Initialiseringstabell | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | |
X-Koder | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | |
Upphovsrätt String | 0x00CFA | 0x00CFA | 0x00CFA | 0x00DB9 | 0x00E49 | 0x00E59 | 0x00E59 | 0x00DCC | ||
Kernel | 0x0619C | |||||||||
Kärnans datasegment | 0x3944C | |||||||||
2BL Altid 0x6000 bytes |
0x39E00 | 0x39E00 | 0x39E00 | |||||||
FBL Altid 0x2880 bytes |
0x3D400 | 0x3D400 | 0x3D400 | 0x3D400 | 0x3D400 | |||||
Decoy Boot Loader | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 |
För information om hur dessa avsnitt används, se Uppstartsprocess.
NV2A Initialiseringstabell
Den första DWORD:n är en pekare till en tabell med värden som NV2A-nordbryggan använder för att initialisera sig själv, men med den minst signifikanta biten alltid satt till 1 (troligen någon form av sanitetskontroll). Det andra DWORD är den oförändrade tabellpekaren. På alla Xbox BIOS ligger NV2A-initieringstabellen alltid på filoffset 8, virtuell adress 0xFF000008.
Det första DWORD i NV2A-initieringstabellen är det magiska numret 0x2B16D065 (kallat ”boot header”). Syftet med de återstående värdena i tabellen är okänt.
MCPX-initieringstabell
Detta är en tabell med värden som används för att initialisera MCPX-sydbryggan. Den måste placeras vid offset 0x70 i ROM-avbildningen.
xcodes
Detta är de xcode-operationer som körs av MCPX-tolkaren. De första raderna verkar vara nonsens (de utför ingen funktionalitet), men sedan är de första faktiska koderna som jag har hittat följande:
Xkoderna i BIOS-versionerna 3944, 4034, 4134 börjar alla med:04 10 08 00 80 01 80 00 00
Xkoderna i BIOS-versionerna 4817, 5101, 5530, 5713, 5838 börjar alla med:04 84 08 00 80 01 80 00 00
Detta får mig att tro att de tre första BIOS-versionerna som jag har är kompatibla med 1.0 MCPX, och resten är kompatibla med 1.1 MCPX.
Nästan trodde en del människor att det fanns ytterligare en okänd sektion mellan xcodes och copyrightsträngen. Såvitt jag kan se var det avsnittet till för att göra det möjligt att utöka xcode-instruktionsuppsättningen, eftersom 5838 BIOS har betydligt fler xcodes än 3944 BIOS.