Click for attribution

ISA go Bragh™

Click for attribution

PC audio for luddites

Last modified: Sun Oct 23 17:26:08 EDT 2016

      Crimes against music:  forced resampling
Sound Blasters
      Sound Blaster 16
      Sound Blaster AWE64 Gold
GUS and GUS-like
      General overview on GUS sound fonts
      Gravis UltraSound Plug & Play Pro Version 1.0
      Gravis UltraSound "Classic" Rev. 2.4
      Compaq Ultra Sound 32 Pro
SB Pro 2.0 clones
      Crystal CS4235, CS4237B, CX4237B
      ESS AudioDrive ES1868F
      Yamaha OPL3-SA3
      OPTi 82C931
      OPTi 82C930
      Analog Devices AD1812JS SoundPort
      Logitech SoundMan Wave
      Avance Logic Pro16/32+ (ALS100+)
      Aztech Sound Galaxy Nova 16 Extra
Wave Blaster daughterboard
General how-to
      Playing MIDI files via OPL2/3
      Playing MIDI files via EMU8000
      IRQ/DMA troubleshooting

Crimes against music:  forced resampling

When PC audio moved from the ISA bus to PCI, DOS compatibility was broken and music started getting mangled for no good reason.  What was to like about it?  It was a non-upgrade that screwed us up for years and from which we never completely recovered.

In the transition from ISA to PCI, and particularly with the introduction of AC'97, audio chipset manufacturers took the opportunity to drop multi-clocking from their products.  All PCM input had to be resampled to the one frequency that the hardware supported.  This was often done very poorly (the Sound Blaster Live! being a notorious example), resulting in a dramatic loss of audio quality.  However, even if it was done well, it was still an unnecessary sacrifice of audio quality.

Later developments in the sound stacks of Windows and Linux only served to put more nails in the coffin of sound quality.  Out of the box, all audio sources are resampled to a fixed rate and mixed in software.  The only thing left for the audio hardware to do is the digital-to-analog conversion.  Such a treatment is appropriate for garbage-grade AC'97, but if a sound card with a real 44.1 kHz clock is installed, it takes a lot of tweaking and workarounds to prevent CD audio from getting mangled en route from the application layer to the hardware.

This is not progress.  This is not better.  It is just dumbing down and cheaping out.

Sound Blaster 16

One of the freaking hard-to-get old Sound Blaster 16s with bug-free MIDI.  It was broken on arrival but it made a pretty picture.

Enough has been written about "the" Sound Blaster 16 (SB16) that I won't repeat it all here, but it's important to note that "the" SB16 is really a bunch of different models that evolved in several important ways over a span of about 5 years.

Less importantly:  the volume wheel went away and a separate line out jack was added; ASP/CSP went away; the cards got smaller and the chip count got lower; jumpers gave way to ISA PnP; words like Value, PnP, Vibra, Pro, and WavEffects came and went; finally, the SB16 name was applied to some PCI cards that are completely different.

Configuration for non-PnP cards

Sound Blaster 16s have five fiddly settings that are frequently configurable:  the base I/O port address, the MIDI (MPU-401) I/O port address, the IRQ number, the 8-bit or "low" DMA channel, and the 16-bit or "high" DMA channel.  In practice, the default and correct answers for these are nearly always 220, 330, 5, 1, and 5, respectively.  A non-PnP Sound Blaster will usually have jumpers for each one; however, I have a CT2800 non-PnP VIBRA 16 where all but the base I/O address are hardwired to the default values.  (It does have jumpers to select the IRQ and port address for the included IDE interface.)

MSEL:  MIDI port = 330h.  DAS0, DAS1:  low DMA = 1.  DBS0, DBS1:  high DMA = 5.  IS0, IS1:  IRQ = 5.
IFSD, APSD:  no CSP.  JYEN:  joystick enabled.  IOS0, IOS1:  base address = 220h.
On models that have a volume wheel and no line-level output there should be jumpers to convert the speaker-out into a line-out.  You move each of OPSL and OPSR from pins 2 and 3 to pins 1 and 2.

Some models furthermore have jumpers to choose a port and IRQ for the IDE or SCSI interface, or if you're lucky to disable it.


Linux prints no log messages during boot to acknowledge that a non-PnP Sound Blaster is present.  You just have to load the ALSA module and specify the magic numbers thusly:

modprobe snd-sb16 isapnp=0 port=0x220 mpu_port=0x330 irq=5 dma8=1 dma16=5

The module needs no parameters to detect PnP cards.


In DOS the magic numbers are specified in the BLASTER environment variable, which Creative's INSTALL.EXE program will normally configure for you.  I got tired of their installation process and now have a merged Sound Blaster drivers collection in C:\LOCAL\SNDCARDS\SB.

REM Non-PnP Sound Blaster 16
SET BLASTER=A220 I5 D1 H5 P330 T6
REM For PnP, DIAGNOSE /S initializes BLASTER based on the hardware config.
REM For non-PnP, DIAGNOSE /S initializes the hardware based on BLASTER!
REM This is necessary.

Besides playing .wav files and audio CDs like you would expect, Creative's PLAY.EXE (Play Utility Version 1.03) can play .mid files to the OPL3.  It's not great, however.

The hanging note bug

If using the Wave Blaster header or external MIDI, most SB16s suffer from the infamous hanging note bug.

From Great Hierophant:  "Look at the chip marked Creative Technology CT1471.  That is the DSP chip and the version number is on it and starts with V4xx.  If it's V405 or below, you don't have the bug.  If it's V411, V412 or V413, then you do."

Later model ISA Sound Blasters that don't have a chip marked CT1471 are all affected except AWE64 cards, which don't have Wave Blaster headers.

The problem only happens when PCM and MIDI are used at the same time, so some people work around by using separate SB16s for PCM and MIDI—but then you have to mix the outputs somehow.

Sound Blaster AWE64 Gold

Bling bling.

S/PDIF output

Be warned:  If you are unlucky enough to have one of the hardware configurations that generates clicking or crackling artifacts in audio, it will be even more annoying on S/PDIF.  I encountered that problem with the VIA Apollo MVP3 chipset.

The AWE64 Gold was supposedly shipped with an extra bracket to give you an RCA jack for S/PDIF output, but everybody on EBay apparently threw that out along with the other "bonus parts" like the drivers CD.

HOWTO:  Make a coax S/PDIF output bracket

If you're not in the mood for soldering, a CA-1 cable from HT Omega can be made to fit the AWE64 Gold header by snipping plastic bits off the front and back of the otherwise flat 2-pin connector.  It is not a pretty or robust solution, as the cable just runs out the back of your case and there is nothing to stop the connector from being yanked off the sound card, but it gets the job done.

Close enough.
CA-1 plug, before modification
The jack that it does not fit

Linux (as of kernel 3.4.4)

modprobe snd-emu8000-synth

To get S/PDIF output, first you have to set the volume, bass and treble controls for "Synth" to reasonable values.  The defaults that I got had the volume set to zero, bass and treble set to weird.  Then you have to send the music to device 1 instead of device 0.

