The goal of this project is to create a CHIP 8 emulator in C++ using SFML for graphics.
CHIP-8 is an interpreted programming language, developed by Joseph Weisbecker. It was initially used on the COSMAC VIP and Telmac 1800 8-bit microcomputers in the mid-1970s. CHIP-8 programs are run on a CHIP-8 virtual machine. It was made to allow video games to be more easily programmed for said computers. (Wikipedia)
The emulator is represented by two classes : CPU and GPU (which treat Keyboard interrupt too, because the window is generated by this class).
The main function fetch and parse the opcode and call the right function whether a CPU or a GPU method.
git clone https://github.com/zaymat/chip8
cd chip8
make
make clean
chmod +x chip 8
./chip8 path_to_game [-s] [-l]
Flags:
- -s enable shift_quirk
- -l enable load_quirk
Load/Store quirks - Instructions 0xFX55 and 0xFX65 increments value of Index register but some CHIP-8 programs assume that they don't. Enabling this quirk causes I register to become unchanged after the instruction.
Shift quirks - Shift instructions 0x8XY6 and 0x8XYE originally shift register VY and store results in register VX. Some CHIP-8 programs incorrectly assume that the VX register is shifted by this instruction, and VY remains unmodified. Enabling this quirk causes VX to become shifted and VY remain untouched.
Enabling load_quirk is recommended for:
- Astro Dodge [Revival Studios, 2008]
- Tic-Tac-Toe [David Winter]
- Stars [Sergey Naydenov, 2010]
- Connect 4 [David Winter]
- Hidden [David Winter, 1996]
Enabling shift_quirk is recommended for:
- BMP Viewer - Hello (C8 example) [Hap, 2005]
- Space Invaders [David Winter]
- Keypad Test [Hap, 2006]
Enabling both shift_quirk AND load_quirk is recommended for:
- Blinky [Hans Christian Egeberg, 1991]
- Emulate sound to hear to BEEP sound of the machine
- Do the opcode parsing outside the main function
- Implement Super CHIP 8 opcodes (maybe I'll do another project because screen size is not the same)
- Work on frequency emulation, as today games are not fluid