# Xbox 360 Architecture — RE Quick Reference A condensed reference for reverse engineering Xbox 360 games. The longer [technical reference report](xbox360-re-technical-reference.md) has the binary-level detail. Project Sylpheed's own formats are decoded, and each has a page under [`docs/re/`](../re/INDEX.md). --- ## CPU: IBM Xenon | Property | Value | |----------|-------| | Architecture | PowerPC 2.02 (64-bit ISA, 32-bit addressing in games) | | Cores | 3 symmetric cores × 2 SMT threads = **6 logical processors** | | Clock | 3.2 GHz | | Execution | In-order, dual-issue superscalar (no speculation) | | L1 I/D cache | 32 KB each, per core | | L2 cache | 1 MB unified, shared across all 3 cores | | Vector registers | **VMX-128** — 128 × 128-bit VRs per thread (vs. standard AltiVec's 32) | | Endianness | **Big-endian** | **Key for RE:** All multi-byte integer and float values in game binaries are big-endian. The VMX-128 extension adds dot-product instructions (`vmsum3fp128`/`vmsum4fp128`) and D3D pack/unpack instructions absent from standard PowerPC. Their semantics are in the [PowerPC instruction manual](../../tools/ppc-manual/README.md). --- ## GPU: Xenos (ATI R400/R500 derived) | Property | Value | |----------|-------| | Clock | 500 MHz | | Shader processors | 48 unified (3 SIMD × 16, each with 5-wide VLIW ALU) | | Peak throughput | ~240 GFLOPS | | On-chip memory | **10 MB eDRAM** (framebuffer, depth, MSAA — no separate VRAM) | | System RAM | 512 MB GDDR3 shared with CPU | | Northbridge | GPU also acts as northbridge / memory controller | ### Command Packets (PM4) The GPU is driven by a **PM4 command ring buffer** written by the CPU. Key packet types: | Type | Description | |------|-------------| | `DRAW_INDX` | Indexed draw call | | `SET_CONSTANT` | Write shader constant registers | | `SET_TEXTURE_CONTROL` | Texture fetch constant (address, format, tiling mode) | | `LOAD_ALU_CONSTANT` | Load vertex shader constants | Xenia Canary's `src/xenia/gpu/` implements a full PM4 parser — invaluable for understanding draw calls and state management. ### Texture Tiling Xbox 360 textures are stored **tiled** in memory, not linear; the Xenos hardware de-tiles on fetch. Texture data read from game files must be de-tiled before it is displayed. Tile size depends on the texture format (DXT1 = 4×4 blocks, etc.). --- ## Executable Format: XEX2 `default.xex` is the main game executable in Microsoft's **Xbox EXE (XEX2)** format. | Offset | Field | Notes | |--------|-------|-------| | 0x00 | Magic | `58455832` = `XEX2` | | 0x04 | Module flags | Security, format flags | | 0x08 | Header data offset | Points to optional header list | | 0x10 | Security info offset | RSA signature, image hash | The executable contains encrypted, compressed PowerPC code. The full layout is in [`xex2-format.md`](xex2-format.md). This project loads and disassembles it with `crates/sylpheed-xex` and `crates/sylpheed-xexdb`. --- ## Platform File Formats ### XPR2 — Texture Container | Offset | Field | Value | |--------|-------|-------| | 0x00 | Magic | `58505232` = `XPR2` | | 0x04 | Total size | u32 BE | | 0x08 | Header size | u32 BE — data starts at this offset | | 0x0C | Object count | u32 BE | Each texture object contains a D3DFORMAT, width/height/depth/mip levels, and tiled pixel data. ### XWB / XSB — XACT Audio Banks Wave banks (`.xwb`) and sound banks (`.xsb`) are part of Microsoft's **XACT audio system**. Audio data is encoded as **XMA** (Xbox Media Audio), a proprietary Microsoft codec based on WMA Pro. --- ## Useful External References - [xboxdevwiki.net](https://xboxdevwiki.net) — Community Xbox 360 hardware documentation - [Xenia Canary source](https://github.com/xenia-canary/xenia-canary) — GPU/kernel RE reference - [xdvdfs](https://github.com/antangelo/xdvdfs) — Pure Rust XISO reader (a dependency of `sylpheed-formats`) - [binrw](https://binrw.rs) — Derive-macro binary format parsing (a dependency of `sylpheed-formats`) - [Free60 Project](https://free60project.github.io/wiki/) — Original Xbox 360 open-source hardware documentation