Articles

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.

.