AtomNES 是基于 Avalonia 与 AtomUI 构建的 NES/FC 桌面模拟器:周期精确的 6502 核心、逐点渲染的 PPU、106 个 Mapper、内置调试器,NativeAOT 单文件发布,MIT 开源,现已入驻 AtomUI 生态。
你小时候插过卡带、吹过卡带、被「按十次重启键才开机」折磨过的那台红白机,内部其实是一套精确到离谱的时序系统:CPU 每个周期在做什么、显存里每个像素什么时候被画出来、四个声道怎么合成,全都是确定的。
模拟器很多,但「能玩」和「精确」是两回事。这个问题的硬核答案之一,来自 AtomNES。

AtomNES 是开发者 kaiyi.wang 基于 Avalonia 与 AtomUI 6.2.5 构建的 NES(FC)桌面模拟器,覆盖 Windows 与 Linux,以 MIT 许可证在 GitHub 开源,v1.0.0 已上架 Releases。现阶段它已入驻 AtomUI 生态「应用」栏目。
它不是管理后台,也不是效率工具,而是一个逐帧实时、精度优先的模拟器:模拟核心完全不依赖 UI,界面全部由 AtomUI 组件搭建,音频走 SDL3;发布侧提供 NativeAOT 与自包含裁剪单文件两种产物,目标机器无需安装 .NET 运行时。
精度优先:能跑过权威测试 ROM 的核心
AtomNES 的取向是把精度放在首位:nestest、blargg、Holy Mapperel、mmc3_test 这些公开测试 ROM 是项目的回归基线,核心层可以在没有窗口的环境里直接跑测试。
- 周期精确的核心:6502 逐周期步进,包含哑读、哑写与 DMA 暂停;2C02 PPU 逐点渲染;2A03 APU 用带限合成与模拟滤波输出。
- 106 个 Mapper:覆盖绝大多数正式发行游戏,还能跑不少中文市场卡带与多合一合卡(外星、南晶、晶太、FK23C 等板型)。
- 扩展音频:支持 VRC6、VRC7(移植 emu2413 实现 FM 合成)、Namco 163、Sunsoft 5B 与 MMC5。
- 电池存档:带电池的 PRG RAM 自动写入 ROM 同目录的
.sav 文件。

给 ROM 开发者的调试器
除了玩游戏,AtomNES 也面向调试 ROM 和自研游戏的开发者:按 F8 打开的内置调试器可以查看 CPU 寄存器、反汇编、图案表、调色板 RAM、PPU 状态与名称表。
双手柄键位都能重新映射(按 F1),有倍速控制与暂停、重置等快捷键;界面支持中英文切换,主题启动时跟随系统。
核心与界面单向分层
仓库把模拟核心与界面拆成独立工程,依赖方向是单向的:界面只通过 AtomNES.Device 暴露的接口驱动模拟,xUnit 测试工程直接针对核心跑测试 ROM。
界面 → AtomNES.Device 接口 → 模拟核心
核心不引用任何 UI 类型,可以完全无头地逐周期对比状态。对想在界面框架之外长期复用模拟、计算类核心的团队来说,这是一个值得参考的分层方式。
快速上手
最省事的方式是直接下载:GitHub Releases 提供 Windows x64 与 Linux x64 压缩包,解压即可运行,不需要安装 .NET 运行时(Linux 上执行 ./AtomNES)。
从源码构建需要 .NET 10 SDK(NativeAOT 发布还需要平台的 C 工具链):
git clone https://github.com/AtomUICommunity/AtomNES.git
cd AtomNES
dotnet build AtomNES
dotnet run --project AtomNES -- path/to/game.nes
dotnet test AtomNES.Device.Tests
三点说明:
- AtomNES 不附带任何游戏 ROM,请自备你有权使用的 ROM 文件;
- 官方构建面向 Windows x64 与 Linux x64,暂无 macOS 版本,其他平台需自行从源码构建;
- 项目采用 MIT 许可证,第三方组件与测试 ROM 的版权归各自作者所有。
相关链接
|