A DMD 5620 Terminal Emulator
A recent project of mine has been studying and emulating the DMD 5620 terminal, jointly produced by Teletype Corporation, Western Electric, and AT&T in 1984.
The DMD 5620 was the commercial version of the "Blit" terminal, which came out of earlier research done by Rob Pike and Bart Locanthi Jr. at AT&T Bell Labs. It was a portrait display, bitmapped graphics terminal with a keyboard and a mouse as a pointing device.
The rough history goes something like this:
Pike and Locanthi were inspired by the Three Rivers PERQ graphics workstation, and wanted a bitmapped display for UNIX. They designed and built a prototype bitmap display using a Motorola 68000 processor, and affectionately called it the "jerq" in tribute to the PERQ.
When it started to spread inside Bell Labs, management insisted that it be renamed, so the name "Blit" was chosen—a reference to the Bit Blit algorithm.
Eventually, after the Bell System breakup and AT&T's entry into the computer market, AT&T decided to commercialize the technology. They worked with Teletype Corporation and Western Electric, changed the CPU to an in-house WE32100, and sold it as a peripheral for their new 3B line of computers.
Providing an Emulation
To get a clean ROM image, I dumped the eight 27128 EPROMs from my own
DMD 5620. My 5620 has ROM version
8;7;5 (2.0), so that is the
version the emulator also runs. (/As an aside, I would love to find
other ROM versions and allow the emulator to load whichever one it
chooses, but so far I've had little luck tracking down older ROMs/)
I started by writing a WE32100 core and I/O emulation library. From there, I built two front ends that use the same common code, one for Macintosh and one for Linux. A Windows version is planned.
The main goal for the project was compatibility with the AT&T 3B2/400
Emulator, so that informed a lot of my decisions. However,
there is no reason the emulator should not work with
mux on Research UNIX (V8, V9, and V10), so long as the
mux code has been compiled for the correct terminal
The Core CPU and IO Library
The core library is written in the Rust programming language, and provides the guts of the DMD terminal. It implements:
- A WE32100 CPU core
- Interrupt logic
- A 2681 DUART for keyboard and serial I/O
- RAM and ROM
It is completely agnostic about where input characters come from and output characters go to, so it is up to the application that uses the library to provide some form of connection (e.g., using the Telnet protocol or a direct serial link). It likewise does not provide any graphics code—it just gives a view into the video RAM, and the implementing application must do its own drawing.
The core library source code is on GitHub here:
It requires Rust 1.31 or later to compile, but should compile cleanly on any platform that supports Rust and the Rust libc crate.
Because of the nature of the beast, I chose not to embed the library
source code in the native Mac and Linux emulator projects. Instead, I
have checked in pre-compiled static libraries (
ar archives) built
from the Rust source.
There is a downside to tqhis, of course: it requires you to build on
the same platform that the
libdmd_core library was built on. If you
want to build one of the native emulators from source yourself, and
you're not on
x86_64, you will first need to build
Rust, and then overwrite the
libdmd_core.a file in the native
emulator's library directory.
It was a tradeoff I was willing to make.
The Linux DMD 5620 Emulator
This is a command-line GTK+ 3 app that uses Telnet to connect to a host.
dmd5620 [-v] -h host [-p port] [-n nvram_file] [-- <gtk_options> ...]
The valid options are
- Print the version and exit
- Connect to the given hostname (Required)
- Use the supplied port number (Optional. If not specified, the default is
- Store the contents of NVRAM in the specified file (Optional)
If you want to start playing with the emulator without building it, there is a binary release available here that should work for any current Linux distribution that has libgtk-3 installed.
If you have any trouble with it or want a custom build, please email me.
|1.2.0||11 January 2019||dmd5620||
The source for the Linux DMD 5620 Emulator is available on GitHub:
It is written in C using the GTK+ 3.0 libraries and statically linked
The Macintosh DMD 5620 Emulator
The Macintosh version of the DMD 5620 emulator is a standard Mac application bundle. Full instructions for use are included in the built in documentation under the Help menu.
The source for the Macintosh DMD 5620 Emulator is available on GitHub:
It is written in Swift using Cocoa, CoreAnimation, and CoreGraphics frameworks.