Microelectronics | ISA I/O INTERFACE


After successfully building the 16-bit ATX ISA Backplane and the 32-bit 80386DX ISA Single Board Microcomputer I decided to completely remove all other industrially built ISA cards from my homemade computer and replace them with DIY ones. Sure thing, an ISA I/O interface card would make for a nice project while providing some connectivity options to the system.

Here are the hardware specifications.

  • One Floppy Disk Drive Controller with two channels (Floppy A, Floppy B)
  • Two IDE Interfaces with two channels each (primary master-slave, secondary master-slave)
  • Two Serial Port Controllers (COM1 / COM3, COM2 / COM4)
  • One Parallel Port Controller (LPT1)
  • Two Option ROM for the ROM BIOS IDE software configuration program
  • Individual hardware configuration switches and jumpers for all functions
  • Minimal Glue Logic
  • ISA-board class construction

For easier reproductions of this design, I tried to source chips that are still produced. However some parts prove difficult to find -- think parallel port controller chip. But everything is possible in the Internet era. With a bit of luck you can find any computer chip on-line and have it delivered to your door in less than a month.

As always you can find the bill of materials (BOM) below after the schematics and the computer simulations of the final printed circuit board layouts. The schematic is nothing but a collection of computer peripherals, most of it being based on application notes and original datasheets. The IDE host adapter interface is particularly interesting since it contains a programmable logical device. Other than that, everything is straightforward. It might appear that the schematic is a bit overengineered. If you compare it with similar schematics of cost-cutting ISA PCBs of the time, then yes, it is overengineered. But if you take a look at, for instance, IBM period correct implementations, you will find that my schematic is less overengineered than theirs. Since this is a hobby project, I don't have any cost related issues. I don't plan to do mass production, nor do I hurry anywhere. Thus I can wait enough time so that I raise the required funds for this project. So that was basically what I did. I ordered parts in batches as soon as I got the required funds.

The main motivation for building this ISA card is the implementation of a dual IDE interface. This is mostly unheard of in the early 386 days. For it to fully function properly, it will require a separate ROM BIOS program. The system ROM BIOS of my 386 machine knows how to address only one interface. So there is another challenge here. Furthermore I have never had any chance of working with PALs so it was a good idea to start somewhere. I'm eager to write the PAL equations and then produce the controller firmware. While it's true I programmed CPLDs in the past, PALs are something new to me. Another interesting thing that always bugged me is hardware decoding of peripheral addresses. I used these hardware addresses in my software in the '90s but I never ever thought about how the decoding is done at the implementation level. So, back to the drawing board. Literally. Well, mostly paper and pencil. Drawing massive logic charts for the decoders was a challenge of its own. But I had my share of fun. I wouldn't do anything if I didn't have fun doing it.

All in one the I/O interface card is something that I would've loved to have back in the early 1990s. Nowadays is quasi-useless. But still a nice project.

This project is in its final stage.
Current iteration of ASSY. 2486-IOIF-301 is VER. 1.4 REV. D
I decided to keep it a long time in review so that I can correct all errors and produce the -- expensive -- prototype PCB only once.
All pictures of the finished printed circuit board assembly refer to a prototype called VER. 1.4 REV. C
The differences are only related to silkscreen and edge card connector.

* * *

Laudatur ab his, culpatur ab illis. This project is provided as-is and is not for commercial purposes. It reflects my experimental work in microcomputer system design and should be treated as such. I release the schematic and circuit boards to the public for educational purposes. I did all this on my expense and in my free time. So if you like my work, please consider a donation.


Fig. 1: Electrical Principial Schematic

Printed Circuit Boards

Fig. 2: Top Silkscreen

Fig. 3: Bottom Silkscreen

Fig. 4: Top Layer Printed Circuit Board

Fig. 5: Inner Bottom Layer Printed Circuit Board

Fig. 6: Inner Top Layer Printed Circuit Board

Fig. 7: Bottom Layer Printed Circuit Board

Fig. 8: Top Layer Printed Circuit Board - Simulation

Fig. 9: Bottom Layer Printed Circuit Board - Simulation

Bill of Materials (BOM)

