#gameboy #emulator #rust

boytacean

A Game Boy emulator that is written in Rust

30 releases (6 breaking)

0.7.2 Mar 4, 2023
0.6.12 Feb 21, 2023
0.6.6 Dec 4, 2022
0.6.5 Nov 27, 2022
0.3.0 Jul 10, 2022

#19 in Emulators

Download history 43/week @ 2022-11-26 46/week @ 2022-12-03 4/week @ 2022-12-10 7/week @ 2022-12-17 24/week @ 2022-12-24 1/week @ 2022-12-31 5/week @ 2023-01-07 4/week @ 2023-01-21 8/week @ 2023-01-28 31/week @ 2023-02-04 68/week @ 2023-02-11 110/week @ 2023-02-18 46/week @ 2023-02-25 18/week @ 2023-03-04 3/week @ 2023-03-11

179 downloads per month

Apache-2.0

215KB
6K SLoC

Boytacean

A Game Boy emulator that is written in Rust 🦀.

This emulator has been written for educational purposes and shouldn't be taken too seriously. But yeahh it plays most Game Boy games, which is cool... 🕹️

Features

  • Game Boy (DMG) emulation
  • Simple navigable source-code
  • Web and SDL front-ends
  • Audio, with a pretty accurate APU
  • Support for multiple MBCs: MBC1, MBC2, MBC3, and MBC5
  • Variable CPU clock speed
  • Accurate PPU - passes dmg-acid2 tests

For the Web front-end...

  • Mobile first experience
  • Transparent RAM saving using Web Storage API
  • GamePad support using Web Gamepad API
  • Unobstructive and effective on-screen GamePad
  • Cool bespoke display palettes built by TheWolfBunny64.
  • Fullscreen browser mode
  • Debug mode - VRAM and registers

What's missing...

  • Game Boy Color (GBC) emulation

Deployments

Provider Stable URL
Cloudfare True boytacean.joao.me
Cloudfare True boytacean.pages.dev
Cloudfare True prod.boytacean.pages.dev
Cloudfare True stable.boytacean.pages.dev
Cloudfare False master.boytacean.pages.dev

Build

Library

cargo build

WASM for Node.js

cargo install wasm-pack
wasm-pack build --release --target=nodejs -- --features wasm

WASM for Web

cargo install wasm-pack
wasm-pack build --release --target=web --out-dir=frontends/web/lib -- --features wasm
cd frontends/web
npm install && npm run build
cd dist && python3 -m http.server

Web front-end

The Web front-end makes use of EmuKit which is a UI toolkit that provides the required infrastructure for the creation of interfaces for emulation in a Web context.

Configuration

You can use some GET parameters to control the initial behavior of the emulator.

Parameter Type Description
rom_url String The URL from which the initial ROM is going to be loaded, should support CORS.
url String The same as rom_url.
fullscreen Boolean If the emulator should start in fullscreen mode.
fs Boolean The same as fullscreen.
debug Boolean If the "debugger" should start visible.
keyboard Boolean If the on-screen keyboard should start visible.
palette String The name of the palette to be set at startup( eg: christmas, hogwards, mariobros, etc.).

Palettes

The palettes offered in the web version were provided by TheWolfBunny64.

Inspiration

To get some information about the resources that inspired me through the emulation creation journey check Inspiration.

License

Boytacean is currently licensed under the Apache License, Version 2.0.

Build Automation

Build Status crates Status npm Status License

Dependencies

~0.7–1.6MB
~40K SLoC