<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://xboxdevwiki.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Eighthpence</id>
		<title>xboxdevwiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://xboxdevwiki.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Eighthpence"/>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/Special:Contributions/Eighthpence"/>
		<updated>2026-05-03T20:23:23Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.28.0</generator>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Boot_Process&amp;diff=5524</id>
		<title>Boot Process</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Boot_Process&amp;diff=5524"/>
				<updated>2017-05-29T09:03:37Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* Kernel decryption */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
== MCPX ==&lt;br /&gt;
&lt;br /&gt;
Certain things are still missing, for example, getting the CPU to 32 bit protected mode and enabling caching.{{FIXME}}&lt;br /&gt;
&lt;br /&gt;
=== Xcodes ===&lt;br /&gt;
&lt;br /&gt;
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void xcode_interpreter() {&lt;br /&gt;
    int run_xcodes = 1;&lt;br /&gt;
    uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode&lt;br /&gt;
    uint32_t result, scratch = 0;&lt;br /&gt;
    while (run_xcodes) {&lt;br /&gt;
        opcode    = get_memory_byte(eip);&lt;br /&gt;
        operand_1 = get_memory_dword(eip+1);&lt;br /&gt;
        operand_2 = get_memory_dword(eip+5);&lt;br /&gt;
&lt;br /&gt;
        if (opcode == 0x07) {&lt;br /&gt;
            opcode    = operand_1;&lt;br /&gt;
            operand_1 = operand_2;&lt;br /&gt;
            operand_2 = result;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        switch (opcode) {&lt;br /&gt;
            case 0x02:&lt;br /&gt;
                result = get_memory_dword(operand_1 &amp;amp; 0x0fffffff);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x03:&lt;br /&gt;
                set_memory_dword(operand_1) = operand_2;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x06:&lt;br /&gt;
                result = (result &amp;amp; operand_1) | operand_2;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x04:&lt;br /&gt;
                if (operand_1 == 0x80000880) {&lt;br /&gt;
                    operand_2 &amp;amp;= 0xfffffffd;&lt;br /&gt;
                }&lt;br /&gt;
                outl(operand_1, 0xcf8);&lt;br /&gt;
                outl(operand_2, 0xcfc);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x05:&lt;br /&gt;
                outl(operand_1, 0xcf8);&lt;br /&gt;
                result = inl(0xcfc);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x08:&lt;br /&gt;
                if (result != operand_1) {&lt;br /&gt;
                    eip += operand_2;&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x09:&lt;br /&gt;
                eip += operand_2;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x10:&lt;br /&gt;
                scratch = (scratch &amp;amp; operand_1) | operand_2;&lt;br /&gt;
                result = scratch;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x11:&lt;br /&gt;
                outb(operand_2, operand_1);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x12:&lt;br /&gt;
                result = inb(operand_1);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0xee:&lt;br /&gt;
                run_xcodes = 0;&lt;br /&gt;
            default:&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        eip += 9;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== RC4 Decryption of the 2BL ===&lt;br /&gt;
&lt;br /&gt;
Decryption of the 2BL seems to happen in 4 stages.&lt;br /&gt;
&lt;br /&gt;
==== Stage 1 ====&lt;br /&gt;
&lt;br /&gt;
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void init_rc4() {&lt;br /&gt;
    uint32_t stack_pointer = 0x8f000;&lt;br /&gt;
&lt;br /&gt;
    for (int iterator = 0; iterator &amp;lt;= 255; iterator++) {&lt;br /&gt;
        set_memory_byte(stack_pointer + iterator, iterator);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Stage 2 ====&lt;br /&gt;
&lt;br /&gt;
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void load_key() {&lt;br /&gt;
    uint32_t key_location = 0xffffffa5;&lt;br /&gt;
    uint32_t stack_pointer = 0x8f000;&lt;br /&gt;
    uint8_t i, j = 0;&lt;br /&gt;
&lt;br /&gt;
    for (int iterator = 0; iterator &amp;lt;= 255; iterator++) {&lt;br /&gt;
        i = get_memory_byte(iterator + stack_pointer);&lt;br /&gt;
        j += i + get_memory_byte(key_location + (iterator % 16));&lt;br /&gt;
        set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));&lt;br /&gt;
        set_memory_byte(j+stack_pointer, i);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Stage 3 ====&lt;br /&gt;
&lt;br /&gt;
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x00090000. It is 24KiB in size.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void decrypt() {&lt;br /&gt;
    uint32_t stack_pointer = 0x0008F000;&lt;br /&gt;
    uint32_t encrypted = 0xFFFF9E00;&lt;br /&gt;
    uint32_t decrypted = 0x00090000;&lt;br /&gt;
&lt;br /&gt;
    uint8_t a, b, j, i = 0;&lt;br /&gt;
&lt;br /&gt;
    i = get_memory_byte(stack_pointer + 0x100); // 0&lt;br /&gt;
    j = get_memory_byte(stack_pointer + 0x101); // 0&lt;br /&gt;
&lt;br /&gt;
    for (int edi = 0; edi &amp;lt;= 0x6000; ++edi) {&lt;br /&gt;
        ++i;&lt;br /&gt;
&lt;br /&gt;
        a = get_memory_byte(stack_pointer + i);&lt;br /&gt;
        j += a;&lt;br /&gt;
        b = get_memory_byte(stack_pointer + j);&lt;br /&gt;
        set_memory_byte(stack_pointer + i, b);&lt;br /&gt;
        set_memory_byte(stack_pointer + j, a);&lt;br /&gt;
        a += b;&lt;br /&gt;
        b = get_memory_byte(edi + encrypted);&lt;br /&gt;
        a = get_memory_byte(stack_pointer + a);&lt;br /&gt;
        b ^= a;&lt;br /&gt;
        set_memory_byte(edi + decrypted, b);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Stage 4 ====&lt;br /&gt;
&lt;br /&gt;
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void verify() {&lt;br /&gt;
    if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {&lt;br /&gt;
        eip = 0x900000;&lt;br /&gt;
    } else {&lt;br /&gt;
        // Else, things have gone wrong&lt;br /&gt;
        eip = 0xFFFFFF94;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
&lt;br /&gt;
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.&lt;br /&gt;
&lt;br /&gt;
== 2BL ==&lt;br /&gt;
&lt;br /&gt;
Certain parts are still missing&lt;br /&gt;
&lt;br /&gt;
=== MTRR Setup ===&lt;br /&gt;
&lt;br /&gt;
First, the cache is disabled.{{FIXME}}&lt;br /&gt;
Then, the MTRR (Memory Type Range Register) will be setup (using &amp;lt;code&amp;gt;wrmsr&amp;lt;/code&amp;gt;) in the following way:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! MTRR (ecx) !! High value (edx) !! Low value (eax) !! Notes&lt;br /&gt;
|-&lt;br /&gt;
|0x200 || 0x00000000 || 0x00000006 ||&lt;br /&gt;
|-&lt;br /&gt;
| rowspan = &amp;quot;2&amp;quot; | 0x201 || rowspan = &amp;quot;2&amp;quot; | 0x0000000F || 0xFC000800 || ''(For 64 MiB RAM BIOS)''&lt;br /&gt;
|-&lt;br /&gt;
|0xF8000800 || (''For 128 MiB RAM BIOS'')&lt;br /&gt;
|-&lt;br /&gt;
|0x202 || 0x00000000 || 0xFFF80005 ||&lt;br /&gt;
|-&lt;br /&gt;
|0x203 || 0x0000000F || 0xFFF80800 ||&lt;br /&gt;
|-&lt;br /&gt;
|0x204 || 0x00000000 || 0x00000000 || rowspan=&amp;quot;3&amp;quot; | Clear all unused MTRR&lt;br /&gt;
|-&lt;br /&gt;
| colspan = &amp;quot;3&amp;quot; | ...&lt;br /&gt;
|-&lt;br /&gt;
|0x20F || 0x00000000 || 0x00000000&lt;br /&gt;
|-&lt;br /&gt;
|0x2FF || 0x00000000 || 0x00000800 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Once the MTRR have been written, the cache is enabled.{{FIXME}}&lt;br /&gt;
&lt;br /&gt;
=== Register setup ===&lt;br /&gt;
&lt;br /&gt;
Now the 2BL will set up the segment registers{{FIXME|reason=why?!}} and stack:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Register !! Value !! Notes&lt;br /&gt;
|-&lt;br /&gt;
|ds || 0x0010 || rowspan=&amp;quot;3&amp;quot; | Data segment{{citation needed}}&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|es || 0x0010&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|ss || 0x0010&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|esp || 0x00400000 ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|fs || 0x0000 ||&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|gs || 0x0000 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Self-copy ===&lt;br /&gt;
&lt;br /&gt;
Now the 2BL copies itself (24 kiB) from 0x00900000 to memory address 0x00400000.&lt;br /&gt;
&lt;br /&gt;
=== Paging ===&lt;br /&gt;
&lt;br /&gt;
Now a PDE is prepared at address 0x0000F000:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset in PDE !! Value !! Notes&lt;br /&gt;
|-&lt;br /&gt;
|0x000 || 0x000000E3 || rowspan=&amp;quot;7&amp;quot; | Identity maps the first 256MiB of RAM: 0x00000000 and 0x80000000 will both map to physical page 0 &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; 0xE3: Flags: &amp;lt;br&amp;gt; * 0x80: 4 MiB page &amp;lt;br&amp;gt; * 0x40: Marked as previously written (Dirty) &amp;lt;br&amp;gt; * 0x20: Marked as previously accessed &amp;lt;br&amp;gt; * 0x02: Read/Write &amp;lt;br&amp;gt; * 0x01: Present&lt;br /&gt;
|-&lt;br /&gt;
|0x800 || 0x000000E3&lt;br /&gt;
|-&lt;br /&gt;
|0x004 || 0x004000E3&lt;br /&gt;
|-&lt;br /&gt;
|0x804 || 0x004000E3&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | ...&lt;br /&gt;
|-&lt;br /&gt;
|0x8FC || 0x0FC000E3&lt;br /&gt;
|-&lt;br /&gt;
|0x0FC || 0x0FC000E3&lt;br /&gt;
|-&lt;br /&gt;
|0x900 || 0x00000000 || rowspan=&amp;quot;5&amp;quot; | Unmapping the rest of the pages&lt;br /&gt;
|-&lt;br /&gt;
|0x100 || 0x00000000&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | ...&lt;br /&gt;
|-&lt;br /&gt;
|0xFFC || 0x00000000&lt;br /&gt;
|-&lt;br /&gt;
|0x7FC || 0x00000000&lt;br /&gt;
|-&lt;br /&gt;
|0xC00 || 0x0000F063 || Maps the PDE (4 kiB page) to address 0xC0000000 &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; 0x63: Flags: &amp;lt;br&amp;gt; * 0x40: Marked as previously written (Dirty) &amp;lt;br&amp;gt; * 0x20: Marked as previously accessed &amp;lt;br&amp;gt; * 0x02: Read/Write &amp;lt;br&amp;gt; * 0x01: Present&lt;br /&gt;
|-&lt;br /&gt;
|0xFFC || 0xFFC000E3 || Identity maps the upper portion of the Flash (4 MiB page) to address 0xFFC00000 &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; 0xE3: Flags: &amp;lt;br&amp;gt; * 0x80: 4 MiB page &amp;lt;br&amp;gt; * 0x40: Marked as previously written (Dirty) &amp;lt;br&amp;gt; * 0x20: Marked as previously accessed &amp;lt;br&amp;gt; * 0x02: Read/Write &amp;lt;br&amp;gt; * 0x01: Present&lt;br /&gt;
|-&lt;br /&gt;
|0xFD0 || 0xFD0000FB || rowspan=&amp;quot;4&amp;quot; | Maps 16 MiB for the GPU control registers &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; 0xFB: Flags: &amp;lt;br&amp;gt; * 0x80: 4 MiB page &amp;lt;br&amp;gt; * 0x40: Marked as previously written (Dirty) &amp;lt;br&amp;gt; * 0x20: Marked as previously accessed &amp;lt;br&amp;gt; * 0x10: Cache disabled &amp;lt;br&amp;gt; * 0x08: Write-Through caching &amp;lt;br&amp;gt; * 0x02: Read/Write &amp;lt;br&amp;gt; * 0x01: Present&lt;br /&gt;
|-&lt;br /&gt;
|0xFD4 || 0xFD4000FB&lt;br /&gt;
|-&lt;br /&gt;
|0xFD8 || 0xFD8000FB&lt;br /&gt;
|-&lt;br /&gt;
|0xFDC || 0xFDC000FB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After setting up the PDE, the PAT is set up using &amp;lt;code&amp;gt;wrmsr&amp;lt;/code&amp;gt;: {{FIXME}}&lt;br /&gt;
&lt;br /&gt;
CR4 is touched {{FIXME}}&lt;br /&gt;
&lt;br /&gt;
CR3 is touched {{FIXME}}&lt;br /&gt;
&lt;br /&gt;
Now paging is activated by enabling the PG and WP bits in CR0.&lt;br /&gt;
Additionally, the same &amp;lt;code&amp;gt;or&amp;lt;/code&amp;gt; instruction is used to enable the NE bit in cr0.&lt;br /&gt;
&lt;br /&gt;
=== 2BL main ===&lt;br /&gt;
&lt;br /&gt;
esp is now also reloaded to point at the relocated address. It will be set to 0x80400000 (absolute value, independent of previous esp value).&lt;br /&gt;
The 2BL will now &amp;lt;code&amp;gt;call&amp;lt;/code&amp;gt; into the relocated 2BL code somewhere near 0x00400000.&lt;br /&gt;
&lt;br /&gt;
==== Disabling of the MCPX ROM ====&lt;br /&gt;
&lt;br /&gt;
==== SMC handling ====&lt;br /&gt;
&lt;br /&gt;
The [[SMC]] has a watchdog functionality which must be turned off.&lt;br /&gt;
This is done by querying the SMC registers 0x1C - 0x1F.&lt;br /&gt;
If all of them are 0x00 the 2BL will shutdown the system{{FIXME}}.&lt;br /&gt;
If this is not the case, the bootloader calculates the watchdog challenge response and sends it to SMC registers 0x20 and 0x21.&lt;br /&gt;
&lt;br /&gt;
Additionally, the 2BL will set SMC register 0x01 to 0 (which resets the cursor position for reading the SMC revision information).&lt;br /&gt;
&lt;br /&gt;
==== Weird stuff 0{{FIXME}} ====&lt;br /&gt;
&lt;br /&gt;
==== Memory cleanup ====&lt;br /&gt;
&lt;br /&gt;
The 2BL fills memory with 0xCC from 0x80090000 to 0x80095FFF. These are the 24 kiB where the 2BL was stored previously.&lt;br /&gt;
&lt;br /&gt;
==== Weird stuff 1{{FIXME}} ====&lt;br /&gt;
&lt;br /&gt;
==== Weird stuff 2{{FIXME}} ====&lt;br /&gt;
&lt;br /&gt;
==== Weird stuff 3{{FIXME}} ====&lt;br /&gt;
&lt;br /&gt;
==== Loading the kernel ====&lt;br /&gt;
===== Kernel-copy =====&lt;br /&gt;
&lt;br /&gt;
The Kernel is now copied into RAM.&lt;br /&gt;
&lt;br /&gt;
===== Kernel decryption =====&lt;br /&gt;
&lt;br /&gt;
The 2BL will copy the kernel decryption key (16 bytes) from offset 32 of an array of 3 keys:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Offset !! Use&lt;br /&gt;
|-&lt;br /&gt;
| 0 || EEPROM key&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Certificate key&lt;br /&gt;
|-&lt;br /&gt;
| 32 || Kernel key&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The Kernel is then decrypted in-place using RC4.&lt;br /&gt;
&lt;br /&gt;
===== Kernel decompression =====&lt;br /&gt;
&lt;br /&gt;
The Kernel is decompressed directly to 0x80010000 where it will reside until a full system shutdown.&lt;br /&gt;
&lt;br /&gt;
==== Running the kernel ====&lt;br /&gt;
&lt;br /&gt;
The xboxkrnl.exe header at 0x8001000 is checked{{FIXME|reason=how?}}.&lt;br /&gt;
If it is invalid, {{FIXME}}.&lt;br /&gt;
If it is valid, the kernel entry point is looked up from the PE optional header. The hardcoded image base of 0x8001000 is added to the entry point.&lt;br /&gt;
The entry-point is now being called. Argumnts are passed on the stack, from right to left.&lt;br /&gt;
The first argument is a commandline string loaded from memory address 0x80400000. It is an empty string for retail BIOS{{FIXME|reason=Mention options for debug bioses here}}.&lt;br /&gt;
A pointer to the previously mentioned array of 3 keys is passed as the second argument.&lt;br /&gt;
&lt;br /&gt;
== Kernel ==&lt;br /&gt;
&lt;br /&gt;
=== Startup animation ===&lt;br /&gt;
&lt;br /&gt;
=== Kernel Re-initialization ===&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]&lt;br /&gt;
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5236</id>
		<title>BIOS</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5236"/>
				<updated>2017-05-17T19:39:04Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* Known Retail BIOSs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.&lt;br /&gt;
&lt;br /&gt;
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ split -n 4 xbox.bin &lt;br /&gt;
$ md5sum xa*&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xaa&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xab&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xac&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! Unknown&lt;br /&gt;
! X-Codes&lt;br /&gt;
! Copyright String &lt;br /&gt;
! Kernel&lt;br /&gt;
! Kernel Data Segment&lt;br /&gt;
! 2BL&lt;br /&gt;
! Decoy Boot Loader&lt;br /&gt;
|-&lt;br /&gt;
! 3944&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00cfa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x39E00&lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|-&lt;br /&gt;
! 4034&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00cfa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x39E00&lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|-&lt;br /&gt;
! 4134&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00cfa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x39E00&lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|-&lt;br /&gt;
! 4817&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00db9&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|-&lt;br /&gt;
! 5101&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00e49&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|-&lt;br /&gt;
! 5530&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00e59&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|-&lt;br /&gt;
! 5713&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00e59&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|-&lt;br /&gt;
! 5838&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00dcc&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000000 - 0x000000079&lt;br /&gt;
&lt;br /&gt;
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.&lt;br /&gt;
&lt;br /&gt;
=== xcodes ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000080 - Copyright string&lt;br /&gt;
&lt;br /&gt;
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:&lt;br /&gt;
04 10 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:&lt;br /&gt;
04 84 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.&lt;br /&gt;
&lt;br /&gt;
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.&lt;br /&gt;
&lt;br /&gt;
=== Copyright String ===&lt;br /&gt;
&lt;br /&gt;
Literally contains the ASCII encoded text: &amp;quot;Copyright (c) Microsoft Corporation. All rights reserved.&amp;quot; (57 bytes long).&lt;br /&gt;
See the table above for the start positions.&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Kernel Data Segment ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== 2BL ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Decoy bootloader ===&lt;br /&gt;
&lt;br /&gt;
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
[[BIOS Dumping]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]&lt;br /&gt;
* [http://redump.org/datfile/xbox-bios/ Xbox BIOS dat file from Redump Project]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Memory&amp;diff=5220</id>
		<title>Memory</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Memory&amp;diff=5220"/>
				<updated>2017-05-15T13:28:34Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.&lt;br /&gt;
&lt;br /&gt;
The memory was shared between the CPU and GPU. On the retail Xbox, the [[BIOS]] and [[MCPX ROM]] are also mapped to memory at the top 16MB and the top 512bytes respectively. On Debug Xboxs and Chihiro, only the BIOS is mapped.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Memory Type&lt;br /&gt;
! Retail Xbox Range&lt;br /&gt;
! Debug/Chihiro Range&lt;br /&gt;
|-&lt;br /&gt;
|Main Memory&lt;br /&gt;
|0x00000000 - 0x04000000&lt;br /&gt;
|0x00000000 - 0x08000000&lt;br /&gt;
|-&lt;br /&gt;
|BIOS&lt;br /&gt;
|0xFF000000 - 0xFFFFFFFF&lt;br /&gt;
|0xFF000000 - 0xFFFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
|MCPX&lt;br /&gt;
|0xFFFFFE00 - 0xFFFFFFFF&lt;br /&gt;
|N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Code for emulating the memory might consist of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef DEBUG || CHIHIRO&lt;br /&gt;
#define MAIN_MEMORY 128 * 1024 * 1024&lt;br /&gt;
int mcpx_active = 0;&lt;br /&gt;
#else&lt;br /&gt;
#define MAIN_MEMORY 64 * 1024 * 1024&lt;br /&gt;
int mcpx_active = 1;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#define BIOS_SIZE 256 * 1024&lt;br /&gt;
#define BIOS_MEMORY_SIZE 16 * 1024 * 1024&lt;br /&gt;
#define BIOS_MEMORY (0xFFFFFFFF - BIOS_MEMORY_SIZE + 1)&lt;br /&gt;
#define MCPX_SIZE   0x200&lt;br /&gt;
#define MCPX_MEMORY (0xFFFFFFFF - MCPX_SIZE + 1)&lt;br /&gt;
&lt;br /&gt;
uint8_t memory[MAIN_MEMORY] = {0};&lt;br /&gt;
uint8_t bios[BIOS_SIZE] = {0};&lt;br /&gt;
uint8_t mcpx[MCPX_SIZE] = {0};&lt;br /&gt;
&lt;br /&gt;
uint8_t get_memory_byte(uint32_t location) {&lt;br /&gt;
    if (location &amp;lt; MAIN_MEMORY) {&lt;br /&gt;
        return memory[location];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (mcpx_active &amp;amp;&amp;amp; location &amp;gt;= MCPX_MEMORY) {&lt;br /&gt;
        return mcpx[location - MCPX_MEMORY];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (location &amp;gt;= BIOS_MEMORY) {&lt;br /&gt;
        return bios[(location - BIOS_MEMORY) % BIOS_SIZE];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;Memory in unspecified range: %08X\n&amp;quot;, location);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint16_t get_memory_word(uint32_t location) {&lt;br /&gt;
    return get_memory(location + 1) &amp;lt;&amp;lt; 8 | get_memory(location);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint32_t get_memory_dword(uint32_t location) {&lt;br /&gt;
    return get_memory_word(location + 2) &amp;lt;&amp;lt; 16 | get_memory_word(location);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void deactivate_mcpx() {&lt;br /&gt;
    mcpx_active = 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5219</id>
		<title>BIOS</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5219"/>
				<updated>2017-05-15T13:27:39Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* Components */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.&lt;br /&gt;
&lt;br /&gt;
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ split -n 4 xbox.bin &lt;br /&gt;
$ md5sum xa*&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xaa&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xab&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xac&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&lt;br /&gt;
! Unknown&lt;br /&gt;
! X-Codes&lt;br /&gt;
! Copyright String &lt;br /&gt;
! Kernel&lt;br /&gt;
! Kernel Data Segment&lt;br /&gt;
! 2BL&lt;br /&gt;
! Decoy Boot Loader&lt;br /&gt;
|-&lt;br /&gt;
! 3944&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00cfa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x39E00&lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|-&lt;br /&gt;
! 4034&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00cfa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x39E00&lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|-&lt;br /&gt;
! 4134&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00cfa&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x39E00&lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|-&lt;br /&gt;
! 4817&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00db9&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|-&lt;br /&gt;
! 5101&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00e49&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|-&lt;br /&gt;
! 5530&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00e59&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|-&lt;br /&gt;
! 5713&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00e59&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|-&lt;br /&gt;
! 5838&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00dcc&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000000 - 0x000000079&lt;br /&gt;
&lt;br /&gt;
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.&lt;br /&gt;
&lt;br /&gt;
=== xcodes ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000080 - Copyright string&lt;br /&gt;
&lt;br /&gt;
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:&lt;br /&gt;
04 10 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:&lt;br /&gt;
04 84 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.&lt;br /&gt;
&lt;br /&gt;
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.&lt;br /&gt;
&lt;br /&gt;
=== Copyright String ===&lt;br /&gt;
&lt;br /&gt;
Literally contains the ASCII encoded text: &amp;quot;Copyright (c) Microsoft Corporation. All rights reserved.&amp;quot; (57 bytes long).&lt;br /&gt;
See the table above for the start positions.&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Kernel Data Segment ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== 2BL ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Decoy bootloader ===&lt;br /&gt;
&lt;br /&gt;
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.&lt;br /&gt;
&lt;br /&gt;
== Known Retail BIOSs ==&lt;br /&gt;
&lt;br /&gt;
* 3944&lt;br /&gt;
* 4034&lt;br /&gt;
* 4134&lt;br /&gt;
* 4817&lt;br /&gt;
* 5101&lt;br /&gt;
* 5530&lt;br /&gt;
* 5713&lt;br /&gt;
* 5838&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
[[BIOS Dumping]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Talk:BIOS&amp;diff=5205</id>
		<title>Talk:BIOS</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Talk:BIOS&amp;diff=5205"/>
				<updated>2017-05-14T19:40:46Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* Turn lists into a table? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Typo in the know Bios versions ==&lt;br /&gt;
@Eighthpence did you mean 3944 instead of 3394 --[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 08:06, 14 May 2017 (PDT)&lt;br /&gt;
&lt;br /&gt;
They are now changed --[[User:Eighthpence|Eighthpence]] ([[User talk:Eighthpence|talk]]) 12:23, 14 May 2017 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Turn lists into a table? ==&lt;br /&gt;
&lt;br /&gt;
This article has various lists / sections which all mention the same list of bioses.&lt;br /&gt;
I believe we should instead transform it into a table / tables and possibly leave fields blank if we don't know something.&lt;br /&gt;
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 08:05, 14 May 2017 (PDT)&lt;br /&gt;
&lt;br /&gt;
I've added a table. It needs improving but it is a start. --[[User:Eighthpence|Eighthpence]] ([[User talk:Eighthpence|talk]]) 12:40, 14 May 2017 (PDT)&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5204</id>
		<title>BIOS</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5204"/>
				<updated>2017-05-14T19:39:33Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* Components */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.&lt;br /&gt;
&lt;br /&gt;
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ split -n 4 xbox.bin &lt;br /&gt;
$ md5sum xa*&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xaa&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xab&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xac&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Memory Type&lt;br /&gt;
! 3944&lt;br /&gt;
! 4034&lt;br /&gt;
! 4134&lt;br /&gt;
! 4817&lt;br /&gt;
! 5101&lt;br /&gt;
! 5530&lt;br /&gt;
! 5713&lt;br /&gt;
! 5838&lt;br /&gt;
|-&lt;br /&gt;
| Unknown&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00000&lt;br /&gt;
| 0x00000&lt;br /&gt;
|-&lt;br /&gt;
| X-Codes&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00080&lt;br /&gt;
| 0x00080&lt;br /&gt;
|-&lt;br /&gt;
| Copyright String &lt;br /&gt;
| 0x00cfa&lt;br /&gt;
| 0x00cfa&lt;br /&gt;
| 0x00cfa&lt;br /&gt;
| 0x00db9&lt;br /&gt;
| 0x00e49&lt;br /&gt;
| 0x00e59&lt;br /&gt;
| 0x00e59&lt;br /&gt;
| 0x00dcc&lt;br /&gt;
|-&lt;br /&gt;
| Kernel&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Kernel Data Segment&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 2BL&lt;br /&gt;
| 0x039E00&lt;br /&gt;
| 0x039E00&lt;br /&gt;
| 0x039E00&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| Decoy Boot Loader&lt;br /&gt;
| 0x3FE00&lt;br /&gt;
| 0x3FE00&lt;br /&gt;
| 0x3FE00&lt;br /&gt;
| 0x3FE00&lt;br /&gt;
| 0x3FE00&lt;br /&gt;
| 0x3FE00&lt;br /&gt;
| 0x3FE00&lt;br /&gt;
| 0x3FE00&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unknown ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000000 - 0x000000079&lt;br /&gt;
&lt;br /&gt;
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.&lt;br /&gt;
&lt;br /&gt;
=== xcodes ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000080 - Copyright string&lt;br /&gt;
&lt;br /&gt;
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:&lt;br /&gt;
04 10 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:&lt;br /&gt;
04 84 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.&lt;br /&gt;
&lt;br /&gt;
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.&lt;br /&gt;
&lt;br /&gt;
=== Copyright String ===&lt;br /&gt;
&lt;br /&gt;
57 bytes long with the following start positions:&lt;br /&gt;
&lt;br /&gt;
* 3944 - 0xcfa&lt;br /&gt;
* 4034 - 0xcfa&lt;br /&gt;
* 4134 - 0xcfa&lt;br /&gt;
* 4817 - 0xdb9&lt;br /&gt;
* 5101 - 0xe49&lt;br /&gt;
* 5530 - 0xe59&lt;br /&gt;
* 5713 - 0xe59&lt;br /&gt;
* 5838 - 0xdcc&lt;br /&gt;
&lt;br /&gt;
Literally contains the text: &amp;quot;Copyright (c) Microsoft Corporation. All rights reserved.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Kernel Data Segment ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== 2BL ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Decoy bootloader ===&lt;br /&gt;
&lt;br /&gt;
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.&lt;br /&gt;
&lt;br /&gt;
== Known Retail BIOSs ==&lt;br /&gt;
&lt;br /&gt;
* 3944&lt;br /&gt;
* 4034&lt;br /&gt;
* 4134&lt;br /&gt;
* 4817&lt;br /&gt;
* 5101&lt;br /&gt;
* 5530&lt;br /&gt;
* 5713&lt;br /&gt;
* 5838&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
[[BIOS Dumping]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Talk:BIOS&amp;diff=5203</id>
		<title>Talk:BIOS</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Talk:BIOS&amp;diff=5203"/>
				<updated>2017-05-14T19:23:58Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* Typo in the know Bios versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Typo in the know Bios versions ==&lt;br /&gt;
@Eighthpence did you mean 3944 instead of 3394 --[[User:Codeasm|Codeasm]] ([[User talk:Codeasm|talk]]) 08:06, 14 May 2017 (PDT)&lt;br /&gt;
&lt;br /&gt;
They are now changed --[[User:Eighthpence|Eighthpence]] ([[User talk:Eighthpence|talk]]) 12:23, 14 May 2017 (PDT)&lt;br /&gt;
&lt;br /&gt;
== Turn lists into a table? ==&lt;br /&gt;
&lt;br /&gt;
This article has various lists / sections which all mention the same list of bioses.&lt;br /&gt;
I believe we should instead transform it into a table / tables and possibly leave fields blank if we don't know something.&lt;br /&gt;
--[[User:JayFoxRox|JayFoxRox]] ([[User talk:JayFoxRox|talk]]) 08:05, 14 May 2017 (PDT)&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5202</id>
		<title>BIOS</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5202"/>
				<updated>2017-05-14T19:23:03Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* Known Retail BIOSs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.&lt;br /&gt;
&lt;br /&gt;
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ split -n 4 xbox.bin &lt;br /&gt;
$ md5sum xa*&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xaa&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xab&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xac&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.&lt;br /&gt;
&lt;br /&gt;
=== Unknown ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000000 - 0x000000079&lt;br /&gt;
&lt;br /&gt;
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.&lt;br /&gt;
&lt;br /&gt;
=== xcodes ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000080 - Copyright string&lt;br /&gt;
&lt;br /&gt;
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:&lt;br /&gt;
04 10 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:&lt;br /&gt;
04 84 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.&lt;br /&gt;
&lt;br /&gt;
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.&lt;br /&gt;
&lt;br /&gt;
=== Copyright String ===&lt;br /&gt;
&lt;br /&gt;
57 bytes long with the following start positions:&lt;br /&gt;
&lt;br /&gt;
* 3944 - 0xcfa&lt;br /&gt;
* 4034 - 0xcfa&lt;br /&gt;
* 4134 - 0xcfa&lt;br /&gt;
* 4817 - 0xdb9&lt;br /&gt;
* 5101 - 0xe49&lt;br /&gt;
* 5530 - 0xe59&lt;br /&gt;
* 5713 - 0xe59&lt;br /&gt;
* 5838 - 0xdcc&lt;br /&gt;
&lt;br /&gt;
Literally contains the text: &amp;quot;Copyright (c) Microsoft Corporation. All rights reserved.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Kernel Data Segment ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== 2BL ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Decoy bootloader ===&lt;br /&gt;
&lt;br /&gt;
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.&lt;br /&gt;
&lt;br /&gt;
== Known Retail BIOSs ==&lt;br /&gt;
&lt;br /&gt;
* 3944&lt;br /&gt;
* 4034&lt;br /&gt;
* 4134&lt;br /&gt;
* 4817&lt;br /&gt;
* 5101&lt;br /&gt;
* 5530&lt;br /&gt;
* 5713&lt;br /&gt;
* 5838&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
[[BIOS Dumping]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5201</id>
		<title>BIOS</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5201"/>
				<updated>2017-05-14T19:22:44Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* Copyright String */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The '''BIOS''' (an acronym for '''Basic Input/Output System''' and also known as the '''BIOS ROM''' or '''Xbox ROM''') is a firmware image that is mapped to the top 16MB of the CPU's physical address space (0xFF000000-0xFFFFFFFF). Like the standard [https://en.wikipedia.org/wiki/BIOS PC BIOS], it is responsible for initializing the Xbox hardware and booting the system. Unlike the PC BIOS, however, the Xbox BIOS image also contains the kernel in a compressed and encrypted form.&lt;br /&gt;
&lt;br /&gt;
On a standard Xbox, the BIOS image is stored on a 1MB non-volatile TSOP ROM chip and connected to the MCPX via the LPC bus. The image is actually 256KB, duplicated 4 times to fill the 1MB ROM chip. You can verify this by running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ split -n 4 xbox.bin &lt;br /&gt;
$ md5sum xa*&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xaa&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xab&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xac&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.&lt;br /&gt;
&lt;br /&gt;
=== Unknown ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000000 - 0x000000079&lt;br /&gt;
&lt;br /&gt;
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.&lt;br /&gt;
&lt;br /&gt;
=== xcodes ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000080 - Copyright string&lt;br /&gt;
&lt;br /&gt;
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:&lt;br /&gt;
04 10 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:&lt;br /&gt;
04 84 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.&lt;br /&gt;
&lt;br /&gt;
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.&lt;br /&gt;
&lt;br /&gt;
=== Copyright String ===&lt;br /&gt;
&lt;br /&gt;
57 bytes long with the following start positions:&lt;br /&gt;
&lt;br /&gt;
* 3944 - 0xcfa&lt;br /&gt;
* 4034 - 0xcfa&lt;br /&gt;
* 4134 - 0xcfa&lt;br /&gt;
* 4817 - 0xdb9&lt;br /&gt;
* 5101 - 0xe49&lt;br /&gt;
* 5530 - 0xe59&lt;br /&gt;
* 5713 - 0xe59&lt;br /&gt;
* 5838 - 0xdcc&lt;br /&gt;
&lt;br /&gt;
Literally contains the text: &amp;quot;Copyright (c) Microsoft Corporation. All rights reserved.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Kernel Data Segment ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== 2BL ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Decoy bootloader ===&lt;br /&gt;
&lt;br /&gt;
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.&lt;br /&gt;
&lt;br /&gt;
== Known Retail BIOSs ==&lt;br /&gt;
&lt;br /&gt;
* 3394&lt;br /&gt;
* 4034&lt;br /&gt;
* 4134&lt;br /&gt;
* 4817&lt;br /&gt;
* 5101&lt;br /&gt;
* 5530&lt;br /&gt;
* 5713&lt;br /&gt;
* 5838&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
[[BIOS Dumping]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Boot_Process&amp;diff=5079</id>
		<title>Boot Process</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Boot_Process&amp;diff=5079"/>
				<updated>2017-04-27T19:37:29Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* Stage 4 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If we wish to HLE the MCPX, then there are certain things that can be ignored, for example, getting the CPU to 32 bit protected mode and enabling caching.&lt;br /&gt;
&lt;br /&gt;
== Xcodes ==&lt;br /&gt;
&lt;br /&gt;
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void xcode_interpreter() {&lt;br /&gt;
    int run_xcodes = 1;&lt;br /&gt;
    uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode&lt;br /&gt;
    uint32_t result, scratch = 0;&lt;br /&gt;
    while (run_xcodes) {&lt;br /&gt;
        opcode    = get_memory_byte(eip);&lt;br /&gt;
        operand_1 = get_memory_dword(eip+1);&lt;br /&gt;
        operand_2 = get_memory_dword(eip+5);&lt;br /&gt;
&lt;br /&gt;
        if (opcode == 0x07) {&lt;br /&gt;
            opcode    = operand_1;&lt;br /&gt;
            operand_1 = operand_2;&lt;br /&gt;
            operand_2 = result;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        switch (opcode) {&lt;br /&gt;
            case 0x02:&lt;br /&gt;
                result = get_memory_dword(operand_1 &amp;amp; 0x0fffffff);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x03:&lt;br /&gt;
                set_memory_dword(operand_1) = operand_2;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x06:&lt;br /&gt;
                result = (result &amp;amp; operand_1) | operand_2;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x04:&lt;br /&gt;
                if (operand_1 == 0x80000880) {&lt;br /&gt;
                    operand_2 &amp;amp;= 0xfffffffd;&lt;br /&gt;
                }&lt;br /&gt;
                outl(operand_1, 0xcf8);&lt;br /&gt;
                outl(operand_2, 0xcfc);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x05:&lt;br /&gt;
                outl(operand_1, 0xcf8);&lt;br /&gt;
                result = inl(0xcfc);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x08:&lt;br /&gt;
                if (result != operand_1) {&lt;br /&gt;
                    eip += operand_2;&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x09:&lt;br /&gt;
                eip += operand_2;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x10:&lt;br /&gt;
                scratch = (scratch &amp;amp; operand_1) | operand_2;&lt;br /&gt;
                result = scratch;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x11:&lt;br /&gt;
                outb(operand_2, operand_1);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x12:&lt;br /&gt;
                result = inb(operand_1);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0xee:&lt;br /&gt;
                run_xcodes = 0;&lt;br /&gt;
            default:&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        eip += 9;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RC4 Decryption of the 2BL ==&lt;br /&gt;
&lt;br /&gt;
Decryption of the 2BL seems to happen in 4 stages.&lt;br /&gt;
&lt;br /&gt;
=== Stage 1 ===&lt;br /&gt;
&lt;br /&gt;
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void init_rc4() {&lt;br /&gt;
    uint32_t stack_pointer = 0x8f000;&lt;br /&gt;
&lt;br /&gt;
    for (int iterator = 0; iterator &amp;lt;= 255; iterator++) {&lt;br /&gt;
        set_memory_byte(stack_pointer + iterator, iterator);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stage 2 ===&lt;br /&gt;
&lt;br /&gt;
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void load_key() {&lt;br /&gt;
    uint32_t key_location = 0xffffffa5;&lt;br /&gt;
    uint32_t stack_pointer = 0x8f000;&lt;br /&gt;
    uint8_t i, j = 0;&lt;br /&gt;
&lt;br /&gt;
    for (int iterator = 0; iterator &amp;lt;= 255; iterator++) {&lt;br /&gt;
        i = get_memory_byte(iterator + stack_pointer);&lt;br /&gt;
        j += i + get_memory_byte(key_location + (iterator % 16));&lt;br /&gt;
        set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));&lt;br /&gt;
        set_memory_byte(j+stack_pointer, i);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stage 3 ===&lt;br /&gt;
&lt;br /&gt;
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x90000. It is 24K in size.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void decrypt() {&lt;br /&gt;
    uint32_t stack_pointer = 0x8f000;&lt;br /&gt;
    uint32_t encrypted = 0xFFFF9E00;&lt;br /&gt;
    uint32_t decrypted = 0x90000;&lt;br /&gt;
&lt;br /&gt;
    uint8_t a, b, j, i = 0;&lt;br /&gt;
&lt;br /&gt;
    i = get_memory_byte(stack_pointer + 0x100); // 0&lt;br /&gt;
    j = get_memory_byte(stack_pointer + 0x101); // 0&lt;br /&gt;
&lt;br /&gt;
    for (int edi = 0; edi &amp;lt;= 0x6000; ++edi) {&lt;br /&gt;
        ++i;&lt;br /&gt;
&lt;br /&gt;
        a = get_memory_byte(stack_pointer + i);&lt;br /&gt;
        j += a;&lt;br /&gt;
        b = get_memory_byte(stack_pointer + j);&lt;br /&gt;
        set_memory_byte(stack_pointer + i, b);&lt;br /&gt;
        set_memory_byte(stack_pointer + j, a);&lt;br /&gt;
        a += b;&lt;br /&gt;
        b = get_memory_byte(edi + encrypted);&lt;br /&gt;
        a = get_memory_byte(stack_pointer + a);&lt;br /&gt;
        b ^= a;&lt;br /&gt;
        set_memory_byte(edi + decrypted, b);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stage 4 ===&lt;br /&gt;
&lt;br /&gt;
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void verify() {&lt;br /&gt;
    if (get_memory_dword(0x95FE4) == MAGIC_NUMBER) {&lt;br /&gt;
        eip = 0x900000;&lt;br /&gt;
    } else {&lt;br /&gt;
        // Else, things have gone wrong&lt;br /&gt;
        eip = 0xFFFFFF94;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
&lt;br /&gt;
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Boot_Process&amp;diff=5078</id>
		<title>Boot Process</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Boot_Process&amp;diff=5078"/>
				<updated>2017-04-27T19:26:38Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If we wish to HLE the MCPX, then there are certain things that can be ignored, for example, getting the CPU to 32 bit protected mode and enabling caching.&lt;br /&gt;
&lt;br /&gt;
== Xcodes ==&lt;br /&gt;
&lt;br /&gt;
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void xcode_interpreter() {&lt;br /&gt;
    int run_xcodes = 1;&lt;br /&gt;
    uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode&lt;br /&gt;
    uint32_t result, scratch = 0;&lt;br /&gt;
    while (run_xcodes) {&lt;br /&gt;
        opcode    = get_memory_byte(eip);&lt;br /&gt;
        operand_1 = get_memory_dword(eip+1);&lt;br /&gt;
        operand_2 = get_memory_dword(eip+5);&lt;br /&gt;
&lt;br /&gt;
        if (opcode == 0x07) {&lt;br /&gt;
            opcode    = operand_1;&lt;br /&gt;
            operand_1 = operand_2;&lt;br /&gt;
            operand_2 = result;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        switch (opcode) {&lt;br /&gt;
            case 0x02:&lt;br /&gt;
                result = get_memory_dword(operand_1 &amp;amp; 0x0fffffff);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x03:&lt;br /&gt;
                set_memory_dword(operand_1) = operand_2;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x06:&lt;br /&gt;
                result = (result &amp;amp; operand_1) | operand_2;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x04:&lt;br /&gt;
                if (operand_1 == 0x80000880) {&lt;br /&gt;
                    operand_2 &amp;amp;= 0xfffffffd;&lt;br /&gt;
                }&lt;br /&gt;
                outl(operand_1, 0xcf8);&lt;br /&gt;
                outl(operand_2, 0xcfc);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x05:&lt;br /&gt;
                outl(operand_1, 0xcf8);&lt;br /&gt;
                result = inl(0xcfc);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x08:&lt;br /&gt;
                if (result != operand_1) {&lt;br /&gt;
                    eip += operand_2;&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x09:&lt;br /&gt;
                eip += operand_2;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x10:&lt;br /&gt;
                scratch = (scratch &amp;amp; operand_1) | operand_2;&lt;br /&gt;
                result = scratch;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x11:&lt;br /&gt;
                outb(operand_2, operand_1);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x12:&lt;br /&gt;
                result = inb(operand_1);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0xee:&lt;br /&gt;
                run_xcodes = 0;&lt;br /&gt;
            default:&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        eip += 9;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RC4 Decryption of the 2BL ==&lt;br /&gt;
&lt;br /&gt;
Decryption of the 2BL seems to happen in 4 stages.&lt;br /&gt;
&lt;br /&gt;
=== Stage 1 ===&lt;br /&gt;
&lt;br /&gt;
Initialising the working space. The MCPX ROM seems to just write 1, 2, 3, 4.... 253, 254, 255 in memory addresses 0x8f000 to 0x850FF. This might look something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void init_rc4() {&lt;br /&gt;
    uint32_t stack_pointer = 0x8f000;&lt;br /&gt;
&lt;br /&gt;
    for (int iterator = 0; iterator &amp;lt;= 255; iterator++) {&lt;br /&gt;
        set_memory_byte(stack_pointer + iterator, iterator);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stage 2 ===&lt;br /&gt;
&lt;br /&gt;
Preparing for decryption. This gets the key from memory location 0xFFFFFFA5 and starts preparing and environment for decryption of the 2BL.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void load_key() {&lt;br /&gt;
    uint32_t key_location = 0xffffffa5;&lt;br /&gt;
    uint32_t stack_pointer = 0x8f000;&lt;br /&gt;
    uint8_t i, j = 0;&lt;br /&gt;
&lt;br /&gt;
    for (int iterator = 0; iterator &amp;lt;= 255; iterator++) {&lt;br /&gt;
        i = get_memory_byte(iterator + stack_pointer);&lt;br /&gt;
        j += i + get_memory_byte(key_location + (iterator % 16));&lt;br /&gt;
        set_memory_byte(iterator+stack_pointer, get_memory_byte(j+stack_pointer));&lt;br /&gt;
        set_memory_byte(j+stack_pointer, i);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stage 3 ===&lt;br /&gt;
&lt;br /&gt;
Perform the decryption. The MCPX reads the 2BL from 0xFFFF9E00 and decrypts it to 0x90000. It is 24K in size.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void decrypt() {&lt;br /&gt;
    uint32_t stack_pointer = 0x8f000;&lt;br /&gt;
    uint32_t encrypted = 0xFFFF9E00;&lt;br /&gt;
    uint32_t decrypted = 0x90000;&lt;br /&gt;
&lt;br /&gt;
    uint8_t a, b, j, i = 0;&lt;br /&gt;
&lt;br /&gt;
    i = get_memory_byte(stack_pointer + 0x100); // 0&lt;br /&gt;
    j = get_memory_byte(stack_pointer + 0x101); // 0&lt;br /&gt;
&lt;br /&gt;
    for (int edi = 0; edi &amp;lt;= 0x6000; ++edi) {&lt;br /&gt;
        ++i;&lt;br /&gt;
&lt;br /&gt;
        a = get_memory_byte(stack_pointer + i);&lt;br /&gt;
        j += a;&lt;br /&gt;
        b = get_memory_byte(stack_pointer + j);&lt;br /&gt;
        set_memory_byte(stack_pointer + i, b);&lt;br /&gt;
        set_memory_byte(stack_pointer + j, a);&lt;br /&gt;
        a += b;&lt;br /&gt;
        b = get_memory_byte(edi + encrypted);&lt;br /&gt;
        a = get_memory_byte(stack_pointer + a);&lt;br /&gt;
        b ^= a;&lt;br /&gt;
        set_memory_byte(edi + decrypted, b);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Stage 4 ===&lt;br /&gt;
&lt;br /&gt;
Verification. Finally the MCPX reads a string from the un-encrypted 2BL and compares it to a magic number. If it matches, all was successful, and we jump to the start of the 2BL to start decrypting the kernel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void verify() {&lt;br /&gt;
    if (get_memory_dword(0x95fe4) == MAGIC_NUMBER) {&lt;br /&gt;
        eip = 0x900000;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
&lt;br /&gt;
The RC4 algorithm was included as part of MCPX 1.0 and seems to work fine with BIOS versions 3944, 4034, and 4134.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Boot_Process&amp;diff=5077</id>
		<title>Boot Process</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Boot_Process&amp;diff=5077"/>
				<updated>2017-04-27T19:10:55Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If we wish to HLE the MCPX, then there are certain things that can be ignored, for example, getting the CPU to 32 bit protected mode and enabling caching.&lt;br /&gt;
&lt;br /&gt;
== Xcodes ==&lt;br /&gt;
&lt;br /&gt;
The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void xcode_interpreter() {&lt;br /&gt;
    int run_xcodes = 1;&lt;br /&gt;
    uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode&lt;br /&gt;
    uint32_t result, scratch = 0;&lt;br /&gt;
    while (run_xcodes) {&lt;br /&gt;
        opcode    = get_memory_byte(eip);&lt;br /&gt;
        operand_1 = get_memory_dword(eip+1);&lt;br /&gt;
        operand_2 = get_memory_dword(eip+5);&lt;br /&gt;
&lt;br /&gt;
        if (opcode == 0x07) {&lt;br /&gt;
            opcode    = operand_1;&lt;br /&gt;
            operand_1 = operand_2;&lt;br /&gt;
            operand_2 = result;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        switch (opcode) {&lt;br /&gt;
            case 0x02:&lt;br /&gt;
                result = get_memory_dword(operand_1 &amp;amp; 0x0fffffff);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x03:&lt;br /&gt;
                set_memory_dword(operand_1) = operand_2;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x06:&lt;br /&gt;
                result = (result &amp;amp; operand_1) | operand_2;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x04:&lt;br /&gt;
                if (operand_1 == 0x80000880) {&lt;br /&gt;
                    operand_2 &amp;amp;= 0xfffffffd;&lt;br /&gt;
                }&lt;br /&gt;
                outl(operand_1, 0xcf8);&lt;br /&gt;
                outl(operand_2, 0xcfc);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x05:&lt;br /&gt;
                outl(operand_1, 0xcf8);&lt;br /&gt;
                result = inl(0xcfc);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x08:&lt;br /&gt;
                if (result != operand_1) {&lt;br /&gt;
                    eip += operand_2;&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x09:&lt;br /&gt;
                eip += operand_2;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x10:&lt;br /&gt;
                scratch = (scratch &amp;amp; operand_1) | operand_2;&lt;br /&gt;
                result = scratch;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x11:&lt;br /&gt;
                outb(operand_2, operand_1);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x12:&lt;br /&gt;
                result = inb(operand_1);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0xee:&lt;br /&gt;
                run_xcodes = 0;&lt;br /&gt;
            default:&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        eip += 9;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=MCPX&amp;diff=5076</id>
		<title>MCPX</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=MCPX&amp;diff=5076"/>
				<updated>2017-04-26T19:51:10Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors (there are 4 of them) and also the USB, PCI, IDE, etc, controllers (please remove this disclaimer if I'm right, or fix it if I'm wrong.)&lt;br /&gt;
&lt;br /&gt;
The MCPX is also the home to the secret [[MCPX ROM]].&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Memory&amp;diff=5039</id>
		<title>Memory</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Memory&amp;diff=5039"/>
				<updated>2017-03-29T06:57:00Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it. The debug Xbox and the Chihiro both contained 128MB Memory.&lt;br /&gt;
&lt;br /&gt;
The memory was shared between the CPU and GPU. On the retail Xbox, the [[BIOS]] and [[MCPX ROM]] are also mapped to memory at the top 16MB and the top 512bytes respectively. On Debug Xboxs and Chihiro, only the BIOS is mapped.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Memory Type&lt;br /&gt;
! Retail Xbox Range&lt;br /&gt;
! Debug/Chihiro Range&lt;br /&gt;
|-&lt;br /&gt;
|Main Memory&lt;br /&gt;
|0x00000000 - 0x04000000&lt;br /&gt;
|0x00000000 - 0x08000000&lt;br /&gt;
|-&lt;br /&gt;
|BIOS&lt;br /&gt;
|0xFF000000 - 0xFFFFFFFF&lt;br /&gt;
|0xFF000000 - 0xFFFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
|MCPX&lt;br /&gt;
|0xFFFFFE00 - 0xFFFFFFFF&lt;br /&gt;
|N/A&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Code for emulating the memory might consist of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef DEBUG || CHIHIRO&lt;br /&gt;
#define MAIN_MEMORY 128 * 1024 * 1024&lt;br /&gt;
int mcpx_active = 0;&lt;br /&gt;
#else&lt;br /&gt;
#define MAIN_MEMORY 64 * 1024 * 1024&lt;br /&gt;
int mcpx_active = 1;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
#define BIOS_SIZE 256 * 1024&lt;br /&gt;
#define BIOS_MEMORY_SIZE 16 * 1024 * 1024&lt;br /&gt;
#define BIOS_MEMORY (0xFFFFFFFF - BIOS_MEMORY_SIZE + 1)&lt;br /&gt;
#define MCPX_SIZE   0x200&lt;br /&gt;
#define MCPX_MEMORY (0xFFFFFFFF - MCPX_SIZE + 1)&lt;br /&gt;
&lt;br /&gt;
uint8_t memory[MAIN_MEMORY] = {0};&lt;br /&gt;
uint8_t bios[BIOS_SIZE] = {0};&lt;br /&gt;
uint8_t mcpx[MCPX_SIZE] = {0};&lt;br /&gt;
&lt;br /&gt;
uint8_t get_memory_byte(uint32_t location) {&lt;br /&gt;
    if (location &amp;lt; MAIN_MEMORY) {&lt;br /&gt;
        return memory[location];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (mcpx_active &amp;amp;&amp;amp; location &amp;gt;= MCPX_MEMORY) {&lt;br /&gt;
        return mcpx[location - MCPX_MEMORY];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (location &amp;gt;= BIOS_MEMORY) {&lt;br /&gt;
        return bios[(location - BIOS_MEMORY) % BIOS_SIZE];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;Memory in unspecified range: %08X\n&amp;quot;, location);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint16_t get_memory_word(uint32_t location) {&lt;br /&gt;
    return get_memory(location + 1) &amp;lt;&amp;lt; 8 | get_memory(location);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint32_t get_memory_dword(uint32_t location) {&lt;br /&gt;
    return get_memory_word(location + 2) &amp;lt;&amp;lt; 16 | get_memory_word(location);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void deactivate_mcpx() {&lt;br /&gt;
    mcpx = 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Boot_Process&amp;diff=5038</id>
		<title>Boot Process</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Boot_Process&amp;diff=5038"/>
				<updated>2017-03-28T21:26:35Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If we wish to HLE the MCPX, then there are certain things that can be ignored, for example, getting the CPU to 32 bit protected mode and enabling caching. The xcode interpreter is common through both versions of the MCPX ROM. The high level interpretation of the MCPX ROM might look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void xcode_interpreter() {&lt;br /&gt;
    int run_xcodes = 1;&lt;br /&gt;
    uint32_t eip = 0xff000080; // Not really EIP. This is just a pointer to the next xcode&lt;br /&gt;
    uint32_t result, scratch = 0;&lt;br /&gt;
    while (run_xcodes) {&lt;br /&gt;
        opcode    = get_memory_byte(eip);&lt;br /&gt;
        operand_1 = get_memory_dword(eip+1);&lt;br /&gt;
        operand_2 = get_memory_dword(eip+5);&lt;br /&gt;
&lt;br /&gt;
        if (opcode == 0x07) {&lt;br /&gt;
            opcode    = operand_1;&lt;br /&gt;
            operand_1 = operand_2;&lt;br /&gt;
            operand_2 = result;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        switch (opcode) {&lt;br /&gt;
            case 0x02:&lt;br /&gt;
                result = get_memory_dword(operand_1 &amp;amp; 0x0fffffff);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x03:&lt;br /&gt;
                set_memory_dword(operand_1) = operand_2;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x06:&lt;br /&gt;
                result = (result &amp;amp; operand_1) | operand_2;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x04:&lt;br /&gt;
                if (operand_1 == 0x80000880) {&lt;br /&gt;
                    operand_2 &amp;amp;= 0xfffffffd;&lt;br /&gt;
                }&lt;br /&gt;
                outl(operand_1, 0xcf8);&lt;br /&gt;
                outl(operand_2, 0xcfc);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x05:&lt;br /&gt;
                outl(operand_1, 0xcf8);&lt;br /&gt;
                result = inl(0xcfc);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x08:&lt;br /&gt;
                if (result != operand_1) {&lt;br /&gt;
                    eip += operand_2;&lt;br /&gt;
                }&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x09:&lt;br /&gt;
                eip += operand_2;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x10:&lt;br /&gt;
                scratch = (scratch &amp;amp; operand_1) | operand_2;&lt;br /&gt;
                result = scratch;&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x11:&lt;br /&gt;
                outb(operand_2, operand_1);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0x12:&lt;br /&gt;
                result = inb(operand_1);&lt;br /&gt;
                break;&lt;br /&gt;
            case 0xee:&lt;br /&gt;
                run_xcodes = 0;&lt;br /&gt;
            default:&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        eip += 9;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Boot ROM] (I cannot express enough just how helpful this page is)&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Memory&amp;diff=5037</id>
		<title>Memory</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Memory&amp;diff=5037"/>
				<updated>2017-03-28T21:15:19Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it.&lt;br /&gt;
&lt;br /&gt;
The memory was shared between the CPU and GPU. The [[BIOS]] and [[MCPX ROM]] are also mapped to memory at the top 16MB and the top 512bytes respectively.&lt;br /&gt;
&lt;br /&gt;
Code for emulating the memory might consist of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define MAIN_MEMORY 64 * 1024 * 1024&lt;br /&gt;
#define BIOS_SIZE 256 * 1024&lt;br /&gt;
#define BIOS_MEMORY_SIZE 16 * 1024 * 1024&lt;br /&gt;
#define BIOS_MEMORY (0xFFFFFFFF - BIOS_MEMORY_SIZE + 1)&lt;br /&gt;
#define MCPX_SIZE   0x200&lt;br /&gt;
#define MCPX_MEMORY (0xFFFFFFFF - MCPX_SIZE + 1)&lt;br /&gt;
&lt;br /&gt;
int mcpx_active = 1;&lt;br /&gt;
&lt;br /&gt;
uint8_t memory[MAIN_MEMORY] = {0};&lt;br /&gt;
uint8_t bios[BIOS_SIZE] = {0};&lt;br /&gt;
uint8_t mcpx[MCPX_SIZE] = {0};&lt;br /&gt;
&lt;br /&gt;
uint8_t get_memory_byte(uint32_t location) {&lt;br /&gt;
    if (location &amp;lt; MAIN_MEMORY) {&lt;br /&gt;
        return memory[location];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (mcpx_active &amp;amp;&amp;amp; location &amp;gt;= MCPX_MEMORY) {&lt;br /&gt;
        return mcpx[location - MCPX_MEMORY];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (location &amp;gt;= BIOS_MEMORY) {&lt;br /&gt;
        return bios[(location - BIOS_MEMORY) % BIOS_SIZE];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;Memory in unspecified range: %08X\n&amp;quot;, location);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint16_t get_memory_word(uint32_t location) {&lt;br /&gt;
    return get_memory(location + 1) &amp;lt;&amp;lt; 8 | get_memory(location);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint32_t get_memory_dword(uint32_t location) {&lt;br /&gt;
    return get_memory_word(location + 2) &amp;lt;&amp;lt; 16 | get_memory_word(location);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void deactivate_mcpx() {&lt;br /&gt;
    mcpx = 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Boot_Process&amp;diff=5036</id>
		<title>Boot Process</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Boot_Process&amp;diff=5036"/>
				<updated>2017-03-28T21:12:56Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: Created page with &amp;quot;If we wish to HLE the MCPX, then there are certain things that can be ignored, for example, getting the CPU to 32 bit protected mode and enabling caching. The pseudo code for...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If we wish to HLE the MCPX, then there are certain things that can be ignored, for example, getting the CPU to 32 bit protected mode and enabling caching. The pseudo code for a high level MCPX will look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
coming soon.....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=MCPX_ROM&amp;diff=5035</id>
		<title>MCPX ROM</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=MCPX_ROM&amp;diff=5035"/>
				<updated>2017-03-28T20:55:43Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.&lt;br /&gt;
&lt;br /&gt;
== Dumping the MCPX ROM ==&lt;br /&gt;
&lt;br /&gt;
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mov eax,0x80000880&lt;br /&gt;
mov dx,0xcf8&lt;br /&gt;
out dx,eax&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [[MCPX Dumping]] for more details.&lt;br /&gt;
&lt;br /&gt;
== MCPX Common ==&lt;br /&gt;
&lt;br /&gt;
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.&lt;br /&gt;
&lt;br /&gt;
== MCPX 1.0 ==&lt;br /&gt;
&lt;br /&gt;
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.&lt;br /&gt;
&lt;br /&gt;
== MCPX 1.1 ==&lt;br /&gt;
&lt;br /&gt;
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[MCPX HLE]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=MCPX_ROM&amp;diff=5034</id>
		<title>MCPX ROM</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=MCPX_ROM&amp;diff=5034"/>
				<updated>2017-03-28T20:48:02Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.&lt;br /&gt;
&lt;br /&gt;
== Dumping the MCPX ROM ==&lt;br /&gt;
&lt;br /&gt;
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mov eax,0x80000880&lt;br /&gt;
mov dx,0xcf8&lt;br /&gt;
out dx,eax&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [[MCPX Dumping]] for more details.&lt;br /&gt;
&lt;br /&gt;
== MCPX Common ==&lt;br /&gt;
&lt;br /&gt;
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.&lt;br /&gt;
&lt;br /&gt;
== MCPX 1.0 ==&lt;br /&gt;
&lt;br /&gt;
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.&lt;br /&gt;
&lt;br /&gt;
== MCPX 1.1 ==&lt;br /&gt;
&lt;br /&gt;
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[MCPX 1.0]]&lt;br /&gt;
* [[MCPX 1.1]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=MCPX_ROM&amp;diff=5033</id>
		<title>MCPX ROM</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=MCPX_ROM&amp;diff=5033"/>
				<updated>2017-03-28T20:47:32Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.&lt;br /&gt;
&lt;br /&gt;
== Dumping the MCPX ROM ==&lt;br /&gt;
&lt;br /&gt;
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mov eax,0x80000880&lt;br /&gt;
mov dx,0xcf8&lt;br /&gt;
out dx,eax&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [[MCPX Dumping]] for more details.&lt;br /&gt;
&lt;br /&gt;
== MCPX Common ==&lt;br /&gt;
&lt;br /&gt;
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.&lt;br /&gt;
&lt;br /&gt;
== MCPX 1.0 ==&lt;br /&gt;
&lt;br /&gt;
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.&lt;br /&gt;
&lt;br /&gt;
== MCPX 1.1 ==&lt;br /&gt;
&lt;br /&gt;
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [MCPX 1.0]&lt;br /&gt;
* [MCPX 1.1]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Main_Page&amp;diff=5032</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Main_Page&amp;diff=5032"/>
				<updated>2017-03-28T20:43:32Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== xboxdevwiki.net ==&lt;br /&gt;
&lt;br /&gt;
Please help us fix this mess.&lt;br /&gt;
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.&lt;br /&gt;
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.&lt;br /&gt;
&lt;br /&gt;
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.&lt;br /&gt;
&lt;br /&gt;
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.&lt;br /&gt;
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Development&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]&lt;br /&gt;
* [[OpenXDK]]&lt;br /&gt;
* [[Microsoft XDK]]&lt;br /&gt;
&lt;br /&gt;
[[Xbox]]&lt;br /&gt;
&lt;br /&gt;
* [[Hardware revisions]]&lt;br /&gt;
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]&lt;br /&gt;
** [[Memory]]&lt;br /&gt;
** [[BIOS]]&lt;br /&gt;
** [[MCPX]] [[MCPX ROM|(ROM)]]&lt;br /&gt;
* [[Xbox Input Devices]]&lt;br /&gt;
* [[Operating System]]&lt;br /&gt;
* [[NV2A]]&lt;br /&gt;
** [[NV2A/Pixel Combiner]]&lt;br /&gt;
** [[NV2A/Fixed Function Pipeline]]&lt;br /&gt;
** [[NV2A/Vertex Shader]]&lt;br /&gt;
** [[NV2A/Surface Formats]]&lt;br /&gt;
&lt;br /&gt;
[http://segaretro.org/Sega_Chihiro Chihiro]&lt;br /&gt;
&lt;br /&gt;
* [[Chihiro Pictures]]&lt;br /&gt;
* [[Chihiro-Tools]]&lt;br /&gt;
* [[Chihiro-Launcher]]&lt;br /&gt;
&lt;br /&gt;
Games&lt;br /&gt;
&lt;br /&gt;
* [[Games/Grand Theft Auto 3]]&lt;br /&gt;
* [[Games/Grand Theft Auto Vice City]]&lt;br /&gt;
* [[Games/Grand Theft Auto San Andreas]]&lt;br /&gt;
* [[Games/Kung Fu Chaos]]&lt;br /&gt;
* [[Games/Tony Hawk's Pro Skater 2x]]&lt;br /&gt;
&lt;br /&gt;
Emulation / Emulators&lt;br /&gt;
&lt;br /&gt;
* [http://xqemu.com xqemu Xbox emulator]&lt;br /&gt;
* [http://cxbx-reloaded.co.uk Cxbx-Reloaded]&lt;br /&gt;
* [http://www.caustik.com/cxbx/ cxbx]&lt;br /&gt;
* [http://dxbx-emu.com Dxbx]&lt;br /&gt;
* [http://www.emulator-zone.com/doc.php/xbox/xeon.html Xeon (no known official homepage)]&lt;br /&gt;
* [http://ngemu.com/threads/hackbox.146461/ Hackbox]&lt;br /&gt;
* [https://github.com/phire/kvmbox kvmbox]&lt;br /&gt;
* [http://mamedev.org/ MAME/Chihiro]&lt;br /&gt;
* [http://mamedev.org/ MAME/Xbox]&lt;br /&gt;
* [https://github.com/monocasa/xbvm XBVM]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Find random stuff in [[Resources]]&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Xbox&amp;diff=5031</id>
		<title>Xbox</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Xbox&amp;diff=5031"/>
				<updated>2017-03-28T20:38:55Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: Created page with &amp;quot;The Xbox is a games console developed by Microsoft and released in 2001. Emulation for it is not up to scratch.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Xbox is a games console developed by Microsoft and released in 2001. Emulation for it is not up to scratch.&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=CPU&amp;diff=5030</id>
		<title>CPU</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=CPU&amp;diff=5030"/>
				<updated>2017-03-28T20:36:01Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: Created page with &amp;quot;The CPU in the Xbox was a custom Pentium 3 running at 733MHz. The 'custom' part of this was that that the Pentium 3 in the Xbox was that it had only 128KB L2 cache instead of...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The CPU in the Xbox was a custom Pentium 3 running at 733MHz. The 'custom' part of this was that that the Pentium 3 in the Xbox was that it had only 128KB L2 cache instead of the usual 256KB. This allowed Microsoft to buy them at a bit of a discount and Intel to shift a few more CPUs.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://software.intel.com/en-us/articles/intel-sdm Intel® 64 and IA-32 Architectures Software Developer Manuals] (Sorry, I can't find just the documentation for the Pentium 3. Enjoy 4600+ pages, half of which is irrelevant!)&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Main_Page&amp;diff=5029</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Main_Page&amp;diff=5029"/>
				<updated>2017-03-28T20:29:57Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== xboxdevwiki.net ==&lt;br /&gt;
&lt;br /&gt;
Please help us fix this mess.&lt;br /&gt;
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.&lt;br /&gt;
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.&lt;br /&gt;
&lt;br /&gt;
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.&lt;br /&gt;
&lt;br /&gt;
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.&lt;br /&gt;
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Development&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]&lt;br /&gt;
* [[OpenXDK]]&lt;br /&gt;
* [[Microsoft XDK]]&lt;br /&gt;
&lt;br /&gt;
[[Xbox]]&lt;br /&gt;
&lt;br /&gt;
* [[Hardware revisions]]&lt;br /&gt;
** [[CPU|CPU (Custom Pentium 3 733 MHz)]]&lt;br /&gt;
** [[Memory]]&lt;br /&gt;
** [[BIOS]]&lt;br /&gt;
** [[MCPX]] [[MCPX ROM|(ROM)]]&lt;br /&gt;
* [[Xbox Input Devices]]&lt;br /&gt;
* [[Operating System]]&lt;br /&gt;
* [[NV2A]]&lt;br /&gt;
** [[NV2A/Pixel Combiner]]&lt;br /&gt;
** [[NV2A/Fixed Function Pipeline]]&lt;br /&gt;
** [[NV2A/Vertex Shader]]&lt;br /&gt;
** [[NV2A/Surface Formats]]&lt;br /&gt;
&lt;br /&gt;
[http://segaretro.org/Sega_Chihiro Chihiro]&lt;br /&gt;
&lt;br /&gt;
* [[Chihiro Pictures]]&lt;br /&gt;
* [[Chihiro-Tools]]&lt;br /&gt;
* [[Chihiro-Launcher]]&lt;br /&gt;
&lt;br /&gt;
Games&lt;br /&gt;
&lt;br /&gt;
* [[Games/Grand Theft Auto 3]]&lt;br /&gt;
* [[Games/Grand Theft Auto Vice City]]&lt;br /&gt;
* [[Games/Grand Theft Auto San Andreas]]&lt;br /&gt;
* [[Games/Kung Fu Chaos]]&lt;br /&gt;
* [[Games/Tony Hawk's Pro Skater 2x]]&lt;br /&gt;
&lt;br /&gt;
Emulation / Emulators&lt;br /&gt;
&lt;br /&gt;
* [http://xqemu.com xqemu Xbox emulator]&lt;br /&gt;
* [http://cxbx-reloaded.co.uk Cxbx-Reloaded]&lt;br /&gt;
* [[cxbx]]&lt;br /&gt;
* [http://dxbx-emu.com Dxbx]&lt;br /&gt;
* [[Xeon]]&lt;br /&gt;
* [[Hackbox]]&lt;br /&gt;
* [[kvmbox]]&lt;br /&gt;
* [[MAME/Chihiro]]&lt;br /&gt;
* [[MAME/Xbox]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Find random stuff in [[Resources]]&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=OpenXDK&amp;diff=5028</id>
		<title>OpenXDK</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=OpenXDK&amp;diff=5028"/>
				<updated>2017-03-28T20:27:56Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seemingly abandoned, but then sprung back into life in 2016 after 7 years of inactivity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[http://openxdk.sourceforge.net/ openxdk.sourceforge.net]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=OpenXDK&amp;diff=5027</id>
		<title>OpenXDK</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=OpenXDK&amp;diff=5027"/>
				<updated>2017-03-28T20:27:38Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: Created page with &amp;quot;Seemingly abandoned, but then sprung back into life in 2016 after 7 years of inactivity.   == References ==  [http://openxdk.sourceforge.net/]&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Seemingly abandoned, but then sprung back into life in 2016 after 7 years of inactivity.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
[http://openxdk.sourceforge.net/]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Microsoft_XDK&amp;diff=5025</id>
		<title>Microsoft XDK</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Microsoft_XDK&amp;diff=5025"/>
				<updated>2017-03-28T10:00:43Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* List of known versions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The official XDK (Xbox Development Kit) was only released to licensed developers. However, it got leaked a couple of times.&lt;br /&gt;
&lt;br /&gt;
== List of known versions ==&lt;br /&gt;
&lt;br /&gt;
5849 (Dec 2003)&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Hard_Drive_Files&amp;diff=5024</id>
		<title>Hard Drive Files</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Hard_Drive_Files&amp;diff=5024"/>
				<updated>2017-03-27T20:56:46Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: Created page with &amp;quot;The files on the Xbox look something like this (file sizes and MD5 checksums included):  &amp;lt;pre&amp;gt; C     Audio         AmbientAudio             AMB_05_ENGINEROOM_LR.wav    5562348...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The files on the Xbox look something like this (file sizes and MD5 checksums included):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C&lt;br /&gt;
    Audio&lt;br /&gt;
        AmbientAudio&lt;br /&gt;
            AMB_05_ENGINEROOM_LR.wav    5562348 565b84c327ef10b4854db6d3c943078e&lt;br /&gt;
            AMB_06_COMMUNICATION_LR.wav 5412228 767c124d7260a8c0072ed21fb2d46915&lt;br /&gt;
            AMB_12_HYDROTHUNDER_LR.wav  6447588 8fe6214758f24524ea7af2f3a30258a0&lt;br /&gt;
            AMB_EC_Pinger1.wav          1259412 076eb4b27b9ff381a8e188898975fb4d&lt;br /&gt;
            AMB_EC_Steam1.wav            656484 43ac56a62ed8459239b97a39e665af2f&lt;br /&gt;
            AMB_EC_Steam2.wav            943836 337bc7e89097d2b3ddcdb0eab0a92e13&lt;br /&gt;
            AMB_EC_Steam3.wav            516156 88537eaeed16c6a4475d3b3738623aab&lt;br /&gt;
            AMB_EC_Steam4.wav            746556 b0916cc4d6668a9771afd01496f4e9d7&lt;br /&gt;
            AMB_EC_Steam5.wav            737340 552e8c32ea1a04f69e98859e56077f1b&lt;br /&gt;
            AMB_EC_Steam6.wav            534588 f4cbc9d9a4f32adf2844ab97df798c76&lt;br /&gt;
            AMB_EC_Steam7.wav           1021884 f041eb53748e5d47410a188c6e280b15&lt;br /&gt;
            AMB_EC_Voices1.wav           307932 741c2d6d63ba0b3b464ea5b6b318cdbc&lt;br /&gt;
            AMB_EC_Voices10.wav          525372 28a17555fa442249cbd7861e80bcf5ac&lt;br /&gt;
            AMB_EC_Voices11.wav          313404 1b97f1b14fcab2201da745ed4f44e491&lt;br /&gt;
            AMB_EC_Voices12.wav          672828 80c65f6b627b259796927adc6dde86f6&lt;br /&gt;
            AMB_EC_Voices13.wav          362580 026576c28474118b04cc4a09fb6b5480&lt;br /&gt;
            AMB_EC_Voices2.wav           307644 b3de08af73e56f93c10147e0b7f3bc57&lt;br /&gt;
            AMB_EC_Voices3.wav           695292 ce594325ac41b2d95bea4a1a2a0449b4&lt;br /&gt;
            AMB_EC_Voices4.wav           521916 b368c2a8995b000c340d3e1408e0fdc5&lt;br /&gt;
            AMB_EC_Voices5.wav           292092 bf018e7ad6d6d4531753ef7ea0a1d16e&lt;br /&gt;
            AMB_EC_Voices6.wav           709692 be2f2d7447cb69309595e115f72e5500&lt;br /&gt;
            AMB_EC_Voices7.wav           502332 1fb09252f8ac69036351661f653da142&lt;br /&gt;
            AMB_EC_Voices8.wav           313404 aa2849ce3b7df30ffc894322f83a7497&lt;br /&gt;
            AMB_EC_Voices9.wav           691260 4ff4887384d0d5697df491ea9ce6b51b&lt;br /&gt;
            comm static 1.wav             39012 4820878be0a0c67e2e2bfd1a82e9af60&lt;br /&gt;
            comm static 2.wav             71052 6db8cae9fd2a8a7cf8fa9d3abe53ea1d&lt;br /&gt;
            comm static 3.wav            104172 2abe2439e393432e6ae4d596c283690c&lt;br /&gt;
            comm static 4.wav             93948 5e00320ced41a87a79aedc7ceaf5d57c&lt;br /&gt;
            comm voice 1.wav             189636 0b208c6775907edc63a65054fc807af5&lt;br /&gt;
            comm voice 2.wav             196116 7af4f6576c1714391f1aa4a8b0100ca5&lt;br /&gt;
            comm voice 3.wav             241044 08781a9e45eac3df26142d8478eb684d&lt;br /&gt;
            comm voice 4.wav              69036 948c41545db45969e71c0a5e7614a22f&lt;br /&gt;
            comm voice 5.wav             116484 d67a914b933f85f513f4d8e44d09980a&lt;br /&gt;
            comm voice 6.wav              83796 1f595aeaef1bdfb501a91de7638fe28f&lt;br /&gt;
            comm voice 7.wav              81852 b2b9fa426e3237ddeb79f0536869eca2&lt;br /&gt;
            comm voice 8.wav             178620 df652e1d62a8b33af6a47acffb4fcadb&lt;br /&gt;
            comm voice 9.wav             110076 39b0f0a3d6d5ec10055b68e602b8675c&lt;br /&gt;
            Control Room Loop ver2.wav   543732 093c1519cb6bd6d6d3930d3f774b3485&lt;br /&gt;
            Control Room Loop.wav        541860 0f23001b0319a568ac862ec7a1f5ee6f&lt;br /&gt;
        MainAudio&lt;br /&gt;
            Global A Button Select.wav     18708 895b82ec5a33bc8a786e2a690a734de3&lt;br /&gt;
            Global B Button Back.wav       18708 45e2b8b11534d2da41900fa5ef5418f4&lt;br /&gt;
            Global Completion Beep.wav     12012 2aa770f713594310639ec15ebf2695af&lt;br /&gt;
            Global Delete_Destroy.wav      41820 cdefc6e08f772d2c4ab77a564dc50183&lt;br /&gt;
            Global Error Message B.wav     14964 dade2d5ecb0b754ec69d4bb4e887d42e&lt;br /&gt;
            Global Keyboard Stroke 1.wav    7044 e7662531b5b05431966732cb76a6fffa&lt;br /&gt;
            Global Keyboard Stroke 2.wav   11220 b516137d9257d3b975f6d9ad82b75750&lt;br /&gt;
            Global Main MenuBack3ver2.wav  32892 b825773a71e8d3655bd8998cbbb424f4&lt;br /&gt;
            Global Main MenuFwd3ver2.wav   24108 e5035e8fb6d1d16c16c1fda2a3339153&lt;br /&gt;
            Global Progress Bar.wav       235356 d9820e39524a3b37e982fa77004655be&lt;br /&gt;
            Global Scroll Beep.wav          1572 67bc6aba697a1eb2714d8eda84da0405&lt;br /&gt;
        MemoryAudio&lt;br /&gt;
            Memory Controller Select.wav  15828 54e676b7ff4dcdd295fabf1dfb9290e5&lt;br /&gt;
            Memory Games Select.wav       45348 9e95263f0767a62119aa38e668248957&lt;br /&gt;
            Memory Memory Slot Select.wav 12084 bb86674f7a85e0bf6d9dfb569cfcead4&lt;br /&gt;
        MusicAudio&lt;br /&gt;
            Games Info Screen In MSurr.wav  63348 17a245d749339571cdc0fb9524a0ba20&lt;br /&gt;
            Games Info Screen In.wav        63348 b02a19fcbbbe8f394c79c560e67fbeb6&lt;br /&gt;
            Games Info Screen Out MSurr.wav 71052 c8a81e0046acbc0ce5712f7621422b5b&lt;br /&gt;
            Games Info Screen Out.wav        5964 2080b7f318e72e06c8e3c8a03656d03c&lt;br /&gt;
            Music CD Select.wav             30300 1104afb43a6aec2b678cda13befa811e&lt;br /&gt;
        SettingsAudio&lt;br /&gt;
            Settings Lang SubMenu Sel.wav   161340 73a89aab381849b9a51bf097293e9449&lt;br /&gt;
            Settings Parent SubMenu Sel.wav  21372 74a51e1d0634f2a25585389c77b3dd63&lt;br /&gt;
        TransitionAudio&lt;br /&gt;
            Games Main Menu In_LR.wav      72132 4ebfcf1125ace7e7417e513cf55faf84&lt;br /&gt;
            Games Main Menu Out_LR.wav     75444 9f1e83b02961528a8920693ba2654a24&lt;br /&gt;
            Games Sub Menu In_LR.wav       74220 8be59cc1ea9dd4c1349e446554a9e50c&lt;br /&gt;
            Games Sub Menu Out_LR.wav      83148 0d2b3642ed00c68ff26fea337bb21d17&lt;br /&gt;
            Music Main Menu In_LR.wav      53484 cd9b4b30a8829689be34e10648b89257&lt;br /&gt;
            Music Main Menu Out_LR.wav     51036 5dcceccf08ae7d4c537a1ad03d1b4d64&lt;br /&gt;
            Music Select Track In_LR.wav   68388 80af0c1585d8f6fbfd02623182bc8155&lt;br /&gt;
            Music Select Track Out_LR.wav  68100 e3aa18fd82b3d34df22e34b4fe3d49ed&lt;br /&gt;
            Settings Main Menu In_LR.wav  188844 7553686ac2ab1f1f9c9e16929ffce5ab&lt;br /&gt;
            Settings Main Menu Out_LR.wav 159252 4bc9fbffabb006fcc6d321ee4ba127ee&lt;br /&gt;
            Settings Sub Menu In_LR.wav    97908 2b6b47c092d70ae2ef926ff521b9d3d1&lt;br /&gt;
            Settings Sub Menu Out_LR.wav   60468 1439f81e8dfab007d9dda12e3b8d34df&lt;br /&gt;
    fonts&lt;br /&gt;
        XBox Book.xtf 14440996 8f5b7cee650f389f1c5c7bb5f70386bb&lt;br /&gt;
        Xbox.xtf      19124720 de4a26c39de8001b95c749f8d3d22128&lt;br /&gt;
    xboxdashdata.&amp;lt;see versions&amp;gt;&lt;br /&gt;
        AccountSelection.xip  1322518 497f17cc0941611e438093e5af73feb9&lt;br /&gt;
        default.xip           1619954 c5f0ac7c917ff431739be68528562990&lt;br /&gt;
        dvd.xip                167045 64feb8f1e5844fc3d4c4a4269677b8a3&lt;br /&gt;
        jkeyboard.xip          732966 e2d462cd3df9f57a0d572f3229a87b51&lt;br /&gt;
        Keyboard.xip           658238 c1b2b05a0a47a521d1f7d05ecb566432&lt;br /&gt;
        LiveToday.xip         1226668 5f33f99506bb687bad95a735c6a9ea80&lt;br /&gt;
        mainmenu5.xip         2300516 f2e318a54e2a7326c5b42c6def7d64d4&lt;br /&gt;
        memory_files2.xip     2708134 295fcaec6ad66b14cf51c94d0ac1b999&lt;br /&gt;
        Memory2.xip           2218462 4c7fcc324216117b8d54a273eb581c29&lt;br /&gt;
        Message.xip            801609 abd85ff52590e61e0b7081f650175bae&lt;br /&gt;
        music_copy3.xip       1618605 2f7257186e5093b09a1fe5d96716b0c6&lt;br /&gt;
        Music_PlayEdit2.xip   2593642 628a0c8ce9ee64a6fd3bc339fbb28913&lt;br /&gt;
        music2.xip            2007578 4979f2dbcf721c1702cde15ed7961800&lt;br /&gt;
        PasscodeVerify.xip    2813123 f25f5447def27c67d5842bfc0474b28f&lt;br /&gt;
        settings_adoc.xip     4208200 a73817afb22f622fc4c25bbd291db66a&lt;br /&gt;
        Settings_Clock.xip    1684098 c49e21dacb92d81ed18380e4354904e1&lt;br /&gt;
        settings_language.xip 1429750 cf45a77a9bf6dc972344c6cee48adacc&lt;br /&gt;
        settings_list.xip     2928635 123a550fafb5c08b7a0c4437f7989820&lt;br /&gt;
        settings_panel.xip    2813123 f25f5447def27c67d5842bfc0474b28f&lt;br /&gt;
        settings_parental.xip 1008362 1ae35811db2ecf5af08695ae8b681e6d&lt;br /&gt;
        settings_timezone.xip 1371154 b148d86596529ae3abaec6bb3185d13b&lt;br /&gt;
        settings_video.xip    1978178 a91d26866b85bf80005a7fc1ba59b442&lt;br /&gt;
        settings3.xip         2966303 8d6076c0ee3a22646c0764c34296c8b8&lt;br /&gt;
        WaitCursor.xip          33641 6ccd2d7f083ef995f3f67ce747e289a9&lt;br /&gt;
    xodash&lt;br /&gt;
        audio&lt;br /&gt;
            LiveNowAudio&lt;br /&gt;
                Friend Offline.wav 54092 41b7a8fe061a1ff2552c9bf1188736f5&lt;br /&gt;
                Friend Online.wav  54060 81ccfe1005276370c5cbb3e708807b62&lt;br /&gt;
                Friend Request.wav 52436 d7c8b57e754b761d1b3101b3e709b3dd&lt;br /&gt;
                Game Invite.wav    29396 cd580938613a5407eb8bcaffe2688667&lt;br /&gt;
            VoiceChatAudio&lt;br /&gt;
                Voice Chat Join.wav  26156 7fb1fe01240795fcbf564dabfad01b21&lt;br /&gt;
                Voice Chat Leave.wav 37028 8021bcf17888d2803c0e419cffa7dbb5&lt;br /&gt;
        media&lt;br /&gt;
            Content&lt;br /&gt;
                Japanese&lt;br /&gt;
                    coc_jpn.txt   2347 f2feb7aa376a74240926d158dd74d65d&lt;br /&gt;
                    ximejpm.dic 250528 b1a7b55b9694ed6a47a2b901415e6fc5&lt;br /&gt;
                    ximejps.dic 188288 83f581a5d8023013de26eb65b1467486&lt;br /&gt;
                SavedGame&lt;br /&gt;
                    SaveImage.xbx  18432 f378f3f8f19f3f679ee6a3a7497e104d&lt;br /&gt;
                    TitleImage.xbx 67584 6327fec35dd1abe0c3f33ac5cde11c10&lt;br /&gt;
                    TitleMeta.xbx    800 630de678413ed09e15ae45aa231c1af6&lt;br /&gt;
                TChinese&lt;br /&gt;
                    twroc.dic 55226 48d0d50142126651f6090ec99e00b8c5&lt;br /&gt;
            Xbg&lt;br /&gt;
                3_doublebutton.xbg      207993 42b0b013d2c2e5817a3e4c8ab04bffb4&lt;br /&gt;
                act_accountpin.xbg      653118 fe632805e6d6729e7e442fc96771a7d9&lt;br /&gt;
                act_activation.xbg       59625 a7db0e486f391ad9101ee7d9a6abe7ca&lt;br /&gt;
                act_admin_policy.xbg     71938 135c297799488b118e93deb8ba6ea44e&lt;br /&gt;
                act_alt_names.xbg        84324 158225c13adae3057c062fb8f6730be7&lt;br /&gt;
                act_billing.xbg         226372 fb04f93f5afed327400f6dae41a3f4e8&lt;br /&gt;
                act_congrats.xbg        145440 4f773200049c715436c27cad462d3725&lt;br /&gt;
                act_copy_delete.xbg     888221 66321645c2e21dc97221946871ad8894&lt;br /&gt;
                act_country.xbg         184789 11ef5a0db7ff1c4e57c372f5ca8a474c&lt;br /&gt;
                act_forced_name.xbg      70512 b47c0cd89ef89019b8d4fb7e9f29078a&lt;br /&gt;
                act_id.xbg               80213 d7b2f7b2c8444c353a00b61963a37ff0&lt;br /&gt;
                act_message_server.xbg  241052 6876fb92e1c92afc662562fb99a5abb4&lt;br /&gt;
                act_new_opt_in.xbg      283121 2997402d4dd252d0746e5790b35abeab&lt;br /&gt;
                act_online.xbg           77774 dbd09ce5f9fd916724997bbe64aa7e6c&lt;br /&gt;
                act_overwrite.xbg       578090 c71ca452229dcd95bfee26b7d9424f3a&lt;br /&gt;
                act_passcode.xbg        722464 81526772f069a1c81b76254399fb8666&lt;br /&gt;
                act_restrictions.xbg    198867 ecbfd5abe9bde3f28e7e21722c85e47c&lt;br /&gt;
                act_state.xbg           797805 1f2a1cacb023ac3c754d9548a38e8039&lt;br /&gt;
                act_sub_3button.xbg     158866 112821cc587d1ad4cc99fa0d0a917273&lt;br /&gt;
                act_sure.xbg             65137 5c1540d7ccec2c6607c8b0510f8f825a&lt;br /&gt;
                act_user_options.xbg    185180 e496c0538f2b825186b00e30f5709931&lt;br /&gt;
                act_users2.xbg           88313 12ce8b2ae9d7d450660b7de5aebcaaf8&lt;br /&gt;
                addfriend.xbg          1890765 f6bf945bea8ef86d593109b2d1866b89&lt;br /&gt;
                anim_connecting.xbg    1034604 d414eabc933dc46e64b3703c54b8e574&lt;br /&gt;
                anim_wait_5.xbg          25575 007a7e8f3f4b262414100cc48d8cbdb0&lt;br /&gt;
                backbutton.xbg           81349 6b894fe7c6392836808dc6230bd7b0d0&lt;br /&gt;
                bud_actions.xbg         146828 dbc004a2b3081507ae2c2efed71fb4a3&lt;br /&gt;
                cellwall.xbg            190846 219a43d501df170e4affcae9e4b35e92&lt;br /&gt;
                contextual.xbg         1937307 007ac7c3ddedad86a662bc9b115d1f00&lt;br /&gt;
                feedback.xbg           1929240 d26e11eb96b135eac630dfcee1b7e5fb&lt;br /&gt;
                friends.xbg            2224276 afae13fb39cc559c24c85262509e888e&lt;br /&gt;
                gen_dob_tumblers.xbg   1276515 83c24a1a6ed4f405dc0caad816a0a204&lt;br /&gt;
                gen_exp_tumblers.xbg   1262446 9e4d5fd47c810132f42bf9bc173a1908&lt;br /&gt;
                gen_large_panel.xbg     210906 814dfbf474a031ab82f6271a4c0648db&lt;br /&gt;
                gen_mess_panel.xbg      347851 397c04b140e03b293b1a104e540d73fc&lt;br /&gt;
                j_candidates.xbg        254619 060728bbf7498173420a45be61b7c339&lt;br /&gt;
                j_keyboard.xbg          737322 88c480d6b5ab9feb95b3e906760e2373&lt;br /&gt;
                k_keyboard.xbg          426877 6388aede82d338db42b55752aa5b9d06&lt;br /&gt;
                keyboard.xbg            375657 873fbf9ec6585103346bf0a381f95d93&lt;br /&gt;
                keypad.xbg              202889 decf2d76e67af781ad34c220be6308f8&lt;br /&gt;
                nts_dns.xbg             192159 bd54bc1e4246605937a828b3b6278a95&lt;br /&gt;
                nts_ip.xbg              202623 9e100d8c7029c20cfc9bd7ee0fa6bc65&lt;br /&gt;
                nts_settings.xbg        216718 512de7f31ef378651a5e783965ea7f24&lt;br /&gt;
                nts_status.xbg          181806 0a0d4a2ed3c61c86258d6d3ae3fe3837&lt;br /&gt;
                nts_wireless.xbg        231935 82a12b613465f617c90c7fdce118adef&lt;br /&gt;
                orb_master.xbg          348747 c259f4d1276582d32044826f6d88cedc&lt;br /&gt;
                selectbutton.xbg         73523 bf0fcf1cde1d1aa92b7335ab5d8c10a3&lt;br /&gt;
                t_keyboard.xbg          405161 912e6bd830337868cb9b51d30c8c0121&lt;br /&gt;
                voicechat.xbg          2327218 dd2e8dcea71fc8fa661daa7d6c9b0f6d&lt;br /&gt;
                voicemail.xbg          1948139 662585947a38eff1b5e74e871ea4d5be&lt;br /&gt;
            Xbx&lt;br /&gt;
                button.xbx                   10240 fc14f24784a74a5d48004e48880086cb&lt;br /&gt;
                cellwall.xbx                 67584 ff23d97f5263ee657cdd7d528bb1c95e&lt;br /&gt;
                darken_opacity.xbx           18432 7f24ebbab4f77fe612d0dd9491001e49&lt;br /&gt;
                Disabled.xbx                 10240 6d8da8de70e262767600d2b84eec43c2&lt;br /&gt;
                disabled_highlight.xbx        6144 64f4dd2e2f5539ad6a11417abe0ef336&lt;br /&gt;
                footer.xbx                   34816 6a2124d31b374d9c3f426436aec35161&lt;br /&gt;
                GameHilite_01.xbx             6144 c4fa23bce07f08dd360565d9b267b0b0&lt;br /&gt;
                highlight.xbx                10240 1e99278554e5d4a0e42b808ebd833385&lt;br /&gt;
                keyboard_alpha.xbx           18432 65553de7e37186f96942948cbe4639b9&lt;br /&gt;
                Live_header.xbx              34816 fc46134b8dd7abf183e1d466d5afe6bf&lt;br /&gt;
                live_highlight_disabled.xbx  10240 5a2da8c4c763cdcf6ab7c23deaa64205&lt;br /&gt;
                LiveChrome.xbx               67584 f64b49852005cc389d205ea1de8d1048&lt;br /&gt;
                mess_panel_backing.xbx       18432 24459f91d4de55a521d2c75da81ac7de&lt;br /&gt;
                Options.xbx                  18432 9e442a174906ef3e06c04c5cd43b6ddd&lt;br /&gt;
                panel1.xbx                   18432 7ef04f5b0d0ce60e9ac385d5734d35a3&lt;br /&gt;
                panel10.xbx                  10240 2852c18e0b898a0cd0f74d957d1c4e1f&lt;br /&gt;
                panel11.xbx                  18432 188290082b02fc03a2656ffdc131f309&lt;br /&gt;
                panel12.xbx                  18432 bf234eb3313b4af0f04a7eea816b0819&lt;br /&gt;
                panel13.xbx                  18432 c465aaacf64ff98d7e5c7501f15df4cd&lt;br /&gt;
                panel14.xbx                  18432 5b52636f2ae781df267c27ba4f1fa1f4&lt;br /&gt;
                panel15.xbx                  10240 43ce1530ac07161c65b1ff5d02ddaf07&lt;br /&gt;
                panel16.xbx                  18432 1c35588436ba6d4a437fb1d22e8ed029&lt;br /&gt;
                panel17.xbx                  10240 7b9d574182f87b7c8bb9b1f16d07a234&lt;br /&gt;
                panel18.xbx                  18432 192a162567836159e44355a13b108ec6&lt;br /&gt;
                panel19.xbx                  18432 3d205c154cd434ae46009670b8a5c830&lt;br /&gt;
                panel2.xbx                   18432 4958bbd39d6adc867a323bd14e7fedfb&lt;br /&gt;
                panel20.xbx                  18432 70fcee44a106f94f3d505b8fe36e89bd&lt;br /&gt;
                panel3.xbx                   18432 7ddc37a40c11f91c4f5709275753682c&lt;br /&gt;
                panel4.xbx                   18432 54ca9e18cadcabd704eff52270cf5aef&lt;br /&gt;
                panel5.xbx                   18432 9a92cefceb843e4b634ef4862b2838f0&lt;br /&gt;
                panel6.xbx                   18432 5220d145a2d73f10018f822b746a33f9&lt;br /&gt;
                panel7.xbx                   18432 0fb78b53c5b037f006342a10f13447f5&lt;br /&gt;
                panel8.xbx                   18432 212a8b96d91eaab3788d33ea3f0f99d0&lt;br /&gt;
                panel9.xbx                   18432 25b985d4c995f4898ea1c3344cf0d2f0&lt;br /&gt;
                Plain_header.xbx             34816 494a987d8bf0000ff972ec0926aa08dd&lt;br /&gt;
                pulse_3D_64_matte_trans.xbx   4096 7d9b93b859d90f855dbb0a17170821bc&lt;br /&gt;
                Pulse1.xbx                   34816 364898b79abf0110779b849a4df38154&lt;br /&gt;
                ridges.xbx                   34816 caabfdb8e5aa2390d001d60247ff3b72&lt;br /&gt;
                wireframe.xbx                10240 48468dbefff5fb21d52f8b66418a89f2&lt;br /&gt;
                xbox2.xbx                   264192 e86870b16246b4399a86c592a1f87b3b&lt;br /&gt;
                xbox4.xbx                    67584 67f33ec44e706a322e2550a342340a3c&lt;br /&gt;
                xboxlogo.xbx                264192 77cf58d065229b28edda8b08709ac31d&lt;br /&gt;
                xboxlogow.xbx               264192 c4816fb72fe27cd18bb04a109b9facd1&lt;br /&gt;
        update.xbe      2260992 &amp;lt;see versions&amp;gt;&lt;br /&gt;
        xonlinedash.xbe 2617344 &amp;lt;see versions&amp;gt;&lt;br /&gt;
    XBox Book.xtf 17068868 54751950aa215228a4915955f7d2ce0c&lt;br /&gt;
    Xbox.xtf      15613736 0466dd6c19ec9c1785e8aadfc8c5269e&lt;br /&gt;
    xboxdash.xbe   1961984 &amp;lt;see versions&amp;gt;&lt;br /&gt;
&lt;br /&gt;
E&lt;br /&gt;
    TDATA&lt;br /&gt;
    UDATA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I have seen a few differences. I thought all my Xboxs had the same dashboard version, but I have 2 slightly different versions of files:&lt;br /&gt;
&lt;br /&gt;
== 185ead00 ==&lt;br /&gt;
&lt;br /&gt;
Here are the differences for this dashboard&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C&lt;br /&gt;
    xboxdashdata.185ead00&lt;br /&gt;
    xodash&lt;br /&gt;
        update.xbe      2260992 bc99ef8730158ba1bf3f1c9c84520661&lt;br /&gt;
        xonlinedash.xbe 2617344 8149654a030d813bcc02a24f39fd3ce9&lt;br /&gt;
    xboxdash.xbe   1961984 08d3a6f99184679aa13008d6397bacce&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 185a6100 ==&lt;br /&gt;
&lt;br /&gt;
Here are the differences for this dashboard&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
C&lt;br /&gt;
    xboxdashdata.185a6100&lt;br /&gt;
    xodash&lt;br /&gt;
        update.xbe      2260992 78ad0f3f0cb83010728e00457a778121&lt;br /&gt;
        xonlinedash.xbe 2617344 01dd6c8aa72b473ba1523c73c6527d86&lt;br /&gt;
    xboxdash.xbe   1961984 1fa397b44ec78965ef955539fd8f4fbd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Kernel&amp;diff=5023</id>
		<title>Kernel</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Kernel&amp;diff=5023"/>
				<updated>2017-03-27T20:48:37Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: Created page with &amp;quot;== See Also ==  Hard Drive Files&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== See Also ==&lt;br /&gt;
&lt;br /&gt;
[[Hard Drive Files]]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5022</id>
		<title>BIOS</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5022"/>
				<updated>2017-03-23T15:06:02Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The BIOS is either a 1MB or 256KB memory which is loaded to the top 16MB of memory (from 0xFF000000). There are a couple of things to understand in order for this to make sense. First, the 1MB BIOS is actually 256KB of data repeated 4 times. So, if you do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ split -n 4 xbox.bin &lt;br /&gt;
$ md5sum xa*&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xaa&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xab&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xac&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.&lt;br /&gt;
&lt;br /&gt;
=== Unknown ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000000 - 0x000000079&lt;br /&gt;
&lt;br /&gt;
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.&lt;br /&gt;
&lt;br /&gt;
=== xcodes ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000080 - Copyright string&lt;br /&gt;
&lt;br /&gt;
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:&lt;br /&gt;
04 10 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:&lt;br /&gt;
04 84 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.&lt;br /&gt;
&lt;br /&gt;
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.&lt;br /&gt;
&lt;br /&gt;
=== Copyright String ===&lt;br /&gt;
&lt;br /&gt;
57 bytes long with the following start positions:&lt;br /&gt;
&lt;br /&gt;
* 3394 - 0xcfa&lt;br /&gt;
* 4034 - 0xcfa&lt;br /&gt;
* 4134 - 0xcfa&lt;br /&gt;
* 4817 - 0xdb9&lt;br /&gt;
* 5101 - 0xe49&lt;br /&gt;
* 5530 - 0xe59&lt;br /&gt;
* 5713 - 0xe59&lt;br /&gt;
* 5838 - 0xdcc&lt;br /&gt;
&lt;br /&gt;
Literally contains the text: &amp;quot;Copyright (c) Microsoft Corporation. All rights reserved.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Kernel Data Segment ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== 2BL ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Decoy bootloader ===&lt;br /&gt;
&lt;br /&gt;
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.&lt;br /&gt;
&lt;br /&gt;
== Known Retail BIOSs ==&lt;br /&gt;
&lt;br /&gt;
* 3394&lt;br /&gt;
* 4034&lt;br /&gt;
* 4134&lt;br /&gt;
* 4817&lt;br /&gt;
* 5101&lt;br /&gt;
* 5530&lt;br /&gt;
* 5713&lt;br /&gt;
* 5838&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
[[BIOS Dumping]]&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=BIOS_Dumping&amp;diff=5021</id>
		<title>BIOS Dumping</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=BIOS_Dumping&amp;diff=5021"/>
				<updated>2017-03-23T15:05:32Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: Created page with &amp;quot;Dumping a BIOS can be done in several ways.  == Using a chip reader ==  The BIOS is an ordinary TSOP and can be read with an ordinary TSOP reader.  == Using a softmod exploit...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dumping a BIOS can be done in several ways.&lt;br /&gt;
&lt;br /&gt;
== Using a chip reader ==&lt;br /&gt;
&lt;br /&gt;
The BIOS is an ordinary TSOP and can be read with an ordinary TSOP reader.&lt;br /&gt;
&lt;br /&gt;
== Using a softmod exploit ==&lt;br /&gt;
&lt;br /&gt;
Using a softmod exploit, you can usually choose to 'backup' your Xbox. This dumps a load of information to E:\Backup, including the BIOS. You can then FTP into your Xbox and retrieve it.&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=MCPX_ROM&amp;diff=5020</id>
		<title>MCPX ROM</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=MCPX_ROM&amp;diff=5020"/>
				<updated>2017-03-23T14:53:35Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* Dumping the MCPX ROM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.&lt;br /&gt;
&lt;br /&gt;
== Dumping the MCPX ROM ==&lt;br /&gt;
&lt;br /&gt;
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mov eax,0x80000880&lt;br /&gt;
mov dx,0xcf8&lt;br /&gt;
out dx,eax&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [[MCPX Dumping]] for more details.&lt;br /&gt;
&lt;br /&gt;
== MCPX Common ==&lt;br /&gt;
&lt;br /&gt;
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.&lt;br /&gt;
&lt;br /&gt;
== MCPX 1.0 ==&lt;br /&gt;
&lt;br /&gt;
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.&lt;br /&gt;
&lt;br /&gt;
== MCPX 1.1 ==&lt;br /&gt;
&lt;br /&gt;
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Hardware_Revisions&amp;diff=5018</id>
		<title>Hardware Revisions</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Hardware_Revisions&amp;diff=5018"/>
				<updated>2017-03-23T14:22:05Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are 7 Xbox revisions&lt;br /&gt;
&lt;br /&gt;
== 1.0 ==&lt;br /&gt;
&lt;br /&gt;
* Made in Hungary&lt;br /&gt;
* USB controller is on a separate PCB&lt;br /&gt;
* GPU has a fan on the heat sink&lt;br /&gt;
* MCPX 1.0 ROM&lt;br /&gt;
* Thomson DVD Drive&lt;br /&gt;
* Seagate Hard Drive&lt;br /&gt;
* Conexant [[Video Chip]]&lt;br /&gt;
&lt;br /&gt;
== 1.1 ==&lt;br /&gt;
&lt;br /&gt;
Same as 1.0, except:&lt;br /&gt;
* Made in Hungary or Mexico&lt;br /&gt;
* USB controller moved onto the motherboard&lt;br /&gt;
* Fan removed from the GPU heat sink&lt;br /&gt;
* MCPX 1.1 ROM&lt;br /&gt;
&lt;br /&gt;
== 1.2 ==&lt;br /&gt;
&lt;br /&gt;
Same as 1.1, except:&lt;br /&gt;
* Made in China&lt;br /&gt;
* Philips DVD Drive&lt;br /&gt;
* Western Digital Hard Drive&lt;br /&gt;
&lt;br /&gt;
== 1.3 ==&lt;br /&gt;
Same as 1.2, except:&lt;br /&gt;
* Samsung DVD Drive&lt;br /&gt;
* Seagate Hard Drive&lt;br /&gt;
&lt;br /&gt;
== 1.4 ==&lt;br /&gt;
&lt;br /&gt;
Same as 1.3, except:&lt;br /&gt;
* Western Digital Hard Drive&lt;br /&gt;
* Focus video chip&lt;br /&gt;
&lt;br /&gt;
== 1.5 ==&lt;br /&gt;
&lt;br /&gt;
Same as 1.4. Possibly never existed, but will otherwise be very rare. Production was halted and 1.4 was produced again.&lt;br /&gt;
&lt;br /&gt;
== 1.6 ==&lt;br /&gt;
&lt;br /&gt;
Same as 1.4, except:&lt;br /&gt;
* Made in China or Taiwan&lt;br /&gt;
* BIOS no longer flashable&lt;br /&gt;
* Removed data and power lines from LPC port&lt;br /&gt;
* Xcalibur video chip&lt;br /&gt;
&lt;br /&gt;
== Identifying ==&lt;br /&gt;
&lt;br /&gt;
While not definitive, here are some ways to help identify the revision of your Xbox.&lt;br /&gt;
&lt;br /&gt;
=== Manufacturing Details ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Date Range&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Revision&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Location&lt;br /&gt;
|-&lt;br /&gt;
| 01/2001-10/2002 || 1.0 || Hungary&lt;br /&gt;
|-&lt;br /&gt;
| 11/2002-04/2003 || 1.1 || Hungary, Mexico&lt;br /&gt;
|-&lt;br /&gt;
| 05/2003-03/2004 || 1.2 || China&lt;br /&gt;
|-&lt;br /&gt;
| 04/2004 Onward || 1.6 || China, Taiwan&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Serial Number ===&lt;br /&gt;
&lt;br /&gt;
The serial number looks like this:&lt;br /&gt;
&lt;br /&gt;
LNNNNNN TWWFF&lt;br /&gt;
&lt;br /&gt;
L is the production line&lt;br /&gt;
NNNNNN is the number produced that week&lt;br /&gt;
Y is the last digit of the production year&lt;br /&gt;
WW is the number of the week&lt;br /&gt;
FF is the factory code&lt;br /&gt;
&lt;br /&gt;
Note, this table contradicts the previous table.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Factory&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Location&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Revision&lt;br /&gt;
|-&lt;br /&gt;
| 02 || Mexico || 1.0 or 1.1&lt;br /&gt;
|-&lt;br /&gt;
| 03 || Hungary || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| 05 || China || 1.2 or later&lt;br /&gt;
|-&lt;br /&gt;
| 06 || Taiwan || 1.2 or later&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Serial Number&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Revision&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 20WFF || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 21WFF || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 23WFF || 1.0 or 1.1&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 24WFF || 1.1&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 25WFF || 1.1&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 30WFF || 1.2&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 31WFF || 1.3&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 32WFF || 1.3&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 33WFF || 1.4 or 1.5&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 42WFF || 1.6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Video Chip&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Revision&lt;br /&gt;
|-&lt;br /&gt;
| Conexant || 1.0, 1.1, 1.2, 1.3&lt;br /&gt;
|-&lt;br /&gt;
| Focus || 1.4, 1.5&lt;br /&gt;
|-&lt;br /&gt;
| Xcalibur || 1.6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BIOS Version ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel Version&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Revision&lt;br /&gt;
|-&lt;br /&gt;
| 3944, 4034, 4036, 4627 || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| 4817, 4972 || 1.1&lt;br /&gt;
|-&lt;br /&gt;
| 5101, 5713 || 1.2 - 1.5&lt;br /&gt;
|-&lt;br /&gt;
| 5838 || 1.6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.informit.com/articles/article.aspx?p=367210&amp;amp;seqNum=2 InformIT Methods of Identification]&lt;br /&gt;
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Hardware_Revisions&amp;diff=5017</id>
		<title>Hardware Revisions</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Hardware_Revisions&amp;diff=5017"/>
				<updated>2017-03-23T14:21:57Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are 7 Xbox revisions&lt;br /&gt;
&lt;br /&gt;
== 1.0 ==&lt;br /&gt;
&lt;br /&gt;
* Made in Hungary&lt;br /&gt;
* USB controller is on a separate PCB&lt;br /&gt;
* GPU has a fan on the heat sink&lt;br /&gt;
* MCPX 1.0 ROM&lt;br /&gt;
* Thomson DVD Drive&lt;br /&gt;
* Seagate Hard Drive&lt;br /&gt;
* Conexant [Video Chip]&lt;br /&gt;
&lt;br /&gt;
== 1.1 ==&lt;br /&gt;
&lt;br /&gt;
Same as 1.0, except:&lt;br /&gt;
* Made in Hungary or Mexico&lt;br /&gt;
* USB controller moved onto the motherboard&lt;br /&gt;
* Fan removed from the GPU heat sink&lt;br /&gt;
* MCPX 1.1 ROM&lt;br /&gt;
&lt;br /&gt;
== 1.2 ==&lt;br /&gt;
&lt;br /&gt;
Same as 1.1, except:&lt;br /&gt;
* Made in China&lt;br /&gt;
* Philips DVD Drive&lt;br /&gt;
* Western Digital Hard Drive&lt;br /&gt;
&lt;br /&gt;
== 1.3 ==&lt;br /&gt;
Same as 1.2, except:&lt;br /&gt;
* Samsung DVD Drive&lt;br /&gt;
* Seagate Hard Drive&lt;br /&gt;
&lt;br /&gt;
== 1.4 ==&lt;br /&gt;
&lt;br /&gt;
Same as 1.3, except:&lt;br /&gt;
* Western Digital Hard Drive&lt;br /&gt;
* Focus video chip&lt;br /&gt;
&lt;br /&gt;
== 1.5 ==&lt;br /&gt;
&lt;br /&gt;
Same as 1.4. Possibly never existed, but will otherwise be very rare. Production was halted and 1.4 was produced again.&lt;br /&gt;
&lt;br /&gt;
== 1.6 ==&lt;br /&gt;
&lt;br /&gt;
Same as 1.4, except:&lt;br /&gt;
* Made in China or Taiwan&lt;br /&gt;
* BIOS no longer flashable&lt;br /&gt;
* Removed data and power lines from LPC port&lt;br /&gt;
* Xcalibur video chip&lt;br /&gt;
&lt;br /&gt;
== Identifying ==&lt;br /&gt;
&lt;br /&gt;
While not definitive, here are some ways to help identify the revision of your Xbox.&lt;br /&gt;
&lt;br /&gt;
=== Manufacturing Details ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Date Range&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Revision&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Location&lt;br /&gt;
|-&lt;br /&gt;
| 01/2001-10/2002 || 1.0 || Hungary&lt;br /&gt;
|-&lt;br /&gt;
| 11/2002-04/2003 || 1.1 || Hungary, Mexico&lt;br /&gt;
|-&lt;br /&gt;
| 05/2003-03/2004 || 1.2 || China&lt;br /&gt;
|-&lt;br /&gt;
| 04/2004 Onward || 1.6 || China, Taiwan&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Serial Number ===&lt;br /&gt;
&lt;br /&gt;
The serial number looks like this:&lt;br /&gt;
&lt;br /&gt;
LNNNNNN TWWFF&lt;br /&gt;
&lt;br /&gt;
L is the production line&lt;br /&gt;
NNNNNN is the number produced that week&lt;br /&gt;
Y is the last digit of the production year&lt;br /&gt;
WW is the number of the week&lt;br /&gt;
FF is the factory code&lt;br /&gt;
&lt;br /&gt;
Note, this table contradicts the previous table.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Factory&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Location&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Revision&lt;br /&gt;
|-&lt;br /&gt;
| 02 || Mexico || 1.0 or 1.1&lt;br /&gt;
|-&lt;br /&gt;
| 03 || Hungary || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| 05 || China || 1.2 or later&lt;br /&gt;
|-&lt;br /&gt;
| 06 || Taiwan || 1.2 or later&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Serial Number&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Revision&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 20WFF || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 21WFF || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 23WFF || 1.0 or 1.1&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 24WFF || 1.1&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 25WFF || 1.1&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 30WFF || 1.2&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 31WFF || 1.3&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 32WFF || 1.3&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 33WFF || 1.4 or 1.5&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 42WFF || 1.6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Video Chip&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Revision&lt;br /&gt;
|-&lt;br /&gt;
| Conexant || 1.0, 1.1, 1.2, 1.3&lt;br /&gt;
|-&lt;br /&gt;
| Focus || 1.4, 1.5&lt;br /&gt;
|-&lt;br /&gt;
| Xcalibur || 1.6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BIOS Version ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel Version&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Revision&lt;br /&gt;
|-&lt;br /&gt;
| 3944, 4034, 4036, 4627 || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| 4817, 4972 || 1.1&lt;br /&gt;
|-&lt;br /&gt;
| 5101, 5713 || 1.2 - 1.5&lt;br /&gt;
|-&lt;br /&gt;
| 5838 || 1.6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.informit.com/articles/article.aspx?p=367210&amp;amp;seqNum=2 InformIT Methods of Identification]&lt;br /&gt;
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=NV2A&amp;diff=5016</id>
		<title>NV2A</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=NV2A&amp;diff=5016"/>
				<updated>2017-03-23T14:12:39Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: Created page with &amp;quot;The northbridge of the chipset, and is the GPU&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The northbridge of the chipset, and is the GPU&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Memory&amp;diff=5015</id>
		<title>Memory</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Memory&amp;diff=5015"/>
				<updated>2017-03-23T14:11:11Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: Created page with &amp;quot;The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it.  The m...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Xbox has 64MB Memory. This could be expanded to 128MB of memory (and the motherboard has empty spots where these could have been) but no games took advantage of it.&lt;br /&gt;
&lt;br /&gt;
The memory was shared between the CPU and GPU. The [[BIOS]] and [[MCPX ROM]] are also mapped to memory at the top 16MB and the top 512bytes respectively.&lt;br /&gt;
&lt;br /&gt;
Code for emulating the memory might consist of:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#define MAIN_MEMORY 64 * 1024 * 1024&lt;br /&gt;
#define BIOS_SIZE 256 * 1024&lt;br /&gt;
#define BIOS_MEMORY_SIZE 16 * 1024 * 1024&lt;br /&gt;
#define BIOS_MEMORY (0xFFFFFFFF - BIOS_MEMORY_SIZE + 1)&lt;br /&gt;
#define MCPX_SIZE   0x200&lt;br /&gt;
#define MCPX_MEMORY (0xFFFFFFFF - MCPX_SIZE + 1)&lt;br /&gt;
&lt;br /&gt;
int mcpx_active = 1;&lt;br /&gt;
&lt;br /&gt;
uint8_t memory[MAIN_MEMORY] = {0};&lt;br /&gt;
uint8_t bios[BIOS_SIZE] = {0};&lt;br /&gt;
uint8_t mcpx[MCPX_SIZE] = {0};&lt;br /&gt;
&lt;br /&gt;
uint8_t get_memory_byte(uint32_t location) {&lt;br /&gt;
    if (location &amp;lt; MAIN_MEMORY) {&lt;br /&gt;
        return memory[location];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (mcpx_active &amp;amp;&amp;amp; location &amp;gt;= MCPX_MEMORY) {&lt;br /&gt;
        return mcpx[location - MCPX_MEMORY];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (location &amp;gt;= BIOS_MEMORY) {&lt;br /&gt;
        return bios[(location - BIOS_MEMORY) % BIOS_SIZE];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;Memory in unspecified range: %08X\n&amp;quot;, location);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint16_t get_memory_word(uint32_t location) {&lt;br /&gt;
    return get_memory(location + 1) &amp;lt;&amp;lt; 8 | get_memory(location);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
uint32_t get_memory_dword(uint32_t location) {&lt;br /&gt;
    return get_memory_word(location + 2) &amp;lt;&amp;lt; 16 | get_memory_word(location);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void deactivate_mcpx() {&lt;br /&gt;
    mcpx = 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Main_Page&amp;diff=5014</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Main_Page&amp;diff=5014"/>
				<updated>2017-03-23T14:04:20Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== xboxdevwiki.net ==&lt;br /&gt;
&lt;br /&gt;
Please help us fix this mess.&lt;br /&gt;
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.&lt;br /&gt;
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.&lt;br /&gt;
&lt;br /&gt;
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.&lt;br /&gt;
&lt;br /&gt;
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.&lt;br /&gt;
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Development&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]&lt;br /&gt;
* [[OpenXDK]]&lt;br /&gt;
* [[Microsoft XDK]]&lt;br /&gt;
&lt;br /&gt;
[[Xbox]]&lt;br /&gt;
&lt;br /&gt;
* [[Hardware revisions]]&lt;br /&gt;
** [[Memory]]&lt;br /&gt;
** [[BIOS]]&lt;br /&gt;
** [[MCPX]] [[MCPX ROM|(ROM)]]&lt;br /&gt;
* [[Xbox Input Devices]]&lt;br /&gt;
* [[Operating System]]&lt;br /&gt;
* [[NV2A]]&lt;br /&gt;
** [[NV2A/Pixel Combiner]]&lt;br /&gt;
** [[NV2A/Fixed Function Pipeline]]&lt;br /&gt;
** [[NV2A/Vertex Shader]]&lt;br /&gt;
** [[NV2A/Surface Formats]]&lt;br /&gt;
&lt;br /&gt;
[http://segaretro.org/Sega_Chihiro Chihiro]&lt;br /&gt;
&lt;br /&gt;
* [[Chihiro Pictures]]&lt;br /&gt;
* [[Chihiro-Tools]]&lt;br /&gt;
* [[Chihiro-Launcher]]&lt;br /&gt;
&lt;br /&gt;
Games&lt;br /&gt;
&lt;br /&gt;
* [[Games/Grand Theft Auto 3]]&lt;br /&gt;
* [[Games/Grand Theft Auto Vice City]]&lt;br /&gt;
* [[Games/Grand Theft Auto San Andreas]]&lt;br /&gt;
* [[Games/Kung Fu Chaos]]&lt;br /&gt;
* [[Games/Tony Hawk's Pro Skater 2x]]&lt;br /&gt;
&lt;br /&gt;
Emulation / Emulators&lt;br /&gt;
&lt;br /&gt;
* [http://xqemu.com xqemu Xbox emulator]&lt;br /&gt;
* [[cxbx-reloaded]]&lt;br /&gt;
* [[cxbx]]&lt;br /&gt;
* [[dxbx]]&lt;br /&gt;
* [[Xeon]]&lt;br /&gt;
* [[Hackbox]]&lt;br /&gt;
* [[kvmbox]]&lt;br /&gt;
* [[MAME/Chihiro]]&lt;br /&gt;
* [[MAME/Xbox]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Find random stuff in [[Resources]]&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=User:Eighthpence&amp;diff=5013</id>
		<title>User:Eighthpence</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=User:Eighthpence&amp;diff=5013"/>
				<updated>2017-03-23T14:03:05Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: Created page with &amp;quot;I'm a prick, don't listen to me.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm a prick, don't listen to me.&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=MCPX_ROM&amp;diff=5012</id>
		<title>MCPX ROM</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=MCPX_ROM&amp;diff=5012"/>
				<updated>2017-03-23T14:02:35Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.&lt;br /&gt;
&lt;br /&gt;
== Dumping the MCPX ROM ==&lt;br /&gt;
&lt;br /&gt;
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mov eax,0x80000880&lt;br /&gt;
mov dx,0xcf8&lt;br /&gt;
out dx,eax&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [MCPX Dumping] for more details.&lt;br /&gt;
&lt;br /&gt;
== MCPX Common ==&lt;br /&gt;
&lt;br /&gt;
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.&lt;br /&gt;
&lt;br /&gt;
== MCPX 1.0 ==&lt;br /&gt;
&lt;br /&gt;
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.&lt;br /&gt;
&lt;br /&gt;
== MCPX 1.1 ==&lt;br /&gt;
&lt;br /&gt;
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [https://mborgerson.com/deconstructing-the-xbox-boot-rom Deconstructing the Xbox Boot ROM]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5011</id>
		<title>BIOS</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5011"/>
				<updated>2017-03-23T14:01:29Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* Decoy bootloader */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The BIOS is either a 1MB or 256KB memory which is loaded to the top 16MB of memory (from 0xFF000000). There are a couple of things to understand in order for this to make sense. First, the 1MB BIOS is actually 256KB of data repeated 4 times. So, if you do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ split -n 4 xbox.bin &lt;br /&gt;
$ md5sum xa*&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xaa&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xab&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xac&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.&lt;br /&gt;
&lt;br /&gt;
=== Unknown ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000000 - 0x000000079&lt;br /&gt;
&lt;br /&gt;
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.&lt;br /&gt;
&lt;br /&gt;
=== xcodes ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000080 - Copyright string&lt;br /&gt;
&lt;br /&gt;
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:&lt;br /&gt;
04 10 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:&lt;br /&gt;
04 84 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.&lt;br /&gt;
&lt;br /&gt;
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.&lt;br /&gt;
&lt;br /&gt;
=== Copyright String ===&lt;br /&gt;
&lt;br /&gt;
57 bytes long with the following start positions:&lt;br /&gt;
&lt;br /&gt;
* 3394 - 0xcfa&lt;br /&gt;
* 4034 - 0xcfa&lt;br /&gt;
* 4134 - 0xcfa&lt;br /&gt;
* 4817 - 0xdb9&lt;br /&gt;
* 5101 - 0xe49&lt;br /&gt;
* 5530 - 0xe59&lt;br /&gt;
* 5713 - 0xe59&lt;br /&gt;
* 5838 - 0xdcc&lt;br /&gt;
&lt;br /&gt;
Literally contains the text: &amp;quot;Copyright (c) Microsoft Corporation. All rights reserved.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Kernel Data Segment ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== 2BL ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Decoy bootloader ===&lt;br /&gt;
&lt;br /&gt;
This is very similar to the [[MCPX ROM]], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.&lt;br /&gt;
&lt;br /&gt;
== Known Retail BIOSs ==&lt;br /&gt;
&lt;br /&gt;
* 3394&lt;br /&gt;
* 4034&lt;br /&gt;
* 4134&lt;br /&gt;
* 4817&lt;br /&gt;
* 5101&lt;br /&gt;
* 5530&lt;br /&gt;
* 5713&lt;br /&gt;
* 5838&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5010</id>
		<title>BIOS</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5010"/>
				<updated>2017-03-23T14:01:16Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* Unknown */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The BIOS is either a 1MB or 256KB memory which is loaded to the top 16MB of memory (from 0xFF000000). There are a couple of things to understand in order for this to make sense. First, the 1MB BIOS is actually 256KB of data repeated 4 times. So, if you do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ split -n 4 xbox.bin &lt;br /&gt;
$ md5sum xa*&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xaa&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xab&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xac&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.&lt;br /&gt;
&lt;br /&gt;
=== Unknown ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000000 - 0x000000079&lt;br /&gt;
&lt;br /&gt;
Not sure what this does. Some people think it might be involved with initialising the [[MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.&lt;br /&gt;
&lt;br /&gt;
=== xcodes ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000080 - Copyright string&lt;br /&gt;
&lt;br /&gt;
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:&lt;br /&gt;
04 10 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:&lt;br /&gt;
04 84 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.&lt;br /&gt;
&lt;br /&gt;
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.&lt;br /&gt;
&lt;br /&gt;
=== Copyright String ===&lt;br /&gt;
&lt;br /&gt;
57 bytes long with the following start positions:&lt;br /&gt;
&lt;br /&gt;
* 3394 - 0xcfa&lt;br /&gt;
* 4034 - 0xcfa&lt;br /&gt;
* 4134 - 0xcfa&lt;br /&gt;
* 4817 - 0xdb9&lt;br /&gt;
* 5101 - 0xe49&lt;br /&gt;
* 5530 - 0xe59&lt;br /&gt;
* 5713 - 0xe59&lt;br /&gt;
* 5838 - 0xdcc&lt;br /&gt;
&lt;br /&gt;
Literally contains the text: &amp;quot;Copyright (c) Microsoft Corporation. All rights reserved.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Kernel Data Segment ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== 2BL ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Decoy bootloader ===&lt;br /&gt;
&lt;br /&gt;
This is very similar to the [MCPX ROM], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.&lt;br /&gt;
&lt;br /&gt;
== Known Retail BIOSs ==&lt;br /&gt;
&lt;br /&gt;
* 3394&lt;br /&gt;
* 4034&lt;br /&gt;
* 4134&lt;br /&gt;
* 4817&lt;br /&gt;
* 5101&lt;br /&gt;
* 5530&lt;br /&gt;
* 5713&lt;br /&gt;
* 5838&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5009</id>
		<title>BIOS</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5009"/>
				<updated>2017-03-23T14:01:03Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* Unknown */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The BIOS is either a 1MB or 256KB memory which is loaded to the top 16MB of memory (from 0xFF000000). There are a couple of things to understand in order for this to make sense. First, the 1MB BIOS is actually 256KB of data repeated 4 times. So, if you do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ split -n 4 xbox.bin &lt;br /&gt;
$ md5sum xa*&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xaa&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xab&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xac&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.&lt;br /&gt;
&lt;br /&gt;
=== Unknown ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000000 - 0x000000079&lt;br /&gt;
&lt;br /&gt;
Not sure what this does. Some people think it might be involved with initialising the ][MCPX ROM]], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.&lt;br /&gt;
&lt;br /&gt;
=== xcodes ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000080 - Copyright string&lt;br /&gt;
&lt;br /&gt;
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:&lt;br /&gt;
04 10 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:&lt;br /&gt;
04 84 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.&lt;br /&gt;
&lt;br /&gt;
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.&lt;br /&gt;
&lt;br /&gt;
=== Copyright String ===&lt;br /&gt;
&lt;br /&gt;
57 bytes long with the following start positions:&lt;br /&gt;
&lt;br /&gt;
* 3394 - 0xcfa&lt;br /&gt;
* 4034 - 0xcfa&lt;br /&gt;
* 4134 - 0xcfa&lt;br /&gt;
* 4817 - 0xdb9&lt;br /&gt;
* 5101 - 0xe49&lt;br /&gt;
* 5530 - 0xe59&lt;br /&gt;
* 5713 - 0xe59&lt;br /&gt;
* 5838 - 0xdcc&lt;br /&gt;
&lt;br /&gt;
Literally contains the text: &amp;quot;Copyright (c) Microsoft Corporation. All rights reserved.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Kernel Data Segment ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== 2BL ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Decoy bootloader ===&lt;br /&gt;
&lt;br /&gt;
This is very similar to the [MCPX ROM], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.&lt;br /&gt;
&lt;br /&gt;
== Known Retail BIOSs ==&lt;br /&gt;
&lt;br /&gt;
* 3394&lt;br /&gt;
* 4034&lt;br /&gt;
* 4134&lt;br /&gt;
* 4817&lt;br /&gt;
* 5101&lt;br /&gt;
* 5530&lt;br /&gt;
* 5713&lt;br /&gt;
* 5838&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5008</id>
		<title>BIOS</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=BIOS&amp;diff=5008"/>
				<updated>2017-03-23T14:00:42Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: Created page with &amp;quot;The BIOS is either a 1MB or 256KB memory which is loaded to the top 16MB of memory (from 0xFF000000). There are a couple of things to understand in order for this to make sens...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The BIOS is either a 1MB or 256KB memory which is loaded to the top 16MB of memory (from 0xFF000000). There are a couple of things to understand in order for this to make sense. First, the 1MB BIOS is actually 256KB of data repeated 4 times. So, if you do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ split -n 4 xbox.bin &lt;br /&gt;
$ md5sum xa*&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xaa&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xab&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xac&lt;br /&gt;
542c62cb976a4993c8c5027dff9638ce  xad&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll notice it is the same file repeated 4 times. That explains how some BIOS chips are 1MB and some are 256KB. The next thing is that the BIOS is repeated from 0xFF000000 until it fills the rest of memory. In other words, that 256KB of data is repeated 64 times.&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
&lt;br /&gt;
The BIOS is split into different components. These are largely the same from BIOS to BIOS, but with some differences.&lt;br /&gt;
&lt;br /&gt;
=== Unknown ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000000 - 0x000000079&lt;br /&gt;
&lt;br /&gt;
Not sure what this does. Some people think it might be involved with initialising the [MCPX ROM], but I don't know. The Reset Vector on the Pentium 3 would mean that this wasn't called before the MCPX ROM, but I'm guessing there are people out there who know a lot more about it than me.&lt;br /&gt;
&lt;br /&gt;
=== xcodes ===&lt;br /&gt;
&lt;br /&gt;
From 0x00000080 - Copyright string&lt;br /&gt;
&lt;br /&gt;
These are the xcode operations run by the MCPX interpreter. The first couple of lines appear to be nonsense (they don't execute any functionality), but then the first actual codes that I have found are:&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 3944, 4034, 4134 all start with:&lt;br /&gt;
04 10 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
The xcodes in the BIOS versions 4817, 5101, 5530, 5713, 5838 all start with:&lt;br /&gt;
04 84 08 00 80 01 80 00 00&lt;br /&gt;
&lt;br /&gt;
This leads me to believe that the first three BIOS versions that I have are compatible with the 1.0 MCPX, and the rest are compatible with the 1.1 MCPX.&lt;br /&gt;
&lt;br /&gt;
Next, some people believed that there was another unknown section between the xcodes and the copyright string. As far as I can tell, that section was to allow the xcode instruction set to expand, as the 5838 instructions are considerably larger than those in the 3944 BIOS.&lt;br /&gt;
&lt;br /&gt;
=== Copyright String ===&lt;br /&gt;
&lt;br /&gt;
57 bytes long with the following start positions:&lt;br /&gt;
&lt;br /&gt;
* 3394 - 0xcfa&lt;br /&gt;
* 4034 - 0xcfa&lt;br /&gt;
* 4134 - 0xcfa&lt;br /&gt;
* 4817 - 0xdb9&lt;br /&gt;
* 5101 - 0xe49&lt;br /&gt;
* 5530 - 0xe59&lt;br /&gt;
* 5713 - 0xe59&lt;br /&gt;
* 5838 - 0xdcc&lt;br /&gt;
&lt;br /&gt;
Literally contains the text: &amp;quot;Copyright (c) Microsoft Corporation. All rights reserved.&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Kernel ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Kernel Data Segment ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== 2BL ===&lt;br /&gt;
&lt;br /&gt;
Still need to analyse&lt;br /&gt;
&lt;br /&gt;
=== Decoy bootloader ===&lt;br /&gt;
&lt;br /&gt;
This is very similar to the [MCPX ROM], only the xcode interpreter is different, and it doesn't include any decryption/hashing algorithms.&lt;br /&gt;
&lt;br /&gt;
== Known Retail BIOSs ==&lt;br /&gt;
&lt;br /&gt;
* 3394&lt;br /&gt;
* 4034&lt;br /&gt;
* 4134&lt;br /&gt;
* 4817&lt;br /&gt;
* 5101&lt;br /&gt;
* 5530&lt;br /&gt;
* 5713&lt;br /&gt;
* 5838&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://hackspot.net/XboxBlog/?p=1 Understanding the Xbox boot process]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=MCPX&amp;diff=5007</id>
		<title>MCPX</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=MCPX&amp;diff=5007"/>
				<updated>2017-03-23T13:18:15Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: Created page with &amp;quot;The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors (there are 4 of them) and also the USB, PCI, IDE, etc, controllers (please rem...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The MCPX is the southbridge chip of the Xbox chipset by Nvidia. It contains the sound processors (there are 4 of them) and also the USB, PCI, IDE, etc, controllers (please remove this disclaimer if I'm right, or fix it if I'm wrong.)&lt;br /&gt;
&lt;br /&gt;
The MCPX is also the home to the secret [MCPX ROM].&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=MCPX_ROM&amp;diff=5006</id>
		<title>MCPX ROM</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=MCPX_ROM&amp;diff=5006"/>
				<updated>2017-03-23T12:21:22Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* Dumping the MCPX ROM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.&lt;br /&gt;
&lt;br /&gt;
== Dumping the MCPX ROM ==&lt;br /&gt;
&lt;br /&gt;
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mov eax,0x80000880&lt;br /&gt;
mov dx,0xcf8&lt;br /&gt;
out dx,eax&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [MCPX Dumping] for more details.&lt;br /&gt;
&lt;br /&gt;
== MCPX Common ==&lt;br /&gt;
&lt;br /&gt;
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.&lt;br /&gt;
&lt;br /&gt;
== MCPX 1.0 ==&lt;br /&gt;
&lt;br /&gt;
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.&lt;br /&gt;
&lt;br /&gt;
== MCPX 1.1 ==&lt;br /&gt;
&lt;br /&gt;
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=MCPX_ROM&amp;diff=5005</id>
		<title>MCPX ROM</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=MCPX_ROM&amp;diff=5005"/>
				<updated>2017-03-23T12:17:10Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: Created page with &amp;quot;The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fa...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The purpose of the MCPX ROM is to setup the GPT table, enter 32 bit mode, Enable caching, decrypt the second bootloader (2BL) and then transfer control over to it. It has a fair few things to do, so also contains an interpreter to read instructions from the BIOS (known as xcodes). There are two known versions of the MCPX ROM, 1.0 and 1.1. 1.0 was found in the 1.0 Xbox and used an RC4 algorithm to decrypt the 2BL. After Microsoft found this out, they changed the algorithm to a TEA algorithm. The code on the chips is largely the same, but for those two differences.&lt;br /&gt;
&lt;br /&gt;
== Dumping the MCPX ROM ==&lt;br /&gt;
&lt;br /&gt;
This is no mean feat. In the event of failure, or shortly after the 2BL execution has started, the Xbox executes the following codes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mov eax,0x80000880&lt;br /&gt;
mov dx,0xcf8&lt;br /&gt;
out dx,eax&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This turns off the MCPX ROM, making it invisible to anything trying to read it. See [MCPX Dumping] for more details.&lt;br /&gt;
&lt;br /&gt;
== MCPX Common ==&lt;br /&gt;
&lt;br /&gt;
As mentioned, the MCPX chips are largely the same. When the Xbox is powered on, the BIOS is loaded to the top 16 MB of memory (See [BIOS] for more details), and the MCPX ROM overlays the last 512 bytes of that memory. The Reset Vector tells the CPU to start executing code from 0xFFFFFFF0 (well, 0xFFFF:FFF0 due to being in 16 bit mode, but that is beyond the scope of this article). The first thing it does is setup the memory to consist of a 4GB continuous area, and then activates 32 bit mode. Starts executing code from BIOS (starting at 0xFF000080) using the [xcode interpreter]. Next it initialises the MTRR, enables caching, and then things become different.&lt;br /&gt;
&lt;br /&gt;
== MCPX 1.0 ==&lt;br /&gt;
&lt;br /&gt;
The 1.0 ROM runs an RC4 algorithm to decrypt the BL2 from flash (starting at 0xFFFF9E00) and load the unencrypted 2BL to memory (0x90000). It checks the signature of the decrypted 2BL and if it is correct, starts executing code at 0x90000. Otherwise it errors.&lt;br /&gt;
&lt;br /&gt;
== MCPX 1.1 ==&lt;br /&gt;
&lt;br /&gt;
Because of the flaws of the previous method, Microsoft changed the way the 2BL was decrypted. From what I can tell, Microsoft implemented a TEA algorithm to create a hash of a particular section of the BIOS (many times), and if that was correct, it would jump to 0xffffd600. This isn't in Memory, but rather in the BIOS. Otherwise it would error.&lt;br /&gt;
&lt;br /&gt;
== Error Handling ==&lt;br /&gt;
&lt;br /&gt;
The MCPX turns itself off when there is an error and then jumps to 0x000001FA. This is technically in the BIOS (there is no MCPX to read from any more), but the code is still relevant. It pretty much just makes the LEDs flash and hang.&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Main_Page&amp;diff=5004</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Main_Page&amp;diff=5004"/>
				<updated>2017-03-23T11:26:58Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: /* xboxdevwiki.net */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== xboxdevwiki.net ==&lt;br /&gt;
&lt;br /&gt;
Please help us fix this mess.&lt;br /&gt;
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.&lt;br /&gt;
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.&lt;br /&gt;
&lt;br /&gt;
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.&lt;br /&gt;
&lt;br /&gt;
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.&lt;br /&gt;
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Development&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]&lt;br /&gt;
* [[OpenXDK]]&lt;br /&gt;
* [[Microsoft XDK]]&lt;br /&gt;
&lt;br /&gt;
[[Xbox]]&lt;br /&gt;
&lt;br /&gt;
* [[Hardware revisions]]&lt;br /&gt;
** [[BIOS]]&lt;br /&gt;
** [[MCPX]] [[MCPX ROM|(ROM)]]&lt;br /&gt;
* [[Xbox Input Devices]]&lt;br /&gt;
* [[Operating System]]&lt;br /&gt;
* [[NV2A]]&lt;br /&gt;
** [[NV2A/Pixel Combiner]]&lt;br /&gt;
** [[NV2A/Fixed Function Pipeline]]&lt;br /&gt;
** [[NV2A/Vertex Shader]]&lt;br /&gt;
** [[NV2A/Surface Formats]]&lt;br /&gt;
&lt;br /&gt;
[http://segaretro.org/Sega_Chihiro Chihiro]&lt;br /&gt;
&lt;br /&gt;
* [[Chihiro Pictures]]&lt;br /&gt;
* [[Chihiro-Tools]]&lt;br /&gt;
* [[Chihiro-Launcher]]&lt;br /&gt;
&lt;br /&gt;
Games&lt;br /&gt;
&lt;br /&gt;
* [[Games/Grand Theft Auto 3]]&lt;br /&gt;
* [[Games/Grand Theft Auto Vice City]]&lt;br /&gt;
* [[Games/Grand Theft Auto San Andreas]]&lt;br /&gt;
* [[Games/Kung Fu Chaos]]&lt;br /&gt;
* [[Games/Tony Hawk's Pro Skater 2x]]&lt;br /&gt;
&lt;br /&gt;
Emulation / Emulators&lt;br /&gt;
&lt;br /&gt;
* [http://xqemu.com xqemu Xbox emulator]&lt;br /&gt;
* [[cxbx-reloaded]]&lt;br /&gt;
* [[cxbx]]&lt;br /&gt;
* [[dxbx]]&lt;br /&gt;
* [[Xeon]]&lt;br /&gt;
* [[Hackbox]]&lt;br /&gt;
* [[kvmbox]]&lt;br /&gt;
* [[MAME/Chihiro]]&lt;br /&gt;
* [[MAME/Xbox]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Find random stuff in [[Resources]]&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Main_Page&amp;diff=5003</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Main_Page&amp;diff=5003"/>
				<updated>2017-03-23T11:26:01Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== xboxdevwiki.net ==&lt;br /&gt;
&lt;br /&gt;
Please help us fix this mess.&lt;br /&gt;
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.&lt;br /&gt;
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.&lt;br /&gt;
&lt;br /&gt;
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.&lt;br /&gt;
&lt;br /&gt;
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.&lt;br /&gt;
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Development&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]&lt;br /&gt;
* [[OpenXDK]]&lt;br /&gt;
* [[Microsoft XDK]]&lt;br /&gt;
&lt;br /&gt;
[[Xbox]]&lt;br /&gt;
&lt;br /&gt;
* [[Hardware revisions]]&lt;br /&gt;
** [[BIOS]]&lt;br /&gt;
** [[MCPX]]&lt;br /&gt;
* [[Xbox Input Devices]]&lt;br /&gt;
* [[Operating System]]&lt;br /&gt;
* [[NV2A]]&lt;br /&gt;
** [[NV2A/Pixel Combiner]]&lt;br /&gt;
** [[NV2A/Fixed Function Pipeline]]&lt;br /&gt;
** [[NV2A/Vertex Shader]]&lt;br /&gt;
** [[NV2A/Surface Formats]]&lt;br /&gt;
&lt;br /&gt;
[http://segaretro.org/Sega_Chihiro Chihiro]&lt;br /&gt;
&lt;br /&gt;
* [[Chihiro Pictures]]&lt;br /&gt;
* [[Chihiro-Tools]]&lt;br /&gt;
* [[Chihiro-Launcher]]&lt;br /&gt;
&lt;br /&gt;
Games&lt;br /&gt;
&lt;br /&gt;
* [[Games/Grand Theft Auto 3]]&lt;br /&gt;
* [[Games/Grand Theft Auto Vice City]]&lt;br /&gt;
* [[Games/Grand Theft Auto San Andreas]]&lt;br /&gt;
* [[Games/Kung Fu Chaos]]&lt;br /&gt;
* [[Games/Tony Hawk's Pro Skater 2x]]&lt;br /&gt;
&lt;br /&gt;
Emulation / Emulators&lt;br /&gt;
&lt;br /&gt;
* [http://xqemu.com xqemu Xbox emulator]&lt;br /&gt;
* [[cxbx-reloaded]]&lt;br /&gt;
* [[cxbx]]&lt;br /&gt;
* [[dxbx]]&lt;br /&gt;
* [[Xeon]]&lt;br /&gt;
* [[Hackbox]]&lt;br /&gt;
* [[kvmbox]]&lt;br /&gt;
* [[MAME/Chihiro]]&lt;br /&gt;
* [[MAME/Xbox]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Find random stuff in [[Resources]]&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Main_Page&amp;diff=5002</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Main_Page&amp;diff=5002"/>
				<updated>2017-03-23T11:25:51Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== xboxdevwiki.net ==&lt;br /&gt;
&lt;br /&gt;
Please help us fix this mess.&lt;br /&gt;
This is an effort to document how the original Microsoft Xbox and the SEGA Chihiro work.&lt;br /&gt;
We not only care about technical details about those platforms, but also how to develop homebrew and emulate them.&lt;br /&gt;
&lt;br /&gt;
We are not interested in documenting the Xbox 360, Xbox One or any other console at this point.&lt;br /&gt;
&lt;br /&gt;
This wiki was started by xqemu (Xbox emulator) authors. It will become the place for all remaining Xbox projects to come together.&lt;br /&gt;
If you are interested in helping or discussing this, please come chat with us in #xqemu on freenode.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Development&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/xqemu/nxdk NXDK (New Xbox Development Kit)]&lt;br /&gt;
* [[OpenXDK]]&lt;br /&gt;
* [[Microsoft XDK]]&lt;br /&gt;
&lt;br /&gt;
[[Xbox]]&lt;br /&gt;
&lt;br /&gt;
* [[Hardware revisions]]&lt;br /&gt;
** [[Bios]]&lt;br /&gt;
** [[MCPX]]&lt;br /&gt;
* [[Xbox Input Devices]]&lt;br /&gt;
* [[Operating System]]&lt;br /&gt;
* [[NV2A]]&lt;br /&gt;
** [[NV2A/Pixel Combiner]]&lt;br /&gt;
** [[NV2A/Fixed Function Pipeline]]&lt;br /&gt;
** [[NV2A/Vertex Shader]]&lt;br /&gt;
** [[NV2A/Surface Formats]]&lt;br /&gt;
&lt;br /&gt;
[http://segaretro.org/Sega_Chihiro Chihiro]&lt;br /&gt;
&lt;br /&gt;
* [[Chihiro Pictures]]&lt;br /&gt;
* [[Chihiro-Tools]]&lt;br /&gt;
* [[Chihiro-Launcher]]&lt;br /&gt;
&lt;br /&gt;
Games&lt;br /&gt;
&lt;br /&gt;
* [[Games/Grand Theft Auto 3]]&lt;br /&gt;
* [[Games/Grand Theft Auto Vice City]]&lt;br /&gt;
* [[Games/Grand Theft Auto San Andreas]]&lt;br /&gt;
* [[Games/Kung Fu Chaos]]&lt;br /&gt;
* [[Games/Tony Hawk's Pro Skater 2x]]&lt;br /&gt;
&lt;br /&gt;
Emulation / Emulators&lt;br /&gt;
&lt;br /&gt;
* [http://xqemu.com xqemu Xbox emulator]&lt;br /&gt;
* [[cxbx-reloaded]]&lt;br /&gt;
* [[cxbx]]&lt;br /&gt;
* [[dxbx]]&lt;br /&gt;
* [[Xeon]]&lt;br /&gt;
* [[Hackbox]]&lt;br /&gt;
* [[kvmbox]]&lt;br /&gt;
* [[MAME/Chihiro]]&lt;br /&gt;
* [[MAME/Xbox]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Find random stuff in [[Resources]]&lt;br /&gt;
&lt;br /&gt;
== Getting started ==&lt;br /&gt;
&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Configuration settings list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ MediaWiki FAQ]&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki release mailing list]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Localise MediaWiki for your language]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Learn how to combat spam on your wiki]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Hardware_Revisions&amp;diff=5001</id>
		<title>Hardware Revisions</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Hardware_Revisions&amp;diff=5001"/>
				<updated>2017-03-23T10:50:08Z</updated>
		
		<summary type="html">&lt;p&gt;Eighthpence: Base page creation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There are 7 Xbox revisions&lt;br /&gt;
&lt;br /&gt;
== 1.0 ==&lt;br /&gt;
&lt;br /&gt;
* Made in Hungary&lt;br /&gt;
* USB controller is on a separate PCB&lt;br /&gt;
* GPU has a fan on the heat sink&lt;br /&gt;
* MCPX 1.0 ROM&lt;br /&gt;
* Thomson DVD Drive&lt;br /&gt;
* Seagate Hard Drive&lt;br /&gt;
* Conexant Video Chip&lt;br /&gt;
&lt;br /&gt;
== 1.1 ==&lt;br /&gt;
&lt;br /&gt;
Same as 1.0, except:&lt;br /&gt;
* Made in Hungary or Mexico&lt;br /&gt;
* USB controller moved onto the motherboard&lt;br /&gt;
* Fan removed from the GPU heat sink&lt;br /&gt;
* MCPX 1.1 ROM&lt;br /&gt;
&lt;br /&gt;
== 1.2 ==&lt;br /&gt;
&lt;br /&gt;
Same as 1.1, except:&lt;br /&gt;
* Made in China&lt;br /&gt;
* Philips DVD Drive&lt;br /&gt;
* Western Digital Hard Drive&lt;br /&gt;
&lt;br /&gt;
== 1.3 ==&lt;br /&gt;
Same as 1.2, except:&lt;br /&gt;
* Samsung DVD Drive&lt;br /&gt;
* Seagate Hard Drive&lt;br /&gt;
&lt;br /&gt;
== 1.4 ==&lt;br /&gt;
&lt;br /&gt;
Same as 1.3, except:&lt;br /&gt;
* Western Digital Hard Drive&lt;br /&gt;
* Focus video chip&lt;br /&gt;
&lt;br /&gt;
== 1.5 ==&lt;br /&gt;
&lt;br /&gt;
Same as 1.4. Possibly never existed, but will otherwise be very rare. Production was halted and 1.4 was produced again.&lt;br /&gt;
&lt;br /&gt;
== 1.6 ==&lt;br /&gt;
&lt;br /&gt;
Same as 1.4, except:&lt;br /&gt;
* Made in China or Taiwan&lt;br /&gt;
* BIOS no longer flashable&lt;br /&gt;
* Removed data and power lines from LPC port&lt;br /&gt;
* Xcalibur video chip&lt;br /&gt;
&lt;br /&gt;
== Identifying ==&lt;br /&gt;
&lt;br /&gt;
While not definitive, here are some ways to help identify the revision of your Xbox.&lt;br /&gt;
&lt;br /&gt;
=== Manufacturing Details ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Date Range&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Revision&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Location&lt;br /&gt;
|-&lt;br /&gt;
| 01/2001-10/2002 || 1.0 || Hungary&lt;br /&gt;
|-&lt;br /&gt;
| 11/2002-04/2003 || 1.1 || Hungary, Mexico&lt;br /&gt;
|-&lt;br /&gt;
| 05/2003-03/2004 || 1.2 || China&lt;br /&gt;
|-&lt;br /&gt;
| 04/2004 Onward || 1.6 || China, Taiwan&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Serial Number ===&lt;br /&gt;
&lt;br /&gt;
The serial number looks like this:&lt;br /&gt;
&lt;br /&gt;
LNNNNNN TWWFF&lt;br /&gt;
&lt;br /&gt;
L is the production line&lt;br /&gt;
NNNNNN is the number produced that week&lt;br /&gt;
Y is the last digit of the production year&lt;br /&gt;
WW is the number of the week&lt;br /&gt;
FF is the factory code&lt;br /&gt;
&lt;br /&gt;
Note, this table contradicts the previous table.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Factory&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Location&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Revision&lt;br /&gt;
|-&lt;br /&gt;
| 02 || Mexico || 1.0 or 1.1&lt;br /&gt;
|-&lt;br /&gt;
| 03 || Hungary || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| 05 || China || 1.2 or later&lt;br /&gt;
|-&lt;br /&gt;
| 06 || Taiwan || 1.2 or later&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Serial Number&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Revision&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 20WFF || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 21WFF || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 23WFF || 1.0 or 1.1&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 24WFF || 1.1&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 25WFF || 1.1&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 30WFF || 1.2&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 31WFF || 1.3&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 32WFF || 1.3&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 33WFF || 1.4 or 1.5&lt;br /&gt;
|-&lt;br /&gt;
| LNNNNNN 42WFF || 1.6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Video Chip&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Revision&lt;br /&gt;
|-&lt;br /&gt;
| Conexant || 1.0, 1.1, 1.2, 1.3&lt;br /&gt;
|-&lt;br /&gt;
| Focus || 1.4, 1.5&lt;br /&gt;
|-&lt;br /&gt;
| Xcalibur || 1.6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== BIOS Version ===&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Kernel Version&lt;br /&gt;
! scope=&amp;quot;col&amp;quot; | Revision&lt;br /&gt;
|-&lt;br /&gt;
| 3944, 4034, 4036, 4627 || 1.0&lt;br /&gt;
|-&lt;br /&gt;
| 4817, 4972 || 1.1&lt;br /&gt;
|-&lt;br /&gt;
| 5101, 5713 || 1.2 - 1.5&lt;br /&gt;
|-&lt;br /&gt;
| 5838 || 1.6&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.informit.com/articles/article.aspx?p=367210&amp;amp;seqNum=2 InformIT Methods of Identification]&lt;br /&gt;
* [http://www.informit.com/articles/article.aspx?p=367210 InformIT Identifying your Xbox Revision]&lt;/div&gt;</summary>
		<author><name>Eighthpence</name></author>	</entry>

	</feed>