VOGONS


First post, by aquishix

User metadata
Rank Member
Rank
Member

I've been in vintage computing Hell for the last few weeks, and it turned out to be due to high DMA problems on my 486DX2-66 System.

I'll intersperse the rundown of what's been going on with related questions:

I have a Gravis Ultrasound Classic (rev 3.74) that I was trying to get to play nice with SOME true Creative SB16 era card -- preferably ViBRA (for maximum SnR). I was having an outrageously frustrating time because the malfunctioning of both cards was utterly inconsistent. Any troubleshooter knows that intermittent problems are the absolute worst ones to deal with, because it's almost impossible to tell when making a change if the change has a real effect or not. Sometimes the GUS and the SB16 would both work, sometimes the GUS would work and not the SB16, sometimes the other way around, and sometimes the results would depend entirely on which program I used to test one or the other.

(It reminds me of testing one of my Z100IDE ZIP drives and experiencing read errors ...but not consistently. I'd copy the same file from the ZIP drive to my hard drive 10 times in a row, get md5 hash inconsistencies on about 30% of the attempts , and then I'd wait a few minutes, do it again, and all 10 attempts would be perfect. Similar Hell to figure out.)

Most people seem to prefer 240,7,7,7,7 as the GUS hardware resources, so I kept trying to follow suit and also use the "standard" A220 I5 D1 H5 for my SB16 card(s). Sometimes the 16 bit testing in the DIAGNOSE.EXE file for the SB16 would fail, and sometimes it would work. Similar with the sound card testing in Duke Nukem 3D's SETUP.EXE program, as well as live tests in One Must Fall 2097, Wolfenstein 3D, and two different versions of Doom. One of the things of note, re: Wolfenstein is that the Adlib would work correctly and then the game would instantly freeze upon firing a gun, because it was using the PCM functionality of the SB16.

If I recall correctly, it was when I set the GUS to 240,3,3,3,3, which made the GUS start working consistently, that I set that aside and hammered hard on the SB16 resources until I got something to work correctly and consistently for it. That ONLY happened when I gave up on high DMA entirely for the SB16 and set it to A220 I5 D1 H1. Then it worked perfectly when attempting to use it as an SB16 instead of using its quasi-Sound Blaster Pro, original Sound Blaster, or Adlib functionality. NB: My ViBRA CT2890 (which is PnP) and my ViBRA 2260 (which is not PnP) behave exactly the same way, re: high DMA.

Now, if my understanding is correct, when doing that, it means that a game(or other program) emits 16 bit PCM samples to the card, but they get downgraded to 8 bit waveforms before mixing and subsequent output through the line-out and/or spkr-out ports. It seems like a simple hack to get a SB16 card to work in a system that can't properly use high DMA -- and the DIAGNOSE.EXE tool says as much in its text dialogs -- but it's not absolutely clear what the end result is.

1) Is that correct? / Thoughts?

On the GUS front, I'm worried about the same thing -- using DMA channel 3 instead of 7. I ended up using 240,3,3,7,7 for the GUS because it works consistently with IRQ 7 and I'd prefer to leave IRQ 3 freed up so my ATi Mach32 VLB video card can use it. (Its options are IRQ 2, 3, and 5, but I want IRQ 5 for the SB16 and IRQ 2 for my MIF-IPC-B.) I noticed that with the Duke Nukem 3D SETUP.EXE app, setting the GUS to DMA 3 like that causes static/clicking to come out of the speakers when testing it. That problem doesn't seem to manifest when running Doom, OMF2097, or Quake(which I tested on my PII, not my 486 😉).

2) Is the GUS similar to the SB16 in this regard? Does it only function as a true 16-bit audio card when using high DMA?

3) Is it a foregone conclusion that my motherboard (specifically the secondary Intel 8237 or equivalent DMA controller used for high DMA) is at fault for this?

4) If so, can anything be done about it, or should I just get a different 486 motherboard?

