VOGONS


First post, by KYA

User metadata
Rank Newbie
Rank
Newbie

I've recently acquired an iBase IB945F CPU board. It's a PICMG 1.0 board, so, given an appropriate backplane, it may host some PCI and ISA cards. But the southbridge on that CPU board is ICH10, so it's useless for ISA soundcards. Right? Partly. Fortunately, the board has got an IT8888G PCI-to-ISA bridge. And that bridge supports distributed DMA, or, in short, DDMA.

But what exactly is DDMA? It is a concept of splitting (distributing) a single device (a DMA controller) into multiple ones. Each PCI device may host its own DMA controller with one or more channels. Each of these DMA controllers (there may be up to 7 in one system) responds to its own set of IO ports in the PCI port range. Each of these controllers does all the hard work - it moves data between memory and the PCI device, on which it resides. These controllers are called slave DDMA controllers despite the fact they need to be PCI bus masters to be able to request data from memory for their PCI devices.

But not all DDMA controllers are like this. There's one special controller, the one to rule them all: the DDMA master. There may be only one master in one system. That master listents to IO requests to legacy DMA ports, and commands DDMA slaves to move data.... Wait, what? The only business of that master is telling others what to do? How typical...

Maybe that's why those masters don't exist anymore. Decades have passed since they've been banished from their last distant hideouts in some obscure SiS chipsets. And now DDMA slaves live their free lives just doing nothing. And noone could ever order them to move those chunks of data back and forth again. Until now.

Let me reiterate. The DDMA master is merely a scatter/gather port forwarding agent. It does not require any special signal lines, nor any other custom hardware relations to a chipset, and so it can be replicated in software. And this has been done.

A monumental software Soundblaster emulator - SBEMU, produced by crazii, a renowned guru of PC hardware programming, has been mercilessly stripped out of everything except DMA port trapping. A DDMA master emulator has been coded in those trap handlers. And now this emulator is presented to your attention.

Here's a clip of intros of some of my favorite games, playing their sounds and music through AWE32 and PicoGUS installed into a backplane along the iBase IB945F CPU board:
https://youtu.be/tD2uaxiEV4s

This virtual master can command the real slave DDMA controller inside IT8888G chip to move data from memory to the ISA slots the same way the former real masters did. But of course the virtual one has limitations. Basically, the same limitations, the original SBEMU has. It works only in those real mode games that can tolerate the presence of a memory manager (JEMMEX), and only in those protected mode games that can utilize the preloaded DPMI host (HDPMI32i.exe).

But why bother? Even if all the bugs are ironed out, this virtual master won't be able to surpass SBEMU in terms of compatibility. Why not just run SBEMU instead? Well, I don't have much to say in my defence. Of course, the proper way would be to put this thing into SMM, but as a proof-of-concept it will do as is.

Speaking of compatibility, I have only tested this software on a very limited set of motherboards with a very limited set of sound cards, and on a very limited set of games. Here are my observations.

