jmarsh wrote on 2021-01-04, 06:58:A DPMI host is allowed to run protected-mode DPMI clients in ring 3 (which is exactly what windows did). That means it has full control over all memory mappings and hardware access, not the client.
I'm still not sure where DPMI will fit in. What Windows is doing with hardware for DOS programs has nothing to do with DPMI and only to do with hardware virtualisation done by the variety of drivers, DPMI itself is only a software interface for memory management primarly with few things to allow real mode business such as DOS ints for file IO and the emulation component necessary to achieve ISA compatibility from PCI doesn't have to be a DPMI host or built into one though it must get along with EMM386 in some way which normally takes over the machine in many confs...
The main problem A) is that PCI bus has no method to request transfers from the ISA DMA controller. ISA cards have direct connections to the controller and all of the arbitration is done by pulsing those signals and DMA controller simply puts the right bytes on the bus which the card then processes into sound.
To get ISA style sound going over PCI, the software must trap all the writes to the relevant DMA controller channel, figure out where data comes from and how much there is, and get the sound card play back that data using PCI bus mastering, while at the same time emulating the DMA controller so that whatever software that polls it will not get stuck waiting for transfers that never happen. There's also great potential for timings related issues but how much they matter I wouldn't know.
Main problem B) is that PCI cannot signal any interrupt it desires, there are 4x hardware interrupts named INT A/B/C/D for the entire PCI bus and how they are mapped to the IRQ lines of the IRQ controller depends solely on what BIOS decided for you. Whatever of the 4 interrupts the card will fire depends on which slot the card is inserted, every slot is supposed to advance the ordering of the 4 interrupts so that first slot gets INT A first, then BCD, second slot gets B first, then CDA, 3rd slot C first, then DAB and so on. You may get IRQ10 in one slot, 11 in another, and maybe never IRQ 5 or 7 that is the most desired one.
To an extent this can be solved in software, by installing a stub that calls the IRQ handler of choice but it will fail with any software that explicitly masks out IRQs it doesn't deem necessary and will not work in protected mode stuff where software will map things to its liking.
All existing implementations to the problem have compatibility issues, some are better than others. I'm not sure what other issues there could be that get in the way in various software.
PC/PCI connector solves these issues by providing actual hardware mechanism that lets one have full ISA style DMA and IRQ on PCI but unfortunately this is absent on all hardware where you normally do not find any ISA.
This stuff doesn't belong in this thread and should be moved to that one thread about PCI chipsets and sound, or maybe its own "ISA sound hardware on PCI bus" or something like it...