#nes #emulator #graphics #gamedev #no-alloc

无 std nes-ppu

一个具有通用可插拔接口的 NES 图形模拟器

3 个不稳定版本

0.2.0 2023 年 5 月 18 日
0.1.1 2023 年 4 月 23 日
0.1.0 2023 年 4 月 23 日

#268 in 模拟器

每月 29 下载

CC-BY-NC-4.0

71KB
966

这是一个针对 NTSC NES PPU (2c02) 的模拟器,它提供了一个类似于实际 NES 硬件上存在的通用接口。此外,该接口还包含了一些在 NES 上不可用的便利功能,以便使编程更加直观。

功能

  • 无 std 支持
  • 基于周期的模拟,包括精灵处理和映射器访问的精确计时
  • 模拟所有 PPU 寄存器(0x2000-0x2007)
  • 支持任意自定义内存映射器和输出格式
  • 大多数系统怪癖都得到了适当的模拟
    • 垃圾名字表抓取
    • 偶数帧和奇数帧上的不同总周期数
    • 溢出标志行为错误
    • 在渲染过程中读取 OAMDATA 时窃听内部精灵处理状态
    • 当 VRAM 地址索引调色板 RAM 时,强制空白期间的错误颜色输出
    • 等等。

限制

  • PPU 寄存器访问“瞬间”发生,不会导致 PPU 前进,尽管在真实硬件上读取/写入可能需要多个周期
    • 因此,为了真正精确的图形,用户必须小心权衡所做的工作与 PPU 的计时方式及频率之间的关系
  • 不支持 PAL 或 Dendy PPU
  • 不模拟开总线行为
  • 映射器读取需要 1 个周期来解决,而不是真实硬件上的 2 个周期(读取开始的计时仍然准确)

致谢

本模拟器的开发离不开 NESdev 社区成员对 www.nesdev.org 多年来的研究,也离不开 NESdev Discord 服务器 成员的帮助。

依赖关系

~0.4–0.9MB
~20K SLoC