ADM3A – ancient dumb terminal

A very long time ago, on take your child to work day, I went to my mom’s office. I got some stickers for something, then I traded them for this dumb terminal (they were award points for something at the office). This is an ADM3A, from 1977. It is all discreet logic chips, no major integrated circuits. This terminal is where the HJKL navigation keys in vi come from (vi was written on one and those keys have arrows on them on its keyboard). It’s also where the ~ = home directory in unix comes from as well, the ~ key is also the home key.Image

About 8 years ago, I thought it’d be a fun challenge to get this thing on the internet. I found an old laptop with a serial port, put linux on it, and configured it to use the serial port as a console. I ended up getting it online, and on IRC and Google Talk.

I found this terminal again recently, and wanted to get it back online so I could snag a pic of it on retro.hackaday.com. Unfortunately, it didn’t seem to work anymore. I took a look at it, and the part that failed turned out to be the big clunking mechanical power switch. It had gotten dirty and corroded. I took the switch apart and cleaned it out, and now it works again. Amazing for almost 37 year old electronics.

This time, however, I didn’t have a laptop with a serial port handy, so I made a MAX232 serial adapter for a raspberry pi and hooked the pi up to the terminal. The serial adapter is just a typical MAX232 circuit, I pulled it right out of the datasheet, page 7. You can get these things on ebay for a couple bucks, but I had a couple MAX232 lying around and I figured I could put a header for the pi right on the board, instead of having to make an adapter cable. I only bothered to hook up the tx and rx lines, I skipped DTR and CTR. I used a standard serial port header like motherboards used to have for the serial connection, so I could easily swap between 25 pin serial (which the adm3a has) and 9 pin serial. I had a bunch of the serial port header cables on hand as well.

Here are a couple pictures of the adapter:

ImageImage

On the software side, the pi is running Wheezy. This serial terminal runs at a max speed of 19200 baud, but I went with 9600 baud (because it’s a common default). The pi had a lot of config for using a serial terminal at 115200 baud. I got most of my information from this article describing how to use the pi as a serial terminal and what to disable to prevent it being a serial host.

In /boot/cmdline.txt, I made sure console and kgdboc (kernel debugging) were set to the serial port on the header and to the right speed

console=ttyAMA0,9600 kgdboc=ttyAMA0,9600

In /etc/inittab, I changed the getty line for the serial port to the right speed, and defined the term as adm3a, since the adm3a predates the vt100, isn’t fully compatible, and has different control characters (e.g. the arrow keys on hjkl. the only way to delete characters is ^h).

#Spawn a getty on Raspberry Pi serial line
T0:23:respawn:/sbin/getty -L ttyAMA0 9600 adm3a

I added a TERMINFO location definition to my .bashrc

# set terminfo location to location with adm3a
TERMINFO=/usr/share/terminfo

I was a little surprised to find that Wheezy still includes terminfo definitions for terminals this old (and older). The terminfo directory is 6.5MB.

After these changes and a reboot, the pi printed its console correctly to the terminal, with lots of beeping too.
Some programs don’t run very well on the terminal, anything that tries to do color just has all of its control characters displayed on the screen. lynx was unusable without the correct terminal definition.

2013-10-20-05-39-26

  1. In case you don’t know, continue to take care of her; that particular terminal is fairly collectible among the vintage computing crowd (I’d love one for my Altair). This was great seeing it running – and on modern hardware to boot!

  2. A working terminfo-entry is:

    # Reconstructed via infocmp from file: /usr/share/terminfo/a/adm3a
    adm3a|lsi adm3a,
    am,
    cols#80, lines#24,
    bel=^G, clear=32$, cr=^M, cub1=^H, cud1=^J, cuf1=^L,
    cup=\E=%p1%’ ‘%+%c%p2%’ ‘%+%c, cuu1=^K, home=^^, ind=^J,
    kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, rs2=^N,

    (use the tic(1) command to compile this into a working entry).

    The model on your photo is not a 1977 one; I would estimate it to be from the early eighties. I started my career on an ADM1a around 1975.
    Those terminals had more edges (and were upper-case only; that’s why the Linux terminaldriver still supports ‘stty lcase’ (although the current implementation is buggy).
    Later I bought hundreds of these ADM3a’s for my employer; the light blue ones were the early ones; soon they became two-tone brown.
    I still have a handful of them..

    hjt

    p.s. the manufacturer (Lear Siegler Corp) shipped them in big boxes displaying where the abbreviation comes from: American Dream Machine.

    • American Dream Machine, awesome!

      I cracked open the case again and took a look at the dates on the chips and the tube. The tube is from 76, and the 2nd newest chip I found was 7642, which is why I assumed 1977. The newest chip is 9311; I assume this is a replacement (done well), I’m thinking 93 is way newer than this thing could be. It’s the 2nd largest chip on the board.

  3. You blog system mutilated the proper format of the terminfo-entry.
    Please mail me for a proper copy.

    hjt

  4. The original machine is older than me, awesome project.

  5. Vintage terminals are so good looking. The ADM 3A is a particularly nice piece of equipment. Back in the day I had a Zenith Z-19. It was a sad day when it blew itself up.

Leave a comment