TASEmulators / TASEmulators/BizHawk

[Core Port Req.] NanoBoyAdvance for GBA

Open
#3,736 8 comments 2 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Request: New core/port/re-port
Dominant language
C#
Stars
2.8k
Forks
468
PR merge metrics
No merged PRs in 30d

Description

Upstream info
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 stable compatible between versions anyway
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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.