如何在新系统下重玩老游戏

无需再为过去那些经典的游戏立碑作传,对于老玩家,它们的意义已不仅是打开电脑之门的钥匙,而更是一种关于时间的回忆——如果你是跟随着《大众软件》一同走过这段年代,这种记忆也许会更深刻。当然现在也有不少玩家只是在某个特殊的情况下接触了一些老游戏,尽管它们可能已无法发声、更缺乏华丽的动画,然而精彩的情节与对白、严谨的设计与画风,仍有可能给你一种特殊的吸引力。不过游戏毕竟还是属于应用软件,凡属应用软件就必须严格遵守其所在操作系统制订的规则。因此,当微软年复一年推出新操作系统的同时,无数的软件在新规则下结束了曾经辉煌的时光,这里面当然也包括了大量的经典老游戏——是的,无需为它们叹息,因为永远有更好的软件、更精彩的游戏不断出现。只是,过去的这些真的已经成为——告别的年代,失色的回忆?你不妨带着这样的疑问来看这篇文章。

“新”与“老”当然是相对的,不过在开篇之前有必要确定我们的讨论范畴,这里的“老”是指为Win98之前的操作系统,包括DOS和Win32/95,而新系统则是指Win98/2000/XP。毫无疑问,有很多老游戏都很值得我们来重温,但重温的方法也各异,有的人会去买例如奔腾133的“老爷级”机器,专门用于玩老游戏;不过老PC也不是谁都能买到的,而且为了玩老游戏真愿意如此大动干戈,也算是骨灰级玩家了。于是典型的解决方法是采用多系统,其中有一个系统装上MSDOS6.22+Win32或Win95,不过这种方法也会碰上新显卡、声卡与老游戏不兼容的难题。

实际上,大部分用户都会在现有系统上尝试老游戏,在这方面,使用Win98的用户似乎比WinXP的用户拥有更多的笑容(越“老”越好?这是否准确,还请参见后文)。除了一些兼容性非常好的游戏,大部分已不可能运行,而所谓兼容性好的游戏也基本上不可能听到游戏原声。那么,要实现完美的重温效果,是否注定要调整硬件、注定要安装多系统呢?经过笔者的一番艰苦探索,发现并不是这样,大部分的老游戏在新系统下仍旧可以找到合适的解决方案。

一、DOS游戏的重玩

在大家所碰到的经典老游戏中,DOS游戏无疑占有绝对多的比例。然而辛辛苦苦找出来的游戏,当在视窗下双击主运行程序时,却会出现各种莫名的情况。在Win98下还好一些,好歹能让你看到出错信息(当然一般情况下这个出错信息我们都弄不明白),至于Win2000/XP,往往是黑色屏幕一闪而过,一些情况下还会出现访问地址非法的提示,总之会让人不明所以。

然而这种种不能正常运行的情况并不完全是因为新系统与老游戏不兼容的缘故,熟悉DOS的用户都知道,DOS是一个开放的系统,其软件操作并不像Windows下那样多数是“傻瓜式”,特别是DOS下的多媒体软件(例如游戏)要正常运行,往往需要对运行环境作特殊的设置,如果只是“双击”,当然不符DOS“风格”了。因此一款DOS游戏在新系统下不能重玩,实质是兼容与设置两方面的问题均可能有,这也提示了我们解决问题的一些思路。

由于在不同系统下,DOS游戏运行的环境大不一样,因此在下文中,将主要讲述WinXP下的解决方案,之后回到Win2000和Win98环境下,探讨重玩的方法。这样行文还有一个原因:事实上从Win98到2000再到XP,操作系统对DOS的兼容性是不断提高的,这恰与我们想像的相反——这一点很快就能从下文中看出。

(一)WinXP下DOS游戏重玩的方案

WinXP在DOS支持上和Win2000有许多共性,因此本段涉及的许多内容都适用于Win2000,不过毕竟二者还是存在着一些区别,因此将在本段之后讲述Win2000所不同的地方。而Win98虽与WinXP相差过远,但一些原理性的东西亦是相通。

首先需要简单了解一下WinXP下DOS命令运行的环境,大部分熟悉这个系统的用户都会认为,所谓有DOS环境当然是Cmd.exe的命令行运行窗口,实则不然,Cmd.exe提供的是对系统中所有类型程序的支持,包括32位和16位;而真正的16位DOS命令运行窗口需要由Command.exe提供,在WinXP中这个文件位于系统盘/Windows/system32目录下,图1是Cmd和Command运行窗口的比较。

