A Problem with HIMEM/EMM386


The HIMEM/EMM386 memory manager combination has the tremendous attraction of being free; it comes with MS-DOS. However, there is a small hitch.

DMA comes in at least two flavors, forward and reverse. My application uses both.

Microsoft's HIMEM/EMM386 apparently isn't comfortable with the reverse variety [F]. When programming reverse DMA, normally the controller is programmed with the address of the end of the DMA buffer; HIMEM/EMM386 seem to feel that software would instead program the beginning of the buffer, and to "fix" this, it adjusts the programmed address to what it thinks is the end of the buffer, deriving this value from the count programmed into the controller.[G]

Presumably some pitiful code remnant in there somewhere is "fixing" some antique BIOS. I've written a letter to Microsoft on the matter; and I may try burning some Novell manuals before a tiny effigy of Bill Gates, which I expect will have about the same effect. And it's certainly an obscure bug; forward DMA works okay. And I may not have included one of the 5 million options for HIMEM or EMM386, and perhaps some day someone will whisper to me the secret codes....