loading_reduced.jpg

0.9.4 / 09-03-2022

MelonDS

Accuracy

Performance

Features

competition

MelonDS is a work-in-progress Nintendo DS emulator aiming for better performance while being able to to emulate Wi-Fi and local multiplayer capabilities. It has many quality of life features such as save states, Joystic support, screen positioning, RTC, microphone and much more..! It's developed by a former contributor of DeSmuME and even has libretro core available. There's also active development of an Android port.


It also requires DS BIOS/firmware copies

  • bios7.bin, 16KB: ARM7 BIOS

  • bios9.bin, 4KB: ARM9 BIOS

  • firmware.bin, 128/256/512KB: firmware


Please note firmware boot requires a firmware dump from an original DS or DS Lite. DS firmwares dumped from a DSi or 3DS aren't bootable and only contain configuration data, thus they are only suitable when booting games directly.

--

Windows: None Reported

Mac: Install the appropriate libraries beforehand with the Homebrew Package Manager.

         In Terminal, type  "brew install qt5 sdl2 libslirp"

Most Recent Changes

--0.9.4--

I know this has been a long wait, but finally, here it is: melonDS 0.9.4 is out.

It has been numbered this way because 1.0 is going to be a milestone release: we want to get local multiplayer stable for 1.0.

Anyway, what's new in melonDS 0.9.4? A bunch of improvements that should make things easier for the average end user.

Most notably, in DS mode, melonDS no longer requires you to obtain BIOS/firmware files. You can always supply these if you have them around, for a more accurate experience, but if you don't, melonDS will default to using DraStic's FreeBIOS clones. Similarly, a barebones firmware with default configuration data will be generated.

However, for now, DSi mode still requires you to provide BIOS/firmware/NAND dumps. We are studying ways to get around this requirement, but it's going to take us some work.

There is also a new dialog for firmware settings, which allows you to override the firmware settings with your own. This is intended for when using the default internal firmware, but it can also override the settings in an external firmware, and it even works in DSi mode.

DLDI support has also been upgraded: it is now possible to have melonDS generate a SD image for DLDI on its own, and it is also possible to have said SD image synced to a folder on your computer. This means that you can place files in that folder and they will show up in the emulated DLDI SD card, and conversely, any changes made to the emulated SD card will be reflected to the folder on your hard drive.

While this has been tested extensively, we still recommend that you keep a backup of any folder you intend to use with this, just in case. You can also set your DLDI SD card to be read-only if you don't need it to be writable.

All of this is also supported for the DSi SD card in DSi mode.

Support for ARM9 PU exceptions in interpreter mode has been added. For commercial games, this doesn't mean a lot, other than making certain crashes work like on hardware. But this may definitely come in handy for homebrew developers, as that means exception handlers will work as they should.

We have added a much requested feature: custom paths for saves, savestates and cheat files. The default behavior is that melonDS will place these files alongside your ROMs as it has always done, but you can specify paths where you want these files to be placed if you don't want them to pollute your ROM directory.

In the same vein, the File menu has been revamped to hopefully make the process of loading ROMs more intuitive. This post already talks about it in detail, so read it if you have any doubts.

Generic has been working on properly supporting wifi power saving. This is probably not perfect yet, but it should fix the weird issues you can encounter in Pokémon games when communications are enabled.

We also have some new fun features: Github user 2jun0 made a RAM search dialog, which may come in handy to those who want to make cheat codes. Rayyan also made a new dialog for changing the emulated battery level, which may come in handy to homebrew developers and such, and he's been remaking the input config dialog to be all fancy.


Changes

  • Redesign of the Input dialog (Rayyan)

  • Use DraStic open-source DS BIOS replacement (Swordfish90, asiekierka)

  • Generate non-bootable firmware replacement (Swordfish90, asiekierka, others)

  • Support for syncing DLDI/DSi SD image to a folder (Arisotura)

  • ARM9 PU (code/data abort) support in interpreter mode (Arisotura)

  • Fix ADPCM decoding bug resulting in potential crackling (Arisotura)

  • Block sound DMA from reading the ARM7 BIOS (Arisotura)

  • Smarter SDL initialization (andrigamerita, Nadia, Arisotura)

  • Properly center the main window on macOS (Nadia)

  • Don't try to render if the emulator is inactive (Nadia)

  • Fix potential issues with DSi title importing (Nadia, Epicpkmn11)

  • Custom path support (Arisotura)

  • Fix nifi socket init on BSD and macOS (Nadia)

  • Add support for zero addresses in AR codes 3xxxxxxx to Axxxxxxx (Arisotura)

  • Lower window refresh rate if running too fast (RSDuck)

  • Wifi power-saving support (RSDuck)

  • Allow swap-screen hotkey to swap between displaying only top screen and only bottom screen (ZackWeinstein)

  • Add RAM search dialog (2jun0)

  • Add power management dialog for setting battery parameters (Rayyan)



