#gameboy #emulator #save-file

app mizu

一个精确的 Gameboy (DMG) 和 Gameboy Color 模拟器。mizu-core 的前端

6 个版本 (2 个稳定版)

1.0.1 2024年1月29日
1.0.0 2022年5月27日
0.2.0 2021年5月17日
0.1.2 2021年2月18日

#11 in 模拟器

每月下载 28 次

MIT 许可证

360KB
8K 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
S
A
D

额外

功能
Enter A+B+Select+Start*
+ 增加 5 到 FPS**
- 从 FPS 减去 5**
P 打开打印机
(NUM1~NUM0) 保存状态
Shift + (NUM1~NUM0) 加载状态
C 输出所有音频通道(默认)
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 摄像头。
  • 《塞尔达传说:林克的 Awakening 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 默认级别压缩保存状态

没有文件版本之间的迁移(除从 1 迁移到 2 之外),这意味着从仿真器的过去版本保存的文件将无法在仿真器的未来版本中加载。(如果您有任何关于我们如何实现此功能的建议,欢迎您提交一个PR。)

hash 用于确保我们正在加载同一款游戏。

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

构建和安装

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

构建

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

$ cargo build

使用发布选项

$ cargo build --release

安装

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

$ cargo install mizu

还有另一个 Gameboy 模拟器吗?

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

参考资料

通用 Gameboy

CPU 指令

调试和测试

依赖项

~10–41MB
~658K SLoC