不过无论是在Cmd窗口下执行16位DOS命令,还是直接打开Command窗口,实际上都是由一个名为NTVDM.exe的进程提供NT下的DOS虚拟机支持(NTVirtualDOSMachine,简称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将被保留给诸如系统、硬盘控制器、显存等使用,称为上位内存(UpperMemoryBlock,简称UMB),剩下的640kB称作常规内存(ConventionalMemory),这640kB可不是全部空余的,系统启动后就会被占用一部分,这样一般程序只能利用常规内存的剩余(Free)部分了,理解这一点非常重要。

然而虚拟机所提供的的内存容量绝对超过1MB,这部分被称作扩展内存,由于在使用上必须服从扩展内存标准(eXtendMemoryStandard),而被简称为XMS,要使用XMS就必须在Config.sys(现在是Config.nt)中加载Himem.sys驱动程序。当然扩展内存最底层,靠近刚才所说的那1MB的地方,有近64kB的容量,DOS不使用XMS标准即可访问,这一内存区域被称为高端内存区(HighMemoryArea),DOS经常会将自己的一部分驻留在此区域(MS-DOSresidentinHighMemoryArea),以将常规内存尽量空出一些给应用程序使用。

最后一个扩充内存EMS(为ExpandedMemoryStandard的缩写)的概念非常重要但又比较难理解,简单来讲它是CPU的欺骗者:CPU“看起来”它是在UMB中(在1MB内,可自由使用),而实际上它在XMS中,是XMS的一部分或全部,这样程序就能够有效地使用1MB以外的扩展内存了。不过要使CPU能识别扩充内存,需要在Autoexec.bat(现在是Autoexec.nt)中装载扩充内存管理器EMM(ExpandedMemoryManager),在DOS下一般是用EMM386.exe。这里需要说明,由于EMS占用了XMS的空间,所以XMS的可用(Available)部分会减少。旧DOS是一个非常自由的系统,在上面运行的游戏可自由决定是否使用EMS,甚至还会决定要多少EMS,否则就……嘿嘿,罢工。

从以上看来,与我们的话题密切相关的有两块内存:常规内存和扩充内存,这两个也恰巧是无数DOS在新系统下运行的“杀手”,好在我们现在已知已知彼,可以开战了。以下实例均在WinXPProSP1版本下进行。

(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后,提示找不到所支持的显卡,暂时不去理会,执行完最后一条命令Game,在屏幕上看到一行字:EMSmemorymanagernotfound(找不到EMS内存管理器)。难道是因为WinXP的NTVDM默认就不加载EMM吗?

事实正是如此。在前面提到的Config.nt文件里关于EMS的说明中,笔者发现这么一段话:EMS的大小将由Pif文件决定,这个Pif文件要么是DOS程序的快捷方式,要么默认为系统盘Windows目录下的_default.pif,如果在Pif文件的设置中EMS被设定为“0”,则EMM将不会加载。

大家对Pif文件及其图标一定都不会陌生,从Win3X时代起,为了能在视窗界面中给DOS程序提供自定义的内存配置,微软设计了一个“Pif”的概念,看起来这个Pif只是原来程序的一个快捷方式,实际上可以在其中进行大量的自定义设置。由于游戏安装目录下找不到任何Pif文件,所以根据以上一段说明,双击时将会调用_default.pif中的设置。于是我们找到_default.pif,并在其上点击右键选择弹出菜单中的“属性”,在打开的对话框中点“内存”标签卡,发现里面的EMS赫然设为“无”!《中关村启示录》运行需要EMS支持,这样设置当然会出错。而刚才运行的Command.com也符合这一原则,其属性对话框的内存页与图6完全相同。

那么解决方法你一定已经想到了,由于WinXP无法对.bat文件配置内存,所以你可以:1.修改_default.pif属性中的内存配置;2.修改Command.com的内存配置,并在其窗口中运行Play.bat。但修改_default.pif文件显然不可取,因为这个文件将会是所有DOS程序的默认Pif配置文件,有一些程序并不需要EMS,有的甚至只要有EMS就不能运行。那我们试着把Command.com内存配置中的EMS和XMS两项均调为“自动”,再次运行Command窗口,同上找到安装目录并输入“play”命令,回车之后惊喜的看到了游戏的开始画面。

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

不过每次从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开始画面,但之后就屏幕一闪,并显示出一行字:NotEnoughMemory(缺乏足够的内存),此时你应当对“不够”二字有所领会了,由于是直接双击,故猜想仍是EMS的问题。依上法设置san486.com的EMS为自动,即可顺利进行游戏。

反思及总结:这类问题的出现比较集中,因为直接双击可执行文件,所启动的NTVDM默认不支持EMS。对于.exe和.com文件,直接在属性中设置好EMS即可,若是.bat文件,则需参考上述间接修改方法。

(2)常规内存的正确配置

实例2:《龙骑士4》(Dra4)

这款游戏由ELF出品,以情节设计的巧妙赢得了不少玩家的欣赏,我们看能不能在WinXP系统下正常运行。首先必须根据游戏说明其安装在C盘根目录下,进入安装目录c:/dra4,双击执行其中的Play.bat,出现的情况仍然是黑屏的一晃而过。于是按照实例1中的方法用记事本打开Play.bat,发现其中只有一行:dra4start.mesHxC,这是一个带参数运行的命令,主程序是dra4,不过却在安装目录下发现了两个可执行dra4文件:dra4.com和dra4.exe,这里你需要知道.com文件执行的优先度高于.exe。于是对dra4.com的属性进行修改,将EMS设为8192kB。可是和我们的意愿相反,双击Play.bat后还是黑色窗口一闪而过……

于是回到刚才讨论的内存知识中来,除了EMS,还有一个内存杀手就是常规内存。还记得上面图9中的“最大可执行程序大小(Largestexecutableprogramsize)”吗?有没有可能581120字节的内存仍不够dra4.com使用呢?不妨试着从常规内存中清理出一些空间来。

这里我们需要先查看NTVDM默认启动时都加载了哪些程序,仍然在“运行”对话框中输入“command”打开DOS命令行窗口,在其中键入“mem/c|more”命令分页查看当前内存的详细利用情况(熟悉DOS的用户会问为什么不用“/p”参数,因为这个参数在NTVDM中已不被支持,只好用“|more”代替)。从图中可以看到常规内存(ConventionalMemory)中有几个大头:MSDOS、MOUSE、DOSX,尤其是DOSX,居然占尽了33.9kB的空间,要知道常规内存中可是寸土必争啊。

实际上DOSX是NTVDM为支持DPMI(DosProtectedModeInterface,DOS内存保护模式接口)类型程序而执行的命令。保护模式可以让程序获得更多的内存资源,但使用DPMI的游戏都必须附带一个DOS扩展程序,这个程序一般为DOS/4GWv1.96,文件名为DOS4GW.exe,所以游戏是否需要DOSX支持,只需查看其安装目录下是否有DOS4GW.exe文件即可。

显然在Dra4目录下并没有发现DOS4GW.exe,故判定这33.9kB的DOSX运行空间完全可以释放出来,那么通过什么方法呢?还记得刚才提到的Autoexec.nt和Config.nt吧,笔者刚才说这是两个让人悲喜交加的初始化文件,那么看一下在这里它们能给我们带来什么样的喜悦。

由于这两个文件对整个NTVDM系统非常重要,所以修改时要小心,当然可以备份,不过最好的方法还是使用Win2000/XP提供的自定义初始化文件功能。首先把Autoexec.nt和config.nt从System32下拷贝到c:/dra4目录下,之后找到dra4.com文件,依上法进入属性对话框,在程序标签页中点击“高级”按钮,在弹出的WindowsPIF窗口中重新指定专用初始化文件,将二者的位置分别修改为“c:/dra4/autoexec.nt”和“c:/dra4/config.nt”并两次“确定”。

接下来我们要对这两个自定义的初始化文件进行修改。使用记事本打开Autoexec.bat,可以发现里面有一大堆以“REM”开头的文字行(表示这一行是注释,不会被执行),值得注意的是有3行lh命令,这是将其后程序尽量(不一定成功喔)加载到上位内存的命令,这里的mscdexnt.exe、redir和dosv分别提供了NTVDM对光驱、网络(还可以玩经典游戏的网络版!)以及DPMI的支持。这个例子中由于三者都无需使用,因此在这3行前面分别加上“REM”以表示取消(实际上去掉DOSV就足够了,这里干脆一不做,二不休)。编辑完成之后记得保存,然后回Dra4目录,双击Dra4.com,你会发现果然是一击奏效,需要提醒的是,在修改Autoexec.nt的同时仍需配置好Dra4.com的内存参数,特别是EMS。

反思及总结:这个例子中并不需要DPMI的支持,但若是碰上了既需要DPMI,同时又得不到常规内存的游戏怎么办?我们还是有办法的,只需修改Config.nt文件,在其中加入一行“EMM=RAM”。这样配置后MOUSE和DOSX等程序会部分或全部从常规内存中移到上位内存中,从而获得大量的常规内存(这是修改后用“mem/c|more”命令进行查看的结果,可见DOSX已进入上位内存,而可用常规内存也达到了615.3kB之多)。最后需要说明,EMS和可用常规内存显然存在潜在性的资源争夺,系统之所以不将EMS默认设为“自动”,原因在于设置EMS后,一些原来驻留在上位内存的一些程序就会被赶到常规内存中去,从而导致可用常规内存减小,所以应根据DOS程序需要选择是否使用EMS。

2.声音及其他兼容问题的解决

从上述说明来看,内存问题在WinXP下只能算作配置方面的难题,而本段涉及的才真正是兼容问题。首先要说明这里的声卡并不是指你真实机器上的声卡,而是NTVDM所模拟出的声卡。

从WinNT到Win2000,所虚拟的DOS版本都是5.0,而NTVDM提供的硬件为与DOS版本配套,实质上“配置”相当低,这样对DOS游戏的支持也很差,最关键的是,它不支持DOS6时代以来声卡的标准兼容模式——SoundBlaster。但WinXP在这方面则有所突破,其提供的NTVDM中直接内建有对SoundBlaster2.0的支持,对DOS程序的兼容性将会好很多,此外WinXP继承了Win2000中对鼠标、光驱、网卡和DOS/4GW的默认驱动。

不过WinXP提供了声卡支持,是福亦是祸:虽然安装有声卡,但却只能提供2.0支持,大部分DOS程序都支持SoundBlaster16,这样就可能存在潜在冲突。好的情况下程序尽管检测不到声卡,仍会正常运行,但有的游戏则可能会直接崩溃。

此外,在WinXP中还有可能存在其他一些兼容问题,例如程序不能对软驱进行任意设置等,在下面这个例子中会有全面的反映。

实例3:《大富翁3》

这可是DOS时代最受MM喜爱的游戏,即使是今天玩起来还是兴味盎然。然而到该游戏的目录c:/rich3下双击执行Play.bat,系统经过一番折腾甚至看到了开头的SoftStar动画,最后仍给了一个静止的黑屏——没关系,我们已经习惯了。于是用记事本打开Play.bat看个究竟,发现里面有一行命令是“substa:.”,熟悉DOS的用户知道这条命令用于把当前目录映射成A盘,游戏将把A盘当作CD-ROM。这当然会导致兼容问题,因为虚拟机是不可以直接访问硬件的,WinXP控制下的软驱当然也不能轻易映射。

于是想到可以将软驱先行屏蔽,好在WinXP可以不重启即停用软驱。在“我的电脑”上右键选择“属性”打开系统属性对话框,依次选择“硬件”→“设备管理器”,在打开的设备管理器中展开“软盘驱动器”,右键单击菜单下的“软盘驱动器”并选择“停用”(游戏结束后别忘了重复此过程并在这里选择“启用”)。确定之后回到rich3目录,再次双击Play.bat,结果发现已经能进入开始画面,但只要选定人物并开始游戏,整个NTDVM系统就会崩溃——是全线崩溃,结束任务后连Command.com也无法运行,只有重启才能解决问题。

这让笔者迷惑了一阵,不过由于能够输出视频,则问题很有可能出在NTDVM虚拟出的声卡上。于是用记事本打开System32下的Autoexec.nt,文件的最后一部分是对内建声卡的描述,正如前面所言,这里说明WinXP的NTDVM只提供对SoundBlaster2.0的支持。在文件的最后,说明可将此声卡屏蔽,于是按照说明,在“SETBLASTER=A220I5D1P330T3”一行前加“REM”注释,同时去掉“SETBLASTER=A0”一行前的“REM”。再次双击Play.bat,果然顺利进入游戏画面。

屏蔽声卡能够解决不少游戏无法正常运行的问题,不过到此为止,我们发现:还没有一款游戏能够正常发声,如此的重温,怎能不让记忆失色?虽然笔者也曾经通过一定的设置,使几款经典的游戏如《阿猫阿狗》能够正常发声(很好的感觉),但绝大部分游戏并不完全支持SoundBlaster2.0,例如在《天使帝国2》中,即使人声是正常的,背景音乐却完全听不到。因此这里不再讲如何通过系统配置重现声音的方法,不过更为关键的原因是,我们可以利用一个软件,它不仅可完全解决声卡的兼容性问题,最重要的是它解决了NTDVM系统的最大限制——几乎能使DOS程序的原音完全重现,这个软件就是VDMSound。

VDMSound是一款符合GNU标准的免费软件,作者的自由开发精神令人敬佩,最新版本为2.0.4。软件为NTDVM所提供的声音平台包括MPU-401接口(可提供高质量的MIDI音效)、SoundBlaster兼容接口(兼容SBPro1/2、SB1.5/2.0/16/AWE32/32/64,可提供电子及FM/AdLib音效),甚至还包括游戏控制接口(这样就能用手柄和摇杆了)!VDMSound与你机器上的真实声卡没有关系,它甚至可将DOS程序发出的声音信息输入到磁盘文件中。

具体使用方法就更简单了,仍以《大富翁3》为例,你只需在Play.bat上点击右键,选择菜单中的“RunWithVDMS”即可,初次使用时,软件会弹出一个小Tips窗口,笔者建议如果条件允许,可仔细阅读其中的每条提示(软件有一个小Bug,就是不会自动更换Tips,因此逐条阅读比较好),能让你学到不少知识。接下来软件快速做了一下初始化工作,黑色DOS屏幕一过,你就能听到熟悉的音乐了!

实例4:《天使帝国Ⅱ》

有了VDMSound,我们当然要用它来导入执行游戏安装目录下的Play.bat了,不过没想到却在热闹的声音中看到了一幅美丽的提示图,原来这款游戏至少需要575kB的常规内存。按照上文对内存配置的说明,首先查看游戏安装目录下是否有DOS4GW.exe——没有找到,于是可判定其不会使用DOSX,但用了VDMSound。还一样在Autoexec文件修改吗?

答案是肯定的,不过现在它和Config的位置已经都转移到d:/vdmsound目录下了,文件的扩展名也变成了“vdms”,不过作者想得很是周到,已经将这个扩展名注册为用记事本默认打开,这样,上面我们讲的修改DOSV等功能仍可顺利实现,你可以打开Autoexec.vdms,在“lh%SystemRoot%/system32/dosx.exe”一行前加上“REM”即可。不过,下面将提供一种方法,可以让这个过程更简单。

软件的作者为VDMSound提供了一个图形化设置插件:VDMSoundLanchPad。下载完以后将此压缩包的所有文件解压到d:/vdmsound目录下,之后运行其中的install.bat,在注册提示时点“确定”即可完成安装。下面就以《天使帝国Ⅱ》为例,说明如何使用图形化界面进行配置。

1右键点击游戏目录下的Play.bat,选择右键菜单中带音乐标记的“RunWithVDMS”。

2在弹出的设置窗口中,由于要做特殊设置,所以选择“Setupacustomconfiguration(选择自定义设置)”,并点击“下一步”。

3在这一步中选择“Createanewconfigurationfromscratch(生成一份新的配置文件)”,当然如果不是初次使用,以前有游戏的设置和当前要设置的相同,也可选择“Reuseanexistingconfiguration”。

4这一步中点击“Advanced”进入高级设置。

5这个很熟悉吧,其实作者就是把Windows设计的属性项目整合了。

6进入“Compatibility”标签页进行兼容性设置,在这里可设置EMS和XMS,我们接受默认的4MB及16MB设置,同时下面还有基本的VESA支持(EnableBasicVESASupport)选项(这在Win2000下特别有用,因为其不支持VESA窗口模式),此外还包括对光驱和网络的支持,当然也包括DPMI(DOSV),你如果还有印象,就发现后3项正好对应本文前面所说的Autoexec.nt中的3条LH命令。因为《天使帝国Ⅱ》无需使用DOSX,可将DPMI项的勾选去除。

7“SoundBlaster”用于配置SoundBlaster声卡,如这里的IRQ是7,有一些游戏默认会使用5——总之如果使用了VDMSound还是不能出声,可以在这儿作一些变更。

8还有更多的配置这里就不一一讲了,大家可自行摸索,点击“确定”即可返回图29的界面,选择“下一步”,最后一个对话框中可选定“Remembermysettings”,以便下次将此次配置当作默认配置。点击“完成”,软件将引导进入游戏界面,同时在游戏目录下生成一个Play.vlp图标,以后点击此图标即可采用刚才的配置进入游戏。若想修改还可在其上点右键,进入属性对话框中的“VDMSound”标签,点击“Advanced”按钮即可。

实例5:《大航海时代2》

这个例子主要是想说明,如何配合VDMSound解决游戏运行过速的问题。这里选取的《大航海时代2》实在是令人怀念的经典,而且这款游戏的兼容性非常好,在WinXP的默认设置下即能顺利运行。不过美中不足的是,在笔者CPU为赛扬1.8GHZ的机器上,只要一出海,速度就快得惊人,根本无法控制船的运行方向——而且一晃之间数日已过。最后没有办法,只能采取“目标式”一步一步的航行,而大航海时代系列的乐趣有很大一部分就是在海上“逛荡”,如此步进实在是损失了不少趣味。

要解决这个问题,需要使用专门用于降速的软件,这里笔者选择了同样由VDMSound作者写出的Speedset,首先可将压缩包中的两个文件Speedset.dll和Speedset.exe解压到d:/vdmsound目录下。接下来将配合VDMSoundLanchPad实现降速功能。

在《大航海时代2》安装目录下的Play.bat上点击右键,按上例方法进入到VDMSound配置高级(Advanced)界面。进入“DosEnviroment”标签页,发现可在Config和Autoexec中增添附加命令行,这里需要在Autoexec一栏中添加刚才的Speedset.exe命令,Speedset后面应当添加参数以改变速度,经多次测试,应将其后的参数设为“+1”,具体添加的命令行为“lhd:/VDMSound/speedset.exe+1”(你可按自己的情况设定)。接下来选择“Performance”标签页,选定“TrytoreduceCPUusage(尝试降低CPU利用率)”,并将其上的游标拖至最左边的“Lowusage”,这个选项可使游戏运行更加平滑;同时一般的WinXP用户最好将下面的“DMAServicing”从5/15调节到更慢的频率,如5/10。

经过如此调节并“确定”后,顺利进入游戏,发觉航海速度果然降了下来,而控制起来也更加平滑。最后要说明的是,在上述两个例子中,尽管使用LanchPad以后,配置会变得很简单,但并不意味着只能通过图形界面使用VDMSound及Speedset,其实这两个命令都可在Command命令行窗口中直接调用。以笔者机器安装路径为例,你只需在运行程序之前转到d:/vdmsound目录,分别键入“VDMSRun”和“Speedset”命令并回车,之后再运行Play.bat,一样可达到出声和降速的目的。

(二)Win2000相对于WinXP的附加说明

在内存配置方面,Win2000和WinXP遵循完全相同的体系,所以无需再多讲。在NTVDM方面,Win2000与WinXP之间最大的不同在于对声卡与显卡标准的支持。前面已经讲到,Win2000根本不提供任何声卡方面的支持,所以没有可能发声,当然也没有可能存在声卡方面的冲突,还是刚才那句话:是福亦是祸。好在有VDMSound,基本上这方面已经与WinXP不存在差别。

相对而言,对显卡标准的支持则是Win2000的致命伤。DOS时代的显卡编程接口标准是VESA1.2/2.0,许多DOS游戏都在编程中使用了些标准,WinXP对二者的支持都相当好,无需顾虑。在Win2000中也提供一些对VESA标准的支持,但必须是在全屏幕下!例如本文中所提到的《三国志Ⅳ》的486版本以及《中关村启示录》在Win2000下即使配置好了内存,也无法双击执行(出错提示找不到VESABIOS),原因就在于双击后程序是先从窗口模式开始运行的。当然你可以运行Command.com(记得修改Command.com的属性使其支持EMS),之后按组合键Alt+Enter进行到全屏模式,再转到游戏安装目录执行相应命令,这样就能顺利进入游戏(也可在这之前运行VDMSound安装目录下的VDMSRun以获取音效)。不过恼火的是,画面出来了,鼠标却出了问题:只能在不到1/2的上半屏活动,这样当然无法正常游戏。

VDMSound的作者曾透露出开发VESA兼容接口的想法,但一直没有下文,笔者也一直没能找到合适的解决方法,好在WinXP迟早会是家庭Win2000用户的升级选择,不过暂时还在Win2000下工作的用户只好忍受这种兼容性问题的痛苦了。

编者注:本文上实际上探讨了NT系统下DOS游戏的玩法,下一部分则有新的焦点:Win98下DOS游戏解决方案,Win32/Win95游戏在WinXP/2000/98下的重现,以及终极解决方案VirtualPC的纵深介绍——内容精彩,可不要让它与你擦肩而过。

(三)Win98下DOS游戏重玩的解决方案

总结上文可知,DOS游戏最致命的瓶颈就是内存管理,其次是其对新硬件的兼容支持。不过对于Win98,解决问题的方案与上述NT系统不大相同,总的来说需要你对DOS基础知识有相当的了解。

1.内存管理的解决方案

前面提到,由于DOS系统不同于Windows系统那样能够智能管理内存,所以其内存管理设置都需手动调试,在上面提到的内存问题解决实例中,你会发现,我们一般在游戏提示内存不够时,通过修改Autoexec和Config的具体配置解决此问题。这个方法对于Win98系统同样适用,但却有一些实践上的不同。

大家都知道Win98问世时宣称是带有一个DOS的,微软把它叫作DOS7.0。在Win98开始菜单中的“程序”组中,你会看到一个名为“MS-DOS方式”的快捷方式,指向“c:/windows/command”,其实这只是个伪DOS罢了,不过它与WinXP/2000/NT中NTVDM系统下的DosCommandPrompt又有很大的不同。

旧版DOS(6.22及其以前版本)启动后都会加载Config.sys和Autoexec.bat中的管理程序,用于管理内存和配置系统。但从Win1.0到Win98,视窗系统的启动总是在DOS的基础上进行,即先启动DOS,再启动Windows。Win32的用户都知道,Windows的启动是通过在DOS命令行下键入“Win”命令实现,要能执行这个Win.com,Config和Autoexec中必须要加载内存管理器EMM386.exe和高端内存驱动Himem.sys等。然而发展到Win98之后,Win.com仍存在(但它默认会在启动时自动执行),但已相当智能,无需在两个初始化文件中进行设置即可正常运行。因此你可以看到,C盘根目录下这两个文件是空的(Config.sys是系统文件,默认情况下为隐藏,需要在“文件夹选项”进行设置:图1)。

但Win98系统的Config和Autoexec仍然重要,因为它们控制着“MS-DOS方式”的内存及系统配置,也就是说,当你在Windows中开启“MS-DOS方式”窗口或运行Command.com命令,甚至双击DOS程序的图标,系统都会为这个运行于兼容模式下的DOS选择Config及Autoexec——而它们就位于C盘根目录之下。不过需要说明的是,你若修改了这两个文件,必须重启系统后才能生效。以下将举例进行具体说明,举例时我们尽量采取与前文相同的游戏,以便大家对照分析。

(1)扩充内存EMS的正确配置

实例6:《三国志Ⅳ》

与前文所说不同的是,如果没有作过调整,进入San486.com的属性你会发现,Win98下居然无法设置EMS内存,因为系统并没有自动加载内存管理工具,如果执行当然游戏会报“notenoughmemory”的。所以我们先要将扩充内存EMS的设置项加上。用记事本打开系统盘下Config.sys文件,在其中加上如下两行命令:

DEVICE=C:/WINDOWS/HIMEM.SYS

(这个语句非常重要,意思是加载高端内存管理,使DOS能使用高端内存。)

DEVICE=C:/WINDOWS/EMM386.EXEram

(EMM386.exe用于管理扩充内存,常用参数为“ram”和“noems”,使用后者能比前者释放更多的常规内存,但很多DOS程序不支持“noems”参数,故使用面较窄。)

之后保存好文件,重新启动机器后再打开San486.com的属性,扩充内存EMS的设置项回来了,根据上文,将它设置为“自动”即可。这样扩充内存EMS的问题就解决了,双击执行San486.com即可顺利进行游戏。

(2)常规内存的正确配置

实例7:《龙骑士4》(Dra4)

如前文所说,这款游戏对常规内存的要求非常高,差不多接近590kB了,同时这款游戏也需要有EMS支持。而通常装载了EMM386.exe,DOS启动后,剩余的常规内存无法满足需要。还是尝试编辑Config.sys文件来释放更多的常规内存。

在编辑前,我们还是先在Win98的DOS兼容模式下键入命令“mem/c/p”查看内存的具体分配情况。在图中可以看到,常规内存剩余有577kB,系统其他常驻程序都是加载在常规内存里的,而上位内存是空的,所以我们要将一些常驻程序尽量加载到上位内存中,从而使常规内存空出,于是将Config.sys文件作如下修改:

DOS=HIGH,UMB
DEVICE=C:/WINDOWS/HIMEM.SYS
DEVICEHIGH=C:/WINDOWS/EMM386.EXEram
(“DEVICEHIGH”表示在上位内存中加载EMM386文件)
DEVICEHIGH=C:/WINDOWS/IFSHLP.SYS

其实这里要做的事情,就是将图6中看到的常规内存出现的程序都尽量加载到高端内存和上位内存中。保存文件后重启,然后再键入命令“mem/c/q”查看,果然这时候常规内存已经有592kB了。这时候运行龙骑士4的Dra4.com,一样没有问题。

(3)超大常规内存的配置

不过不管如何配置Config.sys文件,由于上位内存有限,在Windows环境下又要加载EMM386.exe,你几乎没有办法使常规内存高于590kB,虽然这时候绝大部分老DOS游戏都可以玩了,但也有部分“变态”游戏要求590甚至600kB以上内存,很多专业级游戏网站都建议放弃。其实问题依然可以解决。

一种方法就是从纯DOS模式启动,即在Win98运行前按F8并选择从命令行启动,由于这时已经不是视窗环境,所以系统默认加载的常驻程序要少一些,只要合理配置Config和Autoexec文件,常规内存就可达到600kB以上。

另外一种方法就是使用第三方内存管理驱动软件。这里介绍UMBPCI3.41版,整个文件只有30kB,是很有用的上位内存(UMB)扩充驱动程序(注:可能有某些主板暂不被支持),在Config.sys中用Device命令可以直接加载,最多可提供高达160多kB的UMB。假设将压缩文件解开为文件夹UMBPCI在C盘,然后在Config.sys文件中加入此行语句“DEVICE=C:/UMBPCI/UMBPCI.SYS”,注意需要把它放在Himem.sys文件之后。这样系统启动时,就会调用Umbpci.sys,如果文件被正确调用,你应该可在启动时看到相关信息。这时机器启动后其常规内存已经通常能轻易达到或超过600kB。

不过这种情况适用于不需EMS扩充内存的DOS游戏,因为这时候EMM386是被默认屏蔽的。如果万一游戏既需要600kB以上的常规内存又需要EMS扩充内存,那么我们就必须进行特殊设置同时加载UMBPCI和EMM386。

首先我们必须知道机器所使用上位内存的具体情况。这个可以利用UMBPCI所带的Umbchk.exe工具查看。方法是在机器启动时,按F8选取最后一项跳过Config和Autoexec文件,进入DOS7.0后,执行Umbchk.exe即可查看到机器上位内存的空闲情况,将其记录下来。然后在Config.sys文件中,将加载UMBPCI的语句修改为“DEVICE=C:/UMBPCI/UMBPCI.SYS/I=XXXX-YYYY”,这表示我们将“XXXX-YYYY”这一段上位内存地址交给UMBPCI来处理,但并不是重点,我们要解决的是UMBPCI和EMS同时加载的问题。UMBPCI的作者建议将EMS加载在特定的某个64kB的内存段内,只要这一段是可用的,就最好强制指定它为EMS的加载区。通常情况下这段地址是C800-D7FF,那么就需要如下编写Config.sys文件:

DOS=HIGH,UMB
DEVICE=C:/WINDOWS/HIMEM.SYS
DEVICE=C:/UMBPCI/UMBPCI.SYS/I=D800-EFFF
DEVICE=C:/WINDOWS/EMM386.EXEX=D800-EFFFX=B800-C7FFI=C800-D7FFI=B000-B7FFRAMM3D=256AUTO(注:无换行)

这样,我们就可以同时加载UMBPCI和EMS了。另外一种情况是,如果你的显卡有一个48kB的BIOS而无法使用C800-D7FF(例如NVIDIAGeForce),那么尝试将参数作如下修改:

DEVICE=C:/UMBPCI/UMBPCI.SYS/I=DC00-EFFF
DEVICE=C:/WINDOWS/EMM386.EXEX=DC00-EFFFX=B800-C7FFI=CC00-DBFFI=B000-B7FFRAMM3D=256AUTO

当然,此时系统仍有可能无法正确启动,一般来说是因为无法加载EMM386的页面框架,那么我们可以在加载语句中加上“FRAME=NONE”参数:DEVICE=C:/WINDOWS/EMM386.EXEFRAME=NONEX=D800-EFFFX=B800-C7FFI=C800-D7FFI=B000-B7FFRAMD=256AUTO。

通过这样的调整,Win98下的MS-DOS就可同时支持EMS和拥有超高的空闲常规内存。需要说明的是,也有一些DOS游戏程序不能在没有加载页面框的情况下运行,此时就只好使用第一种方法。

2.软硬件兼容问题的解决

解决了内存问题后,并不意味着任何一款DOS游戏就可在Win98下运行无阻了,因为DOS游戏在新系统下运行不可避免地会出现兼容问题。简单总结,会发现兼容问题仍可简单地分为硬件和软件两类,不过这里要弄清楚一点,在Win98下DOS程序都是直接面对各种真实的硬件,而决不是WinXP中统一的虚拟硬件,所以就软件环境的兼容性来说,Win98要强于WinXP,但就硬件兼容性来说,结论则恰好相反。

(1)软件环境兼容问题的解决

大多数DOS游戏在解决内存问题之后,是可以直接运行在Win98的视窗环境下,然而有一部分DOS游戏会在运行时跳出提示,说游戏只能运行在纯MS-DOS方式下,拒绝在视窗中运行。这时可我们打开游戏的运行文件或PIF文件的属性,在程序页点击“高级”按钮,在弹出的页面中将“禁止MS-DOS程序检测Windows”勾选,确定返回后再运行游戏,一般就可以使游戏跳过DOS环境的检测,从而能运行在视窗环境下。

当然,还是有少部分DOS游戏无论如何也不能在Win98下运行,例如《美少女梦工厂2》,这时就只有点击DOS主程序属性的程序页中“高级”按钮,在弹出的页面中将“以MS-DOS方式运行”选上),同时在这里为它配置合理的内存分配及必要的硬件驱动,确定退出后再点击游戏的主程序运行,系统就会自动重启进入纯DOS,同时加载先前设置好的配置,之后自动运行游戏。然而笔者并不推荐使用这种方法。因为在游戏启动中,一旦发生异常中断就很容易造成系统的启动死循环。所以,对于这些必须在纯DOS下才能执行的DOS游戏,还是自己手动启动到纯DOS再运行为好。

(2)声音兼容问题的解决

一般来说,最常见的硬件兼容性问题是DOS游戏无法正常发声或需要屏蔽声音才能正常运行,其实如果DOS游戏能够在Win98下正确运行,通常是可以正常发声的,因为它一般可以正确使用视窗环境下已加载的声卡。而游戏能顺利进行却不能正常发声的情况基本上是在纯DOS环境下才会发生,这是因为许多人在启动纯DOS环境时并没有在他们的Autoexec文件里加载DOS下的声卡驱动以致游戏无法发声,又或者由于声卡规格太新,即使加载了驱动仍无法被游戏正确调用,最后就是有某些声卡,如主板上整合的软声卡根本就没有提供DOS下的驱动。

因此要解决纯DOS下的声音兼容问题就必须要安装好声卡的DOS驱动。你可以查看自己的声卡驱动盘或上网寻找驱动程序,只要芯片相近即可使用。

其实你也可仔细查看一下游戏安装目录下的文件,许多DOS游戏本身都带有最简单最兼容的DOS声卡驱动,可以尝试安装使用游戏自带的驱动,通常选择最兼容的SB驱动来解决问题,如果问题能得到解决,你完全可以把游戏自带驱动保留下来用作为自己声卡的DOS驱动。如果无论如何你都没有办法使你的声卡在DOS下发声,而你要玩的DOS游戏又无法运行在Win98视窗环境下,“SORRY”,如果不更换硬件或操作平台,你就只有忍受无声了。

(3)显示兼容问题的解决

可能不少人没有注意到,其实DOS游戏的显示兼容问题比声音兼容问题更难处理。道理很简单,声卡的规范其实一直都比较稳定统一,而显卡的发展却日新月异。有些DOS程序需要特殊的显卡模式支持,如EGA、SVGA等,而先进的显卡已淘汰此显示模式。例如游戏《英雄传说4——朱红血》,对已经是非常老的S3Trio32/64(732/764)显卡都无法兼容,勉强去运行,你只能看到被拉长的游戏画面的一半。通常这个问题是绝症,遇上了基本上只有放弃。相对来讲,WinXP由于虚拟了较低端的显卡,这方面的问题反而不大。

不过你仍可尝试用一款名为“SciTechDisplayDoctor”(以下简称SDD)的软件来解决,对于稍微老一些的显卡来说它能够解决大部分问题。早些年的时候,此软件是一个应用广泛的显卡工具,它可提高DOS、Windows系统的显示兼容能力。对于我们来说,最有用的功能就是用于模拟过时的VBE显示模式(不少游戏如《中关村启示录》都需要使用这种模式)。

软件最新为7.X版,分DOS和Windows版本,请对应你使用的环境分别安装,安装后会要求重新启动。软件的使用非常简单,以视窗环境为例。启动主程序,将显示控制开关“ON”打开,这时界面下部分原来不能用的按钮已经可以使用。点击按钮“GraphicsImprovements”,在跳出的页面里能够看到你的显卡所能支持的VBE版本,通常较早的VBE模式都没有被支持,所以我们就需要利用SDD的软件模拟方式。回到主界面,点“Compatibilitytest”按扭,在跳出的界面中的“DriverType”中选择“ScitechDisplayDoctor”,这时右边的“interfacertype”也都可选用了,选中你想模拟的VBE模式,然后点击“TestGraphics”按钮测试,如果能通过测试,说明你的显卡可使用该软件来模拟老的VBE模式,而对于采用VBE显示模式的游戏来说就可以解决问题了。在选定了VBE模式后,再回到主界面点击“PerformanceProfile”按钮,设定需要的特殊显示模式。设定完成再试着运行游戏,如果顺利就要恭喜你了。

(4)其它兼容问题的解决

除去主要的兼容问题外,由于Win98不像Win2000/XP一样,在NTVDM系统中默认加载了光驱和鼠标驱动,因此需要手动加载。若游戏需要使用光驱,你就得安装光驱附带的DOS驱动程序,当然也可用Win98启动盘中附带的万能光驱驱动程序。如果是光盘版的游戏,你还可用fakecd(cdx)来虚拟一个光盘,例如:先把游戏解压到一个目录中,如“d:/sanguo”,之后运行命令行“cdxd:/sanguo/L:z”,即可将d:/sanguo目录指定虚拟为Z盘。如果游戏需要鼠标支持,可到网上搜索下载,一般网上可找到的有mouse.com、qmouse.com、gm.com等,选择能驱动你的鼠标又占用内存少的就行。

(四)DOS/V游戏重玩的解决方案

最后有一个特殊的兼容性问题,一些早期的DOS游戏是日文游戏,比如说经典的游戏《××生》,如果直接在中英文操作系统中执行,就会无法显示文字或显示乱码。这时的解决办法是使用DOS/V操作系统。其实如果解开下载到的DOS/V压缩包,你会发现这其实就是个DOS启动盘而已,与普通启动盘不一样的是,这个所谓的“启动盘”在DOS启动后会加载日文字库,所以用其启动系统后能正确显示游戏文字。但由于总是要用DOS/V启动机器很麻烦,所以后来又出现了两个程序DOSV/SV和DOS/J,实际上这两个程序都是简单的日文字库加载程序,并带有相应字库。它们的好处是可在操作系统启动后根据需要随时加载,兼容性非常好。使用方法也很简单,以DOSV/SV为例,其压缩包中除了两个FONT字库文件和主程序Dosvfont.exe外,还有一个Dosv.bat文件,所以我们可将DOSV/SV解压缩到游戏的安装目录下,然后编辑游戏的批处理执行文件Play.bat,将Dosv.bat放到游戏主程序执行之前,这样游戏执行前就会先加载日文字库,便能正确显示日文。

二、Win95/32游戏重玩

Windows游戏和DOS游戏比起来,安装、运行起来往往比后者方便,但另一方面,它对用户的透明度下降了,用户很难了解游戏的运行环境,更不可能通过Config及Autoexec来“改善”这种环境。所以,重玩Windows上的老游戏更困难。

如果说Win32更像一个基于DOS的准图形化操作系统,那么Win95的图形化操作已经相当完善,不过它对于DOS仍有着很大的依赖性,而且它本身和DOS一样,也是一个16位的操作系统,这就决定了运行在上面的程序,包括游戏在内都是16位的,而Win2000/XP/98都是32位操作系统,运行16位的程序必然存在一些兼容性问题。Win98和Win95/32的兼容性相对较好,一般来说老游戏不会遇到什么问题。而从Win2000开始,微软正式终止了Win9X系列的开发,把操作系统全面转向“NT”架构,此计划贯彻实施的结果是宣扬全面兼容的WinXP。如此我们还是先从WinXP开始分析,并在其后对Win2000/98作补充说明。

(一)WinXP下Win95游戏重玩的方案

实例1:《大航海外传中文版》

运行程序看到一个堆满乱码的对话框,启动失败。要搞清楚失败原因,先要看懂对话框上的字,显然,这些字是Big5编码的。对基于NT的操作系统,不要想着去用那些内码转换工具,因为Win2000和WinXP都有完整的内码系统,对于这款游戏,不如先来试试系统自己的功能。

打开“控制面板”→“区域和语言选项”,进入“区域选项”标签页,在“标准和格式”及“位置”的下拉菜单中选择“台湾”,再进入“高级”标签页面,将“非Unicode程序的语言”设置为“台湾”(这一项是必须的),并确认“代码页转换表”中选中了“繁体中文Big5”)。设置后重新启动机器,系统就可以显示Big5内码的汉字了,而且系统及多数其他内码的程序都可以正常使用,只是字体会难看一点。这种方法的缺点就是每次更改都需重启系统。