The following list contains the parts that are required to assemble this ISA I/O interface card.

IdentifierValueQtyNotesMouser Number
Printed Circuit BoardASSY. 2486-IOIF-3011VER. 1.4 REV. DOrder from OSHPark
IC1PC8477BV1Floppy Disk ControllerOrder from eBay
IC274LS301Single 8-input NAND Gate595-SN74LS30N
IC374ALS041Hex Inverter595-SN74ALS04BN
IC474LS071Hex Buffer (OC)595-SN74LS07N
IC5-IC874ALS2454Octal Bus Transceiver595-SN74ALS245AN
IC974ALS2441Octal 3-state Buffer595-SN74ALS244CN
IC11, IC1674ALS13823:8 Line Decoder595-SN74ALS138AN
IC1274ALS101Triple 3-input NAND Gate595-SN74ALS10AN
IC13, IC1474F1252Quad 3-state Buffer595-SN74F125N
IC15HT65351Parallel Port ControllerOrder from eBay
IC17, IC18TL16C5502Serial Port Controller595-TL16C550CFN
IC19, IC20SN75C1852Serial Port Transceiver595-SN75C185N
IC21, IC2274LS6882Magnitude Comparer595-SN74LS688N
IC23, IC2428C64264 Kbit ROM556-AT28C64B15PU
D1-D91N41489Small Signal Diode78-1N4148
C1-C36, C42, C44100 nF / 50 V38MLCC80-C322C104M5R-TR
C37-C41, C43, C4510 uF / 25 V7Tantalum Capacitor80-T350E106M025AT
C46-C4933 pF / 50 V4MLCC80-C315C330J5G
C50-C66180 pF / 50 V17MLCC80-C315C181K5R
C67-C82100 pF / 50 V16MLCC80-C315C101K5R
C834.7 nF / 50 V (optional)1MLCC80-C315C472K5R
R1, R71 MΩ2Carbon Resistor291-1M-RC
R2, R31 kΩ2Carbon Resistor291-1K-RC
R4-R6, R8, R910 kΩ5Carbon Resistor291-10K-RC
R104.7 kΩ1Carbon Resistor291-4.7K-RC
RN15 x 150 Ω1Bussed Resistor Network652-4606X-1LF-150
RN2-RN58 x 1 kΩ4Bussed Resistor Network652-4609X-1LF-1K
RN65 x 4.7 kΩ1Bussed Resistor Network652-4606X-1LF-4.7K
RN7, RN88 x 10 kΩ2Bussed Resistor Network652-4609X-1LF-10K
RA15 x 470 Ω1Resistor Array652-4610X-2LF-470
RA24 x 10 kΩ1Resistor Array652-4608X-2LF-10K
RA33 x 470 Ω1Resistor Array652-4606X-2LF-470
L1-L33BL03RN233Ferrite Bead81-BL03RN2R1P1A
X1, X224 MHz2Quartz Crystal695-HC49US-24-U
X31.8432 MHz1Quartz Oscillator520-TCF184-X
F1-F31.1 A3Resettable Fuse576-16R110BU
SW16-position1DIP Switch774-2066
SW24-position1DIP Switch774-2064
SW37-position1DIP Switch774-2067
SW47-position1DIP Switch774-2067
LED15 mm Orange LED1FDA Activity Indicator755-SLR-56DC3F
LED25 mm Orange LED1FDB Activity Indicator755-SLR-56DC3F
LED35 mm Red LED1IDE1 Activity Indicator755-SLR-56VC3F
LED45 mm Red LED1IDE2 Activity Indicator755-SLR-56VC3F
LED55 mm Yellow LED1ROM Activity Indicator755-SLR-56YC3F
IC Socket68-pin PLCC2IC1, IC15575-682444
IC Socket14-pin6IC2-IC4, IC12-IC14575-193314
IC Socket20-pin10IC5-IC10, IC19-IC21, IC23575-193320
IC Socket16-pin2IC11, IC16575-110433161
IC Socket44-pin PLCC2IC17, IC18575-944424
IC Socket16-pin2IC22, IC24575-11043628
JP1, JP4, JP5, JP7, JP82-pin Header5Jumper649-68001-202HLF
JP2, JP3, JP6, JP9-JP143-pin Header9Jumper649-68001-203HLF
J1-J32-pin Header3Header649-68001-202HLF
J434-pin Connector1Header617-09185345324
J5, J640-pin Connector2Header617-09185405324
J710-pin Connector1Header617-09185105324
J825-pin Connector1Female D-Sub617-09683537612
J99-pin Connector1Male D-Sub617-09681637813
ScrewScrewlock 4-40 UNC4For J8, J9617-09670019941

