mGBA 0.6.0 has been long delayed. It’s dense with new features and unfortunately not all of those features are hugely well-tested. However, it’s almost ready for release. Before a stable release, more comprehensive testing is needed. In the getting out what’s already working and promoting testing, mGBA 0.6 beta 1 is now available. The final release of mGBA 0.6.0 should be out within a few weeks.

The following features are either new and not very well tested or heavily revamped and in need of more testing. Please focus on these while testing and report any and all bugs on GitHub or email bugs@mgba.io.

Game Boy support got some pretty serious changes and may be buggy in some cases.

The new debugging tools, such as the command-line debugger and the sprite viewer, may be prone to deadlocking or crashing.

The library view is quite new and not heavily tested yet.

There are now translations for German and Spanish that are not well reviewed and partially incomplete.

Performance. The core event timing was rewritten and should be faster, but may be slower in some cases.

The following changes were made between 0.5.2 and 0.6 beta 1:

Features:

GBA: Support printing debug strings from inside a game

GBA: Better cheat type autodetection

GB: Tile viewer

Sprite viewer

Debugging console

Improved memory viewer

GB: LR35902/GB-Z80 disassembler

Configuration of gamepad hats

Qt: Spanish translation (by Kevin López)

Add option for whether rewinding restores save games

Qt: German translation (by Lothar Serra Mari)

Savestates now contain any RTC override data

Command line ability to override configuration values

Add option to allow preloading the entire ROM before running

GB: Video/audio channel enabling/disabling

Add option to lock video to integer scaling

Video log recording for testing and bug reporting

Library view

Debugger: Segment/bank support

GB: Symbol table support

GB MBC: Add MBC1 multicart support

Implement keypad interrupts

LR35902: Watchpoints

Memory search

Debugger: Execution tracing

Bugfixes:

LR35902: Fix core never exiting with certain event patterns

GB Timer: Improve DIV reset behavior

GBA Memory: Improve initial skipped BIOS state

GBA BIOS: Implement BitUnPack

