This project was used to cut my teeth on implementing hardware emulators and run into the pitfalls of linking that to a UI before proceeding a something more substantial. It's rough around the edges and was built and tested in Linux.
There is currently no input remapping, most of the controls should be on the numeric keys of your keyboard,I mostly tested using BRIX since the ROM has a lot of outlying behaviours, if you want to play that one the controls are { 4: Left, 6: Right } for the other games you'll have to mash some buttons to figure it out for now.
I don't plan on updating this, instead I'm working on Ostrich, a GameBoy emulator. I may include the CHIP-8 core there at some point.
CHIP-8 is an interpreted programming language, developed by Joseph Weisbecker on his 1802 microprocessor. It was initially used on the COSMAC VIP and Telmac 1800, which were 8-bit microcomputers made in the mid-1970s.
CHIP-8 was designed to be easy to program for and to use less memory than other programming languages like BASIC.
Interpreters have been made for many devices, such as home computers, microcomputers, graphing calculators, mobile phones, and video game consoles.
- .NET SDK 8+ to build
- SDL2 runtime library ( libSDL2.so if you're not bundling SDL2 )
- OpenGL + X11/Wayland libraries ( usually provided by Mesa packages )
Build a self-contained release ( output: bin/Release/net8.0/linux-x64/publish )
dotnet restore && dotnet publish -c Release -r linux-x64 --self-contained trueDistro Packages:
- Ubuntu/Debian:
sudo apt install dotnet-sdk-8.0 libsdl2-dev libgl1 - Fedora:
sudo dnf dotnet-sdk-8.0 SDL2-devel mesa-libGL - Arch:
sudo pacman -S dotnet-sdk sdl2 mesa
- .NET SDK 8+ to build
- SDL2 runtime library ( SDL2.dll )
- OpenGL drivers ( provided by GPU vendor )
Build a self-contained release ( output: bin/Release/net8.0/win-x64/publish )
dotnet restore && dotnet publish -c Release -r win-x64 --self-contained trueManual SDL2 setup:
- Download SDL2 Development Libraries for Windows (x64) from https://www.libsdl.org/
- Extract
SDL2.dllfrom thelib\x64folder - Copy
SDL2.dllnext to the published executable (bin/Release/net8.0/win-x64/publish)
Opcodes 8XY6 and 8XYE use the Vy register instead of Vx.
Opcodes FX55 and FX65 will increment I, they shouldn't.
Both behaviours are bugs in the original interpreters, they're fixed in Super-CHIP8 and most modern emulators will also include the fixes.
I've kept it here for sake of compatibility with older ROMs.
- Wikipedia
- Cowgod's Technical Reference v1.0
- Mastering CHIP-8
- ROMS courtesy of Zophar