淘客熙熙

主题:【怀旧】DOS游戏怀旧全攻略 -- 我心飞翔

共:💬67 🌺32
分页树展主题 · 全看首页 上页
/ 5
下页 末页
  • 家园 【怀旧】DOS游戏怀旧全攻略

    为什么写这篇全攻略?

    呵呵,很简单啊,第一是因为DOS下确实有很多经典的游戏,不时拿出来重温一下,感觉非常棒;第二是因为现在的很多游戏让人失望啊~~~再说老狼可怜的机器也跑不了太华丽的东东~~~只好怀旧啦~~~;第三,现在的机器运行老游戏实在是问题多多啊,把这些毛病揪出来搞一个集中批斗,希望能对大家有所帮助!

    测试的环境:

    CPU: Celeron 300A

    内存:64M RAM

    主板:Intel 440BX芯片组

    硬盘:10G H.D.D.(第一个分区是fat16)

    显卡:Intel i740(8M) AGP

    声卡:ess688(ISA),Diamond S70(ess1968, PCI),S3 sonic vibes(PCI),ALS200(ISA),

    操作系统:DOS6.22, Windows98, DOS7.0

    以后如果有时间,会测试一些新的环境,让更多玩友可以从中受益。

    测试的游戏(均为DOS版):

    仙剑奇侠传,轩辕剑2,轩辕剑外传――枫之舞,新蜀山剑侠,金庸群侠传,魔神战记2,皇帝,欢乐幸福人,大富翁3,明星志愿……

    关于本文:

    本文适合各种游戏龄的玩家,阐述问题的时候尽量分别介绍底层原理和解决办法,希望对玩家和程序员都能有所帮助。

    本文共有以下几章:

    序 章 你现在看到的

    第一章 不灭的传说,介绍经典的游戏

    第二章 拦路的怪兽,总结老游戏常见的问题

    第三章 内存的结界,讲解内存的配置

    第四章 声音的女巫,讲解声卡的配置

    第五章 捣乱的喽罗,其他杂七杂八的问题

    因为各个游戏的问题有比较大的共性,所以本文的第一章将着重介绍各个游戏的特点以及怀旧的价值,希望能唤起大家的回忆;后面几章将分别介绍各游戏可能遇到的问题――多数游戏的出错信息是笔者在exe中“翻”出来的,所以应该比较全;解决问题的部分初步分为内存篇、声卡篇和其他篇,一些我不能搞定的问题,我会直接提出,还希望大家能够跟贴不吝赐教。

    DOS游戏怀旧全攻略 第一章 不灭的传说

    DOS时代的经典游戏实在是太多太多了,以下只是个人收藏的一部分。回忆起当年在同学家一群人挤在一台电脑前玩RPG的感觉,我的文字汩汩而出,感动的神经又一次被牵动。也许是我太念旧了?

    1、仙剑奇侠传――不会有人不知道这个游戏吧?经典中的经典――有人要问了,有Windows下的98柔情篇,更有重新制作的新仙剑,为什么还盯着DOS版不放?除了怀旧的成分,真的有很多原因让我们选择老仙剑的。我总觉得几个新版仙剑的过场动画比较媚气,没有了老仙剑的古味,反倒像言情小说的封面!当然了,这只是个人的喜好而已。

    另外,不知道各位比较过新版和DOS版的音乐、音效没有?很明显,原作的midi是基于FM调频合成制作的,在FM调频的声卡下可取得最好的效果;而到了windows版,懒惰的大宇居然没有重新制作midi,在波表、软波表大行其道的环境下,大部分音乐失去了原来的本色,虽然音色有了很大进步,midi的色彩却丢失了不少。不信?找一块FM声卡,听一下仙剑的几首战斗音乐就知道了――唉,没有林坤信就是不行啊――到了仙剑2,我惊奇的发现几首沿用下来的战斗音乐居然还没有改动!音乐都是新人做的,没听过FM的效果很正常,难道姚老大也忘了前代的音乐色彩吗?

    另外,DOS版仙剑的音效是非常有动感的,李逍遥使仙术时那声低沉的呼喝磁性十足,而后几代作品的音效则明显比较“假”,人物出招的喊声和惨叫没有什么分别。

    2、新蜀山剑侠――全名是《新蜀山剑侠―紫青双剑录》,玩过的人可能不多,但这个游戏真的不错。原著是还珠楼主,他的《蜀山剑侠传》是20世纪中期中国武侠小说转型期的里程碑作品之一(此处省略仰慕之辞32767字),据我分析,此游戏的命名和倪匡改写自《蜀山剑侠传》的小说《紫青双剑录》有关。

    本游戏是1996年智冠公司推出的,可出现在战斗队伍中的角色一共有四人:李英琼(主角,峨嵋女侠),袁星(通灵的猩猿,后期可说人话),周轻云(主角师姑荀兰茵的徒弟),余英男(忘了是哪派的弟子,正道中人,力量型角色)。游戏虽然感情成分很少,但情节非常出采,而且有时会出现精彩的道家哲学思想阐述,这得益于还珠楼主前辈的原著。

    可惜,这个游戏的画面比较烂,游戏背景有些细节经过细腻制作,在同时期的游戏里比较出色,但战斗画面实在不敢恭维。值得一提的是,这个游戏的音乐还算不错,锋芒非常内敛,很有传统风味,与仙剑的侠骨柔情、魔神战记2的活泼灵动形成鲜明对比。

    在游戏系统方面,战斗采用了传统的回合制,上手很容易;遇敌是踩地雷式,敌人能力的设定稍有不合理之处,玩过的人可能会有所感觉。游戏最大的特色就是炼术系统,可以把几种物品组合成新的物品,比如千年雪莲子+萱花=冷云丹。游戏的隐藏情节很少,但从未见有人写过解谜方法,因为那个一环扣一环的谜题确实复杂,敬请期待我的游戏怀旧大典,到时还请多多捧场~~~

    3、轩辕剑外传――枫之舞――大宇早期的经典,发行于1995年。这是DOMO工作组推出的轩辕剑系列的第三部,轩辕剑4的故事是此代的延续。经常能在网上看到这样的评价:某些细节要超越仙剑。

    这个角色扮演类游戏以战国时代周威烈王六年(公元前420年)为背景,故事情节涉及到很多真实的历史人物,让游戏很有怀古的味道,又增添了几分神秘的色彩。游戏的故事是大宇的原创,情节跌宕起伏,人物个性鲜明,尤其是文字编辑的功底非常深厚,凡是关乎古代习俗的内容皆有典可查,甚至连作战的怪兽也不放过――多数怪兽出自《山海经》,比如英招、陆吾等。老狼前些日子看到了各代《山海经》的图鉴,惊奇的发现有些怪兽在游戏中的图像和各代图鉴非常相似,让人不得不佩服大宇的细致。

    游戏的画面在同时期游戏里非常出众,采用了传统水墨画的风格,烘托出浓厚的中国气息和历史沧桑感。音乐更是优秀之极,几乎达到了FM合成的极限,作曲非常大气和丰富,情绪张扬,旋律巧妙,甚至到了匪夷所思的地步(省略说不出来的溢美之辞16383字)。枫之舞改变了前代一味追求中国曲风的音乐风格,很多地方甚至能感觉到西方交响音乐的影子,乐曲构成气势磅礴,后来的游戏也绝少出现能与之媲美的音乐。轩辕剑4的CD《吟枫舞墨》就选取了大量的枫之舞音乐,并且全是FM的原声,收藏价值非凡。

    游戏的战斗系统比较平衡,除了最终boss稍嫌软弱之外,基本没有什么失误。炼妖壶的设定非常受欢迎,玩家可以自由的收妖、炼妖,我现在还记得当年炼出魔神刑天时的那种狂喜。游戏中有一些支线任务,多是解谜或帮人收集物品一类,有时间的玩友不妨试试。

    4、魔神战记2――这是由大宇亚特斯工作室制作的传统RPG游戏,游戏的情节颇具欧式风味,这从人物设定方面可见一斑:主角亚特斯,是典型的战士,能使用光的力量,身世却颇为神秘;战斗伙伴有三人,分别是善良的精灵蓓莎、具有火龙血统的神秘女子朵蜜拉和兽人族战士亚娜妲。

    魔神战记2情节比较丰富,地图也采用了开放式,反面角色的设定可以看见轩辕剑系列的影子――没有绝对的坏人,只有想法极端的偏执狂。游戏情节的做工很细腻,一些细节可以给人很深的印象,结局的交待也恰到好处,这些还是留给玩家自己去体会比较好。

    关于战斗,魔神战记2仍然采用了踩地雷的遇敌方式和回合制战斗,战斗中主角的造型会因手里的武器的不同而有所不同,可以说比较细致。可供使用的魔法多达120多种,魔法的命名似乎也受了欧式风格的影响――诸如恢复术、中恢复术、强恢复术、超恢复术一类,虽然顾名思义,却总嫌太缺少文采。魔法有属性的设定,向敌人施以相克的魔法能予以重击。

    游戏的画面采用了很鲜艳的配色,让人眼前一亮;画风也很具欧式风格,真让人怀疑这是不是大宇的作品。游戏音乐是由林坤信制作的,自然非凡,难得的是魔神战记2的音乐和仙剑奇侠传风格迥异,而且同样优秀。给我的印象是曲风活泼灵动,而且因为游戏的感情悲剧成分不多,所以很多音乐走的是优美动听的路子,听起来很轻松。音符的堆砌旋律优美而又灵气不俗,并且也带有西化的风格。总之,这个优秀的游戏能让人感受一个截然不同的大宇,不尝试一下实在可惜了。

    一直以为经典的游戏是必须要收藏的,上面的游戏最少的我也玩了3遍,最多的仙剑玩了有20多遍。虽然我对情节了如指掌,甚至可以背出某个宝箱里的宝物,但玩游戏的感觉却从来没有褪祛过,可能就是那种夹在旧字典里发黄的老照片的味道吧,愈发让我意识到这些都是不能失去的经典,也许,这就是属于我的,不灭的传说。

    DOS游戏怀旧全攻略 第二章 拦路的怪兽

    本章向大家介绍各老游戏可能遇到的问题,大多数出错信息都是我辛辛苦苦从exe中“翻”出来的,应该比较全。

    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中显卡的相关设置有关。具体问题分析和解决请参见第五章“捣乱的喽罗”。

    另外,各位还遇到了什么问题,不妨写出来大家讨论,这里当然不可能做到什么权威了,但是我们大家加起来就是不可思议的力量,相信一定能够把拦路的怪兽折磨而死(BT)!

    DOS游戏怀旧全攻略 第三章 内存的结界

    内存的问题是我们能否运行游戏的关键,没有声音还好办,好歹游戏还能玩;内存出错可就惨了,给面子的来个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:doshimem.sys /testmem:off

    ②device=c:dosemm386.exe ram

    ③devicehigh=c:doside.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:doside.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:dossmartdrv.exe /x

    lh c:dosxmsdsk.exe 240000 /y

    lh c:dosmouse.com

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

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

    DOS游戏怀旧全攻略 第四章 声音的女巫

    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设置的具体选项根据个人的主板不同可能略有区别,意思一样即可。

    好了,我能写的也只有这么多了,希望能对大家有所帮助。现在,我以狼族的荣耀向敌人发出胜利的宣言:声音的女巫,消失吧!嗷嗷嗷~~~

    DOS游戏怀旧全攻略 第五章 捣乱的喽罗

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

    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:SDD2UNIVBE32.EXE -w

    C:SDD2CONFIG.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下可选鼠标驱动程序。

    嗷嗷嗷~~~Game Over~~~!

    • 家园 楼主的游戏已经是相对后期的了。最怀念92年玩的三国,后来的大战略

      还有模拟城市。超级医生最感兴趣的是。。。脱衣服检查身体。我可是93年开始卖电脑了。

    • 家园 好老的帖子了

      标准三板斧,除了lz和最早的两个回复,后面的都是最近才回的了

    • 家园 亲切得眼泪哗啦哗啦的~~~~

      基本全玩过了,或者还应该报上几个:

      大时代

      风尘三侠之金箭使者

      命运之手

      运镖天下

      魔域传说4:波斯战记

      英雄无敌

      魔兽争霸

      要不 火炎之文章也算上,哈哈

    • 家园 细数起来,DOS时代光荣的经典作品真不少

      三国志1至4,英杰传、大航海1、2,太阁立志传1、2,信长野望1至6、独立战争、源平合战、项刘记、欧陆战线、皇室血裔、古事记……还有那个提督之决断……

      项刘记画面素净古朴,系统独特,是大地图下的军团制,几个武将几千兵马编成一个军团行动,后来三国信长太阁都借鉴了系统,作战时候是一个伪3D的界面,不太好操作,不过很有意思。这个作品没有续作,可惜了。

      以楚汉争霸为背景的游戏不多,DOS时代除了项刘记,还有汉堂出的一个RPG西楚霸王,画面水平和轩辕剑差不多,单挑的时候动感十足。

      源平合战也是个独特的游戏,这部作品和三国志4同期,当时光荣的美工已经把640X480X16色发挥到臻境,画面十分精美,每个人物都有半身像,系统和三国志4类似,但作战时是三国志6式的半即时。

      现在光荣的游戏题材太狭窄了,无双无双还是无双。

    • 家园 喜欢仙剑
    • 家园 还记得一些~

      仙剑奇侠传---玩的时候相当非常滴入戏,一到打架的时候就特恨敌人,打我不要紧,居然敢打偶的女人~~被朋友笑死啦~~~

      最后灵儿走啦,害偶心里好伤感喔~~

      轩辕剑外传――枫之舞.....玩了一点点

    • 家园 楼主可有皇帝这个游戏。很怀念
      • 家园 这个有印象

        殿试的时候看到历朝历代的牛人纷纷登场...

        玩这个游戏的主要感觉是: 当皇帝真是苦差事

        颜子兄看看这里: http://games.sina.com.cn/downgames/demo/pcgames/2005-09-08/094492835.shtml

        或者放狗 皇帝 dos版

    • 家园 以前玩游戏

      怕电脑内存不够多硬盘不够大显卡不够快声卡不够新,现在又掉过来了,咳,dos游戏就是折腾人啊,这也是游戏的乐趣之一吧?!

      • 家园 【讨论】嗯,那时基本内存老不够用

        天天折腾CONFIG.SYS AUTOEXEC.BAT

分页树展主题 · 全看首页 上页
/ 5
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河