diff --git a/.editorconfig b/.editorconfig index bc65a4709..0e59231a7 100644 --- a/.editorconfig +++ b/.editorconfig @@ -12,7 +12,7 @@ indent_style = space indent_size = 8 trim_trailing_whitespace = true -[*.{ASM,INC,MAC,NASM,LST,asm,inc,mac,nasm,lst}] +[*.{ASM,INC,MAC,NASM,LST,asm,inc,mac,nasm,lst,d80}] indent_style = tab indent_size = 8 trim_trailing_whitespace = true diff --git a/apps/pcx86/1981/visicalc/manifest.xml b/apps/pcx86/1981/visicalc/manifest.xml index 120e5cd6d..f1d90cd5f 100644 --- a/apps/pcx86/1981/visicalc/manifest.xml +++ b/apps/pcx86/1981/visicalc/manifest.xml @@ -1,5 +1,5 @@ - + VisiCalc diff --git a/apps/pcx86/1982/esuite/manifest.xml b/apps/pcx86/1982/esuite/manifest.xml index 080479e0e..a47e93dee 100644 --- a/apps/pcx86/1982/esuite/manifest.xml +++ b/apps/pcx86/1982/esuite/manifest.xml @@ -1,5 +1,5 @@ - + Executive Suite diff --git a/apps/pcx86/1985/rogue/manifest.xml b/apps/pcx86/1985/rogue/manifest.xml index 348f6dbe0..b5b24e7be 100644 --- a/apps/pcx86/1985/rogue/manifest.xml +++ b/apps/pcx86/1985/rogue/manifest.xml @@ -1,5 +1,5 @@ - + Rogue diff --git a/apps/pcx86/1987/thinktank/manifest.xml b/apps/pcx86/1987/thinktank/manifest.xml index c65d8c002..912977212 100644 --- a/apps/pcx86/1987/thinktank/manifest.xml +++ b/apps/pcx86/1987/thinktank/manifest.xml @@ -1,5 +1,5 @@ - + ThinkTank 2.41NP diff --git a/apps/pcx86/1988/moria/manifest.xml b/apps/pcx86/1988/moria/manifest.xml index 5fb253c5b..8133692b7 100644 --- a/apps/pcx86/1988/moria/manifest.xml +++ b/apps/pcx86/1988/moria/manifest.xml @@ -1,5 +1,5 @@ - + The Dungeons of Moria 4.872 diff --git a/apps/pcx86/1992/moria/manifest.xml b/apps/pcx86/1992/moria/manifest.xml index feb18cfff..2fe37f85d 100644 --- a/apps/pcx86/1992/moria/manifest.xml +++ b/apps/pcx86/1992/moria/manifest.xml @@ -1,5 +1,5 @@ - + The Dungeons of Moria 5.5 diff --git a/devices/c1p/machine/32kb/machine.xml b/devices/c1p/machine/32kb/machine.xml index c851c4866..e5f920b20 100644 --- a/devices/c1p/machine/32kb/machine.xml +++ b/devices/c1p/machine/32kb/machine.xml @@ -1,5 +1,5 @@ - + OSI Challenger 1P (32Kb) with Disk Support diff --git a/devices/c1p/machine/8kb/all/debugger/machine.xml b/devices/c1p/machine/8kb/all/debugger/machine.xml index 94425e0a9..f2c79e019 100644 --- a/devices/c1p/machine/8kb/all/debugger/machine.xml +++ b/devices/c1p/machine/8kb/all/debugger/machine.xml @@ -1,5 +1,5 @@ - + OSI Challenger 1P (8Kb, Additional Software) diff --git a/devices/c1p/machine/8kb/all/machine.xml b/devices/c1p/machine/8kb/all/machine.xml index 06a5e66db..3bdcc58d5 100644 --- a/devices/c1p/machine/8kb/all/machine.xml +++ b/devices/c1p/machine/8kb/all/machine.xml @@ -1,5 +1,5 @@ - + OSI Challenger 1P (8Kb, Additional Software) diff --git a/devices/c1p/machine/8kb/array/machine.xml b/devices/c1p/machine/8kb/array/machine.xml index d538a6a09..7f2395b38 100644 --- a/devices/c1p/machine/8kb/array/machine.xml +++ b/devices/c1p/machine/8kb/array/machine.xml @@ -1,5 +1,5 @@ - + Challenger 1P (8Kb) "Server Array" diff --git a/devices/c1p/machine/8kb/large/debugger/machine.xml b/devices/c1p/machine/8kb/large/debugger/machine.xml index 9e12d8faa..b2c88f463 100644 --- a/devices/c1p/machine/8kb/large/debugger/machine.xml +++ b/devices/c1p/machine/8kb/large/debugger/machine.xml @@ -1,5 +1,5 @@ - + OSI Challenger 1P (8Kb) with Debugger diff --git a/devices/c1p/machine/8kb/large/machine.xml b/devices/c1p/machine/8kb/large/machine.xml index 5f4247432..68dd4ef0b 100644 --- a/devices/c1p/machine/8kb/large/machine.xml +++ b/devices/c1p/machine/8kb/large/machine.xml @@ -1,5 +1,5 @@ - + OSI Challenger 1P (circa 1978) diff --git a/devices/c1p/machine/8kb/small/machine.xml b/devices/c1p/machine/8kb/small/machine.xml index b3cc82c3d..d86e17d01 100644 --- a/devices/c1p/machine/8kb/small/machine.xml +++ b/devices/c1p/machine/8kb/small/machine.xml @@ -1,5 +1,5 @@ - + diff --git a/devices/pc8080/machine/README.md b/devices/pc8080/machine/README.md index f7e9a1079..1ad417684 100644 --- a/devices/pc8080/machine/README.md +++ b/devices/pc8080/machine/README.md @@ -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/) diff --git a/devices/pc8080/machine/exerciser/machine-8080ex1.xml b/devices/pc8080/machine/exerciser/machine-8080ex1.xml index 6fc4dc959..d0b896bb4 100644 --- a/devices/pc8080/machine/exerciser/machine-8080ex1.xml +++ b/devices/pc8080/machine/exerciser/machine-8080ex1.xml @@ -1,5 +1,5 @@ - + 8080 Exerciser Test Machine diff --git a/devices/pc8080/machine/exerciser/machine-8080pre.xml b/devices/pc8080/machine/exerciser/machine-8080pre.xml index 3cd3a42c0..461bcf835 100644 --- a/devices/pc8080/machine/exerciser/machine-8080pre.xml +++ b/devices/pc8080/machine/exerciser/machine-8080pre.xml @@ -1,5 +1,5 @@ - + 8080 Exerciser Preliminary Test Machine diff --git a/devices/pc8080/machine/exerciser/machine-cputest.xml b/devices/pc8080/machine/exerciser/machine-cputest.xml index 9b29c3a83..7655c917f 100644 --- a/devices/pc8080/machine/exerciser/machine-cputest.xml +++ b/devices/pc8080/machine/exerciser/machine-cputest.xml @@ -1,5 +1,5 @@ - + 8080 CPUTEST Machine diff --git a/devices/pc8080/machine/exerciser/machine-test.xml b/devices/pc8080/machine/exerciser/machine-test.xml index d97f48cf8..9d20544c9 100644 --- a/devices/pc8080/machine/exerciser/machine-test.xml +++ b/devices/pc8080/machine/exerciser/machine-test.xml @@ -1,5 +1,5 @@ - + 8080 "Kelly Smith" Test Machine diff --git a/devices/pc8080/machine/exerciser/machine.xml b/devices/pc8080/machine/exerciser/machine.xml index 6fc4dc959..d0b896bb4 100644 --- a/devices/pc8080/machine/exerciser/machine.xml +++ b/devices/pc8080/machine/exerciser/machine.xml @@ -1,5 +1,5 @@ - + 8080 Exerciser Test Machine diff --git a/devices/pc8080/machine/invaders/machine.xml b/devices/pc8080/machine/invaders/machine.xml index fb606ab44..170279973 100644 --- a/devices/pc8080/machine/invaders/machine.xml +++ b/devices/pc8080/machine/invaders/machine.xml @@ -1,5 +1,5 @@ - + Space Invaders diff --git a/devices/pc8080/machine/vt100/README.md b/devices/pc8080/machine/vt100/README.md new file mode 100644 index 000000000..a2444b765 --- /dev/null +++ b/devices/pc8080/machine/vt100/README.md @@ -0,0 +1,131 @@ +--- +layout: page +title: DEC VT100 Terminal +permalink: /devices/pc8080/machine/vt100/ +machines: + - type: pc8080 + id: vt100 + debugger: true +--- + +DEC VT100 Terminal +------------------ + +This is a work-in-progress emulation of another 8080-based machine: the VT100 Terminal. + +Unlike other VT100 emulators, this is not simply an emulation of VT100 protocols. It is a simulation of the entire +machine, running the orginal [VT100 Firmware](/devices/pc8080/rom/vt100/) 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 that ROM is not +addressable by the CPU; it is used directly by the Video Processor. + +See [DEC VT100 ROMs](/devices/pc8080/rom/vt100/) for more information about the ROMs. + +[vt100romhax](http://vt100romhax.tumblr.com/post/90697428973/the-vt100-memory-map-and-8080-disassembly) +(aka [phooky](https://github.com/phooky) aka Adam Mayer) 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 + +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, the Flags buffer, and the +DC011 and DC012 circuits, while the Keyboard component deals with the Keyboard UART. + +You might wonder why the PC8080 Video component doesn't manage the DC011 and DC012. In fact, the above labels are misleading. +If you look at the Functional Diagram on p. 4-53 of the Technical Manual, you'll see that DC011 and DC012 are really +peripheral components providing inputs to the Video Processor. Moreover, they are not exclusive to the Video Processor. +For example, the LBA7 output of the DC011 is also used to clock the NVR chip. + +In most respects, the VT100 Technical Manual provides a phenomenal amount of detail. +However, documentation for some of the above ports is almost non-existent. It's only thanks to +[third parties](https://github.com/phooky/VT100-Hax/blob/master/Platform%20Notes.md) that we have, for example, the following +information about the Flags buffer (port 0x42): + + Bit Active? Description + 7 H KBD Transmit Buffer Empty + 6 H LBA 7(?) (It's a pin on the backplane connector...) - used to clock NVR - line buffer address + 5 H NVR DATA + 4 L EVEN FIELD (comes out of the video timing generator) + 3 H OPTION PRESENT (terminal output option???) + 2 L GRAPHICS FLAG (is VT52 graphics card present) [I think he meant VT125 -JP] + 1 L ADVANCED VIDEO (is AVO present) + 0 H XMIT FLAG + +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 the attributes and address of the next line, so the location of subsequent lines will vary, depending +on the type of line: + +- Single-wide characters (80 or 132 columns) +- Double-wide characters (40 or 66 columns) + +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 +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: + + +