fc模擬器是怎麼兼容有卡帶上額外晶元的遊戲的?

fc的特殊情況導致主機的遊戲計算不僅僅可以用主機自己的CPU進行計算,還可以在卡帶上加裝額外晶元。比如星之卡比,超級馬里奧兄弟3等等。

模擬器的原理大概是用電腦模擬主機的運營環境(完全沒研究過瞎說的)

那模擬器是怎麼模擬卡帶擁有額外晶元的遊戲的呢?

類似的街機。模擬器又是怎麼模擬定製的街機的呢


當然是也得對卡帶特徵也進行模擬啦。

早期的遊戲機,像fc與gb這類,基本上cpu與卡帶就只是一個介面,cpu在這個介面上設置請求地址和讀寫類型,然後就從這個介面讀取數據或者寫入數據,fc的cpu實際上並不知道卡帶在這個過程中用了什麼花招糊弄它。

如果你的模擬器想不實現卡帶模擬,其實也並非不可,只把卡帶介面照原樣實現,其他按fc實際進行模擬,就可以說一個fc模擬器完成了,然而這種模擬器只能用用24k或者40k的rom,想要高級功能你還得想辦法讓這個模擬器與真實的卡帶進行通信…

所以呢,為了支持更多的fc遊戲模擬,對卡帶特徵的模擬是必不可少的,卡帶特徵表示卡帶對引腳的輸入輸出的行為反應。別說特殊晶元,最基礎的卡帶行為都沒有模擬的話,遊戲都跑不起來。

先拿最基礎的讀取程序數據來說,遊戲本體的最大定址範圍就只有32KB,那麼超過這個範圍的數據和程序怎麼辦?實際上,遊戲機也不會同時讀取整個32KB的數據,所以程序通過操縱卡帶控制器,將一部分內存範圍映射到當前所需的數據部分,來實現超過32KB位置數據的讀取,卡帶的操縱本身以及相關的行為反應不模擬,遊戲開機就要翻車。

fc的機內顯存很小,需要靠卡帶上的外掛顯存來提供和提升畫面,不同的卡帶有不同的擴展方式,簡單的遊戲就直接用一份rom作為顯存,反正開機後引用到的元素能全部被fc讀取到,直接映射就完事。複雜但靜態的遊戲就可能會用可切換的rom,不同場景提供不同的圖像元素,這樣顯示日英文rpg就沒啥大問題了,那麼中文怎麼辦?外星和先鋒這些做漢化的公司就得對卡帶特性進行再次擴充,如添加用於動態裝入漢字的顯示用ram。另外,基於fc的顯存外掛特性,理論上fc也可以通過不同分時映射到不同顯存來顯著提高畫面效果,最明顯的運用就在霸王的大陸,遊戲分了四層來展現複雜的全國地圖。極端條件下,fc分時映射不同顯存的方式將使fc退化成單純的顯示設備,如gb的開發機。顯存的擴充方式如何,自然也是模擬所要完成的內容之一,否則遊戲就只能全程顯示開機時固定映射到顯存的幾個圖塊。

除此之外,卡帶上的奇葩玩意還有不少,如fc上的音樂引腳和中斷引腳,這些東西的輸入完全是卡帶上的電路結構和相關晶元決定,尤其中斷而且事關遊戲執行,不可不模擬。

具體到fc模擬器上,實際上fc現在的模擬大頭就在於卡帶特徵的模擬,由於fc前期卡帶結構簡單,後期過於依賴卡帶機能,加上非授權卡帶種類泛濫,導致各種各樣不同定義的數據切換方式以及效果、顯存映射方式、中斷方式等,fc的rom原始數據也沒有任何卡帶信息的登記,現在常用的rom會加上民間制定的ines文件頭,這基本上是一種用編號簡單表示卡帶類型的方式,然而由於編號分配的不規範,編號所代表的類型早就混亂不堪,模擬器往往只能將文件頭信息作為參考,還需自建資料庫用於確認rom的實際卡帶類型,維護這樣的東西對於fc模擬器開發者來說還是很吃力的。

這種混亂場面主要還是在fc模擬上,gb官方標準的卡帶特徵非常強勢,加上gb內部rom數據就帶有卡帶硬體信息,卡帶上沒有顯存映射和中斷引腳且官方沒有做過音樂引腳,這對模擬提供極大的便利,只要模擬了幾種常見的官方卡帶類型就能保證近乎99%的遊戲通吃。當然如果要gb模擬器實現所有未授權卡模擬,大概也會是一番不小的混亂,不過gb模擬器一般都是理直氣壯地按rom提供的卡帶硬體信息直接進行模擬,並不怎麼考慮未授權卡帶。

總而言之,對卡帶本身的模擬本就是模擬器工作中的重要部分,各路模擬器少則只完成官方定義過的卡帶類型,多則會對五花八門的授權或未授權卡帶類型一個個做出適配。

另一:有關前文提到的外星對卡帶的再次擴充,某些人見到外星漢化就只會一陣無腦瞎噴,完全不顧外星為漢化所構建的卡帶特性幾乎是現在新的fc漢化所需採用的事實基準,甚至搞出拿「外星漢化版」和「從外星漢化版衍生的漢化版」作為對比的可笑行為。

另二:前文提到ines文件頭是民間附加信息而非rom數據,有趣的是任天堂現在官方模擬rom所帶文件頭採用ines變體而不是自創新文件頭,民間標準倒逼官方也是搞笑。

另三:我個人是認為,rom數據並不只是卡帶的全部,卡帶上的晶元以及相關連接方式等(也就是本文討論的「卡帶特徵」)本身也是卡帶信息的重要部分,只是目前這一些信息除了讓模擬器自己準備之外,並沒有什麼好辦法讓rom包攜帶,總不能隨rom附帶一份vhdl給模擬器讀取吧…


雖然可能聽起來很荒唐,但是模擬器只要能運行遊戲就行了,不一定要還原硬體的功能

比如,假如某個遊戲卡上的數據是壓縮的,運行的時候需要通過特殊晶元解壓,你覺得模擬圈的開發者會怎麼做呢?他才不會去做那個解壓晶元的功能呢,他會直接導出壓縮數據自己做解壓,你下載的ROM文件是無壓縮的,遊戲機上的這部分硬體整個被跳過了。

這也是為什麼初版模擬器兼容性都很差,越是後期,越是充分發揮硬體潛力的遊戲,越是不兼容,因為很多部分根本就沒做,或者功能似是而非。

FC上的大部分附加晶元功能都不複雜,往往是內存控制器,或者實現某組特定的圖形處理,MAPPER就是把相應的功能加到模擬器上。

但是現在比較主流的模擬器,都很注意還原硬體功能,不僅會完全還原每條指令的周期,而且會把晶元的缺陷一一做出來。

有興趣可以看這個

韋易笑:遊戲機模擬器的具體原理是什麼?


推薦閱讀:

如何評價小雞模擬器?
如何評價「三國戰記」這個遊戲?
有哪些沒誠意的復刻版、重製版、高清版遊戲?
有哪些很有誠意的復刻版,重製版,高清版遊戲?
經典遊戲有必要從第一代開始玩嗎?

TAG:紅白機FamilyComputer,FC | 街機遊戲 | 懷舊遊戲 | 懷舊經典遊戲 | FCNES遊戲 |