Over a lazy Sunday afternoon, while the family was napping, I put into place an idea that formed in my head mere hours earlier: turn my Commodore VIC-20 into a simple terminal for a *nix box.
I was musing on ways to connect my VIC to other systems, and had recently been playing with Chris Baird’s great little hack of transferring files via serial port from a PC using a simple, 25-line BASIC program. That got me wondering what other ways you could utilize the serial port.
I know that there have been bluetooth VIC-20s, but I didn’t recall to mind anyone just creating a simple terminal. So I decided to give it a whirl.
First, the trusty VIC. I’ve had this VIC for as long as I can remember; I believe my dad bought it new in the mid-80s. We had several machines at home, including an Apple IIe and an IBM XT clone, but this one always felt like “mine.” Probably because we had no carts or disk drives for it, so you had to hand-type everything.
It sat in storage for many years until I pulled it out again and started to tinker. First order of business was an internal memory upgrade (more on that in another post). Then I built a custom RS-232 cable for the user port (lots of instructions out there; basically connect GND to pin A, TX to pins B&C, and RX to pin M).
Enough pre-amble, let’s get to the matter at hand. I was able to read and write to the port using these simple 8 lines of poorly written CBM BASIC:
10 OPEN2,2,3,CHR$(8)+CHR$(0) 20 L$="" 21 A$="" 30 GET#2,L$ 40 PRINTL$; 45 GET A$ 46 IF LEN(A$)<>0 THEN PRINT#2,A$; 60 GOTO 20
I never said it was good code. I conjured that up from memory and Google. At any rate, it does the trick. But there’s more that needs doing.
On my OpenSUSE 13.1 laptop, I had to set up a tty to listen on the port (/dev/ttyUSB0 in this case). But I had to have some specific settings. Here’s what I used for my tty:
/sbin/agetty -L 1200 -U ttyUSB0 -a TEST
This sets the tty up as a local port, running at a blistering 1200 baud. The -U is crucial — it sets the system up to expect an uppercase-only terminal, since the VIC-20 works in PETSCII instead of ASCII. ttyUSB0 is the physical port, and the -a TEST line automatically logs in as the user TEST.
I had to set up the auto-login, because (likely due to the PETSCII vs ASCII thing) I wasn’t able to log in, despite making a successful connection.
I also found the following to be extremely helpful in actually using the terminal:
stty -F /dev/ttyUSB0 iuclc olcuc
This essentially sets the com port up to translate uppercase to lowercase on input, and translate it back to uppercase on output. Unfortunately, I couldn’t get it to stick for more than one command at a time, and haven’t investigated why that is. If anyone knows, drop me a line.
I’ve received a few good suggestions for improving this, and I might just tinker with it. But even if I don’t, I’m pretty happy that in just 8 lines I was able to get something somewhat usable. Still, though, Dad has an Alpha Micro in the closet that needs serial terminals to access…
Long live the VIC!