Render bridge (live_bridge.py, vrview_gl.py): - Hat glances render (left/right frame the canopy, hat-down = clean rear). Root bug was a stale _ckpt['fix'] key -> KeyError every glance frame -> render aborted (screen froze on hold, snapped back on release). The glance itself is the authentic eye-DCS action-0x1f reflush fp_cam already applies. - Torso twist turret-true (root-axis yaw, zero parallax); lasers follow torso. - Rear glance drops the canopy shell for a clean view (original-hardware behavior); mission-fade shroud 9fd hidden. - Wireframe debug mode (VRVIEW_WIREFRAME / 'w' key), scene-pass scoped. - Renderer output = 832x512, the dPL3 board's native framebuffer res. DOSBox-X fork: namedpipe serial backend (serialnamedpipe.cpp/.h) for vRIO/vPLASMA, replacing com0com; overlapped non-blocking I/O; typed frames (0x00 data / 0x01 DTR+RTS). Tracked copies + apply steps in vpx-device. Docs: COCKPIT-CAGE-NOTES (full glance/twist/rear forensics), XP-PORT-PLAN (back-burnered), RIO-NOTES (namedpipe + keypad), pipe/egg conf variants. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
12 KiB
One archive, Windows XP -> Windows 11 (fleet-floor plan)
STATUS 2026-07-11: BACK-BURNERED (operator call). This is the plan of record for when the port is picked up, not active work. Active effort stays on the modern archive's remaining details (DEPLOYMENT-PLAN OPEN items + the Phase 0 fleet answers below, which are cheap to gather meanwhile).
Fleet reality (operator, 2026-07-11): the surviving ~140 cockpits are overwhelmingly Windows XP, a few Windows 2000, 4 original DOS PCs (Japan), and Win10 migrations are only now starting. The cockpit PCs are more modern and powerful than "runs XP" suggests -- the OS floor is a software constraint, not a hardware one. So the deployable archive must install and run on XP SP3 (32-bit) through Windows 11 (x64) from the same zip -- not an XP fork.
Current state (see DEPLOYMENT-PLAN.md): the packaged pod is INSTALL-VERIFIED
on modern Windows, but every shipped binary is x64 and the floor is effectively
Win10: pod-launch is .NET 8, renderer.exe is frozen Python 3.13 (moderngl,
GL 3.3), configure.ps1 needs the Win8+ NetAdapter cmdlets, and the capture
stack policy assumes Npcap (Win8.1+). None of it loads on XP.
Scope decisions (settled unless marked OPEN)
- Floor = XP SP3, 32-bit. Every artifact inside the zip becomes 32-bit x86, PE subsystem 5.1, XP-safe API surface. 32-bit runs unchanged on Win10/11 under WoW64 -- that is the whole dual-target trick.
- The 4 DOS cockpits are out of scope -- they run BT/RP 4.10 natively on the original hardware; the emulation archive is irrelevant there.
- Windows 2000 is OUT OF SCOPE (operator call, 2026-07-11). The few 2000 units either get lifted to XP SP3 or wait for their Win10 migration; the archive never targets 2000.
- Dev-side tooling stays modern.
package.ps1,freeze.ps1, the build rigs -- none of it ships; only pod-side artifacts change. - The TeslaConsole/TeslaLauncher contract is unchanged (zip + one folder +
postinstall.batelevated; console registers/invokes/kills). XP has no UAC, so "elevated" degrades gracefully to the admin account TeslaLauncher already runs under on the fleet.
The five blockers -> five workstreams
| # | Component | Today | XP->11 plan |
|---|---|---|---|
| A | dosbox-x.exe | x64 MinGW64 static (v2026.06.02 + our patches) | 32-bit XP-compatible build of the same patched tree |
| B | pod-launch | .NET 8 win-x64 | native Win32 C++ supervisor, 32-bit, /SUBSYSTEM 5.01 |
| C | renderer.exe | PyInstaller Py3.13 + moderngl (GL 3.3) | native port of Dave's vrview (fixed-function GL) -- the crux |
| D | configure.ps1 / postinstall | PowerShell 3+ cmdlets | fold into the supervisor exe (--configure); batch stays batch |
| E | capture stack | Npcap (manual, Win8.1+) | WinPcap 4.1.3 on XP / Npcap on Win10+, same wpcap.dll API |
A. DOSBox-X: 32-bit XP-compatible build of our patched tree
Upstream DOSBox-X has continuously shipped "Windows XP compatible" 32-bit
MinGW builds; our tree is emulator/src = upstream v2026.06.02 plus our
self-contained patches (VPX device, pcap RX filter, serial3=file, etc.).
- Verify v2026.06.02 still has the XP build recipe (their MinGW "lowend" configs / release channel). If upstream dropped it, find the last XP-supporting tag and forward-port our patches (they are small and peripheral -- device layer, pcap filter, serial -- not core-emulation surgery).
- Reproduce their XP toolchain (pinned 32-bit MinGW, msvcrt-linked -- NOT
today's MSYS2 MINGW64/UCRT) and build static, same as the current
packaging rule: imports = Windows system DLLs + delay-load
wpcap.dllonly. - SDL choice follows upstream's XP builds (their in-tree SDL1 is the
conservative default; SDL2-for-XP only if their recipe blesses it).
output=surface/ddrawon XP -- do not assume a GL-capable desktop. - Re-verify on XP the features the pod depends on: VPX TCP frame stream
(:8621), NE2000+pcap against WinPcap, AWE32/EMU8000 (bt/rp REQUIRE sound --
the FAST SOS clock dies without it),
serial3=filelogging, window title / positioning hooks thatpod_deployrelies on.
B. Supervisor: native Win32 C++ (replaces .NET 8 pod-launch)
The design survives verbatim -- Job Object + KILL_ON_JOB_CLOSE exists since
Win2000, and JobObject.cs/ChildProcess.cs/Focus.cs are already thin
P/Invoke wrappers around the exact Win32 calls the C++ version will make
directly. Port, don't redesign: CreateJobObject/SetInformationJobObject/
AssignProcessToJobObject/CreateProcess suspended -> assign -> resume ->
WaitForSingleObject, plus the window-layout/focus pass.
- Build 32-bit, XP-targeting toolset (MSVC
v141_xpor the same pinned MinGW as A), statically linked CRT -- zero runtime deps (rejecting .NET Framework 4.0: it would add an air-gapped framework install to every XP cockpit for no benefit). - XP has no nested job objects (one job per process before Win8). OPEN
(Phase 0 gate): does TeslaLauncher on the fleet already put children in a
job? If yes: launch the supervisor
CREATE_BREAKAWAY_FROM_JOB(needs launcher-sideJOB_OBJECT_LIMIT_BREAKAWAY_OK) or fall back to a watchdog/kill-tree mode. If no (likely -- native titles are plain children): nothing changes. - Drop
createdump.exe-style diagnostics; a supervisor log file replaces it.
C. Renderer: native vrview port -- the crux, and a decision with Dave
Python is a dead end on XP: CPython dropped XP at 3.5, Dave's GL backend needs
moderngl (GL 3.3 core -- no XP-era GPU/driver has it), and the numpy software
rasterizer (vrview.Renderer, today's fallback in _backend.py) is a
debugging reference, not something a P4 will push at mission rate.
Plan of record: port vrview to C/C++ against fixed-function OpenGL (1.1 floor, 1.4-1.5 typical on XP-era GeForce/Radeon). The scene is 1995-vintage art (untextured/lightly-textured polys, flat/gouraud lighting, the death-camera pass) -- it predates shaders; fixed-function multitexture covers it. One binary then runs XP through Win11 (GL 1.x still works everywhere), and the modern moderngl renderer becomes a dev-rig reference.
- The interface is already frozen and OS-agnostic:
renderer.exe tcp:8621 <live.fifodump>-- a TCP client consuming the VPX frame stream. The port swaps cleanly under pod-launch and package.ps1 with zero contract change. - Spike first (with Dave): inventory what
vrview_glactually uses of GL 3.3 and map each feature to fixed-function or CPU-side transform. Frame coalescing and SceneCache logic translate 1:1. - Fallbacks, in order: (1) two-artifact split -- ship both renderers, dispatcher picks by OS (modern rigs keep the verified moderngl exe; XP gets the port) -- acceptable but two codebases; (2) software rasterizer in C (SSE2) if the GPU census says the XP boxes have no usable GL driver at all; (3) companion mini-PC driving the main view head over the existing TCP bridge -- architecturally free, but it changes cockpit wiring, so it is a per-site rescue, not the plan.
D. Install tooling: one native exe configures, batch stays batch
postinstall.bat is already cmd-only and runs on anything NT -- keep it.
configure.ps1 cannot run on XP (PowerShell 2.0 max, no NetAdapter module),
and VBScript is being removed from Win11, so scripting is the wrong home.
Fold steps 2-4 into the supervisor: pod-supervisor --configure -Root ....
Same logic, Win32 APIs that exist on both ends: GetAdaptersAddresses (XP+)
for the physical-adapter/static-IPv4 scan (keep the fail-loud ambiguity rule
and -BayIp/-ConsoleIp overrides), the same letter-leading realnic= GUID
fragment, bayIP+100 derivation, 02:00:... MAC, WATTCP.CFG stamping, and
@@TOKEN@@ template rendering. postinstall calls the exe instead of
PowerShell. One compiled artifact then owns configure + launch + kill on every
OS, and the PowerShell dependency leaves the archive entirely.
Also: drop vc_redist.x64.exe handling (wrong arch for the fleet; statically
linked artifacts need no redist at all).
E. Capture stack: WinPcap on XP, Npcap on Win10+, one dlopen surface
DOSBox-X talks to wpcap.dll, and WinPcap 4.1.3 and Npcap both provide it
(Npcap in WinPcap-compat mode). The manual-install-per-cockpit policy
(operator consensus 2026-07-10) already fits: it becomes "install the
capture stack for your OS, once" -- WinPcap 4.1.3 on XP, Npcap on Win10/11.
- WinPcap's BSD-style license permits redistribution, so the XP installer CAN
be bundled in
deploy\and auto-installed by postinstall (unlike Npcap, whose free license forbids bundling -- part of why the manual policy exists). postinstall detection becomes:sc query npcap || sc query npf. - The co-located checksum-offload killer is Npcap/host-capture specific;
real deployments (console on its own machine) are immune on any OS. If a
co-located XP rig is ever needed, offload disable lives in the NIC's
advanced properties instead of
Disable-NetAdapterChecksumOffload.
CPU headroom: verify, but likely a non-issue
BT/RP 4.10 targeted P90-PPro200; DOSBox-X's 32-bit dynamic core wants a multi-GHz host to emulate that class of CPU while also running EMU8000 synthesis and feeding the VPX stream -- and the renderer competes for the same cores. Per the operator (2026-07-11) the cockpit PCs are notably more powerful than their XP installs suggest, so this is expected to pass; the Phase 1 bench on a representative box stays as the cheap confirmation gate (Core2-class or better = comfortable), not as a program risk.
Phasing
- Phase 0 -- census + contract checks (blocks everything).
Per-cockpit survey template: CPU/RAM, GPU + driver GL caps, video head
count/wiring, NIC model, OS + SP, free disk. Fleet answers needed:
TeslaLauncher job-object usage (B), which console build the venues run and
where the
+100 DOSBox flaglands (console workstream, unchanged from DEPLOYMENT-PLAN), Win2000 unit count (scope), representative XP loaner box for the bench. - Phase 1 -- DOSBox-X XP build + THE BENCH (biggest unknown first). Workstream A; exit gate = egg->mission at FAST clock with sound on representative XP hardware, WinPcap mesh verified between two XP boxes.
- Phase 2 -- supervisor + configure exe (B + D). Exit gate = fresh zip extract -> postinstall -> configure -> launch -> kill-cascade on XP SP3 VM and Win11, same zip.
- Phase 3 -- renderer port (C, with Dave). Spike -> port -> live-verify against the frozen VPX stream on both OS ends.
- Phase 4 -- packaging + validation matrix. package.ps1 swaps in the
32-bit artifact set (it already auto-bundles what's present). Matrix: XP SP3
VM (bridged pcap), Win11 x64, then a real XP cockpit soak; renderer decay /
death-camera / mission-review passes re-run per
CAMERA-REVIEW-NOTES.md.
The current x64 package keeps shipping to Win10/11 rigs throughout; the XP work replaces it only when the same zip passes the full matrix on both ends.
OPEN items
- Phase 0 census results -- GPU/driver GL caps decide the renderer fallback (CPU expected fine per operator; confirm with the bench).
- TeslaLauncher job-object behavior on the fleet (breakaway or not).
- Fleet console build + where the per-title DOSBox
+100flag is applied. - Upstream v2026.06.02 XP-build recipe intact? (else: last XP-supporting tag
- patch forward-port).
- Renderer port ownership: likely in-house (operator, 2026-07-11 -- "we may have to do the renderer work ourselves"); Dave's involvement reduces to the vrview_gl feature inventory / consultation. The native fixed-function port stays the plan of record either way -- vrview (the software reference) plus the frozen VPX stream give us a full spec and a pixel-comparison oracle without needing the original author.