Yarge is an open source (licensed under LGPL) Nintendo Gameboy emulator written in Rust and focused on accuracy and performance.
It includes cycle-accurate emulation of the GBZ80 CPU and PPU FIFO.
The emulator is built on a modular architecture, isolating the core from frontends (which can be used as a regular Rust library).
SDL2 frontend is fully-featured with intuitive UI and various quality-of-life features such as save slots.
Product | Downloads |
---|---|
yarge-frontend-sdl | |
yarge-frontend-desktop (deprecated) |
yarge-frontend-desktop
is no longer actively maintained, but I'm keeping it around because it's debugging capabilities are still much better then those in yarge-frontend-sdl
- Want to use Yarge as a library in your Rust application?
- yarge-frontend-nano builds (deprecated; does not represent current state of the project)
Pocket Monsters: Green | Super Mario Land |
---|---|
Tetris | The Legend of Zelda: Link's Awakening |
Features | MBC (Cartridge) types | ||
---|---|---|---|
Feature | Supported | Type | Supported |
Display (PPU) | ✔️ | ROM ONLY | ✔️ |
Input | ✔️ | MBC1 | ✔️ |
Sound (APU) | ✔️(WIP) | MBC2 | ❌ |
Link cable/Serial | ❌(STUB) | MBC3 | ✔️ |
GBC support | ❌ | MBC5 | ❌ |
Cartridge | ➡️ | MBC6 | ❌ |
MBC7 | ❌ | ||
MMM01 | ❌ | ||
POCKET CAMERA | ❌ | ||
BANDAI TAMA5 | ❌ | ||
HuC3 | ❌ | ||
HuC1 | ❌ |
These tests are run automatically after each commit.
Test suite | Test name | Result |
---|---|---|
Acid | dmg_acid2 | ✔️ |
Mooneye | acceptance/bits/mem_oam | ✔️ |
Mooneye | acceptance/bits/reg_f | ✔️ |
Mooneye | acceptance/bits/unused_hwio_GS | ❌ |
Mooneye | acceptance/instr/daa | ✔️ |
Mooneye | acceptance/interrupts/ie_push | ❌ |
Mooneye | acceptance/oam_dma/basic | ✔️ |
Mooneye | acceptance/oam_dma/reg_read | ✔️ |
Mooneye | acceptance/oam_dma/sources_GS | ✔️ |
Mooneye | acceptance/timer/div_write | ✔️ |
Mooneye | acceptance/timer/rapid_toggle | ❌ |
Mooneye | acceptance/timer/tim00 | ✔️ |
Mooneye | acceptance/timer/tim00_div_trigger | ✔️ |
Mooneye | acceptance/timer/tim01 | ✔️ |
Mooneye | acceptance/timer/tim01_div_trigger | ✔️ |
Mooneye | acceptance/timer/tim10 | ✔️ |
Mooneye | acceptance/timer/tim10_div_trigger | ✔️ |
Mooneye | acceptance/timer/tim11 | ✔️ |
Mooneye | acceptance/timer/tim11_div_trigger | ✔️ |
Mooneye | acceptance/timer/tima_reload | ✔️ |
Mooneye | acceptance/timer/tima_write_reloading | ❌ |
Mooneye | acceptance/timer/tma_write_reloading | ❌ |