從開始開發(fā) NES 模擬器 tsnes 到現(xiàn)在已經(jīng)近一個月時間了。目前已經(jīng)實現(xiàn)了 NES 必備的組件:CPU、PPU、APU、手柄、卡帶、部分常用 Mapper。由于 NES mapper 數(shù)量實在太多,目前只實現(xiàn)了 mapper0 到 4 以及我喜歡的幾個漢化游戲的 mapper。不過僅靠這些 mapper 也能運行大多數(shù)游戲了
由于我的模擬器使用 typescript 開發(fā),所以可以直接在瀏覽器運行,在線演示地址
效果如圖:

回想到一個月前,自從有了開發(fā) NES 模擬器想法后,開始在網(wǎng)上尋找相關(guān)教程,結(jié)果一個完整的教程都沒找到,能找到的教程的基本都是爛尾狀態(tài)。無奈之下只能硬啃 nesdev,然后下載好幾個模擬器源碼參考著看
由于 nesdev 對新手極其不友好,僅僅適合作為參考資料使用,所以為了后來也想開發(fā) NES 模擬器的人能更輕松地入門,于是萌生了寫下這一系列教程的想法
注:因為篇幅限制,我不會涉及到 NES 所有的細節(jié)(否則可以寫本書了)。但是會講清楚每個部分工作原理,設(shè)計思路,以及關(guān)鍵部分如何實現(xiàn),有了一定了解后再去看 nesdev 上的資料就會輕松許多
路線圖
我開發(fā)模擬器大致僅過了這么幾個階段,后續(xù)文章我也會按照這樣的順序來介紹:
1. NES 系統(tǒng)結(jié)構(gòu)
介紹 NES 基本組成,各個部分功能。以及模擬器對外提供的 API 設(shè)計
2. NES 文件結(jié)構(gòu)及 NES 開發(fā)和調(diào)試
介紹 NES 文件的基本結(jié)構(gòu)以及如何自己編譯運行一個 NES 程序
3. NES 卡帶和 Mapper
介紹卡帶的內(nèi)存映射和 Mapper 的作用,以及最簡單的 Mapper:Mapper0
4. CPU
介紹 NES CPU 的工作原理和設(shè)計
5. PPU(Picture Processing Unit)
介紹 NES 圖像顯示部分的工作原理和設(shè)計(較為復(fù)雜,可能會分成幾篇文章)
6. 輸入設(shè)備(手柄)
介紹 NES 輸入設(shè)備的工作原理和設(shè)計
輸入設(shè)備不一定要完全放在 PPU 之后開發(fā),因為 PPU 開發(fā)到一半,你可能需要開發(fā)輸入設(shè)備以實現(xiàn)人物的運動來驗證 PPU 是否正確工作
7. APU(Audio Processing Unit)
介紹 NES 音頻的工作原理和設(shè)計
8. Mapper4
介紹大型游戲常用的 Mapper4 的工作原理和設(shè)計
TIPS
這里有一些建議能幫助你的開發(fā)