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