Actually, to make ISA DMA work on modern systems, we must not implement all the above, because two fortunate events have happened in the past.
First, some smart people have invented DDMA. Second, IT8888 chip designers have decided to implement a part of it. The most important - the slave part.
And that's why, yes, we need to do this:
vsharun wrote on 2025-12-04, 08:32:To emulate SB-compatible DMA, you must trap following port ranges:
00–0F (8-bit DMA control)
80–83 (8-bit DMA page)
89–8F (16-bi […]
Show full quote
To emulate SB-compatible DMA, you must trap following port ranges:
00–0F (8-bit DMA control)
80–83 (8-bit DMA page)
89–8F (16-bit DMA page)
C0–DF (16-bit DMA control)
This is DDMA master part.
But we don't need to do this:
vsharun wrote on 2025-12-04, 08:32:And you must then simulate:
DRQ/DACK handshake
Memory-to-device cycles
Auto-init wrap
FIFO refill timing for the card […]
Show full quote
And you must then simulate:
DRQ/DACK handshake
Memory-to-device cycles
Auto-init wrap
FIFO refill timing for the card
IT8888 can do it for us. It's DDMA slave part.
Yes, modern chipsets don't support DDMA master, but all DDMA master does is just port forwarding, and it can be done in software.
All the actual work is done by the slave, and the slave is in IT8888.
I have started a thread here at VOGONS, where I share some preliminary results.
Here's the link:
AWE32 and PicoGUS on a Core2Duo industrial motherboard