More VT100 video support (untested)

This commit is contained in:
Jeff Parsons 2016-07-29 18:03:00 -07:00 committed by Jeff Parsons
commit 21fc2e0639
9 changed files with 734 additions and 444 deletions

View file

@ -49,13 +49,17 @@ enabling support for the VT100's line data format; eg:
<ram id="ram" addr="0x2000" size="0x0C00"/>
<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.
Ordinarily, 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. However, in 132-column mode, it
uses a 9x10 character cell instead, and assuming no AVO expansion card is present, there is only enough screen RAM available
for 14 rows of characters; this implies a total of 1188 dots displayed per horizontal scan, and a total of only 140 horizontal
scans. This means we will have to dynamically reallocate the buffer display context whenever the horizontal dimensions change
(ie, from 800 to 1188, or from 1188 back to 800).
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.
aspect ratio of 1.67, which is less than the (apparent) 2.0 aspect ratio of a physical VT100 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

View file

@ -6,7 +6,8 @@
<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="800" smoothing="false" fontROM="/devices/pc8080/rom/vt100/23-018E2.json"
<video id="video" screenWidth="1600" screenHeight="800" smoothing="false"
fontROM="/devices/pc8080/rom/vt100/23-018E2.json" fontColor="white" cellWidth="10" cellHeight="10"
bufferAddr="0x2000" bufferRAM="true" bufferFormat="vt100" bufferCols="80" bufferRows="24" pos="left" padding="8px">
<menu>
<title>VT100 Screen</title>