RS-232 Data Switch

Built 1989. This page written March 27 2003

In 1989, at university, after the success with submitting a writeup about my homemade 68008 single-board computer as a co-op work term report, I hatched the idea of building another piece of gear that I wanted anyway, and submitting it as an EE499 project. EE499 was the course code for independent fourth year projects. Elaborate ones could go on for an entire school year and earn two credits. This one was judged sufficient for one semester and one credit. I got an 83% grade for it. I was told that it was perfectly done but not really ambitious enough for a higher mark. Good enough. Note that most of the complexity is in the software.

These were the days when ethernet was still coaxial cable and connected computers that cost tens of thousands of dollars. Your typical PC, if it had any remote connection at all, had a serial port with maybe a 2400 baud modem on it, used to dial up remote machines in terminal mode. Binary file transfers were done with a protocol called Zmodem. Dialup internet access was just getting defined but nobody had heard of it yet, and home internet access at best meant dialing into a shell account on a Unix machine at a university or large company. Sending a large file to a friend meant writing it onto a floppy and walking over to his place. Documents were archived by making a printout and filing it. The web, of course, was years in the future.

But I wanted a home network. A home network which would link the RS-232 serial ports of my various and sundry systems together so they could all share a dialup modem, and, in a limited way, talk to each other. So I designed a sort of data PBX (not such a strange thought; Newbridge Networks Corporation (now part of Alcatel) sold similar products at the time).

It was a proper feature creature. It had all the features necessary to allow public access terminals to be connected to it, and it could transparently go between a computer and its dialup modem, so the computer wouldn't even know it was there (but the modem could be used by other computers when not in use by the main one).

Little more needs to be said because I've transcribed the entire documentation by loading the binary Amiga Word Perfect file straight into vi and transforming it into HTML manually. Not as hard as it sounds, since the Word Perfect file was basically straight ASCII with a bit of binary junk here and there.

All the Documentation (Schematics are at the end)

Here is the firmware source code. When I wrote all this, I didn't yet know that I could just get an 8031 assembler off the net to run on my Amiga (internet search engines had not been invented yet), so I swapped computers with another guy in the dorm for a while - he got my Amiga, I got his PC/XT clone on which I could run the Intel assembler.

call.asm
commands.asm
download.asm
globals.asm
init.asm
isr.asm
jmptbl.asm
main.asm
util.asm

After I'd been using the switch for a while, I thought of new features for it. Since I didn't want to re-burn the EPROM all the time, I added a dynamic extension facility (implemented by the download.asm and jmptbl.asm files above). This allowed me to download new features. Since the switch was powered up all the time, it was no big deal to have to re-download this stuff after power failures. By this time I had the as31 assembler up on the Amiga, so the assembler syntax is different in this file.

timer.asm

At the time (1994) my internet access still consisted of dialup shell access to someone else's Linux system, using a DEC VT320 terminal and a 14.4K modem. The remote system was often busy, so the extended feature set included a facility to dial and re-dial the system, until it got through. At this point it would beep the sonalert that was hooked up directly to the switch, and another one upstairs in my bedroom, connected through wires running up the cold air return duct of the heating system. I would then drop everything and go storming into the basement to log in before the remote end dropped the connection again because of inactivity.

At the time, I also still watched TV (I gave this up for good soon after) and the extension firmware includes a timer facility that would beep the buzzers at preset times to remind me to watch a given show.

All this passed into history when I got my PC in January 1999 and installed Linux and discovered the fun of home networking with $5 secondhand ethernet cards. The old data switch couldn't handle the hardware RTS/CTS handshake that the PC used to communicate with the 56K modem that I now had. Later that year I got fulltime DSL internet access anyway, and the data switch has lived in a cardboard box ever since.

Here is the configuration file that I sent to the switch after every powerup:

    name 1 qt1200
    name 2 modem
    name 3 amiga
    name 4 nabucon
    name 5 pc
    name 6 vt100
    break ignore modem
    break ignore nabucon
    break timeout 5 pc
    break timeout 5 amiga
    break timeout 5 vt100
    break ignore qt1200
    autoconnect qt1200 amiga
    autoconnect modem vt100
    autoconnect modem pc
    dtr timeout 5 amiga
    dtr timeout 5 pc
    dtr timeout 2 vt100
And here is the timer configuration I last used:

    timer 1 thursday 19:55:00 dur 20
    timer 2 thursday 19:58:00 dur 3
    timer 3 tuesday 19:55:00 dur 20
    timer 5 tuesday 21:58:00 dur 10
    timer 6 monday 19:58:00 dur 10
    timer 7 friday 21:55:00 dur 15
    timer 9 sunday 18:55:00 dur 10
    timer 0 friday 19:55:00 dur 10
The various devices were my old "Capetronic QT/1200" modem, which had a time/date function that a special hack on the Amiga queried on every boot to set the system clock, the newer 14.4K modem, the Amiga, the console port of my NABU 1600 Unix machine (R.I.P.), a 386SX DOS PC constructed out of stuff I picked off the curb, and the dumb terminal (here still called VT100 though it was later a VT320).

This was my first 8031 project. I re-used bits of code from this in all my future ones.

Back to my projects page