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:
@@ -355,6 +355,31 @@ public class VPlasmaDeviceTests
|
||||
Assert.Equal(0, Pixel(device, 64, 16));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FirmwareDemo_ReplaysAllScreensAndDrawsText()
|
||||
{
|
||||
Assert.Equal(10, PlasmaFirmwareDemo.Count);
|
||||
var device = new VPlasmaDevice();
|
||||
foreach (byte[] screen in PlasmaFirmwareDemo.Screens)
|
||||
{
|
||||
Assert.NotEmpty(screen);
|
||||
device.OnReceived(screen, screen.Length);
|
||||
}
|
||||
// The 10-screen demo puts plenty of real text on the glass.
|
||||
Assert.True(device.TextCharsDrawn > 0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PageSelect_ConsumesItsOperand()
|
||||
{
|
||||
var device = new VPlasmaDevice();
|
||||
// ESC I 2 (draw page) must swallow the '2'; then 'H' is the first glyph.
|
||||
Feed(device, Esc, (byte)'I', 2, Esc, (byte)'i', 3, (byte)'H');
|
||||
Assert.Equal(1, device.TextCharsDrawn);
|
||||
Assert.Equal(VPlasmaDevice.PixelLit, Pixel(device, 0, 0));
|
||||
Assert.Equal(6, device.CursorX); // advanced exactly one cell (no stray chars)
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Reset_RestoresPowerOnState()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user