WinXP下DOS游戏重玩的方案[转帖]

来源:百度文库 编辑:超级军网 时间:2024/04/28 15:39:09
  由于在不同系统下,DOS游戏运行的环境大不一样,因此在下文中,将主要讲
述WinXP下的解决方案,之后回到Win2000和Win98环境下,探讨重玩的方法。这样
行文还有一个原因:事实上从Win98到2000再到XP,操作系统对DOS的兼容性是不
断提高的,这恰与我们想像的相反——这一点很快就能从下文中看出。
  WinXP在DOS支持上和Win2000有许多共性,因此本段涉及的许多内容都适用于
Win2000,不过毕竟二者还是存在着一些区别,因此将在本段之后讲述Win2000所
不同的地方。而Win98虽与WinXP相差过远,但一些原理性的东西亦是相通。
  首先需要简单了解一下WinXP下DOS命令运行的环境,大部分熟悉这个系统的
用户都会认为,所谓有DOS环境当然是Cmd.exe的命令行运行窗口,实则不然,
Cmd.exe提供的是对系统中所有类型程序的支持,包括32位和16位;而真正的16位
DOS命令运行窗口需要由Command.exe提供,在WinXP中这个文件位于系统盘
\Windows\system32目录下。
  不过无论是在Cmd窗口下执行16位DOS命令,还是直接打开Command窗口,实际
上都是由一个名为NTVDM.exe的进程提供NT下的DOS虚拟机支持(NT Virtual DOS
Machine,简称NTVDM)。因此可以说WinXP已完全摆脱了对16位DOS的依赖,此系
统上所谓的DOS程序运行环境不过是一个完全虚拟的PC机!理解这一点很重要,因
为这预示着这个虚拟的“PC机”与你真实的硬件毫不相关,所有的硬件环境都是
虚拟出来的,因此能够实现更好的兼容性。
  虚拟机是怎样模仿真实DOS系统的启动过程呢?熟悉DOS的用户都会对Config
.sys和Autoexec.bat这两个文件有难言的欣喜与痛苦——它们对系统的配置实在
太为重要,在DOS启动时,首先会按Config.sys配置驱动,然后再执行Autoexec
.bat中的命令。在NTVDM中还能不能找到它们的身影?既然说是“真实虚拟”当然
应当是有的:它们默认位于Windows\system32下,只不过名字已稍作改动,分别
为Config.nt和Autoexec.nt。你可以用记事本打开这两个文件进行编辑,不过在
编辑之前最好进行备份,以防不测。
  理解了这些之后,我们就可以开始尝试解决实际问题了。
  1.内存问题的解决
  大部分老游戏不能正常运行的原因都是由于内存“不够”所导致,没有从DOS
代走过来的用户肯定会对“不够”二字极尽怀疑,事实上正是不够。DOS有一套
独有的内存使用方案,这个方案实际上较复杂,但对问题的解决至关重要,不过
我们这里不必了解得一清二楚,因此用简单的图文说明如下(如果觉得生涩,可
以先跳过这一部分,看到后面的例子不明白时再回过头来看):
  如图2所示,如果不加载特殊的内存管理工具,DOS最多只能识别1MB的内存,
而这1MB,有384kB将被保留给诸如系统、硬盘控制器、显存等使用,称为上位内
存(Upper Memory Block,简称UMB),剩下的640kB称作常规内存(
Conventional Memory),这640kB可不是全部空余的,系统启动后就会被占用一
部分,这样一般程序只能利用常规内存的剩余(Free)部分了,理解这一点非常
重要。
  然而虚拟机所提供的的内存容量绝对超过1MB,这部分被称作扩展内存,由于
在使用上必须服从扩展内存标准(eXtend Memory Standard),而被简称为XMS
,要使用XMS就必须在Config.sys(现在是Config.nt)中加载Himem.sys驱动程
序。当然扩展内存最底层,靠近刚才所说的那1MB的地方,有近64kB的容量,DOS
不使用XMS标准即可访问,这一内存区域被称为高端内存区(High Memory Area
),DOS经常会将自己的一部分驻留在此区域(MS-DOS resident in High
Memory Area),以将常规内存尽量空出一些给应用程序使用。
  最后一个扩充内存EMS(为Expanded Memory Standard的缩写)的概念非常
