Articles

BIOS

A BIOS (a Basic Input/Output System rövidítése, más néven BIOS ROM vagy Xbox ROM) egy firmware-kép, amely a CPU fizikai címtartományának felső 16 MB-jára (0xFF000000 – 0xFFFFFFFFFFFFFF) van leképezve. A hagyományos PC BIOS-hoz hasonlóan ez felel az Xbox hardver inicializálásáért és a rendszer indításáért. A PC BIOS-tól eltérően azonban az Xbox BIOS-kép tömörített és titkosított formában tartalmazza a rendszermagot is.

A szabványos Xbox-on a BIOS-kép a Flash ROM-ban tárolódik. A BIOS-kép valójában 256 kiB, 4-szer duplikálva, hogy kitöltse az 1 MiB-os ROM chipet. Ezt a következő futtatással ellenőrizheted:

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

Észre fogod venni, hogy ez ugyanaz a fájl négyszer megismétlődik. Ez megmagyarázza, hogy egyes BIOS chipek 1 MiB-osak, mások pedig 256 kiB-osak. A következő dolog az, hogy a BIOS megismétlődik 0xFF000000-tól addig, amíg a memória többi részét ki nem tölti. Más szóval ez a 256 kiB adat 64-szer ismétlődik.

Komponensek

A BIOS különböző komponensekre van felosztva. Ezek BIOS-ról BIOS-ra nagyrészt azonosak, de néhány eltéréssel.

3944 4034 4134 4817 5101 5530 5713 5838
NV2A inicializálási tábla 0x00000 0x00000 0x00000 0x00000 0x00000 0x00000 0x00000 0x00000 0x00000 0x00000
MCPX inicializálási táblázat 0x00070 0x00070 0x00070 0x00070 0x00070 0x00070 0x00070 0x00070 0x00070
X-Kódok 0x00080 0x00080 0x00080 0x00080 0x00080 0x00080 0x00080 0x00080 0x00080 0x00080
Copyright String 0x00CFA 0x00CFA 0x00CFA 0x00CFA 0x00DB9 0x00E49 0x00E59 0x00E59 0x00DCC
Kernel 0x0619C
Kernel Data Segment 0x3944C
2BL
Mindig 0x6000 bájt
0x39E00 0x39E00 0x39E00
FBL
Mindig 0x2880 bájt
0x3D400 0x3D400 0x3D400 0x3D400 0x3D400
Decoy Boot Loader 0x3FE00 0x3FE00 0x3FE00 0x3FE00 0x3FE00 0x3FE00 0x3FE00 0x3FE00 0x3FE00 0x3FE00

Az információkért, hogyan használják ezeket a szakaszokat, lásd: Boot folyamat.

NV2A Initialization Table

Az első DWORD egy olyan értéktáblára mutató mutató, amelyet az NV2A northbridge használ az inicializáláshoz, de a legkisebb értékű bit mindig 1-re van állítva (valószínűleg valamilyen szanitási ellenőrzés). A második DWORD a változatlan táblázatmutató. Az összes Xbox BIOS-ban az NV2A inicializációs tábla mindig a 8-as fájleltolásnál, a 0xFF000008 virtuális címen található.

Az NV2A inicializációs tábla első DWORD-ja a 0x2B16D065 bűvös szám (az úgynevezett “boot header”). A táblázat többi értékének célja ismeretlen.

MCPX inicializálási táblázat

Ez a táblázat az MCPX southbridge inicializálásához használt értékeket tartalmazza. A ROM-képben a 0x70-es eltolásnál kell elhelyezni.

xcodes

Ezek az MCPX-értelmező által végrehajtott xcode műveletek. Az első pár sor értelmetlennek tűnik (nem hajtanak végre semmilyen funkciót), de aztán az első tényleges kódok, amiket találtam:

Az xcodes a BIOS 3944, 4034, 4134 verzióiban mind így kezdődik:04 10 08 00 80 01 80 00 00

A 4817, 5101, 5530, 5713, 5838 BIOS-verziók xkódjai mind így kezdődnek:04 84 08 00 80 01 80 00 00

Ez arra enged következtetni, hogy az első három BIOS-verzió, amellyel rendelkezem, kompatibilis az 1. sz.0 MCPX-szel, a többi pedig az 1.1 MCPX-szel kompatibilis.

Következő, egyesek úgy vélték, hogy az xcodes és a copyright string között van még egy ismeretlen szakasz. Amennyire én tudom, ez a szakasz arra szolgált, hogy lehetővé tegye az xcode utasításkészlet bővítését, mivel az 5838 BIOS lényegesen több xcode-ot tartalmaz, mint a 3944 BIOS.