Microelectronics | ISA AUDIO INTERFACE

Synopsis

As I previously said in the synopsis of the ISA I/O Interface project, I'd like to replace all of the industrially built ISA cards. In the meantime, I have reconsidered my initial thoughts and I am a little bit unsure about the video and the network cards. They are very nice and while I'm pretty sure I can do a VGA card, I'm not so sure about the Ethernet one. But that's a different discussion altogether. Sure thing, an ISA audio interface card would make for another nice project. In other words: a Sound Blaster-compatible DIY card.

Here are the hardware specifications.

  • 16-bit Digital Audio COder/DECoder
  • OPL3 FM Synthesis
  • IDE CD-ROM Interface
  • Plug and Play (PnP) support
  • External EEPROM for custom configurations
  • Software MUTE switch
  • Minimal Glue Logic
  • Individual hardware configuration switches and jumpers for all functions
  • 16-bit ISA-class printed circuit board construction

For this design, I went with chips that are relatively easy to find, either new or salvaged from old ISA cards. In fact, this card features a small number of chips altogether. Which is great by any means.

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. Talking about schematics, most of it is based on application notes and original datasheets. I did some quick reverse engineering of some existing Sound Blaster clones to find out the MIDI and game port signaling circuits. Other than that, everything is straightforward. It might appear that the schematic is a bit crowded with parts. Especially passive components. As much as I tried to minimize this, I couldn't. The analog signal processing requires a bunch of operational amplifiers and related passive circuitry (filters, compensators, dividers, couplings, NFB, and so on).

The main motivation for building this audio interface ISA card is the fact that back in the early '90s I wanted a sound card (or Sound Blaster, as we all knew them back then anyway) so bad that I almost imagined the music and sounds of Wolfenstein 3-D when I was shooting enemies left and right. I ended up acquiring an ESS1868 AudioDrive based sound card. But that happened only somewhere around 1996 or 1997. To my surprise, it didn't cost that much anyway. To this point I remember the revelation that I had when I plugged the card into the 386 machine. I finally had a PC with sound capabilities. Then I had multiple sound cards over the years. In fact, I lost track of them once they became an embedded feature on each and every mainboard. These days, however, I do have some experience in system design; thus, I decided to build one myself.

In fact, to be honest, my first contact with an audio card was when I heard an AZTECH 16 Sound Blaster clone back in 1994. It was surreal. I played Duke Nukem 2 and Wolfenstein 3-D ... with sound. Also Doom. Well, this one actually enabled me to watch computer games in a whole different way. The graphics and sounds were exceptional for that period of time. I like them even now. But that's another discussion.

Let's move on then.

Disclaimer: I reserve the right to change the schematic diagram, the PCB layout, or the implementation without further notice. This is an entirely hobby do-it-yourself design and I am not responsible for any damage made by any possible mistake in any version or revision of the schematic diagrams or PCB layouts. Since it is an advanced microelectronics project, it requires very good assembly and debugging skills. In addition, I cannot offer any further technical support other than the contents of this article.

This project is in its final stage.
Current iteration of ASSY. 2486-AIF-401 is VER. 1.1 REV. B

* * *

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 diagram and circuit board layouts to the public for educational purposes. I did all this at my own expense and in my free time. If you like my work, please consider making a donation. It helps me continue these kind of projects.

Schematic Diagram

Fig. 1: Electrical Schematic Diagram

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

Gerber Files

Here are the Gerber files compressed in a .ZIP archive.
Please note that the file naming convention that I used is what OSHPark normally expects.
You can also order the printed circuit board directly from OSHPark by following the link in the bill of materials below.

Compressed Gerber Files: isa-audio-interface.zip

Bill of Materials (BOM)

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

