Development stopped. The decline of the parallel port and the difficulties of accessing hardware directly (not a great idea) in Windows XP effectively
killed this project. The 82C55 I/O device is getting old now and newer, smaller, easier to use devices are available.
How it works
The 8255 was designed to work with the 8086 processor and the ISA bus, which makes interfacing easy. Making it work with the parallel port took some lateral thinking.
The device has 2 address lines, a chip select, read and write strobe. The parallel ports of the Amiga and PC have a limited (3) number of control lines, even then at different pin-outs, at least the 8 data pins line up! Remembering that the 8086 bus was multiplexed, inspired my solution, use 2 data pins with latches for the address and one control signal to control them. I then use an inverter to create /RD and /WR from another control line and the final control pin to control the chip select.
To access the chip requires two stages:
Phase 1, select the register you want to address and latch it into the 7474's using the CLK_LATCH pin.
If it is a write operation, place the parallel port D0-D7 into output mode and write the data to the port. Then drive pins 13 (SELECT) and 11(BUSY) low, the data then gets latched into the 8255. Now set select high.
If it is a read operation, place the parallel port D0-D7 pins into input mode. Now set SELECT (pin 13) low and BUSY (pin 11) high. Read the data at the parallel port then set SELECT high.
There are jumpers on the schematic/PCB to select operation with the Amiga and PC.
Click on the picture below for a full screen schematic.
With suitable interface circuits you can do many things, control LEDs, stepper motors, relays, solenoids and read many input devices.
At a later date I hope to add some circuits for A/D converters, D/A converters, relay circuits, and lamp drivers.
There are some limitations of this design. Accessing the device through the parallel port limits the device to around a 1 MHz/1us access time!
The 8255 can only source/sink 2.5mA of current per output, not enough to drive a standard LED at a reasonable brightness. I always buffer I/O devices like this with a 74245 bus transceiver, as it is cheaper to blow one of them up than the 8255.
Finish the software drivers and publish the full notes.
Publish the PCB design.
Add the circuits mentioned under possible uses.
That's it for now.
(added 4th May 2004)
Here is my assembled prototype and a bare PCB.
Updated 14 April 2021