重要但又比较难理解,简单来讲它是CPU的欺骗者:CPU“看起来”它是在UMB中(
在1MB内,可自由使用),而实际上它在XMS中,是XMS的一部分或全部,这样程序
就能够有效地使用1MB以外的扩展内存了。不过要使CPU能识别扩充内存,需要在
Autoexec.bat(现在是Autoexec.nt)中装载扩充内存管理器EMM(Expanded
Memory Manager),在DOS下一般是用EMM386.exe。这里需要说明,由于EMS占
了XMS的空间,所以XMS的可用(Available)部分会减少。旧DOS是一个非常自由
的系统,在上面运行的游戏可自由决定是否使用EMS,甚至还会决定要多少EMS,
否则就……嘿嘿,罢工。
  从以上看来,与我们的话题密切相关的有两块内存:常规内存和扩充内存,
这两个也恰巧是无数DOS在新系统下运行的“杀手”,好在我们现在已知已知彼,
可以开战了。以下实例均在WinXP Pro SP1版本下进行。
  (1)扩充内存EMS的正确配置
  实例1:《中关村启示录》
  在游戏的安装目录h:\dosgame\ZGC下有一个Play.bat的批处理文件,双击即
可执行,然而如此执行的结果却是黑色窗口一闪而过——不过这么出名的游戏怎
能轻易放过,一定得探个究竟才是。于是在Play.bat对应图标上点击右键,选择
“编辑”,系统会调用记事本打开文件,看到其中有两条命令:runqbj和go,分
别对应同一目录下的Ruqbj.com和Go.bat,显然Go.bat还是一个批处理文件,用
记事本打开后发现其中又有3条命令:univbe、game和univbe/u,这3条对应两个
可执行文件:Univbe.exe和Game.exe。为了找到原因所在,笔者将逐条执行
runqbj、univbe和game命令。
  在“开始”→“运行”对话框中输入“command”并回车,在打开的Command
窗口中改变目录到游戏安装目录,逐条输入3行命令,当执行完Univbe后,提示找
不到所支持的显卡(图3),暂时不去理会,执行完最后一条命令Game,在屏幕上
看到一行字:EMS memory manager not found(找不到EMS内存管理器)。难道
是因为WinXP的NTVDM默认就不加载EMM吗?
  事实正是如此。在前面提到的Config.nt文件里关于EMS的说明中,笔者发现
这么一段话(图4):EMS的大小将由Pif文件决定,这个Pif文件要么是DOS程序的
快捷方式,要么默认为系统盘Windows目录下的_default.pif,如果在Pif文件的
设置中EMS被设定为“0”,则EMM将不会加载。
  大家对Pif文件及其图标一定都不会陌生,从Win3X时代起,为了能在视窗界
面中给DOS程序提供自定义的内存配置,微软设计了一个“Pif”的概念,看起来
这个Pif只是原来程序的一个快捷方式,实际上可以在其中进行大量的自定义设置
。由于游戏安装目录下找不到任何Pif文件,所以根据以上一段说明,双击时将会
调用_default.pif中的设置。于是我们找到_default.pif,并在其上点击右键选
择弹出菜单中的“属性”(图5),在打开的对话框中点“内存”标签卡,发现里
面的EMS赫然设为“无”(图6)!《中关村启示录》运行需要EMS支持,这样设置
当然会出错。而刚才运行的Command.com也符合这一原则,其属性对话框的内存页
与图6完全相同。
  那么解决方法你一定已经想到了,由于WinXP无法对.bat文件配置内存,所以
你可以:1.修改_default.pif属性中的内存配置;2.修改Command.com的内存配
置,并在其窗口中运行Play.bat。但修改_default.pif文件显然不可取,因为这
个文件将会是所有DOS程序的默认Pif配置文件,有一些程序并不需要EMS,有的甚
至只要有EMS就不能运行。那我们试着把Command.com内存配置中的EMS和XMS两项
均调为“自动”(图7),再次运行Command窗口,同上找到安装目录并输入“
play”命令,回车之后惊喜的看到了游戏的开始画面(图8)。
  那么到底“自动”是什么概念呢?再次进入Command窗口并执行命令行“mem