Alternatively you can use the following link to the Mouser project that I created for this ISA card. It should make ordering of parts and removing typing faults pretty easy.

Mouser Project: ISA I/O INTERFACE

Lately I have observed that Mouser discontinued some of the parts in the list above. If you decide to build this project, then you need to find alternatives. It is out of my scope to maintain the correctness of the parts list above.

Assembly Instructions and Notes

Here is a list of things you need to pay attention to should you decide to build such ISA I/O interface card.

  • Inspect the printed circuit board once you receive it. Normally OSHPark produces very good quality boards but one never knows. There must be absolutely no short circuits on the printed tracks. If the PCB is faulty then it can damage other ISA cards that you might install in the system.
  • Carefully observe polarity of the tantalum electrolytic capacitors on the silkscreen. I made sure there is no error on the printout. Tantalum capacitors will violently explode and burst in fire if mounted in reverse, possibly injuring you.
  • Take your time to solder all the components on the board. There are a lot of solder points and if you don't have patience in general, then this project might not be for you.
  • Use a temperature-controlled soldering station and quality solder. Take care not to leave solder bridges as any short circuit will most likely lead to failures.
  • In order to ease-up the PCB assembly, I would suggest mounting parts in the following order: diodes, resistors, quartz crystals, quartz oscillator, IC sockets, resistor networks, MLCC capacitors, tantalum capacitors, switches, LEDs, connectors, jumpers, pin headers, ferrite beads.
  • At the end, clean any flux residues with isopropyl alcohol.
  • In case you decide to experiment with option ROMs then make sure you configure the ROM address range accordingly. It must not interfere with other ROMs installed in the system.

Principle of Operation

This ISA I/O interface card is PC AT compatible and was designed with a 16-bit ISA slot in mind. It is basically a cumulus of different PC interface peripherals that are crowded on the same PCB assembly. While the PCB looks unified and it gives the impression that the parts are interconnected, in reality they are all individual sub-schematics of the main electrical schematic. The modules are sharing the power rails and the ISA signaling lines. In fact, each interface could be built separately on its own ISA card. But that would imply a big waste of space and resources.

Initially I wanted to draw a block diagram that illustrates the principle of operation. But then again, the schematic is well drawn and clearly expresses the individual functional blocks.

Interface Connectors Description

Following are described all the interface connectors and their respective pinouts.

