當年的精彩:DOS游戲懷舊全攻略 - 電腦游戲綜合 - 電腦游戲區 - 游戲人的家 - P...
1、運行exe時(shí)出現Runtime error xxx at xxxx-xxxx,比如仙劍的install.exe。
出現這種問(wèn)題可能的原因比較多,如果確定游戲本身沒(méi)有問(wèn)題,或者曾經(jīng)有過(guò)正常運行的歷史,則基本可以判斷是CPU和內存的問(wèn)題了。Runtime error后面的錯誤編號可以幫助判斷錯誤原因,最常見(jiàn)的是Runtime error 200,這是因為CPU速度太快引起的,具體問(wèn)題分析和解決請參見(jiàn)第五章“搗亂的嘍羅”。
2、運行游戲時(shí)顯示:
Error: Free memory is not enough 570k,或Base memory not enough,這是常規內存不足,可能是加載了太多的常駐程序所至。
3、運行游戲時(shí)顯示:
XMS not found! 這是因為沒(méi)有加載擴展內存管理程序himem.sys所致。
4、運行游戲時(shí)顯示:
XMS = -xxxxx,Error: XMS is not enough xxxk,這是因為xms太大,而很多老游戲采用了一個(gè)signed integer來(lái)存儲xms的數量,導致32767以上的數值變成負數。
5、運行游戲時(shí)顯示:
Error: No EMS found!!! 這是因為在內存配置時(shí)加載了關(guān)閉EMS的選項,可以通過(guò)修改config.sys來(lái)解決。
6、運行游戲時(shí)顯示:
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的設置有問(wèn)題,可以根據游戲的要求,對config.sys進(jìn)行修改。
以上問(wèn)題,請參見(jiàn)第三章“內存的結界”。
7、游戲的音樂(lè )和音效問(wèn)題。音樂(lè )的設置相對簡(jiǎn)單,但多數人玩仙劍沒(méi)有音效,采用AC“97集成聲卡的更可憐,很多玩友連音樂(lè )都沒(méi)有……這是因為新的操作系統對中斷、DMA的管理方式做了改動(dòng),以前的DOS游戲出現了很多兼容性問(wèn)題。另外大多數AC”97集成聲卡都不支持DOS,或者根本不提供DOS驅動(dòng)程序。目前只有CMI8738等少數硬聲卡可以支持DOS,如果你的聲卡是ALC650等軟聲卡的話(huà),建議你買(mǎi)一塊PCI聲卡,老狼現在對這個(gè)問(wèn)題沒(méi)有什么辦法。關(guān)于聲卡的問(wèn)題,請參見(jiàn)第四章“聲音的女巫”。
8、在純DOS系統下,游戲花屏直至死機,這種問(wèn)題雖然不常見(jiàn),但卻直接影響我們游戲的進(jìn)行。這多半是因為你的顯卡太新了,或者顯存太大了。另外,還可能與顯卡支持的VBE版本和BIOS中顯卡的相關(guān)設置有關(guān)。具體問(wèn)題分析和解決請參見(jiàn)第五章“搗亂的嘍羅”。
內存的問(wèn)題是我們能否運行游戲的關(guān)鍵,沒(méi)有聲音還好辦,好歹游戲還能玩;內存出錯可就慘了,給面子的來(lái)個(gè)xxx Error,不給面子的干脆死機!為了能把問(wèn)題講的更清楚些,這里老狼先介紹一下混蛋微軟的內存管理,有相關(guān)基礎的兄弟和不想浪費時(shí)間的玩友不妨跳過(guò)這一段。以下內容老狼參考了不少資料,涉及到微機原理相關(guān)內容,如有不妥之處還請各位指正。
1、結界的歷史
1979年,Intel推出了具有20根數據總線(xiàn)的8088芯片,尋址能力為1MB,并且受到了IBM的扶植。另一方面,Microsoft在為基于8088的電腦設計的操作系統DOS中,采用了“段內尋址”的方式,每個(gè)段的長(cháng)度為64K字節,共有65535個(gè)段,但是因為段與段之間可以互相重疊,段的起始地址間距為16字節,所以DOS的尋址能力只有65535*16Byte,也就是1MB。然而,IBM認為1MB實(shí)在太大了,沒(méi)有人會(huì )用到那么多的內存,于是又把384K內存(UMB,Upper Memory Block)分配給ROM BIOS和視頻內存等等,于是,邪惡的640K結界形成了,出于兼容性的考慮,此后的DOS一直保留著(zhù)原有的內存管理機制。這個(gè)640K的Base memory,又叫Conventional memory,是系統最基本內存,它是DOS和所有程序都可以用的內存區,被稱(chēng)為常規內存。它是系統內存中最寶貴、最緊張的資源,如果一個(gè)程序因為內存不夠而無(wú)法運行,大多是因為這部分空間不夠使用造成的。
隨著(zhù)硬件的發(fā)展,80386DX已經(jīng)是32位微處理器,實(shí)際尋址能力達4GB,反觀(guān)舊的內存管理規范卻處處礙手礙腳,于是擴頁(yè)內存Expanded memory規范橫空出世,取代了INT 15H,使程序能夠訪(fǎng)問(wèn)32MB的內存空間。EMS通過(guò)一種頁(yè)面映射分配技術(shù)的反復映射訪(fǎng)問(wèn)所有的EMS內存,這樣的效率并不高,所以只有少數老游戲使用了EMS,比如《魔神戰記2》。由于EMS并沒(méi)有解決根本的問(wèn)題,Microsoft又制定了擴展內存Extended memory管理規范XMS,通過(guò)在實(shí)模式與保護模式之間的快速切換,使程序在保護模式中能夠直接使用系統所有內存,從而快速訪(fǎng)問(wèn)XMS。XMS簡(jiǎn)單而實(shí)際,被眾多DOS游戲采用。我們打破了結界嗎?還沒(méi)有!很多游戲采用了一個(gè)signed integer來(lái)存儲XMS的數量,導致32767以上的數值變成負數,這就要求我們降低內存數量了。唉,如果說(shuō)640K的結界是天災,這個(gè)signed integer的結界就是人禍了。
再后來(lái),人們終于找到了理想的突破640K結界的方法:使用DOS保護模式(DOS Protected Mode)。80386及以后的CPU在電腦啟動(dòng)后都會(huì )進(jìn)入實(shí)模式(Real Mode),以兼容早期的8088。當運行在保護模式中時(shí),CPU的直接尋址能力高達4GB,并且提供了很多高級功能,使程序可以直接使用系統所有的內存資源,常規內存、擴頁(yè)內存和擴展內存統統失去了意義;并且,保護模式能夠充分發(fā)揮32位CPU的威力,極大的提高了效率。常玩游戲的各位一定對DOS4GW非常熟悉,它是Watcom C/C++專(zhuān)用的內存管理工具,可以使程序運行在32位保護模式下。著(zhù)名的《金庸群俠傳》就是用了這個(gè)DOS擴展器。運行在32位保護模式下的游戲很少遇到內存問(wèn)題,只可惜這樣的游戲真是不多啊。
2、賢者的符咒
這里我們將結合config.sys中內存的有關(guān)設置,結合具體游戲來(lái)介紹突破內存結界的方法。config.sys是DOS的主要配置文件,放在系統盤(pán)的根目錄下。
一個(gè)典型的config.sys,可以適應多數游戲:
?、賒evice=c:\dos\himem.sys /testmem:off
?、赿evice=c:\dos\emm386.exe ram
?、踕evicehigh=c:\dos\ide.sys /d:MSCD000
?、躣os=high,umb
?、輋iles=30
?、辀uffers=30
?、遱tacks=9,256
為了方便解釋?zhuān)侠窃谛惺准恿诵刑枴?br>
?、賖imem是XMS存儲器的管理驅動(dòng)程序,它的主要功能是把擴展存儲器按XMS規范來(lái)管理,也就說(shuō),它把傳統的擴展存儲器改造成了XMS存儲器。此外,HIMEM.SYS可以建立HMA(High Memory Area)存儲器供DOS使用。如果運行游戲時(shí)顯示:XMS not found! 這就是因為沒(méi)有加載himem.sys所致。為了加快啟動(dòng)的速度,可以在后面加上 /testmem:off 參數,跳過(guò)內存檢測。另外,加上 /cpuclock:on 可以修正系統時(shí)鐘速度變化的錯誤。
?、趀mm386是EMS的管理驅動(dòng)程序。它的功能是把XMS存儲器模擬成EMS存儲器來(lái)使用,并且建立UMB存儲器。后面的ram參數表示同時(shí)建立UMB和EMS存儲器,如果你確定游戲不需要EMS內存,可以考慮把ram換成noems參數,這樣可以獲得更多的UMB空間。但如果運行游戲時(shí)顯示:Error: No EMS found!!! 也就是說(shuō)游戲要求使用ems,你就不能用noems參數了。如果運行游戲時(shí)顯示:Error: Free memory is not enough 570k,或Base memory not enough,這是常規內存不足,應該考慮減少常駐內存的程序或將程序加載到UMB中。
?、踕evicehigh=c:\dos\ide.sys /d:MSCD000,這是光驅的驅動(dòng)程序,devicehigh表示把程序加載到UMB中,這樣可以為常規內存騰出更多的空間。如果你不需要在DOS下使用光驅?zhuān)@行可以省略。
?、躣os=high,umb,設置DOS占用的內存,high表示把DOS核心部分裝入HMA以節省常規內存,umb表示允許DOS與UMB建立聯(lián)系,以便裝載TSR程序或設備驅動(dòng)程序到UMB中,若改成noumb則表示不允許使用UMB。
?、輋iles=30,設定程序可以同時(shí)打開(kāi)的最大文件數,若不寫(xiě)這一行,相當于默認值files=10,可能導致大型程序運行失敗。
?、辀uffers=30,設定緩沖區數量。DOS默認緩沖區數Buffers的值為15,每個(gè)Buffer占523字節。如果設定了DOS=HIGH,Buffers會(huì )移到HMA中,這當然是好事,但是如果用戶(hù)自己設定的Buffers太大,超過(guò)47個(gè),則HMA裝入DOS核心后的剩余空間無(wú)法容納,就把全部Buffers移至常規內存中,這將得不償失,30的數量比較合理。buffers還可以在后面加上一個(gè)數字,表示高速緩沖區數量,如buffers=20,8。老狼沒(méi)感覺(jué)到這個(gè)選項對游戲有什么影響,也就沒(méi)有使用過(guò)這種設置,所以就不管它了。
?、遱tacks=9,256,設定使用的堆棧的數量。第一個(gè)數字是堆棧數量,第二個(gè)是每個(gè)堆棧的大小。通常指定的值是9,256,這個(gè)值可以滿(mǎn)足大多數的需求。
只有這些顯然是不夠的,讓我們再來(lái)看看其他可能遇到的內存問(wèn)題。如果運行游戲時(shí)顯示: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. 這多半已經(jīng)死機了,不過(guò)根據老狼的經(jīng)驗,出現這種錯誤偶然成分居多,就好像windows的非法操作一樣,重新啟動(dòng)后多半就能恢復正常。如果還是不行,可能是EMM386的設置有問(wèn)題,可以根據游戲的要求,對其進(jìn)行修改,遇到具體問(wèn)題時(shí)我們再討論。
下面是本章的重點(diǎn),很多玩友在玩游戲時(shí)收到的錯誤信息是 XMS = -xxxxx,Error: XMS is not enough xxxk,冤枉啊,內存怎么成了負數呢?其實(shí)這是因為xms太大,而很多老游戲偏偏采用了一個(gè)signed integer來(lái)存儲xms的數量,導致32767以上的數值變成負數。解決的辦法有很多,如果你的內存是64M,你可以在運行游戲之前運行lh smartdrv 32768 16384,加載高速磁盤(pán)緩沖程序。lh表示將smartdrv讀入UMB,32768表示使用的內存數量(KB),16384表示提供給windows的緩存數量。這樣一來(lái),既減少了內存,又增加了系統效率,一舉兩得。為什么高于64M內存的電腦不能使用這種辦法呢?因為smartdrv的緩存越大,它本身占用的空間也就越大,如果UMB容不下它,他會(huì )毫不客氣的搶占常規內存,直接導致游戲無(wú)法運行。實(shí)際上,加載帶/x參數的smartdrv可以極大的提高游戲性能,所以它是我們必備的法寶。
還有一種辦法是使用虛擬硬盤(pán)程序,將內存虛擬成硬盤(pán),用很小的常規內存或UMB就可以輕松占用掉大量XMS,很適合大內存的玩友使用。DOS中自帶的ramdrive.sys必須在config.sys中加載,一旦加載就不可調整內存盤(pán)的大小或刪除。而且虛擬硬盤(pán)有容量限制,不能超過(guò)32M,它們自己還占用較多的常規內存。幸好有人開(kāi)發(fā)了完美的虛擬硬盤(pán)軟件XMSDSK,這個(gè)小東西的好處太多了,它可以在命令行方式下無(wú)限次動(dòng)態(tài)調節虛擬硬盤(pán)的大小,并可以隨時(shí)卸載;它占用內存相當才幾百字節,而且能夠自動(dòng)調入到UMB,而不需用LH命令,最重要的是,它支持極大的內存,目前高達2G!XMSDSK的使用非常簡(jiǎn)單,只需執行xmsdsk xxxxx就行了,單位是KB。卸載的命令是xmsdsk /u,非常輕松。下載地址是http://firststep.ahwww.com/dosware/xmsdsk.exe。
如果你打算在windows下玩老游戲,以上問(wèn)題的解決就更簡(jiǎn)單了,直接編輯游戲可執行文件的屬性,點(diǎn)“內存”,然后按照需要選擇合適的內存數量即可。但你可能要忍受無(wú)聲甚至噪音的痛苦,而且多數游戲的時(shí)鐘會(huì )有所變化。
另外,通過(guò)himem.sys調用int 15h也可以限制內存,但15h中斷很不安全,微軟早已放棄使用了,而且從未公布himem的int 15h用法,所以這種辦法不推薦使用,有興趣的朋友可以自己查閱相關(guān)資料。
到這里,我們不妨編一個(gè)批處理文件來(lái)簡(jiǎn)化我們玩游戲的過(guò)程,建立一個(gè)擴展名是bat的文件,在里面輸入如下內容(假定你的內存是256M):
lh c:\dos\smartdrv.exe /x
lh c:\dos\xmsdsk.exe 240000 /y
lh c:\dos\mouse.com
以上的路徑和程序請根據個(gè)人的需要修改。
到這里,相信大家在內存方面不會(huì )遇到什么障礙了,多數游戲已經(jīng)能夠運行起來(lái),至于怎么讓游戲運行得有聲有色、原汁原味,敬請期待后幾章的內容。
DOS游戲最難搞的是什么?聲卡!隨著(zhù)微軟帝國的擴張,聲音的女巫無(wú)情的剝奪了我們游戲的樂(lè )趣。沒(méi)有了聲音,游戲的色彩大打折扣,直接影響著(zhù)我們懷舊的心情。本章將從聲卡工作原理與游戲聲卡編程入手,向大家介紹相關(guān)的知識和設置。與前幾章一樣,你可以跳過(guò)原理部分的內容,直接根據自己的情況選擇合適的設置。OK,先來(lái)一聲狼叫試試嗓子,嗷嗷嗷~~~
1、聲卡的基本概念。熟悉聲卡設置的朋友肯定對以下的名詞有著(zhù)深厚的感情:IRQ、I/O Address、DMA……我們不妨回顧一下這些概念。
IRQ(Interrupt Request中斷請求)是由某個(gè)設備發(fā)出的請求CPU產(chǎn)生中斷的一個(gè)請求響應信號。當某個(gè)設備發(fā)出中斷請求時(shí),CPU會(huì )暫停當前的工作,根據中斷請求的優(yōu)先級來(lái)決定首先響應哪一個(gè)設備的中斷請求。中斷請求IRQ0到1RQ15中,IRQ0的優(yōu)先級別最高,IRQ15最低。原則上,計算機中每個(gè)設備自身只有惟一的一個(gè)中斷請求通道,即IRQ值(又叫IRQ號)。當兩個(gè)硬件設備同時(shí)使用同一個(gè)IRQ時(shí),就會(huì )發(fā)生沖突,因為這時(shí)CPU已經(jīng)無(wú)法判斷收到的中斷請求究竟來(lái)自于哪個(gè)設備了。一個(gè)好好的DOS游戲到了win32環(huán)境下,由于中斷管理發(fā)生了很大的變化,聲卡在dos7.0下就會(huì )出現兼容性不好的問(wèn)題,GUI中的問(wèn)題則更多了。
I/O Address(Input/Output Address輸入輸出地址),可以理解為CPU和外部設備之間的接口,在調用外部設備時(shí),程序通過(guò)I/O地址告訴CPU數據將要被傳送到什么地方。好比母老虎(程序)說(shuō):把啤酒(數據)送到老狼的宿舍4036(設備I/O地址),老熊(CPU)就扛著(zhù)酒上樓,如果送錯了,只怕會(huì )被人當成胡亂灌水的家伙拒之門(mén)外。聲卡常用的I/O是220h,有一些老聲卡甚至只能使用這個(gè)地址。多數的游戲會(huì )提供一個(gè)設置程序,允許玩家選擇自己的IRQ和I/O Address。
DMA(Direct Memory Access直接內存訪(fǎng)問(wèn)),是一種完全由硬件執行I/O交換的工作方式。在這種方式中,DMA控制器從CPU中完全接管對總線(xiàn)的控制,數據交換不經(jīng)過(guò)CPU,直接在內存和I/O設備之間進(jìn)行。聲卡與內存之間采用DMA方式傳送數據,以便讓CPU有更多的時(shí)間去處理其它事情。在輸出聲音信號時(shí),用DMA方式將聲音數據直接從主內存傳向聲卡的緩沖區,進(jìn)行數/模轉換后再送至音頻放大器,最后到揚聲器發(fā)聲。DOS下的聲卡默認的DMA通道是1,絕大多數游戲根本沒(méi)有給我們選擇的機會(huì ),我們只能使用這個(gè)設置。遺憾的是,多數AC“97集成聲卡已經(jīng)不再占用DMA通道了,所以這些聲卡可能需要軟件模擬等方式來(lái)兼容老游戲。老狼的機器太破,跑不了虛擬機軟件,有興趣的朋友不妨試試。
FM合成是運用特定的算法,用正弦波來(lái)模擬樂(lè )器的聲音。其主要特點(diǎn)是電路簡(jiǎn)單、成本低,不需要存儲器支持。由于FM是靠算法來(lái)合成某個(gè)聲音,因此實(shí)現方法過(guò)于生硬、效果單一,所生成的聲音與真實(shí)樂(lè )器產(chǎn)生的聲音距離很大,電子味很濃。多數DOS游戲的音樂(lè )就是針對FM制作的,用FM聽(tīng)雖然音色不逼真,確是實(shí)實(shí)在在的原汁原味。相對而言,Wavetable波表合成把真實(shí)的樂(lè )器采樣儲存起來(lái),音色很逼真,卻并不適合用來(lái)玩老游戲,這一點(diǎn)很多朋友會(huì )有體會(huì )。比較好的PCI聲卡會(huì )提供兩種合成方式,比如老狼的Sonic Impact S70,在仙劍的設置中如果選擇“聲霸卡”,聽(tīng)到的就是220h端口送出的FM音樂(lè );如果選擇“聲霸卡+MIDI”,就能聽(tīng)到330h端口送出的波表MIDI。330h本來(lái)是外部MPU-401的端口,在這里卻被模擬成了內部MIDI,看來(lái)Diamond在兼容性方面確是下了不少苦功啊。
2、為了解釋聲卡不正常的問(wèn)題,我們先看看游戲中聲卡編程的原理。我們先來(lái)看一個(gè)函數:
void writefm(char reg,char data)
{
int ioport=0x220;
outportb(ioport,reg);
delay(1);
outportb(ioport+1,data);
delay(2);
}
聰明的你看了這些,一定會(huì )對I/O有一個(gè)更好的理解。通過(guò)對端口220h的操作,游戲就可以調用聲卡了。但在DOS這個(gè)單任務(wù)環(huán)境下,聲音和圖像、文字卻是同時(shí)出現的,這是怎么回事?讓我們先來(lái)了解一些程序中斷的相關(guān)知識。由外設控制器或協(xié)處理器引起的中斷稱(chēng)為外中斷,由程序中安排的中斷指令I(lǐng)NT產(chǎn)生的中斷,或由CPU的某些錯誤產(chǎn)生的中斷稱(chēng)為內中斷。下面是一些中斷的例子:INT 8h,每1/18.2秒定時(shí)器發(fā)出的中斷;INT 1ch,指向每1/18.2秒時(shí)可執行的服務(wù)程序的入口;INT 71h,硬件中斷9。
在IBM PC系統中,定時(shí)器中斷INT 1ch是獨立于CPU工作的,但因為它是指向INT 8h的入口,我們又叫它偽中斷。這一中斷在系統初始化后,中斷程序僅僅有一條IRET指令,但它是每秒發(fā)生18.2次的硬件中斷,如果改變這一中斷服務(wù)程序,使其指向其他進(jìn)程,這個(gè)進(jìn)程就能以每秒18.2次的速度工作。這樣,就可以通過(guò)不斷比較時(shí)鐘計數值和聲音計數值來(lái)實(shí)現背景音樂(lè )的播放了。當然,具體的過(guò)程比這要復雜很多,感興趣的朋友可以查閱相關(guān)資料。
3、我們可能遇到的問(wèn)題。
?、貴M音樂(lè )時(shí)鐘不準,音樂(lè )忽快忽慢,尤其是在按鍵盤(pán)時(shí)。在Windows下運行老游戲多有這樣的問(wèn)題。究其原因,是因為多數dos游戲只能通過(guò)調用偽中斷INT 1ch來(lái)實(shí)現諸如背景音樂(lè )的功能。而在Windows下中斷管理有了較大改動(dòng),所以會(huì )導致使用這個(gè)中斷的程序不正常。解決這個(gè)問(wèn)題的辦法很簡(jiǎn)單,就是進(jìn)入純DOS環(huán)境。
?、赑CI聲卡的兼容性問(wèn)題。PCI聲卡的DOS兼容性確實(shí)存在一些麻煩,這也許正是一些已經(jīng)購買(mǎi)了PCI聲卡的朋友常感到困惑的問(wèn)題。盡管很多PCI聲卡廠(chǎng)商都宣布其產(chǎn)品在玩DOS游戲時(shí)沒(méi)有問(wèn)題,可事實(shí)并非如此。究其原因是因為現在的一些PCI聲卡在聲音合成方式上同ISA聲卡有很大不同,它在DOS下不兼容原來(lái)的IRQ、DMA等設置,因此導致DOS的很多游戲不認PCI聲卡,當然也就沒(méi)有聲音了。這是PCI聲卡的一個(gè)共同弱點(diǎn),很多PCI聲卡廠(chǎng)家都推出了各自的解決方法,比如Diamond就開(kāi)發(fā)出一個(gè)名叫SB-Emu的小程序可以解決兼容性問(wèn)題。為了檢查你的PCI聲卡是否已經(jīng)具有DOS支持,可以在命令行模式下打入set,察看輸出結果是否包含Blaster=A220 I5 D1 T4這樣的一行,如果有,說(shuō)明你的聲卡已經(jīng)安裝了DOS支持;如果沒(méi)有,你可能需要下載相關(guān)的驅動(dòng)程序了。
另外,部分PCI聲卡(似乎非常少)使用了SB-Link來(lái)增強兼容性。這是一條連接主板與聲卡之間的5pin排線(xiàn),不是每一款主板都設有這個(gè)接頭。SB-Link的作用就是將ISA總線(xiàn)的DMA和IRQ從主板傳送到PCI聲卡上,讓DOS游戲在ISA總線(xiàn)中找到聲卡的DMA和IRQ,從而提高PCI聲卡在DOS模式下工作的兼容性。創(chuàng )新和Diamond的部分聲卡采用了這種連線(xiàn),如果你試過(guò)本章所有方法仍然解決不了兼容性問(wèn)題,不妨考慮找一根SB-Link試試。
?、跘C”97集成聲卡的兼容性問(wèn)題。這真是一個(gè)大難題,老狼現在還沒(méi)聽(tīng)說(shuō)過(guò)哪款AC“97軟聲卡能支持DOS,偏偏新出的主板還都一窩蜂的去趕軟聲卡的潮流。如果你的集成聲卡是硬件的,比如8738和CTxxxx,那老狼可要恭喜你了,他們都提供了DOS支持,請把他們當成一般的PCI聲卡好了。對于軟聲卡,老狼聽(tīng)說(shuō)用虛擬機可以模擬成Sound Blaster Pro來(lái)用,只可惜我沒(méi)有機會(huì )測試。
?、茉鯓釉O置聲卡?建議你看看聲卡驅動(dòng)程序中是否包含有For DOS的驅動(dòng),如果有,裝之,并在A(yíng)utoexec.bat中加入Set Blaster=A220 I5 D1 T4這種語(yǔ)句來(lái)設置聲卡的I/O地址、IRQ和DMA(多數聲卡會(huì )由驅動(dòng)程序自動(dòng)安裝完成),這樣PCI聲卡就可以被DOS游戲識別了。下面說(shuō)說(shuō)set blaster的用法:A后面的數字表示I/O Address,I后面的數字是IRQ,D后面的數字是DMA通道,T的參數最容易被忽略,卻是游戲是否能識別聲卡的關(guān)鍵:它表示聲卡的類(lèi)型。因為Creative公司是聲卡的老大,所以其他聲卡必須以之為標準,將自己模擬成Creative公司的某種產(chǎn)品。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等。按照老狼的經(jīng)驗,A220 I5 D1是兼容性最好的設置,T的類(lèi)型就要參考你聲卡的相關(guān)資料了,如果它說(shuō)“兼容Sound Blaster Pro”,你就毫不猶豫的寫(xiě)上4吧。其實(shí),4和6是最常見(jiàn)的也是兼容性最好的。
?、萋暱ㄊ褂玫牟皇茿220 I5 D1的設置,游戲不認,但在autoexec.bat里改了set blaster卻無(wú)效?這可能是你的聲卡使用了特殊的設置方式,使Dos和Windows的設置掛了鉤。進(jìn)入Windows,選系統屬性,設備管理,找到你的聲卡最上層設備或SB Emu一類(lèi)根DOS兼容有關(guān)的設備,選屬性,重新配置資源,改成A220 I5 D1的設置。如果出現資源沖突,不要理它,按照自己的意愿改好,然后按照它的要求重啟就行了。如果出現資源沖突,強烈建議你先禁用掉與之沖突的設備,先設置好聲卡再說(shuō)。如果你沒(méi)有打印機等使用LPT的設備,可以在BIOS中把Parallel Port改成Disabled,可以節省一個(gè)IRQ。
?、薅荚O置好了仍然無(wú)聲或死機?進(jìn)入BIOS設置,在PCI/PNP Configuration中設置PNP OS Installed為Yes,Resouce Controlled By為Manual,然后在下面的列表中找到你聲卡的IRQ,如果你用的是PCI聲卡,選PCI/ISA PNP Device,如果是ISA聲卡,選Legacy ISA;對DMA也如此設置。好了,多數游戲已經(jīng)能正常發(fā)聲了,除了——
?、咭恍┯螒蛴幸魳?lè ),沒(méi)有音效?一提到這個(gè)問(wèn)題,老狼腦子里馬上出現兩個(gè)名字:仙劍!楓之舞!經(jīng)過(guò)不懈的努力,老狼終于把這老哥倆折騰出聲了!在完成了上面的聲卡設置后,運行游戲的設置程序,可能是install.exe,按照你聲卡的設置情況調整設置,完成后選“中止”即可。運行不了?請參見(jiàn)第五章?lián)v亂的嘍羅~。建議大家在游戲里存一個(gè)可以馬上遇到簡(jiǎn)單敵人的檔,比如仙靈島的入口,因為這一步可能需要很多次嘗試。請先檢驗一下:進(jìn)入游戲,有音樂(lè );開(kāi)始游戲,戰斗,沒(méi)有音效?察看系統選單,音效是關(guān)還是開(kāi)?如果是關(guān),不用徒勞去打開(kāi)它了,你前面的設置肯定有問(wèn)題,再折騰折騰吧。如果是開(kāi),請重啟,進(jìn)入BIOS設置,在A(yíng)dvanced Chipset Settings里找到Memory Hole At 15~16M,選Enable!這個(gè),老狼也很奇怪,和聲卡有啥關(guān)系???瘋狂查資料,等找到了再告訴大家吧。保存設置——音效有了嗎?如果還沒(méi)有,回到剛才的設置頁(yè),有兩項8 bit IO Recovery Time和16 bit IO Recovery Time,兩項都改成2,呵呵,這下總行了吧?不行就再改大點(diǎn),不過(guò)超過(guò)3可能會(huì )死機哦,做好放電的準備吧~~~
?、嗫紤]裝兩塊聲卡——PCI/ISA或PCI/AC”97。這也是很好的選擇,如果你按照上面的方法還是解決不了問(wèn)題,只能考慮換聲卡了。老一點(diǎn)的機器還有ISA插槽,太好了,隨便買(mǎi)一塊ISA聲卡,找驅動(dòng),兩塊聲卡可以共存。而且既然是為了玩DOS游戲,Windows的驅動(dòng)完全可以不裝了,省得沖突。將ISA聲卡的Line Out用音頻線(xiàn)接入PCI聲卡的Line In,再把音箱接到PCI聲卡的輸出上,大功告成。老狼就在使用ALS200和Diamond S70的組合,任何一個(gè)都可以完全正常的玩DOS游戲,但ALS的FM音色更“古”些,所以在仙劍里我還是偏愛(ài)它的。
如果你的主板沒(méi)有ISA槽,那就買(mǎi)一塊兼容性好的PCI聲卡吧,二手就行,一定要支持DOS。因為出現沖突的可能性比較大,所以老狼勸你還是屏蔽掉集成聲卡。
至于兩塊PCI聲卡共存,老狼除了死機啥結果也沒(méi)得到,難道是因為我還不夠執著(zhù)?呵呵,算了,我放棄了。
4、我的測試結果。
我手頭的聲卡在大多數游戲都能正常發(fā)聲,共測試了4塊聲卡:ESS688(ISA),Diamond S70(ESS1968芯片,又稱(chēng)Maestro2,PCI),S3 Sonic Vibes(PCI),ALS200(ISA)。
ESS688完全沒(méi)有音樂(lè ),但音效正常,可能是卡的問(wèn)題?
S70一切正常!究極感動(dòng),真不枉老狼當年400大洋請她回家~~~
S3 Sonic Vibes原裝聲卡,可能是驅動(dòng)程序的原因,噪聲非常大,老狼沒(méi)有多試。不過(guò)老馬說(shuō)他的啟亨小辣椒(同一芯片)完全正常,看來(lái)這塊卡還是有價(jià)值的。而且這是自帶DLS的聲卡,太少見(jiàn)了,是老狼的收藏品。
ALS200完全正常,沒(méi)啥說(shuō)的,老東西了。
這幾天如果有機會(huì ),我會(huì )在找一些卡來(lái)測試。以上關(guān)于BIOS設置的具體選項根據個(gè)人的主板不同可能略有區別,意思一樣即可。
除去前幾章提到的問(wèn)題,還有很多雜七雜八的嘍羅影響游戲的正常運行,下面是老狼曾經(jīng)遇到過(guò)的麻煩,希望對大家有所幫助。問(wèn)題盡量從原理上加以解釋?zhuān)赃m合各種需要的玩家。
1、CPU
運行exe時(shí)出現Runtime error 200 at xxxx-xxxx,比如仙劍的install.exe,新蜀山劍俠的mark.exe。
多數情況下,這是因為這個(gè)exe是采用Borland Pascal 7.0編譯的,要解釋這個(gè)問(wèn)題,就不得不說(shuō)說(shuō)Borland Pascal的歷史。使用Borland Pascal 6.0編譯的程序并沒(méi)有這樣的問(wèn)題,但是這些程序的延遲(delay)在快速計算機上卻是完全錯誤的。BP7修正了這個(gè)問(wèn)題,卻帶來(lái)了更大的隱患:BP7編譯出來(lái)的所有使用系統CRT單元的程序在比較快的計算機上都會(huì )出現Runtime Error 200錯誤。很可憐,幾乎所有的程序都會(huì )用到CRT單元。
下面是這個(gè)錯誤的一些解釋?zhuān)篊RT單元在初始化時(shí),會(huì )初始化delay procedure,delay初始化時(shí),會(huì )使用內存地址為40:6C的每秒鐘跳動(dòng)18.2次的BIOS定時(shí)器,來(lái)計算55毫秒(1/18.2)需要多少條IRET空指令。這個(gè)數字會(huì )被除以55來(lái)得到能延遲1毫秒的數字,計算的結果被寫(xiě)到一個(gè)2字節的變量里。這個(gè)變量的溢出就導致了Runtime Error 200。Runtime Error 200的含義是Division by zero,但在這里它是由溢出引起的。由此可見(jiàn),比較快的計算機很可能導致這個(gè)錯誤。
既然知道了問(wèn)題的起因,解決辦法也就有了——或者修正錯誤,或者給CPU降速。直接修正錯誤的軟件并不好找,而且對壓縮過(guò)的或加密過(guò)的exe無(wú)能為力,有時(shí)間的朋友可以找一個(gè)叫PROT 200的TSR程序,它可以自動(dòng)使后面有CRT單元問(wèn)題的程序正常運行,而不需修改文件本身。我們主要考慮第二種方法。http://www.thaisoftware.co.th/ftp/slowdown.com是一個(gè)很好的DOS下的降速軟件(還可以降Windows的速度)。選項很多,有熱鍵和命令行兩種方式。我們可以在游戲開(kāi)始前運行它,隨時(shí)按Ctrl+Alt+5鍵就可將速度降低50%,Ctrl+Alt+0就是恢復原來(lái)的速度。另外,每按一次Ctrl+Alt+加號鍵可以增加10%的速度,每按一次Ctrl+Alt+減號鍵可以減少10%的速度。如果熱鍵無(wú)效,用SLOWDOWN /P:55 install命令就可以以55%的速度來(lái)運行install程序。有些游戲速度太快,沒(méi)辦法正常玩,用它也可以解決了。如果你覺(jué)得麻煩,可以在BIOS中把CPU的一級緩存CPU Internal Cache設成Disabled,這樣也可以極大的降低速度。
2、顯卡
在DOS下運行仙劍花屏?這是由于老的DOS游戲不能夠支持AGP接口的大顯存顯卡。解決的辦法就是把顯卡偽裝成一個(gè)比較破的東西。經(jīng)常玩DOS游戲的朋友對于UNIVBE一定不會(huì )陌生:UNIVBE是Scitech出品的一種通用的顯示驅動(dòng)軟件,可以為各種不同的顯卡配備統一的標準VESA顯示驅動(dòng)程序,從而為各種游戲提供一致的圖形顯示接口。到了Windows時(shí)代,Scitech在UNIVBE的基礎上,出品了新的Scitech Display Doctor(簡(jiǎn)稱(chēng)SDD),提供從DOS到Windows 3.x以至于Windows 98的全系列操作環(huán)境,并且包含對非常多的顯示卡的支持,用來(lái)解決在顯示卡使用過(guò)程中可能碰到的絕大多數與顯示相關(guān)的問(wèn)題。遺憾的是,SDD已經(jīng)停止更新了,在Scitech的網(wǎng)站http://www.scitechsoft.com可以看到,最新版的SDD6.53提供了免費下載和自由注冊碼,需要的朋友可以下載,老狼也不知道它能支持多少新顯卡。我們的偽裝主要是針對DOS的,所以在安裝以后最好把SDD的目錄Copy一份,以避免偽裝對Windows的影響。具體的方法是運行下面兩條語(yǔ)句:
C:\SDD2\UNIVBE32.EXE -w
C:\SDD2\CONFIG.EXE -m1024
第一行的意思是加載UNIVBE,并防止Windows的Logo扭曲;第二行中 -m1024的意思是把顯存限制為1MB,以解決花屏等問(wèn)題。使用UNIVBE的好處還有一個(gè),就是為游戲提供更多種非標準分辨率的支持,這對一些模擬器非常有用。
3、硬盤(pán)
硬盤(pán)也有問(wèn)題嗎?如果你想用DOS6.x玩游戲的話(huà),你需要注意,這個(gè)系統是不支持FAT32分區的,而且,如果你的擴展DOS分區大于8.4G,即使里面的邏輯盤(pán)采用了FAT16,DOS6.x還是不能識別。最好的辦法是使用DOS7.0,老狼還沒(méi)見(jiàn)過(guò)非要DOS6.x不可的游戲呢。如果你真的需要DOS6,可以考慮做一張DOS6的啟動(dòng)盤(pán),然后在里面放上FAT32支持一類(lèi)的軟件,Volkov Commander似乎不錯,老狼沒(méi)有用過(guò),各位不妨試試看。
另外,如果你的游戲還是遇到一些莫名其妙的問(wèn)題,可以嘗試在BIOS中將硬盤(pán)的PIO調低一些,并關(guān)閉UDMA的選項,以避免IDE計時(shí)器的相關(guān)問(wèn)題。
4、DOS7.x的設置
Windows 9x所附帶的DOS7.x對老DOS游戲的兼容性不錯,我們可以通過(guò)修改MSDOS.SYS來(lái)讓我們的DOS7用得更舒服,順便獲得較多的常規內存。下面向大家簡(jiǎn)要介紹一下:在DOS方式下,進(jìn)入系統盤(pán)根目錄,去掉MSDOS.SYS的屬性并修改之。對于系統盤(pán)是C盤(pán)的玩友,命令如下:
c:
cd attrib msdos.sys -h -s -r
edit msdos.sys
在彈出的頁(yè)面中找到[Options]這一段,改成以下內容(;后面的內容為注釋?zhuān)?br>
BootMulti=1 ;允許多重引導
BootMenu=1 ;出現多重引導菜單
BootMenuDelay=30 ;菜單默認項等待時(shí)間
BootGUI=1 ;以normal啟動(dòng)是否直接進(jìn)入圖形界面
DoubleBuffer=1 ;磁盤(pán)緩沖,并不占多少內存,留著(zhù)算了
Logo=0 ;是否顯示LOGO
Dblspace=1 ;設置成1可以獲得對壓縮盤(pán)的支持
drvspace=1 ;同上,這兩項對內存也沒(méi)有什么影響
AutoScan=1 ;非法關(guān)機后是否自動(dòng)檢查硬盤(pán)
值得一提的是,MSDOS.SYS中大片的XXX是為了兼容性而設置的,不要刪掉。編輯完成后,保存退出,打
attrib msdos.sys +s +r +h
以策萬(wàn)全。這樣的設置配合我在第三章給出的CONFIG.SYS,可以獲得600k以上常規內存,如果不加載光驅等,可達621k,足以滿(mǎn)足游戲的需要。
5、日文游戲的解決辦法。DOS/V似乎是一個(gè)很難纏的家伙,這里有一個(gè)據說(shuō)是DOS/V的完美替代品http://firststep.ahwww.com/dosware/dosj.zip,老狼沒(méi)有試過(guò),想玩日文游戲的玩友不妨下載一個(gè)。
6、呼,暫時(shí)想不到了~~~嘍羅難免有漏網(wǎng)的,膽敢現身者格殺勿論!
洋洋灑灑一大堆字寫(xiě)下來(lái),也不知道對大家有幫助沒(méi)有,反正老狼現在正在痛痛快快的懷舊呢,祝大家都能有一個(gè)好的懷舊心情!最后奉上我的一些游戲的運行情況:
仙劍奇俠傳,Windows下音效不正常,FM音樂(lè )時(shí)鐘不正常。DOS各版本下均調試通過(guò),install.exe需降速使用,若無(wú)音效,需打開(kāi)Memory Hole。
軒轅劍2,Windows和DOS下完全正常。
軒轅劍外傳——楓之舞,Windows和DOS下完全正常。
新蜀山劍俠,Windows下FM音樂(lè )時(shí)鐘不正常,有音效時(shí)出現噪音,速度奇慢,但不影響游戲。DOS下一切正常。如果屏幕閃爍,請運行play1.bat進(jìn)入游戲;mark.exe只是一個(gè)商標,需降速使用。
金庸群俠傳,Windows和DOS下完全正常。
魔神戰記2,Windows下不能運行,DOS下emm386的參數不能是noems,退出時(shí)偶爾死機,其余一切正常。
皇帝,Windows下和DOS下完全正常,DOS下需加載鼠標驅動(dòng)程序。
歡樂(lè )幸福人,Windows下不能運行,DOS下完全正常,需加載鼠標驅動(dòng)程序。
大富翁3,Windows下FM音樂(lè )時(shí)鐘不正常,DOS下完全正常,DOS下可選鼠標驅動(dòng)程序。
明星志愿,Windows下FM音樂(lè )時(shí)鐘不正常,音調不準,DOS下完全正常,DOS下可選鼠標驅動(dòng)程序。
超級醫生2,Windows下和DOS下完全正常,DOS下可選鼠標驅動(dòng)程序。
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。