More VT100 groundwork
This commit is contained in:
parent
5b376917e3
commit
c8f5357689
11 changed files with 162 additions and 14 deletions
|
|
@ -9,5 +9,6 @@ PC8080 Machine Configurations
|
|||
|
||||
The following 8080-based machines are currently available:
|
||||
|
||||
* [8080 Exerciser](exerciser/)
|
||||
* [Space Invaders (1978)](invaders/)
|
||||
* [8080 Exerciser Test Machine](exerciser/)
|
||||
* [DEC VT100 Terminal](vt100/)
|
||||
|
|
|
|||
59
devices/pc8080/machine/vt100/README.md
Normal file
59
devices/pc8080/machine/vt100/README.md
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
---
|
||||
layout: page
|
||||
title: VT100 Terminal
|
||||
permalink: /devices/pc8080/machine/vt100/
|
||||
machines:
|
||||
- type: pc8080
|
||||
id: vt100
|
||||
debugger: true
|
||||
---
|
||||
|
||||
VT100 Terminal
|
||||
--------------
|
||||
|
||||
This is where we'll be testing another 8080-based machine: a 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.
|
||||
|
||||
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.
|
||||
|
||||
[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:
|
||||
|
||||
Start End Size Description
|
||||
0x0000 0x1fff 8K Basic ROM
|
||||
0x2000 0x2012 18B Blank lines for refresh (6 x 3B)
|
||||
0x2012 0x204f 61B Stack area (grows down from 0x204e)
|
||||
0x204f 0x22d0 641B Scratch Pad/Setup Area(?)
|
||||
0x22d0 0x2c00 2352B Screen RAM
|
||||
|
||||
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:
|
||||
|
||||
* 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" ...>
|
||||
|
||||
{% include machine.html id="vt100" %}
|
||||
|
||||
VT100 Resources
|
||||
---------------
|
||||
|
||||
[VT100 Publications](/pubs/dec/vt100/)
|
||||
20
devices/pc8080/machine/vt100/machine.xml
Normal file
20
devices/pc8080/machine/vt100/machine.xml
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<?xml-stylesheet type="text/xsl" href="/versions/pc8080/1.23.2/machine.xsl"?>
|
||||
<machine id="vt100" class="pc8080" border="1" pos="center" background="#FAEBD7">
|
||||
<name pos="center">VT100 Terminal</name>
|
||||
<computer id="computer" busWidth="16"/>
|
||||
<cpu id="cpu8080" model="8080" cycles="2000000" autoStart="true"/>
|
||||
<rom id="rom" addr="0x0000" size="0x2000" file="/devices/pc8080/rom/vt100/VT100.json"/>
|
||||
<ram id="ram" addr="0x2000" size="0x02D0"/>
|
||||
<video id="video" screenWidth="1600" screenHeight="480" smoothing="false" bufferAddr="0x22D0" bufferRAM="true" bufferFormat="vt100" width="40%" pos="left" padding="8px">
|
||||
<menu>
|
||||
<title>VT100 Screen</title>
|
||||
<control type="container" pos="right">
|
||||
<control type="button" binding="fullScreen" padleft="8px;line-height:1em">Full Screen</control>
|
||||
</control>
|
||||
</menu>
|
||||
</video>
|
||||
<keyboard id="keyboard"/>
|
||||
<panel ref="/devices/pc8080/panel/left.xml"/>
|
||||
<debugger id="debugger" commands="s 8086"/>
|
||||
</machine>
|
||||
|
|
@ -17,5 +17,5 @@ for each ROM in the machine; eg:
|
|||
The project currently contains the following 8080-based ROMs:
|
||||
|
||||
* [8080 Exerciser Tests](exerciser/)
|
||||
* [DEC VT100](vt100/)
|
||||
* [Space Invaders (1978)](invaders/)
|
||||
* [DEC VT100 Terminal](vt100/)
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ The above PCB chip locations correspond to the following [DEC ROM](/devices/roms
|
|||
* E45: [23-033E2.bin](https://web.archive.org/web/20140723115846/http://www.dunnington.u-net.com/public/DECROMs/23-033E2.bin)
|
||||
* E40: [23-034E2.bin](https://web.archive.org/web/20140723115846/http://www.dunnington.u-net.com/public/DECROMs/23-034E2.bin)
|
||||
|
||||
And sure enough, concatenating those DEC ROM four dumps produces a perfect match for Trammell Hudson's
|
||||
And sure enough, concatenating those four DEC ROM dumps produces a perfect match for Trammell Hudson's
|
||||
[VT100.bin](http://trmm.net/images/2/20/VT100.bin).
|
||||
|
||||
The VT100 also used one 2Kb character generator ROM, which is stored in [23-018E2.json](23-018E2.json).
|
||||
|
|
|
|||
Loading…
Reference in a new issue