2013-07-28 47 views
3

目前,我正在Java中製作一個NES模擬器。除了一些小問題,我的6502內核可以使用99%。問題是,我正在模擬NES的6502,但我從來沒有像PS1,N64或DOS那樣對它感興趣。我一直想仿效一個控制檯/系統,它能夠做的比在屏幕上繪製一些簡單的2D精靈更有效,就像前面提到的系統一樣。與類似6502的東西相比,模擬類似x86架構的東西時會出現什麼問題?

我想問的是:與6502相比,什麼讓x86處理器難以仿真?我能想到的唯一的事情就是龐大的x86指令集,而且x86仿真器必須更高效地編程,而不是代碼的可讀性。我這樣問是因爲我查看了DosBox源代碼,並且與幾乎任何6502開源模擬器進行了比較,DosBox的x86內核的源代碼對我來說甚至是遠遠不能理解的。當所有的處理器都在查找一個操作碼列表並且系統地執行它們的時候,複雜性如此之大?

回答

4

6502和8088/86會有些類似,都是CISC等。x86有更多的說明,但是像6502只是一個主題的變體。

如果你談論的不僅僅是一個像80386或更新的DOS模擬器,那麼是的這是一個更大的努力。不僅是處理器,還有系統。一個基於6502的遊戲系統並沒有太多的東西,通常是特定於平臺,小行星,nes,c64等等。你需要想出一個bios然後是一個dos,我現在認爲它是在那裏免費。還有許多8086系統所擁有的外圍設備,視頻,硬盤等。

許多dos應用程序會直接與硬件通信,因此您必須做的不僅僅是模擬bios調用。

添加這一切並努力爲DOS/x86系統上水平比6502

你不必創建一個仿真器是設計效率得多了,不再(適用於DOS的例)。您正在查看的源代碼(MAME是一組處理器模擬器的良好源代碼)是爲極速設計的,而且很多都很難讀取。

從任何方向看,x86都是一個痛苦的指令集。如果6502是你迄今爲止所做的所有工作,我會選擇其他的東西,除非它很明顯該怎麼做(它聽起來像它不是)。也許是像arm或mips這樣的固定長度指令集(以及固定長度版本)。或者爲了獲得規模感,做一個z80並且運行太空侵略者或者galaga或者其他東西。 (hmm是太空侵略者8080?)(一個z80衍生物在gameboy中)。

2

正如你所提到的,x86有一個相當廣泛的指令集。微型8位微處理器與5個寄存器以及50個一些奇數指令(如6502)和一個支持x86的CPU的老式CISC 32位多用戶操作系統之間存在着簡單的差異。

x86處理器更爲複雜,因爲:

  • 是CISC含義許多指令做,可能需要很多次複雜的事情。

  • 傾向於支持一個FPU

  • 已經多級高速緩存

  • 具有預取輸入隊列

  • 具有用於尋呼很多向後兼容支持

  • 支持

  • multipl e特權級別