![]() |
vt52-fpga
1.0.0 Initial
vt52-fpga is a serial terminal implemented on a FPGA
|
vt52-fpga is a serial terminal implemented on a FPGA. It's more or less compatible with the DEC VT52 (see below for missing functionality). It uses a regular PS/2 keyboard and VGA monitor connected to a TinyFPGA BX Board. The serial connection is over the integrated usb port on the board.
It is capable enough to be used as a serial terminal for a unix-like system, running not only a regular shell but also full screen programs like emacs or vim (screenshots in the img folder).
I wanted to do a longer Verilog project to practice with the language and test out some ideas but I also wanted to create something useful. Once I arrived at the idea of a video terminal I settled on the VT52 as a simple enough candidate, with good documentation, a simple command set & decent support on current systems. I wrote it in pure Verilog without a processor so I could practice writing different kind of modules, memories & FSMs instead of forth/assembly/c.
100% Verilog with no processor to speak of. Currently using about 2000 LUTS (about half of that for USB) and 18 RAM blocks (9KB). There are several submodules that interact to provide the functionality:
I'll try to add some schematics later, but basically I'm driving everything with 3.3V directly from the FPGA. All keyboards and monitors I tested don't seem to mind. So the PS/2 connector has 3.3V, GND and two pull-up resistors from 3.3V to the CLK and DATA pins. The VGA has two pins for hsync & vsync, one for ground & one pin with a series resistor for the green channel.
The following features of the DEC VT52 are not implemented (most of these probably never will)
Right now in addition to the VT52 stuff it supports the latin-1 character set and maps the alt key to an esc- prefix (useful for emacs, mostly).
I'm considering implementing the Atari ST extensions (16 colors foreground/background, inverse video, auto-wrap, saving/restoring/hiding cursor, extra clear text commands)
I want to thank to Luke Valenti for creating the Tinyfpga boards (and even sending me a couple free of charge) and for the idea of implementing the usb-serial bridge on the fpga fabric. Also to Lawrie Griffiths, David Williams and others for adapting that code for general use. I also want to thank Dimitar Toshkov Zhekov for the amazing Terminus font, which looks a lot better than the old IBM fonts I was using on the first prototypes.
vt52-fpga is free software licensed under the GPLv3 or later. See LICENSE for details. The included terminus font, is an open font under the SIL Open Font License, Version 1.1. See mem/ofl.txt for details. USB-serial interface is implemented with the tinyfpga_bx_usbserial module (included in the repo as a git submodule). tinyfpga_bx_usbserial is licensed under the Apache License 2.0, see tinyfpga_bx_usbserial/LICENSE for details.