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
285KB
7.5K SLoC
Mizu
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 默认压缩级别保存状态 |
文件版本之间没有迁移(除从 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 指令
调试和测试
依赖项
~5MB
~100K SLoC