”,这个命令可查看当前的内存分配及使用情况(图9),原来“自动”默认为分
配4MB的EMS和19MB的XMS(其中只有15MB是可用的)。这里顺便说一下,显示的第
1行就是前面所说的640kB常规内存,第3行非常重要,表示NTVDM启动后常规内存
剩下的空间,当然也就是最大可执行程序的大小了(Largest executable
progaram size)。
  不过每次从Command运行再找到Play.bat仍显麻烦,其实有更简便的方法,由
于Play.bat文件中第一行runqbj(qbj?求伯君?呵呵)对应于Runqbj.exe(记
住不是.bat文件),于是在Runqbj.exe的文件图标上点右键并进入“属性”设置
,将其中的内存页同图7设置(当然也可将EMS设置为4MB以上的数值),确定后会
在当前目录下生成Runqbj.pif文件,之后双击Play.bat即可顺利进入游戏。
  巩固:《三国志Ⅳ》
  在游戏安装目录San4下有两个运行文件:san4.com和san486.com,显然后一
个是针对486机器设置的,运行它将拥有更高的游戏性能。然而点击后能顺利进入
KOEI开始画面,但之后就屏幕一闪,并显示出一行字:Not Enough Memory(缺
乏足够的内存),此时你应当对“不够”二字有所领会了,由于是直接双击,故
猜想仍是EMS的问题。依上法设置san486.com的EMS为自动,即可顺利进行游戏(
图10)。
  反思及总结:这类问题的出现比较集中,因为直接双击可执行文件,所启动
的NTVDM默认不支持EMS。对于.exe和.com文件,直接在属性中设置好EMS即可,
若是.bat文件,则需参考上述间接修改方法。
[此贴子已经被作者于2005-7-22 20:51:01编辑过]
由于在不同系统下,DOS游戏运行的环境大不一样,因此在下文中,将主要讲
述WinXP下的解决方案,之后回到Win2000和Win98环境下,探讨重玩的方法。这样
行文还有一个原因:事实上从Win98到2000再到XP,操作系统对DOS的兼容性是不
断提高的,这恰与我们想像的相反——这一点很快就能从下文中看出。
  WinXP在DOS支持上和Win2000有许多共性,因此本段涉及的许多内容都适用于
Win2000,不过毕竟二者还是存在着一些区别,因此将在本段之后讲述Win2000所
不同的地方。而Win98虽与WinXP相差过远,但一些原理性的东西亦是相通。
  首先需要简单了解一下WinXP下DOS命令运行的环境,大部分熟悉这个系统的
用户都会认为,所谓有DOS环境当然是Cmd.exe的命令行运行窗口,实则不然,
Cmd.exe提供的是对系统中所有类型程序的支持,包括32位和16位;而真正的16位
DOS命令运行窗口需要由Command.exe提供,在WinXP中这个文件位于系统盘
\Windows\system32目录下。
  不过无论是在Cmd窗口下执行16位DOS命令,还是直接打开Command窗口,实际
上都是由一个名为NTVDM.exe的进程提供NT下的DOS虚拟机支持(NT Virtual DOS
Machine,简称NTVDM)。因此可以说WinXP已完全摆脱了对16位DOS的依赖,此系
统上所谓的DOS程序运行环境不过是一个完全虚拟的PC机!理解这一点很重要,因
为这预示着这个虚拟的“PC机”与你真实的硬件毫不相关,所有的硬件环境都是
虚拟出来的,因此能够实现更好的兼容性。
  虚拟机是怎样模仿真实DOS系统的启动过程呢?熟悉DOS的用户都会对Config