改好了吗?现在可看明白了,原来这个弹出窗口是提示我们要使用256色,还要在显示属性里改颜色吗?不用这么麻烦了,现在轮到WinXP的兼容性设置登场了:在游戏的主运行程序或其快捷方式上点右键,选择“属性”,在弹出窗口中选择兼容性标签,再选中“用256色运行”即可(有些游戏还必须选择用“何种兼容模式运行该程序”等其他选项)。这样游戏就能顺利运行了,在游戏运行时,桌面会自动切换至256色,等游戏退出后又恢复原有状态,很是方便。

兼容性设置即使对光盘上的只读文件也同样可进行设置,因为这项设置并不是更改文件本身的属性,而是记录下它运行时所需的环境,而此记录则是储存在系统中。实际上,WinXP对多内码有着良好的支持,所以,该游戏以及后面的《太阁立志传2》,都无需修改区域和语言选项即可重玩,窗体上虽有乱码却基本不影响理解。

反思及总结:通过这个例子可以知道,很多老游戏在新系统上运行时都存在色深及分辨率的问题,所以,出现问题时不妨先在兼容性标签里试试再说。另外,如果桌面分辨率和游戏分辨率一样时(640×480),游戏还要求自身窗口必须在最前端,那么还需在“任务栏和‘开始’菜单属性”中,把“将任务栏保持在其他窗口的前端”的勾选去掉,这一特性也具有普遍性。

