Friday, May 29, 2015

Sound Blaster 8-bit Playback Quality

In this post, I have taken a sample with from a game with FM music and 8-bit digital audio.  The game in question is Day of the Tentacle, which is a typical representative of the quality of digitized audio you can expect from classic DOS games (at least until FMV became prominent).  From six Sound Blaster cards I have recorded the same sample of the intro from the time the game starts until the gang leave for the mansion.  For DOS games, virtually all of them playback digitized audio using 8-bit samples, so the whole of the Sound Blaster range can be used with virtually any DOS game.

Card Number One : Sound Blaster 1.5 CT-1320C
FM Synthesis : Yamaha YM-3812 OPL2
DSP : CT1321 V2.00
CMS Upgrade : Present

This card does a very servicable job with Day of the Tentacle, which really is not using most of the advanced features of the later cards.  Digitized sound is a little noisier than the Sound Blaster Pro, but the noise floor is lower. This card is naturally loud because it does not have a mixer chip, volume being controlled solely via the volume wheel.  



Card Number Two : Sound Blaster Pro CT-1330A Rev. 5

FM Synthesis : Yamaha YM-3812 OPL2 x 2
DSP : CT1341 V3.01
Mixer : CT1345
Bus Interface : CT1336

The sound engine for Day of the Tentacle was made for a card like this.  This card will sound louder than the others because it has an onboard amplifier.  I recorded from the other cards without using their onboard amplifiers.  I used Audacity's normalization function to give the recordings below a comparable amplitude level.

The Pro has an output filter which you can toggle on and off.  The filter is on by default.  If you turn it off, then you get a sharper, yet noisier sound.  By comparison, the filtered version sounds a bit muffled.  Compare for yourselves :





Card Number Three : Sound Blaster 16 MCD CT-1750

CODEC : CT1701
FM Synthesis : Yamaha YMF-262 OPL3
DSP : CT1741 V4.05
Mixer : CT1745A
Bus Interface : CT1746B
Configuration : Jumpers
ASP/CSP : CT1748A

This a first generation sound blaster, and it does not have the hiss I expected.  It does have a lot of pops and clicks when there is speaking.  The noise floor is higher than the Pro.  All the SB16s and later cards use dynamic filtering, which cannot be turned off by the user.



Card Number Four : Sound Blaster 16 MCD CT-2230

CODEC : CT1703
FM Synthesis : Integrated CT1747 OPL3
DSP : CT1741 V4.11
Mixer : CT1745A
Bus Interface : CT1747
Configuration : DIAGNOSE.EXE or SBCONFIG.EXE + Jumpers
ASP/CSP : Not Present

Surprisingly, despite the later DSP and CODEC, this card is even noisier than its predecessor the CT-1750.  It also has the same amount of pops and clicks.  Its actually the noisiest of the bunch.



Card Number Five : Sound Blaster 16 PnP CT-2940

CODEC : Integrated CT2502
FM Synthesis : Discrete Yamaha YMF-289 OPL3-L
DSP : Integrated CT2502, V4.13 Reported
Mixer : Integrated CT2502, fully compatible with CT1745A
Configuration : CTCM.EXE + CTCU.EXE
ASP/CSP : None

This card does not have nearly as many pops and clicks as the other SB16s and the AWE32 described in this post.  The noise floor is slightly lower than the CT-1750 and CT-2760, but higher than the CT-1330.
DIAGNOSE.EXE will report this card's DSP version, but the rest of the card relies on assumptions.



Card Number Six : Sound Blaster AWE32 CT-2760

CODEC : CT1701
FM Synthesis : Integrated CT1747 OPL3
DSP : CT1741 V4.12
Mixer : CT1745A
Bus Interface : CT1747
Configuration : DIAGNOSE.EXE or SBCONFIG.EXE and AWEUTIL.COM + Jumpers
ASP/CSP : CT1748A
EMU-8000 : CT1971 + CT1972
SIMM RAM : None

