RustBoyAdvance-NG is a Nintendo™ Game Boy Advance emulator and debugger, written in the rust programming language.

Overview

RustBoyAdvance-NG

license Build

Nintendo GameBoy Advance ™ emulator and debugger, written in rust.

WebAssembly Demo: https://michelhe.github.io/rustboyadvance-ng/ Deploy

Project Structure

  • core/ - Main emulator crate
  • bindings/ - Bindings to other languages. Currently only java binidings through JNI.
  • platform/ - Constains executables & application built with rustboyadvance-core
    • platform/rustbodyadvance-wasm - Web emulator powered by WebAssembly
    • platform/rustbodyadvance-sdl2 - Desktop application built with sdl2
    • platform/rustbodyadvance-minifb - Desktop application built with minifb, not maintained.
    • platform/android - A PoC Android application.

Progress

Pokemon Emerald

Emulation Todo:

  • CGB audio (4 wave generator channels)

Build and usage (Desktop Application)

To get started, you need to get a stable rust toolchain.

Linux build dependencies

Install SDL2 dependencies

sudo apt-get -y install libsdl2-dev libsdl2-image-dev

Windows build dependencies

SDL2 runtime binaries are included in this repository, no extra setup needed.

Build & Usage

You need to obtain a gba bios binary. An open source GBA bios is also available and supported.

Place the bios file in the repository root and name it gba_bios.bin (or alternatively use the -b command line option)

Build and run in release mode (performance is terrible in the dev profile)

$ cargo run --release -p rustboyadvance-sdl2 -- path/to/rom

You can also drag&drop rom files or any zip files containing .gba files inside into the emulator window and a new rom will be loaded.

Key bindings

Currently the key bindings are not configureable.

GBA key bindings:

Keyboard GBA
Up Up
Down Down
Left Right
Right Right
Z B Button
X A Button
Return Start
Backspace Select
A L
S R

Special key bindings

Key Function
Space (hold) Disable 60fps cap
F1 Custom debugger (requires --features debugger)
F2 Spawn gdbserver (experimetnal, requires --features gdb)
F5 Save snapshot file
F9 Load snapshot file

Android Application

The android project is placed inside platform/android. To build it, open it with Android Studio.

You also need to set up rust to build android targets with NDK.

TODO - instructions

More Screenshots

Kirby - Nightmare in Dreamland Dragon Ball - Legacy of Goku 2

Links and attribution

  • ARM7TDMI Technical Reference Manual Technical Reference Manuals are fun.
  • GBATEK A single webpage written by no$gba developer Martin Korth. This page has pretty much everything. Seriously, it's the best.
  • TONC A comprehensive GBA dev guide that I used a-lot in order to understand the GBA system. Comes with neat demo roms that really helped me during development and debugging.
  • NanoboyAdvance A GameBoy Advance emulator written in C++17 by a nice person called fleroviux. I've used this for debugging.
  • Eggvance gba-suite Incredible test suite for the arm7tdmi interpreter that I'm using, written by Julian Smolka.
