用 Odin 写一个 NES 模拟器:七个月,最难的是最后那 10%
来源:lucypero.com — 2026-11-15
📋 概述
作者从 2024 年 6 月开始用 Odin 语言写 NES 模拟器 lucyNES,业余时间断续推进,2025 年 1 月暂告一段落。最终精度足以完美跑通《Battletoads》和上百款游戏,并带调试器、菜单、存档状态、手柄支持、CRT 着色器开关和部分声音,支持 NROM、MMC1、UXROM、CNROM、MMC3、GxROM、AxROM 等 mapper。他反驳「写 NES 模拟器只是个周末项目」的说法:跑到能运行《大金刚》确实很快,能到 80%~90%,但剩下 10% 极慢——CPU 与 PPU 并行通信的时序必须精确到某种程度,且 mapper 本质上是卡带里的电路,属于硬件的一部分。
🔑 核心要点
- 作者对「周末项目」的反驳很具体:能到 80%~90% 很快,最后 10% 要花掉很长时间。
- 难点不在指令集,而在时序——CPU 与 PPU 并行运行且互相通信,时序不精确就会冒出各种错误行为。
- mapper 被理解成「卡带上的电路」:自带 ROM、可写内存,有的还有额外音频,它们补齐了 NES 的电路,算是主机硬件的一部分。
- 开发靠测试 ROM 加速:这些 ROM 专门逐项检验模拟器实现,是提升精度的关键工具,社区 nesdev wiki 与 Discord 也帮了大忙。
- Odin 没有自动整型提升、也没有自动内存管理,作者用「每帧清空的临时分配器 + 全局堆 + NES Arena」三层策略解决,还觉得挺好玩。
💡 金句
You can get to 80% or maybe 90% pretty fast. It's the last 10% that takes a long, long time.
← 返回 Lobsters 首页
👍 0
👎 0