1 个不稳定版本
使用旧 Rust 2015
0.1.0 | 2016 年 10 月 23 日 |
---|
#300 在 模拟器
738 个星标 & 23 个关注者
295KB
12K SLoC
Pinky
Pinky 是一个完全从头开始,仅基于 公开可用的文档 编写的 NES 模拟器,使用 Rust 编写。
你可以在你的 Web 浏览器中 运行它!
特性
- 6502、PPU 和 APU 的模拟相当准确(周期准确)。
- 基于测试 ROM 的测试套件。
- 从真实 PPU 的晶体管级模拟自动生成的 PPU 测试套件。
- 支持 NROM (0)、MMC1 (1)、UxROM (2)、AxROM (7) 和 UNROM 512 (30) 映射器。
- 可以编译为 libretro 内核。
- 可以编译成 WebAssembly。
还有一些东西尚未完成,包括
- 大多数非官方 6502 指令。
- 支持其他映射器。
- PPU 图像溢出准确。
- 支持保存状态。
- 支持 PAL。
目前这个模拟器 不是一个 生产质量级别的模拟器,尽管它可以很好地播放它所能支持的游戏(由于映射器支持有限),例如超级马里奥兄弟、大金刚或俄罗斯方块;你可以查看 nesmapper.txt,它将告诉你哪些游戏使用了哪些映射器)。
入门指南
该项目内部分为多个 crate。
pinky-libretro
包含了这个模拟器的 libretro 内核,这是运行它的推荐方式。它应该与任何 libretro 前端兼容,但仅与 RetroArch 进行了测试。
要编译 libretro 内核,请进入 pinky-libretro
目录并输入
cargo build
该操作应在 target/debug
目录下构建一个名为 libpinky_libretro.so
的共享对象(在非Linux系统上,扩展名可能不同,例如在Windows上将是 .dll
),然后您可以使用RetroArch如下使用:
retroarch -L libpinky_libretro.so your_rom.nes
您还可以运行 cargo build --release
来构建一个优化得更好的版本(尽管调试构建在现代系统上应该可以全速运行)。
在 pinky-devui
目录中还有一个简单的基于SDL2的前端;运行它只需在命令行中传递您游戏ROM的路径。
nes-testsuite
包含了一个NES游戏的测试套件,它可以通过实现单个特质轻松连接到任何其他模拟器(请参阅 nes/src/testsuite.rs
)。
rp2c02-testsuite
包含了一个PPU测试套件,该套件通过 Visual2C02 自动生成,Visual2C02是一个实际的NES PPU的晶体管级模拟器。
nes
包含了模拟器本身。 mos6502
有6502解释器,这可能对模拟基于6502的机器有用。
现在已经有很多NES模拟器了;为什么还要再一个呢?
为什么不试试呢?编写游戏机模拟器是其中最有趣和最有回报的项目之一,没有什么可以比得上在您自己编写的模拟器上打败您最喜欢的游戏的感觉。
选择NES也是显而易见的 - 它是仿真时间最少的游戏机,仅因为它有非常详细的文档。
依赖关系
~115KB