Logo

GameboyR

Language: Rust Crates.io version Crates.io downloads Crates.io license MIT

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](https://crates.io/crates/gameboyr) 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: - [x] CPU - [x] Registers & Flags - [x] Instruction Set - [x] Timing - [x] MMU - [x] Work RAM (WRAM) - [x] High Ram (HRAM) - [x] HDMA & GDMA - [x] Speed switch - [x] I/O - [x] Video Display (PPU) - [x] Sound Controller (APU) - [x] Joypad Input - [x] Serial Data Transfer - [x] Timer - [x] Cartridges - [x] None (32KByte ROM only) - [x] MBC1 (max 2MByte ROM and/or 32KByte RAM) - [x] MBC2 (max 256KByte ROM and 512x4 bits RAM) - [x] MBC3 (max 2MByte ROM and/or 64KByte RAM and Timer) - [x] MBC5 (max 8MByte ROM and/or 128KByte RAM) ## References: - [Pandocs](https://bgb.bircd.org/pandocs.htm) - [GBDev Pandocs](https://gbdev.io/pandocs/) - [GBDev Wiki: PPU](https://gbdev.gg8.se/wiki/articles/Video_Display) - [GBDev Wiki: APU](https://gbdev.gg8.se/wiki/articles/Gameboy_sound_hardware) - [GBOps](https://izik1.github.io/gbops/) - [Pastraiser (OP Codes)](https://www.pastraiser.com/cpu/gameboy/gameboy_opcodes.html) - [Cartridge Header](https://gbdev.gg8.se/wiki/articles/The_Cartridge_Header) - [Cartridge Types](https://gbdev.gg8.se/wiki/articles/Memory_Bank_Controllers) - [GB ROMS](https://www.romsgames.net/roms/gameboy/) - [GBC ROMS](https://www.romsgames.net/roms/gameboy-color/)