5) If I have to get a different 486 motherboard, does anyone have any recommendations for ensuring that high DMA actually works correctly? If so, I'm only interested in boards that have either PCI slots (that work CORRECTLY...*grumble*), or at least 2 VLB slots so I can continue using my Mach32 video card and also slap in a high(er) performance VLB multi I/O card for the drives.

I'd pay money at this point just for the information (which does not seem to be easy to scour from the web), but it's probably only proper to give gratitude. 😉

I anxiously await expert advice/opinions. This roadblock is stalling everything else in my project.

Reply 1 of 8, by tpowell.ca

User metadata
Rank Member
Rank
Member

Wow, my brain hurts.

I suspect that you might be selecting the high DMA channel in games that really only use the low DMA. My understanding is that the high DMA channels support larger buffers and can transfer faster than low DMA channels but have little to do with the soundcard output sample size. Thus using a low DMA channel to play back 16bit samples would sound the same but incur more overhead from the increase in interrupts.

From past experience, I have rarely seen any DOS games that, when selecting the SB16 as your soundcard would work with the high DMA. They nearly always needed the low DMA channel.
Having a similar setup to yours, I did the reverse for the IRQs since older games often looked for the soundblaster cards on IRQ7.

So I have BLASTER=A220 I7 D1 H5 .... T6
and my ULTRASND=240,6,7,11,11 although 240,6,6,11,11 should also be fine since I don't do any full duplex stuff.

  • Merlin: MS-4144, AMD5x86-160 32MB, 16GB CF, ZIP100, Orpheus, GUS, S3 VirgeGX 2MB
    Tesla: GA-6BXC, VIA C3 Ezra-T, 256MB, 120GB SATA, YMF744, GUSpnp, Quadro2
    Newton: K6XV3+/66, AMD K6-III+500, 256MB, 32GB SSD, AWE32, Voodoo3

Reply 2 of 8, by aquishix

User metadata
Rank Member
Rank
Member

from: http://ccftp.creative.com/manualdn/Manuals/TS … /2390/awe32.pdf

creative.com wrote:
D-4 Troubleshooting Problem System hangs during 16-bit digitized sound test. But 8-bit works fine. Cause Your system’s mothe […]
Show full quote

D-4 Troubleshooting
Problem
System hangs during 16-bit digitized sound test. But 8-bit works fine.
Cause
Your system’s mother board cannot handle High DMA at full speed. On some machines, the DMA controller on the motherboard does not function properly during High DMA transfers. High DMA transfers on such machines might corrupt the data in main memory and cause the system to hang or encounter a parity error.
Solution
To solve this problem, run the ISA Configuration Utility and select to use Low DMA in place of the High DMA channel. 16-bit PCM data will then be transferred through the Low DMA channel

...and that's that, re: question 1) . I also did a bunch of reading on how DMA on the XT and AT actually works, getting into the nitty-gritty details. It's a pretty disgusting little piece of technology. I can only assume that it was absolutely necessary or Creative (and Gravis) would've never put people through such misery. People reading what I said initially might think I'm an idiot or severely lack understanding, but I think my ignorance (up until now) is forgivable. What I thought was going on was something like a given 16-bit int was being broken up into high bits and low bits, and the low bits were sent across the low-DMA channel while the entire int was sent across the high-DMA channel if it was available. As it turns out, it's really just a difference of performance in the raw. The fact that high-DMA transfers are 16-bit is incidental. If they instead had somehow accomplished 8-bit DMA transfers with a much higher clock speed on the bus, it could've accomplished exactly the same end result. If I'm not mistaken, bus mastering replaced all this which is why we don't have to worry about it anymore.

I suspect that part of the reason that I was experiencing such mixed results from different ways of testing high-DMA is that some programs didn't send the information at full speed. I would almost bet money that I could write a program in C that would transfer information to one of my sound cards on a high-DMA channel but do it slowly enough that it's 100% reliable. Absolutely baffles me how motherboard manufacturers thought they could get away with things like this. Because I'm a software engineer, I tend to have a lot more respect for hardware engineers than software engineers, but in this case -- NO! They didn't test their designs anywhere near well enough to guarantee proper functioning. And this problem was apparently so widespread back in the early-mid 90s that Creative just gave up and let people set what should've been a high-DMA channel to be a low-DMA channel, and eat the performance difference.

