#chip8 #emulator

app chip8emu_rs

Chip8 模拟器

1 个不稳定版本

0.1.1 2022年3月14日
0.1.0 2022年3月14日

#1738命令行工具

MIT 协议

34KB
799 代码行

chip8emu_rs

GitHub last commit License: MIT

使用SDL2的简单Chip8模拟器。

Invaders Pong

帮助

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文件将以ch8c8结尾。模拟器实际上并不关心文件扩展名是什么,它只会尝试将你提供的任何文件放入模拟的ram中,然后尝试运行它。

有用的资源

强烈建议你自己编写一个模拟器。由于它的简单性,Chip8似乎是一个适合初学者接触模拟器的良好系统。以下资源可能对你有所帮助。

Chip8 技术细节

Chip8 测试rom

你可以通过简单的在线搜索(GitHub、维基百科、博客等)找到更多资源(测试roms、游戏、文档等)。

待办事项

  1. “嘟嘟声”的可靠性
    系统通常有大约1/60秒的时间产生嘟嘟声(这接近于SDL2管理的最短时间)。一个简单的计数器扩展了这段时间,但如果有足够快的模拟CPU,这可能导致连续的嘟嘟声听起来像是一个长嘟嘟声。
  2. 对“非法”指令的定制错误信息
    如果指令尝试访问模拟器的非法部分(例如,超出范围的内存地址),模拟器将panic。通常情况下,在玩游戏时这不是一个问题(因为它们通常都是正确的)。然而,我希望在发生这种情况时实现自定义错误信息,以帮助开发人员使用该模拟器创建chip8游戏。
  3. 更好的测试
    系统仅通过运行chip8测试rom和游戏进行测试。目前没有单元测试。
  4. 全屏支持和动态调整大小
  5. 解耦CPU和TIMER计时
    CPU的计时依赖于定时器的固定60Hz。

依赖项

~17MB
~354K SLoC