smparsons /
retroboy
A Game Boy emulator written in Rust.
85/100 healthLoading repository data…
Gekkio / repository
A Game Boy research project and emulator written in Rust
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Mooneye GB is a Game Boy research project and emulator written in Rust.
The main goals of this project are accuracy and documentation. Some existing emulators are very accurate (Gambatte, BGB >= 1.5) but are not documented very clearly, so they are not that good references for emulator developers. I want this project to document as clearly as possible why certain behaviour is emulated in a certain way. This also means writing a lot of test ROMs to figure out corner cases and precise behaviour on real hardware.
For documentation about known behaviour, see Game Boy: Complete Technical Reference
Looking for the mooneye-gb test ROMs? They are now part of Mooneye Test Suite.
Non-goals:
Warning:
Always compile in release mode if you care about performance!
On a i7-3770K desktop machine I can usually run ROMs with 2000 - 4000% speed. Without optimizations the speed drops to 150 - 200%, which is still fine for development purposes.
Raspberry Pi with X11 desktop works but is too slow because there is no OpenGL acceleration.
The emulator is runnable on Android, but cross-compiling and packaging is a huge pain and touch controls would have to be implemented, so I'm not supporting Android at the moment.
Requirements:
cargo run --release$HOME/.local/share/mooneye-gb/bootroms/dmg_boot.bincargo build --releasecargo run --release -- PATH_TO_GAMEBOY_ROMOn Windows, also download an SDL2 package containing SDL2.dll, and put it to
target/debug and target/release.
| Game Boy | Key |
|---|---|
| Dpad | Arrow keys |
| A | Z |
| B | X |
| Start | Return |
| Select | Backspace |
| Function | Key |
|---|---|
| Fast forward | Shift |
| Toggle performance overlay | F2 |
| Test | mooneye-gb |
|---|---|
| cpu instrs | :+1: |
| dmg sound 2 | :x: |
| instr timing | :+1: |
| mem timing 2 | :+1: |
| oam bug 2 | :x: |
| cgb sound 2 |
Notes:
| Test | mooneye-gb |
|---|---|
| add sp e timing | :+1: |
| boot div dmg0 | :x: |
| boot div dmgABCmgb | :x: |
| boot div S | :x: |
| boot div2 S | :x: |
| boot hwio dmg0 | :x: |
| boot hwio dmgABCmgb | :x: |
| boot hwio S | :+1: |
| boot regs dmg0 | :+1: |
| boot regs dmgABC | :+1: |
| boot regs mgb | :+1: |
| boot regs sgb | :+1: |
| boot regs sgb2 | :+1: |
| call timing | :+1: |
| call timing2 | :+1: |
| call cc_timing | :+1: |
| call cc_timing2 | :+1: |
| di timing GS | :+1: |
| div timing | :+1: |
| ei sequence | :+1: |
| ei timing | :+1: |
| halt ime0 ei | :+1: |
| halt ime0 nointr_timing | :+1: |
| halt ime1 timing | :+1: |
| halt ime1 timing2 GS | :+1: |
| if ie registers | :+1: |
| intr timing | :+1: |
| jp timing | :+1: |
| jp cc timing | :+1: |
| ld hl sp e timing | :+1: |
| oam dma_restart | :+1: |
| oam dma start | :+1: |
| oam dma timing | :+1: |
| pop timing | :+1: |
| push timing | :+1: |
| rapid di ei | :+1: |
| ret timing | :+1: |
| ret cc timing | :+1: |
| reti timing | :+1: |
| reti intr timing | :+1: |
| rst timing |
| Test | mooneye-gb |
|---|---|
| mem oam | :+1: |
| reg f | :+1: |
| unused_hwio GS | :+1: |
| Test | mooneye-gb |
|---|---|
| daa | :+1: |
| Test | mooneye-gb |
|---|---|
| ie push | :+1: |
| Test | mooneye-gb |
|---|---|
| basic | :+1: |
| reg_read | :+1: |
| sources GS | :+1: |
| Test | mooneye-gb |
|---|---|
| hblank ly scx timing GS | :+1: |
| intr 1 2 timing GS | :+1: |
| intr 2 0 timing | :+1: |
| intr 2 mode0 timing | :+1: |
| intr 2 mode3 timing | :+1: |
| intr 2 oam ok timing | :+1: |
| intr 2 mode0 timing sprites | :x: |
| lcdon timing GS | :x: |
| lcdon write timing GS | :x: |
| stat irq blocking | :x: |
| stat lyc onoff | :x: |
| vblank stat intr GS | :+1: |
| Test | mooneye-gb |
|---|---|
| boot sclk align dmgABCmgb | :x: |
| Test | mooneye-gb |
|---|---|
| div write | :+1: |
| rapid toggle | :+1: |
| tim00 div trigger | :+1: |
| tim00 | :+1: |
| tim01 div trigger | :+1: |
| tim01 | :+1: |
| tim10 div trigger | :+1: |
| tim10 | :+1: |
| tim11 div trigger | :+1: |
| tim11 | :+1: |
| tima reload | :+1: |
| tima write reloading | :+1: |
| tma write reloading | :+1: |
| Test | mooneye-gb |
|---|---|
| bits bank1 | :+1: |
| bits bank2 | :+1: |
| bits mode | :+1: |
| bits ramg | :+1: |
| rom 512kb | :+1: |
| rom 1Mb | :+1: |
| rom 2Mb | :+1: |
| rom 4Mb | :+1: |
| rom 8Mb | :+1: |
| rom 16Mb | :+1: |
| ram 64kb | :+1: |
| ram 256kb | :+1: |
| multicart rom 8Mb | :+1: |
| Test | mooneye-gb |
|---|---|
| bits ramg | :+1: |
| bits romb | :+1: |
| bits unused | :+1: |
| rom 512kb | :+1: |
| rom 1Mb | :+1: |
| rom 2Mb | :+1: |
| ram | :+1: |
| Test | mooneye-gb |
|---|---|
| rom 512kb | :+1: |
| rom 1Mb | :+1: |
| rom 2Mb | :+1: |
| rom 4Mb | :+1: |
| rom 8Mb | :+1: |
| rom 16Mb | :+1: |
| rom 32Mb | :+1: |
| rom 64Mb | :+1: |
| Test | mooneye-gb |
|---|---|
| sprite priority | :+1: |
| Test | mooneye-gb |
|---|---|
| boot div A | |
| boot div cgb0 | |
| boot div cgbABCDE | |
| boot hwio C | |
| boot regs A | |
| boot regs cgb |
| Test | mooneye-gb |
|---|---|
| unused hwio C |
| Test | mooneye-gb |
|---|---|
| vblank stat intr C |
Mooneye GB is licensed under GPLv3+. Copyright (C) 2014-2020 Joonas Javanainen joonas.javanainen@gmail.com
Selected from shared topics, language and repository description—not editorial ratings.
smparsons /
A Game Boy emulator written in Rust.
85/100 healthmichelhe /
RustBoyAdvance-NG is a Nintendo™ Game Boy Advance emulator and debugger, written in the rust programming language.
82/100 healthRodrigodd /
A Game Boy emulator, disassembler and debugger, written in Rust
| :+1: |
EnergeticBark /
A Game Boy emulator with an SM83 to Wasm JIT compiler
81/100 healthEMachad0 /
A Game Boy Color Emulator written in Rust
58/100 healthIsaacMarovitz /
A Game Boy emulator, written in Rust
71/100 health