diff --git a/devices/pc8080/machine/vt100/README.md b/devices/pc8080/machine/vt100/README.md index d0fd8bb8e..8c6e3c546 100644 --- a/devices/pc8080/machine/vt100/README.md +++ b/devices/pc8080/machine/vt100/README.md @@ -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: