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

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