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:
Setting | Description | Setting (for modern Unix/Linux) |
---|---|---|
Mode | Set it to 3A+ | Set it to 3A+ as there is a Terminfo entry for this mode |
Baud | Baud rate | 19200, yolo |
Parity | The parity of serial transmission. See below for an explanation | Set it to Mark, and configure your host as 8N2 |
Show error | I don’t know | |
FDX | Full Duplex | Y |
Scroll | Not sure | |
Auto LF | Sends a Line feed when pressing enter | N |
Light Screen | Inverts video, makes text black-on-green instead of green-on-black | N, of course |
Cursor=UL | If N, cursor is a block █, if Y, cursor is underscore _ | To taste |
=Blink | Cursor should blink | Y |
Keyclick | Keyswitches are linear, this makes a tiny beep every time you press a key | Y, for old time’s sake |
CRT Save | not sure, looks like it turns of the video display after a while (rudimentary screensaver) | Y, i guess |
50Hz | Line frequency for your country | Y if you live in a 50Hz area |
Language | The language of the attached keyboard | Your choice |
3A mode Ctrl-Z Spc Adv | absolutely no clue | |
Scrn Type | The screen height. But for some reason it’s always 24 regardless of your choice | 24 |
Xon/Xoff | Software flow control | Y, if your host supports it? |
Apparently is the newline character for the printer in the parallel port | Do 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:
Key | Macro |
---|---|
⇦ | ^[OD |
⇨ | ^[OC |
⇧ | ^[OA |
⇩ | ^[OB |
Backspace | ^H |
Home | ^^ |
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:
Adapter | FreeBSD (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 prompt | Works |
1a86:7523 QinHeng Electronics CH340 serial converter | Works, but it prints garbage. Can’t be set to 8N2 with the current driver | Works |
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:
ttyU0 "/usr/libexec/getty std.19200" vp3a+ on secure
ttyU0
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