Skip to content

vojty/feather-gb

Repository files navigation

FeatherGB

Just another GameBoy emulator written in Rust 🦀

GameBoy

Debugger

Info

This is my first project in Rust, so many patterns might not be ideal. I also wanted to try WebAssembly a little bit.

Status

The emulator is somehow accurate - the CPU is cycle-accurate and the emulator passes many tests, although the PPU's accuracy needs to be improved a lot. For more info see tests results below.

Test results

The emulator is tested against popular test suites such as blargg's test, mooneye test suite etc. These test suites are linked as git submodules (see .gitmodules file for details).

Generated test report is here

Modes

The emulator can be run in 2 modes - the normal mode (shows just GameBoy's display) and the debugger mode (using egui). Both are available for the desktop and the browser.

Desktop

  • Standard - rendered by SDL2 (should be cross platform, but I've tested only MacOS)
  • Debugger - rendered by egui (using glium as backend)

Browser

Based on React & TypeScript in general

  • Standard - WebAssembly with some stylesheets
  • Debugger - WebAssembly with egui (using webgl as backend)

TODOs

No specific priority here

  • standard (play) mode
    • support for custom controls + gamepad
  • APU
    • audio + video synchronization
    • channel 4 implementation
  • FIFO & Fetcher for sprites
  • save & load
  • make PPU more accurate
  • memory bus conflicts
  • GameBoy Color support
    • implement HDMA & GDMA

Project structure

  • /gb - GB emulator core (Rust)
  • /debugger - debugger core with egui (Rust)
  • /desktop - desktop version of debugger using glium (Rust)
  • /debugger-web - browser version of debugger using wasm (Rust)
  • /browser - frontend SPA
  • /integration-tests - ROM tests

Development requirements

  • wasm-pack - cargo install wasm-pack

Resources

Links

Test Roms

Note

All external tests require rgbds@0.4.2 to be installed. The only exception is age-test-roms which requires rgbds0.5.1. The versions can be switched using https://github.com/gbdev/rgbenv

Fonts

Images