轉 遊戲模擬器介紹 2006廊坊徐紫過 新浪部落格

2021-09-28 08:24:19 字數 1628 閱讀 1578

「遊戲機模擬器」 注重的是 「嚴格模擬硬體」,要精確,可以對照 mame**,所有問題都能在裡面找到對應答案:

1. 模擬 cpu:

mame裡實現了各種 68000, z80,mips, sparc, arm,pic16c5x,nec, alpha,等 100 多款你見過的或者沒見過的主從協處理器的模擬,雖然都是 switch case opcode,但是不像 lua虛擬機器。mame的 cpu模擬重點在 「精確實現硬體」,除了指令集實現外,還有各種軟硬終端/trap/異常處理/io實現。舉個簡單例子,乙個遊戲主機需要 4mhz 的 z80晶元,你就得給我真的按照 4mhz來跑,每條指令計算週期,不能多也不能少,你要把 4mhz跑成 8mhz,遊戲玩起來節奏就不一樣了。比如以前老遊戲機上敵人一多,就會慢下來,你實現模擬器,也得把這種慢下來給實現了。另外很多街機是雙處理器,比如一塊 68000 + z80,你不能復原老主機的執行速度,一些寫的粗糙的遊戲 rom可能會出錯。

模擬 cpu重點是 「精細」,比如浮點數誤差最好一致,比如中斷優先順序你得模擬出來,模擬器由於按照 interval 來執行,更容易產生同時多個硬體中斷被觸發,比如 「手柄按鍵」 ,多核通訊之類各種東西加在一起,某個核滿負荷執行的情況下,優先順序低的可能永遠得不到處理,弄錯了可能遊戲就沒法玩了。

2. 模擬匯流排:

匯流排也有好多規格需要實現,不同基板的匯流排鏈結不同cpu 和外設的方式都不一樣,還是需要 「精確模擬」,比如 rom /ram / io 位址對映,一些大容量遊戲需要 rom 的 bank 切換,還有一些遊戲會在卡帶上帶有擴充套件記憶體,除此之外還要正確模擬各種異常,比如某些 ram,讀寫奇數字址會出錯,要給對應 cpu傳送異常訊號,某些老點的 ram只能讀寫 16bit的 word,不能讀寫 dword或者 byte,否則都無效。這些你都得模擬到位了,有些有 bug的遊戲,錯誤的寫了記憶體,在真實主機上,寫操作直接被硬體忽略掉了,沒有損傷,但軟體模擬不注意執行了那條指令結果就不一致了。

3. 外設模擬:

4. 除錯系統:

提供終端和介面可以記憶體 dump,反彙編,修改指令和資料,儲存現場之類的。

有史以來出現過的遊戲機硬體數不勝數,但是他們用到的晶元或者硬體是有限的,比如z80和 68000這類流行的晶元,具體每台主機其實就是乙份配置檔案,包含使用那種匯流排,哪些cpu,分別按照什麼速度來執行,記憶體i/o布局,關聯哪些外設,bios和啟動載入等資訊。

總之是個辛苦活,你需要一本硬體手冊,然後邊查邊弄。

如果你嫌 mame太複雜龐大,再推薦乙個 gens 的**,只針對世嘉16位機的 windows實現,條理很清晰,很多比世嘉簡單的 fc模擬器寫的都沒有 gens那麼結構清晰,簡單易讀。它就不像mame那麼大而全,很多步驟實現的很直接不需要配置那麼多,**量也不大。

現在新進的模擬器很多,沒機會逐一檢視他們的實現細節,只記得有幾款比較新的模擬器都是直接裁剪 mame的部分**來弄的,因為 mame裡面幾乎實現了所有遊戲能用的晶元了,拿出來改改引數加點指令集就可以用,比如 mame裡面模擬了 mips,我們裁剪出來實現 psp模擬器,個別指令有些區別需要改一下,然後我們著重自己實現 psp裡面 mame沒有的硬體部分。

影響:安卓模擬器就是乙個虛擬機器,虛擬機器是通過模擬的具有完整硬體系統功能的、執行在乙個完全隔離環境中的完整計算機系統。就是在電腦上模擬出乙個安卓的機器,這個安卓機器是邏輯上的。執行的時候,會占用電腦的硬體資源,所以,會拖慢電腦速度。

有關遊戲模擬器

寫在前面 最近公司在做 gba的模擬器,順便找了點資料研究了一下。提起模擬器,愛好者們一定會想到 neoragex mame,n64 等著名遊戲機的模擬器。在這些模擬器上可以模擬一些功能強大的街機板,可以讓我們在自己的 pc上免費玩街機的遊戲。想起當初數著錢買遊戲幣的日子,真是乙個天堂乙個人間啊。玩...

模擬器不全屏 Mac原生遊戲模擬器

你是否想為自己的mac電腦安裝一款蘋果原生的遊戲模擬器呢?快來試試openemu for mac吧!openemu mac版是執行在mac平台的原生遊戲模擬器。openemu的遊戲主管介面直觀友好,即使是新手也能一眼看懂。把 rom 檔案拖拽進對應的頻道就能新增遊戲,雙擊右側主介面裡的遊戲封面開始玩...

街機遊戲模擬器 mame for linux

偶爾在linux裡也是要玩下遊戲的,裝乙個街機模擬器玩玩kof也不行噢。sudo apt get install xmame 修改sudo vi etc xmame xmamerc配置檔案,下面的路徑指向你實際的rom目錄 rompath usr share games xmame roms 比如執...