Code Monkey home page Code Monkey logo

feather-gb's Introduction

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

Fonts

Images

feather-gb's People

Contributors

vojty avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.