Good morning!
I’m learning to use C again, with the idea of writing one or more emulators for simple platforms. I started with this one, and in just a few days I’ve achieved a “decent” version that I’d like to share.
We’re nearing the end of the year, which makes it a difficult time to move projects forward. At least in my country, there are many social gatherings and end-of-year celebrations. And in January I’ll be traveling. Still, I wanted to start this thread and share the progress so far, since the program works and is playable.
CHIP-8 Emulator for PicoCalc (RP2040)
I’ve been working on a CHIP-8 emulator for the Clockwork PicoCalc, written in C and running directly on the PicoCalc hardware (RP2040) .
The project started as an exploration of the PicoCalc SDK and gradually evolved into a fully playable emulator capable of running classic CHIP-8 programs such as PONG, Tetris, and similar early titles.
This work is built on top of Blair’s PicoCalc SDK (thanks @BlairLeduc !), which provided the foundation for graphics, input, storage, and overall system integration.
What the emulator currently does
At its current stage, the emulator:
- Implements the full standard CHIP-8 instruction set
- Runs on a RP2040-based PicoCalc
- Uses the PicoCalc LCD with:
- Centered 64×32 CHIP-8 display
- Scaled pixels for good readability
- Incremental (diff-based) rendering for decent performance
- Supports:
- Delay and sound timers at 60 Hz
- Keyboard input mapped to the CHIP-8 hex keypad
- A ROM selection menu that scans
.CH8files from the/romsdirectory
- Allows:
- Selecting a ROM from a menu at startup
- Exiting a running game with
ESCand returning to the ROM menu
Overall, classic CHIP-8 games are fully playable and responsive.
Current state of the project
- The emulator is functional and stable
- Performance is good enough for real gameplay on the PicoCalc
- Some visual details (minor flicker in certain ROMs, menu polish) are still being refined
- The codebase is intentionally kept simple and readable, with future expansion in mind
This is very much a working, usable emulator, not just a proof of concept, but there is still room to grow.
UF2 and some roms…
EDIT: I’ve just uploaded the code to GitHub so you can take a look at it.
Planned future work
Once development resumes, the next steps include:
- Super-CHIP (SCHIP) support
- 128×64 resolution
- Extended instructions
- Better timing control and fine-tuning of CPU speed
- Small UI improvements in the ROM menu
- Optional emulator “quirks” configuration for broader ROM compatibility
- Code cleanup and documentation
Development pause & GitHub release
I’m about to enter a vacation period and will be out of the country until the end of January, so development will slow down significantly during that time.
Once I’m back, I plan to:
- Clean up the code
- Add documentation
- Publish the full source code on GitHub
At that point, others will be able to build, study, and extend the emulator easily.
More to come soon — after the holidays. ![]()