实例2:《三国志孔明传》和《文明Ⅱ》

这两个经典游戏,在运行时会出现同样的报错:找不到Wing.dll,从扩展名我们可以知道Wing.dll是一个动态链接库文件,但它到底是何方神圣?在Windows游戏发展的初期,游戏画面对硬件的要求还很低,更谈不上什么3D,那时简单的图形加速功能都通过一个动态链接库文件实现,就是上面提到的Wing.dll了。

下载解压后安装即可。简单安装之后《文明Ⅱ》的运行就完全正常了。而《三国志孔明传》则较郁闷,由于WinXP的视频输出接口不能很好地兼容这款游戏,导致输出的画面时常无法自动刷新,具体表现就是变换场景时可能会黑屏,就算等待也无效,这种情况下,我们只能强制刷新,比较有效的方法就是将窗口最小化,再最大化,画面就出来了——这当然算不上解决方案,只是想说明出现这种问题就是绝症了。

实例3:《太阁立志传2》

我们举这个例子是想说明Win95游戏在新系统下所面临情况的复杂性,若读者能从中有所获益,也算对得起这种种的折腾了。运行此游戏会产生一个典型的XP非法操作窗口,选择“不发送”之后程序终止,之后尝试兼容性设置却毫无用处。我们甚至从微软网站下载了WindowsApplicationCompatibilityToolkit3.0,这是一套专门用于解决程序兼容问题的工具包,里面有很多复杂的兼容性设置,但由于很多设置专业性极强,普通用户较难上手,它更多是为程序员调试老程序之用。好在其数据库中包括了很多常见的老程序的兼容性信息,我们在里面惊讶地发现了《太阁立志传2》,不过短暂欣喜过后是残酷的现实:在它虚拟的兼容环境中游戏仍然无法正常运行。事实上,我们通过这个工具包的所有努力都没有成功,希望它不是真的这么“一无是处”,如果读者朋友以后遇到什么兼容性问题,倒不妨试试。

