Articles

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.