2 个版本
0.1.1 | 2022 年 5 月 27 日 |
---|---|
0.1.0 | 2021 年 5 月 17 日 |
#55 in #gameboy
用于 3 个 crate(通过 save_state)
26KB
626 行
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 | 上 |
S | 下 |
A | 左 |
D | 右 |
额外
键 | 功能 |
---|---|
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 Camera。
- Zelda: Link's Awakening DX(用于从相册打印图像)。
- Pokemon(几个版本)(用于从口袋妖怪图鉴打印口袋妖怪信息)。
通过按 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指令
调试和测试
依赖项
~1.5MB
~35K SLoC