# Project Frankenstein: Volume XXV

## Inquiry Identity vs. Mode Sense Capabilities

This volume maps the relationship between the Inquiry (0x12) identity strings and the Mode Sense (0x1A) capability reporting in the GCC-4241N. It details how the original Xbox kernel utilizes these structures to classify the drive and how incremental "Identity Tweaking" can be used to bypass kernel-level hardware filters [cite: User Summary, Vol XXIV, pp_win.c, 129_perfect_trampoline_v18.py].

## 1. The Identity/Capability Handshake

The Xbox host classifies a drive through a two-step handshake [cite: Vol XXIV]:

- Identity (0x12): Determines the hardware "Family" (e.g., Hitachi-LG). This selects which vendor-specific command sets the kernel will attempt to use [cite: Vol XXIV, pp_win.c].
- Capabilities (0x1A): Determines device-specific parameters, such as the Write-Protect (WP) status [cite: 129_perfect_trampoline_v18.py].

## 2. Mode Sense Page 0x01: The WP Bit

### Theory: Read-Only Enforcement

The Xbox kernel expects a dedicated DVD-ROM device. Because the GCC-4241N is a combo drive, its native firmware may report itself as "Writable" in the Mode Parameter Header [cite: User Summary, pp_win.c]. If Bit 7 (WP) of the Device-Specific Parameter byte is 0, the Xbox may reject the hardware [cite: 129_perfect_trampoline_v18.py].

## 3. Incremental Identity Tweaking (SRAM)

Identity strings are copied from ROM to a "Live ID" table in SRAM at boot [cite: Vol VI Addendum]. Testing incremental changes allows the developer to find the minimum required spoofing for the Xbox to accept the drive [cite: pp_win.c].

Field | SRAM Offset | Native Value | Hybrid Goal (Test)
--- | --- | --- | ---
Vendor | `0x40000D40` | `HL-DT-ST` | Keep Native
Product (Type) | `0x40000D48` | `RW/DVD` | `DVDROM`
Product (Model) | `0x40000D4F` | `GCC` | `GDR`

## 4. Testing via pp_win.c

Use the `Poke` command to modify the live strings in memory without a physical flash cycle [cite: pp_win.c].

    ; Change "RW/DVD" to "DVDROM"
    pp_win D: 40000D48 poke 44 ; 'D'
    pp_win D: 40000D49 poke 56 ; 'V'
    pp_win D: 40000D4A poke 44 ; 'D'
    pp_win D: 40000D4B poke 52 ; 'R'
    pp_win D: 40000D4C poke 4F ; 'O'
    pp_win D: 40000D4D poke 4D ; 'M'