.sys和Autoexec.bat这两个文件有难言的欣喜与痛苦——它们对系统的配置实在
太为重要,在DOS启动时,首先会按Config.sys配置驱动,然后再执行Autoexec
.bat中的命令。在NTVDM中还能不能找到它们的身影?既然说是“真实虚拟”当然
应当是有的:它们默认位于Windows\system32下,只不过名字已稍作改动,分别
为Config.nt和Autoexec.nt。你可以用记事本打开这两个文件进行编辑,不过在
编辑之前最好进行备份,以防不测。
  理解了这些之后,我们就可以开始尝试解决实际问题了。
  1.内存问题的解决
  大部分老游戏不能正常运行的原因都是由于内存“不够”所导致,没有从DOS
代走过来的用户肯定会对“不够”二字极尽怀疑,事实上正是不够。DOS有一套
独有的内存使用方案,这个方案实际上较复杂,但对问题的解决至关重要,不过
我们这里不必了解得一清二楚,因此用简单的图文说明如下(如果觉得生涩,可
以先跳过这一部分,看到后面的例子不明白时再回过头来看):
  如图2所示,如果不加载特殊的内存管理工具,DOS最多只能识别1MB的内存,
而这1MB,有384kB将被保留给诸如系统、硬盘控制器、显存等使用,称为上位内
存(Upper Memory Block,简称UMB),剩下的640kB称作常规内存(
Conventional Memory),这640kB可不是全部空余的,系统启动后就会被占用一
部分,这样一般程序只能利用常规内存的剩余(Free)部分了,理解这一点非常
重要。
  然而虚拟机所提供的的内存容量绝对超过1MB,这部分被称作扩展内存,由于
在使用上必须服从扩展内存标准(eXtend Memory Standard),而被简称为XMS
,要使用XMS就必须在Config.sys(现在是Config.nt)中加载Himem.sys驱动程
序。当然扩展内存最底层,靠近刚才所说的那1MB的地方,有近64kB的容量,DOS
不使用XMS标准即可访问,这一内存区域被称为高端内存区(High Memory Area
),DOS经常会将自己的一部分驻留在此区域(MS-DOS resident in High
Memory Area),以将常规内存尽量空出一些给应用程序使用。
  最后一个扩充内存EMS(为Expanded Memory Standard的缩写)的概念非常
重要但又比较难理解,简单来讲它是CPU的欺骗者:CPU“看起来”它是在UMB中(
在1MB内,可自由使用),而实际上它在XMS中,是XMS的一部分或全部,这样程序
就能够有效地使用1MB以外的扩展内存了。不过要使CPU能识别扩充内存,需要在
Autoexec.bat(现在是Autoexec.nt)中装载扩充内存管理器EMM(Expanded
Memory Manager),在DOS下一般是用EMM386.exe。这里需要说明,由于EMS占
了XMS的空间,所以XMS的可用(Available)部分会减少。旧DOS是一个非常自由
的系统,在上面运行的游戏可自由决定是否使用EMS,甚至还会决定要多少EMS,
否则就……嘿嘿,罢工。
  从以上看来,与我们的话题密切相关的有两块内存:常规内存和扩充内存,
这两个也恰巧是无数DOS在新系统下运行的“杀手”,好在我们现在已知已知彼,
可以开战了。以下实例均在WinXP Pro SP1版本下进行。
  (1)扩充内存EMS的正确配置
  实例1:《中关村启示录》
  在游戏的安装目录h:\dosgame\ZGC下有一个Play.bat的批处理文件,双击即
可执行,然而如此执行的结果却是黑色窗口一闪而过——不过这么出名的游戏怎
能轻易放过,一定得探个究竟才是。于是在Play.bat对应图标上点击右键,选择
“编辑”,系统会调用记事本打开文件,看到其中有两条命令:runqbj和go,分
别对应同一目录下的Ruqbj.com和Go.bat,显然Go.bat还是一个批处理文件,用
记事本打开后发现其中又有3条命令:univbe、game和univbe/u,这3条对应两个
可执行文件:Univbe.exe和Game.exe。为了找到原因所在,笔者将逐条执行
runqbj、univbe和game命令。
  在“开始”→“运行”对话框中输入“command”并回车,在打开的Command
窗口中改变目录到游戏安装目录,逐条输入3行命令,当执行完Univbe后,提示找
不到所支持的显卡(图3),暂时不去理会,执行完最后一条命令Game,在屏幕上
看到一行字:EMS memory manager not found(找不到EMS内存管理器)。难道
是因为WinXP的NTVDM默认就不加载EMM吗?
  事实正是如此。在前面提到的Config.nt文件里关于EMS的说明中,笔者发现
