Categories
Uncategorized

Notes on the ADDS 1010 Text Terminal

I recently found an ADDS 1010 terminal laying around in a warehouse. Actually, 4 of them, with an obscene amount of dust. And only 3 keyboards.

I tried connecting them to Linux to use it as a serial terminal, and while initially it was promising, after a little more tinkering it started acting weird. But let’s not get into that yet.

A little history

ADDS (Applied Digital Data Systems) was an early manufacturer of text terminals. They had a lineup of classic terminals, such as the earlier Regent series and the newer Viewpoint series. The 1010 seems to be in the family of the Viewpoint ones. They were later acquired by NCR, and then by AT&T. Then they changed hands a few time and nowadays (as of 2024) they exist as something called Boundless Terminals.

Setting it up

The main problem I had with this terminal is that its manuals have seem to vanished from the face of the earth. Google hasn’t turned up anything and no one seems to know this model. The only related docs are in the Boundless doc website, and here.

I didn’t see any DIP switches to change settings so I imagined there must be some sort of built-in menu. The manuals for other models indicate that there is a key combination to bring up a menu. The combinations didn’t work for this one, so I started pressing every combo, and found it. It’s Ctrl-F1 to bring up the config menu:

Some options are obvious, such as baud rate, but others not so much. Here’s a table listing my discoveries:

SettingDescriptionSetting (for modern Unix/Linux)
ModeSet it to 3A+Set it to 3A+ as there is a Terminfo entry for this mode
BaudBaud rate19200, yolo
ParityThe parity of serial transmission. See below for an explanationSet it to Mark, and configure your host as 8N2
Show errorI don’t know
FDXFull DuplexY
ScrollNot sure
Auto LFSends a Line feed when pressing enterN
Light ScreenInverts video, makes text black-on-green instead of green-on-blackN, of course
Cursor=ULIf N, cursor is a block █, if Y, cursor is underscore _To taste
=BlinkCursor should blinkY
KeyclickKeyswitches are linear, this makes a tiny beep every time you press a keyY, for old time’s sake
CRT Savenot sure, looks like it turns of the video display after a while (rudimentary screensaver)Y, i guess
50HzLine frequency for your countryY if you live in a 50Hz area
LanguageThe language of the attached keyboardYour choice
3A mode Ctrl-Z Spc Advabsolutely no clue
Scrn TypeThe screen height. But for some reason it’s always 24 regardless of your choice24
Xon/XoffSoftware flow controlY, if your host supports it?
PrintApparently is the newline character for the printer in the parallel portDo you even have a parallel printer??

Macros

This terminal support macros on most non-character keys (you can macro the F keys, the cursor keys, home, and even Esc). You can program the keys to send messages or send command sequences.

To enter macro edit mode, press Ctrl-F2, followed by the key you want to assign. The screen will turn black, and a line at the bottom will appear. There will be a 🡐 left arrow indicating the end of the macro. If the arrow is at the leftmost position, the key is unassigned.

