• Print

medusa alpha 1


It’s been teased, it’s been joked about. No one could quite tell if the April 1 article was a joke or not. Well, allow me to formally announce to you: it’s real. Every single word was true. I’ve been working tirelessly for the past several months to bring a DS emulator up to a good enough point to release a preview build. And today, I think I’m there. So allow me to introduce another new Nintendo DS emulator: with added DS support, mGBA will now be medusa.


Before you get too excited, please allow me to state that this is still a very early work in progress—this isn’t even a 0.1 build of medusa; it’s still buggy, slow, and incomplete. This is more of a proof of concept to show off what I’ve been working on since June of 2016, and the reason mGBA 0.6.0 still isn’t out. While a good number of games work relatively well, virtually every game has graphical bugs, and many have even worse bugs. So caveat emptor, this is not a real release, and medusa won’t be replacing any other DS emulators any time soon.


While medusa is still an alpha quality software, it will be versioned separately from mGBA. Releasing hopefully soon will be mGBA 0.6.0, and on a separate schedule, medusa 0.1.0 will release. Sometime after mGBA 1.0 is released, the medusa branch will be merged back into mGBA and the combined product will become medusa 2.0. This will likely happen sometime in 2018, but that’s still up in the air. There’s a lot of work still to be done. Until then, medusa will contain all of the features of mGBA releases, and likely some experimental features that aren’t quite polished for a stable release. Every so often, mGBA master will be merged into the medusa branch so as to keep it up to date. As such, releases of medusa may contain unpolished features from mGBA master up until the merge.


Currently, about 80% of the DS’s hardware is implemented, and many games are fully playable. However, the software rasterizer for the 3D graphics is still very slow. This release should help those interested in finding bugs contribute to medusa before 0.1 is released, but it is not recommended for actual playing of games.


Some of the more important features that are still missing are:

  • Savestates
  • Several graphical features including edge marking, toon shading and fog
  • Some audio features such as the square wave and noise channels
  • Microphone support
  • HLE BIOS and firmware


A more comprehensive and up-to-date list can be found in the readme.


Meanwhile, many popular games have pretty serious issues:

  • Mario Kart DS races run at half speed
  • The World Ends With You locks up during the new game intro
  • Pokémon Diamond/Pearl/Platinum have a lot of graphical issues affecting battles
  • Pokémon Black/White have graphical issues during the battle transition
  • Some graphics are missing in New Super Mario Bros. and WarioWare: Touched!, among other games
  • Star Fox Command’s text is illegible


Please report any issues you find to the bug tracker; the more that are reported, the more that can be fixed. If you wish to discuss medusa, there are both forums and the #medusa-emu channel on FreeNode


As always, downloads can be found on the download page. Due to the heavy use of 64-bit math in the renderer, there are now 64-bit Windows builds. There will also be separate nightlies for medusa, as there are for mGBA master. The source code can be found on GitHub.


Please enjoy all of the hours I’ve put into medusa and mGBA, and here’s hoping for a better future for DS emulation. If you’re looking to give back, I always appreciate pledges on the mGBA Patreon, and more ways are listed on the donate page.


0.6.0: (Future)



  • 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



  • 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 mgba.io/i/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 mgba.io/i/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



  • 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 mgba.io/i/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


medusa alpha 1: (2017-04-08)



  • Partial DS Support


  • SDL: Prevent crash on cores with no audio
  • ARM7: Decode MCR/MRC
  • ARM7: Clean up instruction decoding for future expandability
  • Core: Don't save state if core fails to serialize






blog comments powered by Disqus