Motherboards:
1. iBase IB945F - works
2. Advantech PCA 6781 - works (but who cares, this board has got ICH4, so one can just use PPDMA)
3. IEI IMBA-G412ISA - does not work (I was able to produce sound with it by sacrificing an ISA slot and reducing game compatibility even further, so that's not interesting)

Sound cards:
AWE32 CT3600 - works (8bit DMA only)
SB16 CT2940 - works (8bit DMA only)
PicoGUS in GUS and SB modes - works

Games:
Kyrandia 2 - works, but cuts some samples
Lands of Lore - intro works, crashes after selecting a player
Quest for Glory 4 - works in native AWE32 mode
King's Quest 6 - works with the GoSierra patch
Space Quest 3 - Roger says "Where am I?" with the fixed SB driver
Star Control 2 - works in SB mode with CPU cache disabled (otherwise hangs in a minute); works in GUS mode, but with annoying repeated loud clicks which appear and disappear at their will
Wolfenstein 3D - works
Doom - works in SB and GUS modes
Heretic - works in SB and GUS modes
Descent - works in native AWE32 mode
Descent 2 - works in native AWE32 mode
Duke Nukem 3D - works in GUS mode, but with sporadic slowdowns (yes, on a Core2Duo!)
Blood - crashes
Crusader - no sound

IT8888G has 16bit DMA channels, but it seems I've messed up something in my code, so they don't work. Descent 2 sound test does not play 16bit sound at all via DMA5. So, for now, only 8bit sound is working.

The download link is below:
https://disk.yandex.ru/d/Bd-VfsZXWztWCQ

Inside the archive there are two files.
1. ITEXXX.EXE is a DOS application that enables and configures IT8888's DDMA slave controller. It occupies the port range of 8380h-8400h. If you have got some PCI device occupying the same port range, you'll have to disable or remove it.
2. VDMA8.EXE is a DDMA master emulator.

How to run:
1. Build a PC with an industrial motherboard containing an IT8888 PCI-to-ISA bridge (Winbond bridge won't work!)
2. Download crazii's SBEMU, and install it according to his instructions:
https://github.com/crazii/SBEMU/blob/main/README.txt
but don't run it! Remove `SBEMU` line from your autoexec.bat
Put these two lines instead:
itexxx
vdma8
and then reboot.

Please, report back if your configuration works.

P.S. Well, to be honest, the first DDMA master emulator (I know of) has been coded long ago by Yamaha (DSDMA.exe TSR), but it only worked with their own soundcards.

Reply 2 of 17, by rasteri

User metadata
Rank Oldbie
Rank
Oldbie

Oh wow! This is super cool!

Do you think this might work with PCIe bridges? That would get ISA soundcards past the 100 series barrier...

Reply 3 of 17, by KYA

User metadata
Rank Newbie
Rank
Newbie

Hello, rasteri!

Taking this opportunity, I'd like to thank you for your LPC-to-ISA bridge project. It's incredible!
No need for a software layer, no compatibility penalty.

As for your question:

rasteri wrote on 2025-12-06, 16:44:

Do you think this might work with PCIe bridges? That would get ISA soundcards past the 100 series barrier...

I can not answer for sure. From a software point of view this might work, because the mechanism is chipset-independent.
But let's take an IEI IMBA-G412ISA motherboard. I had high hopes for that one, but it turned out IT8888 can't master the PCI bus on that motherboard. ISA side of things works perfectly - DMA counts samples, sets a TC bit in the status register when the transfer is complete, soundblaster generates an IRQ. But data does not arrive from memory over PCI! IT8888 gets a master abort, and a parity error bit is set, meaning it can't correctly put an address on the bus. I still wonder if it is a defect of my particular motherboard, or a design flaw of the model.

So, the chip can do the work, but the motherboard can not. And I can't blame the manufacturer for that - they've designed the board thinking that IT8888 will only be a target. I'm sure they have not tested it at all as an initiator (PCI bus master).

The same thing might happen on real PCIe boards. Noone tested them in this configuration, so if we are lucky, they will work. Otherwise they won't.

Reply 4 of 17, by KYA

User metadata
Rank Newbie
Rank
Newbie

I've fixed 16bit DMA code and reuploaded VDMA.

The download link is the same:
https://disk.yandex.ru/d/Bd-VfsZXWztWCQ

I've tested a few DOS games that play 16bit sounds (using CT2940 soundcard and DMA 5). Here are the results:
Descent2 - works in SB16 mode
Rise of the Triad - works in SB16 mode
Hioctane - works in SB16 mode (but runs too fast, I had to slow it down using cpuspd)
Quake - works in SB16 mode
Duke Nukem 3D - fails to detect SB16; works in SB mode (and is silky smooth; no slowdowns like in GUS mode)

Reply 5 of 17, by KYA

User metadata
Rank Newbie
Rank
Newbie

A quick update on Duke Nukem 3D - it actually works in SB16 mode. When testing, I simply forgot to switch music from GUS to SB, and GUS was not initialized.
So, every game I've tried works well with 16 bit DMA.

Reply 6 of 17, by DJNW

User metadata
Rank Newbie
Rank
Newbie

So, to ask the stupid/obvious question: does this allow DDMA-capable PCI cards to work with a motherboard with an IT8888X?

Reply 7 of 17, by KYA

User metadata
Rank Newbie
Rank
Newbie

Theoretically, this allows DDMA-capable PCI cards to work with a motherboard even _without_ an IT8888X. A free PCI slot is enough (if you manage to assign the correct IRQ). DDMA slave is already in the PCI card. DDMA master is in VDMA8.exe. You'll have to write your own DDMA-slave configuration utility. I've tested VDMA8 on my YMF724 card. It works. Which is no surprise, because VDMA8 does exactly the same thing as Yamaha's own DSDMA.exe

Reply 8 of 17, by DJNW

User metadata
Rank Newbie
Rank
Newbie

Fantastic, thamkyou!

You might have just made a lot of people very happy!

Reply 9 of 17, by KYA

User metadata
Rank Newbie
Rank
Newbie

I have to say, there is another restriction. Modern motheboards, which have their PCI slots connected via a PCIe-to-PCI bridge, often do not allow legacy range port I/O to PCI cards. VDMA only solves the DMA part of the puzzle. IRQ and port I/O parts should be solved separately. Basically, you should look for DSDMA compatibility with certain chipsets (there's a document somewhere on VOGONS). If DSDMA is compatible, VDMA will likely be compatible too. But you need to configure the PCI sound card to respond to DDMA. I wrote such a configuration utility for YMF724, but see no point to release it, because Yamaha's SETUPSA.exe already exists. I do not have any other PCI sound cards with DDMA, so someone else should do the job, if it is needed.

Reply 10 of 17, by Stainlesscat

User metadata
Rank Newbie
Rank
Newbie

Hi, does this DDMA emulator also have the same limitation with 16 bit DPMI software and games as yamaha's own DSDMA tsr?

Reply 11 of 17, by KYA

User metadata
Rank Newbie
Rank
Newbie

Yes it does. VDMA does not support DPMI16. When I started this project I had to choose a base for it between SBEMU and VSBHDA. Of these two only the latter has DPMI16 compatibility. But it turned out SBEMU was easier to repurpose.

Reply 12 of 17, by RayeR

User metadata
Rank Oldbie
Rank
Oldbie

How many PCI soundcards like YMF72x/74x supported this DDMA? Would be possible to make VDMA emulator more universal to support both PCI2ISA bridge and PCI soundcards with DDMA? I used Yamaha DSDMA.EXE on YMF724 some years ago, compatibility was similar to sbemu...

Gigabyte GA-P67-DS3-B3, Core i7-2600K @4,5GHz, 8GB DDR3, 128GB SSD, GTX970(GF7900GT), SB Audigy + YMF724F + DreamBlaster combo + LPC2ISA

Reply 13 of 17, by KYA

User metadata
Rank Newbie
Rank
Newbie
RayeR wrote on 2025-12-29, 06:48:

How many PCI soundcards like YMF72x/74x supported this DDMA?

From what I can gather on VOGONS, there are some: ESS Solo-1, Fortemedia FM-801, Avance Logic ALS4000, Trident 4DWave, S3 SonicVibes, maybe CMI 8338/8738.

RayeR wrote on 2025-12-29, 06:48:

Would be possible to make VDMA emulator more universal to support both PCI2ISA bridge and PCI soundcards with DDMA?

Yes, it's possible, but what's the point?
Only YMF cards have genuine OPL, and those have DSDMA.exe

The universal solution requires modification of both VDMA components:

1. We have to tell the configuration part what to write to PCI configuration space of mentioned sound cards to put those cards into legacy mode, to enable their DDMA controller, and to set their DDMA base address.
For that we need their specifications published. Some of them are on RetroWeb, so it's possible.
But I won't be able to test them, because I only have an YMF724 PCI card.
Btw, in case of YMF724 writing to PCI config space alone is not enough to put the card into legacy mode. This may be the case for the other cards too, complicating the matter.

2. We need to teach the TSR part to handle selected DMA channels, and to adhere strictly to DDMA specification. Currently it uses an undocumented IT8888-only enhancement that simplifies the code.

I may try to do this, if there's a demand.

RayeR wrote on 2025-12-29, 06:48:

I used Yamaha DSDMA.EXE on YMF724 some years ago, compatibility was similar to sbemu...

Exactly. VDMA won't have greater game compatibility than either SBEMU or DSDMA.

Reply 14 of 17, by RayeR

User metadata
Rank Oldbie
Rank
Oldbie

Maybe Aureal Vortex too, it has some kind of emulation for DOS. For YMF7xx it's not necessary duplicate DSDMA.EXE but maybe for other mentioned PCI soundcards (if they don't have it's own VDMA driver).

Is there a chance this solution with ITE8888 would work on PCH1xx chipsets and newer? Anybody tried (dartfrog)? ITE8888 is not dependent on LPC so it could...

Gigabyte GA-P67-DS3-B3, Core i7-2600K @4,5GHz, 8GB DDR3, 128GB SSD, GTX970(GF7900GT), SB Audigy + YMF724F + DreamBlaster combo + LPC2ISA

Reply 15 of 17, by KYA

User metadata
Rank Newbie
Rank
Newbie
RayeR wrote on 2025-12-29, 17:40:

Maybe Aureal Vortex too, it has some kind of emulation for DOS.

Vortex does not support DDMA. It is specified in its "product description" document on RetroWeb.

RayeR wrote on 2025-12-29, 17:40:

For YMF7xx it's not necessary duplicate DSDMA.EXE but maybe for other mentioned PCI soundcards (if they don't have it's own VDMA driver).

If anyone with the card from the list above wishes to try, he/she may drop me a pm.

RayeR wrote on 2025-12-29, 17:40:

Is there a chance this solution with ITE8888 would work on PCH1xx chipsets and newer? Anybody tried (dartfrog)? ITE8888 is not dependent on LPC so it could...

Yes, there is, but trying would cost me about 450 euros, which I can not afford. Hopefully dartfrog will return one day and try it with his PCI-to-ISA card. I possess zero soldering skills, so I can't make this card for myself.

dartfrog wrote on 2025-10-21, 04:40:

Reply 16 of 17, by Kamerat

User metadata
Rank Oldbie
Rank
Oldbie
KYA wrote on 2025-12-29, 14:04:
RayeR wrote on 2025-12-29, 06:48:

How many PCI soundcards like YMF72x/74x supported this DDMA?

From what I can gather on VOGONS, there are some: ESS Solo-1, Fortemedia FM-801, Avance Logic ALS4000, Trident 4DWave, S3 SonicVibes, maybe CMI 8338/8738.

Here are some more examples of sound card chips with DDMA support, have a look at the spreadsheet in my signature:

  • Avance Logic ALS300
  • Philips SAA7785 "Thunderbird Avenger"
  • Crystal CS46xx
  • OPTi/Ectiva 82C935/EV1935 "MachOne"
  • ICEnsemble/VIA ICE1712 "Vinyl Envy24".

ESS also has some other PCI chips than the Solo-1 that should support DDMA, but unfortunately they abandoned ESFM for some other kind of FM synth that doesn't sound very good.

One way to force DDMA mode to enable is to modify the original initializers. The usually sets the mode based on the PCI ID of the chipset.

DOS Sound Blaster compatibility: PCI sound cards vs. PCI chipsets
YouTube channel

Reply 17 of 17, by RayeR

User metadata
Rank Oldbie
Rank
Oldbie
Kamerat wrote on 2026-01-02, 11:28:

One way to force DDMA mode to enable is to modify the original initializers. The usually sets the mode based on the PCI ID of the chipset.

Maybe this feature could be added to Unisound to have it all in 1 place...

Gigabyte GA-P67-DS3-B3, Core i7-2600K @4,5GHz, 8GB DDR3, 128GB SSD, GTX970(GF7900GT), SB Audigy + YMF724F + DreamBlaster combo + LPC2ISA