程序如何在DOS扩展程序+ DPMI环境下运行时使用DMA传输?
我的意思是我们如何分配和获取分配的dma缓冲区的物理地址,以便将该物理地址提供给DMA控制器或PCI总线主设备.
有两种可能性:
DOS Extender或DPMI服务器/主机支持虚拟内存.例如铜锣湾.
DOS Extender或DPMI服务器/主机不支持虚拟内存,但启用了分页.例如DOS32a.
我正在使用Open Watcom C编译器.
运行时环境是:
FreeDOS + XMS(无EMS/EMM386)+ DOS扩展器(DOS32a)
对于DJGPP,解决方案就在这里
但最后提到的解决方案即通过XMS,也可以使用DOS32a吗?
DOS32a文档说在切换到保护模式之前,它会分配所有可用的扩展内存,然后我们的程序可以通过DPMI函数501h分配该内存.
注意:dma缓冲区可能是1MB左右,所以我不能使用常规内存.