This is a CHIP-8 emulator built using C. Graphics and events were handled by SDL 2.0.
I have a fondness for retro gaming systems, having grown up with a Spectrum. As future projects in my mind include writing an emulator for Atari 2600 or similar, I felt that writing an emulator for a simple device such as Chip 8 would be an ideal learning experience.
Background of CHIP-8:
The CHIP-8 system has the following features:
- 35 16 bit opcodes.
- 4096 bytes of memory. The first 0x200 bytes are reserved for the interpreter - therefore when a ROM is loaded it is loaded starting at 0x200.
- 16 8-bit registers called V0 to VF. V0 to VE are general purpose registers. VF is used for the carry / non-borrow flag for addition/subtraction. In addition to the carry flag, it is also used to indicate a collision when rendering.
- A 64x32 pixel monochrome display (2048 pixels).
- Program counter - used to indicate the location in memory of the current instruction.
- Index register - typically used to store memory locations. As there are 4096 bytes of memory, at least 12 bits are required.
- A stack - typically 16 levels of nesting. Used to store the current value of the program counter when calling subroutines.
- A delay timer and a sound timer. Both of these count down at 60Hz. When the sound timer is non-zero, a sound is produced.
For more details of the CHIP-8 system, I found the following resources useful:
- Cowgod's CHIP-8 Technical Reference
- How to write an emulator (CHIP-8 interpreter)
- Wikipedia entry for CHIP-8