{"id":13619233,"url":"https://github.com/michelhe/rustboyadvance-ng","last_synced_at":"2025-04-14T16:30:58.111Z","repository":{"id":41262409,"uuid":"193076314","full_name":"michelhe/rustboyadvance-ng","owner":"michelhe","description":"RustBoyAdvance-NG is a Nintendo™ Game Boy Advance emulator and debugger, written in the rust programming language.","archived":false,"fork":false,"pushed_at":"2024-08-12T09:28:25.000Z","size":16235,"stargazers_count":605,"open_issues_count":16,"forks_count":23,"subscribers_count":10,"default_branch":"master","last_synced_at":"2024-11-08T05:39:01.290Z","etag":null,"topics":["arm7-tdmi","emulator-programming","gameboy-advance-emulator","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/michelhe.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-06-21T10:05:18.000Z","updated_at":"2024-10-28T02:03:49.000Z","dependencies_parsed_at":"2024-11-08T05:32:07.225Z","dependency_job_id":"a7dd01ed-7c0a-4446-881f-c253aff94740","html_url":"https://github.com/michelhe/rustboyadvance-ng","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michelhe%2Frustboyadvance-ng","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michelhe%2Frustboyadvance-ng/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michelhe%2Frustboyadvance-ng/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/michelhe%2Frustboyadvance-ng/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/michelhe","download_url":"https://codeload.github.com/michelhe/rustboyadvance-ng/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248916555,"owners_count":21182826,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arm7-tdmi","emulator-programming","gameboy-advance-emulator","rust"],"created_at":"2024-08-01T21:00:36.514Z","updated_at":"2025-04-14T16:30:58.104Z","avatar_url":"https://github.com/michelhe.png","language":"Rust","funding_links":[],"categories":["Applications","应用程序 Applications"],"sub_categories":["Emulators","模拟器 Emulators"],"readme":"# RustBoyAdvance-NG\n\n[![license](https://img.shields.io/github/license/michelhe/rustboyadvance-ng)](https://github.com/michelhe/rustboyadvance-ng/blob/master/LICENSE) \n[![Build](https://github.com/michelhe/rustboyadvance-ng/actions/workflows/build.yml/badge.svg)](https://github.com/michelhe/rustboyadvance-ng/actions/workflows/build.yml) \n\nNintendo GameBoy Advance ™ emulator and debugger, written in rust.\n\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg width=\"360px\" src=\"assets/icon_cropped_small.png\"\u003e\n\u003c/div\u003e\n\nWebAssembly Demo: https://michelhe.github.io/rustboyadvance-ng/ ![Deploy](https://github.com/michelhe/rustboyadvance-ng/workflows/Deploy/badge.svg?branch=master)\n\n# Project Structure\n* `core/` - Main emulator crate that ties everything together \n* `arm7tdmi/` - Emulation of the Arm7tdmi processor.\n* `platform/` - Constains executables \u0026 application built with `rustboyadvance-core`\n    * `platform/rustbodyadvance-wasm` - Web emulator powered by WebAssembly\n    * `platform/rustbodyadvance-sdl2` - Desktop application built with sdl2\n    * `platform/rustbodyadvance-minifb` - Desktop application built with minifb, *not maintained*.\n    * `platform/rustbodyadvance-jni` - Java JNI binidngs for the emulator.\n    * `platform/android` - A PoC Android application.\n\n# Progress\n\n![Pokemon Emerald](media/screenshot1.png)\n\n## Emulation Todo:\n* CGB audio (4 wave generator channels)\n\n# Build and usage (Desktop Application)\n\nTo get started, you need to get a [stable rust toolchain](https://rustup.rs) of version Rust 1.51 or later,\n\n## Linux build dependencies\nInstall SDL2 dependencies\n\n```bash\nsudo apt-get -y install libsdl2-dev libsdl2-image-dev\n```\n\n## Windows build dependencies\nSDL2 runtime binaries are included in this repository, no extra setup needed.\n\n## macOS\n\nInstall SDL2 dependencies\n```bash\nbrew install SDL2 SDL2_image\nexport LIBRARY_PATH=\"$LIBRARY_PATH:/opt/homebrew/lib\"\n```\n\n## Build \u0026 Usage\nYou need to obtain a gba bios binary.\nAn [open source GBA bios](https://github.com/Nebuleon/ReGBA/blob/master/bios/gba_bios.bin) is also available and supported.\n\n\nPlace the bios file in the repository root and name it `gba_bios.bin` (or alternatively use the `-b` command line option)\n\n\nBuild and run in release mode (performance is terrible in the `dev` profile)\n```bash\n$ cargo run --release -- path/to/rom\n```\n\n\nYou can also drag\u0026drop rom files or any zip files containing `.gba` files inside into the emulator window and a new rom will be loaded.\n\n## Key bindings\n\n\u003e Currently the key bindings are not configureable.\n\nGBA key bindings:\n\n| Keyboard  \t| GBA      \t|\n|-----------\t|----------\t|\n| Up        \t| Up       \t|\n| Down      \t| Down     \t|\n| Left      \t| Right    \t|\n| Right     \t| Right    \t|\n| Z         \t| B Button \t|\n| X         \t| A Button \t|\n| Return    \t| Start    \t|\n| Backspace \t| Select   \t|\n| A         \t| L        \t|\n| S         \t| R        \t|\n\nSpecial key bindings\n| Key          \t| Function          \t|\n|--------------\t|--------------------\t|\n| Space (hold) \t| Disable 60fps cap  \t|\n| F1\t\t| Custom debugger (requires --features debugger) |\n| F2\t\t| Spawn gdbserver (experimetnal, requires --features gdb) |\n| F5           \t| Save snapshot file \t|\n| F9           \t| Load snapshot file \t|\n\n\n# Android Application\n\nThe android project is placed inside `platform/android`.\nTo build it, open it with Android Studio.\n\nYou also need to set up rust to build android targets with NDK.\n\nTODO - instructions\n\n# More Screenshots\n ![Kirby - Nightmare in Dreamland](media/screenshot2.png) ![Dragon Ball - Legacy of Goku 2](media/screenshot3.png)\n\n# Links and attribution\n\n- [ARM7TDMI Technical Reference Manual](http://infocenter.arm.com/help/topic/com.arm.doc.ddi0210c/DDI0210B.pdf)\n    Technical Reference Manuals are **fun**.\n- [GBATEK](http://problemkaputt.de/gbatek.htm)\n    A single webpage written by *no$gba* developer Martin Korth.\n    This page has pretty much everything. Seriously, it's the best.\n- [TONC](https://www.coranac.com/tonc/text/)\n    A comprehensive GBA dev guide that I used a-lot in order to understand the GBA system.\n    Comes with neat demo roms that really helped me during development and debugging.\n- [NanoboyAdvance](https://github.com/fleroviux/NanoboyAdvance)\n    A GameBoy Advance emulator written in C++17 by a nice person called fleroviux.\n    I've used this for debugging.\n- [Eggvance gba-suite](https://github.com/jsmolka/gba-suite)\n    Incredible test suite for the arm7tdmi interpreter that I'm using, written by Julian Smolka.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichelhe%2Frustboyadvance-ng","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmichelhe%2Frustboyadvance-ng","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmichelhe%2Frustboyadvance-ng/lists"}