Named-pipe transport for the DOSBox-X fork's namedpipe backend

Both devices now serve \.\pipe\vrio and \.\pipe\vplasma for the whole
app lifetime alongside the COM rows — the com0com-free path. Framing per
the pinned contract (0x00 len data / 0x01 DTR+RTS lines, one lines frame
on connect, unknown type = log + drop): PipeFraming/PipeFrameDecoder and
VRioPipeService (TX paced at the wire rate, peer DTR edges feed
HostHandshake) in VRio.Core, listener-only VPlasmaPipeService twin in
VPlasma.Core. Busy pipe names retry, so vRIO's built-in glass and the
standalone vPLASMA coexist. README documents the transport and the fork
conf lines.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-12 23:03:02 -05:00
co-authored by Claude Fable 5
parent 0674cf5ba4
commit e507f1740c
8 changed files with 1247 additions and 0 deletions
+27
View File
@@ -103,6 +103,33 @@ analog polling drives the "analog polls served" counter, and every click on
the vRIO panel arrives at RIOJoy as real cockpit input. Two physical PCs with
a null-modem cable work the same way.
## Named pipes for DOSBox-X (no com0com)
When the game runs in the patched DOSBox-X (the fork's `namedpipe` serial
backend), the virtual ports aren't needed at all: both devices also serve a
named pipe for the whole app lifetime — `\\.\pipe\vrio` and
`\\.\pipe\vplasma` — and DOSBox-X connects as the client, retrying in the
background until the pipe exists:
```ini
[serial]
serial1 = namedpipe pipe:vrio rxpollus:100 rxburst:16
serial2 = namedpipe pipe:vplasma
```
A pipe is a plain byte stream, so serial data and modem lines travel as
typed frames (`0x00 len bytes` data, `0x01 bits` DTR/RTS) — the game's DTR
reset pulse keeps its exact position in the byte stream, and a disconnect
reads as all-lines-low (cable unplugged). The contract lives in
`src/VRio.Core/Device/PipeFraming.cs` on this side and `serialnamedpipe.h`
on the fork's. TX is paced exactly like the COM path — with the 9600-baud
wire gone, the pacer is the only thing between the host and an impossible
burst. The COM rows keep working unchanged (RIOJoy, real pods); if a pipe
client connects while a COM host is active the wire log warns, since the
RIO is a single-host device. vRIO's built-in glass and the standalone
vPLASMA share the `vplasma` pipe name — whoever starts second retries until
the name frees up.
## vPLASMA — the companion plasma display
The cockpit's second serial device is the **plasma display**: a 128×32