# Multi-Platform XO-CHIP Emulator

A multi-extension XO-Chip / SuperChip / Chip8 emulator written in Rust. This emulator can be built as a standalone binary, or compiled to WASM to run in a web browser
Table of Contents

Highlights

  • Built a Rust-based emulator supporting multiple CHIP-8 variants including modern XO-CHIP and SuperChip extensions
  • Engineered flexible compilation pipeline targeting both native platforms and WebAssembly for browser compatibility
  • Integrated Macroquad rendering engine and TinyAudio for seamless cross-platform multimedia functionality

📸 Screenshots

Screenshot of Super Neat Boy running in the emulator

Super Neat Boy

Screenshot of Nyancat running in the emulator

Nyancat

Screenshot of Alien Inv8sion running in the emulator

Alien Inv8sion

Screenshot of T8nks running in the emulator

T8nks

🎮 Live Demo

Try it in your browser: https://dustinbowers.com/demos/rust-chip8

🤔 What is CHIP-8?

CHIP-8 is a simple, interpreted programming language used in DIY computers of the late 1970s and early 1980s like the COSMAC VIP and DREAM 6800. These machines had between 1–4 KB of RAM, used a 16-key hexadecimal keypad, and output to a TV display. CHIP-8 interpreters typically used only 512 bytes of memory.

Source

Features

  • Written in Rust 🦀
  • Cross-platform (native + WASM)
  • Accurate timing and instruction set support
  • Easy to build and run
  • Supports color planes and extended graphics for XO-CHIP

🧩 Supported CHIP-8 Variants

🛠 Build Instructions

The included Makefile supports the following targets:

CommandDescription
make buildBuild native debug binary
make releaseBuild native release binary
make wasmBuild debug WebAssembly binary
make wasm-releaseBuild release WebAssembly binary
make web-serverServe ./dist with basic-http-server at localhost:4000
make build-test-webBuild debug WASM and serve
make build-test-web-releaseBuild release WASM and serve

🚀 Usage

Native Binary

Usage
Usage: chip8 <Filename> <CHIP Mode> <Ticks-per-frame>
<Filename> Path to ROM file
<CHIP Mode> 1 - CHIP-8
2 - SuperChip Modern
3 - SuperChip Legacy
4 - XO-Chip
<Ticks-per-frame> Number of instructions to emulate per frame

Local WebAssembly

Build WASM and locally host
make build-test-web-release

Then open http://localhost:4000 in your browser.

Source Code & Demo

Source available on GitHub: https://github.com/dustinbowers/rust-chip8

Try it in your browser: https://dustinbowers.com/demos/rust-chip8

My avatar

Thanks for reading my post! Feel free to check out my other posts or contact me via the social links in the footer.


More Projects