Articles

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.