ISA AUDIO INTERFACE
IdentifierValueQtyNotesMouser Number
Printed Circuit BoardASSY. 2486-AIF-4011VER. 1.1 REV. BOrder from OSHPark
IC1OPTi 82C9241Sound ControllerOrder from 3rd Parties
IC2Crystal CS4231A1Audio CodecOrder from 3rd Parties
IC3Yamaha YMF262M1OPL3 FM SynthesizerOrder from 3rd Parties
IC4Yamaha YAC5121Audio DACOrder from 3rd Parties
IC5, IC674ALS2452Octal Bus Transceiver595-SN74ALS245AN
IC7, IC9, IC10MC330783Operational Amplifier595-MC33078P
IC8MC341191Operational AmplifierOrder from 3rd Parties
IC11, IC12NE55342Operational Amplifier595-NE5534P
IC1393C56A1Serial EEPROM579-93C56A-E/P
IC14NJM21001Operational Amplifier513-NJM2100D
IC15UA78051Positive Regulator595-UA7805CKCS
T1, T22N39062Small Signal Transistor512-2N3906BU
T32N39041Small Signal Transistor512-2N3904BU
D1-D31N41483Small Signal Diode78-1N4148
C1-C17, C28, C30, C36, C38-C40, C49, C64, C66, C68, C70, C74, C95-C98100 nF / 50 V33MLCC80-C322C104M5R-TR
C18, C19, C22, C23, C26, C27, C42, C43, C47, C48, C51, C52, C56, C57, C72, C731 uF / 50 V16Film Capacitor505-MKS2B041001C00JS
C20, C21, C60, C61, C65, C67, C69, C71, C75, C81, C82, C93, C94, C100-C10710 uF / 25 V21Tantalum Capacitor80-T350E106M025AT
C24, C251.2 nF / 100 V2MLCC80-C315C122J1R
C292.7 nF / 50 V1MLCC80-C315C272K5R
C31, C34, C35, C37, C41, C50, C993.3 uF / 25 V7Tantalum Capacitor80-T350B335K025AT
C32220 nF / 50 V1MLCC80-C322C224J5R
C33470 pF / 50 V1MLCC80-C315C471K5R
C44, C53, C91, C921 uF / 35 V4Tantalum Capacitor80-T350A105K035AT
C45, C46, C54, C55, C62, C63, C76, C113, C11447 pF / 50 V9MLCC80-C315C470J5G
C58, C591.8 nF / 100 V2MLCC80-C315C182K1R
C77-C8027 pF / 100 V4MLCC80-C315C270G1G
C83-C8610 nF / 50 V4MLCC80-C315C103J5R
C87-C9051 pF / 25 V4MLCC80-C315C510K3G5TA
C108, C10947 uF / 16 V2Tantalum Capacitor80-T350J476M016AT
C110, C1111 nF / 50 V2MLCC80-C315C102F5G
C11222 pF / 50 V1MLCC80-C315C220J5G
C115-C118560 pF / 50 V4MLCC80-C315C561K5R7301
R1-R4, R20, R25, R37-R405.1 kΩ10Carbon Resistor291-5.1K-RC
R5, R6, R56-R591.5 kΩ6Carbon Resistor291-1.5K-RC
R7, R8, R11, R17, R18, R22, R2347 kΩ7Carbon Resistor291-47K-RC
R9, R10, R29, R308.2 kΩ4Carbon Resistor291-8.2K-RC
R12, R474.7 kΩ1Carbon Resistor291-4.7K-RC
R13, R35, R36, R41, R53, R6110 kΩ6Carbon Resistor291-10K-RC
R1416 kΩ1Carbon Resistor291-16K-RC
R15, R16, R48, R4947 Ω4Carbon Resistor291-47-RC
R19, R21, R24, R2622 kΩ4Carbon Resistor291-22K-RC
R27, R28680 Ω2Carbon Resistor291-680-RC
R31, R3218 kΩ2Carbon Resistor291-18K-RC
R33, R3475 Ω2Carbon Resistor291-75-RC
R423.3 kΩ1Carbon Resistor291-3.3K-RC
R43100 Ω1Carbon Resistor291-100-RC
R441.2 kΩ1Carbon Resistor291-1.2K-RC
R45, R462.2 kΩ2Carbon Resistor291-2.2K-RC
R50, R5133 Ω2Carbon Resistor291-33-RC
R52, R55, R601 kΩ3Carbon Resistor291-1K-RC
R54100 kΩ1Carbon Resistor291-100K-RC
RN1, RN29 x 4.7 kΩ2Bussed Resistor Network652-4610X-1LF-4.7K
RN34 x 1 kΩ1Bussed Resistor Network652-4605X-1LF-1K
RA14 x 2.2 kΩ1Resistor Array652-4608X-2LF-2.2K
L1-L22BL03RN222Ferrite Bead81-BL03RN2R1P1A
X124.576 MHz1Quartz Crystal695-HC49US-245-U
X216.9344 MHz1Quartz Crystal695-HC49US-169-U
X314.31818 MHz1Quartz Oscillator520-TCH1431-X
F11.1 A1Resettable Fuse576-16R110BU
LED15 mm Red LED1CD Activity Indicator755-SLR-56VC3F
LED25 mm Green LED1Software Configured Indicator755-SLR-56MC3F
IC Socket68-pin PLCC1IC2575-682444
IC Socket20-pin2IC5, IC6575-193320
IC Socket8-pin8IC7-IC14575-193308
REL1A-5W-K1Miniature DPDT Relay817-A-5W-K
JP1, JP2, JP53-pin Header3Jumper649-68001-203HLF
JP3, JP4, JP6, JP72-pin Header4Jumper649-68001-202HLF
J72-pin Header1Header649-68001-202HLF
J8, J9, J104-pin Header3Header649-68001-204HLF
J1-J43.5 mm Jack4Stereo, Switched490-SJ1-3545N
J515-pin Connector1Female D-Sub617-09682537612
J640-pin Connector1Header617-09185405324
ScrewScrewlock 4-40 UNC2For J5617-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 AUDIO 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.

