从开始开发 NES 模拟器
tsnes 到现在已经近一个月时间了。目前已经实现了 NES 必备的组件:CPU、PPU、APU、手柄、卡带、部分常用 Mapper。由于 NES mapper 数量实在太多,目前只实现了 mapper0 到 4 以及我喜欢的几个汉化游戏的 mapper。不过仅靠这些 mapper 也能运行大多数游戏了
由于我的模拟器使用 typescript 开发,所以可以直接在浏览器运行,
在线演示地址效果如图:
image.png
回想到一个月前,自从有了开发 NES 模拟器想法后,开始在网上寻找相关教程,结果一个完整的教程都没找到,能找到的教程的基本都是烂尾状态。无奈之下只能硬啃
nesdev,然后下载好几个模拟器源码参考着看
由于 nesdev 对新手极其不友好,仅仅适合作为参考资料使用,所以为了后来也想开发 NES 模拟器的人能更轻松地入门,于是萌生了写下这一系列教程的想法
注:因为篇幅限制,我不会涉及到 NES 所有的细节(否则可以写本书了)。但是会讲清楚每个部分工作原理,设计思路,以及关键部分如何实现,有了一定了解后再去看 nesdev 上的资料就会轻松许多
路线图
我开发模拟器大致仅过了这么几个阶段,后续文章我也会按照这样的顺序来介绍:
1. NES 系统结构
介绍 NES 基本组成,各个部分功能。以及模拟器对外提供的 API 设计
2. NES 文件结构及 NES 开发和调试
介绍 NES 文件的基本结构以及如何自己编译运行一个 NES 程序
3. NES 卡带和 Mapper
介绍卡带的内存映射和 Mapper 的作用,以及最简单的 Mapper:Mapper0
4. CPU
介绍 NES CPU 的工作原理和设计
5. PPU(Picture Processing Unit)
介绍 NES 图像显示部分的工作原理和设计(较为复杂,可能会分成几篇文章)
6. 输入设备(手柄)
介绍 NES 输入设备的工作原理和设计
输入设备不一定要完全放在 PPU 之后开发,因为 PPU 开发到一半,你可能需要开发输入设备以实现人物的运动来验证 PPU 是否正确工作
7. APU(Audio Processing Unit)
介绍 NES 音频的工作原理和设计
8. Mapper4
介绍大型游戏常用的 Mapper4 的工作原理和设计
TIPS
这里有一些建议能帮助你的开发
NESDoc这篇文档写得比较简单,可以先浏览一遍
nesdev这里有最完善的 NES 相关资料
fceux该模拟器具有非常强大的调试功能,能够调试 CPU 指令,修改内存,查看 PPU,生成 log 等等,对于理解 NES 各部分的工作原理有非常大的帮助
Log 比较
善用 fceux 的 log 功能,也可以下载一些较为简单的 NES 模拟器修改源码生成 log,与自己模拟器的 log 比较,能快速定位开发中的问题
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。