NES 模擬器開發(fā)教程 00 - 總覽

從開始開發(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)行,在線演示地址
效果如圖:

image.png

回想到一個月前,自從有了開發(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ā)

  • NESDoc
    這篇文檔寫得比較簡單,可以先瀏覽一遍
  • nesdev
    這里有最完善的 NES 相關(guān)資料
  • fceux
    該模擬器具有非常強(qiáng)大的調(diào)試功能,能夠調(diào)試 CPU 指令,修改內(nèi)存,查看 PPU,生成 log 等等,對于理解 NES 各部分的工作原理有非常大的幫助
  • Log 比較
    善用 fceux 的 log 功能,也可以下載一些較為簡單的 NES 模擬器修改源碼生成 log,與自己模擬器的 log 比較,能快速定位開發(fā)中的問題
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • --- layout: post title: "如果有人問你關(guān)系型數(shù)據(jù)庫的原理,叫他看這篇文章(轉(zhuǎn))" date...
    藍(lán)墜星閱讀 919評論 0 3
  • 2019年3月31日—4月6日 【本周打卡】 放假松懈沒早起 【一周運(yùn)動】 本周練習(xí)手臂力量 【本周三只蛙】 1、...
    漏漏_1bb2閱讀 120評論 0 0
  • WKWebView使用遇到的坑,WKWebView返回向上移,代理報(bào)錯,返回頁面報(bào)錯 解決WKContentVie...
    younger_times閱讀 3,891評論 1 1
  • 爆胎的恐懼【二】什么輪胎容易爆胎? 小留流第137篇 1900年世界上誕生了實(shí)心橡膠輪胎,這輪胎是最不愛爆...
    海淀老頭兒閱讀 852評論 13 1
  • 再多的語言也抵不上一張張有視覺沖擊力的美照,以及美圖背后的風(fēng)土人情。 讀萬卷書不如行萬里路。 古人誠不欺我。
    mahabharatal閱讀 734評論 0 0

友情鏈接更多精彩內(nèi)容