无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3291|回复: 3
打印 上一主题 下一主题

请高手讨论DOS4GW 32位实模式对于DOS下访问USB设备的影响

[复制链接]
跳转到指定楼层
1#
发表于 2008-7-2 20:42:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我没写错标题,我是要讨论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设备的兼容性问题有没有帮助,非常感谢!
2#
发表于 2008-7-2 20:45:23 | 只看该作者
如果你用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 编辑 ]
回复

使用道具 举报

3#
 楼主| 发表于 2008-7-2 21:09:40 | 只看该作者
我记得,DOS下访问4G内存当时有两种手段,一种是页面映射,访问越高地址的内存就要不停切换页面;另一种是就32位保护模式了,直接32指针寻址,爽得不行。

谢谢2楼的贴子给我扫盲,原来难点在于要先驱动USB总线(USB 2.0要驱动EHCI USB)啊,是我想错方向了,不好意思。
回复

使用道具 举报

4#
发表于 2008-7-2 21:19:23 | 只看该作者
你可以找一篇梁肇新(就是超级结巴的作者)早期的文章(96年好像)——在DOS实模式下直接存取4GB内存,不需要进保护模式,不需要其他工具支持,那才叫爽:)
其实你可以试试
.586
DATA SEGMENT USER32
;...
DATA ENDS
32位指针莫得问题,这个才叫包您满意。

[ 本帖最后由 netwinxp 于 2008-7-2 09:29 PM 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-9-30 01:29

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表