diff --git a/emulator/deploy/net_loop_pipe.conf.tmpl b/emulator/deploy/net_loop_pipe.conf.tmpl new file mode 100644 index 0000000..6013347 --- /dev/null +++ b/emulator/deploy/net_loop_pipe.conf.tmpl @@ -0,0 +1,62 @@ +# DEPLOY TEMPLATE -- rendered to net_loop_pipe.conf by deploy/configure.ps1 at install. +# PIPE TRIM: serial1/2 are NAMED PIPES to vRIO (pipe:vrio) + vPLASMA +# (pipe:vplasma) -- the dev-rig default (launch: pod-launch --pipe; +# vRIO dist >= 20260716-68e3d1f speaks the pipe). Arcade cockpits with the +# REAL RIO/plasma on COM ports use the non-_pipe confs. +# Tokens (filled by postinstall): @@ROOT@@ = package dir (C:\games\), +# @@REALNIC@@ = this pod's NIC GUID fragment, @@MACADDR@@ = stable derived MAC. +# BattleTech, GO.BAT-style netnub loop (pod stays connected + picks up missions). +[sdl] +output=opengl +priority=highest,highest +[dosbox] +memsize=32 +machine=svga_s3 +[cpu] +core=dynamic +cputype=pentium +cycles=max +[ne2000] +ne2000=true +nicbase=340 +# IRQ 10, NOT 3: COM2 (plasma) owns IRQ 3 in-game. +nicirq=10 +macaddr=@@MACADDR@@ +backend=pcap +[ethernet, pcap] +realnic=@@REALNIC@@ +[sblaster] +sbtype=sb16 +sbbase=220 +irq=5 +dma=1 +hdma=5 +[mixer] +rate=44100 +blocksize=1024 +prebuffer=60 +[serial] +serial1=namedpipe pipe:vrio rxpollus:100 rxburst:16 +serial2=namedpipe pipe:vplasma +[autoexec] +mount c "@@ROOT@@\ALPHA_1" +mount d "@@ROOT@@\net-boot" +d: +echo === loading NE2000 packet-driver stack (pcap/bridge, port 340) === +d:\lsl +d:\ne2000 +d:\odipkt +c: +cd \rel410\bt +set VIDEOFORMAT=svga +set BLASTER=A220 I5 D1 H5 P330 T6 +c:\sb16\diagnose /s +set BLASTER=A240 I7 D3 H6 P300 T6 +c:\sb16\diagnose /s +set BLASTER=A220 I5 D1 H5 P330 T6 +set TEMP=c:\ +set HEAPSIZE=15000000 +set L4GAUGE=640x480x16 +call setenv.bat r f s p +echo === entering GO.BAT-style netnub loop (waits for console missions) === +call d:\loop.bat diff --git a/emulator/deploy/net_rp_pipe.conf.tmpl b/emulator/deploy/net_rp_pipe.conf.tmpl new file mode 100644 index 0000000..0bb3be2 --- /dev/null +++ b/emulator/deploy/net_rp_pipe.conf.tmpl @@ -0,0 +1,63 @@ +# DEPLOY TEMPLATE -- rendered to net_rp_pipe.conf by deploy/configure.ps1 at install. +# PIPE TRIM: serial1/2 are NAMED PIPES to vRIO (pipe:vrio) + vPLASMA +# (pipe:vplasma) -- the dev-rig default (launch: pod-launch --pipe; +# vRIO dist >= 20260716-68e3d1f speaks the pipe). Arcade cockpits with the +# REAL RIO/plasma on COM ports use the non-_pipe confs. +# Tokens (filled by postinstall): @@ROOT@@ = package dir (C:\games\), +# @@REALNIC@@ = this pod's NIC GUID fragment, @@MACADDR@@ = stable derived MAC. +# Red Planet 4.10, networked pod boot (console pushes the mission egg over TCP). +# Loops netnub (loop_rp.bat) so the pod stays connected + picks up missions; +# runs until the supervisor (pod-launch) kills DOSBox. No single-shot in deploy. +[sdl] +output=opengl +priority=highest,highest +[dosbox] +memsize=32 +machine=svga_s3 +[cpu] +core=dynamic +cputype=pentium +cycles=max +[ne2000] +ne2000=true +nicbase=340 +nicirq=10 +macaddr=@@MACADDR@@ +backend=pcap +[ethernet, pcap] +realnic=@@REALNIC@@ +[sblaster] +sbtype=sb16 +sbbase=220 +irq=5 +dma=1 +hdma=5 +[mixer] +rate=44100 +blocksize=1024 +prebuffer=60 +[serial] +serial1=namedpipe pipe:vrio rxpollus:100 rxburst:16 +serial2=namedpipe pipe:vplasma +[autoexec] +mount c "@@ROOT@@\ALPHA_1" +mount d "@@ROOT@@\net-boot" +d: +echo === loading NE2000 packet-driver stack (pcap/bridge, port 340) === +d:\lsl +d:\ne2000 +d:\odipkt +c: +cd \rel410\rp +set VIDEOFORMAT=svga +set BLASTER=A220 I5 D1 H5 P330 T6 +c:\sb16\diagnose /s +set BLASTER=A240 I7 D3 H6 P300 T6 +c:\sb16\diagnose /s +set BLASTER=A220 I5 D1 H5 P330 T6 +set TEMP=c:\ +set HEAPSIZE=15000000 +set L4GAUGE=640x480x16 +call setenv.bat r f s p +echo === entering netnub loop (waits for console missions; supervisor kills to stop) === +call d:\loop_rp.bat diff --git a/emulator/deploy/vwetest_pipe.conf.tmpl b/emulator/deploy/vwetest_pipe.conf.tmpl new file mode 100644 index 0000000..6d209ac --- /dev/null +++ b/emulator/deploy/vwetest_pipe.conf.tmpl @@ -0,0 +1,58 @@ +# DEPLOY TEMPLATE -- rendered to vwetest_pipe.conf by deploy/configure.ps1 at install. +# PIPE TRIM: serial1/2 are NAMED PIPES to vRIO (pipe:vrio) + vPLASMA +# (pipe:vplasma) -- the dev-rig default (launch: pod-launch --pipe; +# vRIO dist >= 20260716-68e3d1f speaks the pipe). Arcade cockpits with the +# REAL RIO/plasma on COM ports use the non-_pipe confs. +# Tokens (filled by postinstall): @@ROOT@@ = package dir (C:\games\), +# @@REALNIC@@ = this pod's NIC GUID fragment, @@MACADDR@@ = stable derived MAC. +# VGL_LABS factory cockpit test suite: the stock C:\VWETEST\TEST.BAT chain +# (DIAGNOSE + AWEUTIL /S on both AWE cards, SETSVGA, VGLTEST\TSTALL.EXE -- +# RIO, plasma, audio, video/Division calibration, Munga-net). Launch: +# pod-launch test. AWEUTIL's WC-timed init needs the parity-safe EMU8000 +# sample-counter readback (vweawe.cpp, 2026-07-16) -- on older dosbox-x.exe +# builds it hangs at AWEUTIL. Drops to a DOS prompt when the suite exits. +[sdl] +output=opengl +priority=highest,highest +[dosbox] +memsize=32 +machine=svga_s3 +[cpu] +core=dynamic +cputype=pentium +cycles=max +[ne2000] +ne2000=true +nicbase=340 +# IRQ 10, NOT 3: COM2 (plasma) owns IRQ 3 in the suite, same as in-game. +nicirq=10 +macaddr=@@MACADDR@@ +backend=pcap +[ethernet, pcap] +realnic=@@REALNIC@@ +[sblaster] +sbtype=sb16 +sbbase=220 +irq=5 +dma=1 +hdma=5 +[mixer] +rate=44100 +blocksize=1024 +prebuffer=60 +[serial] +serial1=namedpipe pipe:vrio rxpollus:100 rxburst:16 +serial2=namedpipe pipe:vplasma +[autoexec] +mount c "@@ROOT@@\ALPHA_1" +mount d "@@ROOT@@\net-boot" +d: +echo === loading NE2000 packet-driver stack (for the Munga-net tests) === +d:\lsl +d:\ne2000 +d:\odipkt +c: +cd \vwetest +echo === VGL_LABS cockpit test suite (stock TEST.BAT) === +call test.bat +echo === test suite exited -- DOS prompt === diff --git a/emulator/net_loop_pipe.conf b/emulator/net_loop_pipe.conf new file mode 100644 index 0000000..815ed9d --- /dev/null +++ b/emulator/net_loop_pipe.conf @@ -0,0 +1,63 @@ +# Networked pod boot, GO.BAT-style loop (persistent: auto-relaunches netnub +# after each mission/idle disconnect so the pod stays connected to the console +# and picks up missions as the operator queues them -- mirrors the real pod's +# GO.BAT). Same 0x340 NIC fix as net_full.conf (see that file's header). +# FULL production parity (sound + plasma) as of 2026-07-08: the SBK re-upload +# per mission is only ~30s (measured), and the instant netnub relaunch is what +# lets the console recover its TCP session between missions WITHOUT an app +# restart (netnub exits without FIN; a fast relaunch answers the console's +# early retransmissions -- sitting at a DOS pause instead wedges the console +# into multi-minute Mac TCP backoff; that is why retail looped). +[sdl] +output=opengl +priority=highest,highest +[dosbox] +memsize=32 +machine=svga_s3 +[cpu] +core=dynamic +cputype=pentium +cycles=max +[ne2000] +ne2000=true +nicbase=340 +# IRQ 10, NOT 3: COM2 (plasma) owns IRQ 3 in-game; see net_full.conf. +nicirq=10 +backend=pcap +[ethernet, pcap] +realnic=DB5521D +[sblaster] +sbtype=sb16 +sbbase=220 +irq=5 +dma=1 +hdma=5 +[mixer] +rate=44100 +blocksize=1024 +prebuffer=60 +[serial] +serial1=namedpipe pipe:vrio rxpollus:100 rxburst:16 +serial2=namedpipe pipe:vplasma +[autoexec] +mount c "C:\VWE\TeslaRel410\ALPHA_1" +mount d "C:\VWE\TeslaRel410\emulator\net-boot" +d: +echo === loading NE2000 packet-driver stack (pcap/bridge, port 340) === +d:\lsl +d:\ne2000 +d:\odipkt +c: +cd \rel410\bt +set VIDEOFORMAT=svga +set BLASTER=A220 I5 D1 H5 P330 T6 +c:\sb16\diagnose /s +set BLASTER=A240 I7 D3 H6 P300 T6 +c:\sb16\diagnose /s +set BLASTER=A220 I5 D1 H5 P330 T6 +set TEMP=c:\ +set HEAPSIZE=15000000 +set L4GAUGE=640x480x16 +call setenv.bat r f s p +echo === entering GO.BAT-style netnub loop (waits for console missions) === +call d:\loop.bat diff --git a/emulator/pod-launch/Options.cs b/emulator/pod-launch/Options.cs index 65e16ef..0b336ca 100644 --- a/emulator/pod-launch/Options.cs +++ b/emulator/pod-launch/Options.cs @@ -26,6 +26,7 @@ namespace VwePod public bool NoBridge; public bool NoSound; + public bool Pipe; public bool Mipmap; public bool NoFocus; public bool DryRun; @@ -76,6 +77,7 @@ namespace VwePod case "--dosbox-xy": ParseWH(Next(a), out o.DosBoxX, out o.DosBoxY); dosboxXySet = true; break; case "--no-bridge": o.NoBridge = true; break; case "--no-sound": o.NoSound = true; break; + case "--pipe": o.Pipe = true; break; case "--mipmap": o.Mipmap = true; break; case "--no-focus": o.NoFocus = true; break; case "--dry-run": o.DryRun = true; break; @@ -103,17 +105,20 @@ namespace VwePod ?? throw new ArgumentException("dosbox-x.exe not found under root; pass --dosbox"); o.DosBoxDir = Path.GetDirectoryName(o.DosBox); - o.Conf = confArg ?? FirstExisting(Path.Combine(o.Root, o.Mode.ConfBase + ".conf")); + // --pipe: the _pipe conf variant (serials as named pipes to + // vRIO/vPLASMA -- the dev-rig trim; real cockpits keep COM ports). + string confBase = o.Mode.ConfBase + (o.Pipe ? "_pipe" : ""); + o.Conf = confArg ?? FirstExisting(Path.Combine(o.Root, confBase + ".conf")); if (o.Conf == null) { // A .tmpl sitting there means the install was extracted but never // configured -- point at the real fix, not at --conf. - bool unrendered = File.Exists(Path.Combine(o.Root, o.Mode.ConfBase + ".conf.tmpl")); + bool unrendered = File.Exists(Path.Combine(o.Root, confBase + ".conf.tmpl")); throw new ArgumentException(unrendered - ? o.Mode.ConfBase + ".conf not rendered yet: this install hasn't been configured.\n" + + ? confBase + ".conf not rendered yet: this install hasn't been configured.\n" + "Run postinstall.bat (elevated) from the extracted zip root, or:\n" + " powershell -File \\deploy\\configure.ps1 -Root " - : o.Mode.ConfBase + ".conf not found under root; pass --conf"); + : confBase + ".conf not found under root; pass --conf"); } o.RendererExe = rendererArg ?? FirstExisting( @@ -182,6 +187,9 @@ namespace VwePod --no-sound skip the ~4-min SoundFont upload. WARNING: no AWE32 = no SOS ticks; bt/rp FREEZE at RIO init on the default FAST-clock confs (only safe with a SLOW-clock conf) + --pipe use the _pipe conf: serial1/2 as named pipes to + vRIO (pipe:vrio) + vPLASMA (pipe:vplasma). Dev-rig + default trim; arcade cockpits keep real COM ports --mipmap VRVIEW_MIPMAP=1 (RP floor shimmer fix; non-authentic) --no-focus skip the window layout/focus pass --dry-run resolve paths + print the launch plan, then exit"); diff --git a/emulator/pod-launch/README.md b/emulator/pod-launch/README.md index 5db499f..a7e40cb 100644 --- a/emulator/pod-launch/README.md +++ b/emulator/pod-launch/README.md @@ -70,6 +70,7 @@ see `../CAMERA-REVIEW-NOTES.md`. Default mode: `bt`. | `--layout cockpit\|explode` | `cockpit` = borderless VDB head windows (default); `explode` = 7-window debug | | `--no-bridge` | pod only, no GL render window | | `--no-focus` | skip the renderer-topmost / DOSBox-focus pass | +| `--pipe` | use the `_pipe` conf: serials as named pipes to vRIO (`pipe:vrio`) + vPLASMA (`pipe:vplasma`), no com0com. **Dev-rig policy (2026-07-17): always `--pipe` on the dev machine** — vRIO dist ≥ `20260716-68e3d1f` speaks the pipe; the plain confs (real COM ports) are for cockpits with the physical RIO/plasma | ### Window placement (per-rig; normally fixed, overridable per-launch)