A Gameboy (DMG) emulator written in Rust, aiming for cycle accuracy and conformance with weird hardware quirks.
To view what test ROMs are currently passed and part of CI, look at tests.md, test ROMs are stored in subfolders inside test-roms/ and each subfolder contains the original license of the test-roms.
- Mostly M-cycle accurate instructions (passes tests)
- Memory bus emulation
- Pipelined CPU (passes timing tests)
- Partially working PPU (ticked at the correct speed, drawing pixel by pixel)
- Audio
- Visual debugger/state inspector
- T-cycle accurate PPU
- Networked link-cable
There are currently 4 crates used in this project:
meowgb
: A cross-platform frontend for the emulatormeowgb-core
: The implementation of the emulatormeowgb-opcode
: Procedural macro used inmeowgb-core
for defining opcodesmeowgb-tests
: A frontend-less test-harness for running tests and comparing their output, used in CI for ensuring regressions are minimal and noticed as soon as possible
You will have to build it yourself as currently there are no premade builds available, once it is in a state I am happy with I will add release builds to CI.
- Ensure you have a Rust toolchain installed (docs)
- Run
cargo install --git https://github.com/EliseZeroTwo/MeowGB.git
- To launch the emulator, run
meowgb --rom PATH_TO_ROM.GB
By default the keybindings are:
Gameboy | Keyboard |
---|---|
A |
A |
B |
S |
Start |
W |
Select |
Q |
Up |
Arrow Up |
Down |
Arrow Down |
Left |
Arrow Left |
Right |
Arrow Right |
Default keybindings are overridable by placing a config.toml
either in the directory you are running the emulator from, or at ~/.meowgb/config.toml
.
An example configuration file can be found in config.example.toml.
This software is currently licensed under the CNPLv7+, a summary of which can be found at here.
The contents of the test-roms
folder is excluded from this, and the original license of the test ROMs are placed in their respective subdirectory, they are not compiled into any of the software, they are included in the repository purely for intergration testing in CI.
The frontend uses old versions of winit
and egui
related libraries, this is due to incompatibility between more modern versions of the underlying crates with egui
, pixels
, and winit
. In order to upgrade them, these compatibility issues need to be fixed by them.