Comments
  • Segmentation fault in SysBus::read_8

    Segmentation fault in SysBus::read_8

    Affected game:

    • Power Rangers - Ninja Storm (USA)

    Backtrace:

    Thread 1 "rustboyadvance-" received signal SIGSEGV, Segmentation fault.
    0x000055555562e029 in <rustboyadvance_core::sysbus::SysBus as rustboyadvance_core::bus::Bus>::read_8 ()
    (gdb) bt
    #0  0x000055555562e029 in <rustboyadvance_core::sysbus::SysBus as rustboyadvance_core::bus::Bus>::read_8 ()
    #1  0x00005555555fe94d in rustboyadvance_core::arm7tdmi::thumb::exec::<impl rustboyadvance_core::arm7tdmi::cpu::Core>::do_exec_thumb_ldr_str ()
    #2  0x00005555555fec05 in rustboyadvance_core::arm7tdmi::thumb::exec::<impl rustboyadvance_core::arm7tdmi::cpu::Core>::exec_thumb_ldr_str_imm_offset ()
    #3  0x000055555560054d in rustboyadvance_core::arm7tdmi::cpu::Core::step ()
    #4  0x00005555555fa336 in rustboyadvance_core::gba::GameBoyAdvance::step ()
    #5  0x00005555555fa1b6 in rustboyadvance_core::gba::GameBoyAdvance::frame ()
    #6  0x00005555555be914 in rustboyadvance_sdl2::main ()
    #7  0x00005555555c44c3 in std::rt::lang_start::{{closure}} ()
    #8  0x00005555557c3ac8 in std::rt::lang_start_internal::{{closure}} () at src/libstd/rt.rs:52
    #9  std::panicking::try::do_call () at src/libstd/panicking.rs:331
    #10 std::panicking::try () at src/libstd/panicking.rs:274
    #11 std::panic::catch_unwind () at src/libstd/panic.rs:394
    #12 std::rt::lang_start_internal () at src/libstd/rt.rs:51
    #13 0x00005555555c0042 in main ()
    
    game-bug accuracy 
    opened by xTibor 11
  • Android application

    Android application

    Thanks for the great work! Can you update instructions for how to build it with Android Studio, or is there an existing APK for Android? Just want to try it on my phone : )

    opened by narakai 6
  • Audio cracking issue on Android  in turbo mode

    Audio cracking issue on Android in turbo mode

    i also have problem with audio if i turn on turbo mode or change frame rate of emulator... audio cracks and Logs show this message . Games run perfectly but only audio has some cracking

    I/chatty: uid=10539(com.mrmichel.rustdroid_emu) Thread-4 identical 25 lines W/EmulatorBindings: : failed to push audio sample W/EmulatorBindings: : failed to push audio sample I/chatty: uid=10539(com.mrmichel.rustdroid_emu) Thread-4 identical 3752 lines W/EmulatorBindings: : failed to push audio sample W/EmulatorBindings: : failed to push audio sample I/chatty: uid=10539(com.mrmichel.rustdroid_emu) Thread-4 identical 26652 lines W/EmulatorBindings: : failed to push audio sample W/EmulatorBindings: : failed to push audio sample

    opened by idr-pt 4
  • WWF Road to WrestleMania - Invalid mode 6 graphics mode

    WWF Road to WrestleMania - Invalid mode 6 graphics mode

    The emulator panics right after the BIOS logo because the game tries to set an invalid, mode 6 graphics mode. Should it be silently ignored? Is this a part of an anti-emulation trick or just garbage game code?

    Not to be confused with WWE Road to WrestleMania X8.

    game-bug 
    opened by xTibor 4
  • Implement joystick and gamepad support for the SDL2 frontend

    Implement joystick and gamepad support for the SDL2 frontend

    The button layout is hardcoded at the moment due to the lack of an emulator config file.

    Tested with:

    • Trust GXT-530 (0e8f:0003 GreenAsia Inc. MaxFire Blaze2)
    • Manta Maverick MM603 (0583:a00b Padix Co., Ltd (Rockfire))
    opened by xTibor 4
  • Incorrect affine transformations in Wario Land 4

    Incorrect affine transformations in Wario Land 4

    Upon entering a new stage in Wario Land 4 there's an animation of a rotating vortex. It should be rotating at the dead center of the screen, however RustBoyAdvance-NG currently renders it off-center. The rotation also glitches twice during the animation.

    Screenshot:

    Expected rendering (mGBA master):

    bug game-bug 
    opened by xTibor 4
  • "attempt to subtract with overflow" when rendering second frame

    I'm using rustboyadvance-ng/core for a personal project. It seems to work fine in release mode (as runtime overflow checks are disabled), but in development I run into this error when attempting to render the second frame. The bios frames and first frame of the game itself render fine.

    Reproduction of the issue can be found here: https://github.com/SkyLeite/pokecord/tree/0b69d9ae03491ca2190e6cdcf52fb5710925f197

    warning: `pokecord` (bin "pokecord") generated 6 warnings
        Finished dev [unoptimized + debuginfo] target(s) in 0.04s
         Running `target/debug/pokecord`
    Rendered!
    First frame rendered!
    thread 'main' panicked at 'attempt to subtract with overflow', rustboyadvance-ng/core/src/gpu/mod.rs:464:47
    stack backtrace:
       0:     0x5579b61468ec - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hb16b437de6ab6276
       1:     0x5579b6171bde - core::fmt::write::h8f8bef23583ee234
       2:     0x5579b614d0c1 - std::io::Write::write_fmt::h8486efe074824056
       3:     0x5579b61544be - std::panicking::default_hook::{{closure}}::hdfa4615b29a34cb8
       4:     0x5579b6154127 - std::panicking::default_hook::h60ffd169fe7df297
       5:     0x5579b61549d1 - std::panicking::rust_panic_with_hook::hf0183b899953e185
       6:     0x5579b6146ea9 - std::panicking::begin_panic_handler::{{closure}}::h93eac1c61f0beba3
       7:     0x5579b6146cc4 - std::sys_common::backtrace::__rust_end_short_backtrace::he4788588c206eaab
       8:     0x5579b6154682 - rust_begin_unwind
       9:     0x5579b5e68813 - core::panicking::panic_fmt::h20a31c8e90ca0d37
      10:     0x5579b5e686dd - core::panicking::panic::h95bb893ef3e7cb7f
      11:     0x5579b5ec92be - rustboyadvance_core::gpu::Gpu::on_event::ha2e8b68811dd5add
                                   at /mnt/hdd/projects/pokecord/rustboyadvance-ng/core/src/gpu/mod.rs:464:47
      12:     0x5579b5edd4c6 - rustboyadvance_core::gba::GameBoyAdvance::handle_event::hda667049d6b7e2c7
                                   at /mnt/hdd/projects/pokecord/rustboyadvance-ng/core/src/gba.rs:310:38
      13:     0x5579b5edd2b2 - rustboyadvance_core::gba::GameBoyAdvance::run::hc95f87805a33d994
                                   at /mnt/hdd/projects/pokecord/rustboyadvance-ng/core/src/gba.rs:288:17
      14:     0x5579b5edcd8a - rustboyadvance_core::gba::GameBoyAdvance::frame::h10956a8c82e3b727
                                   at /mnt/hdd/projects/pokecord/rustboyadvance-ng/core/src/gba.rs:222:25
      15:     0x5579b5e6e027 - pokecord::main::hf48fb910a058991b
                                   at /mnt/hdd/projects/pokecord/src/main.rs:77:14
      16:     0x5579b5e69f7b - core::ops::function::FnOnce::call_once::h794bd1593b72e1e2
                                   at /build/rustc-1.63.0-src/library/core/src/ops/function.rs:248:5
      17:     0x5579b5e68b9e - std::sys_common::backtrace::__rust_begin_short_backtrace::hdded08256cdf329e
                                   at /build/rustc-1.63.0-src/library/std/src/sys_common/backtrace.rs:122:18
      18:     0x5579b5e68b61 - std::rt::lang_start::{{closure}}::h010441cf4be51538
                                   at /build/rustc-1.63.0-src/library/std/src/rt.rs:145:18
      19:     0x5579b614c9d5 - std::rt::lang_start_internal::h3e617fbe87035bdb
      20:     0x5579b5e68b30 - std::rt::lang_start::hda90f78f082db313
                                   at /build/rustc-1.63.0-src/library/std/src/rt.rs:144:17
      21:     0x5579b5e6e0cc - main
      22:     0x7f1956160237 - __libc_start_call_main
      23:     0x7f19561602f5 - __libc_start_main_impl
      24:     0x5579b5e689b1 - _start
                                   at /build/glibc-2.34/csu/../sysdeps/x86_64/start.S:116
      25:                0x0 - <unknown>
    
    opened by SkyLeite 3
  • Will not compile with cargo build --release

    Will not compile with cargo build --release

    Cloned the repo, ran 'cargo build --release' on commit 1dfdec325cebb32 and get this error:

    error :

    
    warning: `rustboyadvance-core` (lib) generated 4 warnings
    error: couldn't read platform/rustboyadvance-sdl2/src/../../../external/SDL_GameControllerDB/gamecontrollerdb.txt: No such file or directory (os error 2)
      --> platform/rustboyadvance-sdl2/src/main.rs:66:9
       |
    66 |         include_str!("../../../external/SDL_GameControllerDB/gamecontrollerdb.txt");
       |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       |
       = note: this error originates in the macro `include_str` (in Nightly builds, run with -Z macro-backtrace for more info)
    
    warning: unused import: `io`
     --> platform/rustboyadvance-sdl2/src/options.rs:1:11
      |
    1 | use std::{io, path::PathBuf};
      |           ^^
      |
      = note: `#[warn(unused_imports)]` on by default
    
    warning: `rustboyadvance-sdl2` (bin "rustboyadvance-sdl2") generated 1 warning
    error: could not compile `rustboyadvance-sdl2` due to previous error; 1 warning emitted
    
    
    opened by ethereumdegen 2
  • Mary-Kate and Ashley Sweet 16 - invalid arm condition

    Mary-Kate and Ashley Sweet 16 - invalid arm condition

    Smashing the A button in the menu should trigger the panic.

    thread 'main' panicked at 'invalid arm condition', rustboyadvance-core/src/arm7tdmi/cpu.rs:403:21
    
    game-bug 
    opened by xTibor 2
  • build(deps): bump criterion from 0.3.1 to 0.3.2

    build(deps): bump criterion from 0.3.1 to 0.3.2

    Bumps criterion from 0.3.1 to 0.3.2.

    Changelog

    Sourced from criterion's changelog.

    [ 0.3.2] - 2020-04-26

    Added

    • Added ?Sized bound to benchmark parameter types, which allows dynamically sized types like &str and &[T] to be used as benchmark parameters.
    • Added the --output-format <format> command-line option. If --output-format bencher is passed, Criterion.rs will print its measurements in a format similar to that used by the bencher crate or unstable libtest benchmarks, and using similar statistical measurements as well. Though this provides less information than the default format, it may be useful for supporting tools which parse this output format.
    • Added --nocapture argument. This argument does nothing, but prevents Criterion.rs from exiting when running tests or benchmarks and allowing stdout output from other tests.

    Fixed

    • Fixed panic when environment variables contains non-UTF8 characters.
    • Fixed panic when CRITERION_DEBUG or CRITERION_TARGET_DIR environment variables contain non-UTF8 characters.
    Commits
    • 76f7221 Bump version numbers.
    • 9de9121 Update dependencies.
    • 7e2d02b Update changelog.
    • ba78ff1 Use var_os instead of vars, so Criterion.rs doesn't panic when a var is non-u...
    • a95db75 Use PathBuf for output directory to improve non-UTF8-safety.
    • b065b99 Merge pull request #389 from LingMan/patch-2
    • 9dd110d Also install rustfmt
    • c22b01f Ensure we install clippy in the CI script.
    • f8260a7 Merge pull request #393 from humb1t/patch-2
    • 5869c1b Merge pull request #392 from humb1t/patch-1
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 2
  • build(deps): bump minifb from 0.11.2 to 0.16.0

    build(deps): bump minifb from 0.11.2 to 0.16.0

    Bumps minifb from 0.11.2 to 0.16.0.

    Changelog

    Sourced from minifb's changelog.

    Changelog

    This project follows semantic versioning.

    v0.16 (2020-04-05)

    • [added] Wayland support. (Big thanks to Antonino Siena add this support with assistance by Cole Helbling!)
    • [added] Added get_released_keys (Thanks to Alex Melville!)
    • [added] Added Topmost/Always on Top functionality to macOS (Thanks phillvancejr!)
    • [fixed] Removed left over logging on macOS (Thanks phillvancejr!)

    v0.15.3 (2020-01-21)

    • [Added] On macOS NSView (MTKView) is supplied with raw_window_handle now

    v0.15.2 (2020-01-21)

    • [fixed] Fixed forever block on macOS when using update and not update_with_buffer

    v0.15.1 (2019-12-27)

    • [fixed] Fixed access to raw_window_handle()

    v0.15 (2019-12-16)

    • [API BREAKAGE] - update_with_buffer now always take width and height parameters.
    • [added] scale_mode in WindowOptions now allow for aspect correct scaling, center of non-scaled buffers and more.
    • [added] Added limit_update_rate(..) in order to reduce CPU usage and not hammer the native system calls.
    • [changed] x11 now uses C for it's scaling in software mode in order to always have opts on even in debug build.
    • [changed] Several fixes with rescaling on all platforms
    • [changed] on x11 some window mangers will resize a non-resizable windows and minifb handles this now correctly.
    • [fixed] Cursor was behaving bad on Windows. This has now been fixed
    • [known issues] There are some flickering and various issues when resizing on most platforms. PRs/ideas welcome for this.

    v0.14 (2019-12-03)

    • [changed] Deprecated update_with_buffer on favor of update_with_buffer_size. The idea is that a size in of the buffer will be more robust and allow for aspect scaling as well.
    • [changed] Improved macOS resizing support.
    • [changed] Better modifier handling on macOS.
    • [changed] Moved CI over to Github Actions
    • [changed] Formatted all code with rustfmt
    • [changed] Documentation improvments (Thanks Gary Guo & Arif Roktim!)
    • [fixed] 'attempt to subtract with overflow' bug (Thanks Venceslas!)
    • [fixed] Window close handling & missing Alt keys for X11 (Thanks Gary Guo!)
    • [added] Juila example added (Thanks mishazawa!)
    • [added] Add support for raspberry pi (Thanks Florian Blasius!)
    • [added] Added support for raw-window-handle trait

    v0.13 (2019-08-30)

    ... (truncated)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language
    • @dependabot badge me will comment on this PR with code to add a "Dependabot enabled" badge to your readme

    Additionally, you can set the following in your Dependabot dashboard:

    • Update frequency (including time of day and day of week)
    • Pull request limits (per update run and/or open at any time)
    • Out-of-range updates (receive only lockfile updates, if desired)
    • Security updates (receive only security updates, if desired)
    dependencies 
    opened by dependabot-preview[bot] 2
  • Panic on invalid CPU modes

    Panic on invalid CPU modes

    thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', rustboyadvance-core/src/arm7tdmi/psr.rs:73:9
    

    Games hitting this panic:

    • Madden NFL 2002 (after the BIOS logo)
    • Starsky & Hutch (after starting a new game)
    • Ultimate Muscle - The Kinnikuman Legacy
    • Banjo-Kazooie - Grunty's Revenge
    • The Powerpuff Girls - Mojo Jojo A-Go-Go
    • Colin McRae Rally 2.0
    • Gauntlet - Dark Legacy
    game-bug 
    opened by xTibor 2
  • Games panicking with 'forbidden DMA source address adjustment'

    Games panicking with 'forbidden DMA source address adjustment'

    thread 'main' panicked at 'forbidden DMA source address adjustment', rustboyadvance-core/src/dma.rs:125:18
    

    Games hitting this panic right after the BIOS logo:

    • The Sum of All Fears
    • Tom Clancy's Rainbow Six - Rogue Spear
    • X-Men - The Official Game
    game-bug 
    opened by xTibor 2
  • Update gba-suite

    Update gba-suite

    gba-suite has been updated, and these tests now have a bitmap UI. Also, need to make sure the tests (suchs as test_arm7tdmi_arm_eggvance) are updated accordingly.

    enhancement good first issue 
    opened by michelhe 0