--0.9.3--

Fix macOS right modifier detection (Nadia)
• Fill most gaps in ROMList (Arisotura)
• Fix touchscreen code in non-hybrid layout mode (Arisotura)
• GBACart: simulate open-bus decay roughly (Arisotura)
• Frontend: handle tablet and touch events (Generic aka RSDuck)
• Implement NO$GBA debug registers (BlueTheDuck)
• Make Setup Cheats option reappear on macOS (Nadia)
• Add frame step hotkey (Yukitty, additional fixes by Gal20)
• Add DSP code (PoroCYon, purringChaos)
• Save window state (Arisotura)
• JIT optimisations and fixes (Generic aka RSDuck)
• Add ROM info dialog (WaluigiWare64)
• Allow using DSi footer within NAND images (MightyMax)
• More accurate NWRAM implementation (MightyMax)
• Only open microphone if necessary (Arisotura)
• Fix undo load savestate loading (Generic aka RSDuck)
• Fix pause when inactive (Generic aka RSDuck)
• Add audio interpolation (Arisotura)
• Add SOUNDBIAS and optional 10bit audio (Nadia)
• Patch touchscreen calibration data in DSi mode (Arisotura)
• Add DSi title manager (Arisotura)
• Fix threaded rasteriser deadlock when VCount is moved (Generic aka RSDuck)
• Add preliminary DSi-mode direct boot (MightyMax, Arisotura)
• More accurate DMA timings (Arisotura)


--0.9.2--
• fix JIT on ARM Macs
• add proper Mac builds
• GX: optimize single-param commands
• add recent-files menu (abcdjdj)
• add support for loading files from archives
• fix JIT bugs
• fix wifi bugs
• improve performance of save-memory writeback
• add hotkey for swapping screens
• 3D/GL: attempt fixing various bugs
• fix OpenGL scaling on hiDPI displays
• rework GPU2D for easier integration of full GL rendering
• rework NDSCart and GBACart to make it easier to implement new cart types
• add support for NAND save memory (WarioWare DIY, Jam with the Band)
• fix bugs in DSi I2C and SD/MMC interfaces
• new screen modes

Show Previous Changes

--0.9.1--

  • add fullscreen hotkey

  • remove hardcoded F11-debug key (oops)

  • fix some gaps in the IO handlers

  • add ability to run unlaunch'd DSi NANDs

  • add preliminary camera support (feeds fixed stripe pattern)

  • fix potential bugs with tight timers (fixes ZXDS)

  • SPU: small optimization to the mixer

  • better framerate limiter

  • fix several JIT issues

  • GPU: lay bases for EVIL PLANS

  • GPU: emulate separate scroll register for 3D layer scrolling

  • some corrections to the ROM savetype list

  • a bunch of misc fixes, as usual



--0.9--

  • merge in experimental DSi support

  • 2D: delay palette lookup for sprites

  • 2D: some attempts at fixing mosaic

  • CP15: only update PU regions when actually needed

  • 2D: fix sprite Y-flip

  • 3D/GL: fix transparency bugs

  • add warning against hacked firmwares

  • fix libpcap bug (i404788)

  • better file handling code (Nadia)

  • GBA slot and solar sensor support (rzumer)

  • add support for AR cheat codes

  • fix handling of ROMs with encrypted secure area

  • 3D: change clipping to be closer to hardware

  • 3D: implement DISP_1DOT_DEPTH

  • 3D: more accurate viewport transform

  • build fixes (Nadia)

  • add JIT recompiler (RSDuck)

  • new Qt UI

  • SPU: only start channels when they can actually run

  • 2D: allow writes to DISPCNT/masterbright/capture/dispFIFO regardless of POWCNT

  • SPU: don't process channels with len<4

  • 3D/GL: cleaner polygon generation code

  • 3D/GL: add attempt at reducing warping on quads/etc

  • 3D: add missing variables to savestates

  • wifi: avoid potential out-of-bounds writes with invalid RX buffer setups

  • 3D/GL: fix issues with framebuffer handling

  • make MAC randomization optional

  • make software renderer the default

  • add basic DLDI



