chip8-emu
A small CHIP-8 emulator, written in Rust.
It uses the nightly feature duration_saturating_ops
, so Rust nightly is required until this feature is stabilized.
It's been tested with a few programs including corax89's chip8-test-rom.
It should be invoked as:
chip8-emu <scale-factor> <clock-speed> <program-path>
For example:
chip8-emu 8 400 my_rom.ch8
The original 4x4 hexadecimal keypad is mapped as follows:
╔═══╦═══╦═══╦═══╗ ╔═══╦═══╦═══╦═══╗
║ 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 ║
╚═══╩═══╩═══╩═══╝ ╚═══╩═══╩═══╩═══╝
Thanks to Matthew Mikolay's CHIP-8 technical reference and anybody who contributed to the CHIP-8 Wikipedia page.