xp下重拾dos经典游戏

news/2024/7/20 14:00:37 标签: 操作系统, 内存管理, 运维
   首先需要简单了解一下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)。因此可以说Win×P已完全摆脱了对16位DOS的依赖,此系统上所谓的DOS程序运行环境不过是一个完全虚拟的PC机!理解这一点很重要,因为这预示着这个虚拟的“PC机”与你真实的硬件毫不相关,所有的硬件环境都是虚拟出来酌,因此能够实现更好的兼容性。

    虚拟机是怎素模仿真实DOS系统的启动过程呢?熟悉DOS的用户都会对Config.sys和Autoexec.bat这两个文件有难言的欣喜与痛苦——它们对系统的配置实在大为重要,在DOS启动时,首先会按Config.sys配置驱动,然后再执行Autoexec.bat中的命令。在NTVDM中还能不能找到它们的身影?既然说是"真实虚拟"当然应当是有的:它们默认位于Windows\system32下,只不过名字已稍作改动,分别为Config.nt。和Autoexec.nt。你可以用记事本打开这两个文件进行编辑,不过在编辑之前最好进行备份,以防不测。

    理解了这些之后,我们就可以开始尝试解决实际问题了。

内存问题的解决

    大部分老游戏不能正常运行的原因都是由于内存“不够”所导致,没有从DOS时代走过来的用户肯定会对“不够”二字极尽怀疑,事实上正是不够。DOS有一套独有的内存使用方案,这个方案实际上较复杂,但对问题的解决至关重要,不过我们这里不必了解得一清二楚,如果不加载特殊的内存管理工具,DOS最多只能识别1MB的内存,而这1阳B,有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下一般是用EMM386exe。这里需要说明,由于EMS占用了XMS的空间,所以XMS的可用(Available)部分会减少。旧DOS是一个非常自由的系统,在上面运行约游戏可自由决定是否使用EMS,甚至还会决定要多少EMS,否则就……嘿嘿,罢工。

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

扩充内存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被设定为“O”,则EMM将不会加载。

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

    那么解决方法你一定已经想到了,由于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启动后常规内存剩下的空间,当然也就是最大可执行程序的大小了(Largest executable progaram size)。

    不过每次从Command运行再找到Play.bat仍显麻烦,其实有更简便的方法,由于play.bat文件中第一行runqbj对应于Runqbj.exe (记住不是bat文件),于是在Runqbj.exe的文件图标上点右键并进入“属性"设置,将其中的内存页相和EMS和XMS设置为自动(当然也可以置为4MB以上的数值),确定后会在当前目录下生成Runqbj.pif文件之后双击Play.bat即可顺利进入流戏。


http://www.niftyadmin.cn/n/1201353.html

相关文章

linux指令一周通 下载,Linux指令一周通

Linux指令一周通发布时间:2009-10-19 11:40:56来源:红联作者:emeraldLinux系统的指令及其用法是学习Linux系统的基础。本书详细地介绍了Linux系统指令的语法、功能、参数说明以及具体的应用范例,在介绍每个指令之后还设置了“动手一试”小栏目,读者可以实…

linux 信号量 自旋锁 测试 实验,实验二 并发与阻塞

实验二 阻塞与并发实验一、实验目的:1、掌握linux驱动对并发的处理,熟悉信号量,自旋锁,原子操作等的使用。2、掌握linux驱动对阻塞的处理,熟悉等待队列的使用。二、实验设备:友善之臂4412开发板、学生自带笔…

使用IL实现对象的Clone,浅拷贝,和深拷贝的几篇文章

对于实现任意对象的Clone,以前也看到过不少讨论 的文章和实现。暂时先发到首页,供大家讨论,如果觉得不合适我会拆下 以下是Whizzos 的两篇文章:Object Cloning Using IL in C# 这篇文章作者分别用IL,反射实现了浅拷贝…

批量执行linux漏洞,Linuxmodprobe如何执行任意命令漏洞?

受影响系统:GNU Linux modutils 2。3。9 S。u。S。E。 Linux 7。0 S。u。S。E。 Linux 6。4 RedHat Linux 7。0不受影响系统:GNU Linux modutils 2。3。11描述:绝大多数Linux系统都带有Modutils,用于可加载内核模块。其中modprobe…

名企告诉你什么简历讨人喜欢

校园招聘的企业一般都要求应聘者先发电子简历,他们往往先通过简历对应聘者进行初步的筛选。那么如何才能写一份好简历,让自己从千百份简历中脱颖而出呢?  一、内容必须真实  IBM中国区人力资源总监白文杰强调,不管是你的知识水…

5年工作经验不会Java性能优化,面试原地翻车

前几天公司面试了一个人才,5年工作经验,各方面都不错,只是调优实战经验有点欠缺。 他跟我说,之前公司的系统从来没有经过性能调优,功能测试完成后就上线了,线上也没有出现过什么性能问题…… 当时我回答他…

linux cpu数理,Linux中的 德·摩根定律

Linux中的德摩根定律德摩根定律介绍※概念在命题逻辑和逻辑代数中,德摩根定律(或称德摩根定理)是关于命题逻辑规律的一对法则。奥古斯塔斯德摩根首先发现了在命题逻辑中存在着下面这些关系:非(P且Q) (非P) 或 (非Q)非(P或Q) (非P) 且 (非Q)德摩根定律在…