Now, I happen to have an AWE32 card in my 386 right now because I was using it for its nice IDE interface, and I was planning on swapping it out with an ISA SCSI host adapter...but now I think I'm going to leave it in there just long enough to do some testing to measure the performance difference between using an SB16 with high-DMA vs. low-DMA. Given that my 386 is so much slower than my 486, I predict that I'll be able to capture the degradation in performance quite nicely. If so, I'll write it up and publish it so everyone else can benefit from it. To date, I've seen *nothing* on the web about the actual performance difference.

My own answers to questions 2), 3) and 4):

2) I strongly suspect that exactly the same issue affects the GUS cards, but since GUS cards are so much better designed and require so much less CPU time than SB16 cards, Gravis chose not to even mention the high-DMA vs. low-DMA performance difference. I'm going to test my GUS card in the same way I test the AWE32, and see if I can ferret out some performance differences.

3) Pretty much.

4) No; I'm going to have to get a different motherboard if I test the high-DMA vs. low-DMA performance and feel like it's enough to require solving the problem.

If anyone has any recommendations for 5), I'd supremely appreciate it. I don't want to keep shooting in the dark buying 486 motherboards until I find one that has properly functioning high-DMA channels. Anyone, n00b, expert, or otherwise, who has a working 486DX2/66 system with properly functioning high-DMA channels is invited to respond. =)

Reply 3 of 8, by aquishix

User metadata
Rank Member
Rank
Member
tpowell.ca wrote:

Wow, my brain hurts.

I suspect that you might be selecting the high DMA channel in games that really only use the low DMA. My understanding is that the high DMA channels support larger buffers and can transfer faster than low DMA channels but have little to do with the soundcard output sample size. Thus using a low DMA channel to play back 16bit samples would sound the same but incur more overhead from the increase in interrupts.

And as it turns out, you were correct about this -- as I laid out in my post a few minutes ago. 😉

tpowell.ca wrote:

From past experience, I have rarely seen any DOS games that, when selecting the SB16 as your soundcard would work with the high DMA. They nearly always needed the low DMA channel.

I think you're right about this too, but I'm an extremist. I don't want any exceptions or accepted malfunctions in my systems. I've decided to try to put *four* cards in my 486 system:

* GUS Classic rev. 3.73
* CT2890 - Sound Blaster 16 ViBRA
* CT1600 - Sound Blaster Pro 2
* MIF-IPC-B (connected to an MPU-401 and then to an MT-32, of course)

Now, the CT1600 has a jumper that supposedly allows it to share a DMA channel with another card. I'll put it on DMA 1 and see if I can get it to work that way. Since I would only be using the CT1600 or the CT2890 at one time but not both, this would be a perfect solution. If that won't work, I'll put the ViBRA on DMA 0 and see if it works correctly. I've done that already and it sure seemed to work, even though multiple websites out there claim that DMA 0 is a farce and is unavailable for peripherals. Sometimes I think someone needs to put together a compendium of truths about DOS-era hardware and software to put questions like this to rest. If all we did was compile the information from VOGONS, it would be a pretty substantial tome.

tpowell.ca wrote:

Having a similar setup to yours, I did the reverse for the IRQs since older games often looked for the soundblaster cards on IRQ7.

So I have BLASTER=A220 I7 D1 H5 .... T6
and my ULTRASND=240,6,7,11,11 although 240,6,6,11,11 should also be fine since I don't do any full duplex stuff.

Even though I suspect I will not be playing any games on this 486 that are too old to use the BLASTER environment variable...I'm going to follow suit here and use IRQ7 for the SB Pro and IRQ5 for the ViBRA, assuming I can get them to play nice together in the first place. The GUS shall remain on IRQ 3.

Thanks!

Reply 4 of 8, by aigeek

User metadata
Rank Newbie
Rank
Newbie
aquishix wrote on 2018-04-21, 16:29:

from: http://ccftp.creative.com/manualdn/Manuals/TS … /2390/awe32.pdf