Releases(test-android-build)
Owner
MishMish
MishMish
Rustual Boy - A Virtual Boy emulator.

Rustual Boy Description Rustual Boy is a Virtual Boy emulator. It can be used to play existing Virtual Boy games, as well as be a helpful development/

null 224 Nov 9, 2022
A Game Boy research project and emulator written in Rust

Mooneye GB Mooneye GB is a Game Boy research project and emulator written in Rust. The main goals of this project are accuracy and documentation. Some

Joonas Javanainen 802 Dec 28, 2022
Gameboy Advance emulator.

Clementine - A collaborative approach to GBA emulation Welcome to the first ripsters' project. Our goal is to understand how GameBoy Advance works and

RIPsters 32 Dec 14, 2022
Experimental Nintendo Switch Emulator written in Rust

Kaminari Experimental Nintendo Switch Emulator written in Rust Usage You'll need to install Rust. rusc >= 1.55.0 rustup >= 1.24.3 Disclaimer Kaminari

SSebigo 4 Dec 7, 2021
A cross-platform sequencer that internally uses a Game Boy emulator to synthesize the sound

chiptrack chiptrack is a cross-platform sequencer that internally uses a Game Boy emulator to synthesize the sound. It uses: SixtyFPS for the UI. RBoy

Jocelyn Turcotte 26 Dec 7, 2022
A CPU emulator for running unit tests on Game Boy code.