Assume you want to assign a hotkey. I assigned the “reflow” command of GNU screen (Esc-a F) to F6. To do this:

  • Press Ctrl-F2 followed by 6
  • make sure the line is empty, if not, use the arrow key and backspace and delete each character
  • Press Ctrl-[, A, Shift-F. You should see: [Af🡐, with [ in reverse video. The A should be uppercase, and f lowercase (see below for quirks)
  • Press Home to save

Now you can go to GNU Screen and hit F6 to reflow your screen and adjust it to this screen’s size. Neat!

Quirky behaviors

Data format and parity

The terminal does NOT run in a “standard” serial configuration like you’d see 99% of the time, known as 8N1. It doesn’t run on 7E1 either. The options for parity are Odd, Even, Mark, and Space. There is no NONE. Data bits are always 8, and stop bits is always 1.

The closest you can do is set your computer to 8N2, and the terminal to Mark. Mark means “always send 1 as parity bit”, effectively making it compatible with 8N2.

More info here.

Line height

For some reason, no matter what line height you choose, the terminal only shows 24 lines. I tried changing it with stty, with the termcap, etc. But it’s always 24 lines or it’ll scroll.

Uppercase/Lowercase & Macros

The terminal fully supports lower and uppercase characters. It defaults to uppercase, and there is a caps lock key that starts ON (uppercase). Macros don’t memorize the “absolute” case, but are relative to the macro key. So if your macro is “HELLO”, it will print “hello” with caps lock is off. If you want it to print Hello when caps lock is off, you need to make your macro hELLO.

Arrow keys & Backspace

These don’t work by default. They do whatever. Left arrow even does the same as backspace. So as a “hack”, I’m abusing macros to send VT100 sequences.

I’ve programmed the macros as follows:

KeyMacro
^[OD
^[OC
^[OA
^[OB
Backspace^H
Home^^
Note 1: ^ means “Ctrl” here. i.e. Ctrl-[, O, D.
Note 2: ^^ means Ctrl-shift-6)

These settings should be more compatible and not cause problems with the shell or with vi and nano.

Compatibility with serial adapters — READ THIS!

I haven’t tried with “real” 16650 UARTs, but I tried with THREE different serial adapters and here are the results:

AdapterFreeBSD (14.1-RELEASE-p4)Linux (Debian 12, 6.1.0-23-amd64)
Probably fake 067b:2303 Prolific Technology, Inc. PL2303 Serial Port / Mobile Phone Data Cable Crashes right after login promptWorks
1a86:7523 QinHeng Electronics CH340 serial converter Works, but it prints garbage. Can’t be set to 8N2 with the current driverWorks
Probably fake 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
Works great, until it doesn’t (ugen1.3: at usbus1 (disconnected))Works, but same issue as FreeBSD. probably fake.

So basically if you see strange behaviors, try a different USB-Serial adapter

Connecting it to Unix/Linux

I’m using FreeBSD as a server but the concepts should apply to Linux as well.

Choosing a termcap

The termcap file doesn’t include a terminal definition for this machine, but there is a terminfo. If you’re on Linux you only need to use it. If you’re on FreeBSD you need to install terminfo first (pkg install terminfo)

Then we proceed to find the right termcap:

[hjf@servidor ~]$ toe|grep -i adds
screwpoint      ADDS Viewpoint with ^O bug
wyse-vp         Wyse 50 in ADDS Viewpoint emulation mode with "enhance" on
regent          ADDS Regent Series
regent100       ADDS Regent 100
regent40+       ADDS Regent 40+
regent60        ADDS Regent 60
regent25        ADDS Regent 25
regent20        ADDS Regent 20
regent40        ADDS Regent 40
adds980         ADDS Consul 980
vp3a+           ADDS Viewpoint 3a+
vp90            ADDS Viewpoint 90
vp60            ADDS Viewpoint60
viewpoint       ADDS Viewpoint

As you can see, there is a vp3a+ definition, which seems to match our terminal (set to mode 3A+ in menu). So let’s use this. On Linux you just need to set TERM environment to vp3a+. On FreeBSD you need to convert this to termcap first.

FreeBSD terminal setup

[hjf@servidor ~]$ infocmp -C vp3a+
#       Reconstructed via infocmp from file: /usr/local/share/terminfo/v/vp3a+
vp3a+|viewpoint3a+|ADDS Viewpoint 3a+:\
        :am:bw:\
        :co#80:it#8:li#24:\
        :cd=80\EY:ce=\ET:cl=80\E*:cm=\E=%+ %+ :cr=\r:do=\n:ho=^^:\
         :kb=^H:kd=\n:kh=^^:kl=^H:kr=^L:ku=^K:le=^H:mb=\E0B\E):me=\E(:\
        :mh=\E0A\E):mr=\E0P\E):nd=^L:nw=\r\n:\
        :..sa=%?%p1%p2%|%p3%|%p4%|%p5%|%p7%|%t\E0%'@'%?%p1%t%{17}%|%;%?%p2%t%' '%|%;%?%p3%t%{16}%|%;%?%p4%t%{2}%|%;%?%p5%t%{1}%|%;%c%?%p7%tD%;\E)%e\E(%;:\
        :se=\E(:sf=\n:so=\E0Q\E):ta=^I:up=^K:us=\E0`\E):ve=^X:vi=^W:

this will be your termcap definition. I’m not sure what’s the proper way to do it on FreeBSD, but I just cat’ed it to /etc/termcap, and rebuilt the database:

$ sudo -s
# infocmp -C vp3a+ >> /etc/termcap
# cap_mkdb /etc/termcap

Then you need to edit your ttys file. First you need to know what’s the serial port you’re going to use. Usually when using a USB-Serial adapter it’ll be /dev/cuaUn and built-in ports are /dev/cuan (where n is the port number)

Edit /etc/ttys and add:

cuaU0  "/usr/libexec/getty std.19200" vp3a+ on secure

cuaU0 is for my system and probably yours too if you only have one serial-USB adapter. Check that everything is connected, the terminal is on, and run, as root

# kill -HUP 1

We’re not killing PID 1 (init), we’re indicating it to reload the config. As soon as you do this, you should be welcomed with a login prompt. Enter your credentials, and enjoy!

Linux Setup

I use Debian with the “dreaded” systemd. But systemd makes it trivial to run a terminal server:

systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service

where ttyS0 is your serial port. It may be ttyUSB0 if you’re using a USB adapter. You should look for more info on how to edit the service file to change the TERM parameter (see here maybe). There is a $TERM thing in the file, that you need to hardcode to vp3a+ for this serial line. You can also export TERM=vp3a+ every time you log in, but that’s annoying. Do not set term in .bashrc! you’ll break your SSH logins.

Final notes

I usually have irssi running inside screen. So I just screen -x after i log in, and Ctrl-a, F (or my macro F6) to reflow my screen. To switch chat windows just press Esc, number (Press Esc, release esc, then a number key). The terminal doesn’t have PgUp and PgDn keys, so you have to use Esc, n and Esc, p