A new release of mGBA, version 0.3.0, is available. This is a major feature release. Some of the more prominent features include the addition of support for rotation and tilt sensors on controllers with analog sticks, default controller profiles for some of the more common controllers, improved synchronization, the beginning of the debug suite, and much more. An extensive list follows after the cut.

Features:

  • Ability to hide individual background layers, or OBJs
  • Ability to mute individual audio channels
  • Palette viewer and exporter
  • Volume control
  • More shortcuts are editable (e.g. quick save/load)
  • Rewind now shows the frame after rewinding
  • Import/Export of GameShark/Action Replay snapshots
  • Add “Step backwards” item for single increment rewind
  • Deadzone estimation for game controllers
  • Analog inputs can be used for shortcuts
  • Menu items for specific solar sensor brightness levels
  • Remappable controls for tilt and gyroscope sensors
  • Status messages for actions taken while a game is running (e.g. save/load state)
  • Memory inspector
  • Screensaver can now be suspended while a game is running
  • Load/save the most recent savestate slot
  • Support varible speed (PWM) rumble
  • Ability to cap fast forward speed
  • Finer control over FPS target
  • Holdable shortcut for rewinding one frame at a time
  • Ability to boot directly into the BIOS
  • Preliminary support for yanking out the game pak while a game is running
  • Thumb-drive mode by putting a file called portable.ini in the same folder
  • Configurable display driver, between software and OpenGL
  • Undo-able savestate loading and saving
  • Controller profiles now store shortcut settings
  • Default controller profiles for several common controllers
  • Libretro now supports BIOS, rumble and solar sensor
  • Implement BIOS call Stop, for sleep mode
  • Automatically load patches, if found
  • Improved video synchronization
  • Configurable audio output sample rate

Bugfixes:

  • ARM7: Fix SWI and IRQ timings
  • ARM7: Fix Thumb MUL timing
  • ARM7: Fix timing of multiplies to use N cycles
  • ARM7: ARMHotplugDetach should call deinit
  • Debugger: Fix use-after-free in breakpoint clearing code
  • GBA: Fix crash if a 512kb flash save is loaded when a game has a 1Mb flash override
  • GBA: Cap audio FIFO read size during deserialization
  • GBA: Check for corrupted savestates when loading
  • GBA: Check for improperly sized savestates when loading
  • GBA: Check for savestates made from differently sized ROMs
  • GBA: Fix calls to endian-independent loadstores
  • GBA: Fix timing of reading from timer registers
  • GBA: Ensure cycles never go negative
  • GBA Audio: Force audio FIFOs to 32-bit
  • GBA Audio: Fix audio pitch changing when adjusting buffer size
  • GBA Audio: Fix sample order in audio channel 3
  • GBA Audio: Fix 8-bit writes to audio channel 3 frequency
  • GBA Cheats: Fix Pro Action Replay and GameShark issues when used together
  • GBA Memory: Improve Thumb open bus behavior
  • GBA Memory: Fix potential DMA issue when loading a savestate
  • GBA Memory: Fix load/store multiple video memory waitstates
  • GBA SIO: Fix reseting when there are SIO devices attached
  • GBA Video: Blended sprites should never have other effects applied
  • GBA Video: Fix out-of-bounds tiles in mosaic
  • GBA Video: Fix windows not affecting sprites
  • GBA Video: Prevent tiles < 512 from being used in modes 3 - 5
  • GBA Video: Fix timing on first scanline
  • Qt: Better cleanup when a game crashes
  • Qt: Fix open ROM dialog filtering for archive formats
  • Qt: Cap the maximum number of multiplayer windows
  • Qt: Fix maximum year in sensor override
  • Qt: Fix window being too tall after exiting fullscreen
  • Qt: Fix a missing va_end call in the log handler lambda within the GameController constructor
  • Qt: Fix analog buttons not getting unmapped
  • Qt: Fix passing command line options
  • Qt: Fix crashes on Windows by using using QMetaObject to do cross-thread calls
  • SDL: Fix SDL build when OpenGL is missing
  • Util: Allow loading IPS patches that grow the ROM
  • VFS: Fix resource leaks if some allocations fail
  • VFS: Fix line-reading to return proper values
  • Video: Fix an issue with very long filenames
  • Util: Fix formatting of floats

Misc:

  • All: Add –help flag for command line programs
  • All: Fix sanitize-deb script to set file permissions properly if run as (fake)root
  • All: Enable static linking for Windows
  • All: Enable static linking for OS X
  • All: Threads are now named
  • All: Proper handling of Unicode file paths
  • ARM7: Add emulation for Undefined CPU mode
  • ARM7: Reduce the size of the Thumb instruction table
  • GBA: Add status log level
  • GBA: GBARewind now returns how many states it has rewound
  • GBA: SIO logging layer
  • GBA BIOS: Stub out SoundBias
  • GBA: More accurate cycle estimation for ROM prefetch and flash save chips
  • GBA: Don’t include GBACLIDebugger struct unless needed
  • GBA: Savedata is now synced shortly after data finishes being written
  • GBA: Process multiple timer events at once, if necessary
  • GBA Audio: Implement audio reset for channels A/B
  • GBA Audio: Process multiple audio events at once, if necessary
  • GBA Hardware: Backport generic RTC source into core
  • GBA Input: Allow axes and buttons to be mapped to the same key
  • GBA Memory: Run multiple DMAs in a tight loop if they all occur before present
  • GBA SIO: Add a dummy driver for Normal mode
  • GBA Thread: Add functionality for running callbacks on the GBA thread
  • GBA Thread: Split GBASync into a separate file
  • GBA Video: Refactor software renderer into separate files
  • GBA Video: Slightly optimize mode 0 mosaic rendering
  • Debugger: Free watchpoints in addition to breakpoints
  • Qt: Handle saving input settings better
  • Qt: Move GL frame drawing back onto its own thread
  • Qt: Fast forward (held) option moved from Other to Emulation menu
  • Qt: Show version info in window title
  • Qt: Migrate multiplayer window handling into GBAApp
  • Qt: Unified file opening and saving with last location
  • Qt: Fix windows being resizable when they shouldn’t have been
  • Qt: Only hide cursor in full screen
  • Qt: Replace pause-after-frame mutex with an atomic
  • Qt: Add application icon and XDG desktop files
  • Qt: Rename “Fullscreen” to “Toggle fullscreen”
  • Qt: Don’t save window size when entering fullscreen
  • Qt: Make the default fullscreen binding for Windows be Alt-Enter
  • Qt: Gamepads can now have both buttons and analog axes mapped to the same key
  • Qt: Increase usability of key mapper
  • Qt: Show checkmark for window sizes
  • Qt: Set window path to loaded ROM
  • Perf: Ability to load savestates immediately on launch
  • SDL: Properly check for initialization
  • SDL: Clean up initialization functions
  • SDL: Clean up GL context
  • Util: Allow disabling the threading code entirely
  • VFS: Add sync method to force syncing with backing

Get it now in the Downloads section. Binaries are available for Windows, Ubuntu and OS X, and the source code is available for all other platforms.