#gameboy #emulation #rom

bin+lib gameboyr

A Gameboy emulator written in Rust

13 unstable releases (3 breaking)

0.4.0 Apr 18, 2023
0.3.1 Jan 22, 2023
0.3.0 Sep 19, 2022
0.2.7 Sep 19, 2022
0.1.2 Jul 12, 2022

#55 in Emulators

MIT license

285KB
4.5K SLoC


Logo

GameboyR

A Gameboy emulator written in Rust.
crates.io/crates/gameboyr »

A Gameboy emulator written in Rust. This emulator supports both Gameboy and Gameboy Color. A checklist of implemented features can be found below.

How to Use:

You can run the emulator using the following command and specifying the path to your rom:

$ cargo run --release -- "./path/to/rom.gb"

The following options can be specified

-s, --save          Path to .sav file of the specified ROM (Default: location of ROM)
-x, --scale         Scale the window by a factor of 1, 2, 4 (Default: 1)
    --skip-checks   Skip header checksum and nintendo logo checks for ROM
    --no-audio      Run the emulator without using audio

With Crates.io

You can install the emulator from Crates.io using:

$ cargo install gameboyr

Then run the emulator using:

$ gameboyr "./path/to/rom.gb"

The options specified above are also available here.

Controls:

                    __________________________
                  |                          |
                  | .----------------------. |
                  | |  .----------------.  | |
                  | |  |                |  | |
                  | |  |                |  | |
                  | |  |                |  | |
                  | |  |                |  | |
                  | |  |                |  | |
                  | |  |                |  | |
                  | |  |                |  | |
                  | |  '----------------'  | |
                  | |______________________/ |
                  |                          |
                  |    .    GAMEBOY R        |
     Up           |  _| |_              .-.  | ---> Z
Left + Right <--- |-[_   _]-       .-. (   ) |
    Down          |   |_|         (   ) '-'  | ---> X
                  |    '           '-'   A   |
                  |                 B        |
                  |          ___   ___       |
                  |         (___) (___)  ,., | ---> Space / Enter
                  |        select start ;:;: |
                  |                    ,;:;' /
                  |                   ,:;:'.'
                  '-----------------------`

Implemented:

  • CPU
    • Registers & Flags
    • Instruction Set
    • Timing
  • MMU
    • Work RAM (WRAM)
    • High Ram (HRAM)
    • HDMA & GDMA
    • Speed switch
  • I/O
    • Video Display (PPU)
    • Sound Controller (APU)
    • Joypad Input
    • Serial Data Transfer
    • Timer
  • Cartridges
    • None (32KByte ROM only)
    • MBC1 (max 2MByte ROM and/or 32KByte RAM)
    • MBC2 (max 256KByte ROM and 512x4 bits RAM)
    • MBC3 (max 2MByte ROM and/or 64KByte RAM and Timer)
    • MBC5 (max 8MByte ROM and/or 128KByte RAM)

References:

Dependencies

~1–37MB
~485K SLoC