#gameboy #emulation #save-file

mizu-core

Mizu 中所有 Gameboy 模拟的核心库实现

5 个版本 (1 个稳定版本)

1.0.0 2022 年 5 月 27 日
0.2.0 2021 年 5 月 17 日
0.1.2 2021 年 2 月 18 日
0.1.1 2021 年 2 月 7 日
0.1.0 2021 年 2 月 7 日

#357模拟器

每月 41 次下载
用于 mizu

MIT 许可证

285KB
7.5K SLoC

Mizu

Build status codecov crate.io dependency status

Mizu 是一个使用 Rust 编写的精确 Gameboy 模拟器。

功能

  • 模拟原始 Gameboy (DMG) 和 Gameboy Color 硬件。
  • 通过大多数硬件测试(见 TESTING.md)。
  • 更好的保存支持。
  • 控制 SRAM 保存文件和禁用 SRAM 保存的能力。
  • MBC3 映射器精确的 RTC 模拟。
  • 带有 48KHz 音频的精确 APU 模拟。
  • SFML 图形用户界面。
  • 强大的测试框架,用于持续测试。
  • 轻松更改模拟速度。
  • 功能性的映射器
    • NoMapper
    • MBC1
    • MBC2
    • MBC3
    • MBC5
  • 打印机模拟
  • 保存状态

控制

SFML 前端提供以下键盘绑定

Gameboy

Gameboy
J B
K A
U Select
I Start
W Up
S Down
A Left
D Right

额外

功能
Enter A+B+Select+Start*
+ 增加 5 到 FPS**
- 从 FPS 减去 5**
P 打开打印机
(NUM1~NUM0) 保存状态
Shift + (NUM1~NUM0) 加载状态
C 输出 All 音频通道(默认)
V 只输出 Pulse1 音频通道
B 只输出 Pulse2 音频通道
N 只输出 Wave 音频通道
M 只输出 Noise 音频通道

* 我创建了此功能,因为在 Zelda: Link's awakening 中,您需要在同一帧上按下所有这些按钮才能打开保存菜单,这很烦人。

** 这里的 FPS 与普通游戏的 FPS 不同,低 FPS 只会让游戏卡顿,这里的 FPS 控制着模拟速度。通常它会在 60 FPS 下运行。如果用户将 FPS 设置为 30,它将以一半的速度模拟,这包括音频和 CPU 模拟。

打印机窗口键

功能
C 清除当前图像缓冲区
S 将图像缓冲区保存到文件

打印机

Gameboy 打印机是一款串行设备,可以连接到 Gameboy 上,并被某些卡带用于打印图像。使用它的流行卡带包括

  • Gameboy 照相机。
  • 《塞尔达传说:时之笛 DX》(用于从相册打印图像)。
  • 《宝可梦》(多个版本)(用于从图鉴打印宝可梦信息)。

按下 P 键可以打开打印机。

打印机仿真允许将打印的图像保存到磁盘。窗口将只显示 160x144 像素,但图像可以滚动。

保存状态

保存状态是仿真器应该具备的非常有用的功能,它允许在任何时间点保存整个仿真器的状态,并在以后任何时候加载。 mizu 的保存状态文件保存在以下文件夹中

Linux:   /home/<user>/.local/share/mizu/saved_states
Windows: C:\Users\<user>\AppData\Local\Amjad50\Mizu\data\saved_states
macOS:   /Users/<user>/Library/Application Support/Amjad50.Mizu/saved_states

保存文件的结构版本为 2

偏移 大小 字段
0x00 4 MAGIC: "MST\xee" (4D 53 54 EE)
0x04 8 保存状态文件版本
0x0C 32 卡带 sha256 哈希
0x2C 变量 zstd 默认压缩级别保存状态

文件版本之间没有迁移(除从 12 之外),这意味着从仿真器的早期版本保存的文件将无法在未来版本的仿真器中加载。(如果您有任何关于如何实现这一点的建议,欢迎您提出 PR。)

hash 用于确保我们加载的是同一游戏。

zstd 压缩出现在版本 2 中,这也是我们可以通过加载解压缩来加载版本 s 的原因。压缩内容是我们通过使用 save_state 库获得的内容。

构建和安装

要安装或构建 mizu,我们将使用 cargo

构建

如果您想使用 mizu 的开发版本,您可以自己构建项目。在下载/克隆存储库后,可以使用以下方法构建

$ cargo build

使用发布选项

$ cargo build --release

安装

如果您想使用来自 crates.io 的最新稳定版本

$ cargo install mizu

还有另一个 Gameboy 模拟器吗?

为什么不呢?这很有趣,并且具有教育意义,尽管我计划尽可能地使其尽可能准确。如果您想看到酷炫的仿真器,请查看我的以前的工作 Plastic

参考文献

通用 Gameboy

CPU 指令

调试和测试

依赖项

~5MB
~100K SLoC