Well, what do you know, Descent 2 runs in DMA mode with Dosbox-staging-Rendition once Dos32A is permanently patched into d2verite with and run with this batch file (this is the important bit: set SPEEDY3D_DMA=1). It was only runnable in FIFO mode before, even on real hardware, unless run from Win98:
REM @echo off
CD D2
set SPEEDY3D_DMA=1
set SPEEDY3D=V:\D2
rem Batch file to run Descent 2
if exist *.swp del *.swp
eregcard
Dos32A d2verite %1 %2 %3 %4 %5 %6 %7 %8 %9
if exist *.swp del *.swp
Dosbox-Rendition uses a different mem write model for Descent 2. I'm going to try disabling it to see if it runs.
[EDIT] It does run with Dosbox-Rendition, but tends to freeze every once in a while.
The Dos32A patched version of Descent II is here, in case anyone is interested:
https://nirvtek.com/downloads/D2VERITE-DOS32A.7z
MD5: 1f81b930438ba88391ea1bd58a4ea311
I think I've figured out why this game didn't run in DMA mode and why ICR2 won't see more than 64 MB of RAM. They're using 16-bit DPMI extenders, well at least Descent 2 is. The reason Descent 2 aborted with an error in DMA mode was that it called a DPMI function with the upper half of one of 32 bit registers set to non-zero . 16-bit DPMI extenders don't like having the upper half of parameter registers set. Apps generally have to use BX:CX and with 32 bit DPMI extenders you could use BX:ECX. 16 bit extenders also ran in 32 bit mode, so I'm not entirely sure why this distinction exists.
Developer of RReady - Rendition Verité Wrapper.
https://www.youtube.com/@sharangadayananda