无忧启动论坛
标题:
请高手讨论DOS4GW 32位实模式对于DOS下访问USB设备的影响
[打印本页]
作者:
h8jyuq
时间:
2008-7-2 20:42
标题:
请高手讨论DOS4GW 32位实模式对于DOS下访问USB设备的影响
我没写错标题,我是要讨论DOS4GW,不是DOS4GRUB。
在座的比较年轻的坛友,可能没经过DOS的游戏年代。那时候,有很多的游戏大作,如“DOOM 1”、“QUAKE 1、2”、“地下城守护者1”等等,它们都有一个共同的能力,就是能突破DOS的16位内存模式,能轻易访问远远超过640K基本内存,你很难想象那时候的4M的SD内存能卖到1200元的天价,其背后的推动力就是这些DOS游戏大作了。
打开这些DOS游戏大作的文件夹,你会发现它们都拥有一个共同的EXE文件:DOS4GW.exe,它就是今天我们讨论的主角了。
DOS4GW是哪一位天才写出来的,我已经记不起来了,但它能够令DOS程序使用32位的地址指针去访问所有内存,令各个DOS游戏大作能毫无顾忌地使用大字库大贴图大模型。(题外话,当年我在DOS下编程,刚接触了DOS4GW短短一段时间,然后WIN95大潮就来袭了,我只好无可奈何地随波逐流搞WIN编程,没能真正写一段DOS下的32位模式的代码,至今引以为憾......唉)
DOS4GW支持使用的32位地址指针进行寻址,就是我所感兴趣的,需要展开讨论。
引用一下无忧版主netwinxp的话:
“windows、linux等访问USB存储设备的时候并不使用BIOS的INT 13H,而是通过USB总线直接发UFI命令包,采用的地址也是LBA,所以就不太存在兼容性问题。然而U盘启动引导程序确是依靠BIOS的INT 13H来访问。”
windows和linux如何直接访问USB总线呢?我猜,就是USB总线的访问地址的数值被定义得极之大,远远超过了16位模式的寻址能力,但在32位内存模式下却是可以轻易访问到的。因为windows和linux都是运行在32位内存实模式下,所以能直接访问USB总路线,而DOS运行在16位内存模式下,所以不能直接访问USB设备,只能依靠BIOS的INT 13H来间接访问!
如果,这就是DOS下的USBASPI.SYS的兼容性差的根源所在的话,那么,如果我们在运行任何DOS程序之前先启动DOS4GW.exe,然后再去访问USB设备呢?
以上厥词,皆为抛砖引玉之用,期盼高手出现,能解说一下DOS4GW对于解决DOS下访问USB设备的兼容性问题有没有帮助,非常感谢!
作者:
netwinxp
时间:
2008-7-2 20:45
如果你用MASM6.11以上版本,不需要多余的开发接口就可以直接访问4G内存。
DOS驱动USB存储设备的难点在于要先驱动USB总线(USB 2.0要驱动EHCI USB)。
我在那个铁子里面有回复
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=127538&extra=page%3D1
[
本帖最后由 netwinxp 于 2008-7-2 08:48 PM 编辑
]
作者:
h8jyuq
时间:
2008-7-2 21:09
我记得,DOS下访问4G内存当时有两种手段,一种是页面映射,访问越高地址的内存就要不停切换页面;另一种是就32位保护模式了,直接32指针寻址,爽得不行。
谢谢2楼的贴子给我扫盲,原来难点在于要先驱动USB总线(USB 2.0要驱动EHCI USB)啊,是我想错方向了,不好意思。
作者:
netwinxp
时间:
2008-7-2 21:19
你可以找一篇梁肇新(就是超级结巴的作者)早期的文章(96年好像)——在DOS实模式下直接存取4GB内存,不需要进保护模式,不需要其他工具支持,那才叫爽:)
其实你可以试试
.586
DATA SEGMENT
USER32
;...
DATA ENDS
32位指针莫得问题,这个才叫包您满意。
[
本帖最后由 netwinxp 于 2008-7-2 09:29 PM 编辑
]
欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/)
Powered by Discuz! X3.3