The following is an excerpt from an article scheduled to appear in the
February 1991 issue of Amazing Computing. Please refer to that article for
more information about the I/O Board as well as ordering information. -JL
12 December 1990
More Ports for Your Amiga
An I/O Expansion board
by Jeff Lavin
Copyright )1990 The Puzzle Factory
Many of you in the Amiga community have built Brad Fowles' excellent "LUCAS"
accelerator board, which introduced the idea of "Public Domain Hardware". In
this article I will present another public domain hardware project for the
Amiga, which will enable you to add two parallel ports and two serial ports
to your Amiga 500, 1000 or 2000 for $70. Furthermore, you can easily and
inexpensively upgrade to four parallel ports and/or four serial ports at any
The hardware consists of a small printed circuit board with a 40 pin cable
and DIP jumper that plugs into the socket occupied by CIA B, and a small pcb
that contains the serial interface. CIA B is physically moved onto the I/O
This hardware supports 15 standard baud rates, from 50 to 38,400 baud, plus
MIDI (31,250 baud). It also supports full hardware handshaking. Up to four
units may be open at one time, although the cpu may not be able to keep up
with all four units running above 2400 baud.
As a hardware hacker of long standing, I have a number of small computers
with all sorts of hardware attached to them, from extra ports to EPROM prog-
rammers, and longed to do the same with the Amiga. Since the Amiga uses a
pair of 8520's (actually 6526's) for its I/O, I figured it would be a piece
of cake to add more 65/68XX family peripheral chips and be up and running.
The only problem was that, because there is no obvious chip select decoding,
I could never figure out how the 8520's were addressed. One day a friend
came by, and we were able to figure out that the I/O chips are
"automatically" selected when certain addresses are generated by logic hidden
in the PALS. Now that the final piece of the puzzle was in place, I wasted
no time and had a prototype in my Amiga in two weeks.
How it works
This hardware hack is possible because of two things the designers of the
Amiga did for us:
1. The address space where the CIAs live is incompletely decoded. This
means the 16 CIA registers are echoed repeatedly over a large range.
2. The locations where software is supposed to address the CIA registers
is completely specified over a much smaller range.
These two facts make it possible for us to take the chip select from one CIA,
and divide it into four parts. The addresses in the upper part are routed to
the CIA normally, and we "steal" the addresses from the remainder of the
space for our own use. Because the "hard" part, most of the address decoding
and the bus timing, has been done for us, we can get away with nothing more
complicated than an additional address decoder to split off our address space.
Unfortunately, this hack is not possible on the A3000 for the same reason
that it is possible on earlier Amigas. The address decoding on the A3000 is
complete; there are no "extra" incompletely decoded addresses to "steal".
The VIA and ACIA registers are still echoed over a pretty wide address range.
We have specified where to address them for the same reason that Commodore
has specified addresses for the CIAs: to ensure software compatibility. We
would very much like to see enough people build these boards to create an
installed software base. So programmers, please use these addresses when you
are writing all those neat multi-line BBS programs and multi-user
applications, as well as process control programs, robotics demos, etc.
Of course, hardware is next to useless without software to drive it. This
section describes the software available for the I/O Expansion Board.
The Serial Driver
Almost all programs written for the Amiga that use the serial port (with the
notable exception of some MIDI software) access it indirectly via a standard
software module called "serial.device". As a result, most existing software
will work fine with the I/O Board given a suitable driver, and we supply one,
named "newser.device". Simply copy it to your "DEVS:" directory and you're
in business. Most programs will permit you to change the device name (from
serial.device to newser.device) as well as the unit number (indicating which
port is to be used), or you may use the supplied IOpatch utility, described
below (see "Support Programs"). It is worth noting that, as with all other
programs relating to the I/O Board, we supply complete assembly language
source code of the driver. If you encounter a problem - and all else fails -
it's possible to fix it yourself.
The Parallel Driver
The four parallel ports on the I/O Expansion Board are controlled by the
eightbit.device. There are no known differences between this device and the
V1.3 parallel.device. Applications should not experience any problems
communicating with the eightbit.device on the device level. Full assembly
language source code of the driver is supplied with the I/O Expansion board.
"DOS-level support" refers to the ability to get and send data via the serial
and parallel ports with standard AmigaDOS commands, such as TYPE or LIST, or
with any program that does serial or parallel I/O via AmigaDOS, rather than
directly via the Exec-level "newser.device" or "eightbit.device". Although
this sort of capability is not frequently used, it is useful from time to
In a perfect world, DOS-level support would mean nothing more than an
appropriate MountList entry, specifying a driver name of "newser.device" or
"eightbit.device", and some unit number of your choosing, corresponding to a
DOS name such as "SER1" or "PAR2". Unfortunately, Commodore supplied a
version of the Port-Handler and Aux-Handler with Workbench V1.3 that doesn't
permit this; rather, they're hard-coded to use either "serial.device" or
"parallel.device". The printer.device suffers from a similar limitation. At
the time of this writing, we don't have a solution, other than using IOpatch.
However, we expect to have replacement handlers ready by the time you read
this. In addition, the handlers in Workbench V2.0 have the capability to use
any device and unit, so this whole problem is non-existent if you have V2.0.
Several programs are available for use with the I/O Expansion Board.
SERprefs functions much the same as the serial section of Preferences, but
allows you to set and save parameters for all four units of the
newser.device. These are saved in "S:Serial-Preferences".
Many programs allow you to specify the device name and unit number, so that
using an alternate device driver is no problem. For those applications that
insist on using a particular device, we have written a nice little hack
called IOpatch. This program SetFunction()s the exec OpenDevice call. The
user puts this program in his startup-sequence, or otherwise invokes it,
before he runs his application program. This patch will make a small window
appear, whenever OpenDevice() is called, with a choice of units; 0-4. Unit 0
will select the internal serial or parallel port, and units 1-4 will select
one of the newser.device or eightbit.device units. Please note that the
names of both drivers have been selected to be the same length as the names
of the original devices. This has been done to facilitate file-zapping as a
last resort. Of course, software may be written for the newser.device or
A suite of simple test programs to check the I/O Expansion Board Hardware can
save you hours of hardware debugging time. Chip selects, as well as read and
write signals, are generated for all chips. One program simulates a very
simple character-oriented terminal program for checking an ACIA.
A nice little program to drive a real-time clock-calendar is also available.
The clock hardware, based on the OKI MSM5832, is capable of generating
interrupts at 1024 hz, once per second, once per minute, or hourly. Software
to take advantage of this feature is left as an exercize for the student.
I would like to thank Dan Babcock for the many hours he put in writing and
debugging the serial device driver. This was surely one of the most
difficult parts of this project. Paul Coward, of DigiSoft, provided us with
the parallel device driver, no small achievement either. Jim Cooper, of The
Software Distillery, made many helpful suggestions concerning software
issues, and especially DOS compatibility, and helped us get up to speed.
Bill Seymour provided invaluable help in layout and pre-production of the
PCBs, and also provided design help. Finally, this task was made easier by
the help and encouragment of Doug Sears and Grace Lavin.
I think this is a pretty neat little hack. I also feel that it is simple
enough that if I hadn't come up with it, someone else would have. It
provides some much-needed additional I/O for the Amiga 1000 or 2000 at a
rock-bottom price. If enough software becomes available to warrant it, I
will try to set up some sort of software clearing house for use with this
board. Keep an eye on BIX or my BBS, The Symposium, for any news.
Meanwhile, I hope you enjoy using this board. And don't let the blue smoke
If you need to get in touch with me, here are some possibilities:
The Symposium My own BBS, (503) 935-7883, 24hrs, F8N1
The Puzzle Factory
P.O. Box 986
Veneta, OR 97487
The Puzzle Factory, Inc. | Jeff Lavin -- firstname.lastname@example.org
Veneta, Oregon |-------------------------------------
Voice : (503) 935-3709 | Remainder of signature line
Data : (503) 935-7883 | under construction.