creative.com wrote:
D-4 Troubleshooting Problem System hangs during 16-bit digitized sound test. But 8-bit works fine. Cause Your system’s mothe […]
Show full quote

D-4 Troubleshooting
Problem
System hangs during 16-bit digitized sound test. But 8-bit works fine.
Cause
Your system’s mother board cannot handle High DMA at full speed. On some machines, the DMA controller on the motherboard does not function properly during High DMA transfers. High DMA transfers on such machines might corrupt the data in main memory and cause the system to hang or encounter a parity error.
Solution
To solve this problem, run the ISA Configuration Utility and select to use Low DMA in place of the High DMA channel. 16-bit PCM data will then be transferred through the Low DMA channel

FxxK! One of my favorite motherboards just failed to handle High DMA with my SB16, SB32, AWE64 AND GOLD. I have spent several days trying to find out the source of the problem, cross changing multiple motherboards and sound cards, and then I just noticed the prompt message of SB16 DIAGNOSE, it mentioned that some "systems" would not work properly with High DMA ... Now I know it's due to the DMA controller 8( Does BIOS update can do some works for it?

Reply 5 of 8, by BinaryDemon

User metadata
Rank Oldbie
Rank
Oldbie

Hmmm this thread has me interested. I recently configured a 386 with Vibra16 to use D3 H3. All tests with Diagnose pass, what test should I do to determine if I don’t have full functionality?

Check out DOSBox Distro:

https://sites.google.com/site/dosboxdistro/ [*]

a lightweight Linux distro (tinycore) which boots off a usb flash drive and goes straight to DOSBox.

Make your dos retrogaming experience portable!

Reply 6 of 8, by Anonymous Coward

User metadata
Rank l33t
Rank
l33t

Are the boards in question of 1993 vintage, and do they have discrete 86c206 system controllers?

"Will the highways on the internets become more few?" -Gee Dubya
V'Ger XT|Upgraded AT|Ultimate 386|Super VL/EISA 486|SMP VL/EISA Pentium

Reply 7 of 8, by pentiumspeed

User metadata
Rank l33t
Rank
l33t
aigeek wrote on 2020-02-16, 21:09:
aquishix wrote on 2018-04-21, 16:29:

from: http://ccftp.creative.com/manualdn/Manuals/TS … /2390/awe32.pdf

creative.com wrote:
D-4 Troubleshooting Problem System hangs during 16-bit digitized sound test. But 8-bit works fine. Cause Your system’s mothe […]
Show full quote

D-4 Troubleshooting
Problem
System hangs during 16-bit digitized sound test. But 8-bit works fine.
Cause
Your system’s mother board cannot handle High DMA at full speed. On some machines, the DMA controller on the motherboard does not function properly during High DMA transfers. High DMA transfers on such machines might corrupt the data in main memory and cause the system to hang or encounter a parity error.
Solution
To solve this problem, run the ISA Configuration Utility and select to use Low DMA in place of the High DMA channel. 16-bit PCM data will then be transferred through the Low DMA channel

FxxK! One of my favorite motherboards just failed to handle High DMA with my SB16, SB32, AWE64 AND GOLD. I have spent several days trying to find out the source of the problem, cross changing multiple motherboards and sound cards, and then I just noticed the prompt message of SB16 DIAGNOSE, it mentioned that some "systems" would not work properly with High DMA ... Now I know it's due to the DMA controller 8( Does BIOS update can do some works for it?

Please specify your motherboard type that you mentioned "One of my favorite motherboards...failed to handle..."?

Much appreciated and cheers,

Great Northern aka Canada.

Reply 8 of 8, by aigeek

User metadata
Rank Newbie
Rank
Newbie
BinaryDemon wrote on 2020-02-16, 23:05:

Hmmm this thread has me interested. I recently configured a 386 with Vibra16 to use D3 H3. All tests with Diagnose pass, what test should I do to determine if I don’t have full functionality?

DIAGNOSE can do the work. When you select High DMA and pass the "test", you can play 16bit digital sound on next step, It will hang if High DMA can not be handle correctly.