More VT100 test machine tweaks

This commit is contained in:
Jeff Parsons 2016-07-27 15:03:50 -07:00 committed by Jeff Parsons
commit bd05c06766
3 changed files with 23 additions and 16 deletions

View file

@ -34,22 +34,30 @@ It always defaults to address 0x2000 for the first line of character data, but e
containing line attributes and the address of the next line, so the location of subsequent lines will vary,
depending on the following line attributes:
* Single-width characters (80 or 132 columns)
* Double-width characters (40 or 66 columns)
- Single-width characters (80 or 132 columns)
- Double-width characters (40 or 66 columns)
In addition to single vs. double width, line attributes can also specify double height (along with whether the
top half or bottom half of the character should be displayed).
The VT100 screen displays 800 dots per horizontal scan, and a total of 240 horizontal scans,
so for optimum scaling, we define our own screen using multiples of those dimensions (currently 1600x480),
and by default, it uses a 10x10 character cell, so the default display dimensions are 80 columns by 24 rows.
In light of the above, the [machine XML file](machine.xml) must set the Video component's *bufferRAM* property
to "true", indicating that existing RAM should be used, and a new property, *bufferFormat* must be set to "vt100",
enabling support for the VT100's line data format; eg:
<ram id="ram" addr="0x2000" size="0x0C00"/>
<video id="video" screenWidth="1600" screenHeight="480" bufferAddr="0x2000" bufferRAM="true" bufferFormat="vt100" bufferCols="80" bufferRows="24" ...>
<video id="video" screenWidth="1600" screenHeight="800" bufferAddr="0x2000" bufferRAM="true" bufferFormat="vt100" bufferCols="80" bufferRows="24" ...>
The VT100 screen displays 800 dots per horizontal scan, and a total of 240 horizontal scans, and by default,
it uses a 10x10 character cell, for a total of 80 columns and 24 rows of characters.
For optimum scaling, I would normally define the virtual screen size using multiples of the VT100's "dot" dimensions;
eg, 1600x960 (a horizontal multiplier of 2 and a vertical multiplier of 4). However, that would give us a virtual screen
aspect ratio of 1.67, which is less than the (apparent) 2.0 aspect ratio of a physical screen, so I've changed the test
machine's screen dimensions to 1600x800.
Regarding physical dimensions, a VT100 screen measures 12 inches diagonally, and in 80-column mode, characters measure
2.0mm x 3.35mm (in 132-column mode, they measure 1.3mm x 3.35mm). This means that the text area of the screen is roughly
160mm x 80mm, implying a screen aspect ratio of 2.0.
{% include machine.html id="vt100" %}

View file

@ -6,7 +6,7 @@
<cpu id="cpu8080" model="8080" cycles="2000000"/>
<rom id="rom" addr="0x0000" size="0x2000" file="/devices/pc8080/rom/vt100/VT100.json"/>
<ram id="ram" addr="0x2000" size="0x0C00"/>
<video id="video" screenWidth="1600" screenHeight="480" smoothing="false" bufferAddr="0x2000" bufferRAM="true" bufferFormat="vt100" bufferCols="80" bufferRows="24" width="40%" pos="left" padding="8px">
<video id="video" screenWidth="1600" screenHeight="800" smoothing="false" bufferAddr="0x2000" bufferRAM="true" bufferFormat="vt100" bufferCols="80" bufferRows="24" pos="left" padding="8px">
<menu>
<title>VT100 Screen</title>
<control type="container" pos="right">
@ -15,6 +15,6 @@
</menu>
</video>
<keyboard id="keyboard"/>
<panel ref="/devices/pc8080/panel/left.xml"/>
<panel ref="/devices/pc8080/panel/wide.xml"/>
<debugger id="debugger" commands="s 8086"/>
</machine>

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<panel id="panel" width="100%" padding="8px">
<name>Control Panel</name>
<control type="container" class="pcjs-textarea" width="100%" padright="8px">
<control type="container" class="pcjs-textarea" width="99%" padright="8px">
<control type="textarea" binding="print" width="100%" height="252px" pos="relative" style="resize:vertical;"/>
</control>
<control type="container" class="pcjs-registers" width="100%" padleft="8px">
@ -22,14 +22,13 @@
<control type="description" padleft="16px" padbottom="8px">Speed:</control>
<control type="description" binding="speed" padleft="4px" padbottom="8px">Stopped</control>
</control>
<control type="container" padleft="8px" padbottom="8px">
<control type="button" binding="run">Run</control>
<control type="button" binding="step">Step</control>
<control type="button" binding="reset">Reset</control>
<control type="button" binding="setSpeed">Fast</control>
<control pos=""/>
<control type="container" padbottom="8px">
<control type="text" binding="debugInput" width="100px"/>
<control type="button" binding="debugEnter">Enter</control>
<control type="button" binding="clear">Clear</control>
<control type="button" binding="run" padleft="32px">Run</control>
<control type="button" binding="step">Step</control>
<control type="button" binding="reset">Reset</control>
<control type="button" binding="setSpeed">Fast</control>
</control>
</panel>