CHIP-8 emulator written in Rust. This is intended to be a project for gaining experience writing emulators and practice Rust. As such, it still needs improvement and any feedback is more than welcome.
You'll need to install the SDL2.0 Development Libraries. The README of the rust-sdl2 project has very detailed information on how to install it in different platforms and it also covers scenarios that may be relevant to you.
$ cargo run -- games/<GAME>
You should replace <GAME>
with whatever game tickles your fancy. The games under games/
are public domain.
$ cargo test
The original CHIP-8 16-key hexadecimal keypad has the following layout:
+---+---+---+---+
| 1 | 2 | 3 | C |
+---+---+---+---+
| 4 | 5 | 6 | D |
+---+---+---+---+
| 7 | 8 | 9 | E |
+---+---+---+---+
| A | 0 | B | F |
+---+---+---+---+
I'm using the following mapping:
+---+---+---+---+
| 1 | 2 | 3 | 4 |
+---+---+---+---+
| Q | W | E | R |
+---+---+---+---+
| A | S | D | F |
+---+---+---+---+
| Z | X | C | V |
+---+---+---+---+
- CHIP-8 Games Pack
- Cowgod's Chip-8 Technical Reference v1.0
- Matthew Mikolay's CHIP-8 Technical Reference
- Collection of CHIP-8 related documentation
- Awesome CHIP-8
And here is a list of some of the projects that I've read and used as a source of inspiration. I didn't copy any of the code, but some names may be exactly the same simply because there was no better alternative.
- Laurence Muller's CHIP-8 emulator in C++
- Steve Losh's CHIP-8 emulator in Common Lisp
- Starr Horne's CHIP-8 emulator in Rust
- Michael Burge's NES emulator in Rust
- Imran Nazar's GameBoy emulator in JavaScript
See LICENSE.