这么一段话(图4):EMS的大小将由Pif文件决定,这个Pif文件要么是DOS程序的
快捷方式,要么默认为系统盘Windows目录下的_default.pif,如果在Pif文件的
设置中EMS被设定为“0”,则EMM将不会加载。
  大家对Pif文件及其图标一定都不会陌生,从Win3X时代起,为了能在视窗界
面中给DOS程序提供自定义的内存配置,微软设计了一个“Pif”的概念,看起来
这个Pif只是原来程序的一个快捷方式,实际上可以在其中进行大量的自定义设置
。由于游戏安装目录下找不到任何Pif文件,所以根据以上一段说明,双击时将会
调用_default.pif中的设置。于是我们找到_default.pif,并在其上点击右键选
择弹出菜单中的“属性”(图5),在打开的对话框中点“内存”标签卡,发现里
面的EMS赫然设为“无”(图6)!《中关村启示录》运行需要EMS支持,这样设置
当然会出错。而刚才运行的Command.com也符合这一原则,其属性对话框的内存页
与图6完全相同。
  那么解决方法你一定已经想到了,由于WinXP无法对.bat文件配置内存,所以
你可以:1.修改_default.pif属性中的内存配置;2.修改Command.com的内存配
置,并在其窗口中运行Play.bat。但修改_default.pif文件显然不可取,因为这
个文件将会是所有DOS程序的默认Pif配置文件,有一些程序并不需要EMS,有的甚
至只要有EMS就不能运行。那我们试着把Command.com内存配置中的EMS和XMS两项
均调为“自动”(图7),再次运行Command窗口,同上找到安装目录并输入“
play”命令,回车之后惊喜的看到了游戏的开始画面(图8)。
  那么到底“自动”是什么概念呢?再次进入Command窗口并执行命令行“mem
”,这个命令可查看当前的内存分配及使用情况(图9),原来“自动”默认为分
配4MB的EMS和19MB的XMS(其中只有15MB是可用的)。这里顺便说一下,显示的第
1行就是前面所说的640kB常规内存,第3行非常重要,表示NTVDM启动后常规内存
剩下的空间,当然也就是最大可执行程序的大小了(Largest executable
progaram size)。
  不过每次从Command运行再找到Play.bat仍显麻烦,其实有更简便的方法,由
于Play.bat文件中第一行runqbj(qbj?求伯君?呵呵)对应于Runqbj.exe(记
住不是.bat文件),于是在Runqbj.exe的文件图标上点右键并进入“属性”设置
,将其中的内存页同图7设置(当然也可将EMS设置为4MB以上的数值),确定后会
在当前目录下生成Runqbj.pif文件,之后双击Play.bat即可顺利进入游戏。
  巩固:《三国志Ⅳ》
  在游戏安装目录San4下有两个运行文件:san4.com和san486.com,显然后一
个是针对486机器设置的,运行它将拥有更高的游戏性能。然而点击后能顺利进入
KOEI开始画面,但之后就屏幕一闪,并显示出一行字:Not Enough Memory(缺
乏足够的内存),此时你应当对“不够”二字有所领会了,由于是直接双击,故
猜想仍是EMS的问题。依上法设置san486.com的EMS为自动,即可顺利进行游戏(
图10)。
  反思及总结:这类问题的出现比较集中,因为直接双击可执行文件,所启动
的NTVDM默认不支持EMS。对于.exe和.com文件,直接在属性中设置好EMS即可,
若是.bat文件,则需参考上述间接修改方法。
[此贴子已经被作者于2005-7-22 20:51:01编辑过]
实用帖啊!!收藏!!
俺在98下玩光荣公司的SAN4怎么没有声音?
另外,前两个背景进不去,只能从第三个背景玩起
有哪位大虾指点一二~~~~~~~~
试试手动设置声卡的中断号IRQ、中断请求等等……
(控制面板——系统——设备管理——声卡——属性——资源……)