This card is very much like the CT2230, but it is about as quiet as the CT-1750.



Best Sound Quality

In my opinion, the best sounding of the bunch is the 1330A, followed by the 1320U, then the 2940, 2760, 1750 and finally the 2230.  Of course, with a different sample, my opinion could change.

4 comments:

Anonymous said...

This is a great example of the Single-Cycle DMA mode bug of the SB16 cards.
These clicks and pops plague all non-Vibra SB16 cards including the AWE32 with DSP 4.0x to 4.13.

Scali said...

Interesting. Could you tell me what system (CPU and speed) you used for these recordings?
I am currently researching this pop-and-click issue...
As you may know, various early demos, trackers and sound libraries used weird tricks to get double-buffered audio working on early Sound Blasters. Some notorious examples are GoldPlay (https://github.com/joncampbell123/dosbox-x/wiki/Libraries:Goldplay) and Crystal Dream (https://github.com/joncampbell123/dosbox-x/wiki/Hardware%3ASound-Blaster%3ANagging-the-DSP).

I have found quite a bit of conflicting info on this.
The source is that the early SB's (DSP v1.x) only have a 'single-transfer' DMA mode: You set up the DMA controller and DSP for a single transfer, then the DSP will signal an interrupt when the transfer is complete. For continuous playback, you need to set up a new single transfer.
On SB2.0 they introduced 'auto-init' DMA, where the DSP will still signal an interrupt after it has played X samples, but it will continue playing (you set up the DMA controller to 'auto-init' mode as well, which means it will automatically restart the same transfer when a transfer is complete).

I have done some experiments on my SB Pro 2.0 (DSP v3.01) using single-transfer mode, and I found that it works fine to set the DMA controller to auto-init, and just restart the DSP on every interrupt. There are no pops and clicks.
You just set the DSP to transfer less bytes than the DMA controller, and then you can do double-buffering just like you would with 'auto-init' mode on a newer DSP. It just takes a bit more overhead because you need to send a new command to the DSP everytime. But since the DSP seems to respond quickly enough to play without pops and clicks, I see no real downside.
From your tests, I get the impression that the original SB1.5 is also capable of the same, and the tricks used by GoldPlay, Crystal Dream and others, are not required to get seamless streaming audio from an SB1.x.

Another bit of dubious info I found is on Osdev: http://wiki.osdev.org/ISA_DMA
"Some expansion cards do not support auto-init DMA such as Sound Blaster 1.x. These devices will crash if used with auto-init DMA. Sound Blaster 2.0 and later do support auto-init DMA."

I don't think this is true. Firstly, I don't see why they would crash, because the auto-init mode on the DMA controller is strictly in the DMA controller itself, and does nothing other than reloading the same address and count automatically. This should be transparent to the DSP, and at least on my SB Pro 2.0 it is. I don't see how it could crash the DSP.

Sadly I do not own an SB1.x myself, but perhaps you would be willing to help me run some test-programs to verify that the DSP indeed does not crash, and actually plays the buffer without pops and clicks?

Great Hierophant said...

I would be happy to, but my SB 1.5 has a v2.00 DSP, which added the auto-init DMA mode. Trixter/Hornet's 8088 Domination requires it and works just fine with my card. I wonder if an SB 1.0-1.5 card with a v1.05 DSP, which is not supposed to have auto-init DMA, would be more interesting to test. I don't have one of those :(

Scali said...

Yes, so we would really need a v1.xx DSP to verify if auto-init DMA transfers crash the DSP or not.

Also, we can't rule out that the v2.00 DSP also changed things in the single-cycle implementation, compared to the V1.xx DSPs.

Nevertheless, I've developed a simple test program, and put up a topic over at Vogons: http://www.vogons.org/viewtopic.php?f=46&t=52806
I'd be interested to know if these old cards actually *can* do seamless playback at all, and if so, what the minimum CPU requirements would be for it.

If someone with a v1.xx DSP happens to crash on the test-program, then that bit is settled as well :)