While mGBA has only been out for a relatively short time, it has a long history. The project started in April 2013, but many events prior led up to the project that is today known as mGBA. For information on upcoming releases, please click here.

Pre-History

Reflecting on a long history of using existing emulators, such as the old NO$GMB and VisualBoyAdvance, endrift starts toying with writing toy emulators for the Game Boy Advance. The GBA was specifically targeted to be emulated due to the relative complexity of the system, as compared to earlier 8-bit systems, while still not being as complex as later systems like the Nintendo DS or the Nintendo 64. Furthermore, there weren't too many mature emulators out there already, like there were for the Super Nintendo and the Sega Genesis. Plus, endrift had used VBA the most of any emulator, so it was the natural choice for improving upon.

None of these early attempts amounted to anything of mention.

"I have a terrible idea!"

Inspired by the new proliferation of ever-fancier JavaScript tech demos, such as Grant Galitz's GameBoy Online and Fabrice Bellard's JavaScript PC, endrift says, "I have a terrible idea," but decides to work on it regardless of it indeed being a terrible idea: a Game Boy Advance emulator written in JavaScript. In early July, work started on what would naturally be called GBA.js.

GBA.js beta 1

Prompted by an unceremonious porting of VBA-M to JavaScript using emscripten and WebGL, which was branded as the "world's first WebGL-based JS GBA emulator", and indeed seemingly the first "JavaScript" GBA emulator, endrift decided to release an early beta of GBA.js. It was buggy, had poor compatibility and didn't even support all of the standard GBA hardware, but it was entirely JavaScript, and was way less thrown-together than a two-week port of someone else's project. The beta was posted on Hacker News and was on the front page for the better part of a day, but ultimately did not gain much traction.

"I have an even worse idea...!"

In the wake of the increasingly good compatibility of GBA.js, but the seeming roadblock in hopes that it may ever support the link cable, endrift has an even worse idea (by some metrics): write a fast, native emulator that can run on low-end hardware such as the Raspberry Pi and communicate with *real* Game Boy Advance consoles over I/O pins. Seeing the poor performance of VBA-M on the Raspberry Pi, this seemed like an exceedingly difficult goal. But work began anyway on a project tentatively called GBAc.

Taking large swathes of GBA.js's code, translated into C, and only fully rewriting the ARM7 core and video rendering code with optimization in mind, GBAc progressed rapidly early on, but it was still considered a side-project compared to GBA.js, so work slowed substantially after an initial push. It had very poor compatibility, and would probably never amount to anything; after all, it wouldn't support Windows, being written for embedded hardware!

GBA.js hits release candidate, promptly dies

As GBA.js 1.0 looms, progress slows substantially. Some planned features appear to be impossible, performance is not as good as hoped, and since it's feature complete otherwise, all that remains is to touch it up in preparation for 1.0 final. However, after the first release candidate, work stops almost entirely. 1.0 never comes out, and focus shifts to the fledgling GBAc.

GBAc needs a lot of polish before it can even become presentable, but the ideal feature list keeps growing. Windows support is added, albeit as a bit of an afterthought, a Qt GUI is added to complement the barebones SDL UI, and compatibility reaches, and eventually exceeds, that of GBA.js. All future updates to GBA.js are minor bugfixes or pull requests filed by other contributors.

mGBA 0.1.0

The young GBAc grows more and more by the day. It's evident that it's already ready for a public alpha, but not all the features that are desired have been implemented yet. Some features get pushed until later releases, but many of them still need to be added. Furthermore, the project doesn't even have a real name yet. GBAc was just a stand-in name, and several ideas are considered. miniGBA or microGBA are floated, due to the apparent light weight of mGBA compared to VBA-M, but with mGBA gaining size rapidly, the names are dropped and replaced with an abbreviated mGBA. The naming decision is put off for another day. As December approaches, mGBA enters crunch mode to get all the features completed before endrift starts a new job and has to put it off for awhile. With the name decision never settled, the project gets released as mGBA 0.1.0, to little fanfare.

