Reply 280 of 287, by mkarcher
douglar wrote on 2024-11-19, 13:31:The Promise 20630 controller can do MWDMA2 transfers in DOS if you have a storage device that's agreeable to that mode, but I've had little luck getting that to work as DMA in Windows.
The Promise 20630 can indeed use the DMA transfer protocol between the drive and the Promise chip, but instead of doing DMA, the host has to wait until the device asserts /DRQ, then run a PIO block IN or OUT instruction to get the data from/to the PDC20630 chip. As you don't get an IRQ when DRQ is asserted by the drive, but only when the DMA transfer is done, the operation for read requests is like this: The host issues the command, then the drive locates the sector, reads the sector, verifies the CRC, possibly applies ECC correction and then asserts DRQ to get the data to the host. The host needs to run a busy polling loop on the DRQ status bit reported by the 20630, and then start the data transfer, which looks like a DMA transfer to the drive. Finally, when the transfer is done, the drives issues an interrupt for "DMA complete". This means that you don't only lose the advantage of DMA that the CPU can perform useful operations while the data is transferred from the drive to memory, but it is even worse than PIO in that the CPU already is busy with watching the DMA status bit while the drive is not yet ready to transfer. In "real" PIO modes, the drive will issue an IRQ before the transfer happens, so the CPU can do other tasks until the sector is ready. Bottom line: The Pseudo-DMA feature of the 20630 is even worse than PIO for multi-tasking operating systems. It only makes sense if you happen to have a drive that can achieve decent DMA speeds, but fails to do anything faster than PIO0 in PIO mode.