J1IDEIDE Activity LED1 - LED Anode
2 - LED Cathode
J2IDE2IDE2 Activity IDE1 - LED Anode
2 - LED Cathode
J3IDE1IDE1 Activity IDE1 - LED Anode
2 - LED Cathode
3 - VSS
4 - NC
6 - /DRATE
7 - VSS
8 - /INDEX
9 - VSS
10 - /MEA
11 - VSS
12 - /DSB
13 - VSS
14 - /DSA
15 - VSS
16 - /MEB
17 - VSS
18 - /DIR
19 - VSS
20 - /STEP
21 - VSS
22 - /WRDATA
23 - VSS
24 - /WE
25 - VSS
26 - /TRK00
27 - VSS
28 - /WP
29 - VSS
30 - /RDDATA
31 - VSS
32 - /HDSEL
33 - VSS
34 - /DSKCHG
2 - VSS
3 - IDE1-D7
4 - IDE1-D8
5 - IDE1-D6
6 - IDE1-D9
7 - IDE1-D5
8 - IDE1-D10
9 - IDE1-D4
10 - IDE1-D11
11 - IDE1-D3
12 - IDE1-D12
13 - IDE1-D2
14 - IDE1-D13
15 - IDE1-D1
16 - IDE1-D14
17 - IDE1-D0
18 - IDE1-D15
19 - VSS
20 - NC/VCC
21 - NC
22 - VSS
23 - /IDE1-IOW
24 - VSS
25 - /IDE1-IOR
26 - VSS
28 - ALE
29 - NC
30 - VSS
31 - IRQ14
32 - /I/OCS16
33 - A1
34 - NC
35 - A0
36 - A2
37 - /CS1FX
38 - /CS3FX
39 - /IDE1-ACT
40 - VSS
2 - VSS
3 - IDE2-D7
4 - IDE2-D8
5 - IDE2-D6
6 - IDE2-D9
7 - IDE2-D5
8 - IDE2-D10
9 - IDE2-D4
10 - IDE2-D11
11 - IDE2-D3
12 - IDE2-D12
13 - IDE2-D2
14 - IDE2-D13
15 - IDE2-D1
16 - IDE2-D14
17 - IDE2-D0
18 - IDE2-D15
19 - VSS
20 - NC/VCC
21 - NC
22 - VSS
23 - /IDE2-IOW
24 - VSS
25 - /IDE2-IOR
26 - VSS
28 - ALE
29 - NC
30 - VSS
31 - IRQ15
32 - /I/OCS16
33 - A1
34 - NC
35 - A0
36 - A2
37 - /CS17X
38 - /CS37X
39 - /IDE2-ACT
40 - VSS
2 - RX
3 - TX
4 - DTR
5 - VSS
6 - DSR
7 - RTS
8 - CTS
9 - RI
10 - NC
2 - RX
3 - TX
4 - DTR
5 - VSS
6 - DSR
7 - RTS
8 - CTS
9 - RI
2 - PD0
3 - PD1
4 - PD2
5 - PD3
6 - PD4
7 - PD5
8 - PD6
9 - PD7
10 - ACK
11 - /BUSY
12 - PE
13 - /SELECT
14 - /LF
15 - ERROR
16 - INIT
17 - /SLTIN
18 - VSS
19 - VSS
20 - VSS
21 - VSS
22 - VSS
23 - VSS
24 - VSS
25 - VSS

ISA Card Configuration

I have provided some basic card configuration options under the form of jumpers.
The star (*) symbol signifies the default option.

JP1DRATEFDD Data RateCL: Extended (2.88M)
OP: Standard (*)
JP2POWERPS/2 FDD Power1-2: Cable
2-3: External (*)
JP3MODEIDE1 Mode1-2: Enabled (*)
2-3: Disabled
JP4I/ORDYIDE1 I/O ReadyCL: Enabled
OP: Disabled (*)
JP5CFPWRIDE1 CF PowerCL: Enabled
OP: Disabled (*)
JP6MODEIDE2 Mode1-2: Enabled (*)
2-3: Disabled
JP7I/ORDYIDE2 I/O ReadyCL: Enabled
OP: Disabled (*)
JP8CFPWRIDE2 CF PowerCL: Enabled
OP: Disabled (*)
JP9, JP10MODELPT1 Mode2-3, 2-3: ISA (*)
1-2, 2-3: PS/2
2-3, 1-2: EPP
1-2, 1-2: ECP
JP11, JP12ADDRESSLPT1 Address2-3, 2-3: 0x378h (*)
1-2, 2-3: 0x278h
2-3, 1-2: 0x3BCh
1-2, 1-2: Disabled
JP13ROM0SZROM #0 SIZE1-2: 64 Kbit (*)
2-3: 256 Kbit
JP14ROM1SZROM #1 SIZE1-2: 64 Kbit (*)
2-3: 256 Kbit

Some other configuration options are provided under the form of switches.
Again, the star (*) symbol signifies the default option.

SW1.1, SW1.2IRQLPT1 Interrupt RequestON, OFF: IRQ5
OFF, ON: IRQ7 (*)
SW1.3, SW1.4DRQLPT1 DMA RequestON, OFF: DRQ1
OFF, ON: DRQ3 (*)
SW1.5, SW1.6DACKLPT1 DMA AcknowledgeON, OFF: DACK1
OFF, ON: DACK3 (*)
SW2.1, SW2.3ADDRESSSerial Port 2 AddressON, OFF: 0x2E8h, COM4
OFF, ON: 0x2F8h, COM2 (*)
SW2.2, SW2.4ADDRESSSerial Port 1 AddressON, OFF: 0x3E8h, COM3
OFF, ON: 0x3F8h, COM1 (*)