ARM7: Fix MLA/*MULL/*MLAL timing

GBA: Fix multiboot ROM loading

Libretro: Fix saving in GB games (fixes #486)

LR35902: Fix pc overflowing current region off-by-one

GB MBC: Fix ROM bank overflows getting set to bank 0

Qt: Fix timing issues on high refresh rate monitors

GBA Savedata: Fix savedata unmasking (fixes #441)

Util: Fix overflow when loading invalid UPS patches

Tools: Fix recurring multiple times over the same library

GBA I/O: Handle audio registers specially when deserializing

Util: Fix highest-fd socket not being returned by SocketAccept

Qt: Fix linking after some windows have been closed

GBA Video: Fix wrong palette on 256-color sprites in OBJWIN

Windows: Fix VDir.rewind

SDL: Fix game crash check

SDL: Fix race condition with audio thread when starting

GB: Fix flickering when screen is strobed quickly

FFmpeg: Fix overflow and general issues with audio encoding

Qt: Fix crash when changing audio settings after a game is closed

GBA BIOS: Fix ArcTan sign in HLE BIOS

GBA BIOS: Fix ArcTan2 sign in HLE BIOS (fixes #689)

GBA Video: Don’t update background scanline params in mode 0 (fixes #377)

Qt: Ensure CLI backend is attached when submitting commands (fixes #662)

Core: Fix crash with rewind if savestates shrink

Test: Fix crash when loading invalid file

GBA Hardware: Fix crash if a savestate lies about game hardware

Test: Fix crash when fuzzing fails to load a file

GBA: Fix multiboot loading resulting in too small WRAM

Test: Don’t rely on core for frames elapsed

Test: Fix crash when loading invalid file

GBA Hardware: Fix crash if a savestate lies about game hardware

Test: Fix crash when fuzzing fails to load a file

Qt: Disable “New multiplayer window” when MAX_GBAS is reached (fixes #107)

LR35902: Fix decoding LD r, $imm and 0-valued immediates (fixes #735)

GB: Fix STAT blocking

GB MBC: Fix swapping carts not detect new MBC

GB Timer: Fix DIV batching if TAC changes

GB Video: Reset renderer when loading state

GBA BIOS: Fix INT_MIN/-1 crash

GBA Savedata: Update and fix Sharkport importing (fixes #658)

OpenGL: Fix some shaders causing offset graphics

Qt: Fix game unpausing after frame advancing and refocusing

GB Timer: Fix sub-M-cycle DIV reset timing and edge triggering

Core: Fix interrupting a thread while on the thread (fixes #692)

Core: Fix directory sets crashing on close if base isn’t properly detached

Misc:

SDL: Remove scancode key input

GBA Video: Clean up unused timers

Test: Add a basic test suite

GBA Video: Allow multiple handles into the same tile cache

VFS: Call msync when syncing mapped data

GBA Video, GB Video: Colors are now fully scaled

VFS: Allow truncating memory chunk VFiles

Debugger: Modularize CLI debugger

Core: Clean up some thread state checks

Debugger: Make building with debugging aspects optional

GBA Memory: Support for Mo Jie Qi Bing by Vast Fame (taizou)

GBA Memory: Support reading/writing POSTFLG

Util: Add size counting to Table

Qt: Move last directory setting from qt.ini to config.ini

3DS, PSP2, Wii: Last directory loaded is saved

GB Audio: Simplify envelope code

GB Audio: Improve initial envelope samples

Debugger: Add functions for read- or write-only watchpoints

GBA DMA: Refactor DMA out of memory.c

GBA DMA: Move DMAs to using absolute timing

All: Add C++ header guards

GBA I/O: Clear JOYSTAT RECV flag when reading JOY_RECV registers

GBA I/O: Set JOYSTAT TRANS flag when writing JOY_TRANS registers

Qt: Improved HiDPI support

Qt: Expose configuration directory

Feature: Move game database from flatfile to SQLite3

GB Audio: Start implementing “zombie” audio (fixes #389)

VFS: Fix some minor VFile issues with FILEs

Core: Add generic checksum function

Feature: Support ImageMagick 7

All: Move time.h include to common.h

CMake: Add ability to just print version string

Qt: Merge “Save” and “OK” buttons in shader options

SDL: Automatically map controllers when plugged in

Qt: Automatically load controller profile when plugged in

OpenGL: Add xBR-lv2 shader

GBA, GB: ROM is now unloaded if a patch is applied

Util: Add 8-bit PNG write support

Qt: Rename “Resample video” option to “Bilinear filtering”

GBA Video: Optimize when BLD* registers are written frequently

Core: Cores can now have multiple sets of callbacks

GBA: Ignore invalid opcodes used by the Wii U VC emulator

Qt: Remove audio thread

Qt: Remove audio buffer sizing in AudioProcessorQt

Qt: Re-enable QtMultimedia on Windows

FFmpeg: Return false if a file fails to open

FFmpeg: Force MP4 files to YUV420P

Qt: Make “Mute” able to be bound to a key

Core: Restore sleep callback

Qt: Add .gb/.gbc files to the extension list in Info.plist

Feature: Make -l option explicit

Core: Ability to enumerate and modify video and audio channels

Debugger: Make attaching a backend idempotent

VFS: Optimize expanding in-memory files

VFS: Add VFileFIFO for operating on circle buffers

Core: Move rewind diffing to its own thread

Util: Tune patch-fast extent sizes

Qt: Relax hard dependency on OpenGL

GB Video: Improved video timings

Core: List memory segments in the core

Core: Move savestate creation time to extdata

Debugger: Add mDebuggerRunFrame convenience function

GBA Memory: Remove unused prefetch cruft

GB: Trust ROM header for number of SRAM banks (fixes #726)

Core: Config values can now be hexadecimal

GB: Reset with initial state of DIV register

GB MBC: New MBC7 implementation

Qt: Better highlight active key in control binding

Core: Improved threading interrupted detection

Get it now in the Downloads section. Binaries are available for Windows, Ubuntu, macOS, 3DS, Wii, and Vita, and the source code is available for all other platforms.