This project is a Chip-8 emulator written in C# for windows. It works well enough to play a number of games but is not complete. This project was made primarily as a learning exercise for myself to get familiar with concepts used in emulation. Maybe I will come back to this at a later date and finish it.
To compile, just open the sln in Visual Studio and build/run.
The current status is:
- Basic emulation with most opcodes implemented
- A way to render (using SDL in this case)
- Input support
- Fix enough bugs to play a game
- Pass the tests in the chip8-test-rom
- Sound
- Functional UX/settings
- Settings
- Some way to load roms at runtime instead of hard coding them 😅
- Accurate timing
- Support for Super Chip-8 and other extensions (https://chip-8.github.io/extensions/)
The following is a list of the resources I used when developing this emulator. The first link explains a lot of the concepts of emulation in an easy to digest form, so if you are working on your emulator, I would suggest starting there. The rest are handy references I found along the way.
- How to write an emulator (CHIP-8 interpreter)
- CHIP-8 on Wikipedia
- Cowgod's Chip-8 Technical Reference v1.0
- Columbia University Chip-8 Design Specification
- TJA's mirror of the goldroad.co.uk doc
- Awesome CHIP-8 (collection of links)
For roms, there's quite a few with these links:
I also used the following to get an idea of how to use SDL in C#: