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.
With this design I went for 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 SoundBlaster clones for knowing 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 in 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 see 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 schematics 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 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
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
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
The following list contains the parts that are required to assemble this ISA audio interface card.
|ISA AUDIO INTERFACE|
|Printed Circuit Board||ASSY. 2486-AIF-401||1||VER. 1.1 REV. B||Order from OSHPark|
|IC1||OPTi 82C924||1||Sound Controller||Order from 3rd Parties|
|IC2||Crystal CS4231A||1||Audio Codec||Order from 3rd Parties|
|IC3||Yamaha YMF262M||1||OPL3 FM Synthesizer||Order from 3rd Parties|
|IC4||Yamaha YAC512||1||Audio DAC||Order from 3rd Parties|
|IC5, IC6||74ALS245||2||Octal Bus Transceiver||595-SN74ALS245AN|
|IC7, IC9, IC10||MC33078||3||Operational Amplifier||595-MC33078P|
|IC8||MC34119||1||Operational Amplifier||Order from 3rd Parties|
|IC11, IC12||NE5534||2||Operational Amplifier||595-NE5534P|
|T1, T2||2N3906||2||Small Signal Transistor||512-2N3906BU|
|T3||2N3904||1||Small Signal Transistor||512-2N3904BU|
|D1-D3||1N4148||3||Small Signal Diode||78-1N4148|
|C1-C17, C28, C30, C36, C38-C40, C49, C64, C66, C68, C70, C74, C95-C98||100 nF / 50 V||33||MLCC||80-C322C104M5R-TR|
|C18, C19, C22, C23, C26, C27, C42, C43, C47, C48, C51, C52, C56, C57, C72, C73||1 uF / 50 V||16||Film Capacitor||505-MKS2B041001C00JS|
|C20, C21, C60, C61, C65, C67, C69, C71, C75, C81, C82, C93, C94, C100-C107||10 uF / 25 V||21||Tantalum Capacitor||80-T350E106M025AT|
|C24, C25||1.2 nF / 100 V||2||MLCC||80-C315C122J1R|
|C29||2.7 nF / 50 V||1||MLCC||80-C315C272K5R|
|C31, C34, C35, C37, C41, C50, C99||3.3 uF / 25 V||7||Tantalum Capacitor||80-T350B335K025AT|
|C32||220 nF / 50 V||1||MLCC||80-C322C224J5R|
|C33||470 pF / 50 V||1||MLCC||80-C315C471K5R|
|C44, C53, C91, C92||1 uF / 35 V||4||Tantalum Capacitor||80-T350A105K035AT|
|C45, C46, C54, C55, C62, C63, C76, C113, C114||47 pF / 50 V||9||MLCC||80-C315C470J5G|
|C58, C59||1.8 nF / 100 V||2||MLCC||80-C315C182K1R|
|C77-C80||27 pF / 100 V||4||MLCC||80-C315C270G1G|
|C83-C86||10 nF / 50 V||4||MLCC||80-C315C103J5R|
|C87-C90||51 pF / 25 V||4||MLCC||80-C315C510K3G5TA|
|C108, C109||47 uF / 16 V||2||Tantalum Capacitor||80-T350J476M016AT|
|C110, C111||1 nF / 50 V||2||MLCC||80-C315C102F5G|
|C112||22 pF / 50 V||1||MLCC||80-C315C220J5G|
|C115-C118||560 pF / 50 V||4||MLCC||80-C315C561K5R7301|
|R1-R4, R20, R25, R37-R40||5.1 kΩ||10||Carbon Resistor||291-5.1K-RC|
|R5, R6, R56-R59||1.5 kΩ||6||Carbon Resistor||291-1.5K-RC|
|R7, R8, R11, R17, R18, R22, R23||47 kΩ||7||Carbon Resistor||291-47K-RC|
|R9, R10, R29, R30||8.2 kΩ||4||Carbon Resistor||291-8.2K-RC|
|R12, R47||4.7 kΩ||1||Carbon Resistor||291-4.7K-RC|
|R13, R35, R36, R41, R53, R61||10 kΩ||6||Carbon Resistor||291-10K-RC|
|R14||16 kΩ||1||Carbon Resistor||291-16K-RC|
|R15, R16, R48, R49||47 Ω||4||Carbon Resistor||291-47-RC|
|R19, R21, R24, R26||22 kΩ||4||Carbon Resistor||291-22K-RC|
|R27, R28||680 Ω||2||Carbon Resistor||291-680-RC|
|R31, R32||18 kΩ||2||Carbon Resistor||291-18K-RC|
|R33, R34||75 Ω||2||Carbon Resistor||291-75-RC|
|R42||3.3 kΩ||1||Carbon Resistor||291-3.3K-RC|
|R43||100 Ω||1||Carbon Resistor||291-100-RC|
|R44||1.2 kΩ||1||Carbon Resistor||291-1.2K-RC|
|R45, R46||2.2 kΩ||2||Carbon Resistor||291-2.2K-RC|
|R50, R51||33 Ω||2||Carbon Resistor||291-33-RC|
|R52, R55, R60||1 kΩ||3||Carbon Resistor||291-1K-RC|
|R54||100 kΩ||1||Carbon Resistor||291-100K-RC|
|RN1, RN2||9 x 4.7 kΩ||2||Bussed Resistor Network||652-4610X-1LF-4.7K|
|RN3||4 x 1 kΩ||1||Bussed Resistor Network||652-4605X-1LF-1K|
|RA1||4 x 2.2 kΩ||1||Resistor Array||652-4608X-2LF-2.2K|
|X1||24.576 MHz||1||Quartz Crystal||695-HC49US-245-U|
|X2||16.9344 MHz||1||Quartz Crystal||695-HC49US-169-U|
|X3||14.31818 MHz||1||Quartz Oscillator||520-TCH1431-X|
|F1||1.1 A||1||Resettable Fuse||576-16R110BU|
|LED1||5 mm Red LED||1||CD Activity Indicator||755-SLR-56VC3F|
|LED2||5 mm Green LED||1||Software Configured Indicator||755-SLR-56MC3F|
|IC Socket||68-pin PLCC||1||IC2||575-682444|
|IC Socket||20-pin||2||IC5, IC6||575-193320|
|REL1||A-5W-K||1||Miniature DPDT Relay||817-A-5W-K|
|JP1, JP2, JP5||3-pin Header||3||Jumper||649-68001-203HLF|
|JP3, JP4, JP6, JP7||2-pin Header||4||Jumper||649-68001-202HLF|
|J8, J9, J10||4-pin Header||3||Header||649-68001-204HLF|
|J1-J4||3.5 mm Jack||4||Stereo, Switched||490-SJ1-3545N|
|J5||15-pin Connector||1||Female D-Sub||617-09682537612|
|Screw||Screwlock 4-40 UNC||2||For J5||617-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.
Here is a list of things you need to pay attention to should you decide to build such ISA audio interface card.
This 16-bit audio interface is PC AT compatible by all means. That means all games and audio-manipulation software written originally 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.
The digital audio processor is the Crystal Semiconductor CS4231A chip. It has the following features.
The Adlib-compatible sound section is centered around the Yamaha YMF262 FM synthesis chip. It has the following features.
The complete 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 the games of the '90s.
CD-ROM interface is constructed along two octal bus transceivers and the 82C924 CD-ROM control signaling.
Following are described all the interface connectors and their respective pinouts.
|INTERFACE CONNECTORS DESCRIPTION|
|J1||AUX||Auxiliary Input||1 - Ground|
2 - Right Channel Input
3 - Left Channel Input
4 - Switched Ground
5 - Switched Ground
|J2||MIC||Microphone Input||1 - Ground|
2 - Left Channel Input
3 - Right Channel Input
4 - Switched Ground
5 - Switched Ground
|J3||LINE-IN||Line Input||1 - Ground|
2 - Left Channel Input
3 - Right Channel Input
4 - Switched CD-ROM Left Channel Input
5 - Switched CD-ROM Right Channel Input
|J4||LINE-OUT||Line Output||1 - Ground|
2 - Left Channel Output
3 - Right Channel Output
4 - Switched Ground
5 - Switched Ground
|J5||GAME/MIDI||Game/MIDI Port||1 - 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
|J6||IDE CD-ROM||IDE CD-ROM Interface||1 - /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
|J7||CDACT||CD Activity LED||1 - LED Cathode|
2 - LED Anode
|J8||SPK IN||PC Speaker Input||1 - Speaker Data Input|
2 - NC
3 - Ground
4 - NC
|J9||SPK OUT||PC Speaker Output||1 - Positive Output|
2 - Negative Output
3 - Positive Output
4 - Negative Output
|J10||CD-ROM IN||CD-ROM Input||1 - Left Channel Input|
2 - Ground
3 - Ground
4 - Right Channel Input
I have provided some basic card configuration options under the form of jumpers.
The star (*) symbol signifies the default option.
|ISA CARD CONFIGURATION|
|JP1||CLOCK||Sound Controller Clock||1-2: ISA|
2-3: Internal (*)
|JP2||MIC||Microphone||1-2: Stereo (*)|
|JP3||CONFIG||Card Configuration||CL: EEPROM|
OP: Software (*)
|JP4||MODE||Operating Mode||CL: Non Plug and Play|
OP: Plug and Play (*)
|JP5||MUTE||Line Output Muting||1-2: Disabled (*)|
|JP6||I/ORDY||I/O Ready Signal||CL: Enabled|
OP: Disabled (*)
|JP7||IRQ15||Interrupt Request 15||CL: Enabled|
OP: Disabled (*)
This ISA card has been tested with the following operating systems.
|ISA CARD OPERATING SYSTEM COMPATIBILITY|
|Operating System||Status||Driver / Notes|
|Microsoft DOS 6.22||Working||AIF.EXE|
|Microsoft Windows 3.1||Not Tested||N/A|
|Microsoft Windows 95||Working||SND924P.VXD|
|Microsoft Windows 98||Working||SND924P.VXD|
|Microsoft Windows 2000||Not Working||WDM driver is not available|
|Microsoft Windows XP||Not Working||WDM driver is not available|
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. Initially I 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 worth the effort to design all the hardware, then it definitely worths to do 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. Is 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 fix 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.
For now, this is work in progress as I am in the research phase.
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.
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.
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.
And some zoom-in.
Detailed view on the soldered OPTi 82C924 sound controller chip.
Some more passive parts.
And a view from the top.
Next I added the remaining MLCC and tantalum capacitors and the 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.
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.
This section lists the project version and revision history.
Copyright © 2004- Alexandru Groza
All rights reserved.
VER. 1.0 | REV. A