After many months of delays mGBA 0.6.0 is finally available. This is a major feature release. Some of the more prominent features include a library view, translations to German, Spanish and Italian, and many new debugging features. A full list of changes follows after the cut.

Changes from 0.5.2

Features

Library view

Sprite viewer

Debugging console

Improved memory viewer

Memory search

Command line ability to override configuration values

Add option to allow preloading the entire ROM before running

Add option for whether rewinding restores save games

Savestates now contain any RTC override data

Add option to lock video to integer scaling

LR35902: Watchpoints

LR35902/GB-Z80 disassembler

GB: Tile viewer

GB: Video/audio channel enabling/disabling

GB: Symbol table support

GB MBC: Add MBC1 multicart support

GBA: Support printing debug strings from inside a game

GBA: Better cheat type autodetection

Implement keypad interrupts

Configuration of gamepad hats

Video log recording for testing and bug reporting

Debugger: Segment/bank support

Debugger: Execution tracing

Partial Python scripting support

Qt: German translation (by Lothar Serra Mari)

Qt: Spanish translation (by Kevin López)

Qt: Italian translation (by theheroGAC)

Bugfixes

ARM7: Fix MLA/MULL/MLAL timing

Core: Fix crash with rewind if savestates shrink

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

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

FFmpeg: Fix overflow and general issues with audio encoding

GB: Fix flickering when screen is strobed quickly

GB: Fix STAT blocking

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

GB MBC: Fix swapping carts not detect new MBC

GB Timer: Improve DIV reset behavior

GB Timer: Fix DIV batching if TAC changes

GB Video: Reset renderer when loading state

GBA: Fix multiboot ROM loading

GBA: Fix multiboot loading resulting in too small WRAM

GBA BIOS: Implement BitUnPack

GBA BIOS: Fix ArcTan sign in HLE BIOS

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

GBA BIOS: Fix INT_MIN/-1 crash

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

GBA I/O: Handle audio registers specially when deserializing

GBA Memory: Improve initial skipped BIOS state

GBA Savedata: Fix savedata unmasking (fixes #441)

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

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

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

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

LR35902: Fix core never exiting with certain event patterns

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

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

OpenGL: Fix some shaders causing offset graphics

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

Qt: Fix timing issues on high refresh rate monitors

Qt: Fix linking after some windows have been closed

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

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

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

Qt: Fix game unpausing after frame advancing and refocusing

SDL: Fix game crash check

SDL: Fix race condition with audio thread when starting

SDL: Fix showing version number

Test: Fix crash when loading invalid file

Test: Fix crash when fuzzing fails to load a file

Test: Don’t rely on core for frames elapsed

Test: Fix crash when loading invalid file

Test: Fix crash when fuzzing fails to load a file

Tools: Fix recurring multiple times over the same library

Util: Fix overflow when loading invalid UPS patches

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

Windows: Fix VDir.rewind

Miscellaneous

All: Add C++ header guards

All: Move time.h include to common.h

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

CMake: Add ability to just print version string

Core: New, faster event timing subsystem

Core: Clean up some thread state checks

Core: Add generic checksum function

Core: Cores can now have multiple sets of callbacks

Core: Restore sleep callback

Core: Move rewind diffing to its own thread

Core: Ability to enumerate and modify video and audio channels

Core: List memory segments in the core

Core: Move savestate creation time to extdata

Core: Config values can now be hexadecimal

Core: Improved threading interrupted detection

Debugger: Modularize CLI debugger

Debugger: Make building with debugging aspects optional

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

Debugger: Make attaching a backend idempotent

Debugger: Add mDebuggerRunFrame convenience function

Feature: Move game database from flatfile to SQLite3

Feature: Support ImageMagick 7

Feature: Make -l option explicit

FFmpeg: Return false if a file fails to open

FFmpeg: Force MP4 files to YUV420P

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

GB: Reset with initial state of DIV register

GB MBC: New MBC7 implementation

GB Audio: Simplify envelope code

GB Audio: Improve initial envelope samples

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

GB Video: Improved video timings

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

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

GBA DMA: Refactor DMA out of memory.c

GBA DMA: Move DMAs to using absolute timing

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

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

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

GBA Memory: Support reading/writing POSTFLG

GBA Memory: Remove unused prefetch cruft

GBA Timer: Improve accuracy of timers

GBA Video: Clean up unused timers

GBA Video: Allow multiple handles into the same tile cache

GBA Video, GB Video: Colors are now fully scaled

GBA Video: Optimize when BLD* registers are written frequently

OpenGL: Add xBR-lv2 shader

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

Qt: Improved HiDPI support

Qt: Expose configuration directory

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

Qt: Automatically load controller profile when plugged in

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

Qt: Remove audio thread

Qt: Remove audio buffer sizing in AudioProcessorQt

Qt: Re-enable QtMultimedia on Windows

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

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

Qt: Relax hard dependency on OpenGL

Qt: Better highlight active key in control binding

SDL: Remove scancode key input

SDL: Automatically map controllers when plugged in

Test: Add a basic test suite

Util: Add size counting to Table

Util: Add 8-bit PNG write support

Util: Tune patch-fast extent sizes

VFS: Call msync when syncing mapped data

VFS: Allow truncating memory chunk VFiles

VFS: Fix some minor VFile issues with FILEs

VFS: Optimize expanding in-memory files

VFS: Add VFileFIFO for operating on circle buffers

Changes from 0.6 beta 1

Features

Qt: Italian translation (by theheroGAC)

Qt: Updated German translation

Bugfixes

Core: Fix rewinding getting out of sync (fixes #791)

GB Audio: Fix incorrect channel 4 iteration

GB Audio: Fix zombie mode bit masking

GB Serialize: Fix timer serialization

GB Video: Fix LYC regression

GBA SIO: Improve SIO Normal dummy driver (fixes #520)

GBA Timer: Fix count-up timing overflowing timer 3

PSP2: Use custom localtime_r since newlib version is broken (fixes #560)

Qt: Fix memory search close button (fixes #769)

Qt: Fix window icon being stretched

Qt: Fix initial window size (fixes #766)

Qt: Fix data directory path

Qt: Fix controls not saving on non-SDL builds

Qt: Fix translation initialization (fixes #776)

Qt: Fix patch loading while a game is running

Qt: Fix shader selector on Ubuntu (fixes #767)

Qt: Fix GL-less build

Qt: Fix Software renderer not handling alpha bits properly

Qt: Fix screen background improperly stretching

SDL: Fix cheats not loading

Miscellaneous

GB Serialize: Add MBC state serialization

GBA Memory: Call crash callbacks regardless of if hard crash is enabled

GBA Timer: Improve accuracy of timers

PSP2: Update toolchain to use vita.cmake

Qt: Add language selector

Qt: Minor text fixes

Qt: Move shader settings into main settings window

Qt: Dismiss game crashing/failing dialogs when a new game loads

Qt: Properly ship Qt translations

SDL: Remove writing back obtained samples (fixes #768)

Downloads

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

If you enjoy using mGBA and wish to give back, there is a list of ways to donate on the donations page, including an mGBA Patreon.