还是“自己动手,丰衣足食”吧。从报错信息着手,在报错窗口右下角有一个叫“请单击此处”的链接,照办后会弹出较详细的错误报告,从这里可以看出,都是一个叫“MCIAVI32.dll”的动态链接库惹的祸,这又是何许“库”也?MCI是MediaControlInterface(媒体控制接口)的缩写,凡是和这个词沾边的文件大多是和视频及音频控制有关的。事实上也是如此,它是一个32位的AVI媒体驱动,因此判断出错原因是老版本Windows程序调用了新系统的接口,而通过该接口指向的驱动却不同,从而造成了错误。

既然是和AVI有关的驱动,我们认为极有可能是用于播放开场动画的,开场动画与游戏没有直接关系,但过不了这一关游戏就无法继续。那么,我们能不能索性跳过这个环节呢?开场动画看不看是小事情,于是我们决定删掉MCIAVI32.dll,这个文件就在System32目录下,直接删文件是不行的,WinXP具有文件保护功能,重启后文件就会自动恢复。

当然你还可以在另一个地方找到“它”,双击控制面板中的“系统”图标,依次选择“硬件”→“设备管理器”,展开“声音、视频和游戏控制器”→“媒体控制设备”,双击后在“属性”标签中就列出了这个文件,选中文件再点右下角的“属性”,可将其设置为兼容16位,但这样做了以后,仍然不能解决问题(难道说了半天全是废话?)。别急,我说这些是为了让大家更清楚地了解这个文件在系统中的作用及位置。真正删除它需要使用注册表编辑器:通过开始菜单运行“regedit”,找到如下两项,编辑前别忘了先备份(右键单击项图标后选择“导出”):

HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/drivers.desc
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/WindowsNT/CurrentVersion/MCI32

分别在这两个项下删除“MCIAVI32.dll”和“AVIVideo”字符串。这样做并不会真正删除该文件,但系统已经认为它不存在了,再次运行游戏,成功!不过玩完游戏可别忘了恢复注册表哦。

反思和总结:由此可以看出在WinXP解决老版Windows游戏不能运行问题的复杂性。实际上这也是因为Windows系统的复杂性远高于DOS的缘故。对于普通玩家而言,一些游戏在安装好Wing.dll、设置好语言及兼容性之后仍不能玩,基本上可以放弃通过系统设置解决问题的想法。此时更好的兼容性解决方案,应该还是虚拟机软件,想必微软也认识到了这一点才会收购VirtualPC,在本刊2003年第7期中,我们已经初步介绍了虚拟机软件的使用方法,本段结束后将对此软件进行更深层次的探讨。

 (二)Win98/2000相对于WinXP的附加说明

Win2000下游戏的情况与WinXP大抵相同,尽管Win2000没有兼容性设置,但只要按要求调整好桌面解析度及色深即可,只是每次都要手动切换,麻烦一点而已,但是Win2000区域和语言选项的设置略有不同。而在Win98下玩Win95游戏几乎没有遇到任何阻力,只要安装好Wing.dll,在需要转码时安装南极星等工具即可,可见Win98实实在在属于Win95的近亲。

