Added LED support to VT100 keyboard
This commit is contained in:
parent
b25a9268a1
commit
999828da4e
4 changed files with 640 additions and 409 deletions
|
|
@ -14,10 +14,15 @@ VT100 Terminal
|
|||
This is where we'll be testing another 8080-based machine: the VT100 Terminal. Unlike other VT100 emulations,
|
||||
this will simulate a VT100 by running the terminal's original firmware inside the [PC8080](/modules/pc8080/) CPU emulator.
|
||||
|
||||
{% include machine.html id="vt100" %}
|
||||
|
||||
VT100 Memory Usage
|
||||
------------------
|
||||
|
||||
As described in the [Technical Manual (July 1982)](http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/terminal/vt100/EK-VT100-TM-003_VT100_Technical_Manual_Jul82.pdf),
|
||||
p. 4-15, 8Kb (0x2000) of ROM is located at 0x0000, and 3Kb (0x0C00) of RAM immediately follows it at 0x2000. The ROM at
|
||||
0x0000 contains all the VT100's 8080 code. The VT100 also contains a 2Kb character generator ROM, but it is not
|
||||
mapped into the 8080's address space.
|
||||
0x0000 contains all the VT100's 8080 code. The VT100 also contains a 2Kb character generator ROM, but that ROM is not
|
||||
addressable by the CPU; it is used directly by the Video Processor.
|
||||
|
||||
[vt100romhax](http://vt100romhax.tumblr.com/post/90697428973/the-vt100-memory-map-and-8080-disassembly)
|
||||
(aka [phooky](https://github.com/phooky)) further explains VT100 memory usage:
|
||||
|
|
@ -29,18 +34,47 @@ mapped into the 8080's address space.
|
|||
0x204f 0x22d0 641B Scratch Pad/Setup Area(?)
|
||||
0x22d0 0x2c00 2352B Screen RAM
|
||||
|
||||
VT100 I/O Ports
|
||||
---------------
|
||||
|
||||
From p. 4-17 of the Technical Manual:
|
||||
|
||||
READ OR WRITE
|
||||
00H PUSART data bus
|
||||
01H PUSART command port
|
||||
|
||||
WRITE ONLY (Decoded with I/O WR L)
|
||||
02H Baud rate generator
|
||||
42H Brightness D/A latch
|
||||
62H NVR latch
|
||||
82H Keyboard UART data input
|
||||
A2H Video processor DC012
|
||||
C2H Video processor DC011
|
||||
E2H Graphics port
|
||||
|
||||
READ ONLY (Decoded with I/O RD L)
|
||||
22H Modem buffer
|
||||
42H Flags buffer
|
||||
82H Keyboard UART data output
|
||||
|
||||
The PC8080 ChipSet component deals with the ER1400's Non-volatile RAM (NVR) ports, while the Keyboard component
|
||||
deals with the Keyboard UART ports.
|
||||
|
||||
VT100 Video Processor
|
||||
---------------------
|
||||
|
||||
Normally, the PC8080 Video component allocates its own video buffer, based on the specified buffer address
|
||||
(*bufferAddr*) and other dimensions (eg, *bufferCols* and *bufferRows*), but the VT100 is a little unusual:
|
||||
it has a custom Video Processor that uses DMA to request character data from any region of RAM, one line at a time.
|
||||
It always defaults to address 0x2000 for the first line of character data, but each line terminates with 3 bytes
|
||||
containing line attributes and the address of the next line, so the location of subsequent lines will vary,
|
||||
depending on the following line attributes:
|
||||
containing the attributes and address of the next line, so the location of subsequent lines will vary, depending
|
||||
on the type of line:
|
||||
|
||||
- Single-width characters (80 or 132 columns)
|
||||
- Double-width characters (40 or 66 columns)
|
||||
- Single-wide characters (80 or 132 columns)
|
||||
- Double-wide characters (40 or 66 columns)
|
||||
|
||||
In addition to single-width vs. double-width, line attributes can also specify double-height, along with whether the
|
||||
top or bottom halves of the double-high characters should be displayed. Also, double-high always implies double-wide
|
||||
In addition to single-wide vs. double-wide, line attributes can also specify double-high, along with whether the
|
||||
top or bottom halves of the double-high characters should be displayed, because double-high always implies double-wide
|
||||
(ie, there is no support for double-high, single-wide characters).
|
||||
|
||||
Conssequently, a VT100 [machine XML file](machine.xml) must set the Video component's *bufferRAM* property
|
||||
|
|
@ -50,6 +84,9 @@ enabling support for the VT100's line data format; eg:
|
|||
<ram id="ram" addr="0x2000" size="0x0C00"/>
|
||||
<video id="video" screenWidth="1600" screenHeight="960" bufferAddr="0x2000" bufferRAM="true" bufferFormat="vt100" bufferCols="80" bufferRows="24" ...>
|
||||
|
||||
VT100 Screen and Character Dimensions
|
||||
-------------------------------------
|
||||
|
||||
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, implying a total of 1188 dots displayed per horizontal scan. This means we will have
|
||||
|
|
@ -64,9 +101,7 @@ measure 2.0mm x 3.35mm (in 132-column mode, they measure 1.3mm x 3.35mm), which
|
|||
roughly 160mm x 80mm, implying a screen aspect ratio of 2.0. However, after visually comparing the Technical Manual's SET-UP
|
||||
screenshots to our test screens, 1.67 appears to be closer to reality than 2.0. I'll revisit this issue at a later date.
|
||||
|
||||
{% include machine.html id="vt100" %}
|
||||
|
||||
VT100 Resources
|
||||
---------------
|
||||
Additional VT100 Resources
|
||||
--------------------------
|
||||
|
||||
[VT100 Publications](/pubs/dec/vt100/)
|
||||
|
|
|
|||
Loading…
Reference in a new issue