Notes:

  • IC11 and IC12 of type NE5534 can be replaced by Analog Devices AD797SQ. These two operational amplifiers sound intriguingly similar, if not identical.
  • IC14 of type NJM2100 can be replaced by Texas Instruments RC4558 which leads to a small improvement in FM (MIDI) sound output quality.

Assembly Instructions and Notes

Here is a list of things you need to pay attention to should you decide to build such ISA audio 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: OPTi 82C924, YMF262M, YAC512, diodes, resistors, quartz crystals, quartz oscillator, IC sockets, relay, resistor networks, MLCC capacitors, tantalum capacitors, film capacitors, LEDs, jumpers, pin headers, ferrite beads, connectors.
  • There is no need for a heatsink on the +5 V regulator. By design, the PCB actually acts as a big heatsink.
  • At the end, clean any flux residues with isopropyl alcohol.

Principle of Operation

This 16-bit audio interface is fully PC AT compatible. That means that all games and audio-manipulation software originally written for the PC AT platform will be fully compatible with this sound card.

The block diagram allows for a better understanding of the principle of operation.

Fig. 1: System Block Diagram

The sound card is controlled by the OPTi 82C924 sound controller integrated circuit. This chip has the following features.

  • ISA PC AT Bus Interface
  • Sound Blaster Pro-compatible Digital Audio Processor
  • MIDI Interface
  • Windows Sound System Interface
  • FM Synthesizer Interface
  • Wave Table Synthesizer Interface
  • Game Port Interface and Timing
  • Codec/Mixer Interface
  • CD-ROM Interface
  • Modem Interface
  • Software Programmable IRQ and DMA Selection
  • Power-Down Mode for reduced power consumption

The digital audio processor is the Crystal Semiconductor CS4231A chip. It has the following features.

  • 16-bit Audio Converters and On-chip Filtering for Record and Playback
  • Windows Sound System-compatible Codec
  • ADPCM Compression/Decompression
  • MPC Level 2-compatible Mixer
  • Dual DMA Registers for Full Duplex Operation
  • On-chip FIFO for Higher Performance
  • Selectable Serial Audio Data Port

The Adlib-compatible sound section is centered around the Yamaha YMF262 FM synthesis chip. It has the following features.

  • Register Compatibility with OPL2 FM Sound Source
  • Up to six sounds can be used as four-operator melody sounds
  • 18 simultaneous melody sounds and six two-operator melody sounds, or six four-operator melody sounds, three two-operator melody sounds and five rhythm sounds
  • Eight selectable waveforms
  • 4 channel sound output
  • LFO for vibrato and tremolo effects
  • Two programmable timers

The whole FM synthesis chain is completed by the YAC512 digital to analog converter (DAC).

The above specifications appear to be complicated. And they probably are. From my point of view, I am only interested in interconnecting all these components into a usable ecosystem that would enable sound for games of the '90s.

CD-ROM interface is constructed along two octal bus transceivers and the 82C924 internal CD-ROM control signaling.

Interface Connectors Description

The following section describes all the interface connectors and their respective pinouts.

