BIOS
BIO (un acronim pentru Basic Input/Output System și cunoscut și sub numele de BIOS ROM sau Xbox ROM) este o imagine firmware care este mapată în primii 16MiB din spațiul fizic de adrese al procesorului (0xFF000000 – 0xFFFFFFFFFFFF). La fel ca BIOS-ul standard al PC-ului, este responsabil de inițializarea hardware-ului Xbox și de pornirea sistemului. Cu toate acestea, spre deosebire de BIOS-ul PC, imaginea BIOS Xbox conține, de asemenea, nucleul într-o formă comprimată și criptată.
La un Xbox standard, imaginea BIOS este stocată în Flash ROM. Imaginea BIOS este de fapt de 256 kiB, duplicată de 4 ori pentru a umple cipul ROM de 1 MiB. Puteți verifica acest lucru rulând:
$ split -n 4 xbox.bin $ md5sum xa*542c62cb976a4993c8c5027dff9638ce xaa542c62cb976a4993c8c5027dff9638ce xab542c62cb976a4993c8c5027dff9638ce xac542c62cb976a4993c8c5027dff9638ce xad
Veți observa că este același fișier repetat de 4 ori. Așa se explică faptul că unele cipuri BIOS sunt de 1 MiB și altele de 256 kiB. Următorul lucru este că BIOS-ul se repetă de la 0xFF000000 până când umple restul de memorie. Cu alte cuvinte, acei 256 kiB de date se repetă de 64 de ori.
Componente
BIO este împărțit în diferite componente. Acestea sunt în mare parte aceleași de la BIOS la BIOS, dar cu unele diferențe.
3944 | 4034 | 4134 | 4817 | 5101 | 5530 | 5713 | 5838 | ||||
---|---|---|---|---|---|---|---|---|---|---|---|
Tabelul de inițializare NV2A | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | 0x00000 | ||
Tabelul de inițializare MCPX | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | 0x00070 | |
X-Coduri | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | 0x00080 | . 0x00080 | |
Copyright String | 0x00CFA | 0x00CFA | 0x00CFA | 0x00CFA | 0x00DB9 | 0x00E49 | 0x00E59 | 0x00E59 | 0x00DCC | ||
Kernel | 0x0619C | . | |||||||||
Segmentul de date Kernel | 0x3944C | . | |||||||||
2BL Întotdeauna 0x6000 octeți |
0x39E00 | 0x39E00 | 0x39E00 | 0x39E00 | . | ||||||
FBL Întotdeauna 0x2880 octeți |
0x3D400 | 0x3D400 | 0x3D400 | 0x3D400 | 0x3D400 | ||||||
Decoy Boot Loader | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 | 0x3FE00 |
Pentru informații despre modul în care sunt utilizate aceste secțiuni, consultați Procesul de pornire.
Tabloul de inițializare NV2A
Primul DWORD este un pointer la un tabel de valori pe care northbridge-ul NV2A îl folosește pentru a se inițializa, dar cu bitul cel mai puțin semnificativ setat întotdeauna la 1 (probabil un fel de verificare a corectitudinii). Al doilea DWORD este pointerul de tabel nemodificat. Pe toate BIOS-urile Xbox, tabelul de inițializare NV2A se află întotdeauna la offsetul de fișier 8, adresa virtuală 0xFF000008.
Primul DWORD al tabelului de inițializare NV2A este numărul magic 0x2B16D065 (numit „boot header”). Scopul celorlalte valori din tabel este necunoscut.
MCPX Initialization Table
Aceasta este o tabelă de valori folosită pentru a inițializa southbridge-ul MCPX. Trebuie să fie plasată la offset-ul 0x70 în imaginea ROM.
xcodes
Acestea sunt operațiile xcode executate de interpretul MCPX. Primele două rânduri par a fi un nonsens (nu execută nicio funcționalitate), dar apoi primele coduri reale pe care le-am găsit sunt:
Codurile x din versiunile BIOS 3944, 4034, 4134 încep toate cu:04 10 08 00 80 01 80 00 00
Codurile x din versiunile BIOS 4817, 5101, 5530, 5713, 5838 încep toate cu:04 84 08 00 80 01 80 00 00
Acest lucru mă face să cred că primele trei versiuni BIOS pe care le am sunt compatibile cu versiunea 1.0 MCPX, iar restul sunt compatibile cu 1.1 MCPX.
În continuare, unele persoane au crezut că există o altă secțiune necunoscută între xcodes și șirul de copyright. Din câte îmi dau seama, acea secțiune avea rolul de a permite extinderea setului de instrucțiuni xcode, deoarece BIOS-ul 5838 are considerabil mai multe xcodes decât BIOS-ul 3944.
.