『楼 主』:
转贴:DOS游戏通用说明 (文:无翼在天)
[已使用 LLM 解释]
DOS游戏通用说明
--------------------------------------------------------------------------------
系统介绍
内存问题
config.sys 的编写
autoexec.bat 的编写
显示、声卡、光驱问题
实用工具
鉴于dos时代已经过去,新一代的游戏玩家很少接触DOS系统。很多看来很“简单”的问题,他们也是束手无策。这里简单介绍一下dos游戏的玩法。
适合玩dos游戏的操作系统
dos5.0、dos6.0 (比较稳定的dos旧版,默认目录c:\dos)
dos6.22 (纯dos的最终版本,默认目录c:\dos)
dos7.0 (win95,win98附带的dos,默认目录c:\windows\command)
另外winxp,winnt和win2000都有自己的Dos command prompt,但是不能作为启动系统,如果你的机器只有这几个系统,那很遗憾,你玩不了dos游戏。
启动和加载
旧版dos(dos6.22以前的版本)启动后会加载msdos.sys、io.sys和command.com系统文件,缺一不可。然后加载config.sys和autoexec.bat中的管理程序,这2个文件如果缺省,那你几乎寸步难行,只能操作最基本的dos命令。
新版dos(win95/win98附带的dos7.0)启动以后加载io.sys和command.com系统文件,msdos.sys只是作为一个开机配置文件。config.sys和autoexec.bat基本是个空文件,因为系统默认加载了emm386,himem,dos,files等重要配置。
内存常识
内存有基本内存(base memory,640K),高端内存(upper memory,384K),扩充内存(expand memory,用户的物理内存总数)等类型。
一般dos游戏启动都是放在基本内存(base memory),因为只有640K,而其他常驻程序都是放在这里,所以通常提示不够内存都是因为使用者没有加载高端内存,调离其他程序的存放位置,它们占用了游戏程序空间,导致游戏出现"not enough memory"的提示。
高端内存(upper memory)一般游戏程序用不上,那么把一些常驻的程序,例如mouse,mscdex,doskey,gb等放到里面,就可以腾出很多空间给基本内存。
扩展内存(expand memory)不用于游戏的启动,而是处理交换游戏中的大量数据,和游戏启动无关,有时候游戏半途退出,可能就是扩充内存不够。
dos游戏最致命的瓶颈就是内存。它不同windows系统那样智能管理内存,所有设置都要自己慢慢调试,而且早期的游戏设计只能用高端内存和基本内存,就算你的扩充内存有128M也是没用的--程序设计本身就不用它们。
config.sys文件的编写
这开机系统文件可以编辑,最常用就是用dos自带的edit命令。如果你的path(该命令后面再解释)没有指错地方,那个你在c:\下面运行 “edit config.sys”就可以编辑这个文件,同理可以编辑autoexec.bat。
config.sys文件管理dos系统的内存,常用的加载内存管理语句:
DEVICE(加载管理程序)
DEVICEhigh(加载到高端内存)
dos(系统文件的位置)
files(打开文件数量)
buffers(缓冲区数量)
lastdrive(最后盘符)
shell(解释命令的位置)
rem (注释)
例子解释:
1, DEVICE=C:\dos\HIMEM.SYS /testmem:off
这个语句非常重要,加载高端内存管理,使dos能使用高端内存,如果你的机器慢,可以加/testmem:off跳过内存检测
2,DEVICEhigh=C:\dos\EMM386.EXE ram
在高端内存中加载emm386,emm386.exe是用来管理扩充内存的,这个语句也很重要。常用的参数为 ram 和 noems,解释为使用扩充内存和使用扩展内存。noems 比 ram 能释放更多的基本内存 ,但是这个noems语句很多程序不使用,所以使用面很窄。
3,dos=high,umb
这个语句很重要,把msdos.sys、io.sys和command.com系统文件放到高端内存中。
4,files=30
同时打开的最大文件数量,一些游戏需要同时打开很多个数据流,如果这个语句没有设定,其默认值是10,游戏可能会出错。
5,buffers=20,8
设定缓冲区数量以及高速缓冲区数量,用于加速文件读取速度。
6,lastdrive=z
指定最后一个硬盘盘符为z,就是说,你可以使用到z:这些盘符,即使你没有这么多的分区,你可以通过subst,fcd,ramdrive,img等手段虚拟一些硬盘分区出来。如果不加载这个语句,上述命令就不会起效。
7,shell=c:\dos\command.com
这个命令默认存在,一般不用加载。作用为指定dos的解释命令,一般默认就是c:\dos\command.com,如果你需要日文dos或者使用其他的解释命令,例如4dos、ndos,就需要指定一个shell。
8,rem this is a sample
rem为注释语句,后面无论你写什么东西dos都不理睬,常用于屏蔽一些暂时不用的语句,例如你暂时不需要加载shell=c:\dos\command.com, 只需 rem shell=c:\dos\command.com ,dos就会跳过该行不予执行。同理运用于autoexec.bat
总结dos游戏通常需要的config配置:
DEVICE=C:\dos\HIMEM.SYS
DEVICE=C:\dos\EMM386.EXE ram (或者DEVICE=C:\dos\EMM386.EXE noems)
dos=high,umb
files=30
如果还需要光驱来玩,可能还需要加载光驱启动程序,例如 DEVICE=c:\cdrom\VIDE-CDD.SYS /D:MSCD001 ,这个通常由安装程序完成。如果还需要声卡来玩,可能还需要加载声卡启动程序,例如 DEVICE=c:\sound\sbcd.SYS,这个通常由安装程序完成。
注意:本文提到的c:\dos是默认的dos目录,如果你的是win98的dos7.0,放在d盘,那么himem.sys和emm386.exe在d:\windows里面。而其他的dos文件在d:\windows\command里面。如果找不到dos放在哪里,在根目录下,例如c:\,运行“dir himem.sys/s”命令来找。
autoexec.bat的编写
autoexec.bat管理dos系统的常驻程序,里面的语句其实可以一步一步手动运行,只不过每次开机都要一定运行的程序,可以通过这个文件来实现自动运行。常用的语句:
PATH (指定路径)
SET (设定变量)
prompt (命令提示)
lh (加载程序到高端内存)
MSCDEX (cd驱动程序)
smartdrv (硬盘加速程序)
rem (注释)
例子解释:
1,PATH=c:\WINDOWS;C:\WINDOWS\COMMAND;d:\DOS;d:\tools
指定command的运行范围,方便调用程序,假设你处于e:\game目录,那么你也可以直接运行处于c:\dos里面的format语句。如果你不指定path,你必须在c:\dos目录里面才可以运行这个命令。
2,prompt $p$g
命令行提示你处在的位置,例如c:\dos,e:\fpe,f:\game\san2等,如果不加载这个命令,那么无论你在什么目录,都是盘符,如c:\,e:\,f:\。这个prompt还有很多提示,详细自己研究。
3,lh C:\dos\mouse.com
在高端内存加载鼠标驱动程序mouse.com,很多dos游戏需要鼠标支持,如果你不加载鼠标驱动语句,那么无法使用鼠标。
4,doskey
加载后可以记录你的键盘历史命令,可以不必重复输入使用过的繁琐命令,用上下箭头来选择历史记录。
5,set命令,设定环境变量,有很多种语句,例如
set temp=f:\temp
指定DOS的临时目录在f:\temp,前提是你有f盘,而且有temp这个目录存在,dos默认的temp目录在c:\dos,但是我建议使用一个空的目录。因为dos使用时间一长,就会有很多垃圾,和windows系统一样,都会放在temp目录里面,只要里面有文件,都是垃圾,可以删除。而默认的dos目录里面有很多系统文件,不熟悉的人可能分辨不出哪个是垃圾,哪个是系统文件。
set tmp=f:\temp
指定windows临时目录在f:\temp,其他说明同上。
SET BLASTER=A240 I10 D3 H7 P330 T6
设定声卡的变量,例如音量、通道、端口等,由安装程序设定。
set path=c:\dos
简化为 path= ,参考上面
set dircmd=$1/og/p
设定dir的变量
6, lh C:\WINDOWS\COMMAND\MSCDEX.EXE /s /D:MSCD001 /V /m:20
在高端内存加载cd驱动程序,这个通常由安装程序完成。
7, c:\dos\smartdrv c+ d+ e+
启动硬盘/光盘加速程序,使读盘存盘加速,c+ d+ e+等为指定c: d: e:盘提供高速缓存。
总结dos游戏通常需要的autoexec配置:
PATH C:\WINDOWS;C:\WINDOWS\COMMAND;c:\DOS;
prompt $p$g
lh C:\WINDOWS\COMMAND\doskey
lh c:\windows\command\mouse.com
set变量看具体情况而定
如果还需要声卡来玩,可能还需要加载声卡启动程序,例如 C:\PROGRA~1\CREATIVE\SBLIVE\DOSDRV\SBEINIT.COM,这个通常由安装程序完成。
注意:本文提到的c:\windows\command是dos7.0默认的dos目录,如果你的是dos6.0,放在d盘,那么dos文件在d:\dos里面。mouse.com文件不是dos默认配置的文件,你需要通过其他渠道获得。
通过这2个文件的配置,每次启动完毕你可以通过mem命令来检查你的基本内存是否够大,用法 mem/c/p,查看base memory一栏,一般来说,有550K就足够运行大多数的dos游戏,如果不够,就释放一些次要的常驻程序,例如doskey等,重新启动,慢慢调试...(dos就是这么烦)
其他游戏问题
有些程序需要特殊的是显示卡程序支持,例如dos4gw,ega,svga等等,有些需要大量的显存才能玩起来。现在的显卡基本上不存在显存不够问题了,但是有可能先进的显卡淘汰了旧的显示模式,而这些模式刚刚好被某个游戏用上了,除非你换一个旧的显卡,要么就不玩这个游戏。例如三国志5,很多先进的pc都玩不了这个游戏,原因就是显卡模式和声卡模式都太旧了,新显卡实现不了。所以包括本人在内也无法重温。还有三国演义1代,有些显卡玩起来会周期性的黑屏,那也是冲突问题。
如果该程序需要声卡支持,那么你需要安装dos的声卡驱动程序;一些游戏附带通用声卡安装程序,一般来说你选择sound blaster系列的就可以了。某些主板合成的声卡它只提供win的驱动,而没有dos驱动,你可能玩游戏的时候无法有音乐。
如果游戏需要用到光驱,那么你要安装光驱驱动程序,如果找不到适合的光驱驱动程序,你可以用win98附带的万能光驱驱动程序,在制作安装盘的时候就有。 如果是光盘版的游戏,你可以用fakecd(cdx)来虚拟一个光盘,例如:先把游戏解压到一个目录中,如d:\sanguo,之后运行 cdx d:\sanguo /L:z(指定z盘虚拟为sanguo的光盘)即可。 详细说明请看cdx/?里面的说明
如果游戏需要鼠标支持,你需要安装mouse驱动,一般常用的有mouse.com,qmouse.com,gmouse,mmouse等。
如果游戏速度过快,可以用fpe等游戏变速软件来调节。旧游戏设计时候的电脑时钟频率远远慢于现在的P4,很多旧dos游戏都是快得惊人,如果不减速,那很多东西都玩不了,你根本不是电脑的对手。
相关的dos游戏软件
gb5 ,gamebuster 5.0 ,游戏克星,早期的游戏修改软件,有模糊查询功能,可以存游戏进度,可以调整游戏速度。缺点就是不支持例如koei的图形dos4gw界面系统。按2次TAB键激活界面,操作起来不方便,输入需要转换成16进制。
fpe,整人专家,比gb优秀,支持dos4gw界面,支持模糊查询(这个功能在win版就取消了,可惜),不可以存进度,按*激活界面,支持10进制输入。速度比gb快很多,推荐使用。
getcap, 游戏抓图,按shift抓图,存盘成gif格式,比较好用。缺点就是不太通用,一些特殊界面系统的游戏无法抓图。
diskedit, Norton Utilities的文件修改工具,可以修改游戏存档,具体用法不详述。
补充:
一,关于游戏克星GB,我觉得它也有比FPE好的地方,主要有两个功能是FPE没有的:
1,它可以保存当前内存的映像,这个功能主要可以用于在一些没有储存进度功能的游戏中储存进度,另外这个功能还可以用来保存一些开始 时要输入密码表等的游戏,这样不用每次去翻密码表。这个功能甚至不局限于游戏,以前一些DOS下的一些要读加密盘的应用软件,可以用 GB在读完加密盘后把内存映像保存,这样以后就不用读盘了,但它的局限是DOS启动的配置要一样,不一样的话就不成功。
2,GB有跟踪功能,在找到了血或生命值在内存的位置之后,GB可以跟踪监视这个地址,一旦程序修改这个地址,GB会自动弹出菜单并把当 前修改被监视内存地址的那几条指令的机器码用红色显示。然后可以自动取消这几条指令,这样你的游戏就是无敌版的了。另外如果你把红 色显示的几条机器码指令(最好是连旁边的几个机器码也记下来)记录下来,然后在DOS下用PCTOOLS之类的工具找到并修改游戏程序中该指 令,还可以制作出可以脱离GB自己运行的无敌版游戏,这个功能也很实用。
二,关于游戏工具,还有一个很好的工具不应该错过,就是GAMETOOL,其实说它是游戏工具真的是有点大材小用了,它在DOS时代几乎可 以和SOFTICE相媲美,它有功能强大的内置DEBUGER,用来跟踪和破解应用软件都绰绰有余,游戏就更不在话下了。就算这样, GAMETOOL的修改游戏功能也很强大和方便,它既可以当成FPE来使用而且方便性不比FPE差,也可以当成SOFTICE之类的高级调试工具来使 用,是一个既适合又适合入门者的工具。
--------------------------------------------------------------------------------
本文使用的说明参考dos6.22系统,如果你需要进一步了解dos命令,请看dos目录里面的help.com
LLM 解释
对《DOS游戏通用说明》的补充与修正
一、操作系统兼容性的补充
原文提到WinXP/NT/2000无法玩DOS游戏的结论在2003年成立,但后续技术发展提供了替代方案:
-
DOSBox(2002年发布)可在现代系统中模拟DOS环境,支持大部分DOS游戏;
-
VMware/VirtualBox等虚拟机可安装纯DOS或Win98,直接运行DOS程序。
不过2003年时这些方案尚未普及,原文结论符合当时语境。
二、内存概念的纠正与补充
-
扩充内存(EMS)与扩展内存(XMS)混淆
原文将“扩充内存”定义为“用户的物理内存总数”是错误的。正确概念为:
-
扩充内存(EMS):通过EMS规范(如EMM386.EXE模拟)提供的640KB以上内存,采用“页帧”机制访问,早期DOS游戏(如《仙剑奇侠传》)常依赖此内存。
-
扩展内存(XMS):通过XMS规范(HIMEM.SYS管理)提供的1MB以上物理内存,需游戏主动支持(如使用DOS4GW扩展器)。
当年此混淆常见,因两者名称相近且多数用户仅需知道“加载EMM386即可”。
-
高端内存(UMB)与上位内存区(UMA)
原文中“高端内存(upper memory)”实际指上位内存块(UMB),即640KB~1MB中未被硬件占用的空闲区域(如A000h~BFFFFh为显存,C000h~FFFFh为ROM/BIOS,仅部分间隙可用)。DEVICEhigh和LH(LoadHigh)命令可将程序加载到UMB,释放640KB基本内存。
三、Config.sys与Autoexec.bat的补充说明
-
DOS7.0的内存管理
原文称Win95/98的DOS7.0“默认加载了emm386,himem”,但实际需满足以下条件:
- MSDOS.SYS中需设置
BootGUI=0(纯DOS启动)且EMM386=ON;
- 若以“带命令行的安全模式”启动,可能未加载EMM386。
-
EMM386.EXE的参数差异
-
ram参数:模拟EMS并提供UMB;
-
noems参数:仅提供UMB,不模拟EMS。
若游戏依赖EMS(如部分早期RPG),使用noems会导致启动失败。
-
Mouse驱动的来源
原文提到“mouse.com需其他渠道获得”,实际DOS6.22及Win98的COMMAND目录中自带mouse.com(Win98路径为C:\Windows\Command\mouse.com),当年用户常因未设置PATH导致无法直接调用。
四、游戏兼容性问题的技术解释
-
显卡模式冲突(如《三国志5》)
早期DOS游戏依赖**VESA BIOS扩展(VBE)**或特定显卡的硬件中断(如Trident 9000系列)。现代显卡虽支持VBE,但可能不兼容旧版VBE 1.2规范或缺少硬件中断支持,导致画面异常。解决方法为在DOSBox中模拟旧显卡(如machine=svga_s3)。
-
声卡驱动问题
原文提到“选择Sound Blaster系列即可”,因多数DOS游戏仅支持Sound Blaster(SB)的16位音频规范。若声卡无DOS驱动,可使用SBEMU等工具模拟SB声卡。
五、工具软件的补充
-
GB5与FPE的功能差异
原文指出GB5可保存内存映像(存档)而FPE不行,此为正确结论。FPE后期版本(如FPE2000)虽支持存档,但2003年时主流仍为FPE6.0,无此功能。
-
新增实用工具
-
MEMMAKER.EXE:DOS6.22自带的内存优化工具,可自动配置Config.sys和Autoexec.bat以最大化基本内存,比手动调试更高效;
-
LOADFIX:解决部分游戏因“内存地址对齐”问题导致的启动失败(如
loadfix game.exe)。
六、关键结论的边界条件
- “550KB基本内存足够运行大多数DOS游戏”:适用于1995年前的游戏,1996年后的游戏(如《星际争霸》DOS版)需更高基本内存(约580KB)或依赖DOS4GW扩展内存。
- “WinXP/NT/2000无法玩DOS游戏”:2003年时正确,但2006年后DOSBox成熟后已不成立。
七、后续跟帖的优秀补充
Post #2提到“WIN98中玩DOS游戏发现系统没有DOS的扩展内存”,结合本文结论,正确解决方法为:在纯DOS模式下加载HIMEM.SYS和EMM386.EXE(DEVICE=C:\Windows\HIMEM.SYS + DEVICE=C:\Windows\EMM386.EXE ram),而非仅修改Config.sys。
综上,原文核心逻辑(内存优化是DOS游戏运行的关键)正确,但部分概念混淆和细节缺失需修正,且需补充后续技术发展带来的解决方案。
|