XP下如何玩老游戏?

你好!!

WinXP和Win2000在DOS支持上有很多* * *特点,所以本段涉及的很多内容都适用于Win2000,但毕竟两者还是有一些区别的,所以这一段之后再描述Win2000的区别。虽然Win98和WinXP相差甚远,但有些原理是相似的。

首先我们需要简单了解一下WinXP下DOS命令运行的环境。熟悉这个系统的用户大多会认为所谓的DOS环境当然是Cmd.exe的命令行运行窗口,其实不然。Cmd.exe提供对系统中所有类型程序的支持,包括32位和16位!真正的16位DOS命令运行窗口□需要Command.exe提供,这个文件在WinXP中位于系统盘\Windows\system32目录下,但是无论是在Cmd窗口□下执行16位DOS命令还是直接打开命令窗口□,实际上都有一个叫NTVDM.exe的进程提供NT下的DOS虚拟机支持(NT虚拟DOS因此可以说Win×P已经完全摆脱了对16位DOS的依赖,等等理解这一点很重要,因为这说明这个虚拟的“PC”和你的真实硬件没有任何关系,所有的硬件环境都是虚拟的,所以可以达到更好的兼容性。

虚拟机如何模仿真实DOS系统的启动过程?熟悉DOS的用户会对Config.sys和Autoexec.bat感到说不出的喜悦和痛苦——它们对系统配置非常重要。DOS启动时,会先根据Config.sys配置驱动程序,然后执行Autoexec.bat中的命令。在NTVDM还能找到它们吗?既然是“实虚”,当然应该有:默认位于Windows\system32下,只是名字稍微改了一下,分别是Config.nt。而Autoexec.nt你可以用记事本打开这两个文件进行编辑,不过编辑前最好备份一下,以防万一。

明白了这一点,就可以开始尝试解决实际问题了。

记忆问题的解决

大部分老游戏都是因为“内存不足”而无法正常运行。没从DOS时代过来的用户,肯定会对“不足”这个词极度怀疑。其实是不够的。DOS有一个独特的内存使用方案,这个方案其实很复杂,但是解决问题很重要,但是我们在这里不需要了解清楚。如果不加载专门的内存管理工具,DOS最多只能识别1MB的内存,这1MB中有384kB会留给系统、硬盘控制器、显存等。它被称为上层内存块(简称UMB),剩下的640KB被称为常规内存。这640kB并不是全部空闲,系统启动后就会被占用,所以一般程序只能使用常规内存剩余(空闲)的部分。理解这一点非常重要。

但是虚拟机提供的内存容量绝对超过1MB,这就是所谓的扩展内存。因为它必须遵守使用中的扩展内存标准,所以简称为XMS。要使用XMS,需要在Config,sys(现为Config.nt)中加载驱动Himem.sys。当然,扩展内存的底层,也就是刚才说的1MB附近,有近64kB的容量,DOS不使用XMS标准也能访问。这个内存区域称为高内存区域,DOS经常将自己的一部分驻留在这个区域(MS-DOS驻留在高内存区域),以便尽可能地让一些常规内存可供应用程序使用。

EMS(扩展内存标准的缩写)的最后一个概念很重要,但是很难理解。简单来说就是CPU的骗子!CPU“看起来”像是在UMB(1MB以内,可以自由使用),但实际上是在XMS,是XMS的一部分或者全部,这样程序就可以有效使用1MB以外的扩展内存。但是,为了让CPU识别扩展内存,需要在Autoexec.bat(现在的Autoexec.nt)中加载扩展内存管理器EMM(extended Memory Manager),一般在DOS中使用。这里需要说明的是,由于EMS占用了XMS的空间,XMS的可用部分会减少。旧的DOS是一个非常自由的系统。你可以决定要不要用EMS,甚至可以决定要多少EMS,不然...嘿,嘿,罢工。

从以上来看,有两块内存与我们的话题密切相关:常规内存和扩展内存,这两块内存也恰好是新系统下运行的无数DOS的“杀手锏”。幸运的是,我们现在互相认识,可以去打仗了。以下例子都是在WinXP Pro SP1版本下进行的。

游戏安装目录h\dosgame\ZGC里有一个Play.bat。

双击批处理文件,就可以执行了。然而这一执行的结果却是黑窗一闪——可是这么有名的游戏怎么会轻易放过呢?我们必须弄清楚。所以右键点击Play.bat对应的图标,选择编辑。系统会调用记事本打开文件,看到有两个命令:runqbj和go,分别对应同一个目录下的Ruqbj.com和Go.bat。很明显,去吧。Bat还是批档。用记事本打开后发现有三个命令:Univbe、game、Univbe/u,分别对应两个可执行文件:univ,为了找出原因,将runqbj、univbe、game命令逐一执行。

在“开始→运行”对话框中输入“命令”,按回车键。在打开的命令窗口□,将目录改为游戏安装目录,依次输入三行命令。执行Univbe后会提示找不到支持的显卡,暂时忽略。执行完最后一个命令游戏,你会在屏幕上看到一行字:EMS内存。

找不到管理器(找不到内存管理器)。是因为WinXP的NTVDM默认不加载EMM吗?事情就是这样。在前面提到的Config.nt文件中对EMS的描述中,发现EMS的大小会由pif文件决定,Pif文件要么是DOS程序的一个快捷方式,要么是系统盘Windows目录下默认的_default.pif。如果在Pif文件的设置中将EMS设置为“O ”,将不会加载EMM。

每个人都熟悉Pif文件及其图标。从Win3X时代开始,为了在Windows界面中为DOS程序提供定制的内存配置,微软设计了一个“Pif”的概念。看起来这个Pif只是原程序的一个快捷方式,实际上里面可以做很多定制的设置。由于在游戏安装目录中找不到Pif文件,根据上面的段落,双击时会调用_default.pif中的设置。于是我们找到_default,pif,右键选择弹出菜单中的“属性”。在打开的对话框中,我们点击了“内存”标签,发现里面的EMS赫然设置为“无”|中关村天启需要EMS支持,设置肯定会出错。com just run这个命令也符合这个原理,它的属性对话框的内存页面也是一模一样的。

那你一定想到解决办法了。因为WinXP不能为bat文件配置内存,所以您可以:

1.修改_default.pif属性中的内存配置:2。修改Command.com的内存配置,并在其窗口中运行Play.bat。但是,修改_default显然是不可取的。Pif文件,因为该文件将是所有DOS程序的默认pif配置文件。有些程序不需要EMS,有些甚至只要有EMS就无法运行。然后我们试着把Command.com的内存配置里的EMS和XMS都设置为“自动”,再次运行命令窗口,如上找到安装目录,输入“Play”命令。进入车内后,我们惊讶地看到了游戏的开始画面。

那么“自动化”是什么概念呢?再次进入命令窗口,执行命令行“mem”。这个命令可以检查当前的内存分配和使用情况。原来的“自动”默认是分配4MB的EMS和19MB的XMS(只有15MB可用)。顺便说一下,这里显示的1行是前面提到的640kB常规内存,第3行非常重要,表示NTVDM启动后常规内存中剩余的空间,这当然是最大的可执行程序大小。

但是每次从命令运行都要找play.bat还是比较麻烦。其实还有一个更简单的方法。由于play.bat文件中runqbj的第一行对应的是Runqbj.exe(记住不是bat文件),所以右击Runqbj.exe的文件图标,进入“属性”设置。将内存页面和EMS、XMS设置为自动(当然也可以设置为4MB以上的值)。确认后,当前目录下会生成Runqbj.pif文件,然后双击Play.bat成功进入流媒体场景。

谢谢你