BIOS
BIOS (akronim od Basic Input/Output System i znany również jako BIOS ROM lub Xbox ROM) jest obrazem firmware’u, który jest mapowany do górnych 16MiB fizycznej przestrzeni adresowej procesora (0xFF0000 – 0xFFFFFFFF). Podobnie jak standardowy BIOS komputera PC, jest on odpowiedzialny za inicjalizację sprzętu Xbox i uruchamianie systemu. Jednak w przeciwieństwie do BIOS-u PC, obraz BIOS-u konsoli Xbox zawiera również jądro w skompresowanej i zaszyfrowanej formie.
Na standardowej konsoli Xbox, obraz BIOS-u jest przechowywany w pamięci Flash ROM. Obraz BIOS-u to tak naprawdę 256 kiB, powielone 4 razy, aby wypełnić 1 MiB pamięci ROM. Możesz to sprawdzić uruchamiając:
$ split -n 4 xbox.bin $ md5sum xa*542c62cb976a4993c8c5027dff9638ce xaa542c62cb976a4993c8c5027dff9638ce xab542c62cb976a4993c8c5027dff9638ce xac542c62cb976a4993c8c5027dff9638ce xad
Zauważysz, że jest to ten sam plik powtórzony 4 razy. To wyjaśnia, dlaczego niektóre układy BIOS-u mają 1 MiB, a inne 256 kiB. Kolejną rzeczą jest to, że BIOS jest powtarzany od 0xFF0000 aż do zapełnienia reszty pamięci. Innymi słowy, te 256 kiB danych jest powtarzane 64 razy.
Komponenty
BIOS jest podzielony na różne komponenty. Są one w dużej mierze takie same w różnych BIOS-ach, ale z pewnymi różnicami.
3944 | 4034 | 4134 | 4817 | 5101 | 5530 | 5713 | 5838 | ||||
---|---|---|---|---|---|---|---|---|---|---|---|
Tablica inicjalizacji NV2A | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | ||
Tablica inicjalizacji MCPX | 0x00070 | . 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | |||
X-Kody | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | . 0x00080 | ||
Copyright String | 0x00CFA | 0x00CFA | 0x00CFA | 0x00DB9 | 0x00E49 | . 0x00E59 | 0x00E59 | 0x00DCC | |||
Kernel | 0x0619C | . | |||||||||
Segment danych jądra | 0x3944C | ||||||||||
2BL Zawsze 0x6000 bajtów |
0x39E00 | 0x39E00 | 0x39E00 | . | |||||||
FBL Zawsze 0x2880 bajtów |
0x3D400 | 0x3D400 | 0x3D400 | 0x3D400 | 0x3D400 | 0x3D400 | |||||
Decoy Boot Loader | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 |
W celu uzyskania informacji, jak te sekcje są używane, zobacz Boot Process.
Tablica inicjalizacji NV2A
Pierwszy DWORD jest wskaźnikiem do tablicy wartości, których mostek północny NV2A używa do inicjalizacji, ale z najmniej znaczącym bitem zawsze ustawionym na 1 (prawdopodobnie jakaś kontrola poprawności). Drugi DWORD jest niezmodyfikowanym wskaźnikiem do tabeli. Na wszystkich Xbox BIOS, tablica inicjalizacyjna NV2A jest zawsze w pliku offset 8, adres wirtualny 0xFF000008.
Pierwszym DWORD tablicy inicjalizacyjnej NV2A jest magiczna liczba 0x2B16D065 (nazywana „boot header”). Przeznaczenie pozostałych wartości w tablicy jest nieznane.
Tablica inicjalizacyjna MCPX
Jest to tablica wartości używanych do inicjalizacji mostka południowego MCPX. Musi być umieszczona na offsecie 0x70 w obrazie ROM.
xcodes
To są operacje xcode wykonywane przez interpreter MCPX. Pierwsze kilka linii wydaje się być nonsensowne (nie wykonują żadnej funkcjonalności), ale potem pojawiają się pierwsze rzeczywiste kody, które znalazłem:
Kody xcodes w BIOS-ie w wersjach 3944, 4034, 4134 zaczynają się od:04 10 08 00 80 01 80 00 00
Kody xcodes w BIOS-ach w wersjach 4817, 5101, 5530, 5713, 5838 wszystkie zaczynają się od:04 84 08 00 80 01 80 00 00
To prowadzi mnie do przekonania, że pierwsze trzy wersje BIOS-ów, które posiadam są kompatybilne z 1.0 MCPX, a pozostałe są kompatybilne z 1.1 MCPX.
Następnie, niektórzy uważali, że istnieje jeszcze jedna nieznana sekcja pomiędzy xcodes a copyright stringiem. Z tego, co wiem, sekcja ta miała umożliwić rozszerzenie zestawu instrukcji xcode, ponieważ BIOS 5838 ma znacznie więcej xcodes niż BIOS 3944.