M4d: real-pod live bring-up WORKS + namedpipe serial (retire realport)
The reconstructed renderer now runs live behind the REAL game: dosbox-x.exe (arena mission) streams its wire over vpxlog's VPX_FIFOSOCK and live_render.py renders it in real time -- 18-20 live frames from the actual running game, coherent perspective-correct arena. The real binary opens the FIFOSOCK listener at device init and accepts our client (verified standalone first). launch_live.ps1: turnkey one-command bring-up (lean pod + reconstructed renderer on the socket, no pentapus/bridge; -Sound / -Port / -PodOnly / -Present). Serial: switch the render-bridge confs from 'directserial realport:COM1/COM2' (com0com retired, COM1/COM2 gone) to the fork's namedpipe backend (serial1=namedpipe pipe:vrio, serial2=namedpipe pipe:vplasma). DOSBox is the pipe client; the vRIO/vPLASMA apps are servers; an unconnected pipe = unplugged cable so the mission still renders. Live-verified: both pipes CONNECTED to running servers (Serial1 -> \.\pipe\vrio, Serial2 -> \.\pipe\vplasma), RIO input flowing, game rendered faster than the COM-less run. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -9,8 +9,12 @@ core=dynamic
|
||||
cputype=pentium
|
||||
cycles=max
|
||||
[serial]
|
||||
serial1=directserial realport:COM1 rxpollus:100 rxburst:16
|
||||
serial2=directserial realport:COM2
|
||||
# VWE fork namedpipe backend (com0com/realport retired -- COM1/COM2 gone):
|
||||
# DOSBox is the pipe CLIENT with retry, the vRIO (input) and vPLASMA (score)
|
||||
# apps are the SERVERS. An unconnected pipe behaves as an unplugged cable, so
|
||||
# the mission still boots and renders without them. See serialnamedpipe.h.
|
||||
serial1=namedpipe pipe:vrio rxpollus:100 rxburst:16
|
||||
serial2=namedpipe pipe:vplasma
|
||||
[autoexec]
|
||||
mount c "C:\VWE\TeslaRel410\ALPHA_1"
|
||||
c:
|
||||
|
||||
@@ -25,8 +25,11 @@ prebuffer=60
|
||||
[serial]
|
||||
# RIO on COM1 with the low-latency options (rxpollus/rxburst) so the board's
|
||||
# few-ms ACK deadline is met; plasma display on COM2 (real pod has both).
|
||||
serial1=directserial realport:COM1 rxpollus:100 rxburst:16
|
||||
serial2=directserial realport:COM2
|
||||
# VWE fork namedpipe backend (com0com/realport retired -- COM1/COM2 gone):
|
||||
# DOSBox = pipe client (retry), vRIO/vPLASMA apps = servers; an unconnected
|
||||
# pipe behaves as an unplugged cable so the mission still runs. serialnamedpipe.h
|
||||
serial1=namedpipe pipe:vrio rxpollus:100 rxburst:16
|
||||
serial2=namedpipe pipe:vplasma
|
||||
[autoexec]
|
||||
mount c "C:\VWE\TeslaRel410\ALPHA_1"
|
||||
c:
|
||||
|
||||
@@ -37,8 +37,11 @@ backend=slirp
|
||||
[serial]
|
||||
# RIO on COM1 with the low-latency options (rxpollus/rxburst) so the board's
|
||||
# few-ms ACK deadline is met; plasma display on COM2 (real pod has both).
|
||||
serial1=directserial realport:COM1 rxpollus:100 rxburst:16
|
||||
serial2=directserial realport:COM2
|
||||
# VWE fork namedpipe backend (com0com/realport retired -- COM1/COM2 gone):
|
||||
# DOSBox = pipe client (retry), vRIO/vPLASMA apps = servers; an unconnected
|
||||
# pipe behaves as an unplugged cable so the mission still runs. serialnamedpipe.h
|
||||
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"
|
||||
|
||||
@@ -25,8 +25,11 @@ prebuffer=60
|
||||
[serial]
|
||||
# RIO on COM1 with the low-latency options (rxpollus/rxburst) so the board's
|
||||
# few-ms ACK deadline is met; plasma display on COM2 (real pod has both).
|
||||
serial1=directserial realport:COM1 rxpollus:100 rxburst:16
|
||||
serial2=directserial realport:COM2
|
||||
# VWE fork namedpipe backend (com0com/realport retired -- COM1/COM2 gone):
|
||||
# DOSBox = pipe client (retry), vRIO/vPLASMA apps = servers; an unconnected
|
||||
# pipe behaves as an unplugged cable so the mission still runs. serialnamedpipe.h
|
||||
serial1=namedpipe pipe:vrio rxpollus:100 rxburst:16
|
||||
serial2=namedpipe pipe:vplasma
|
||||
[autoexec]
|
||||
mount c "C:\VWE\TeslaRel410\ALPHA_1"
|
||||
c:
|
||||
|
||||
@@ -25,8 +25,11 @@ prebuffer=60
|
||||
[serial]
|
||||
# RIO on COM1 with the low-latency options (rxpollus/rxburst) so the board's
|
||||
# few-ms ACK deadline is met; plasma display on COM2 (real pod has both).
|
||||
serial1=directserial realport:COM1 rxpollus:100 rxburst:16
|
||||
serial2=directserial realport:COM2
|
||||
# VWE fork namedpipe backend (com0com/realport retired -- COM1/COM2 gone):
|
||||
# DOSBox = pipe client (retry), vRIO/vPLASMA apps = servers; an unconnected
|
||||
# pipe behaves as an unplugged cable so the mission still runs. serialnamedpipe.h
|
||||
serial1=namedpipe pipe:vrio rxpollus:100 rxburst:16
|
||||
serial2=namedpipe pipe:vplasma
|
||||
[autoexec]
|
||||
mount c "C:\VWE\TeslaRel410\ALPHA_1"
|
||||
c:
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
# Turnkey LIVE bring-up: DOSBox-X pod (real vpxlog C012 device) teeing the wire
|
||||
# on VPX_FIFOSOCK, with the RECONSTRUCTED renderer (live_render.py) riding it --
|
||||
# no pentapus, no bridge, one window. The renderer is the emulated i860 firmware
|
||||
# + GPU raster (emu860c), proven bit-identical to the offline reference.
|
||||
#
|
||||
# .\launch_live.ps1 # gauge_arena.conf, sound off, port 8621
|
||||
# .\launch_live.ps1 -Conf <path> -Port N # pick mission / port
|
||||
# .\launch_live.ps1 -Sound # enable AWE32 (adds ~4min SBK upload)
|
||||
# .\launch_live.ps1 -PodOnly # start the pod only (connect renderer yourself)
|
||||
#
|
||||
# The reconstructed renderer connects as the SINGLE VPX_FIFOSOCK client (so this
|
||||
# does NOT also launch Dave's live_bridge -- they cannot share the socket).
|
||||
param(
|
||||
[string]$Conf = "$PSScriptRoot\gauge_arena.conf",
|
||||
[int]$Port = 8621,
|
||||
[string]$Work = "$env:LOCALAPPDATA\Temp\vwe-live",
|
||||
[switch]$Sound,
|
||||
[switch]$PodOnly,
|
||||
[switch]$Present # live_render window (pygame)
|
||||
)
|
||||
$ErrorActionPreference = 'Stop'
|
||||
New-Item -ItemType Directory -Force $Work | Out-Null
|
||||
|
||||
# stop a previous pod (the fifodump + socket are exclusive)
|
||||
$pidfile = "$Work\pod_pid.txt"
|
||||
if (Test-Path $pidfile) {
|
||||
$old = Get-Process -Id (Get-Content $pidfile) -ErrorAction SilentlyContinue
|
||||
if ($old) { Write-Host "stopping previous pod ($($old.Id))"; $old | Stop-Process -Force }
|
||||
}
|
||||
Remove-Item "$Work\live.fifodump", "$Work\pod_out.txt", "$Work\pod_err.txt" -ErrorAction SilentlyContinue
|
||||
|
||||
# --- the vpxlog C012 device env (host-side) ---
|
||||
$env:VPXLOG = "$Work\vpxresp.txt"
|
||||
$env:VPX_RESPOND = '1' # answer as the transputer would
|
||||
$env:VPX_RENDER = '1'
|
||||
$env:VPX_NOMAIN = '1' # no native Division window
|
||||
$env:VPX_CLEAR = '0,0,0'
|
||||
$env:VPX_FIFODUMP = "$Work\live.fifodump" # archival copy alongside the socket
|
||||
$env:VPX_FIFOSOCK = "$Port" # the live tee our renderer rides
|
||||
Remove-Item Env:VPX_EXPLODE -ErrorAction SilentlyContinue # no pentapus
|
||||
if ($Sound) {
|
||||
$env:VWE_AWE32 = '1'
|
||||
$env:VWE_AWE_ROM = (Resolve-Path "$PSScriptRoot\..\roms\awe32.raw").Path
|
||||
} else {
|
||||
Remove-Item Env:VWE_AWE32, Env:VWE_AWE_ROM -ErrorAction SilentlyContinue
|
||||
}
|
||||
|
||||
$dosbox = (Resolve-Path "$PSScriptRoot\..\src\src\dosbox-x.exe").Path
|
||||
$p = Start-Process $dosbox -ArgumentList '-conf', $Conf `
|
||||
-RedirectStandardError "$Work\pod_err.txt" `
|
||||
-RedirectStandardOutput "$Work\pod_out.txt" -PassThru
|
||||
$p.Id | Set-Content $pidfile
|
||||
Write-Host "pod PID $($p.Id) conf=$([IO.Path]::GetFileName($Conf)) fifosock=:$Port work=$Work"
|
||||
if ($Sound) { Write-Host "sound ON: boot adds ~4 min for the SoundFont upload" }
|
||||
|
||||
if (-not $PodOnly) {
|
||||
$rl = Join-Path (Resolve-Path "$PSScriptRoot\..\firmware-decomp\emu860c").Path 'live_render.py'
|
||||
$args = @("`"$rl`"", "sock:$Port")
|
||||
if ($Present) { $args += '--present' }
|
||||
Write-Host "connecting reconstructed renderer: python $rl sock:$Port"
|
||||
Start-Sleep -Milliseconds 800 # let the device open the listener
|
||||
& python @args
|
||||
}
|
||||
Reference in New Issue
Block a user