--0.8.3--

  • fix ARM 'shift by register' operands (fixes Mario Party DS 'Stick and Spin' minigame)

  • remove glBindImageTexture() (not needed and requires GL 4.2)

  • fix input bugs when using Ctrl/Alt/Shift keys for buttons

  • fix possible crashes when exiting (again. heh)

  • 2D: support forcedblank+masterbrightness

  • 2D: fill gaps in implementation (mode6 on sub GPU, mode7, 'prohibited' modes/sizes for OBJ and largeBG)

  • build fixes

  • fix division edge case (xperia64)

  • new FPS limiter, audio sync, vsync for OpenGL

  • add warning message if romlist.bin is not found (Zettymaster)



--0.8.2--

  • fix GL renderer not working at all on certain setups (RSDuck)

  • add 32bit writes to certain IO ports (fixes some freezes)

  • OpenGL: disable vsync under Windows

  • fix bug when mapping a joystick axis but no button

  • set kMaxIterationCycles to 64 (old value 16)

  • fix potential crash when pressing Escape with menus opened

  • OpenGL: remove shitty hack

  • OpenGL: better lines

  • fix potential crash when closing emu



--0.8.1--

  • fix potential issue generating the config file path under Linux

  • fix 3D/2D blending bugs under OpenGL

  • fix potential crash under the software renderer when display capture is used

  • basic, optional OSD system

  • add support for setting key mappings to none

  • add fast-forward and pause/reset hotkeys

  • fix crash when closing an input config dialog during the joystick mapping process

  • fix bugs when changing video settings with no game loaded

  • faster IRQ checks

  • faster VRAM reads

  • 3D/OpenGL: preliminary edge marking

  • 3D/OpenGL: fix fog alpha

  • 2D: render sprites one scanline in advance (iCarly - Groovy Foodie)

  • 3D/software: fix rendering of line polygons

  • 3D/OpenGL: add proper-ish support for line polygons

  • support multiple joysticks

  • add support for mapping keys with modifiers

  • add support for mapping joystick axes alongside buttons, remove hardcoded axis 0/1 mapping

  • overall better input/hotkey code



--0.8--

  • fix CP15 init during direct boot

  • do not apply delays to cart transfers when the WR bit is set

  • misc fixes

  • OpenGL renderer and upscaling



--0.7.4--

  • fix potential spurious sounds when starting melonDS

  • fix crash when using microphone with a WAV that has multiple channels

  • small optimizations and tweaks

  • wifi: add wifi settings dialog, with libpcap adapter list

  • wifi: first version of indirect (non-libpcap) mode

  • move most of the config settings to a platform-specific array (really just making it easier to port melonDS)



--0.7.3--

  • fix STRD_POST (fixes Just Sing - Vol 2 music)

  • add support for POWCNT1 (fixes Imagine - Teacher)

  • 2D: fix fade effects to semitransp sprites and 3D layer (fixes Devil Survivor)

  • 3D: truncate W to 24 bits before viewport transform. do not render polygons with any W=0.

  • attempt at fixing hiDPI under Windows

  • fix input config dialog crashes under Linux

  • add support for hotplugging joysticks

  • make 'savefile relocation when using savestates' disabled by default

  • remember whether main window is maximized

  • add menu for setting main window to an integer size

  • init save memory to 0xFF instead of 0x00

  • romlist.bin: index games by serial rather than CRC. updated romlist.

  • add support for 128K EEPROM (Pokémon Mystery Dungeon - Explorers of Sky)

  • make nocashprint also work in ARM mode

  • GX: always latch rendering engine registers, even when not flushing

  • GX: fix polygon timings when polygon is rejected by culling/clipping

  • rewrite main emu loop to use absolute timestamps



--0.7.2--

  • microphone input (physical mic, noise, wav)

  • nocash-style console printing

  • send console output to cmd under Windows

  • corrections to romlist.bin

  • 2D: fix blending for semitransp sprites and 3D layer when windows are used (bypasses window 'color effect enable' check)

  • 3D: fix 'equal' depth test margin in Z-buffering mode, fixes Puzzlers World 2

  • SPU: add support for channel repeat mode 3 (behaves same as 1)

  • SPU: always clear channel buffers, even when running ch0-7 in mode 3 (fixes American Girl - Kit Mystery Challenge!)

  • libui/windows: cache ideal size for uiButton. fixes lag in input config dialog

  • close/open lid, sleep mode

  • hotkey system

  • audio settings dialog, with volume slider and microphone settings

  • libui/gtk: remember last directory in which a ROM was opened

  • libui/gtk: attempts at fixing input config dialog crashes

  • framerate limiter toggle (abcdjdj)

  • add Linux libpcap library names (dogtopus)

  • betterer readme (Aqueminivan)

  • GX: set busy flag immediately when putting things in the FIFO, fixing possible race condition

  • GX: revise timing for SWAP_BUFFERS command

  • add flatpak manifest (cpba)



