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>
203 lines
12 KiB
Markdown
203 lines
12 KiB
Markdown
# 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.bat` elevated; 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.).
|
|
|
|
1. 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).
|
|
2. 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.dll` only.
|
|
3. 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`/`ddraw` on XP -- do not assume a GL-capable desktop.
|
|
4. 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=file` logging, window title /
|
|
positioning hooks that `pod_deploy` relies 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_xp` or 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-side `JOB_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_gl` actually 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 flag` lands (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
|
|
|
|
1. Phase 0 census results -- GPU/driver GL caps decide the renderer fallback
|
|
(CPU expected fine per operator; confirm with the bench).
|
|
2. TeslaLauncher job-object behavior on the fleet (breakaway or not).
|
|
3. Fleet console build + where the per-title DOSBox `+100` flag is applied.
|
|
4. Upstream v2026.06.02 XP-build recipe intact? (else: last XP-supporting tag
|
|
+ patch forward-port).
|
|
5. 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.
|