chippy
CHIP-8 emulator written in Rust. This is intended to be a project for gaining experience writing emulators and practice Rust.
Dependencies
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.
Usage
$ cargo run -- games/<GAME>
You should replace
with whatever game tickles your fancy. The games under games/
are public domain.
Testing
$ cargo test
Keypad
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 |
+---+---+---+---+
Screenshots
Space Invaders
Blinky
References
- 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
License
See LICENSE.