Nintendo™ Game Boy Advance emulator and debugger.
This repository has been archived on 2024-06-01. You can view files and clone it, but cannot push or open issues or pull requests.
Find a file
Michel Heily 2bd8b56bc6 Fix that DAMN bug.
Long story short, I've been hunting this bug for a while now.
While passing armwresteler tests, I still had an emulation bug which
causeed libgcc's iprintf to produce bugged strings.

In order to find it, I've used https://github.com/fleroviux/NanoboyAdvance/
And patched it to produce a formatted log of every step of the execution
of iprintf:
{OPCODE} {PC} {R0} {R1} ... {R14} {FLAGS}
Did the same on my emulator and searched for differences.

Found out the a "CMP r3, #0x0" instruction turned off the carry flag
when it shouldn't. Found this sad function, the check I'm using for
carry flag is meaningless when done on signed integers. :sigh:


Former-commit-id: 871d2581921796dae9bf4f5fdaa45c6ad46aebec
2019-11-06 00:49:59 +02:00
.vscode Update .launch.json 2019-07-04 01:36:41 +03:00
img Add demo gif to README.md 2019-06-28 15:32:21 +03:00
src Fix that DAMN bug. 2019-11-06 00:49:59 +02:00
.gitignore Initial commit 2019-06-24 16:36:20 +03:00
.travis.yml Fix typo in .travis.yml 2019-06-27 13:16:00 +03:00
Cargo.lock Add blending and mosaic SFX, and cleanup code. 2019-08-13 22:15:36 +03:00
Cargo.toml Support zip files and add --no-framerate-limit 2019-09-11 21:26:40 +03:00
LICENSE Create LICENSE 2019-06-24 16:36:20 +03:00
README.md Fix that DAMN bug. 2019-11-06 00:49:59 +02:00

RustBoyAdvance-NG

Build Status

RustBoyAdvance-NG aims to be a Nintendo GameBoy Advance emulator and debugger, written in the rust programming language.

RustBoyAdvance-NG currently has implemented

  • Dumbed-down ARM/THUMB mode disassembling
  • Some ARM/THUMB instruction are implemented, but not all of them.
  • A neat debugger REPL

But the way for full emulation is way far ahead, because most of the ARM/THUMB instructions are not yet implemented.

Using the REPL

You need to have rust installed, and somehow legally obtain a gba bios binary. Currently to test the debugger, any binary file containing arm mode instructions will do.

$ cargo run -- debug

Debugger REPL Demo

Why is this project needed ?

It's actually not. There are quite a lot of GBA emulators, and even some written in rust. Actually, I couldn't find any game capable emulators written in rust.

I'm only doing this as a side project intended for learning rust.

This is my third take on this project. My first go at this was about 3 years ago, but I didn't like rust much at the time so it got abandoned. I tried to resurrect it a year ago but didn't have the time to get invested in a side-project, let alone learning rust.

I've grown to like rust a lot since then, so here we go again. You know what they say, third time's a charm.

Links

  • 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.
  • NanoboyAdvance] A GameBoy Advance emulator written in C++17 by a nice person called fleroviux. I've used this emulator to search for a tough bug in mine.