一个使用 Rust 编写的 CHIP-8 解释器/模拟器。
CHIP-8 是一种解释型编程语言,最初由 Joseph Weisbecker 于 1970 年代中期开发,用于在 COSMAC VIP 和 Telmac 1800 等 8 位微型计算机上运行。本项目实现了一个完整的 CHIP-8 模拟器,可以运行经典的 CHIP-8 游戏和程序。
| 依赖库 | 版本 | 用途 |
|---|---|---|
rand | 0.8 | 生成随机数(用于 Cxkk 指令) |
minifb | 0.24 | 窗口显示和键盘输入 |
# 克隆项目
git clone <repository-url>
cd chip8
# 编译
cargo build --release
cargo run --release
默认会加载 roms/Tetris [Fran Dachille, 1991].ch8,你可以在 src/main.rs 中修改要加载的 ROM 文件路径。
CHIP-8 使用 16 个按键(0-F),映射到现代键盘如下:
CHIP-8 键盘 现代键盘 +-+-+-+-+ +-+-+-+-+ |1|2|3|C| |1|2|3|4| +-+-+-+-+ +-+-+-+-+ |4|5|6|D| |Q|W|E|R| +-+-+-+-+ --> +-+-+-+-+ |7|8|9|E| |A|S|D|F| +-+-+-+-+ +-+-+-+-+ |A|0|B|F| |Z|X|C|V| +-+-+-+-+ +-+-+-+-+
按 Escape 键退出模拟器。
项目 roms/ 目录下包含多个经典 CHIP-8 游戏和演示程序:
| ROM 名称 | 类型 |
|---|---|
| Tetris | 游戏 |
| Space Invaders | 游戏 |
| Pong | 游戏 |
| Breakout | 游戏 |
| Brix | 游戏 |
| Maze | 演示 |
| IBM Logo | 测试 |
| Keypad Test | 测试 |
| Delay Timer Test | 测试 |
+---------------+= 0xFFF (4095) 内存结束 | | | | | 程序/数据空间 | | | | | +---------------+= 0x200 (512) 程序起始地址 | 系统预留区域 | +---------------+= 0x050 (80) 字体数据 | 解释器区域 | +---------------+= 0x000 (0) 内存起始
V0-VF: 16 个 8 位通用寄存器(VF 用作标志寄存器)I: 16 位索引寄存器PC: 程序计数器SP: 栈指针DT: 延迟定时器ST: 声音定时器| 操作码 | 说明 |
|---|---|
| 00E0 | 清屏 |
| 00EE | 从子程序返回 |
| 1NNN | 跳转到地址 NNN |
| 2NNN | 调用子程序 |
| 3XNN | 如果 VX == NN 则跳过 |
| 4XNN | 如果 VX != NN 则跳过 |
| 5XY0 | 如果 VX == VY 则跳过 |
| 6XNN | 设置 VX = NN |
| 7XNN | 设置 VX = VX + NN |
| 8XY0 | 设置 VX = VY |
| 8XY1 | 设置 VX = VX OR VY |
| 8XY2 | 设置 VX = VX AND VY |
| 8XY3 | 设置 VX = VX XOR VY |
| 8XY4 | 设置 VX = VX + VY(带进位) |
| 8XY5 | 设置 VX = VX - VY(带借位) |
| 8XY6 | 设置 VX = VX >> 1 |
| 8XY7 | 设置 VX = VY - VX(带借位) |
| 8XYE | 设置 VX = VX << 1 |
| 9XY0 | 如果 VX != VY 则跳过 |
| ANNN | 设置 I = NNN |
| BNNN | 跳转到 V0 + NNN |
| CXNN | 设置 VX = 随机数 AND NN |
| DXYN | 绘制精灵 |
| EX9E | 如果按键 VX 被按下则跳过 |
| EXA1 | 如果按键 VX 未被按下则跳过 |
| FX07 | 设置 VX = 延迟定时器 |
| FX0A | 等待按键按下 |
| FX15 | 设置延迟定时器 = VX |
| FX18 | 设置声音定时器 = VX |
| FX1E | 设置 I = I + VX |
| FX29 | 设置 I = 字符 VX 的精灵地址 |
| FX33 | 存储 BCD 表示 |
| FX55 | 存储 V0-VX 到内存 |
| FX65 | 从内存加载 V0-VX |
MIT License