This ISA IO card was spawned from the Fourm on this thread

This diagram was created by Thrashbarg. If you have any comments / suggestions then please post them on this board

Note: I haven't resized the images for obvious purposes. To get the the most detailed image just click on the one you want



From Thrashbarg himself:

Some more detail about that card.

Write to ports 2B8h-2BBh and read from 2BCh-2BFh. The inputs act as tri-state buffers but they can be latch if you disconnect pin 11 from +5v and connect it to whatever. Low = latch, high = transparent.

IC6-IC9 have been set up as inputs while IC2-IC5 are outputs. They can me moved around though, changed from outputs to inputs or vice versa. You could have only 8 outputs or 8 inputs or any other combination. There doesn't need to be 8 ports either. There could be any number from 1 to 8. I leave it up to you.


Click for larger image

Further modification - Parallel interface

Thrashbarg advised the modification below to interface the IO card with a parallel port

Click for larger image

The data pins are attached to the data lines of the parallel port. No need for shift registers, just make sure your parallel port is bidirectional if you want to read the registers. The register select lines are attached to the control lines with the inverters to make things easier for the programmer.

Programming the data line is easy but the control lines are more tricky. Have a look at, specificly the control register. Bit zero of the control port is attached to the enable input of the 74LS138, so if you want to program a register make sure this is a 1. Bits 1-3 select the register.

This could be done like this (using a sort of Basic Pseudo code):

register = 4 (say we wanted to program the 4th register)

register = register * 2 (shift the bits left by one bit)
register = register + 1 (set the enable bit)
OUT 0x37A, register

OUT 0x378, data (set your data)

That should write your data to the 4th register. Remember also the registers are transparent, that is to say as long as they are selected they will always be the same as the data present on the parallel port. While a register is selected you can OUT anything to the data register and it will change on the card. When the register is deselected it'll latch to whatever the outputs where. This is very usefull.

To read a register is similar.

register = 4

register = register * 2
register = register + 1
register = register + 32 (this sets the 5th bit on the control register, which sets the parallel port into read mode)
OUT 0x37A, register
data = IN (0x378)