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
The earlier 68000 based Jerq terminal used inside Bell Labs is fairly well studied. Several emulators already existed, running under UNIX, Plan 9, and even JavaScript. But the later commercial version, the DMD 5620, remained un-emulated.
Luckily, Eric Smith had assembled a lot of information about the 5620 on his website, including ROM sources and engineering documents. This made the task fairly straightforward.
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 mpx
and
mux
on Research UNIX (V8, V9, and V10), so long as the mpx
and mux
code has been compiled for the correct terminal
ROM version.
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.
Challenges
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 dmd_core
with
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

Usage
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
-v
- Print the version and exit
-h host
- Connect to the given hostname (Required)
-p port
- Use the supplied port number (Optional. If not specified, the default is
23
) -n file
- Store the contents of NVRAM in the specified file (Optional)
Binary Release
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.
Version | Date | Link | SHA1 | Size |
---|---|---|---|---|
1.2.0 | 11 January 2019 | dmd5620 | 02b4b626805bb8b88915ecb37fc50496c53ce749 |
1,069,008 bytes |
Source Code
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
against libdmd_core.a
.
The Macintosh DMD 5620 Emulator

Usage
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.
Binary Release
Source Code
The source for the Macintosh DMD 5620 Emulator is available on GitHub:
It is written in Swift using Cocoa, CoreAnimation, and CoreGraphics frameworks.