SuperChocChip is my FOSS (Free Open-Source Software) emulator for the CHIP-8 range of systems, written from a completely blank project. It is one of the most complete and most accurate emulators out there for these architectures:
- CHIP-8
- CHIP-8 — Double-height screen
- CHIP-48
- Super-CHIP 1.0
- Super-CHIP 1.1
- XO-CHIP
- XO-CHIP — Extended colours
You can download it from GitHub here: https://github.com/GMH-Code/SuperChocChip (opens in new window).
Screenshots
SuperChocChip Running on the Desktop
SuperChocChip Running in a Terminal
Purpose and Challenges
SuperChocChip is designed to demonstrate low-level programming (assembly language/machine code) skill combined with high-level programming. It runs in both the CPython interpreter and the PyPy compiler, for which it is highly optimised.
This program also shows a very difficult task being completed — how to emulate hardware with almost perfect accuracy, without compromising code speed or complexity. It can run in the millions of instructions per second on nearly all systems; enough to run games that have been created recently, at full speed. Python is one of my favourite languages, and allows me to get tasks done quickly, but the language isn’t exactly fast to run. However, if code is written in a certain way, even slower languages can perform quickly.
Emulators can be complicated to write, especially if you want to create a good one! Many developers give up after achieving basic interpretation, if they get that far.
Features
SuperChocChip offers:
- High accuracy to the original hardware
- Speed
- Responsiveness
- Compatibility with all known software, including those that rely on quirks
- Flexibility with different CPU/system variants
- Renderer/input/audio plug-in extendibility
It appears to run every ROM out there — so long as it is started correctly!
The emulator should be almost perfect; it has been thoroughly tested, automatically and manually. There is, however, one ROM found I found in over two hundred, which runs in a modified emulator. The author has patched the emulator’s instruction set so the ROM can control changes to the emulator’s interface. Non-standard one-off situations like this will not be supported, as the author has not built a ROM according to specifications. For security reasons, I also do not permit access to the host machine.
Why Python?
I program in a range of languages, but in this case, I chose Python since I evaluated it would be fast enough for this task. The emulator turned out to be much quicker than I imagined. With every revision, it seems to get faster, more powerful, and more compatible.
Git is of course used for source control.
Alternative Download
In case GitHub isn’t working, you can also get the source code below. The emulator is licensed under the GNU Affero General Public License v3.0. Please read LICENSE
and README.md
within the archive once you have it: