CHIP-8 interpreter in JavaScript.
Work in progress
Off the heels of working on my Joy interpreter, I started down the path of looking into how VMs (as in the JVM, etc.; not hardware virtualization) and emulators work, since I knew conceptually that they are stack-based, much like Joy. The search very quickly led me to CHIP-8, which seems to be the canonical "beginner's project" when it comes to emulation, as the specs are well documented, and the number of opcodes to implement is relatively small. Once I settled on CHIP-8 emulation, I discovered Jeffrey Massung's awesome GO implementation and thought I'd take a stab at recreating the UI for the web.
- ROM interpreter
- Assembler
- Web-based front end
- ROM selection interface
- Dynamic canvas size
- Better handling of portrait/landscape orientations
- Sound
- Pause / breakpointing / stepping
- Ability to restart game
- Ability to customize key bindings
- Speed control
- Ability to run direct assembly source
- Publish front end to GitHub pages
- Bonus: Implement extra instructions for the SUPER CHIP-8 (SCHIP-8/CHIP-48)
$ npm install
$ npm start
- Cowgod's Chip-8 Technical Reference
- Chip-8 Wikipedia Page
- How to write an emulator (CHIP-8 interpreter)
- Mastering CHIP-8
- CHIP-8 Assembler and Emulator in GO
MIT