mGBA 0.6.0
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.