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.