#chip8 #processor #opcode #glfw #window #key #interface

bin+lib rust-chip8-opengl

使用 Rust 编写的 CHIP-8 模拟器。可以作为 CLI 渲染器运行,输出到终端或使用 GLFW。

8 个稳定版本

1.1.6 2024 年 8 月 14 日
1.1.5 2024 年 8 月 12 日
1.0.3 2024 年 7 月 21 日

图形 API 中排名第 96

Download history 123/week @ 2024-07-15 120/week @ 2024-07-22 40/week @ 2024-07-29 222/week @ 2024-08-05 276/week @ 2024-08-12

每月下载量 755

MIT 许可证 MIT

485KB
978 行代码(不包括注释)

rust-chip8-opengl

Crates.io Docs.rs Tests

使用 Rust 编写的 CHIP-8 模拟器。可以作为独立应用程序使用,在终端或单独的窗口中运行 CHIP-8 ROM,或者作为库模拟 CHIP-8 处理器。

安装

cargo安装 rust-chip8-opengl --全部特性

或仅使用一个接口安装

cargo安装 rust-chip8-opengl --特性终端

cargo安装 rust-chip8-opengl --特性OpenGL

使用方法

作为模拟器的使用方法

Rust-chip8-opengl[选项]

可用选项

  • -f, --file [FILE]:要运行的 CHIP-8 文件,例如 -f ./my_game.ch8。如果省略,则模拟器将以交互模式运行,用户可以手动输入指令。
  • -m, --mode [MODE]:运行模拟器的模式,可以是 终端OpenGL
  • --debug-file [FILE]:记录指令的文件。如果省略,则不记录任何指令。

键盘映射

CHIP-8 键 键盘键
0 X
1 1
2 2
3 3
4 Q
5 W
6 E
7 A
8 S
9 D
A Z
B C
C 4
D R
E F
F V

注意,如果以终端模式运行,则每次按键都会切换该键的状态。因此,按下 W 将切换芯片的 5 键,用户必须再次按下 W 以释放该键。

作为库的使用

cargo添加 rust-chip8-opengl

示例代码

extern crate rust_chip8_opengl;

use rust_chip8_opengl::processor::Processor;

fn main() {
  let mut p = Processor::new();

  // Execute individual opcodes
  p.execute(0x60FF);
  p.execute(0x6118);
  assert_eq!(p.get_register_value(0x0), 0xFF);
  assert_eq!(p.get_register_value(0x1), 0x18);

  // Load a program and execute it step by step
  let program = [0x6005, 0x6105, 0x8014];
  // load_program also available for u8
  p.load_program_u16(&program);

  p.step();
  p.step();
  p.step();
  assert_eq!(p.get_register_value(0x0), 0xA);

  println!("Done");
}

请参阅Processor Docs.rs文档获取更多信息。

模拟器输出

cargo运行 ---f ./Chip8Picture.ch8 -m terminal

[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
[][]                                                                                                                        [][]
[][]                                                                                                                        [][]
[][]                                                                                                                        [][]
[][]                                                                                                                        [][]
[][]                                                                                                                        [][]
[][]                                                                                                                        [][]
[][]                  [][][][][][][][]    []            []    []    [][][][][][][][]    [][][][][][][][]                    [][]
[][]                  []                  []            []    []    []            []    []            []                    [][]
[][]                  []                  []            []    []    []            []    []            []                    [][]
[][]                  []                  []            []    []    []            []    []            []                    [][]
[][]                  []                  []            []    []    []            []    []            []                    [][]
[][]                  []                  []            []    []    []            []    []            []                    [][]
[][]                  []                  []            []    []    []            []    []            []                    [][]
[][]                  []                  [][][][][][][][]    []    [][][][][][][][]    [][][][][][][][]                    [][]
[][]                  []                  []            []    []    []                  []            []                    [][]
[][]                  []                  []            []    []    []                  []            []                    [][]
[][]                  []                  []            []    []    []                  []            []                    [][]
[][]                  []                  []            []    []    []                  []            []                    [][]
[][]                  []                  []            []    []    []                  []            []                    [][]
[][]                  []                  []            []    []    []                  []            []                    [][]
[][]                  [][][][][][][][]    []            []    []    []                  [][][][][][][][]                    [][]
[][]                                                                                                                        [][]
[][]                                                                                                                        [][]
[][]                                                                                                                        [][]
[][]                                                                                                                        [][]
[][]                                                                                                                        [][]
[][]                                                                                                                        [][]
[][]                                                                                                                        [][]
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]
[][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][][]

  PC  |  I   |  V0  |  V1  |  V2  |  V3  |  V4  |  V5  |  V6  |  V7  |  V8  |  V9  |  Va  |  Vb  |  Vc  |  Vd  |  Ve  |  Vf  |
 0x246| 0x294| 0x2C |  0x8 | 0x10 |  0x0 |  0x0 |  0x0 |  0x0 |  0x0 |  0x0 |  0x0 |  0x0 |  0x0 |  0x0 |  0x0 |  0x0 |  0x0 |
  DT  |  ST  |  I0  |  I1  |  I2  |  I3  |  I4  |  I5  |  I6  |  I7  |  I8  |  I9  |  IA  |  IB  |  IC  |  ID  |  IE  |  IF  
  0x0 |  0x0 |  F   |  F   |  F   |  F   |  F   |  F   |  F   |  F   |  F   |  F   |  F   |  F   |  F   |  F   |  F   |  F   

cargo运行 ---f Chip8Picture.ch8 -m open-gl

Screenshot of a CHIP-8 ROM being rendered using open-gl

依赖项

~2–35MB
~532K SLoC