1 个不稳定版本
0.1.1 | 2022年3月14日 |
---|---|
0.1.0 |
|
#1738 在 命令行工具
34KB
799 代码行
chip8emu_rs
使用SDL2的简单Chip8模拟器。
帮助
chip8emu_rs 0.1.1
Adrian Stein <adrian.stein@tum.de>
Chip8 emulator
USAGE:
chip8emu_rs.exe [FLAGS] [OPTIONS] <ROM>
FLAGS:
-m, --mute Mutes emulator audio
-h, --help Prints help information
-v, --version Prints version information
OPTIONS:
-c, --clock <CLOCK> Sets CPU clock speed (in Hz). Valid range: [300, 1000]. Default is 600
-s, --scale <SCALE> Scales pixel size. Valid range: [1, 100]. Default is 10
-t, --theme <THEME> Color theme: r, g, b, br, bg, bb, bw. Default is bw
ARGS:
<ROM> Filename of the chip8-program
Quit the emulator by pressing <ESC>, restart by pressing <SPACE>
Input mapping:
Emulator Chip8
+-+-+-+-+ +-+-+-+-+
|1|2|3|4| |1|2|3|C|
|Q|W|E|R| |4|5|6|D|
|A|S|D|F| |7|8|9|E|
|Z|X|C|V| |A|0|B|F|
+-+-+-+-+ +-+-+-+-+
(The US Layout is a reference. The physical keys are used, not the values they are assigned to)
输入映射
Chip8使用十六进制键盘。模拟器将键盘的左侧一半分配为模拟器的输入。模拟器使用扫描码,因此只关心物理键盘布局(以美国布局为参考)。
Emulator Chip8
+-+-+-+-+ +-+-+-+-+
|1|2|3|4| |1|2|3|C|
|Q|W|E|R| |4|5|6|D|
|A|S|D|F| |7|8|9|E|
|Z|X|C|V| |A|0|B|F|
+-+-+-+-+ +-+-+-+-+
Special Keys:
<ESC> quits the emulator
<SPACE> restarts the emulator
安装和构建
为了安装/构建使用sdl2 crate的项目,需要安装SDL2(使用sdl2 crate提供的安装说明)。
安装
cargo install chip8emu_rs
构建
git clone https://github.com/DasStone/chip8emu_rs.git
cd chip8emu_rs
cargo build --release
./target/release/chip8emu_rs --help
使用方法
只需为模拟器提供一个游戏文件
chip8emu_rs game.ch8
你找到的大多数rom文件将以ch8
或c8
结尾。模拟器实际上并不关心文件扩展名是什么,它只会尝试将你提供的任何文件放入模拟的ram中,然后尝试运行它。
有用的资源
强烈建议你自己编写一个模拟器。由于它的简单性,Chip8似乎是一个适合初学者接触模拟器的良好系统。以下资源可能对你有所帮助。
Chip8 技术细节
Chip8 测试rom
你可以通过简单的在线搜索(GitHub、维基百科、博客等)找到更多资源(测试roms、游戏、文档等)。
待办事项
- “嘟嘟声”的可靠性
系统通常有大约1/60秒的时间产生嘟嘟声(这接近于SDL2管理的最短时间)。一个简单的计数器扩展了这段时间,但如果有足够快的模拟CPU,这可能导致连续的嘟嘟声听起来像是一个长嘟嘟声。 - 对“非法”指令的定制错误信息
如果指令尝试访问模拟器的非法部分(例如,超出范围的内存地址),模拟器将panic
。通常情况下,在玩游戏时这不是一个问题(因为它们通常都是正确的)。然而,我希望在发生这种情况时实现自定义错误信息,以帮助开发人员使用该模拟器创建chip8游戏。 - 更好的测试
系统仅通过运行chip8测试rom和游戏进行测试。目前没有单元测试。 - 全屏支持和动态调整大小
- 解耦CPU和TIMER计时
CPU的计时依赖于定时器的固定60Hz。
依赖项
~17MB
~354K SLoC