dave@K6-2:~$ ./alsacap
*** Scanning for playback devices ***
Card 0, ID `S16', name `Sound Blaster 16'
  Device 0, ID `SB16 DSP', name `DSP v4.16', 1 subdevices (1 available)
    1..2 channels, sampling rate 4000..44100 Hz
    Sample formats: S16_LE, U16_LE
      Subdevice 0, name `subdevice #0'
  Device 1, ID `Emu8000 PCM', name `', 1 subdevices (1 available)
    1..2 channels, sampling rate 4000..48000 Hz
    Sample formats: S16_LE
      Subdevice 0, name `subdevice #0'

dave@K6-2:~$ aplay -Dhw:0,1 LegitMusic.wav
Playing WAVE 'LegitMusic.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo

alsacap.c by Volker Schatz.  A similar, but less detailed, listing of devices can be obtained via aplay –l.

See here about playing MIDI.


REM CTCM will set BLASTER based on CFG.
REM DIAGNOSE and CTCU are unnecessary once configuration is stable.
REM CTCU search-and-replaces *ALL* BLASTER settings in AUTOEXEC.BAT.

DOOM and Duke Nukem 3D can play music either in Sound Blaster mode or in General MIDI mode.  The former is to be avoided because AWE64s have only Creative's lousy clone of the OPL3.  The latter gets you the ROM sound font, which is hardly stellar as sound fonts go.  The TSR that is required to load and use other sound fonts from DOS (AWEUTIL) appears to be incompatible with protected-mode games.  TBD:  see if AWEUTIL even works with simple .mid players.

The music from DOS DOOM comes over S/PDIF regardless whether it is set up in AWE32 or SB16 mode, but the sound effects do not.  Same with DN3D, even when the mixer rate is set to 44 kHz.

I could not get Mpxplay 1.59b to output over S/PDIF.


You can load arbitrary SF2 sound fonts and have them work from DOS games in W98SE, but you need the AWE Control app from the full Creative drivers CD and some luck to do it.  Also, the "AWE64G MIDI Synth" might need to be selected from the MIDI tab of Control Panel → Multimedia → Multimedia Properties.  Its default choice is "Creative Music Synth," which is that terrible generic OPL3 one.

The General MIDI routing from DOS games under W98SE is fragile and flaky.  Sometimes it just starts working after a reboot; sometimes it doesn't.

When browsing for sound fonts, AWE Control won't see them unless the file type filter is changed to "All Files (*.*)," and then the change takes effect only upon entering a directory (so if you're there already you have to leave and come back).

The default sound font that the drivers CD installs is a 3.5 MB GM sound font called gm35revc.sf2.  This one is closer to Sound Canvas and better for DOOMing than 4GMGSMT.SF2.

When it all works, DOOM and DN3D have their choice of synths:

  1. In Sound Blaster mode you get the Creative OPL3 clone.
  2. In AWE32 mode you get the EMU8000 ROM sound font.
  3. In General MIDI mode you get the EMU8000 with whatever sound font was loaded by AWE Control or potentially some other synth that was selected in Multimedia Properties.  (Switching synths that way is one of the flaky things.  Sometimes it just won't take, for reasons unknown, and some softsynths don't work with DOOM/DN3D at all.)

General overview on GUS sound fonts

2015-02:  This topic is complicated and took a long time to sort out, so be careful with the following.

Gravis UltraSound (GUS) series cards use two different sound font mechanisms:

  1. The original mechanism, and the only one supported by the GUS Classic, stores the sound font as directory full of .PAT files.
  2. The new mechanism, which was introduced with the GUS PnP, stores the sound font as a single large .DAT file paired with a smaller .FFF file.  Sound fonts in this format appear to be usable only by Windows apps.

The following subsections address the two mechanisms in more detail.

PAT sound fonts

The final revision of the default, stock, Gravis collection of PAT files appears to be the one included in the GUS PnP drivers for backward compatibility purposes.  It differs from the collection included in Version 4.11 of the "old series" GUS installation disks by the addition of C550KC_1.PAT, C550SN10.PAT, C550SN_6.PAT, C550VIBS.PAT, and RINGWHSL.PAT (for whatever they're worth).

The ULTRADIR environment variable must be set such that the PAT files reside in a subdirectory of that called MIDI (i.e., in %ULTRADIR%\MIDI).

The mapping from MIDI instrument numbers to PAT files is sometimes given in a file called ULTRAMID.INI.  One of four mappings is selected depending on whether you have 256 KiB, 512 KiB, 768 KiB, or 1 MiB of on-board memory.  However, the "default" ULTRAMID.INI file that is installed with the DOS drivers is used by neither DOOM nor DN3D.  DOOM gets its mapping from the WAD file (and mangles it), while DN3D comes with its own ULTRAMID.INI file in the game directory.

The naming of ULTRAMID.INI derives from the ULTRAMID.EXE TSR that some games use to interface with the hardware.  The binaries for DOOM and DN3D have equivalent functionality built-in, making the TSR unnecessary.

The ULTRAMID mapping mechanism is not the only one in use:

I got the impression that one should be able to disregard the 1 MiB limit of the GUS Classic when replacing PAT files for a GUS PnP, but it didn't work that way.  The only replacement patchset that worked for me was Pro Patches Lite 1.61, which carefully remains under 1 MiB.  I am guessing that the ULTRAMID-equivalent code in DOOM is hard-coded to drop instruments whenever loading them would exceed 1 MiB of memory usage.

In any event, the sound font quality could be improved only so much given the limitations of the PAT format.

DAT/FFF sound fonts and Windows

The GUS PnP came with a CD that included 1 MiB and 4 MiB .DAT sound fonts.  Utopia provided both 8 MiB and 16 MiB replacements.  Any of these can be used to play MIDI files within Windows, but I have had no success in using them for DOS games.

The Windows drivers for the GUS PnP, which are VxD drivers developed originally for Windows 95, superficially resemble the Windows drivers for other sound cards that route General MIDI output from DOS box applications to the Windows MIDI synth.  Unfortunately, this is not the case with the GUS PnP drivers.  DOOM music goes silent when sent to General MIDI, and DN3D setup reports that it failed to detect an MPU-401.

When Gravis UltraSound is selected as the music device, DOOM and DN3D both utilize the directory of PAT files regardless what sound font is selected in the UltraSound Properties configurator app.  They operate the card in GUS Classic mode, bypassing the Windows MIDI device.

Collections of PAT files can be converted to DAT format with the GIPC tool, but there is no reverse conversion.

Gravis UltraSound Plug & Play Pro Version 1.0

Although it's not marked as such on the board, evidently this is a Pro:  it detects 2.5 MiB of memory.  According to random internet listing, the chip marked HM514260ALJ7 is 512 KiB of 70 ns FPM RAM.

While an unmodified GUS PnP supports at most 8.5 MiB, they can be upgraded to 16 MiB with a hardware mod.  Some clone cards might support 16 MiB out of the box (?).

The jumpers are best left alone.  After installing 2 × 4 MiB 60 ns non-parity "Enhanced Page Mode" SIMMs, the UltraSound Properties Windows app detects 8.5 MiB in 4 banks as shown; but if the jumpers are changed to the other configuration that is supposedly necessary to use 4 or more MiB on some cards, the SIMMs are detected in banks 0 and 1 and the other two banks show as empty.


DOS setup for this card is infamous if not epic and deserves its own page.

As of 2014-01-18, the information provided in the Vogons Wiki page for this card is not too shabby.  Most importantly, you do need the drivers in PNPV22B.ZIP and the collection of GUS patch files in SETRAM.ZIP, and you must remember to move those patch files into C:\GRAVIS\ULTRASND\MIDI from the unhelpful place that they extract to by default; otherwise you simply get no music and no explanation from DOS games that are expecting the GUS Classic.

The MIXER.EXE program that comes in PNPV22B.ZIP does work, but it's non-obvious how make mixer settings non-interactively from AUTOEXEC.BAT.  A FAQ says to use the mixer from the Reveal Wave Extreme32 as a substitute, but I haven't been able to locate it.  TO DO:  write a command-line mixer control.

I may have jinxed myself by testing this card on a motherboard with the VIA KT133A chipset, which is known to have DMA issues, but it seems to be completely incompatible with the normal UDMA operation of UIDE (rev. 2014-01-12).  Adding the /E switch to force UIDE to use BIOS calls works around the problem, as does using just UDVD2 (from the same drivers collection) instead of UIDE.

Compatibility with apps that support the GUS Classic:

The simple PLAY.EXE program that comes in PNPV22B.ZIP is able to play both MIDI and WAV files, but it seems hard-coded to use the ROM soundfont.

IWSBOS or MegaEm is required for Sound Blaster or General MIDI emulation in DOS.  General MIDI emulation might plausibly allow the use of arbitrary sound fonts loaded into the card's RAM if it's not hard-coded to something else, but just like with AWEUTIL, it's moot because the damn thing never works.  IWSBOS 1.43 works poorly at best and not at all with protected-mode games.  I have never gotten MegaEm 3.11 even to load; it always complains about the memory manager and quits immediately.  Usually the complaint is "EMM incompatibility problem: Unable to expand servers Page Directory."  I've tried all kinds of EMM386 and clones with no success; not even loading the Windows 95 versions of HIMEM and EMM386 under Windows 98 SE made any difference.  I think it must need Windows 95 or DOS 6.22.


modprobe snd-interwave

The first time I tried it, the ALSA driver failed to initialize with the mysterious "Error! IRQ isn't defined."  Using the source, I discovered that the driver expects the UltraSound IRQ to be one of 2, 3, 5, 7, 9, 11, 12, or 15.  The problem was, the PnP driver had put the card on IRQ 10.  Both 4 and 10 are supported by the hardware, albeit in a more roundabout way than the other IRQs.  After some dinking in PnP BIOS the card got assigned a different IRQ and the problem went away; subsequent accidental patching of the GUS's firmware then made it impossible for it to reoccur, as IRQ 10 was removed from the list of acceptable PnP IRQs.

The synth device is exposed by ALSA, but aplaymidi can only play silence because there is no patchloader.  Duh.  The older playmidi program worked at some point with OSS, but with a modern kernel and OSS emulation from ALSA I got stuck at the error "No playback device found."  The OSS GUS driver no longer exists in the kernel.


First the base drivers must be installed from PNPV22A.ZIP, then other stuff like the 4 MiB sound font can be installed from a separate CD.  Here is the autoplay menu of the CD:

There was chatter about a third-party developed WDM driver, but I have not succeeded in downloading it from anywhere.

Gravis UltraSound "Classic" Rev. 2.4


The Classic is easier to get working than the GUS PnP.  The installer/setup in GUS411.ZIP asks for only one screenfull of magic numbers instead of three, automatically installs the patch files in the right directory, and sets ULTRASND correctly on the first try.  The only thing it does wrong is choose 8-bit DMAs by default.

With the GUS PnP, the DOS mixer app is lousy.  With the GUS Classic Rev. 2.4, you simply have NO MIXER.  The volume is on the loud side and can't be adjusted no way, nohow except by lowering the source.  (It's kind of funny that Advanced Gravis would be years ahead of their time on the other technical capabilities and yet didn't think that a basic volume control was important.  Maybe it's a feature to avoid the old "stupid user set the volume to zero" problem.)

While the GUS PnP comes with a single PLAY.EXE command-line player for all file formats, the "old series" drivers come with separate PLAYMIDI and PLAYFILE applications for .MID and other formats (including .WAV) respectively.  PLAYMIDI has a really cool display.

Compatibility issues:

Other observations:


modprobe snd-gusclassic

Same story as the GUS PnP for MIDI; the device is there but we have no patchloader.

TO DO:  write a patchloader.



Compaq Ultra Sound 32 Pro

2015-01:  This is what made me buy that as-is wholesale lot from EBay.  It's an OEM clone of the GUS PnP Pro that was produced by STB Systems and used in the Compaq Presario 8000 series.  Significant hardware differences from the GUS PnP Pro include:

I haven't yet found a SIMM for it that doesn't cause problems.  With a 1 MiB 70 ns FPM parity SIMM, MIDI music played but was very noisy.  A 4 MiB 60 ns non-parity "Enhanced Page Mode" SIMM seemed to work at first, but it turned out to be the cause of DN3D music failing more often than not.  It sure would be nice to have some documentation of what it is expecting.  The standard GUS PnP SETUP.EXE, which includes a memory test, won't run.

Overall, this is very close to a GUS PnP, but there is something wonky about stereo voice, like it's partly out of phase or something, and the balance is completely off on the CD analog audio input.  Maybe a hardware failure.

Linux (3.13.6)

Fortunately, ALSA does have a driver for this variant.  The bass and treble controls even work.  modprobe snd-interwave-stb


It's a problem.  The OEM drivers are poorly-preserved abandonware; the ones that I found treat DOS only as an afterthought to Windows 95 and didn't even work right in W95.  Nevertheless, my "working" configuration incorporated some stuff from ("InterWave Software Version 2.34") in order to initialize the TEA 6330T to an audible volume at boot time:

I found no way to configure the TEA 6330T to anything except reasonable defaults in DOS.  The most hopeful thing I encountered was this app among the "DOS Drivers & Files" subdirectory of a different putative Windows 95 dist:

- TEA6330.EXE   Tone control initialization application

Alas, it does absolutely nothing.

Apart from that, most of what was said for the GUS PnP goes for this card too.  UIDE still causes problems even though this was tested on an Intel chipset.  With normal UIDE settings, DN3D triggers a spontaneous reboot immediately and Mpxplay does eventually.  If /E is specified, DN3D locks up at "Loading...".

SB Pro 2.0 clones

Clones clones clones clones clones clones clones clones:

Crystal CS4235, CS4237B, CX4237B

AOpen AW35 Pro with CX4237B controller/codec + CS9236 ROM-based wavetable synth
Typical integrated audio

2014-08:  Crystal audio chips in the series from CS4235 through CS4239 appear frequently as the integrated audio on motherboards, where they provide Sound Blaster Pro 2.0 emulation, a hardware OPL3 clone, and real DOOM compatibility in a humble package, on the ISA bus with PnP.  Discrete sound cards based on these chips are not as common as Sound Blasters and OPTi-based cards but they are gettable.

Unfortunately, the most common variant seems to be the CS4235, better known as "THE BROKEN ONE" because of its glitchy FM synth.  Aside from that fatal flaw in one variant, as clones go their performance is respectable:

Chip-specific details follow:


  • CS9236 is a hardware wavetable synth that works as General MIDI in DOOM and DN3D.
  • Its ROM soundfont is typical of old 1 or 2 MB ROMs and has no fatal flaws:  DOOM E1M1.
  • It supports reverb and chorus, but CWDMIX has no controls related to them.
  • It sometimes gets into a state that plays off-key or with damaged instruments and needs a reboot.
  • MegaMID works to play .mid files in DOS.


  • OPL3 music from DOOM or aplaymidi is normal.  SET DMXOPTION=-opl3 does not yield stereo OPL3 music in DOOM.
  • SRS 3D sound enhancement adds depth to DOOM sound effects, but it unhelpfully applies to the wavetable synth too.
  • It sometimes gets into a state that garbles OPL3 music and a power cycle is needed to reset it.
  • Nobody talks about the CX variant, but there it is; CX versus CS differences are unknown.


  • OPL3 music from DOOM or aplaymidi is GLITCHED.  In DOOM, the volume fluctuates strangely as if the music were interfering with itself.  In aplaymidi, the output is sometimes similar to that from DOOM; other times it is blatantly broken and completely messed up.
  • A 3D effect of some kind can be enabled from alsamixer under Linux, but CW3DCTRL fails with "ERROR: Cannot Determine Crystal Part Information" (JQ) or "ERROR: Crystal Part Not Found" (KQ).
  • In alsamixer, there is a mysterious 3-leveled control labelled Playback that seems to work like a gain multiplier (making volume much louder).


These are the DOS drivers that worked for me:

 36859 Feb 12 1997 CW3DCTRL.EXE   from  3D configurator v. 1.80
  8676 Feb  4 1998 CWDAUDIO.BIN   from   Microcode
   774 Feb  4 1998 CWDAUDIO.INI   from   Init file
 79616 Oct 12 1998 CWDINIT.EXE    from   Initializer v. 2.841x
239320 Oct 12 1998 CWDMIX.EXE     from   Mixer v. 2.841x is the "VxD Driver for CS4235" distribution that is still available direct from Cirrus Logic.  (Thank you, Cirrus!)  It contains a 3D configurator, CWD3DSND.EXE, that only runs under Windows.  I replaced it with a DOS-compatible version from an older drivers bundle ( found in the VOGONS archive.

At some point, CWDINIT apparently created a file CWDAUDIO.WCM that contains the same configurables as CWDAUDIO.INI.

Although the port/IRQ/DMA resources can be configured by a PnP BIOS, CWDINIT still has to run before Sound Blaster Pro emulation will work right.  Verbose output from CWDINIT /V (with CS4237B-KQ):

CrystalWare(tm) Audio Initialization Utility, Version 2.841x
Copyright(c) 1997 Crystal Semiconductor Corp. All Rights Reserved.

  *  Testing for SIS IOCHRDY chipset.
  *  Found PCI BIOS.
  *  Making sure Crystal chip is in wait for key state.
  *  Plug N Play BIOS Detected.
  *  Card has been configured using a Plug N Play Bios
     with the following settings:
     WSS: I/O =  534,  IRQ =   5,  DMA0 =  1,  DMA1 =  0.
     OPL3: I/O =  388,  IRQ = Disabled.
     SBpro: I/O =  220.
     Joystick: I/O =  200
     Control: I/O =  FF8,  IRQ = Disabled.
     MPU-401: I/O =  330,  IRQ =   9.
     Logical device 4 disabled.
     PNP Read Address: IO = 213.
  *  Modifying blaster environment variable.
  *  Loading Minicode
  *  Downloading Firmware Code, Version 17.
  *  Both Crystals and DMA timing on.

If a PnP BIOS is present, CWDINIT will by default abstain from configuring the resources, even if the BIOS option "PnP OS" was set to Yes and the BIOS didn't do anything.  In that case, it is mandatory to use the /O (override) switch that tells CWDINIT to configure the resources to the values indicated in CWDAUDIO.INI or the sound will not work at all.

CWDINIT sets BLASTER=A220 I5 D1 T4 but does not set ULTRA16 for WSS.  Setting ULTRA16 is sometimes unnecessary, but running Mpxplay with wrong values in ULTRA16 can lock up the sound so that nothing works until a reset.

CWDMIX can run in interactive GUI or non-interactive command-line mode.  The volume control for "FM/Synth Volume" suffices to unmute both FM and wavetable.  OTOH, WSS has a separate hidden set of volume controls that CWDMIX doesn't touch.  To get sound out of Mpxplay in WSS mode one has to unmute the WSS volume explicitly, MPXPLAY -scv 85 -scs WSS.

To avoid lockups, UIDE must be run with the /E switch.  (I don't know what changed, but UIDE is now incompatible with sound cards more often than not.  It started with the GUSses, and now it's everything.)  Wait, stop the presses:  AOpen AW35 Pro moved from Via MVP3 to i845 chipset and the problem went away.  With GUS cards I had problems with both Intel (440BX) and Via (KT133A) chipsets.  Nothing is ever simple anymore.

For reference, the help screens for all three of the configurator programs follow.

CrystalWare(tm) Audio Initialization Utility, Version 2.841x
Copyright(c) 1997 Crystal Semiconductor Corp. All Rights Reserved.

Format in config.sys:

Format as executable:

                        CWDINIT.EXE OPTIONS

                           -STAND ALONE-
These options work with any other options except as specified.
    /F            ; Force Firmware Download.
    /N            ; No Firmware Download.
    /V            ; Verbose Mode.
    /T            ; No RYT support.
    /P            ; Turn off SIS chipset detection.
    /H,/?         ; Help 

The -MULTICARD- options work as a group.  May not use with other
-SINGLE CARD- options.
    /W            ; Plug N Play Operating System Boot.
    /SXX          ; Disable if OEM ID is not XX

                           -SINGLE CARD-
The -SINGLE CARD- options work as a group.  May not use with other
-MULTICARD- options.
    /A            ; DOS Game Support for Plug N Play Operating System.
                  ; Incompatible with /O option.
                  ; If run from config.sys - modifies dostart.bat.
    /O            ; Override Plug N Play
    /C[Filename]  ; Specify Configuration file.
                  ; [Defaults to CWDAUDIO.WCM.]
                  ; Usable only with the /O or /A option.
                  ; Deconfigures for Plug N Play OS.
                  ; If run from config.sys - modifies dostart.bat.
    /R            ; Resource Adjust.
    /X            ; Load resources using resource.bin.
Sound Card Mixer - Version 2.841
CrystalWare (tm) Windows95 - Release 4.05.2841
Copyright(c) 1994-1998 Crystal Semiconductor Corp.
All Rights Reserved.

     /M=(left),(right)  <0-15>    ; Master Volume
     /W=(left),(right)  <0-15>    ; Wave Volume
     /L=(left),(right)  <0-15>    ; Line Volume
     /X=(mono)          <0-7>     ; Microphone Volume
     /F=(left),(right)  <0-15>    ; FM/Synth Volume
     /C=(left),(right)  <0-15>    ; CD Volume

     /I=(L, X or C)               ; Input Select =Line, Microphone or CD
     /D                           ; Use Default values
     /S                           ; Show mixer settings
     /T=(XCTL1),(XCTL0) <0, 1>    ; Show XCTL pin settings

"XCTL pins?"  What?

CrystalWare(tm) CW3DCTRL.EXE, Version 1.80
Copyright(c) 1996 Crystal Semiconductor Corp. All Rights Reserved.

Usage: CW3DCTRL.EXE [/OFF | [/ON | /MONO | /STEREO] flags ]
        /OFF          Turn Off 3D Sound Enhancement.
        /ON           Turn On 3D Sound Enhancement (Default Mode: STEREO).
        /MONO         Turn On 3D Sound In MONO Mode --See NOTE Below.
        /STEREO       Turn On 3D Sound In STEREO Mode (DEFAULT).

          /CENTER:X   Set Center Gain To 'X' (range for X: min=0, max=15).
                          Default Value: 15
          /SPACE:X    Set Space Gain To 'X' (range for X: min=0, max=15).
                          Default Value: 15
          /v          Verbose Mode.
          /h, /?      Show This Usage Statement.

Example For Crystal CS4237B Part:

NOTE: When Mono-To-Stereo (/MONO) Mode Is Enabled, Stereo Signals
      Are *Not* 3D Enhanced.

Linux (as of kernel 3.15.8)

modprobe snd-cs4236

For the AOpen card, aplaymidi –l shows:

 Port    Client name                      Port name
 16:0    CS4237B                          CS4237B MIDI
 17:0    OPL3 FM synth                    OPL3 FM Port

Shockingly, aplaymidi –p 16:0 does access the wavetable synth.  Less shockingly, the music is all messed up (timing is broken).

The MPU-401 UART device only wants to PnP to IRQ 9, 11, 12, or 15.  With 9 being ACPI, 12 being the PS/2 mouse, 15 being the second PATA channel, and USB, VGA, and Ethernet all competing for 11, I had to resort to the PnP BIOS and setting "PnP OS" to No to free up IRQ 11 for the MPU-401.  Don't bother—the music is just as messed up with or without an IRQ.  Yet another broken kernel driver.

sbiload + aplaymidi works nominally for the OPL3 clone.

Where the DOS mixer had just one combined volume control for both synths, alsamixer shows three, called Synth, FM, and Wavetable—plus DSP.  ???

ESS AudioDrive ES1868F (PnP)

This chipset is a Sound Blaster Pro 2.0 compatible like so many others.  A second DMA channel is used only for full-duplex operation.

Differences among ES1868F cards:

Linux (as of kernel 3.11.4)

modprobe snd-es18xx

With a daughterboard installed, MIDI is played by sending it to port 16:0, and the Aux control in alsamixer controls the synth volume.  The synth channels are reversed just as they are in DOS.

 Port    Client name                      Port name
 16:0    ESS AudioDrive ES1868            ESS AudioDrive ES1868 MIDI
 17:0    OPL3 FM synth                    OPL3 FM Port


2013-10-03:  ESS quit supporting their legacy products some time between 2008 and 2013.  The necessary drivers are now abandonware.

The archive contains the PnP configurator ESSCFG.EXE and the mixer program ESSVOL.EXE, which are sufficient to get everything except for the IDE CD-ROM header working.

31119  Jan 10 1997  ESSCFG.EXE

ESSCFG Version V5.1
Change AudioDrive ES1868 settings.

   ESSCFG [/?] [/V:1] [/I:xx] [/D:xx] [/A:xx] [/B:xx] [/J:xx]

   no option        Interactive mode.
     /?             Display this message.
     /V:1           Turn on messages.
     /I             Change IRQ setting.
     /D             Change first DMA channel setting.
     /E             Change second DMA channel setting.
     /A             Change base address.
     /B             Change MPU-401 base address setting.
                      xx=d to disable MPU-401.
     /J             Change Joystick setting.
                      xx=d to disable joystick.
                      xx=e to enable joystick.
     xx             New setting.

12543  May 28 1996  ESSVOL.EXE

Change AudioDrive volume settings.

   ESSVOL [/?] [/v:xx] [/l:xx] [/w:xx] [/m:xx] [/c:xx] [/s:xx] [/a:xx]

   no option        Display all volume settings.
     /?             Display this message.
     /v             Change master volume.
     /l             Change line volume.
     /w             Change wave volume.
     /m             Change mic volume.
     /c             Change CD volume.
     /s             Change Synthesizer volume.
     /a             Change AuxB volume. [ES1688 and above only]
     /p             Change PC Speaker volume. [ES1688 and above only]
     xx             Volume.  Note: no xx means 0
   The value range of volume is 0 - 15. [PC Speaker volume range is 0 - 7]

However, since I am using this card on an old 486, I actually need the IDE header to work.  Yet again, I found that I had to complete a drivers installation under Windows just to extract an older DOS program.  Buried within, in a Microsoft-specific compressed format, is the small DOS driver that simply turns on the IDE interface.

1414  Aug 9 1996  ES1868.COM

ESS IDE CD-ROM controller ( ES1868 ) enable program V4.4
Copyright (C) ESS Technology, Inc. 1995-1996


; DVD-ROM activation, part 1.
; If JEMMEX is used, ES1868.COM must precede JEMMEX.EXE to avoid a crash.


REM DVD-ROM activation, part 2.

REM Audio and joystick configuration.
C:\ESS\ESSCFG.EXE /A:220 /I:5 /D:1 /E:3 /B:330 /J:E
C:\ESS\ESSVOL.EXE /V:8 /L:0 /W:8 /M:0 /C:8 /S:8 /A:0 /P:0
REM Large card:
REM   A = FM & wavetable
REM   C = CD audio
REM   Voice apparently controlled only by master volume, V
REM   /V:5 /L:0 /W:0 /M:0 /C:10 /S:0 /A:14 /P:0
SET BLASTER=A220 I5 D1 P330 T4

Mpxplay –sct says:

ESS : soundcard found (type=688B) : SET BLASTER=A220 I5 D1 H0
SBP : SB-pro card found : SET BLASTER=A220 I5 D1 T4

Yamaha OPL3-SA3 (PnP)

Yamaha identifies all of YMF701, 711, 715, 718, and 719 as OPL3-SAx.  I have tested examples of the latter two.  The YMF718 card arrived dirty and damaged with a hole punched clear through the top of one capacitor as part of an as-is wholesale lot from EBay.  The Labway YMF719B card I bought in an attempt to get a usable waveblaster header.

Linux (3.13.6/4.7)

The module is snd-opl3sa2.  WSS music and OPL3 MIDI both work, although with the YMF718 the channels are reversed and aplaymidi produces repeatable glitches.


Here we go again.  The DOS drivers can't be obtained without first installing Windows.  They show up in Program Files/YAMAHA/YAMAHA SAx Driver after an installation of the 95v2343.exe package available from Yamaha.

Having jumped through that hoop, the YAMAHA SAx Setup Utility 2.20 (SETUPSA.EXE) does work, albeit with the inconvenient behavior of trashing AUTOEXEC.BAT each and every time the card is initialized.  Stupid workaround is stupid:


The resource configuration and mixer settings are all stored in OPL3SA.INI, which is created or modified if SETUPSA is run without the /S.

Mpxplay –sct says the following:

WSS : soundcard found : SET ULTRA16=530,0,0,0
SBP : SB-pro card found: SET BLASTER=A220 I5 D1 T4


W98SE comes with workable drivers for this card.  Yamaha's driver package adds an "XGlite" software synth that can be accessed as General Midi from DOOM or DN3D.  Although it's better than OPL3 General Midi, it's no match for a DS-XG.  It's also very quiet, requiring extreme mixer settings for balance.

OPTi 82C931

2014-06:  OPTi chips were used on off-brand cards that are anything but rare.  I tested two of these that came in the as-is EBay lot.  In PnP they identify themselves as "OPTi Audio 16" and request separate DMAs for record and playback.

ExpertColor MED3931 Ver. 2.0 without this logo sticker covering the OPTi chip → BTC 1817DS

Both cards have only a single output jack, both cards swap the left and right channels in most contexts, and both cards have lackluster bass response.  Noted differences:

On the good side, the FM synth is as loud as voice and isn't obviously glitchy.  However, after initial success it became obvious that some of the instruments are just bad and wrong for music that was tuned for a genuine OPL3.  It is a working clone technically, but because of the mismatched instruments I find it unacceptable.

Linux (3.15.0)

Module snd-opti93x works in WSS mode except that it disables the record DMA with the log message "WSS dma2 # 3 not valid."  This message comes from sound/isa/opti9xx/opti92x-ad1848.c.  The problem is that PnP assigns DMA 3, but the module thinks that the only valid choices are 0 and 1.

sbiload + aplaymidi works without glitches except that the channels are backwards.  The channels are not backwards when tested with speaker-test -b 8192 -c 2.

On the BTC card, CD analog audio connected to the white header showed up on the Mic input.  On the MediaColor card, CD analog audio connected to the black header showed up as CD.


BTC still has drivers for download, but I used drivers from VOGONS for both cards.  Yet another case of DOS drivers buried within a Windows executable.  Running SETUP.EXE under W98SE causes working DOS drivers to extract to C:\OPTI931, but may trash W98SE since this package was for Win3.1.  (I wiped W98SE immediately after getting the DOS drivers out.)

The configurator SNDINIT.EXE (OPTi 82C931 Testing & Configuration Program v2.04) won't run until the SOUND16 variable is set to the path of the drivers directory.  It is relatively nice, providing menu-driven configuration of resources, a mixer, and a sound test.  It does, however, modify AUTOEXEC.BAT without asking.  Once the desired settings have been saved to SOUND16.CFG and VOLUME.CFG, running SNDINIT.EXE /B in AUTOEXEC.BAT suffices to initialize the card on each boot.


SNDINIT makes you choose between SBPro and WSS modes at configuration time.  Having chosen the former, Mpxplay –sct detects only SBP.

Like the GUSses, both cards cause hard lockups if UIDE is used in its normal UDMA mode but are OK with UIDE /E.

DOOM and DN3D are playable but the channels are backwards.

Mpxplay at startup often experiences a glitch where it starts playing at a very slow sample rate.  Exiting and restarting it with no command-line switches seems to purge the problem, but it recurs.

Here's a surprise:  SET DMXOPTION=-opl3 does yield stereo OPL3 music in DOOM and the channels are not reversed, but the left side guitar is quiet and glitchy-sounding.


W98SE does not install drivers for these cards by default, but the install CD includes working drivers under drivers/audio/opti931.  There's nothing special about them.  W98SE's terrible OPL3 general MIDI synth is left unchanged and the channels are still reversed.

The drivers for W98SE on the BTC site include a 4 MiB file called Gmbank.iss, but after installing them manually (after following the instructions didn't work) I did not end up with a better softsynth, and I couldn't play a wav file without the music breaking up.

OPTi 82C930


Another card where the jack labels are blocked by the case.  Duh.

2015-12:  Despite the prominent MegaImage32 label on the back, I still cannot identify this card with any well-known make and model.  It includes a genuine OPL3 as well as a hardware wavetable synth with a respectable 512 KiB ROM soundfont:  DOOM E1M1.  (See the equivalent MPB-000028 daughterboard here.)

Linux (4.3)

Despite appearances, the card is not PnP.  Parameters are needed to make the module load.

modprobe snd-opti93x isapnp=0 irq=5 mpu_irq=7 dma1=1 fm_port=0x388

aplaymidi –l

 Port    Client name                      Port name
 16:0    OPTi 82C930                      OPTi 82C930 MIDI
 17:0    OPL3 FM synth                    OPL3 FM Port


I used these Vogons drivers.  Setup using SNDINIT.EXE ("OPTi 82C930 Testing & Configuration Program v1.04") was very similar to that of the 82C931.

Analog Devices AD1812JS SoundPort

2014-09:  I can't tell who made this.  The grantee code of the FCC-ID indicates Great Concept Development Ltd. of Hong Kong.  The product code doesn't appear in the database.

The OPL3 clone on this card is actually good, providing better definition of different instruments than an OPL3 does.  On the downside, it doesn't work right with DN3D, and it's apparently an obscure chipset for which drivers are hard to find.

Linux (3.16.3)

Doesn't work.

There is no driver for AD1812.  The closest one, snd-ad1816a, doesn't work and continues not working even after ad1816a.c is hacked to recognize the device ID (replacing ADS7150/ADS7151 with ADS7140/ADS7141 in pnp_card_device_id).

After setting "PNP OS Installed" to No in BIOS setup and loading snd-sb8 with manually specified resources, ALSA still doesn't see the device.  Possible kernel regression here.


As-is, Windows didn't recognize the card but proceeded to load generic SBPro and OPL3 drivers:

That partly worked, but wav music in Windows Media Player was mangled.

Trying again using VxD drivers from the Windows 95 PnP Driver Package V1.1 ( that I found on a random FTP site, the card was better recognized:

Wav music in Media Player was no longer mangled, but there was now a noticeable echo or reverb effect for which there was no control to turn it off.  MIDI files played by Media Player came out with reversed channels.  The channels were correct everywhere else.

With either set of drivers, DOOM worked fine and SET DMXOPTION=-opl3 worked to get stereo music.  The sound tests in DN3D setup sounded right but in the game itself the music was glitched.


I can't actually download anything from Driver Guide.  It always pushes an unknown executable instead of the zip file that I asked for.

With "PNP OS Installed" set to No in BIOS setup and no drivers the card functions as an SBPro 2.0 in Mpxplay, DOOM, and DN3D.

With an MVP3 motherboard it was necessary to use the /E switch with UIDE to avoid lockups when any app tried to initialize sound.

Logitech SoundMan Wave

2016-02, testing with 440BX motherboard.

This PnP card uses a Media Vision chipset.  The MVD1216 (Jazz16) and MVA416 chips are the same as on the Media Vision Pro Sonic 16, but the mixer is a Sierra SC18076 instead of the MVA514 (ICS2514) that Media Vision used.

Its Sound Blaster Pro emulation has been the subject of some complaints.  Logitech's marketing brochure stated boldly "100% Sound Blaster, Sound Blaster Pro, and AdLib compatible," but their technical reference said only "full SoundBlaster compatibility" and recommended a BLASTER setting of T1 (original Sound Blaster).  Both documents are included in the PDF file here.  In addition, a FAQ from Logitech (Customer Support Document #3120) that was bundled into the DOS drivers packet on VOGONS emphasized "NOT Sound Blaster Pro compatible."  Despite all that, the SBPro emulation mostly worked for me (in DOS).

The unusual 5-pin connector for CD audio appears on several Media Vision cards.  As shown above, from left to right, the pins are GRGLG.



The OPL4 (YMF278B-F) comes with a 2 MB ROM soundfont (YRW801-M):  DOOM E1M1.  I notice that the drums are louder in the recording on AmoRetro that was made from a Miro PCM1 Pro.

For once, pitch bending works exactly like it should.

Interestingly but inconveniently, the MIDI interpreter is not hardwired.  Code for the 8031 microcontroller has to be uploaded at boot time.


Gaah.  Evidently this card works or worked with OSS as there are specific instructions for it in Documentation/sound/oss/README.OSS, even including how to upload the MIDI interpreter code to get the wavetable synth working.  Unfortunately, it doesn't work with the Jazz16 driver that was ported over to ALSA.  To get the module to load I had to specify the port manually:

modprobe snd-jazz16 port=0x220 irq=5 dma8=1 dma16=5 mpu_port=0x330 mpu_irq=7

Having done that, the mixer was totally broken.  Alsamixer said Card: Media Vision Jazz16 and Chip: CTL1345.  After initializing it in DOS and warm-booting to Linux, I got sound in the left speaker from PCM and the FM synth, but almost nothing from the right speaker.

Testing was done with ancient kernel version 3.2.55 because of Nvidia, but there have been no substantive changes to the ALSA driver as of 2016-02-05.


With justifiable trepidation I used the drivers that made it to VOGONS via the abominable DriverGuide.

After running INSTALL.EXE and sorting through the aftermath, the critical binaries were SMWSET.SYS ("SoundMan Wave Set Release 1.00") to upload the MIDI interpreter code MIDI0001.BIN and SMWVOL.EXE ("SoundMan Wave Volume Control Release 1.00") to initialize the mixer.  SETUP.EXE can be used to change the mixer settings or resources in SOUNDMAN.INI, but it will overwrite AUTOEXEC.BAT every time.  SOUNDMAN.INI is clear and easy to edit manually.

Thanks to SMWSET.SYS, this is the only sound card where I had to put something in CONFIG.SYS to get the sound initialized.  Nothing remains in memory after it runs, so it ought to have been built as an EXE.


The installer set BLASTER to A220 D1 I5 T1 H5 P330.  With that, MPXPLAY would enter its auto-detection routine on each run and take a very long time to conclude that it should use SBPro mode.  I changed BLASTER to A220 I5 D1 H5 P330 T4 and MPXPLAY now starts quickly and works.

PCM ("wave") volume has to be set at 50% to balance it with the synth ("MIDI") at 100% (both wavetable and FM).  The command line options of SMWVOL don't support setting different volumes for different inputs; the only way to get the desired mixer setting is to let it load as a TSR so it will initialize from the contents of SOUNDMAN.INI.  But there is no reason then to keep it in memory:  the mixer hotkeys don't actually work AFAICT.

SET BLASTER=A220 I5 D1 H5 P330 T4


The line level resulting from PCM 50% synth 100% is very low.  The level of the speaker output in this case is comparable to the maximum line level of a more typical sound card.

FWIW, here are SOUNDMAN.INI and the usage help and normal output from SMWVOL.

PRODUCT=SoundMan Wave
SoundMan Wave Volume Control           Release 1.00
Copyright (c) 1993 Logitech SA. All Rights Reserved.

SMWVOL [U] [R] [K=x] [L=x] [F=x] [M=x] [V=#,#] [B=#,#] [T=#,#]
  U         unload from memory
  R         reset mixer to defaults
  K[=x]     hotkeys:   active=0/inactive=1/toggle              (default=0)
  L[=x]     layout:    keypad=0/english=1/toggle               (default=0)
  F[=x]     modifiers: AltShift=0/CtrlShift=1/AltCtrl=2/toggle (default=0)
  M[=x]     mute:      off=0/on=1/toggle                       (default=0)
  V[=#[,#]  volume (0..100): set both/set left,right/reset
  B[=#[,#]  bass   (0..100): set both/set left,right/reset

Mixer Hotkeys
  Alt+Shift+Home     reset mixer to defaults
  Alt+Shift+End      mute toggle
  Alt+Shift+Left     balance left
  Alt+Shift+Right    balance right
  Alt+Shift+V        select volume control
  Alt+Shift+B        select bass   control
  Alt+Shift+T        select treble control
  Alt+Shift+Up       increment selected control
  Alt+Shift+Down     decrement selected control
  Alt+Shift+NumPad5  reset     selected control

MPLAY calls itself "Singing Electrons Standard MIDI File Player."  Singing electrons... standard MIDI... LOL.

Avance Logic Pro16/32+ (ALS100+)

Last one from the as-is lot!  I don't know if this is the correct name.  The chip is obviously by Avance Logic, but I have no idea what brand the cards were sold under.

This clone stands out by claiming compatibility with the Sound Blaster 16 instead of merely Sound Blaster Pro 2.0.  It does provide 16-bit fidelity without the need for WSS.  However, unlike a real SB16, it does not support 16-bit DMA.  Only DMAs 0, 1, and 3 are selectable.  Reportedly, earlier ALS100 (non-plus) cards did not have this limitation.

Did not work on i586-era PC

The first test of this card, using an Intel 430TX chipset motherboard with an AMD K6 266 MHz CPU, went badly.  FM synthesis worked OK, but every attempt to use voice either looped, hung, or failed quickly.  Cleaning those cruddy contacts didn't help.

Working results were obtained using a 440BX motherboard with a 700 MHz P3 CPU.


The DOS installer DOSINST.EXE is in the WIN31_95 directory contained within the w95_100p.exe self-extracting archive which is contained within the rar archive that is described on VOGONS as Avance Logic ALS100plus drivers DOS, Win 3.x, Win95.  All those layers of unpacking yield mercifully few important files:

260315 Mar 27  1998 A3CONFIG.EXE    Configurator and mixer
 39771 Mar 27  1998 A3INIT.EXE      Boot-time initializer
  1234 Sep  5 19:00 ALS3.INI        Saved configuration
  1859 Nov 18  1996 CDSETUP.SYS     Driver for non-existent CD-ROM header
  3714 Apr  9  1996 FMTEST.MID      Sound test
 15220 Oct 28  1998 README.TXT      Docs
 45092 Apr  9  1996 STEST16.WAV     Sound test
 27804 Apr  9  1996 STEST8.WAV      Sount test

After unpacking files and modifying AUTOEXEC.BAT to add one line and comment out all BLASTER settings, the installer will offer to run A3CONFIG.  A3CONFIG has a configurator for the resources, sound tests, and a mixer control.  Be sure to disable "IDE CD-ROM" at this point or it will mangle CONFIG.SYS in an attempt to install the unnecessary device driver.  Also, the volume on the synth has to be turned up for balance.  Settings are saved to the file ALS3.INI.




A3INIT reads settings from ALS3.INI in the specified directory and sets BLASTER to A220 I5 D1 H1 REC3 T6.  Woo hoo, T6.  A3CONFIG can be run at any time to adjust the settings, and it will not trash CONFIG.SYS provided that the CD-ROM remains disabled.

MPXPLAY detects both SB16 and SBPro.  Oddly, it chooses to use SBPro by default when the 3D effect is enabled but SB16 otherwise.

The FM synthesis is quite credible, and SET DMXOPTION=-opl3 yields non-reversed stereo music in DOOM.

Unfortunately, the card is not compatible with DN3D.  The sound FX test fails with the message "Playback failed, possibly due to an invalid or conflicting DMA channel.  Make sure the 16-bit DMA channel is correct."  This behavior continues even after the sound card type is demoted all the way to original Sound Blaster.

UIDE does not cause any problems.


modprobe snd-als100
 0 [ALS100         ]: ALS100 - Avance Logic ALS100
                      Avance Logic ALS100, Sound Blaster 16 (ALS-100) at 0x220, irq 5, dma 3&1

With kernel 3.2.55, the "3D Enhancement" control is stuck in muted state.

Wav music sounds good.  sbiload + aplaymidi works well except that the channels are reversed.

The joystick is functional but bizarrely laggy:  motions are slow to engage and slow to release.


I only attempted W98SE on the non-working configuration, so I did not complete a successful test.  FWIW:  W98SE did not auto-detect the sound card at all.  I manually installed VxD drivers from the WIN31_95 bundle and got the following devices.

Aztech Sound Galaxy Nova 16 Extra

Old Aztech cards like this one can be unambiguously identified by comparing the FCC-ID printed on the board against the list at

This quirky non-PnP card allows the base address to be selected by jumper, but other settings can be changed only using Aztech's proprietary configurator.

Often it will get wedged and cause driver failures after a warm reboot.  This problem is resolved by pressing the reset button.

Linux (as of kernel 3.13.2)

There is no auto-detection or changing of ports or IRQs in the Linux driver.  You must provide the correct magic numbers.  See sound/isa/galaxy/galaxy.c for the permissible values.  An incorrectly guessed irq results in looping music.

modprobe snd-azt1605 port=0x220 fm_port=0x388 wss_port=0x530 mpu_port=0x330 irq=9 dma1=1

I found the correct port, fm_port, wss_port, irq, and dma1 values for my card by guessing.  The working values were the same regardless whether the config mode jumper was set to EEPROM or Software and updating the EEPROM contents from DOS had no effect.

When the Aztech card is initialized, it apparently hooks IRQ 5, probably for Sound Blaster emulation but possibly for the MPU-401.  I inferred this because it broke an NE2000 that had grabbed the same IRQ previously.  To prevent conflicts with PnP cards, the sound card's resources should be reserved with kernel parameters.  The full-paranoia setting corresponding to the resources described would be pnp_reserve_irq=5,9 pnp_reserve_dma=1 pnp_reserve_io=0x200,8,0x220,16,0x330,2,0x388,4,0x530,8,0x620,16.

InterruptsI/O portsDMA
5:   XT-PIC-XT-PIC    SoundBlaster?
0200-0207 : ns558-isa
0220-022f : AZT1605
0330-0331 : MPU401 UART
0388-0389 : OPL2/3 (left)
038a-038b : OPL2/3 (right)
0530-0533 : AZT1605
0534-0537 : WSS
0620-062f : AZT1605
1: WSS - 1

The MPU-401 is as yet untested.  Two additional parameters accepted by the module are mpu_irq for the MPU-401 interrupt and dma2 for recording in full-duplex operation.  The MPU-401 interrupt remains unknown and I can't verify that this particular card even supports full duplex.

In alsamixer, PCM is Wave (as usual), Aux = CD analog, and Aux 1 = Synth.

Playing MIDI files via OPL3 is the same as with a Sound Blaster (sbiload –v 1, aplaymidi –p 17:0 blah.mid).

TO DO:  Test MPU-401 and dma2.


There is a configurator that works in plain DOS, but it was cleverly hidden inside of the Windows drivers package, which can't be extracted under DOS.

If you boot Windows and install this 3-floppy package available at

File:NOV16E-1.ZIP 	1018 KB 	06/18/2008 	06:36:00 PM
File:NOV16E-2.ZIP 	1258 KB 	06/18/2008 	06:36:00 PM
File:NOV16E-3.ZIP 	1280 KB 	06/18/2008 	06:36:00 PM

You get, among other things, a 37 kB program called HWSET.EXE in the UTILITY directory.  This one program is all you need to get the card initialized and working under plain DOS.

Mixer Control and Hardware Configuration Setting, Version 1.0
Copyright (c) 1993, AZI Labs.  All rights reserved.

Command Line Format: HWSET /[S|?] [/MR] [/MS] [/option:value ...]

**** Miscellaneous Setting ****
/S or /?  Simplified single screen help message
/MR       Reset to factory defaults
/MS       Store settings to EEPROM

**** Sound Card Mixer Volume Control ****
/VV:L,R   Set Sound Blaster Voice Volume (L = 0 -- 16, R = 0 -- 16)
/VF:L,R   Set FM/WaveTable Volume (L = 0 -- 16, R = 0 -- 16)
/VL:L,R   Set Line-In/CD Volume (L = 0 -- 16, R = 0 -- 16)
/VM:X     Set Microphone Volume (X = 0 -- 16)
/VX:L,R   Set Master Volume (L = 0 -- 16, R = 0 -- 16)

**** Sound Card Hardware Address Setting ****
/SBA:X    Set Sound Blaster Port Address (X = 220*, 240)
/MPUA:X   Set MPU401 Port Address (X = 300, 330*)
/MSSA:X   Set MSS Port Address (X = 530*, 604, E80, F40)

**** MITSUMI/SONY DMA Channel Setting ****
/CDDMA:X  Set Mitsumi/Sony DMA Channel (X = 0, 3, D -- Disable*)

**** Sound Card Interrupt Setting ****
/SBIRQ:X  Set Sound Blaster Interrupt (X = 2, 3, 5*, 7)
/MPUIRQ:X Set MPU401 Interrupt (X = 2*, 3, 5, 7)
/CDIRQ:X  Set CD-ROM Interrupt (X = 11, 12, 15, N -- None*)

**** Sound Card CD, Game Port and Sound System Setting ****
/CD:X     Set CD (X = M -- Mitsumi/Sony/Aztech, P -- Panasonic,
                      E -- All Enable*,  D -- All Disable)
/GPA:X    Set Game Port Status (X = D -- Disable, E -- Enable*)
/MSS:X    Set MSS Status (X = D -- Disable, E -- Enable*)
/MPU:X    Set MPU401 Status (X = D -- Disable, E -- Enable*)

From my working AUTOEXEC.BAT:

rem Aztech Sound Galaxy Nova 16 Extra (NOVA16E)
rem CD-ROM and MPU-401 are disabled to conserve IRQs.
rem Only IRQ 5 and DMA 1 are required.
rem (Not sure how or where DMA 1 is configged...)
C:\LOCAL\ARC\SNDCARDS\NOVA16E\HWSET.EXE /VV:14,14 /VF:14,14 /VL:14,14 /VM:0 /VX:14,14 /SBA:220 /MSSA:530 /SBIRQ:5 /CD:D /GPA:E /MSS:E /MPU:D

The status report that HWSET outputs afterward incorrectly shows all volumes at maximum (16), but setting the volume lower clearly works.

Mpxplay –sct says:

SBP : SB-pro card found : SET BLASTER=A220 I0 D1 T3

But T3 is Sound Blaster 2.0, not SB Pro.  Alas, under DOS I was never able to get anything but monophonic wave (voice) sound.  OPL3 stereo synth does work, but the channels in DOOM are reversed (in MIDIer they are correct).  The program EMUTSR.EXE (again from the UTILITY directory) purports to enable Sound Blaster Pro emulation, but all it did for me was cause the monophonic sound effects to become screwed up and fade randomly from one channel or the other.

In another touch of irony, the Windows drivers didn't even work.  They just broke the default auto-detected Windows 98 SE drivers that were working (albeit with monophonic sound effects and channel-flipped stereo MIDI).

Wave Blaster daughterboard

NEC XR385, the poor man's SW60XG

Obtaining an XG daughterboard at a reasonable price was hard enough, but then my assumption that I would surely have a sound card in the drawer that would be good enough to use with it turned out to be false.

All of my Sound Blasters had the hanging note bug.  I tried it, and yes, the problem is real.  It was bad.

Making clearance with a low-profile ESS card.  This worked as shown with the pins only halfway in, but the channels were reversed and the overall sound quality was none too good.  Some ESS cards have the header oriented vertically instead.
I thought I was out of the woods when I scored an old SB16 with V405 MIDI, but only one channel worked for PCM.  Also, from what did work I learned a new meaning for "noisy card."
The Labway OPL3-SA3 card seemed like it could be a good choice with decent sound quality and potentially correct channel assignments.  Alas, there was absolutely no way to get it far enough into the ISA slot while the daughterboard was attached.  (Tried it; the PC glitched out.)  Further application of mechanical attitude adjustment did not solve the problem, so finally I ordered a 26-wire ribbon cable.
The ribbon worked perfectly, but the channels are backwards on the waveblaster header again.  I need to swap wires 20 and 24 on that ribbon cable.

Playing MIDI files via OPL2/3


The following procedure for playing MIDI files gives poor results with a genuine OPL3 and even worse results with one of Creative's clone chips.  It's not the FM synthesis per se; it's that certain high-pitched instruments are way too loud relative to the others (have a listen).  So unless you know how to fix that (let me know!), are experimenting with the hardware, or have a very slow CPU, it is a better idea to install TiMidity++ and do it in software.

You need the program sbiload, which is included in alsa-tools in the seq subdirectory.

Important:  Edit the top level Makefile to remove all except seq from SUBDIRS.  The other tools are not necessary here and will only break the build.

Make install puts sbiload in /usr/local/bin and its stuff in /usr/local/share/sounds/opl3.  If you move the stuff, you need to make the corresponding change to PATCHDIR in seq/sbiload/sbiload.c.

Just running sbiload with no options should initialize the sound correctly.  Do sbiload –v 1 to see evidence that it has loaded std.o3 and drums.o3.

bash-4.1$ sbiload -v 1
Loading from /usr/local/sbiload-1.0.25/share/std.o3
Loaded instrument 000, bank 000: Acoustic Grand
Loaded instrument 001, bank 000: Bright Acoustic
Loading from /usr/local/sbiload-1.0.25/share/drums.o3
000: wrong instrument key!
001: wrong instrument key!
Loaded instrument 035, bank 128: Ac Bass Drum
Loaded instrument 036, bank 128: Bass Drum 1

bash-4.1$ aplaymidi -l
 Port    Client name                      Port name
 16:0    Sound Blaster 16                 Sound Blaster 16 MIDI
 17:0    OPL3 FM synth                    OPL3 FM Port

bash-4.1$ aplaymidi -p 17:0 shakira-waka_waka.mid


The PLAY.EXE that appears in some versions of the Creative drivers (Play Utility Version 1.03) will play a .mid file on a SB16 OPL3 if all is configured correctly.

An alternative is MIDIer version 2.50.  Following advice in a Vogons thread, I obtained it from the Wayback Machine archive for URL  AFAICT, it does use the OPL3 and subjectively sounds better than either PLAY.EXE or sbiload + aplaymidi.

With certain .mid files, Creative's player and MIDIer both slow down when they get to the complicated parts.

Playing MIDI files via EMU8000


You'll need the AWESFX utilities.

The EMU8000 driver in the Linux kernel for a long time had a bug that reduced the amount of soundfont memory by 512 KiB.  The problem was corrected in kernel version 3.7.

With that fix, it is now possible to load the entirety of the nominally 4 MB E-mu soundfont provided by Creative, 4GMGSMT.SF2 (4174814 B), into the on-board RAM of an AWE64 Gold.

bash-4.1$ asfxload -M /usr/local/share/soundfonts/4GMGSMT.SF2
DRAM memory left = 198 kB

bash-4.1$ aplaymidi -l
 Port    Client name                      Port name
 16:0    Sound Blaster 16                 Sound Blaster 16 MIDI
 17:0    Emu8000 WaveTable                Emu8000 Port 0
 17:1    Emu8000 WaveTable                Emu8000 Port 1
 17:2    Emu8000 WaveTable                Emu8000 Port 2
 17:3    Emu8000 WaveTable                Emu8000 Port 3
 18:0    OPL3 FM synth                    OPL3 FM Port

bash-4.1$ aplaymidi -p 17:0 shakira-waka_waka.mid

It works, both analog and S/PDIF, but the musical qualities take some getting used to.

AWE cards come with a 1 MB sample ROM.  To use it, you have to asfxload SYNTHGM.SBK (provided in SB16/SFBANK of an installation of Creative's DOS drivers).  It doesn't consume any RAM and provides a cheesier sound than the larger soundfonts (but not as cheesy as the OPL3 emulation).

Other resources for MIDI on SB AWE cards:

The kernel patch for spurious "sfxload: no memory left" is not needed for ISA cards.



IRQ/DMA troubleshooting

0. Know the rules

The standard fixed claims for 486 and newer PCs are shown in the table below.  Additional IRQs may be claimed by USB controllers, network devices, video cards, and the tertiary IDE/SCSI controllers that appear on many sound cards.  Additional DMAs may be claimed by SCSI controllers.

IRQDMANormally claimed by
3Serial port COM2 (if present)
4Serial port COM1
62Floppy drive controller
73Parallel port
9ACPI (if present)
12PS/2 mouse port
14Primary IDE (1 cable 2 drives)
15Secondary IDE

At a minimum, a sound card is going to need one IRQ and one DMA to emulate a Sound Blaster.  The most likely choices are IRQ 5 and DMA 1.  Additional IRQs may be needed for native-mode sound, the MPU-401, and/or the CD-ROM interface (tertiary IDE or SCSI controller).  Additional DMAs may be needed for 16-bit sound, full-duplex operation, and/or the CD-ROM interface.

Toward the end of the ISA era some motherboards gained I/O APICs which made it possible for PCI devices to use IRQs above 15.  These high-numbered IRQs are not useful for ISA sound cards but they reduce competition for the low-numbered IRQs.

1. Clear out the riff-raff

Unless you absolutely need them, disable the serial and parallel ports in BIOS setup.  On a typical Pentium or later PC this removes competition for IRQs 3, 4, and 7 and DMA 3.  (On a 486, you need to keep one serial port for the mouse.)

If there's nothing on the second IDE channel, disabling that frees up IRQ 15.  If you don't need the floppy drive, disabling that frees up IRQ 6 and DMA 2.

If there's a BIOS option called "Shared PCI IRQs," set it to "Share One IRQ."  I get this option with the Phoenix BIOS on a Gateway Tabor III 440BX motherboard.  When it is set to "Share One IRQ," all PCI and AGP devices share IRQ 9 instead of claiming a separate IRQ for each device.  (This BIOS does not allow reserving IRQ 9 for "Legacy ISA" as it grants a fixed claim to ACPI.)

2. Reserve the important IRQs/DMAs for "Legacy ISA"

A PnP BIOS knows nothing about which IRQs and DMAs a non-PnP ISA card intends to use and will obliviously configure a network card or other PnP card to conflict with it.  To prevent this, you have to go into BIOS setup and make sure that the relevant IRQ and DMAs are reserved for "Legacy ISA" (as Award's BIOS describes it) instead of "PCI/ISA PnP."

However, this option is also useful for PnP sound cards.  It often happens that a DOS video game, a sound card driver, or a sound card's hardware only allows certain choices of IRQs and DMAs.  So what do you do if those resources are already assigned to other PnP devices?  The "Legacy ISA" choice in BIOS PnP setup solves this problem too.

Counter-intuitively, a "Legacy ISA" reservation does not prevent a PnP card from using those resources.  It only prevents the PnP BIOS from allocating them.

Set "PNP OS Installed" to "Yes."  The BIOS will still PnP the mainboard devices no matter what (IDE controllers, USB controllers, mouse, keyboard, etc.), but it will step around the reserved IRQs and DMAs and will not initialize an ISA PnP add-in card at all.

The reserved IRQs and DMAs are now free for the taking by a PnP or non-PnP sound card.  The only difference is that the PnP card needs an initialization program to set it up while the non-PnP card is ready to go.  The "initialization program" is either a Linux driver or a DOS sound card utility like CTCM, SBINIT, SBEINIT, ULTRINIT, IWINIT, CWDINIT, ESSCFG, SETUPSA, or HWSET.

There are only two reasons ever to set "PNP OS Installed" to "No:"

  1. In desperation to get a PnP sound card working when you have no drivers for it.  If the BIOS initializes it with working resources and if the card boots with its mixer volume set to an audible level by default and you can guess the correct IRQs and DMAs for applications to use, it might work.
  2. As a workaround when Linux always gives USB, Ethernet, and VGA first choice of the IRQs and leaves nothing that the sound card or its driver are willing to take.  (The Right Fix would be to change the order in which Linux drivers are loaded so that the sound card goes earlier.)

3. Avoid non-working IRQs/DMAs

Whether some unknown device is making a stealth grab or the motherboard is just being crapulous, sometimes there's nothing you can do but use a different IRQ/DMA.


A kernel bug that broke PnP assignment of DMA channels whenever a card's first choice was unavailable persisted for 5 years.  This fix was applied in kernel 3.11.

The kernel parameters pnp_reserve_irq= and pnp_reserve_dma= are useful to prevent the Linux PnP driver from selecting IRQs and DMAs that don't work.  However, pnp_reserve_dma= only works on kernels with the aforementioned fix.


If Creative's PnP Configuration Manager Utility (CTCU) won't let you select a working DMA, it's a simple matter to manually edit the CNPNP.CFG file and change the value of Dma0 or Dma1 as needed.  I was able to get a card working by setting Dma1=6 even though CTCU would not allow it.


Bad DMA manifested as no sound and lots of hard lockups.

Control Panel → System → Device Manager → Sound, video, and game controllers → Creative AWE64 Gold 16-bit Audio (SB16 compatible) → Properties → Resources, uncheck Use automatic settings, then must change from Basic configuration 0001 to Basic configuration 0002 before it will allow you to change the DMA from 5 to 6.  (Having done that, it goes back to Basic configuration 0001 on the next boot, but the DMA setting sticks and is no longer locked...?)

4. Reduce the sound card's demands

Sound cards that use two DMAs for full-duplex operation (recording and playing at the same time) will usually fall back to half-duplex mode if the two DMAs are set to the same value.  The GUS PnP appears to allow use of separate IRQs too, but they are always set to the same value even by its own setup program.

If a sound card has an IDE or SCSI interface, disabling it with jumpers or in the setup program will free up an IRQ and potentially a DMA as well (many are PIO-only and don't use DMAs).

An MPU-401 can work in polling mode if no interrupt is allocated for it.  If you're not using it at all then look for an option to disable it.  Alternately, it might be OK to set it to the same IRQ as is used for Sound Blaster emulation.  (The GUS Classic does that by default.)

Some sound cards can use the same IRQ for native mode as for Sound Blaster emulation without a conflict.

As a last resort, where the sound card wants a 16-bit DMA you can try giving it an 8-bit DMA instead.  On SB16-type cards, you can set the high DMA to the same value as the low DMA.