--0.7.1--

  • fix glitched lines in 3D

  • fix backwards windows

  • more accurate GX timings

  • more accurate DMA and memory timings

  • check for config/etc files in melonDS's directory explicitly

  • allow joystick axis events even when no dpad buttons are mapped

  • detect savemem type from database instead of huge messy fucky code



--0.7--

  • fix possible crashes when exiting

  • wifi: add basic access point melonAP (very beta)

  • fix SMULWx/SMLAWx opcodes, fixes Sims 2 music

  • add support for loading BIOS/firmware files and config file from AppData or ~/.config/melonds or from the executable directory (hcorion)

  • add 32-bit IPCSYNC reads/writes (Dirbaio)

  • add savestates

  • 3D: (hopefully) fix bug in shadow/AA interaction (visible in the MKDS character select preview, bottom border of the platform thing)



--0.6--

  • don't fail completely if SDL haptic init fails (bentley)

  • fail gracefully when ROM loading fails

  • support Unicode filenames under Windows

  • FPS counter is back (sorry!)

  • allow Windows file picker to navigate through shortcuts (instead of trying to load the shortcut as a ROM)

  • screen layout/sizing/scaling modes, screen gap, rotation

  • toggle for screen linear filtering

  • add support for 8bit GXSTAT accesses

  • reset IE/IF properly

  • fix sound capture/playback for things like surround



--0.6b--

  • fix screen option menu init

  • add icon

  • add resampler with small tolerance to prevent sound clicks/pops at fullspeed



--0.5--

  • new UI, more stable, less windows all over the place

  • wxWidgets ditched, lost some weight

  • 2D: allow reading BLDALPHA

  • GPU: fix potential issues with VCount write

  • implement 8bit accesses to some registers

  • 2D: mosaic (not quite right for rotscaled sprites)

  • 3D: fix culling

  • allow 128KB firmwares from DSi/3DS

  • 3D: more accurate fog

  • 3D: more accurate polygon edges (but not perfect)

  • 3D: antialiasing

  • 3D: misc optimizations



--0.4--

  • implement access modes for certain IO registers that were unhandled

  • actually implement RCNT instead of hardcoding it

  • wifi: emulation of multiplayer cmd/reply/ack transfers

  • wifi: more accurate RFSTATUS/RFPINS

  • wifi: some games can go into multiplayer now (Pictochat, NSMB, Pokémon known working)

  • improved savemem detect heuristic

  • implement firmware write, fix SPI bugs

  • accurate emulation of 'main memory display FIFO'

  • 2D: fix render/capture order

  • 2D: implement mode6 large BG

  • 2D: fix bitmap BG sizes

  • 2D: fix rotscaled bitmap sprites

  • 3D: fix missing term in MatrixTranslate

  • 3D: fix toon highlight mode

  • 3D: fix boxtest bug

  • 3D: accurate viewport transform

  • 3D: polygon Y-sorting

  • 3D: more accurate interpolation, still not perfect

  • 3D: more accurate Z and W transforms, fix some cases of Z-fighting

  • 3D: separate polygonID attributes for opaque and translucent pixels

  • 3D: start documenting and implementing depth test edge cases

  • emulate delays for SPI transfers and div/sqrt

  • misc bugfixes/additions as usual



--0.3--

  • set POSTFLG when booting games directly, fixes Pokémon games and likely others

  • fix bug with cart DMA, booting a game from the firmware should be stable now

  • better emulation of cart transfer delays

  • better save type heuristics

  • support for writing to VCount

  • 2D: fix display capture blending modes

  • 2D: implement X-flip for bitmap sprites (oops)

  • 3D: fix mode3 (vertex) texcoord generation (Eledees no longer looks like your TV decoder broke)

  • 3D: fix Z-buffering

  • 3D: attempt at fixing culling, works better

  • 3D: latch all rendering-related registers upon VBlank

  • 3D: delay rendering start a bit, for games that run late

  • 3D: optional threaded renderer

  • 3D: change renderer to work per-scanline; accurate stencil buffer

  • 3D: fix alpha calculation when alphablending is disabled via DISP3DCNT

  • 3D: fog and edge marking

  • wifi: more functionality emulated, attempt at sending/receiving data

  • misc bugfixes and optimizations

  • better framerate limiter



--0.2--

  • preliminary sound

  • various compatibility improvements and fixes

  • various little speedups too

  • cart transfer delays emulated

  • RTC uses system time

  • wifi stub -- games requiring wifi functionality shouldn't hang anymore

  • 2D: windows

  • 2D: various fixes to display capture

  • 3D: toon/highlight shading, shadows, polygonID

  • 3D: box test, pos test, vec test



--0.1--

First release.