/memetendo-unsafe-boy-advance

Game Boy Advance emulator with audio support written in Rust 🦀🎮

Primary LanguageRustMIT LicenseMIT

Memetendo Unsafe Boy Advance

Doom 2 screenshot Pokémon FireRed screenshot OpenLara screenshot

A Game Boy Advance emulator, written in Rust. 🦀

Try it out in your browser!

Status

It's able to play most games, and has audio support!
Here's a video of it running DOOM!

As for tests, it currently passes:

Building

Memetendo Unsafe Boy Advance currently requires Rust 1.81 as a minimum.

Just use cargo build to build (optionally passing the --release argument to build with full optimizations), or cargo run to build and run.

Instructions for building Web Memetendo can be found here.

Tests

Run cargo test to run tests.

Some slow tests are ignored by default in debug builds.
Consider using cargo test -- --ignored to run them, or test with optimizations enabled via cargo test --release.

Integration tests exist that automate the running of various test ROMs.
To set them up, download the submodules in this repository by using git submodule update --init and copy a GBA BIOS ROM to /libmemetendo/tests/bios.bin (if not provided, Cult-of-GBA's BIOS will be used instead, but it does not currently pass jsmolka's BIOS tests).

Performance

Memetendo Unsafe Boy Advance uses a per-pixel based software renderer, which allows for graphical effects that modify video state mid-scanline to work, but performs badly in general.

There's room for optimization. Possibly a per-scanline based renderer that falls back to a per-pixel based one would be an improvement (or even a hardware-based one), but this project currently isn't being actively maintained.

What's with the name?

Origin of the name

And as of writing, Memetendo Unsafe Boy Advance does not actually use any unsafe (non-dependency) code.

Why Rust and not Zig?

What a very specific question! The vote was very close:

Language poll result

So there was a tie-breaker...

Tie-breaker result

Rustaceans win this time! 🦀