Simulation of VT100 terminal hardware

Overview

Simulation of the VT100 hardware

Build

About

This is a software simulation of the VT100 hardware. The original firmware ROM is built in and executed by an 8080 emulator. Other components include video display with character generator ROM, settings NVRAM, Intel 8251 USART, and a keyboard matrix scanner. The Advanced Video Option is not included.

To build this, you need to have the SDL2 and SDL2_image libraries installed.

Usage

The command line syntax is vt100 [-f] [-D] [-R test] program/device.

  • -f enters full screen. Toggle with F11.
  • -D enters a PDP-10 style DDT for debugging the firmware.
  • -R test runs a CP/M program; this is only for testing.
  • -C turns capslock into control.
  • program/device is any command to run as a child process providing I/O, or a character device assumed to be a serial port.

F9 is the SET-UP key. See a VT100 User Guide for instructions. Control+F11 exits the simlator.

3D Printed Model

This simulator was inspired by Michael Gardi's 3D printed model, see his instructions and GitHub files.

This is my printing progress so far: VT100 3D print

Issues
  • Render fixes

    Render fixes

    Hi, I fixed some rendering issues. First one is, the "dot stretcher" needs to happen after "widening" for correct rendering of double-width chars.

    Second is #28. I tried the obvious fix, scroll - 1, but then it still wasn't quite right. After staring at vttest's character set screen a bit I figured out the first scanline of a cell was showing up on the next char, so if (scroll == 0) ++c; did the trick.

    I suspect the root of this is some mixed up address lines in the char gen roms? Is something clever being done in the hardware? A cleaner fix would be to re-order the rom the way the code expects, but I wanted to confer with hardware experts before doing so.

    Looking at the raw bits in GIMP confirms the ROM image itself is off. As the upper row is only visible in a few special chars, this would be easy for whoever dumped the ROM to overlook.

    image

    This all looks "more correct" to me but I do not have a real VT100 or any experience with one so this should be qualified against a real one. :)

    My only experience with real text terminals was Wyse terminals at the library. If anyone is working on emulating Wyse terminals, let me know. I haven't even been able to find any ROM dumps for those. :(

    opened by SegHaxx 12
  • Make smooth scroll a little smoother

    Make smooth scroll a little smoother

    Attempt to fix issue #8. When smooth scrolling is enabled (the default), scrolling actually "jumps" every tenth frame. It seems that the firmware does its "shuffling" operation after having set the scroll latch to 0, but after the simulator actually rendered the current lines. That causes the scroll to appear smooth for a while but at the last frame it "jumps back" at its original position for a moment. I think the problem is that the "offset counter" used for smooth scrolling is actually loaded from the scroll latch during vertical reset (this is what I understand from the Tech reference at 4-96), but the simulator directly uses the scroll latch as immediately set by the cpu. I changed the video source to use an offset_counter loaded from the line_scroll to simulate this behavior and the scrolling seems to be much better. Probably this is not the definitive fix, but hope it's a step in the right direction.

    opened by davide-romanini 1
  • Make some things configurable

    Make some things configurable

    Adding command line options to tweak some parameters:

    • Turn off OpenGL and GPU shaders.
    • Specify display update rate.
    • Set the amount of CRT curvature.
    opened by larsbrinkhoff 1
  • User interface updates

    User interface updates

    • Control-F11 to exit the simulation. It's a blue pill to get out of the (keyboard) matrix.
    • Hide mouse cursor in full screen mode.
    • Optionally make capslock control.
    • Meta generates altmode prefix.
    opened by larsbrinkhoff 0
  • Other terminals under consideration

    Other terminals under consideration

    Expand the suite of simulators to cover more hardware. These terminals are under considerations:

    • [x] VT52 "almost done"
    • [ ] VT103, LSI-11 inside.
    • [ ] VT220
    • [ ] Nokia VDU 301
    • [ ] DEC VAXstation 100
    • [ ] Facit 4431
    opened by larsbrinkhoff 1
  • Colors

    Colors

    What colors are a VT100? I removed a panel from a real terminal and tried to match the inside to a Pantone booklet.

    I get something close to Pantone 2323, 7527, and 7534.

    opened by larsbrinkhoff 1
  • Cell rendering bugs

    Cell rendering bugs

    Going to collect together cell rendering bugs here.

    Looking at https://github.com/larsbrinkhoff/terminal-simulator/issues/5#issuecomment-845654823 in particular confirms something, chars should not touch the left side of the inverse cell? This is what it looks like now:

    image

    Also of note I don't see underline anywhere.

    The obvious fix is to bump it to the right one dotclock, which does look nicer:

    image image

    But it messes up boxdrawing:

    image

    What does a real VT100 do? Lars can you get photos of these vttest screens? :) (end of "Test of screen features")

    opened by SegHaxx 2
  • Shift text one line down

    Shift text one line down

    Comparison with a real VT100 shows the text graphics is one scanline lower. I.e. reverse mode has one white scanline above the symbols. The descenders touch the last scanline.

    opened by larsbrinkhoff 0
Owner
Lars Brinkhoff
Emacs, Lisp, Forth, 68000, PDP-10
Lars Brinkhoff
Galaxy simulation that runs directly into your terminal !