Option ROM Configuration

The two option ROMs can contain microcode that could act as a Basic Input/Output System (BIOS) for the IDE interface 1 and 2 configuration. At the moment I have not written such a program but I am planning to do so. Anyway in order to reach this microcode, a valid start address needs to be supplied to each individual ROM decoder circuits. This is done by configuring the SW3 and SW4 switch arrays. From the table above we already know that in order to enable option ROM #0, SW3.1 needs to be set to ON. The 74LS688 magnitude comparator will be active once the CPU has control of the address and data bus. In other words /G signal will be active when AEN is not asserted (low). Then SW3.2 needs to be set to OFF. That means ROM #0 /WE signal is not active. Which is normal since we don't want to provide writing capabilities to a non-writable memory. However this switch is useful for programming an empty ROM directly in-place. Similarly, switches SW4.1 and SW4.2 control the availability of ROM #1 to the system.

A combination of SW3.3, SW3.4, SW3.5, SW3.6, and SW3.7 will dictate the start address for option ROM #0. Some combinations will generate conflicts with System BIOS or other option ROMs that might be present in the system. So double check their actual address range before configuring the on-board option ROM start address.

In addition, a combination of SW4.3, SW4.4, SW4.5, SW4.6, and SW4.7 will dictate the start address for option ROM #1. Needless to say that the address of ROM #0 must be totally different than the address of ROM #1. And neither of them should conflict with other ROMs in the system.

CombinationSW3/4.3SW3/4.4SW3/4.5SW3/4.6SW3/4.7Start AddressEnd AddressConflict


The dual IDE interfaces need a firmware written in the signaling controller to operate properly. While this is just a fancy name for a humble PAL device and its associated JEDEC file, let's play professional up until the end of this project.

Firmware File: firmware.jed
Firmware String: 301.10.FW-1.1A

In the end, this EEPLD device and its programming, was one the main desire factors that led me to build this I/O interface. As a funny fact, back in 1995 or 1996, while I was literally staring at a UNiSYS 80286-10 mainboard, I really wondered what those AMD badged PAL integrated circuits were anyway. If I remember correctly they were PAL22V10 in J-type ceramic package. I said to myself that one day I will build something using PAL ICs. Strangely, now my appetite for these devices is increasing.


In the future I am planning to write a ROM BIOS program that will perform autodetection of each IDE drive that might be connected to either of the IDE interfaces. This BIOS will take full control over the system ROM BIOS, in terms of IDE settings.

Unfortunately this functionality is not available at this time. In the meantime I have set up a GitHub repository where I uploaded initial project files. Things are slowly progressing as I'm struggling to recover my assembly programming skills. For the past 15 years I did only Object Pascal and C++ programming. So I am a little bit rusty, to be nice to myself. To be honest, I'm well off course. I barely remembered how to address the VGA video RAM segment to output some text. Next I'll see what I can do with the ATA identify command so I can obtain the IDE device parameters. It is going to be fun, for sure.

GitHub Repository: https://github.com/agroza/IOIF-ROM-BIOS
ROM #0 Main Assembly Program: ioifrom0.asm

After you assemble the ROM file, an 8-bit checksum of the dump needs to be calculated and updated within the file. I found a lot of scripts on the Internet to do this but they were either Linux shell scripts or Python. And I have none of those installed on any of my machines. So I decided to program my own variant in my favorite programming language.

GitHub Repository: https://github.com/agroza/romcksum
Main Program: romcksum.dpr

Construction and Pictures

The PCBs have arrived from the Factory. Thus let's move on with the assembly. As with all large PCBs, the pictures present a certain amount of barrel distortion. I took them with my Nokia 6.1 mobile phone. Funnily enough, in certain conditions, it takes better pictures that my standalone digital still camera.

This is the bare 4-layer PCB.

