- Remove the COM12 auto-open and its retry timer; the serial link is now
opened manually via an "Open/Close COM12" button in the config panel.
The named-pipe transport still serves automatically. Baud straps reopen
only if already open.
- Decode the three previously-unknown JP1 config jumpers from the firmware
(boot config routine at $9190) and relabel them:
* Jumper 3 (PA3): sets flag $B7.2, driving hardware output PA5 to a
fixed level (a board config line).
* Jumper 4 (PD5): display orientation — installed = horizontal 128x32,
removed = vertical 32x128 (the demo's "HORIZONTAL OR VERTICAL").
* Jumper 5 (PD4): power-on display/pixel test pattern ($B888).
PlasmaNew/README.md's JP1 table now carries the full firmware-backed decode.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
The standalone app gets its right-side config panel back, now built around
the real PD01D221's JP1 jumper block (from PlasmaNew/FIRMWARE.md): seven
toggles labelled with each strap's function and HC11 pin. The two baud
straps drive the open baud (4800/9600/19.2K/38.4K; jumper 2 = 9600 default,
the game's rate) via a new VPlasmaSerialService.Baud property; jumper 6
runs a demonstration loop, mirroring the firmware's jumper-6 demo. Plus the
Display controls (self test / clear), live counters, and the wire log.
The glass, auto-open COM12 + named-pipe transport, double-click self-test,
and right-click reset all stay. Only VPlasma.App is touched (plus the
additive Baud property) — the vPLASMA glass embedded in vRIO, which shares
PlasmaCanvas, is left exactly as it was.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Replaces the guessed font/cursor model with what the firmware dump proved:
- The 8 real Babcock ROM fonts, extracted from tms27pc512.BIN into
PlasmaFonts.cs (6x8, 6x10, 7x10, 12x16, 12x20). Drops the public-domain
5x7 stand-in and PlasmaFont.cs.
- Pixel-addressed cursor with the real positioning commands: ESC Q (row Y,
0-31) and ESC R (column X, 0-127), matching the firmware's range checks.
Cursor motion (BS/HT/LF/VT/CR) now moves by font pixels, not cells.
- ESC K selects fonts 0-7 (out-of-range ignored, per firmware); ESC H
attributes are the low 4 bits (half/underline/reverse/flash).
Deferred (documented in FIRMWARE.md): the 10 double-buffered pages
(ESC I/i) and vector-graphics primitives (ESC A-F); vPLASMA keeps a
single-page model for now.
Verified: 24 unit tests pass; the three self-test pages render the real
glyphs (big font 4 banner, full charset in font 0, graphics). Next: begin
the modern-parts hardware replica, with this as the reference firmware.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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>
The plasma glass now lives in vRIO's encoder strip: PlasmaCanvas grew a
dot-pitch parameter (default keeps the standalone glass pixel-identical)
and is compile-linked into VRio.App at pitch 3, parked at the strip's
left slot. The axis gauges move to the grid's right edge, the strip is
as tall as the glass, and the status text sits between them with the
axis readout split onto two lines. The button grid also compacts: rows
shift up past the layout's empty row 0 and the spare bottom row is
trimmed (the shared CockpitLayout is untouched, so coordinates still
match RIOJoy's map).
Control strip: the COM row labels are now the device names -- vRIO and
vPLASMA -- coloured by port status (green open, gray closed), replacing
the port-status line. The plasma row auto-opens COM12 at startup like
the RIO row does COM11; one Rescan refreshes both pickers. Plasma log
lines share the wire log under a vPLASMA: prefix, and the standalone
gestures carry over (double-click self-test, right-click reset).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The window is now just the display: 640x160 dot field (5 px pitch,
4 px bezel) plus the title bar, which carries the port status. COM12 —
the device end of the plasma's null-modem pair — is hardwired and
opened at startup, with a retry timer that keeps trying while the port
is missing or busy and reopens it if it dies. The control strip, port
picker, counters, and wire log are gone; the glass keeps two gestures:
double-click cycles the self-test pages, right-click resets the
display to its power-on state.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The cockpit's second serial device joins vRIO: the 128x32 dot-matrix
plasma on COM2 (9600 8N1) that the game draws mission text and status
graphics on. VPlasma.App opens the device end of a COM port, decodes
the display's command stream, and renders the matrix in plasma orange.
The command set is recovered from two Tesla 4.10 artifacts: the game's
driver (L4PLASMA.CPP — ESC P packed-bitmap row writes, ESC G 0 cursor
hide at boot) and the factory test tool PLASMA.EXE, whose data segment
pairs each command literal with its printf description (BS/HT/LF/VT/CR
motion, ESC @ clear, ESC L home, ESC G cursor, ESC K fonts, ESC H
attributes: intensity/underline/reverse/flash). Text renders through
the classic public-domain 5x7 set standing in for the lost ROM glyphs;
fonts 0-3 give 21x4 cells, fonts 4-7 the doubled 10x2. A Self test
cycles banner/charset/graphics pages through the same parser the wire
feeds, and the wire log shows every decoded command.
Verified end-to-end over the second com0com pair (host writing COM2,
vPLASMA listening on COM12). The verify skill gains the cross-process
combo-box lesson: string-carrying CB_* messages hang across processes,
so select ports by locally computed index via CB_SETCURSEL.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>