INTERFACE CONNECTORS DESCRIPTION
IdentifierValueNotesPinout
J1AUXAuxiliary Input1 - Ground
2 - Right Channel Input
3 - Left Channel Input
4 - Switched Ground
5 - Switched Ground
J2MICMicrophone Input1 - Ground
2 - Left Channel Input
3 - Right Channel Input
4 - Switched Ground
5 - Switched Ground
J3LINE-INLine Input1 - Ground
2 - Left Channel Input
3 - Right Channel Input
4 - Switched CD-ROM Left Channel Input
5 - Switched CD-ROM Right Channel Input
J4LINE-OUTLine Output1 - Ground
2 - Left Channel Output
3 - Right Channel Output
4 - Switched Ground
5 - Switched Ground
J5GAME/MIDIGame/MIDI Port1 - VCC
2 - /B1 (Button 1)
3 - X1 (X-axis, J#1)
4 - Ground (Button 1)
5 - Ground (Button 2)
6 - Y1 (Y-axis, J#1)
7 - /B2 (Button 2)
8 - VCC
9 - VCC
10 - /B3 (Button 3)
11 - X2 (X-axis, J#2)
12 - MIDI Transmit Data
13 - Y2 (Y-axis, J#2)
14 - /B4 (Button 4)
15 - MIDI Receive Data
J6IDE CD-ROMIDE CD-ROM Interface1 - /RESET
2 - VSS
3 - CDD7
4 - CDD8
5 - CDD6
6 - CDD9
7 - CDD5
8 - CDD10
9 - CDD4
10 - CDD11
11 - CDD3
12 - CDD12
13 - CDD2
14 - CDD13
15 - CDD1
16 - CDD14
17 - CDD0
18 - CDD15
19 - VSS
20 - NC
21 - NC
22 - VSS
23 - /XIOW
24 - VSS
25 - /XIOR
26 - VSS
27 - I/ORDY (disableable)
28 - NC
29 - NC
30 - VSS
31 - IRQ15 (disableable)
32 - /I/OCS16
33 - CA1
34 - NC
35 - CA0
36 - CA2
37 - /XCS
38 - /XACK
39 - /CDACT
40 - VSS
J7CDACTCD Activity LED1 - LED Cathode
2 - LED Anode
J8SPK INPC Speaker Input1 - Speaker Data Input
2 - NC
3 - Ground
4 - NC
J9SPK OUTPC Speaker Output1 - Positive Output
2 - Negative Output
3 - Positive Output
4 - Negative Output
J10CD-ROM INCD-ROM Input1 - Left Channel Input
2 - Ground
3 - Ground
4 - Right Channel Input

ISA Card Configuration

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

ISA CARD CONFIGURATION
IdentifierValueNotesConfiguration
JP1CLOCKSound Controller Clock1-2: ISA
2-3: Internal (*)
JP2MICMicrophone1-2: Stereo (*)
2-3: Mono
JP3CONFIGCard ConfigurationCL: EEPROM
OP: Software (*)
JP4MODEOperating ModeCL: Non Plug and Play
OP: Plug and Play (*)
JP5MUTELine Output Muting1-2: Disabled (*)
2-3: Software
JP6I/ORDYI/O Ready SignalCL: Enabled
OP: Disabled (*)
JP7IRQ15Interrupt Request 15CL: Enabled
OP: Disabled (*)

ISA Card Operating System Compatibility

This ISA card has been tested with the following operating systems.

ISA CARD OPERATING SYSTEM COMPATIBILITY
Operating SystemStatusDriver / Notes
Microsoft DOS 6.22WorkingAIF.EXE
Microsoft Windows 3.1Not TestedN/A
Microsoft Windows 95WorkingSND924P.VXD
Microsoft Windows 98WorkingSND924P.VXD
Microsoft Windows 2000Not WorkingWDM driver is not available
Microsoft Windows XPNot WorkingWDM driver is not available

MS-DOS Software Driver

I added this section after I finished the PCB assembly. I initially tested the audio interface with some generic OPTi drivers that I found on the Internet. It wasn't easy to locate them but deep search knowledge always pays off. However, I always wanted to program my own drivers for it. Which, in the end, I did.

I have set up a GitHub repository for the source code of this MS-DOS driver. The program allows the setup and initialization of the audio interface hardware while also providing a stereo volume mixer. I programmed all this into one single MS-DOS executable file of roughly 45 Kb. If this file is further compressed, then its size decreases to about 20 Kb. Which is pretty much awesome.

Since this kind of hardware is well out of marketing purposes and the datasheets are extensively describing how the software should be written, I believe there is no trade secret to program such a driver. Thus, I am releasing my work under the GNU General Public License v3.0 terms and conditions, for educational and documentation purposes.

GitHub Repository: https://github.com/agroza/aif
Main Program: aif.pas

I used the Pascal programming language and I wrote time-critical routines in assembly language. I initially inspected the optimized OPTi 82c929 driver programmed by Jan Knipperts, thinking that I could do a quick and dirty adaptation. But I think that if it is worth the effort to design all the hardware, then it is definitely worth doing the software as well. So I quickly decided to write everything on my own.

Thankfully the datasheets are very verbose in terms of register descriptions and principles of operation. I ended up using some of Jan's code for the Sound Blaster Pro interface and MPU-401 initialization -- thanks for allowing me to use your code! I had to rewrite large portions of that code to adapt it to my project. Furthermore I removed everything else that I wasn't planning to use while optimizing the remaining stuff.

Here are some pictures of the software, starting with the initialization screen.

The embedded setup program looks like this.

And finally the embedded mixer program appears like this.

In addition, my VersaVision framework for MS-DOS evolved quite a bit in the last 25+ years of existence.

I had a lot of fun programming this driver. And I remembered the chaos of procedural programming. I also tried to keep global variables at a minimum.

In the meantime, I finished the work on the AIF driver. It is now fully functional and allows me to use the entire hardware tricks that I put in my design, such as relay muting circuit and software configured indicator LED. Now the program has entered maintenance mode as I am still implementing small improvements and correct eventual bugs.

I just added the aif.exe -init line to autoexec.bat so that the card is initialized every time I power on or restart the PC.

EEPROM ISA PnP Configuration

For now, this is work in progress as I am still in the research phase.

Construction and Pictures

The PCBs have arrived from the factory. Now on to the assembly procedure. As with all large PCBs, the pictures present a certain amount of barrel distortion. I took them with my Nokia 6.1 mobile phone.

This is the bare 4-layer PCB, component side.

And the solder side.

Details. The soldermask has small random optical defects. Thankfully most of them will be obscured by parts.

More details. I like the way the layout looks.

Let's align the audio controller on the SMD pads.

Sound controller is soldered in. Yamaha LSI chips are soldered as well. I used the same DIY solder-drag method and as always it gives good results.

Small signal diodes are the first non-SMD parts that I soldered.

All resistors are soldered in place.

More parts are soldered.

MLCC and tantalum capacitors are now in place.

Miscellaneous parts were soldered.

Film capacitors and interface connectors are in position.

I finished planting all the parts. Then I inserted all ICs in their appropriate sockets.

Very high quality operational amplifiers for line outputs.

I am waiting for some CS4231A-KL that I bought from eBay. In the meantime I am using an Analog Devices AD1845JP chip. And it works perfectly.

CD-ROM interface. I am eager to test this at some point but I need to find an IDE CD-ROM somewhere. I know I have one. Hope it still works.

Most -- if not all -- CD-ROM devices don't have the activity /DASP signal wired to the connector. But I provided an LED for that too. I might just route the output from the CD-ROM frontal LED to the 40-pin IDE connector, in the drive itself. But we will see about this.

High quality Panasonic ECQ series film capacitors are used for audio coupling purposes.

Software configured LED looks nice for sure. But I have to write my own drivers for it or it won't ever light up. That is a project for the winter, or some rainy days -- er, weeks. Later edit: In the meantime, I finished the software and it is working correctly. Once the card is initialized, this LED is lit.

The finished audio interface.

Next, I tested the sound card. It worked from the first try. The AWARD ROM BIOS ISA-PnP routines correctly detect this card as a generic OPTi sound card called Pro Audio 16. The noise floor is very low. The sound is great! Heavy and clean.

Constructing a Second Audio Interface

As I have two retrocomputers, I need two ISA sound cards. Given the fact that I still had two PCBs left and some logic ICs, including the sound controller chip, I decided to build another audio interface card.

Again, the component side of the 4-layer printed circuit board.

And the solder side.

I played a bit with the lighting conditions and tried to capture a glimpse of the internal copper planes.

I am making visible progress. Resistors, diodes, and SMD ICs are soldered already.

Resistors!

And some zoom-in.

Detailed view on the soldered OPTi 82C924 sound controller chip.

Some more passive parts.

Computer world!

More capacitors...

And a view from the top.

Next, I added the remaining MLCCs, the tantalum capacitors, and the IC sockets. Also, I soldered the audio I/O connectors.

Finally, I soldered the remaining parts and inserted all ICs in their respective sockets. I don't have a compatible ISA bracket yet. But I am planning to either source one from a dead sound card, or manufacture my own.

Constructing a Third Audio Interface

I only have one bare PCB left from the original batch of three prototypes. So let's build another one. I will not take pictures throughout the process as I will just repeat myself. But this time I will go with an all metal film resistors construction. The rest of the parts will remain the same. Theoretically, the noise floor would drop even more due to the low thermal noise of metal film resistors but I doubt this is noticeable in practice. Then again, the noise floor is very low even in the original version with all carbon film resistors. Anyway, besides my ears, I don't have adequate equipment to measure this parameter.

Versions and Revisions

This section lists the project version and revision history.

VER. 1.1 REV. B

  • Fully functional initial production version

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