(三)Win32游戏相对于Win95游戏的附加说明

由于Win32是一个事实上的过渡产品,尽管它很成功,但专为其设计的游戏却不多,不过我们所能找到的游戏的兼容性却出乎意料的好,甚至不需安装Wing.dll(因为连Wing.dll都用不上),只需将桌面分辨度简单改为640×480,8位色深(即256色)后,在WinXP/2000/98下都可顺利运行。

三、虚拟机软件的局限性及应用技巧

通过上述复杂的介绍,加上自己的努力尝试,相信大部分的老游戏已经能够在你的新系统上重焕青春。然而你也可以看到,尽管微软和周边软件作者们作出了各种各样的努力,兼容性问题始终存在:在Win98下,老游戏要直面真实PC的显卡和声卡;在Win2000下,显示模式的问题很让人苦恼;而WinXP尽管在虚拟硬件方面对更多的显示和声卡模式进行了支持,但对于跨越数年的DOS~Win95时代,这些支持远远不够。

不过或许怀旧只是一种情绪,花时间来研究兼容性并不是一件被商业利益驱动的事情。对于VDMSound的作者或微软NTVDM的设计者来讲,只要再前进几步,就能解决更多的问题,而实际上脚步或许就停留在此。然而幸亏还有以VMWare和VirtualPC为代表的虚拟机软件,幸亏它们在解决一台机器上运行多操作系统等问题的时候顺带触及了新老系统间兼容性问题的解决。

(一)虚拟机软件的局限性

应当来讲使用虚拟机软件完全虚拟出对应的旧操作系统,老游戏的重玩问题就能完美解决,然而这个结论只能说太过绝对。绝大部分游戏应当可以在虚拟机下顺利运行,特别是Win32/95下的游戏,使用虚拟机软件后,很多在新系统下难以解决的问题几乎都能迎刃而解。但也会有意外的情况——当然这种意外实际上却是在意料之中的。

