TASEmulators / TASEmulators/BizHawk
[Core Port Req.] NanoBoyAdvance for GBA
Nobody has claimed this yet.
- Dominant language
- C#
- Stars
- 2.8k
- Forks
- 468
- PR merge metrics
- No merged PRs in 30d
Description
Upstream info
- Website/source repo: https://github.com/nba-emu/NanoBoyAdvance
- Author: @fleroviux
- Target platforms: Linux, Windows, macOS
- Language(s): C++
- License: GPL-3.0
Merits
BizHawk already has a much-appreciated and generally accurate GBA core: mGBA. However, NanoBoyAdvance was designed from the ground up to be cycle-accurate and also has notable general accuracy improvements as a result. It's essentially the cutting-edge of GBA emulation that's been able to benefit from the knowledge of its predecessors and fleriouviux has also been able to do her own research to advance GBA emulation accuracy.
To point out a specific case with which I'm intimately familiar, a version of my Shrek 2 TAS in mGBA had a ~17.9 second deviation from real console, while in NanoBoyAdvance it's a mere ~81 frames. Both emulators will probably improve in accuracy over time, but NanoBoyAdvance may have an inherent architectural advantage in certain accuracy-related matters.
I have noticed mGBA has similar deviations from real-console in other GBA games with lag, although I've only rigorously tested Shrek 2 (and I'm still doing ongoing testing there).
NanoBoyAdvance also has its own accuracy datasheet.
Other GBA emulators
NanoBoyAdvance is not the only newer accuracy focused GBA emulator. Alyosha recently released their own GBA TAS emulator GBAHawk. For the Shrek 2 TAS test, GBAHawk was ~4.034 seconds away from real console. SkyEmu is also more recent, and was ~31 frames away in the Shrek 2 TAS test, with some caveats related to testing with and without prefetch. SkyEmu was also previously rejected as a BizHawk core a year ago (#3311), although SkyEmu accuracy has advanced since then.
Technical details
I'm quoting this information directly from fleroviux.
- Able to build .dll/.so for P/Invoke? -- "should be easy to do with CMake (just add another library that sits on top of libnba)"
- Frontend/backend separation -- "The backend is completely separated from the frontend."
- can force single-threaded? -- "NBA is completely single-threaded."
- Has I/O abstraction accepting byte array -- "This is not completely there yet. ROMs can be loaded from memory, however saves need to be read from and written to disk. If necessary this could be extended I think."
- Savestate quality -- "Savestate quality should be pretty high I think, at least on a frame to level. However savestate compatibility between releases is practically nonexistent."
- my note: BizHawk generally doesn't guarantee core savestates will be
stablecompatible between versions anyway
- my note: BizHawk generally doesn't guarantee core savestates will be
Additional notes
I may have some interest in working on a draft pull request for this. fleroviux also said she was interested in having TAS support for the emulator and interested in potentially helping bring about a BizHawk core.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing the NanoBoyAdvance source repository and its docs/ACCURACY.md, then compare its CMake build and frontend/backend separation with BizHawk's existing core integrations. Confirm how a C++ library would expose the required P/Invoke surface, memory-loaded ROMs, saves, and savestates; done means a buildable, usable BizHawk core with TAS support.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cmake, cpp, csharp
- Domain
- backend, tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 28/100