本世纪最经典好文---新系统下经典老游戏[中文HGAME]重玩全攻略(感谢作者)

送给所有爱玩游戏的老鸟们
 
老游戏中有大量经典作品,其中中文的HGAME更是经典中的经典!
 
◆ 告别的年代 失色的回忆?——新系统下经典老游戏重玩全攻略 ◆
 
 “新”与“老”当然是相对的,不过在开篇之前有必要确定我们的讨论范畴,这里的“老”是指为Win98之前的操作系统,包括DOS和Win32/95,而新系统则是指Win98/2000/XP。毫无疑问,有很多老游戏都很值得我们来重温,但重温的方法也各异,有的人会去买例如奔腾133的“老爷级”机器,专门用于玩老游戏;不过老PC也不是谁都能买到的,而且为了玩老游戏真愿意如此大动干戈,也算是骨灰级玩家了。于是典型的解决方法是采用多系统,其中有一个系统装上MSDOS 6.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虚拟机支持(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后,提示找不到所支持的显卡,暂时不去理会,执行完最后一条命令Game,在屏幕上看到一行字:EMS memory manager not found(找不到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两项均调为“自动”(图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文件,则需参考上述间接修改方法。
  
  (2)常规内存的正确配置

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

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

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

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

  实际上DOSX是NTVDM为支持DPMI(Dos Protected Mode Interface,DOS内存保护模式接口)类型程序而执行的命令。保护模式可以让程序获得更多的内存资源,但使用DPMI的游戏都必须附带一个DOS扩展程序,这个程序一般为DOS/4GW v1.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文件,依上法进入属性对话框,在程序标签页中点击“高级”按钮(图12),在弹出的Windows PIF窗口中重新指定专用初始化文件(图13),将二者的位置分别修改为“c:/dra4/autoexec.nt”和“c:/dra4/config.nt”并两次“确定”。

  接下来我们要对这两个自定义的初始化文件进行修改。使用记事本打开Autoexec.bat,可以发现里面有一大堆以“REM”开头的文字行(表示这一行是注释,不会被执行),值得注意的是有3行lh命令(图14),这是将其后程序尽量(不一定成功喔)加载到上位内存的命令,这里的mscdexnt.exe、redir和dosv分别提供了NTVDM对光驱、网络(还可以玩经典游戏的网络版!)以及DPMI的支持。这个例子中由于三者都无需使用,因此在这3行前面分别加上“REM”以表示取消(实际上去掉DOSV就足够了,这里干脆一不做,二不休)。编辑完成之后记得保存,然后回Dra4目录,双击Dra4.com,你会发现果然是一击奏效(图15),需要提醒的是,在修改Autoexec.nt的同时仍需配置好Dra4.com的内存参数,特别是EMS。
  
  反思及总结:这个例子中并不需要DPMI的支持,但若是碰上了既需要DPMI,同时又得不到常规内存的游戏怎么办?我们还是有办法的,只需修改Config.nt文件,在其中加入一行“EMM = RAM”。这样配置后MOUSE和DOSX等程序会部分或全部从常规内存中移到上位内存中,从而获得大量的常规内存(图16,这是修改后用“mem /c |more”命令进行查看的结果,可见DOSX已进入上位内存,而可用常规内存也达到了615.3kB之多)。最后需要说明,EMS和可用常规内存显然存在潜在性的资源争夺,系统之所以不将EMS默认设为“自动”,原因在于设置EMS后,一些原来驻留在上位内存的一些程序就会被赶到常规内存中去,从而导致可用常规内存减小,所以应根据DOS程序需要选择是否使用EMS。
  
  2.声音及其他兼容问题的解决

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

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

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

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

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

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

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

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

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

  软件下载可参考:http://www.onlinedown.net/vdmsound.htm。同时建议你下载作者提供的补丁包:http://vdmsound.sourceforge.net/files/VDMSound.2.0.4.update1.zip。软件的安装过程比较简单,一路“Next”即可,以下为方便说明,假设将此软件安装到d:/vdmsound目录下,安装完成后,将补丁包里的文件全部解压并拷贝到d:/vdmsound目录下,覆盖原文件即可。

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

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

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

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

  1 右键点击游戏目录下的Play.bat,选择右键菜单中带音乐标记的“Run With VDMS”(图26)。

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

  3 在这一步中选择“Create a new configuration from scratch(生成一份新的配置文件)”,当然如果不是初次使用,以前有游戏的设置和当前要设置的相同,也可选择“Reuse an existing configuration”(图28)。

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

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

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

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

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

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

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

  要解决这个问题,需要使用专门用于降速的软件,这里笔者选择了同样由VDMSound作者写出的Speedset,参考下载网址为:http://vogons.zetafleet.com/attachment.php?s=&postid=4739。下载完成后,首先可将压缩包中的两个文件Speedset.dll和Speedset.exe解压到d:/vdmsound目录下。接下来将配合VDMSoundLanchPad实现降速功能。

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

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

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

  相对而言,对显卡标准的支持则是Win2000的致命伤。DOS时代的显卡编程接口标准是VESA 1.2/2.0,许多DOS游戏都在编程中使用了些标准,WinXP对二者的支持都相当好,无需顾虑。在Win2000中也提供一些对VESA标准的支持,但必须是在全屏幕下!例如本文中所提到的《三国志Ⅳ》的486版本以及《中关村启示录》在Win2000下即使配置好了内存,也无法双击执行(图38,出错提示找不到VESA BIOS),原因就在于双击后程序是先从窗口模式开始运行的。当然你可以运行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下的重现,以及终极解决方案Virtual PC的纵深介绍——内容精彩,可不要让它与你擦肩而过。

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

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

  1.内存管理的解决方案

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

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

  旧版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内存,因为系统并没有自动加载内存管理工具(图2),如果执行当然游戏会报“not enough memory”的。所以我们先要将扩充内存EMS的设置项加上。用记事本打开系统盘下Config.sys文件,在其中加上如下两行命令(图3):

  DEVICE=C:/WINDOWS/HIMEM.SYS

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

  DEVICE=C:/WINDOWS/EMM386.EXE ram

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

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

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

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

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

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

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

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

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

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

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

  首先我们必须知道机器所使用上位内存的具体情况。这个可以利用UMBPCI所带的Umbchk.exe工具查看。方法是在机器启动时,按F8选取最后一项跳过Config和Autoexec文件,进入DOS 7.0后,执行Umbchk.exe即可查看到机器上位内存的空闲情况(图13),将其记录下来。然后在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.EXE X=D800-EFFF X=B800-C7FF I=C800-D7FF I=B000-B7FF RAM M3 D=256 AUTO (注:无换行)

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

  DEVICE=C:/UMBPCI/UMBPCI.SYS /I=DC00-EFFF
  DEVICE=C:/WINDOWS/EMM386.EXE X=DC00-EFFF X=B800-C7FF I=CC00-DBFF I=B000-B7FF RAM M3 D=256 AUTO

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

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

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

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

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

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

  因此要解决纯DOS下的声音兼容问题就必须要安装好声卡的DOS驱动。你可以查看自己的声卡驱动盘或上网寻找驱动程序。这里向大家推荐http://firststep.ahwww.com/newdos/doswarec.html,这里有不少常用声卡的DOS通用驱动,只要芯片相近即可使用。

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

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

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

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

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

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

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

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

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

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

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

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

  其下载可参考:http://xf-trans.hb.cninfo.net/sanguogame/download/tools/wing.rar,解压后安装即可(图38)。简单安装之后《文明Ⅱ》的运行就完全正常了(图39)。而《三国志孔明传》(图40)则较郁闷,由于WinXP的视频输出接口不能很好地兼容这款游戏,导致输出的画面时常无法自动刷新,具体表现就是变换场景时可能会黑屏,就算等待也无效,这种情况下,我们只能强制刷新,比较有效的方法就是将窗口最小化,再最大化,画面就出来了——这当然算不上解决方案,只是想说明出现这种问题就是绝症了。
  
  实例3:《太阁立志传2》

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

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

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

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

  HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/drivers.desc
  HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/MCI32

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

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

  Win2000下游戏的情况与WinXP大抵相同,尽管Win2000没有兼容性设置,但只要按要求调整好桌面解析度及色深即可,只是每次都要手动切换,麻烦一点而已,但是Win2000区域和语言选项的设置略有不同(图47)。而在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和Virtual PC为代表的虚拟机软件,幸亏它们在解决一台机器上运行多操作系统等问题的时候顺带触及了新老系统间兼容性问题的解决。
  
 (一)虚拟机软件的局限性

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

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

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

  相对显卡,声卡方面的兼容性问题可能少一些,在我们使用Virtual PC进行测试的整个过程中,并没有发现有声卡兼容方面的问题。不过不少游戏在初次运行时会要求设定声卡的参数(或者你也可手动进行设置),所以这里将Virtual PC和VMWare所虚拟声卡的参数陈列如后。Virtual PC 5.1:Creative Labs Sound Blaster 16,Port 220,IRQ 5,8-bit DMA 1,16-bit DMA 5;VMWare 3.2除16-bit DMA参数为7以外,余者皆与Virtual PC 5.1相同。
  
 (二)虚拟机的应用技巧

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

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

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

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

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

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

当年的精彩:DOS游戏怀旧全攻略

1、运行exe时出现Runtime error xxx at xxxx-xxxx,比如仙剑的install.exe。

  出现这种问题可能的原因比较多,如果确定游戏本身没有问题,或者曾经有过正常运行的历史,则基本可以判断是CPU和内存的问题了。Runtime error后面的错误编号可以帮助判断错误原因,最常见的是Runtime error 200,这是因为CPU速度太快引起的,具体问题分析和解决请参见第五章“捣乱的喽罗”。

  2、运行游戏时显示:
  Error: Free memory is not enough 570k,或Base memory not enough,这是常规内存不足,可能是加载了太多的常驻程序所至。

  3、运行游戏时显示:
  XMS not found! 这是因为没有加载扩展内存管理程序himem.sys所致。

  4、运行游戏时显示:
  XMS = -xxxxx,Error: XMS is not enough xxxk,这是因为xms太大,而很多老游戏采用了一个signed integer来存储xms的数量,导致32767以上的数值变成负数。

  5、运行游戏时显示:
  Error: No EMS found!!! 这是因为在内存配置时加载了关闭EMS的选项,可以通过修改config.sys来解决。

  6、运行游戏时显示:
  EMM386 has detected error #xx in an application at memory address xxxx:xxxx. To minimize the chance of data loss, EMM386 has halted your computer. For more information, see the readme.txt file. To restart your computer, press enter. 然后死机。这是EMM386的设置有问题,可以根据游戏的要求,对config.sys进行修改。

  以上问题,请参见第三章“内存的结界”。

  7、游戏的音乐和音效问题。音乐的设置相对简单,但多数人玩仙剑没有音效,采用AC“97集成声卡的更可怜,很多玩友连音乐都没有……这是因为新的操作系统对中断、DMA的管理方式做了改动,以前的DOS游戏出现了很多兼容性问题。另外大多数AC”97集成声卡都不支持DOS,或者根本不提供DOS驱动程序。目前只有CMI8738等少数硬声卡可以支持DOS,如果你的声卡是ALC650等软声卡的话,建议你买一块PCI声卡,老狼现在对这个问题没有什么办法。关于声卡的问题,请参见第四章“声音的女巫”。

  8、在纯DOS系统下,游戏花屏直至死机,这种问题虽然不常见,但却直接影响我们游戏的进行。这多半是因为你的显卡太新了,或者显存太大了。另外,还可能与显卡支持的VBE版本和BIOS中显卡的相关设置有关。具体问题分析和解决请参见第五章“捣乱的喽罗”。

内存的问题是我们能否运行游戏的关键,没有声音还好办,好歹游戏还能玩;内存出错可就惨了,给面子的来个xxx Error,不给面子的干脆死机!为了能把问题讲的更清楚些,这里老狼先介绍一下混蛋微软的内存管理,有相关基础的兄弟和不想浪费时间的玩友不妨跳过这一段。以下内容老狼参考了不少资料,涉及到微机原理相关内容,如有不妥之处还请各位指正。

  1、结界的历史

  1979年,Intel推出了具有20根数据总线的8088芯片,寻址能力为1MB,并且受到了IBM的扶植。另一方面,Microsoft在为基于8088的电脑设计的操作系统DOS中,采用了“段内寻址”的方式,每个段的长度为64K字节,共有65535个段,但是因为段与段之间可以互相重叠,段的起始地址间距为16字节,所以DOS的寻址能力只有65535*16Byte,也就是1MB。然而,IBM认为1MB实在太大了,没有人会用到那么多的内存,于是又把384K内存(UMB,Upper Memory Block)分配给ROM BIOS和视频内存等等,于是,邪恶的640K结界形成了,出于兼容性的考虑,此后的DOS一直保留着原有的内存管理机制。这个640K的Base memory,又叫Conventional memory,是系统最基本内存,它是DOS和所有程序都可以用的内存区,被称为常规内存。它是系统内存中最宝贵、最紧张的资源,如果一个程序因为内存不够而无法运行,大多是因为这部分空间不够使用造成的。

  随着硬件的发展,80386DX已经是32位微处理器,实际寻址能力达4GB,反观旧的内存管理规范却处处碍手碍脚,于是扩页内存Expanded memory规范横空出世,取代了INT 15H,使程序能够访问32MB的内存空间。EMS通过一种页面映射分配技术的反复映射访问所有的EMS内存,这样的效率并不高,所以只有少数老游戏使用了EMS,比如《魔神战记2》。由于EMS并没有解决根本的问题,Microsoft又制定了扩展内存Extended memory管理规范XMS,通过在实模式与保护模式之间的快速切换,使程序在保护模式中能够直接使用系统所有内存,从而快速访问XMS。XMS简单而实际,被众多DOS游戏采用。我们打破了结界吗?还没有!很多游戏采用了一个signed integer来存储XMS的数量,导致32767以上的数值变成负数,这就要求我们降低内存数量了。唉,如果说640K的结界是天灾,这个signed integer的结界就是人祸了。

  再后来,人们终于找到了理想的突破640K结界的方法:使用DOS保护模式(DOS Protected Mode)。80386及以后的CPU在电脑启动后都会进入实模式(Real Mode),以兼容早期的8088。当运行在保护模式中时,CPU的直接寻址能力高达4GB,并且提供了很多高级功能,使程序可以直接使用系统所有的内存资源,常规内存、扩页内存和扩展内存统统失去了意义;并且,保护模式能够充分发挥32位CPU的威力,极大的提高了效率。常玩游戏的各位一定对DOS4GW非常熟悉,它是Watcom C/C++专用的内存管理工具,可以使程序运行在32位保护模式下。著名的《金庸群侠传》就是用了这个DOS扩展器。运行在32位保护模式下的游戏很少遇到内存问题,只可惜这样的游戏真是不多啊。

  2、贤者的符咒

  这里我们将结合config.sys中内存的有关设置,结合具体游戏来介绍突破内存结界的方法。config.sys是DOS的主要配置文件,放在系统盘的根目录下。

  一个典型的config.sys,可以适应多数游戏:

  ①device=c:/dos/himem.sys /testmem:off
  ②device=c:/dos/emm386.exe ram
  ③devicehigh=c:/dos/ide.sys /d:MSCD000
  ④dos=high,umb
  ⑤files=30
  ⑥buffers=30
  ⑦stacks=9,256

  为了方便解释,老狼在行首加了行号。

  ①himem是XMS存储器的管理驱动程序,它的主要功能是把扩展存储器按XMS规范来管理,也就说,它把传统的扩展存储器改造成了XMS存储器。此外,HIMEM.SYS可以建立HMA(High Memory Area)存储器供DOS使用。如果运行游戏时显示:XMS not found! 这就是因为没有加载himem.sys所致。为了加快启动的速度,可以在后面加上 /testmem:off 参数,跳过内存检测。另外,加上 /cpuclock:on 可以修正系统时钟速度变化的错误。

  ②emm386是EMS的管理驱动程序。它的功能是把XMS存储器模拟成EMS存储器来使用,并且建立UMB存储器。后面的ram参数表示同时建立UMB和EMS存储器,如果你确定游戏不需要EMS内存,可以考虑把ram换成noems参数,这样可以获得更多的UMB空间。但如果运行游戏时显示:Error: No EMS found!!! 也就是说游戏要求使用ems,你就不能用noems参数了。如果运行游戏时显示:Error: Free memory is not enough 570k,或Base memory not enough,这是常规内存不足,应该考虑减少常驻内存的程序或将程序加载到UMB中。

  ③devicehigh=c:/dos/ide.sys /d:MSCD000,这是光驱的驱动程序,devicehigh表示把程序加载到UMB中,这样可以为常规内存腾出更多的空间。如果你不需要在DOS下使用光驱,这行可以省略。

  ④dos=high,umb,设置DOS占用的内存,high表示把DOS核心部分装入HMA以节省常规内存,umb表示允许DOS与UMB建立联系,以便装载TSR程序或设备驱动程序到UMB中,若改成noumb则表示不允许使用UMB。

  ⑤files=30,设定程序可以同时打开的最大文件数,若不写这一行,相当于默认值files=10,可能导致大型程序运行失败。

  ⑥buffers=30,设定缓冲区数量。DOS默认缓冲区数Buffers的值为15,每个Buffer占523字节。如果设定了DOS=HIGH,Buffers会移到HMA中,这当然是好事,但是如果用户自己设定的Buffers太大,超过47个,则HMA装入DOS核心后的剩余空间无法容纳,就把全部Buffers移至常规内存中,这将得不偿失,30的数量比较合理。buffers还可以在后面加上一个数字,表示高速缓冲区数量,如buffers=20,8。老狼没感觉到这个选项对游戏有什么影响,也就没有使用过这种设置,所以就不管它了。

  ⑦stacks=9,256,设定使用的堆栈的数量。第一个数字是堆栈数量,第二个是每个堆栈的大小。通常指定的值是9,256,这个值可以满足大多数的需求。

  只有这些显然是不够的,让我们再来看看其他可能遇到的内存问题。如果运行游戏时显示:EMM386 has detected error #xx in an application at memory address xxxx:xxxx. To minimize the chance of data loss, EMM386 has halted your computer. For more information, see the readme.txt file. To restart your computer, press enter. 这多半已经死机了,不过根据老狼的经验,出现这种错误偶然成分居多,就好像windows的非法操作一样,重新启动后多半就能恢复正常。如果还是不行,可能是EMM386的设置有问题,可以根据游戏的要求,对其进行修改,遇到具体问题时我们再讨论。

  下面是本章的重点,很多玩友在玩游戏时收到的错误信息是 XMS = -xxxxx,Error: XMS is not enough xxxk,冤枉啊,内存怎么成了负数呢?其实这是因为xms太大,而很多老游戏偏偏采用了一个signed integer来存储xms的数量,导致32767以上的数值变成负数。解决的办法有很多,如果你的内存是64M,你可以在运行游戏之前运行lh smartdrv 32768 16384,加载高速磁盘缓冲程序。lh表示将smartdrv读入UMB,32768表示使用的内存数量(KB),16384表示提供给windows的缓存数量。这样一来,既减少了内存,又增加了系统效率,一举两得。为什么高于64M内存的电脑不能使用这种办法呢?因为smartdrv的缓存越大,它本身占用的空间也就越大,如果UMB容不下它,他会毫不客气的抢占常规内存,直接导致游戏无法运行。实际上,加载带/x参数的smartdrv可以极大的提高游戏性能,所以它是我们必备的法宝。

  还有一种办法是使用虚拟硬盘程序,将内存虚拟成硬盘,用很小的常规内存或UMB就可以轻松占用掉大量XMS,很适合大内存的玩友使用。DOS中自带的ramdrive.sys必须在config.sys中加载,一旦加载就不可调整内存盘的大小或删除。而且虚拟硬盘有容量限制,不能超过32M,它们自己还占用较多的常规内存。幸好有人开发了完美的虚拟硬盘软件XMSDSK,这个小东西的好处太多了,它可以在命令行方式下无限次动态调节虚拟硬盘的大小,并可以随时卸载;它占用内存相当才几百字节,而且能够自动调入到UMB,而不需用LH命令,最重要的是,它支持极大的内存,目前高达2G!XMSDSK的使用非常简单,只需执行xmsdsk xxxxx就行了,单位是KB。卸载的命令是xmsdsk /u,非常轻松。下载地址是http://firststep.ahwww.com/dosware/xmsdsk.exe。

  如果你打算在windows下玩老游戏,以上问题的解决就更简单了,直接编辑游戏可执行文件的属性,点“内存”,然后按照需要选择合适的内存数量即可。但你可能要忍受无声甚至噪音的痛苦,而且多数游戏的时钟会有所变化。

  另外,通过himem.sys调用int 15h也可以限制内存,但15h中断很不安全,微软早已放弃使用了,而且从未公布himem的int 15h用法,所以这种办法不推荐使用,有兴趣的朋友可以自己查阅相关资料。

  到这里,我们不妨编一个批处理文件来简化我们玩游戏的过程,建立一个扩展名是bat的文件,在里面输入如下内容(假定你的内存是256M):

  lh c:/dos/smartdrv.exe /x
  lh c:/dos/xmsdsk.exe 240000 /y
  lh c:/dos/mouse.com

  以上的路径和程序请根据个人的需要修改。

  到这里,相信大家在内存方面不会遇到什么障碍了,多数游戏已经能够运行起来,至于怎么让游戏运行得有声有色、原汁原味,敬请期待后几章的内容。


DOS游戏最难搞的是什么?声卡!随着微软帝国的扩张,声音的女巫无情的剥夺了我们游戏的乐趣。没有了声音,游戏的色彩大打折扣,直接影响着我们怀旧的心情。本章将从声卡工作原理与游戏声卡编程入手,向大家介绍相关的知识和设置。与前几章一样,你可以跳过原理部分的内容,直接根据自己的情况选择合适的设置。OK,先来一声狼叫试试嗓子,嗷嗷嗷~~~

  1、声卡的基本概念。熟悉声卡设置的朋友肯定对以下的名词有着深厚的感情:IRQ、I/O Address、DMA……我们不妨回顾一下这些概念。

  IRQ(Interrupt Request中断请求)是由某个设备发出的请求CPU产生中断的一个请求响应信号。当某个设备发出中断请求时,CPU会暂停当前的工作,根据中断请求的优先级来决定首先响应哪一个设备的中断请求。中断请求IRQ0到1RQ15中,IRQ0的优先级别最高,IRQ15最低。原则上,计算机中每个设备自身只有惟一的一个中断请求通道,即IRQ值(又叫IRQ号)。当两个硬件设备同时使用同一个IRQ时,就会发生冲突,因为这时CPU已经无法判断收到的中断请求究竟来自于哪个设备了。一个好好的DOS游戏到了win32环境下,由于中断管理发生了很大的变化,声卡在dos7.0下就会出现兼容性不好的问题,GUI中的问题则更多了。

  I/O Address(Input/Output Address输入输出地址),可以理解为CPU和外部设备之间的接口,在调用外部设备时,程序通过I/O地址告诉CPU数据将要被传送到什么地方。好比母老虎(程序)说:把啤酒(数据)送到老狼的宿舍4036(设备I/O地址),老熊(CPU)就扛着酒上楼,如果送错了,只怕会被人当成胡乱灌水的家伙拒之门外。声卡常用的I/O是220h,有一些老声卡甚至只能使用这个地址。多数的游戏会提供一个设置程序,允许玩家选择自己的IRQ和I/O Address。

  DMA(Direct Memory Access直接内存访问),是一种完全由硬件执行I/O交换的工作方式。在这种方式中,DMA控制器从CPU中完全接管对总线的控制,数据交换不经过CPU,直接在内存和I/O设备之间进行。声卡与内存之间采用DMA方式传送数据,以便让CPU有更多的时间去处理其它事情。在输出声音信号时,用DMA方式将声音数据直接从主内存传向声卡的缓冲区,进行数/模转换后再送至音频放大器,最后到扬声器发声。DOS下的声卡默认的DMA通道是1,绝大多数游戏根本没有给我们选择的机会,我们只能使用这个设置。遗憾的是,多数AC“97集成声卡已经不再占用DMA通道了,所以这些声卡可能需要软件模拟等方式来兼容老游戏。老狼的机器太破,跑不了虚拟机软件,有兴趣的朋友不妨试试。

  FM合成是运用特定的算法,用正弦波来模拟乐器的声音。其主要特点是电路简单、成本低,不需要存储器支持。由于FM是靠算法来合成某个声音,因此实现方法过于生硬、效果单一,所生成的声音与真实乐器产生的声音距离很大,电子味很浓。多数DOS游戏的音乐就是针对FM制作的,用FM听虽然音色不逼真,确是实实在在的原汁原味。相对而言,Wavetable波表合成把真实的乐器采样储存起来,音色很逼真,却并不适合用来玩老游戏,这一点很多朋友会有体会。比较好的PCI声卡会提供两种合成方式,比如老狼的Sonic Impact S70,在仙剑的设置中如果选择“声霸卡”,听到的就是220h端口送出的FM音乐;如果选择“声霸卡+MIDI”,就能听到330h端口送出的波表MIDI。330h本来是外部MPU-401的端口,在这里却被模拟成了内部MIDI,看来Diamond在兼容性方面确是下了不少苦功啊。

  2、为了解释声卡不正常的问题,我们先看看游戏中声卡编程的原理。我们先来看一个函数:

  void writefm(char reg,char data)
  {
  int ioport=0x220;
  outportb(ioport,reg);
  delay(1);
  outportb(ioport+1,data);
  delay(2);
  }

  聪明的你看了这些,一定会对I/O有一个更好的理解。通过对端口220h的操作,游戏就可以调用声卡了。但在DOS这个单任务环境下,声音和图像、文字却是同时出现的,这是怎么回事?让我们先来了解一些程序中断的相关知识。由外设控制器或协处理器引起的中断称为外中断,由程序中安排的中断指令INT产生的中断,或由CPU的某些错误产生的中断称为内中断。下面是一些中断的例子:INT 8h,每1/18.2秒定时器发出的中断;INT 1ch,指向每1/18.2秒时可执行的服务程序的入口;INT 71h,硬件中断9。

  在IBM PC系统中,定时器中断INT 1ch是独立于CPU工作的,但因为它是指向INT 8h的入口,我们又叫它伪中断。这一中断在系统初始化后,中断程序仅仅有一条IRET指令,但它是每秒发生18.2次的硬件中断,如果改变这一中断服务程序,使其指向其他进程,这个进程就能以每秒18.2次的速度工作。这样,就可以通过不断比较时钟计数值和声音计数值来实现背景音乐的播放了。当然,具体的过程比这要复杂很多,感兴趣的朋友可以查阅相关资料。

  3、我们可能遇到的问题。

  ①FM音乐时钟不准,音乐忽快忽慢,尤其是在按键盘时。在Windows下运行老游戏多有这样的问题。究其原因,是因为多数dos游戏只能通过调用伪中断INT 1ch来实现诸如背景音乐的功能。而在Windows下中断管理有了较大改动,所以会导致使用这个中断的程序不正常。解决这个问题的办法很简单,就是进入纯DOS环境。

  ②PCI声卡的兼容性问题。PCI声卡的DOS兼容性确实存在一些麻烦,这也许正是一些已经购买了PCI声卡的朋友常感到困惑的问题。尽管很多PCI声卡厂商都宣布其产品在玩DOS游戏时没有问题,可事实并非如此。究其原因是因为现在的一些PCI声卡在声音合成方式上同ISA声卡有很大不同,它在DOS下不兼容原来的IRQ、DMA等设置,因此导致DOS的很多游戏不认PCI声卡,当然也就没有声音了。这是PCI声卡的一个共同弱点,很多PCI声卡厂家都推出了各自的解决方法,比如Diamond就开发出一个名叫SB-Emu的小程序可以解决兼容性问题。为了检查你的PCI声卡是否已经具有DOS支持,可以在命令行模式下打入set,察看输出结果是否包含Blaster=A220 I5 D1 T4这样的一行,如果有,说明你的声卡已经安装了DOS支持;如果没有,你可能需要下载相关的驱动程序了。

  另外,部分PCI声卡(似乎非常少)使用了SB-Link来增强兼容性。这是一条连接主板与声卡之间的5pin排线,不是每一款主板都设有这个接头。SB-Link的作用就是将ISA总线的DMA和IRQ从主板传送到PCI声卡上,让DOS游戏在ISA总线中找到声卡的DMA和IRQ,从而提高PCI声卡在DOS模式下工作的兼容性。创新和Diamond的部分声卡采用了这种连线,如果你试过本章所有方法仍然解决不了兼容性问题,不妨考虑找一根SB-Link试试。

  ③AC”97集成声卡的兼容性问题。这真是一个大难题,老狼现在还没听说过哪款AC“97软声卡能支持DOS,偏偏新出的主板还都一窝蜂的去赶软声卡的潮流。如果你的集成声卡是硬件的,比如8738和CTxxxx,那老狼可要恭喜你了,他们都提供了DOS支持,请把他们当成一般的PCI声卡好了。对于软声卡,老狼听说用虚拟机可以模拟成Sound Blaster Pro来用,只可惜我没有机会测试。

  ④怎样设置声卡?建议你看看声卡驱动程序中是否包含有For DOS的驱动,如果有,装之,并在Autoexec.bat中加入Set Blaster=A220 I5 D1 T4这种语句来设置声卡的I/O地址、IRQ和DMA(多数声卡会由驱动程序自动安装完成),这样PCI声卡就可以被DOS游戏识别了。下面说说set blaster的用法:A后面的数字表示I/O Address,I后面的数字是IRQ,D后面的数字是DMA通道,T的参数最容易被忽略,却是游戏是否能识别声卡的关键:它表示声卡的类型。因为Creative公司是声卡的老大,所以其他声卡必须以之为标准,将自己模拟成Creative公司的某种产品。T后面的数字1表示Sound Blaster 1.0,2表示Sound Blaster 1.5,3表示Sound Blaster 2.0,4表示低版本Sound Blaster Pro,5表示高版本的Sound Blaster Pro,6表示Sound Blaster 16及其兼容,如Sound Blaster AWE及Sound Blaster PCI等。按照老狼的经验,A220 I5 D1是兼容性最好的设置,T的类型就要参考你声卡的相关资料了,如果它说“兼容Sound Blaster Pro”,你就毫不犹豫的写上4吧。其实,4和6是最常见的也是兼容性最好的。

  ⑤声卡使用的不是A220 I5 D1的设置,游戏不认,但在autoexec.bat里改了set blaster却无效?这可能是你的声卡使用了特殊的设置方式,使Dos和Windows的设置挂了钩。进入Windows,选系统属性,设备管理,找到你的声卡最上层设备或SB Emu一类根DOS兼容有关的设备,选属性,重新配置资源,改成A220 I5 D1的设置。如果出现资源冲突,不要理它,按照自己的意愿改好,然后按照它的要求重启就行了。如果出现资源冲突,强烈建议你先禁用掉与之冲突的设备,先设置好声卡再说。如果你没有打印机等使用LPT的设备,可以在BIOS中把Parallel Port改成Disabled,可以节省一个IRQ。

  ⑥都设置好了仍然无声或死机?进入BIOS设置,在PCI/PNP Configuration中设置PNP OS Installed为Yes,Resouce Controlled By为Manual,然后在下面的列表中找到你声卡的IRQ,如果你用的是PCI声卡,选PCI/ISA PNP Device,如果是ISA声卡,选Legacy ISA;对DMA也如此设置。好了,多数游戏已经能正常发声了,除了——

  ⑦一些游戏有音乐,没有音效?一提到这个问题,老狼脑子里马上出现两个名字:仙剑!枫之舞!经过不懈的努力,老狼终于把这老哥俩折腾出声了!在完成了上面的声卡设置后,运行游戏的设置程序,可能是install.exe,按照你声卡的设置情况调整设置,完成后选“中止”即可。运行不了?请参见第五章捣乱的喽罗~。建议大家在游戏里存一个可以马上遇到简单敌人的档,比如仙灵岛的入口,因为这一步可能需要很多次尝试。请先检验一下:进入游戏,有音乐;开始游戏,战斗,没有音效?察看系统选单,音效是关还是开?如果是关,不用徒劳去打开它了,你前面的设置肯定有问题,再折腾折腾吧。如果是开,请重启,进入BIOS设置,在Advanced Chipset Settings里找到Memory Hole At 15~16M,选Enable!这个,老狼也很奇怪,和声卡有啥关系啊?疯狂查资料,等找到了再告诉大家吧。保存设置——音效有了吗?如果还没有,回到刚才的设置页,有两项8 bit IO Recovery Time和16 bit IO Recovery Time,两项都改成2,呵呵,这下总行了吧?不行就再改大点,不过超过3可能会死机哦,做好放电的准备吧~~~

  ⑧考虑装两块声卡——PCI/ISA或PCI/AC”97。这也是很好的选择,如果你按照上面的方法还是解决不了问题,只能考虑换声卡了。老一点的机器还有ISA插槽,太好了,随便买一块ISA声卡,找驱动,两块声卡可以共存。而且既然是为了玩DOS游戏,Windows的驱动完全可以不装了,省得冲突。将ISA声卡的Line Out用音频线接入PCI声卡的Line In,再把音箱接到PCI声卡的输出上,大功告成。老狼就在使用ALS200和Diamond S70的组合,任何一个都可以完全正常的玩DOS游戏,但ALS的FM音色更“古”些,所以在仙剑里我还是偏爱它的。

  如果你的主板没有ISA槽,那就买一块兼容性好的PCI声卡吧,二手就行,一定要支持DOS。因为出现冲突的可能性比较大,所以老狼劝你还是屏蔽掉集成声卡。

  至于两块PCI声卡共存,老狼除了死机啥结果也没得到,难道是因为我还不够执著?呵呵,算了,我放弃了。

  4、我的测试结果。

  我手头的声卡在大多数游戏都能正常发声,共测试了4块声卡:ESS688(ISA),Diamond S70(ESS1968芯片,又称Maestro2,PCI),S3 Sonic Vibes(PCI),ALS200(ISA)。

  ESS688完全没有音乐,但音效正常,可能是卡的问题?

  S70一切正常!究极感动,真不枉老狼当年400大洋请她回家~~~

  S3 Sonic Vibes原装声卡,可能是驱动程序的原因,噪声非常大,老狼没有多试。不过老马说他的启亨小辣椒(同一芯片)完全正常,看来这块卡还是有价值的。而且这是自带DLS的声卡,太少见了,是老狼的收藏品。

  ALS200完全正常,没啥说的,老东西了。

  这几天如果有机会,我会在找一些卡来测试。以上关于BIOS设置的具体选项根据个人的主板不同可能略有区别,意思一样即可。

  
除去前几章提到的问题,还有很多杂七杂八的喽罗影响游戏的正常运行,下面是老狼曾经遇到过的麻烦,希望对大家有所帮助。问题尽量从原理上加以解释,以适合各种需要的玩家。

  1、CPU

  运行exe时出现Runtime error 200 at xxxx-xxxx,比如仙剑的install.exe,新蜀山剑侠的mark.exe。

  多数情况下,这是因为这个exe是采用Borland Pascal 7.0编译的,要解释这个问题,就不得不说说Borland Pascal的历史。使用Borland Pascal 6.0编译的程序并没有这样的问题,但是这些程序的延迟(delay)在快速计算机上却是完全错误的。BP7修正了这个问题,却带来了更大的隐患:BP7编译出来的所有使用系统CRT单元的程序在比较快的计算机上都会出现Runtime Error 200错误。很可怜,几乎所有的程序都会用到CRT单元。
  下面是这个错误的一些解释:CRT单元在初始化时,会初始化delay procedure,delay初始化时,会使用内存地址为40:6C的每秒钟跳动18.2次的BIOS定时器,来计算55毫秒(1/18.2)需要多少条IRET空指令。这个数字会被除以55来得到能延迟1毫秒的数字,计算的结果被写到一个2字节的变量里。这个变量的溢出就导致了Runtime Error 200。Runtime Error 200的含义是Division by zero,但在这里它是由溢出引起的。由此可见,比较快的计算机很可能导致这个错误。

  既然知道了问题的起因,解决办法也就有了——或者修正错误,或者给CPU降速。直接修正错误的软件并不好找,而且对压缩过的或加密过的exe无能为力,有时间的朋友可以找一个叫PROT 200的TSR程序,它可以自动使后面有CRT单元问题的程序正常运行,而不需修改文件本身。我们主要考虑第二种方法。http://www.thaisoftware.co.th/ftp/slowdown.com是一个很好的DOS下的降速软件(还可以降Windows的速度)。选项很多,有热键和命令行两种方式。我们可以在游戏开始前运行它,随时按Ctrl+Alt+5键就可将速度降低50%,Ctrl+Alt+0就是恢复原来的速度。另外,每按一次Ctrl+Alt+加号键可以增加10%的速度,每按一次Ctrl+Alt+减号键可以减少10%的速度。如果热键无效,用SLOWDOWN /P:55 install命令就可以以55%的速度来运行install程序。有些游戏速度太快,没办法正常玩,用它也可以解决了。如果你觉得麻烦,可以在BIOS中把CPU的一级缓存CPU Internal Cache设成Disabled,这样也可以极大的降低速度。

  2、显卡

  在DOS下运行仙剑花屏?这是由于老的DOS游戏不能够支持AGP接口的大显存显卡。解决的办法就是把显卡伪装成一个比较破的东西。经常玩DOS游戏的朋友对于UNIVBE一定不会陌生:UNIVBE是Scitech出品的一种通用的显示驱动软件,可以为各种不同的显卡配备统一的标准VESA显示驱动程序,从而为各种游戏提供一致的图形显示接口。到了Windows时代,Scitech在UNIVBE的基础上,出品了新的Scitech Display Doctor(简称SDD),提供从DOS到Windows 3.x以至于Windows 98的全系列操作环境,并且包含对非常多的显示卡的支持,用来解决在显示卡使用过程中可能碰到的绝大多数与显示相关的问题。遗憾的是,SDD已经停止更新了,在Scitech的网站http://www.scitechsoft.com可以看到,最新版的SDD6.53提供了免费下载和自由注册码,需要的朋友可以下载,老狼也不知道它能支持多少新显卡。我们的伪装主要是针对DOS的,所以在安装以后最好把SDD的目录Copy一份,以避免伪装对Windows的影响。具体的方法是运行下面两条语句:

  C:/SDD2/UNIVBE32.EXE -w
  C:/SDD2/CONFIG.EXE -m1024

  第一行的意思是加载UNIVBE,并防止Windows的Logo扭曲;第二行中 -m1024的意思是把显存限制为1MB,以解决花屏等问题。使用UNIVBE的好处还有一个,就是为游戏提供更多种非标准分辨率的支持,这对一些模拟器非常有用。

  3、硬盘

  硬盘也有问题吗?如果你想用DOS6.x玩游戏的话,你需要注意,这个系统是不支持FAT32分区的,而且,如果你的扩展DOS分区大于8.4G,即使里面的逻辑盘采用了FAT16,DOS6.x还是不能识别。最好的办法是使用DOS7.0,老狼还没见过非要DOS6.x不可的游戏呢。如果你真的需要DOS6,可以考虑做一张DOS6的启动盘,然后在里面放上FAT32支持一类的软件,Volkov Commander似乎不错,老狼没有用过,各位不妨试试看。

  另外,如果你的游戏还是遇到一些莫名其妙的问题,可以尝试在BIOS中将硬盘的PIO调低一些,并关闭UDMA的选项,以避免IDE计时器的相关问题。

  4、DOS7.x的设置

  Windows 9x所附带的DOS7.x对老DOS游戏的兼容性不错,我们可以通过修改MSDOS.SYS来让我们的DOS7用得更舒服,顺便获得较多的常规内存。下面向大家简要介绍一下:在DOS方式下,进入系统盘根目录,去掉MSDOS.SYS的属性并修改之。对于系统盘是C盘的玩友,命令如下:

  c:
  cd attrib msdos.sys -h -s -r
  edit msdos.sys

  在弹出的页面中找到[Options]这一段,改成以下内容(;后面的内容为注释):

  BootMulti=1 ;允许多重引导
  BootMenu=1 ;出现多重引导菜单
  BootMenuDelay=30 ;菜单默认项等待时间
  BootGUI=1 ;以normal启动是否直接进入图形界面
  DoubleBuffer=1 ;磁盘缓冲,并不占多少内存,留着算了
  Logo=0 ;是否显示LOGO
  Dblspace=1 ;设置成1可以获得对压缩盘的支持
  drvspace=1 ;同上,这两项对内存也没有什么影响
  AutoScan=1 ;非法关机后是否自动检查硬盘

  值得一提的是,MSDOS.SYS中大片的XXX是为了兼容性而设置的,不要删掉。编辑完成后,保存退出,打

  attrib msdos.sys +s +r +h

  以策万全。这样的设置配合我在第三章给出的CONFIG.SYS,可以获得600k以上常规内存,如果不加载光驱等,可达621k,足以满足游戏的需要。

  5、日文游戏的解决办法。DOS/V似乎是一个很难缠的家伙,这里有一个据说是DOS/V的完美替代品http://firststep.ahwww.com/dosware/dosj.zip,老狼没有试过,想玩日文游戏的玩友不妨下载一个。

  6、呼,暂时想不到了~~~喽罗难免有漏网的,胆敢现身者格杀勿论!

  洋洋洒洒一大堆字写下来,也不知道对大家有帮助没有,反正老狼现在正在痛痛快快的怀旧呢,祝大家都能有一个好的怀旧心情!最后奉上我的一些游戏的运行情况:

  仙剑奇侠传,Windows下音效不正常,FM音乐时钟不正常。DOS各版本下均调试通过,install.exe需降速使用,若无音效,需打开Memory Hole。

  轩辕剑2,Windows和DOS下完全正常。

  轩辕剑外传——枫之舞,Windows和DOS下完全正常。

  新蜀山剑侠,Windows下FM音乐时钟不正常,有音效时出现噪音,速度奇慢,但不影响游戏。DOS下一切正常。如果屏幕闪烁,请运行play1.bat进入游戏;mark.exe只是一个商标,需降速使用。

  金庸群侠传,Windows和DOS下完全正常。

  魔神战记2,Windows下不能运行,DOS下emm386的参数不能是noems,退出时偶尔死机,其余一切正常。

  皇帝,Windows下和DOS下完全正常,DOS下需加载鼠标驱动程序。

  欢乐幸福人,Windows下不能运行,DOS下完全正常,需加载鼠标驱动程序。

  大富翁3,Windows下FM音乐时钟不正常,DOS下完全正常,DOS下可选鼠标驱动程序。

  明星志愿,Windows下FM音乐时钟不正常,音调不准,DOS下完全正常,DOS下可选鼠标驱动程序。

  超级医生2,Windows下和DOS下完全正常,DOS下可选鼠标驱动程序。


CONFIG.SYS文件的命令与配置

CONFIG.SYS是DOS系统中的一个重要文件,它的配置直接影响到系统的使用及其效率。如果配置不当的话,可能很多程序都无法正常运行。因此,正确合理地配置CONFIG.SYS文件是十分必要和重要的。下面我向大家介绍一下CONFIG.SYS中的命令及其配置方法。

CONFIG.SYS中的命令:
注意:所有以HIGH结尾的命令(如DEVICEHIGH)表示将其调入UMB(上位内存),但有些这样的命令(如FILESHIGH)必须在MS-DOS 7.x版本中使用。

ACCDATE:指定对每一个驱动器是否记录文件最后被访问的日期。
用法:ACCDATE= 驱动器 1+|- [ 驱动器 2+|-]...
如:ACCDATE=C+ D+ E+将在C,D,E盘中记录文件最后被访问的日期。
此命令仅用于MS-DOS 7.x中。

BREAK:设置或清除扩展的CTRL+C检查。
用法:BREAK=ON|OFF

BUFFERS/BUFFERSHIGH:为指定数量的磁盘缓冲区分配内存。
用法:BUFFERS=磁盘缓冲区数量,[从属高速缓存中的缓冲区数量]

DEVICE/DEVICEHIGH:将指定的设备驱动程序装入内存。
用法:DEVICE/DEVICEHIGH 文件名 [参数]
其中,文件名是文件的完整路径,如C:/DOS/HIMEM.SYS。

DOS:用于DOS系统的配置,如是否使用HMA(高端内存区)等。
用法:DOS=[HIGH|LOW][,UMB|,NOUMB][,AUTO|,NOAUTO][,SINGLE]
其中,HIGH和LOW表示使用HMA或不使用HMA,UMB和NOUMB表示使用UMB或不使用UMB,AUTO或NOAUTO表示系统自动配置或不自动配置,SINGLE表示使用单一模式的DOS。其中,AUTO/NOAUTO和SINGLE仅用于MS-DOS 7.x中。

DRIVPARM:设置现有物理设备的参数。
注:此命令用得很少,我也没用过,所以暂时跳过。

FCBS/FCBSHIGH:指定可以同时打开的文件控制块 (FCB) 的数量。
用法:FCBS/FCBSHIGH=可以同时打开的FCB的数量。
注:由于FCB主要是在DOS 1.x中使用,对于高版本,所以可以让系统自动配置。

FILES/FILESHIGH:指定 可以同时访问的文件数量。
用法:FILES/FILESHIGH=可以同时访问的文件数量。
注:一般FILES/FILESHIGH的设置值在30左右比较合适。

INSTALL/INSTALLHIGH:用于加载TSR(内存驻留程序)。
用法:INSTALL/INSTALLHIGH=文件名 [参数]
如:INSTALLHIGH=C:/DOS/DOSKEY.COM /APPEDIT

LASTDRIVE/LASTDRIVEHIGH:指定可以访问的驱动器的最后有效的驱动器字母。
用法:LASTDRIVE=驱动器字母
如LASTDRIVE=F会将F设置成最后有效的驱动器字母。

NUMLOCK:指定启动时NUMLOCK指定灯是否打开。
用法:NUMLOCK=ON|OFF

REM:添加注解。
用法:REM [注解字符串]
注:注解中的字符串只是用来增加可读性,将不被执行。

SET:设计DOS环境变量。
用法:SET 变量=[变量值]

SHELL:指定DOS 使用的命令解释程序的名称和位置。
用法:SHELL=文件名 [参数]
注:文件名默认是COMMAND.COM,您也可以指定其它的文件,如4DOS.EXE等。

STACK/STACKHIGH:指定使用的堆栈数量。
用法:STACK/STACKHIGH=堆栈数量,每个堆栈的大小
注:通常指定的值是9,256,这个值可以满足大多数的需求。

SWITCHES:指定一些特殊选项。
用法:SWITCHES=[/W] [/F] [/K] [/N] [/E[:n]]

其它的是一些菜单配置命令,如MENUITEM,MENUCOLOR等。

在MS-DOS 7.x中还有一些未公开命令,如LOGO,COMMENT等。

知道了以上的命令后,就要谈谈如何利用这些命令来配置CONFIG.SYS文件了。配置的好坏对系统的影响是非常大的。以下是我的电脑(都是MS-DOS 7.10)中CONFIG.SYS文件中的内容,大家可以用作参考。

电脑一,使用EMM386.EXE:

device=d:/tools/dostools/echo.sys L/o/a/d/i/n/g CONFIG.SYS...
device=d:/tools/mdctools/himem.sys /testmem:off
device=d:/tools/mdctools/emm386.exe noems novcpi i=b600-b7ff
devicehigh=d:/tools/mdctools/setver.exe
devicehigh=d:/software/pwin98se/ifshlp.sys
devicehigh=d:/tools/dostools/vide-cdd.sys /d:CDROM1
devicehigh=d:/tools/dostools/cloaking.exe
country=086,936,d:/tools/mdctools/country.sys
shell=c:/command.com /p /e:640
set temp=e:/temp
set tmp=e:/temp
accdate=c+ d+ e+
dos=high,umb
numlock=off
files=30
buffershigh=30,0
fcbshigh=4,0
lastdrivehigh=n
stackshigh=9,256

电脑二,使用UMBPCI.SYS:

device=d:/tools/dostools/echo.sys L/o/a/d/i/n/g CONFIG.SYS...
device=d:/tools/dostools/echo.sys
device=d:/tools/dostools/umbpci.sys
device=d:/tools/dostools/hiram.exe
devicehigh=d:/tools/mdctools/himem.sys /testmem:off
devicehigh=d:/software/pwin98se/setver.exe
devicehigh=d:/software/pwin98se/ifshlp.sys
devicehigh=c:/dos/vide-cdd.sys /d:CDROM1
shell=d:/tools/mdctools/command.com /p /e:640
set temp=e:/temp
set tmp=e:/temp
accdate=c+ d+ e+
dos=high,umb,auto
country=086
numlock=off
fileshigh=30
buffershigh=30,0
stackshigh=9,256
lastdrivehigh=n

 我想      天 
   世界    使 
     应该  碟 
       毁灭报 
  最快的游戏报道站 
  
 不定期发布购碟指南,交流购碟心得!  
  
  
  
 更多精彩请访问 4239.xixiu.net 或   
  
 http://b140510.xici.net 
  
  
 
©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值