evunit This is a unit testing application for Game Boy roms. It includes a CPU emulator, and loads test configurations from TOML files. Configuring a

Evie M. 8 Jan 1, 2023
Nes-emulator - A NES emulator made to learn the Rust programming language

nes-emulator Building $ rustc --version rustc 1.32.0 (9fda7c223 2019-01-16) $ cargo --version cargo 1.32.0 (8610973aa 2019-01-02) $ cargo build --rel

Michael Burge 225 Dec 23, 2022
Emulator and debugger for LPRS1 ISA & CPU

About LPRSemu is a simple emulator and debugger for LPRS1 ISA & CPU. It supports loading programs from assembly text files, binary string representati

Filip Parag 3 Jan 8, 2023
An open-source reimplementation of the Horizon microkernel used in the Nintendo Switch.

Saturnus An open-source reimplementation of the modern RTOS microkernel "HorizonKernel" that is used in the Nintendo Switch. About The original Horizo

Valentin B. 41 Sep 5, 2022
Learn emulator and programming languages, target chip8, nes, gbc, gba ...

[WIP]learn emulator go-chip8 go run main.go source https://en.wikipedia.org/wiki/CHIP-8 http://devernay.free.fr/hacks/chip8/C8TECH10.HTM https://githu

早晨海风 4 Apr 30, 2021
A NES emulator written in Rust, with a focus on expandability and accuracy