看过本刊今年第7期《重返DOS仙剑时代——VirtualPC应用一则》的朋友肯定都会明白,虚拟机软件虚拟的是一台PC,而不是一个操作系统,既然是一台PC,就肯定会设定自己的硬件(相当于你攒一台机器),这里面对老游戏而言,显卡和声卡最为关键。

以VirtualPC5.1为例,其虚拟的显卡是S3Trio32/64PCI。尽管这款显卡的兼容性很不错,但在实际操作过程中,仍发现一些游戏如《英雄传说4——朱红血》、《大富翁3》等,在运行时游戏画面被拉长只剩1/2。此情况如果参照前文Win98下显卡兼容问题,使用SDD,就会暴露虚拟软件的另一个问题:虚拟硬件的缺陷。简单来说,就是无法达到真实虚拟的地步,SDD在虚拟机下无法对本身就是虚拟出的硬件进行再次虚拟处理。这样,此问题在VirtualPC上根本无法解决。在另一款很出名的虚拟软件VMWare(以3.2版本为例)的帮助说明中也提到,使用DirectDraw和Direct3D图形技术的软件不能在其上运行,但与我们这里讨论的话题关系就不大了。

相对显卡,声卡方面的兼容性问题可能少一些,在我们使用VirtualPC进行测试的整个过程中,并没有发现有声卡兼容方面的问题。不过不少游戏在初次运行时会要求设定声卡的参数(或者你也可手动进行设置),所以这里将VirtualPC和VMWare所虚拟声卡的参数陈列如后。VirtualPC5.1:CreativeLabsSoundBlaster16,Port220,IRQ5,8-bitDMA1,16-bitDMA5;VMWare3.2除16-bitDMA参数为7以外,余者皆与VirtualPC5.1相同。

(二)虚拟机的应用技巧

很多初次使用虚拟机的朋友都会觉得在主机和虚拟机之间传输数据是很麻烦的事情,这种麻烦的感觉就像面对两台没有联系的电脑一样,当然虚拟机除利用软驱和光驱,还可通过制作.iso和.vfd镜像文件传递数据——但仍旧很麻烦。那么同样类比,我们就会发现,利用网络是非常自然的解决方案!

下面以VirtualPC为例进行说明。实际上软件安装设置完之后,就会在主机上安装一个虚拟网卡用于和虚拟机建立网络连接,当然我们不用在新旧系统间手动建立局域网,毕竟那需要太多的专业知识。VirtualPC安装包中已经为DOS和Windows分别提供了附加的工具以实现此功能(VMWare中类似的工具需另外下载)。

我们先来看安装了DOS后的虚拟机如何使用这个工具。以MSDOS6.22为例,启动虚拟机后,点击菜单“Floppy”→“CaptureImage”,在弹出窗口中找到软件第一次解压缩后的文件夹,并顺次找到“Additions”→“DosAdditions”→“DosAddition.vfd”,这是专门为DOS设计的附加功能软盘镜像文件。回到DOS虚拟机界面,进入A盘,输入“dosadd”即可开始安装,之后在“Floopy”菜单中释放“DosAddition.vfd”并重启,这样,这个DOS虚拟机启动后会自动加载名为“FolderSharing”(文件夹共享)的驱动,同时还会加载通用光驱驱动,实质上这个共享功能是间接利用了系统的网络功能,将主机上的某个文件夹映射为虚拟机上的某个盘。

接下来点击菜单“Edit”→“Settings”,打开此虚拟机的设置对话框,找到“SharedFolders”,初始情况下这里面是空的。点击右面的“ShareFolder”按钮,在弹出的对话框中选择你需要在DOS下直接访问的文件,如本例中的“E:/dosgame”,在下面的“Driveletter”中选择映射后的盘符,本例接受默认设置“Z”,如果需要每次启动虚拟机都共享此目录,可将“Shareeverytime”勾选上。确定之后,在虚拟机中输入“Z:”,即可对主机上的E:/dosgame目录进行访问。

这里有两个说明:(1)如果在DOS下使用共享文件夹功能,其驱动会占用常规内存空间,致使游戏可使用内存减少,因此建议你最好拷贝完所需要的文件,然后打开根目录下Autoexec.bat中的“c:/cntx/fshare.exe”和“c:/cntx/idle.com”,在其前加上“rem”禁止其运行。当然DOS下的修改要靠Edit命令完成,需要你对DOS有一定了解。(2)在Win95或其后版本中安装附加功能更为简单,通过菜单“CD”→“CaptureImage”选择同上“Additions”目录下的VPCAdditions010021.iso文件,在虚拟机中安装光盘上的Setup.exe,安装完后重启,类似上述操作选择共享文件夹即可完成映射,当然Windows安装完附加工具后,有更实用的功能:你可以在主机和虚拟机之间随意拖拽文件!

此外还有一些应用技巧,如不熟悉DOS编辑的朋友可将DOS安装磁盘当作第二硬盘挂接在另一个装有Win98的虚拟机下,利用图形界面编辑文件;又例如在虚拟机暂时不用的情况下可以按右Alt+P组合键暂停虚拟机运行,以释放一部分内存。你甚至还可以通过VirtualPC和游戏修改软件如GameMaster的合作,修改常规情况下无法修改的游戏。这些具体的操作就留待大家细细研究了。

 

现在很难找到了 本文分步介绍了如何在 Virtual PC,版本 4.0 5.2 中创建一个软盘上的图像。 可以使用软盘上的图像如如果它们是在 3.5 英寸磁盘驱动器的物理 3.5 英寸磁盘。 在某些 Windows 程序,您必须将 3.5 英寸磁盘插入 A 驱动器安装或使用该程序时。 尽管您可能能够使用物理 3.5 英寸磁盘,但有些情况必须使用一个软盘上的图像。 是例如您使用不具有较的 3.5 英寸磁盘驱动器的便携式计算机,但必须使用为 3.5 英寸磁盘。 更多信息要创建虚拟 PC 中的软盘上映像,请按下列步骤操作: 启动虚拟 PC,单击 文件 ,然后单击 虚拟磁盘向导 。 在 欢迎虚拟磁盘向导 页上,单击 下一步 。 在...要创建虚拟 PC 中的软盘上映像,请按下列步骤操作: 启动虚拟 PC,单击 文件 ,然后单击 虚拟磁盘向导 。 在 欢迎虚拟磁盘向导 页上,单击 下一步 。 在 选择操作 页面上单击 创建新的软盘或硬盘映像 ,然后单击 下一步 。 在 选择新的磁盘类型 页上单击 创建软盘上图像 ,然后单击 下一步 。 在 新软盘上 页面上的在 磁盘图像位置 框中,键入您要使用软盘磁盘映像文件夹路径。 或者,可以单击 浏览 ,然后找到该文件夹。 在 软盘磁盘类型 区域单击 低密度 (720k) 或 高密度 (1.44 MB) 。 通常,使用高密度磁盘。 单击 下一步 ,然后 软盘创建摘要 本页单击 完成 。 当您收到"磁盘已成功创建"消息时,单击 关闭 。 请注意 虚拟 PC 可以安装在软盘上的任何平面文件表示形式。 许多常见的 Windows 实用工具可以创建这样的图像。 但是,请确保关闭任何压缩功能。 Virtual PC 仅适用于是完全 720 KB 或 1.44 MB 软盘的映像文件中。 -------------------------------------------------------------------------------- 这篇文章中的信息适用于: Connectix Virtual PC for Windows 5.2 Connectix Virtual PC for Windows 5.1 Connectix Virtual PC for Windows 5.0 Connectix Virtual PC for Windows 4.3 Connectix Virtual PC for Windows 4.2 Connectix Virtual PC for Windows 4.1 Connectix Virtual PC for Windows 4.0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值