mGBA 0.1.1

Due to the rushed nature of the release, it's only natural that bugs would slip through unnoticed. With initial feedback from some early testers, a slew of bugs are fixed, and mGBA 0.1.1 is released.

mGBA 0.2.0

mGBA 0.2.0 is released, two years after work on it started. It includes the addition of several major features, including:

  • Link cable support within multiple instantiations of the emulator
  • Cheat code support
  • Improved user interface
  • Internal support for many of the sensors games use, although not outwardly exposed

It was received much more warmly than 0.1, but the question was still floated as to "why" another GBA emulator is needed. Regardless, progress continues.

mGBA 0.2.1

0.2.1 contains another large slew of bugfixes a month after 0.2.0 came out. 0.2.2 was intended to be released another month later, but got scraped due to the difficulty of backporting fixes from the upcoming 0.3 branch.

mGBA ported to Nintendo 3DS, Wii, and PlayStation Vita

Although too late to be ready for 0.3.0, mGBA gets ported as homebrew to three game platforms: the Nintendo 3DS, the Wii and the PlayStation Vita. Early alpha builds of the emulator are posted, and drive forward performance and internal architecture.

mGBA 0.3.0

mGBA 0.3.0 is released, four months after 0.2.0 comes out, and with it a glut of new features, including:

  • Cartridge sensors are now properly exposed to controllers
  • The beginnings of a debug interface
  • A basic on-screen display
  • Several user-experience improvements

Many bugs are fixed as well, including all of the bugs that were fixed for the never-released 0.2.2.

mGBA 0.3.1

mGBA 0.3.1 is released, containing several important bugfixes.

mGBA 0.3.2

mGBA 0.3.2 is released, containing several important bugfixes.

mGBA 0.4.0

mGBA 0.4.0 is released, bringing polished support for the Nintendo 3DS, Wii and PlayStation Vita, and also contains many features, including:

  • Customizable paths
  • Shaders and filters
  • Controller hotplugging and key autofire
  • OpenEmu core for OS X users and various improvements to the Libretro core
mGBA 0.4.1

mGBA 0.4.1 is released, containing several important bugfixes.

mGBA 0.5.0

mGBA 0.5.0 is released, with Game Boy and Game Boy Color support, and other features, including:

  • Vastly improved homebrew ports, particularly for the PlayStation Vita
  • Emulation of Vast Fame protected GBA cartridges
  • Improved cheat code support
  • Loading a temporary savegame
mGBA 0.5.1

mGBA 0.5.1 is released, containing several important bugfixes.

mGBA 0.5.2

mGBA 0.5.2 is released, containing several important bugfixes.

medusa alpha 1

medusa alpha 1 is released, containing the first proof of concept of DS support, and announcing the plans for 2.0.

mGBA 0.6.0

Tentative release date of mGBA 0.6.0, which will contain many features, including features delayed from 0.5.0 and potentially including:

  • Online multiplayer support
  • Game Boy multiplayer support
  • Library view
  • More debug features
mGBA 0.7.0

Tentative release date of mGBA 0.7.0, which will contain many features, including features delayed from 0.6.0 and potentially including:

  • Wireless adapter support
  • Partial Super Game Boy support
  • Lua scripting
  • e-Reader support
  • Support for several Game Boy peripherals
  • Dynamic recompiler for ARM
  • BGB/NO$GBA-style interactive debugger
mGBA 1.0.0

Tentative release date of mGBA 1.0.0, which will be feature complete GBA support with many additional features.

mGBA 1.1.0

Potential exploration of more additional features and improved Game Boy compatibility:

  • TASing features
  • Dynamic recompiler for MIPS and PSP support
  • Support for Game Boy Camera
  • Possibly more
medusa 2.0.0

Full Nintendo DS support

For a more comprehensive set of tasks and features for upcoming releases, please refer to the thread on the forums.