A NES emulator written in Rust, with a focus on expandability and accuracy

Benjamin Mordaunt 4 Sep 19, 2022
Unicorn Emulator Debug Server - Written in Rust, with bindings of C, Go, Java and Python

udbserver - Unicorn Emulator Debug Server When you do emulation with Unicorn Engine, do you want to inspect the inner state during every step? udbserv

Bet4 246 Dec 27, 2022
NES emulator written in Rust to learn Rust

OxideNES A NES emulator in Rust. CPU should be accurate, PPU is mostly accurate, timing between the 2 is off for some corner cases and hardware qui

null 37 Nov 7, 2022
Chip8 emulator written in pure rust, using rust-sdl2 for graphics

Rust-8 chip8 emulator written in rust, using rust-sdl2 for graphics. Features Fully implemented all 35 original chip8 opcodes. This emulator does NOT

Chris Hinson 7 Dec 28, 2022
Commodore 64 emulator written in Rust

Rust64 - a C64 emulator written in Rust This is my attempt to study the Rust programming language and have fun at the same time. The goal is to presen

Krzysztof Kondrak 214 Dec 27, 2022
A Flash Player emulator written in Rust

website | demo | nightly builds | wiki Ruffle Ruffle is an Adobe Flash Player emulator written in the Rust programming language. Ruffle targets both t

Ruffle 11.2k Jan 8, 2023
An NES emulator written in Rust

Pinky Pinky is an NES emulator written in Rust completely from scratch based only on publicly available documentation. You can run it in your Web brow

Koute 709 Dec 23, 2022
NES emulator written in Rust

sprocketnes is an emulator for the Nintendo Entertainment System written in the Rust programming language. Its purpose is to serve as a technology dem

Patrick Walton 725 Dec 27, 2022
ZX Spectrum emulator written in Rust

rustzx ZX Spectrum emulator which I writing in rust. I develop this project just for fun and for learning the basics of computer architecture. License

Vladislav Nikonov 162 Dec 27, 2022