--- id: pod-hardware title: "Pod Hardware — the fixed target (7 monitors, D3D9, RIO)" status: established source_sections: "PROGRESS_LOG.md §3; the PLATFORM PROFILE + GAUGE DEV-COMPOSITE notes" related_topics: [gauges-hud, rendering, project-overview] key_terms: [pod, RIO, MFD, IG-board, SVGA16] --- # Pod Hardware (the fixed target) The port must run on (a) a dev box and (b) the fixed arcade pod. The pod is a hard constraint that bounds the graphics API. Full detail: `docs/PROGRESS_LOG.md §3`. ## Displays - **2 video cards → 7 monitors:** main 3D view **800×600**; radar **640×480**; five monochrome MFDs driven as one **1280×480** horizontally-spanned surface. [T1] - Requires **old NVIDIA drivers** for the MFD horizontal spanning — a hard constraint that bounds the graphics API → **Target Direct3D 9** (lowest common denominator that runs on old-driver pods AND modern cards; one codepath). NOT Vulkan/D3D11+. CUDA is irrelevant (compute, not display). [T1] ## Cockpit I/O (RIO) Joystick X/Y, throttle, pedals, buttons over **serial COM** (`L4RIO`, `L4SERIAL`). Must be remapped to keyboard/gamepad on a dev box; real wiring is a pod bring-up task (Phase 8). The engine is a PUSH model — `LBE4ControlsManager` groups are fed by all devices (RIO on the pod, DirectInput on dev); the `MechControlsMapper` interprets them ([[locomotion]]). [T2] ## Multi-surface gauge path (intact, pod-only by default) The pod multi-surface path EXISTS and is intact: `DPLRenderer::FindBestAdapterIndices` (multi- adapter selector, honors PRIMGAUGE/SECGAUGE/MFDGAUGE/SPANDISABLE), `SVGA16::BuildWindows` (a fullscreen D3D device + window per gauge/MFD surface, MFD span = width×2), `L4GaugeRenderer` (gated on `L4GAUGE`). `content/SETENV.BAT` is the authentic pod env preset (L4CONTROLS=RIO,KEYBOARD; L4GAUGE=640x480x16; L4PLASMA=com2). [T2] ## Platform profile switch `-platform pod|dev` (or `BT_PLATFORM` env; default DEV) selects a runtime env preset WITHOUT forking the codepath. **DEV** = keyboard + single 800×600 window. **POD** = RIO input (keyboard fallback off serial) + multi-surface gauges (from SETENV.BAT/L4GAUGE on real hardware). `-platform pod` does NOT auto-enable L4GAUGE (each surface needs its own fullscreen device on the pod's 2 cards). Off-pod, the 6 MFD surfaces render in a dev window via `BT_DEV_GAUGES` ([[gauges-hud]]). [T2] ## MFD surface model All cockpit surfaces are bit-plane MASKS over ONE shared `SVGA16` pixelBuffer: `sec`=palette low byte; `Heat`=0x4000, `Mfd2`=0x0400, `Comm`=0x8000, `Mfd1`=0x0100, `Mfd3`=0x1000; `Eng1-3` = engineering-mode alt planes; `overlay`=0x00C0 (shares the sec surface). See [[gauges-hud]]. [T2] ## Key Relationships - Renders: [[gauges-hud]] (the MFD surfaces), [[rendering]] (the main 3D view). - Input: [[locomotion]] (the mapper). - Bring-up: Phase 8 (get pod specifics from Nick — [[open-questions]]).