A Game Boy emulator written in Rust.
⚠️ This project is purely educational.
The main goal is not to write clean, fast, or idiomatic Rust code, but to learn how emulation works and understand the Game Boy hardware.
Currently, I'm learning how the Game Boy works. At first, I thought I was ready to write the emulator. Instead, after watching some videos, I decided to start slowly.
This emulator was built mainly for learning purposes.
Resources used while developing it:
- The Ultimate Game Boy Talk
- Pan Docs — Game Boy Technical Reference
- Game Boy: Complete Technical Reference (Gekkio)
- DMG-01: How to Emulate a Game Boy
- Writing a Game Boy Emulator (Cinoop)
- GameBoy implementation of mGBA
For testing, I used:
- Game Boy ROMs (e.g. Tetris)
- Game Boy test ROM collection (blargg tests)
I tried to write most of the code myself, using minimal AI assistance, only to clarify specific doubts during the learning process.
- Cartridge
- Address Bus
- Memory map
- CPU (SM83)
- Timer
- PPU
- Input
- Audio
This project is not perfect by design:
- No strong focus on optimization, architecture, or Rust best practices
- Bugs and incorrect behavior are expected
- The goal is learning, not production-quality code
Pull requests are welcome, especially for:
- Bug fixes
- Improving accuracy or ROM compatibility
- Correcting mistakes in the implementation
- Suggesting improvements or refactors
If you want to contribute:
- Fork the repository
- Create a branch for your changes
- Submit a pull request explaining what you changed and why
Feedback is always appreciated.
MIT License.
Feel free to study, modify, and use this project as a reference.