ASCII-galaxy-simulation (Work in progress) Current result : Two galaxies colliding Goal : Galaxy with black hole (Should make the galaxies more stable

Célian Riboulet 6 Jun 2, 2022
A cheap,simple,Ongeki controller Use Keyboard Simulation and Mouse Simulation to controller the ongeki game. Using Pro-micro control.

N.A.G.E.K.I. A cheap,simple,Ongeki controller Use Keyboard Simulation and Mouse Simulation to controller the ongeki game. Using Pro-micro control. 中文版

NanaNana 28 Jul 21, 2022
A cheap,simple,Ongeki controller Use Keyboard Simulation and Mouse Simulation to controller the ongeki game. Using Pro-micro control.

N.A.G.E.K.I. PLEASE CHECK Main Project A cheap,simple,Ongeki controller Use Keyboard Simulation and Mouse Simulation to controller the ongeki game. Us

NanaNana 11 Dec 30, 2021
A PIC/FLIP fluid simulation based on the methods found in Robert Bridson's "Fluid Simulation for Computer Graphics"

GridFluidSim3d This program is an implementation of a PIC/FLIP liquid fluid simulation written in C++11 based on methods described in Robert Bridson's

Ryan Guy 714 Jul 26, 2022
A Minimal, Header only Modern c++ library for terminal goodies 💄✨

rang Colors for your Terminal. Windows Demo Example usage #include "rang.hpp" using namespace std; using namespace rang; int main() { cout << "P

Abhinav Gauniyal 1.3k Aug 9, 2022
Graphs the disk IO in a linux terminal.

diskgraph Monitor for disk IO Introduction The diskgraph tool will graph disk IO under linux, in a terminal. Examples: $ ./diskgraph /dev/nvme0n1 $ ./

Bram Stolk 176 Jul 20, 2022
refterm is a reference renderer for monospace terminal displays.

refterm v2 refterm is a reference renderer for monospace terminal displays. It was designed to demonstrate that even in the worst-case scenario - extr

Casey Muratori 1.3k Aug 5, 2022
Displays Lat & Long on the terminal from a public API.

iss-term Displays Latidude & Longitude on the terminal from a public API, by using lib curl Libraries used libcurl to install Before you do anything,

Brad Bettencourt 1 Nov 16, 2021
AX.25 protocol (packet radio and APRS) interface / bridging / switching / terminal related software for Linux

CB3ROB-AX25-TOOLS-LINUX 2021-11-23T00:58:49Z (TUESDAY) cb3rob-kiss-tcp-attach.c links ax0 interface to KISS-TCP TNC, soundmodem (direwolf), or multipl

CB3ROB TACTICAL SYSTEMS 1 Jan 1, 2022
Pi Pico VGA Terminal Emulator For RC2014

picoterm Pi Pico VGA Terminal Emulator For RC2014 PicoTerm is a terminal emulator written specifically for this module. Currently it runs 80 columns b

RC2014 17 Jul 15, 2022
Terminal file explorer - Written in C++

FILE EXPLORER Simple terminal file explorer written in C++ About The Project Build ABOUT THE PROJECT I was thinking about C++ language and I realized

Hakkı Anıl Ragıboğlu 0 Feb 8, 2022
A terminal "screensaver" written in C

lballoons A terminal "screensaver" written in C I made this purely to practice C since i have written almost no programs in it. Inspired by cmatrix. C

Reinhold 5 Dec 23, 2021
A terminal-based, mouse-driven BDF (bitmap) font editor.

bdfedit A terminal-based, mouse-driven BDF font editor. Capable of reading, writing, and editing bitmap font files fully within the terminal, and enti

Andrew 4 Jun 8, 2022
Tuibox - A single-header terminal UI (TUI) library, capable of creating mouse-driven, interactive applications on the command line.

tuibox tuibox ("toybox") is a single-header terminal UI library, capable of creating mouse-driven, interactive applications on the command line. It is

Andrew 11 Aug 1, 2022
BKM-15R emulator written in C for Linux terminal

BKM-15R emulator written in C for Linux terminal Crude implementation of the BKM-15R protocol as described

Martin Hejnfelt 6 Feb 28, 2022
A simple terminal-based solitaire game written in C using Ncurses

Solitaire A simple terminal-based solitaire game written in C using Ncurses Dependencies Requires an installation of ncursesw as unicode is used exten

Elliot Wasem 7 Apr 7, 2022
Library with useful output stream tools like: color and style manipulators, progress bars and terminal graphics.

Library with useful output stream tools like: color and style manipulators, progress bars and terminal graphics Table of contents Introduction Documen

Gianluca Bianco 124 Aug 8, 2022
Pty for Flutter. Provides the ability to create processes with pseudo terminal file descriptors.

flutter_pty This is an experimental package to explore the possibilities of using native code to implement PTY instead of pure FFI and blocking isolat

null 4 Jul 6, 2022
Lightweight Windows/Linux terminal control library for C/C++

TerControl Table of Contents About TerControl Features Installation Contributing License Contact Thanks TerControl is a lightweight opinion based term

Zackery .R. Smith 3 Apr 2, 2022