Skip to content

Guides

The best GBA emulators for a low-spec PC, and how to fix the frame pacing

On old hardware the bottleneck is rarely raw speed, it is judder. Here are the four emulators worth using on a weak machine, and the sync settings that decide whether the game looks smooth or sounds smooth.

4 min read
Topic
Old hardware
Difficulty
intermediate
Spoilers
None

Game Boy Advance emulation has been a solved problem for over a decade. A machine from 2012 runs any GBA game at full speed without breaking a sweat. So when people say their low-spec PC emulates GBA badly, they almost never mean the frame rate is too low. They mean it judders.

That is a different problem with a different fix, and it is worth understanding before you start changing settings at random.

Why it judders, in one paragraph

A GBA outputs very close to 59.727 frames per second. Your monitor refreshes at 60, or 59.94, or something else again. The emulator has to decide which of those two clocks to obey. If it syncs to audio, sound stays clean and the video occasionally drops or repeats a frame. If it syncs to video, the picture stays smooth and the audio resamples, which you hear as crackle. There is no setting that makes both perfect, because the underlying rates genuinely do not match. Everything below is about picking which artefact you would rather have.

mGBA — the default answer, and it has a low-spec mode

mGBA is the emulator most people should use. It also plays Game Boy and Game Boy Color.

  • Licence: MPL-2.0, copyright Jeffrey Pfau
  • System requirements: the project’s own words are “a computer capable of running Windows Vista or newer”
  • Graphics: OpenGL 1.1 or newer; shaders and advanced features want OpenGL 3.2

The important detail for a weak machine is that mGBA ships two frontends. The Qt frontend is the full-featured one and it is heavier. The SDL frontend is the lightweight one, and on genuinely old hardware it is the difference between usable and not. If your machine struggles, switching frontend is the first thing to try, before any settings.

What you get either way: configurable frameskip up to 10, hold Tab for fast-forward, hold Backquote for rewind, nine save-state slots, cheat support, and save type detection that includes Flash memory sizes. Default keyboard mapping is X for A, Z for B, A for L, S for R, Enter for Start and Backspace for Select.

For frame pacing specifically: mGBA exposes both audio sync and video sync, and which one you want depends on the game. Rhythm games and anything with a soundtrack want audio sync. Platformers where you judge jumps visually want video sync. If you are getting stutter and you have not tried flipping this, that is your problem.

NanoBoyAdvance — when accuracy is the point

NanoBoyAdvance takes the opposite approach to “good enough”. It is cycle-accurate for most components — CPU, DMA, timers, PPU and Game Pak prefetch — and it was the first public emulator to pass all the AGS aging cartridge tests. It also passes most of the mGBA test suite.

That matters if you are playing a game that breaks on less accurate emulators, or if you care about hardware behaviour rather than just seeing the game. It matters much less if you want a friendly interface, because that is not what it is optimised for.

If you have one specific game that glitches everywhere else, try it here before you conclude the ROM is bad.

VBA-M — still around, hard to recommend

VisualBoyAdvance-M has been the fallback answer for fifteen years and it still works. But it is less accurate than mGBA, less actively developed, and no lighter. On a machine that runs mGBA, there is no reason to choose it. Keep it in mind only if you have an old setup where something specific depends on it.

RetroArch plus the mGBA core — the frame pacing toolkit

If judder is your actual complaint, RetroArch is where the controls are, because it exposes the synchronisation options as first-class settings rather than burying them.

The ones that matter on a weak machine:

  • Vertical refresh rate. Set this to your display’s real rate. Getting it wrong is the single most common cause of persistent stutter, and it is not obvious from the menu that it is wrong.
  • Hard GPU sync and frame delay. These reduce input latency by keeping the GPU from queuing frames. On a weak GPU they can make things worse, so raise them one step at a time and stop when audio starts breaking.
  • Audio sync versus video sync. Same trade as above.
  • Threaded video. Worth turning off on a low-core machine.

Libretro maintains a detailed optimal vsync guide that is more thorough than anything we could write here. Read it once and this whole topic stops being mysterious.

The low-spec recipe

If you want a starting point rather than a theory:

  1. Use the SDL frontend of mGBA, or RetroArch with the mGBA core.
  2. Leave the OpenGL 1.1 path alone. Do not enable shaders — the 3.2 requirement is a hard wall on Intel integrated graphics of that era, and they cost frames you do not have.
  3. Set vertical refresh to your display’s actual rate.
  4. Pick one sync mode and stop fiddling. Audio sync if the game has music you care about, video sync otherwise.
  5. Set frameskip to 1 only if you are still dropping frames. Above that, the game looks worse than the judder did.
  6. Run in a window at native resolution rather than upscaled fullscreen. Integer scaling at 3× or 4× looks better than a stretched 1080p image anyway.

Emulators are legal and always have been. ROM files you did not dump from a cartridge you own are a different matter. Everything above assumes you are playing your own games — that is the only version of this guide we are willing to write, and it is also the version that keeps projects like mGBA alive.