vPLASMA (standalone): vRIO-style picker, real firmware demo, PD5 fix

- Connection: drop the hardwired COM12; replicate vRIO's endpoint picker —
  a combo of pipe:vplasma (the DOSBox-X namedpipe backend) + the COM ports,
  with Rescan and Open/Close. Nothing opens automatically; baud straps drive
  a COM open.
- Demo (jumper 6) now runs the REAL firmware demonstration, not the vPLASMA
  self-test. The 10 demo screens are extracted verbatim from the ROM demo
  pointer table ($8000) into PlasmaFirmwareDemo.cs and looped through the
  parser. Added ESC I / ESC i (draw/display page select) as 1-operand
  commands — consumed but not acted on in the single-page model — so the
  demo's page commands don't desync the stream.
- Orientation (jumper 4 / PD5) polarity fixed: unstrapped = horizontal
  128x32 (the normal cockpit setup, now the default), installed = vertical.

Verified: 29 unit tests pass (2 new: demo replay, page-select operand); the
real demo screens render with the correct text/positioning/fonts, and the
picker lists pipe:vplasma + COM ports with no auto-open.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Cyd
2026-07-16 19:42:55 -05:00
co-authored by Claude Opus 4.8
parent 95b701ae0a
commit 79eb53253e
6 changed files with 195 additions and 72 deletions
@@ -63,6 +63,12 @@ public static class PlasmaProtocol
// column (X, 0-127) — the exact range checks the firmware enforces.
public const byte CmdSetRow = (byte)'Q';
public const byte CmdSetColumn = (byte)'R';
// Page select (the firmware's 10 double-buffered screens): ESC I picks the
// draw page, ESC i the displayed page. vPLASMA models a single page, so
// these are consumed (1 operand each) but not acted on — enough to replay
// the built-in demo, which uses them heavily.
public const byte CmdDrawPage = (byte)'I';
public const byte CmdDisplayPage = (byte)'i';
/// <summary>Operand meaning "restore the default" for ESC K / ESC H.</summary>
public const byte OperandDefault = 0xFF;