Some time ago, I developed a Super Nintendo emulator and it was one of the most interesting projects I ever did. Not only was it super satisfying to see the progress over time, but I also learned many new things about computer engineering, the architecture of the console and the design of old processors.
As a professional C++ developer, I’ve long been curious about Rust. So, I’ve decided to combine my love for emulation with my desire to learn Rust by building an emulator for the original Game Boy.

Learning From my Last Emulator
Thanks to my previous experience, I expect this project to move faster than my SNES one. The Game Boy’s hardware is also simpler (it's a 8-bit system and not a combined 8/16-bit one like SNES) which should make certain parts less complex.
Looking back on my SNES emulator, I’ve identified a few lessons I want to carry into this new project:
- Modular design: Separating the CPU, RAM, GPU, and other components into their own classes worked extremely well last time, so I’ll follow the same approach for maintainability.
- More code reuse: Many CPU instructions share similar logic. This time, I’ll identify common functionality earlier to reduce duplication.
- Better observability: Debugging a CPU can take hours without good visibility into what’s happening internally. I’ll implement thorough logging of registers, memory, and instructions so I can catch problems early.
Current State
I only started this project yesterday, so it’s still in its infancy. Right now, the emulator includes:
- A ROM loader
- A few initial instruction handlers
- Basic structs for registers and memory

In parallel, I’m deep into researching the Game Boy’s inner workings. These resources have been helpful so far:
https://gbdev.io/
https://meganesu.github.io/generate-gb-opcodes/
https://gekkio.fi/files/gb-docs/gbctr.pdf
https://rylev.github.io/DMG-01/public/book/introduction.html
https://mgba-emu.github.io/gbdoc/