You are here: The Oldskool PC/The Guides/Getting Old Software Running on Newer PCs/Sound
I love PC computer sound and music. It takes a lot of effort and patience to like PC music, to be honest, since every time you actually enjoy a warbly arpeggiated simulated chord through the speaker, or a cheezy-sounding Adlib FM soundtrack, or a snippet of 1-bit digitized sound forced through the PC speaker like a grape through a straw, people look at you funny. Real funny. It's an art to create a good soundtrack given the medium you have to work with. I have great respect for musicians who wrote music (and programmers who wrote playback code) for PCs. It's a shame that 95% of the public won't ever be able to appreciate this.
"Jim, you're rambling. What does this have to do with running my old game?" (Jim regains composure) It has everything to do with running an old game. For example, what did I just write? I wrote "95% of the public won't ever be able to appreciate this." This implies that most people don't configure their sound card when they start to play a game, since they're not really interested in the sound.
But guess what? Not configuring your sound card can come back to haunt you: some games won't run or initialize correctly until you've run their initial sound setup, even if just to specify "NO SOUND". Hah! Let that be a lesson to you. :-)
The remainder of this section is for the rest of us who actually want to hear the sound and music, but experience problems once the sound is enabled/configured. If you specify you want sound, but the game locks up, or produces odd sound, or no sound, or otherwise behaves unacceptably, this section is just what you're looking for.
To start with, remember what I wrote above about keeping a program comfortable? The same procedures apply here. If you've got your sound card configured to values that the original program could not have known about, then you have to change your sound card configuration if you want to run that old program.
For example, when the Sound Blaster was introducted in 1989, its factory default settings were I/O port 220 and IRQ 7 (the DMA channel was hard-wired to DMA 1, although later versions of the Sound Blaster let you change this). This was just fine until people wanted to play digitized sound at the same time they were printing in Windows: the machine either didn't play sound, or the printing stopped. Guess what? IRQ 7 is LPT1--your parallel port, where the printer is connected.
You can't run two devices off of the same IRQ at the same time. It's bad. So, Creative Labs decided to change the factory default to IRQ 5. That was good--but they were too late! Over 100 programs were written with Sound Blaster support by this time, and while they should have added the ability to specify the configuration of the sound card, many just hard-wired it to IRQ 7. Ouch. (Some were slightly more forgiving, but only slightly. Stellar 7 falls into this category; it will attempt to autodetect the IRQ used on the Sound Blaster, but it only goes for IRQ 3 or 7.)
When one of these old games (1991 or earlier) attempts to play digitized sound on a card that isn't at the factory defaults--port 220, IRQ 7, and DMA 1--the result can range from no sound, to digitized sound that "halts" after two seconds of play, to locking up completely. If this happens, you have two choices:
Opening the hood is easy, but annoying. Patching the program is more difficult, but not entirely impossible. Let's start with a fairly easy example: CT-VOICE.DRV. This file comes with most early Sound Blaster installation software, and is used by some early games that didn't want to go through the hassle of writing the routines themselves. The factory default for CT-VOICE.DRV is usually port 220 and IRQ 7. These values are kept next to each other in the file, so if you load the file into a decent hex editor (or DEBUG.COM ;-) and search for the hex values 20 02 07 or 07 20 02, you'll usually only find it in the file once. Once found, change that 07 to 05, or wherever your Sound Blaster IRQ is (althought if it's not at IRQ 5 or 7, good luck getting it to work with anything). And just in case you're wondering why I tell you to search for "20 02" and not "02 20" for port 220 is because Intel machines are little-endian, so "220" is stored as "20 02" on a PC.
And then there's the wonderful world of DOS environment settings. When you install a Sound Blaster, it writes a line into your AUTOEXEC.BAT that looks something like this:
SET BLASTER=A220 I5 D1 H5 T6
This sets an environment variable that describes the settings of the Sound Blaster to DOS programs, including games. Some games read this environment variable to get the settings of the sound card, so if it's missing on your system, you'll have to add it. Here's a breakdown:
A determines the value of the I/O port address. In the above example, it's 220.
I determines the value of the IRQ. In the above example, it's 5.
D determines the value of the DMA channel. In the above example, it's 1.
H determines the value of the 16-bit DMA channel. In the above example, it's 5. Only Sound Blaster 16s and higher use this.
T determines the type of Sound Blaster it is. In the above example, it's 6. The available types are:1: Sound Blaster 1.0 (the original Sound Blaster)
2: Sound Blaster 1.5
3: Sound Blaster 2.0
4: Sound Blaster Pro
5: Sound Blaster Pro with OPL 3 FM chips
6: Sound Blaster 16
There may be other types, but the last Sound Blaster card I purchased was a Sound Blaster 16, so I don't know the other types.
If patching the program or setting the environment variable doesn't help solve the sound problems you're having, then you can always set the game's sound support to Adlib only. This will use the FM chip for all the sound effects, which only goes through the I/O port, hereby avoiding the whole DMA/IRQ thing entirely. Just one problem:
I haven't told you about Adlib Noise yet.
Sometimes you'll get a game that looks like it will run on today's modern PCs just fine: It has VGA graphics, supports many sound cards, and was written less than ten years ago. But when you start it up, unbearably loud noise and static emerge from the sound device! What's up with that?
The Adlib (and the FM portion of the Sound Blaster, as it's a clone of the Adlib) is controlled by sending a series of instructions to a certain port (388h). When the Adlib was first conceived in 1986, it was tested on IBM PCs and ATs, none of which exceeded a speed of 6 MHz. They wrote their specification based on this, writing that while the Adlib required a certain amount of "wait time" between commands, it was okay to send them as fast as possible because no PC was faster than the minimum wait time. They later found out that a 386 was fast enough to send commands faster than the Adlib was expecting them, and they changed their specification to mention a minimum 35ms wait time between commands.
Unfortunately, some games (Sky Shark, Budokan, and Windwalker, amongst others) had already been published using the older specification. Running these on today's modern PCs produces garbled sound because the FM chip on your sound card is being pushed beyond it's original specification.
I talked to Jason Linhart, the founder and lead programmer of MicroMagic, in 1997 about this very phenominon in Windwalker:
"The original AdLib manual (before they shipped) did not call for ANY delays. The original IBM PC (4.77 Mhz) couldn't get ahead of the card. By the time it shipped they were telling use to do one IN instruction, and every time a new faster processor came out they added some delay to their recomendation. The old 8088 machines would not have worked with the 35 IN instructions now required, it would have slowed the machine down so much nothing else could get done."
The fix for this problem? Simple: Slow your machine down. That will give the Adlib time to process the previous command before it gets the next one. Another fix is to make sure your bus speed is at (or as close as possible to) 7.16 or 8 MHz (see the section on BIOS/CMOS setup for more info).
Another possible fix is to upgrade your sound card. Kai Spitzley wrote in to say that "I recently upgraded my machine. I exchanged my Awe32 with a Awe64 Gold. Now, all my old Games with Adlib problems (i.e. Secret of the Silver Blades, Hard Nova, Dynablaster, etc...) play their music flawlessly! Looks like Creative tweaked their chips a bit...? Fine with me. =)"
One of the more subtle reasons Wolfenstien 3D was such a success in 1992 was because of the way it handled sound on a Sound Blaster Pro: When an enemy was to your right, you heard him on your right; when a shot was fired off to your left, you heard it on the left, etc. It was one of the first true immersive stereo experiences, and also helped you play the game better because you had an audio clue as to where the enemy was.
If you've tried to play this game (or any other game that supports stereo sound on the Sound Blaster Pro) on your modern sound card, however, you've probably noticed that it's not in stereo, which detracts from the fun. You're not going deaf; it really isn't in stereo. Here's why: Most modern sound cards are either the Sound Blaster 16 or clones of the Sound Blaster 16. The Sound Blaster 16 is backward compatible with earlier versions of the Sound Blaster, with one exception--the on-board mixer. The Sound Blaster 16 improved the on-board mixer of the Sound Blaster Pro, giving it finer control over volume levels and automatic gain control. What they forgot to include was the filtering system, which had two functions: A high-pass filter that muted the sound, and a stereo/mono filter that controlled whether or not the output of the card was mono or stereo. To do stereo sound, the Sound Blaster Pro would initialize a 44100Hz digitized output stream, then flip the stereo/mono filter bit, which converted the output stream into 22050Hz stereo.
Without this filter, modern sound cards initialize the 44100Hz mono stream okay, but then do nothing when the stereo/mono filter bit is flipped--because it doesn't exist. So you're left with mono sound. There is no way to fix this problem without switching to a sound card that says it is explicitly Sound Blaster Pro compatible.
A small footnote on this issue: When I discovered this, I felt cheated
by Creative Labs and called them up to complain. They responded by
asking me to look at the box and find where it said it was Sound Blaster
Pro compatible. I couldn't find it! Damn those marketing people!
You'd think that a new product in a product line would be compatible
with older versions of the product... Well, the box did say it was 100%
Sound Blaster compatible, and it was--with the original Sound Blaster only.