Small signal diodes and individual resistors are all in.

I don't really like soldering small components since I can always feel heat discomfort on the tip of my left index finger. Luckily there are only a handful of glass diodes and individual resistors on this PCBa.

Miniature glass beads for the MLCC capacitors and the ferrite beads. And they are translucent-purple!

Purple glamour... Electronics porn... You name it.

All MLCC parts are soldered in.

Radio frequency filtering beads are in position.

Soldering these little parts was tedious and took longer than I expected.

I always liked soldering IC sockets. They offer some kind of instant gratification.

All other components are soldered. Also I added a card steel bracket that I stole from an old controller card. I polished it first as it was very dirty.

Then I inserted the ICs in their respective sockets. However I haven't fully pushed the ATF16V8 EEPLD, yet. I programmed it but I will run some tests first. Once the EEPLD firmware is validated then I'll push it in completely. I installed only one ROM IC for the moment. And I designed a small auto-adhesive label for it. MPTEC is the abbreviation for Microprogramming TECHNIQUES. That's the name under which I release all my software products. I think I came with this name when I was 14 or so. At the time I was learning assembly language. Also I was very attracted to minimization and optimization techniques. So I thought about a name that summarized what I was doing.

And now: that what-the-fuck moment, we're all scared of. I bet you didn't observe in the pictures above that the primary IDE interface connector is mounted in reverse. Fatigue and enthusiasm made me rush out and mess things up. Here you go. Desoldering 40 pins on a 4 layer PCB is not fun at all.

But I did it after all. It took me about half an hour.

Light emitting diodes.

I am missing some parts that were backordered with Mouser. So now I'm waiting for them to arrive. The parts have arrived in the meantime. I soldered all remaining parts in their respective places. Also switching to the standalone digital still camera for the following pictures.


It's funny the 93 number on the secondary serial port connector. I don't know what it means but it is exactly the year I touched an AT PC for the first time.

This is the solder side.

Then I tested the I/O Interface card. First I disabled the serial, parallel, floppy, and hard disk drive interfaces on the NEAT-575 Pentium ISA Single Board Computer that I am using for testing purposes. And for playing Doom, Duke Nukem 3D, and Quake. Well, Hexen, Heretic, Blood, Network Q RAC Rally, and other forgotten titles as well. The interface works perfectly and I'm getting a constant sustained 2.25 Mb/sec linear data transfer rates with Compact Flash cards. However the floppy disk drive controller does not work. There is absolutely no reason why it shouldn't work since I closely followed the datasheet suggested schematic. I only replaced the PAL address decoder with some glue logic. But that should not pose any problems. I visualized the address decoding with my scope and everything is alright. What could be wrong then?

I strongly suspect the floppy controller integrated circuit. I think it's fake. I mean I managed to correctly read a 5¼ 1.2 Mb floppy disk. Next I tried to write some files on it and despite the fact that the FAT12 structure was updated correctly -- or so it seems -- the files themselves were garbage. Then I tried with another diskette. A 3½ 1.44 Mb floppy this time. I constantly received controller seek error and bad controller errors. I even tried using DiskDupe program which I used a lot in the 1990s. It failed to initialize the floppy controller. Also BIOS fails to do floppy drive seek routine. It worked for a couple of minutes then it went off for good. I bought another chip from eBay in the meantime. This time from a reputable seller. Oh I forgot to say that the first one I bought from China for $ 2.5 or so, free shipping. I mean, really? What was I thinking? There is also the possibility that my chip was ESD-damaged. Or I damaged it somehow.

Here is the dead chip and the new chip. The defective IC has a different marking font. It might have been re-badged at some point. I don't know. Good thing the new chip works.


And lit.

Later Edit: I also made my own IDC data cables for use with this interface.

Versions and Revisions

This section lists the project version and revision history.

VER. 1.4 REV. D

  • Resistor array RA3 was incorrectly referenced as RN9
  • Card edge connectors are now longer
  • Various silkscreen updates

VER. 1.4 REV. C

  • Fully functional initial production version

Copyright © 2004- Alexandru Groza
All rights reserved.
VER. 1.0 | REV. A