BIOS
Das BIOS (ein Akronym für Basic Input/Output System und auch bekannt als BIOS ROM oder Xbox ROM) ist ein Firmware-Image, das den obersten 16MiB des physischen Adressraums der CPU (0xFF000000 – 0xFFFFFFFF) zugeordnet ist. Wie das Standard-PC-BIOS ist es für die Initialisierung der Xbox-Hardware und das Booten des Systems verantwortlich. Im Gegensatz zum PC-BIOS enthält das Xbox-BIOS-Image jedoch auch den Kernel in komprimierter und verschlüsselter Form.
Bei einer Standard-Xbox ist das BIOS-Image im Flash-ROM gespeichert. Das BIOS-Image ist eigentlich 256 kiB groß und wird viermal dupliziert, um den 1 MiB großen ROM-Chip zu füllen. Sie können dies überprüfen, indem Sie Folgendes ausführen:
$ split -n 4 xbox.bin $ md5sum xa*542c62cb976a4993c8c5027dff9638ce xaa542c62cb976a4993c8c5027dff9638ce xab542c62cb976a4993c8c5027dff9638ce xac542c62cb976a4993c8c5027dff9638ce xad
Sie werden feststellen, dass es sich um dieselbe Datei handelt, die 4 Mal wiederholt wird. Das erklärt, warum einige BIOS-Chips 1 MiB und andere 256 kiB groß sind. Die nächste Sache ist, dass das BIOS von 0xFF000000 an wiederholt wird, bis es den Rest des Speichers füllt. Mit anderen Worten, diese 256 kiB an Daten werden 64 Mal wiederholt.
Komponenten
Das BIOS ist in verschiedene Komponenten aufgeteilt. Diese sind von BIOS zu BIOS weitgehend gleich, aber mit einigen Unterschieden.
3944 | 4034 | 4134 | 4817 | 5101 | 5530 | 5713 | 5838 | ||
---|---|---|---|---|---|---|---|---|---|
NV2A-Initialisierungstabelle | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | |
MCPX Initialisierungstabelle | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | |
X-Codes | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | |
Copyright String | 0x00CFA | 0x00CFA | 0x00CFA | 0x00DB9 | 0x00E49 | 0x00E59 | 0x00E59 | 0x00DCC | |
Kernel | 0x0619C | ||||||||
Kernel Data Segment | 0x3944C | ||||||||
2BL Immer 0x6000 Bytes |
0x39E00 | 0x39E00 | 0x39E00 | ||||||
FBL Immer 0x2880 Bytes |
0x3D400 | 0x3D400 | 0x3D400 | 0x3D400 | 0x3D400 | ||||
Decoy Boot Loader | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 |
Für Informationen wie diese Abschnitte verwendet werden, siehe Bootvorgang.
NV2A-Initialisierungstabelle
Das erste DWORD ist ein Zeiger auf eine Wertetabelle, die die NV2A-Northbridge verwendet, um sich selbst zu initialisieren, wobei das niederwertigste Bit immer auf 1 gesetzt ist (wahrscheinlich eine Art Sicherheitsüberprüfung). Das zweite DWORD ist der unveränderte Tabellenzeiger. Bei allen Xbox-BIOS befindet sich die NV2A-Initialisierungstabelle immer an Datei-Offset 8, virtuelle Adresse 0xFF000008.
Das erste DWORD der NV2A-Initialisierungstabelle ist die magische Zahl 0x2B16D065 (der sogenannte „Boot-Header“). Der Zweck der restlichen Werte in der Tabelle ist unbekannt.
MCPX Initialization Table
Dies ist eine Tabelle mit Werten, die zur Initialisierung der MCPX-Southbridge verwendet werden. Sie muss an Offset 0x70 im ROM-Image platziert werden.
xcodes
Dies sind die xcode-Operationen, die vom MCPX-Interpreter ausgeführt werden. Die ersten paar Zeilen scheinen Unsinn zu sein (sie führen keine Funktionen aus), aber dann sind die ersten tatsächlichen Codes, die ich gefunden habe:
Die xcodes in den BIOS-Versionen 3944, 4034, 4134 beginnen alle mit:04 10 08 00 80 01 80 00 00
Die X-Codes in den BIOS-Versionen 4817, 5101, 5530, 5713, 5838 beginnen alle mit:04 84 08 00 80 01 80 00 00
Das führt mich zu der Annahme, dass die ersten drei BIOS-Versionen, die ich habe, kompatibel mit dem 1.0 MCPX kompatibel sind, und der Rest mit dem 1.1 MCPX.
Nächstens glaubten einige Leute, dass es einen weiteren unbekannten Abschnitt zwischen den Xcodes und dem Copyright-String gibt. Soweit ich das beurteilen kann, diente dieser Abschnitt dazu, den xcode-Befehlssatz zu erweitern, da das 5838 BIOS wesentlich mehr xcodes hat als das 3944 BIOS.