#仿真器 #nes #ppu

koute/emumisc

用 Rust 编写的 NES 仿真器

1 个不稳定发布

使用旧的 Rust 2015

0.1.0 2016年10月23日

#331仿真器

738 星 & 23 关注者

27KB
654 代码行数

Build Status

Pinky

Pinky 是一个用 Rust 从头开始编写的 NES 仿真器,仅基于 公开可用的文档

你可以在你的 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 ROM 测试套件,可以通过实现一个特性行为轻松地将其连接到任何其他仿真器(请参阅 nes/src/testsuite.rs)。

rp2c02-testsuite 包含了一个由 Visual2C02 自动生成的 PPU 测试套件,Visual2C02 是一个真正的 NES PPU 的晶体管级模拟器。

nes 包含了仿真器本身。 mos6502 拥有 6502 解释器,这对于仿真其他基于 6502 的机器可能很有用。

现在已经有数百个 NES 仿真器了;为什么还需要另一个呢?

因为为什么不呢?编写游戏机仿真器是最有趣和最有回报的项目之一,没有什么能比得上在你自己编写的仿真器上击败你最喜欢的游戏所带来的感觉。

选择 NES 也是显而易见的——由于它的文档非常完善,因此是耗时最少的仿真游戏机。

依赖关系

~11KB