- Joined
- Jan 25, 2024
- Messages
- 12,301
- Points
- 38
- Age
- 39
- Location
- USA
- Website
- gameparadise.org
- Credits
- 206,669
melonDS is a Nintendo DS emulator mainly developed by Arisotura (@StapleButter). It was first ported to the Switch by @Hydr8gon. I'm responsible for several optimisations and the current port. Depending mostly on whether a game utilises the 3D hardware of the DS a lot of games already reach fullspeed without overclocking.
The last few releases of my continuation where done in Hydr8gon's thread which quickly resulted in a lot of confusion.
For those coming from older versions of my port, using the /melonds directory located at the sd card root is still possible.
Since Release 5 the JIT recompiler isn't enabled by default, so make sure to enable (under Emulation Settings), since the interpreter is pretty slow.
Atmosphere title replacement to launch the hbmenu is the only supported method of running melonDS!
If you don't know what that means: press R while starting any game from the Switch's main menu to enter the hbmenu, don't use the album!
Release 6, fix 1:
Just a few bug fixes (the pendulum on the title screen in Chrono Trigger, several things in Mortal Kombat and a freeze in Pokemon Platinum, likely also in Diamond/Perl).
Release 6:
This release is a big one, because we finally hit fullspeed in most games including 3d ones! This is all thanks to the new 2D and 3D renderers which run on your Switch's GPU (which previously was only used for the GUI and putting the video output onto the screen) instead of CPU.
The 3D renderer doesn't use the builtin triangle drawing functionality melonDS's OpenGL renderer does, thus it doesn't have issues like it (https://github.com/Arisotura/melonDS/issues?q=ispen+is:issue+label:OpenGL). Instead it's basically the good old software rasteriser but translated to run on GPUs thus ideally it should have the same pretty amazing compability.
Both the new 2D and the new 3D renderer are implemented using deko3D for minimal CPU usage compared to OpenGL, though I want to port both of them back to OpenGL for desktop melonDS. In the future there's the possibility for some enhancements like high resolution rendering with less issues than the OpenGL renderer currently has (I'm sure yet whether Switch can handle this, so don't get your hopes too high on this).
For older versions look inside the spoiler.
How can the emulation be paused?
Press ZL and ZR at the same time.
How can I fast forward?
By pressing either ZL or ZR depending which button is used to do a touchscreen click (which depends on whether Left handed mode is enabled in the Input settings). Note that this is not available in gyro mode, because there this button is used for recalibration.
What do the Block Size, Branch Optimisations, Literal Optimisations and Fast Memory settings do?
Ideally they can stay enabled/at maximum all the time because they enable optimisations beneficial for the performance. But if there's an issue with the JIT recompiler it can be tracked down faster. Only touch them if something unexpected happens and mention which (if any) setting makes a difference in bug reports.
I want to play with a Flip Grip. Which settings should I use?
Use the Global Rotation option which rotates the entire GUI. Shout-out here to @uzimakiuchiha who got me a Flip Grip!
I want to play a game where the DS is held side ways (like e.g. Dr Kawashima's Brain Training), which should I do?
For this case it's the best to use the Screen rotation in the Display settings, once a game is launched (it rotates the buttons as well, as if you're holding the DS that way).
How can I quickly switch the focussed screen?
Press down the right stick. There's also an automatic mode where we the main screen is guessed in the display settings.
How can I only display one screen at a time (and for some reason I want it to be stretched across the whole screen ruining all proportions)?
Go into the Display settings. Set Top aspect ratio and Bottom aspect ratio to 16:9 and then set Screen sizing to either Top only or Bottom only.
How do I use gyro control?
First enable it in the Input settings. Press ZL or ZR (depending on whether you enabled Left handed mode in the Input Settings) to calibrate the rotation. Since this utilises the gyroscopes (and not IR like the Wiimote, which gives an absolute position) it's only based on it's rotation, so it needs recentering if you change the way you hold the Switch/Joy-Con.
How can I change the access the DS menu (e.g. for changing the system language)?
Press Boot Firmware or disable the setting Direct boot in the Emulation settings.
Starting a DSiWare dumped as a NDS file doesn't work, what is wrong?
To run DSiWare it needs to be installed on the NAND. If you start it from the filebrowser it will be started as a cartridge and thus fail to load.
How can I give microphone input? (e.g. a lot of games require one to blow into the microphone)
Press down the left stick to simulate a blowing noise. Proper microphone input via an external microphone is currently not supported.
The last few releases of my continuation where done in Hydr8gon's thread which quickly resulted in a lot of confusion.
Setup
For those coming from older versions of my port, using the /melonds directory located at the sd card root is still possible.
Since Release 5 the JIT recompiler isn't enabled by default, so make sure to enable (under Emulation Settings), since the interpreter is pretty slow.
Atmosphere title replacement to launch the hbmenu is the only supported method of running melonDS!
If you don't know what that means: press R while starting any game from the Switch's main menu to enter the hbmenu, don't use the album!
- Download the latest release from here: https://github.com/RSDuck/melonDS/releases
- Extract the release onto your sd card, so that there's /switch/melonds folder melonds.nro and some other files inside it.
- NAND, BIOS and firmware files go into /switch/melonds as well
- ROM files can be placed anywhere on the sd card
- ARM9 BIOS (bios9.bin)
- ARM7 BIOS (bios7.bin)
- DS mode firmware (firmware.bin)
- DSi ARM9 BIOS (biosdsi9.rom)
- DSi ARM7 BIOS (biosdsi7.rom)
- DSi mode firmware (firmware_dsi.bin)
- NAND dump (nand.bin)
Release notes
Release 6, fix 1:
Just a few bug fixes (the pendulum on the title screen in Chrono Trigger, several things in Mortal Kombat and a freeze in Pokemon Platinum, likely also in Diamond/Perl).
Release 6:
This release is a big one, because we finally hit fullspeed in most games including 3d ones! This is all thanks to the new 2D and 3D renderers which run on your Switch's GPU (which previously was only used for the GUI and putting the video output onto the screen) instead of CPU.
The 3D renderer doesn't use the builtin triangle drawing functionality melonDS's OpenGL renderer does, thus it doesn't have issues like it (https://github.com/Arisotura/melonDS/issues?q=ispen+is:issue+label:OpenGL). Instead it's basically the good old software rasteriser but translated to run on GPUs thus ideally it should have the same pretty amazing compability.
Both the new 2D and the new 3D renderer are implemented using deko3D for minimal CPU usage compared to OpenGL, though I want to port both of them back to OpenGL for desktop melonDS. In the future there's the possibility for some enhancements like high resolution rendering with less issues than the OpenGL renderer currently has (I'm sure yet whether Switch can handle this, so don't get your hopes too high on this).
For older versions look inside the spoiler.
Release 5, fix 1:
Bug fixes, also the overclocking option was readded.
Release 5:
It's been a long while since the last release, but we're finally here! It has a completely new GUI, DSi support and of course a bunch of bug fixes and smaller additions. Since a lot of work went into the GUI there aren't many new optimisations in this release, but this will change for the next one! The controls have been changed, pausing is now done by pressing ZL and ZR at the same time.
Release 4:
I wanted to make this release already multiple months ago, though always something came into my way, whether it was some feature I wanted to finish or later me loosing seeing it as pointless when a Drastic port will happen sooner or later. Thus a lot of smaller things have been accumulating:
Bug fixes, also the overclocking option was readded.
Release 5:
It's been a long while since the last release, but we're finally here! It has a completely new GUI, DSi support and of course a bunch of bug fixes and smaller additions. Since a lot of work went into the GUI there aren't many new optimisations in this release, but this will change for the next one! The controls have been changed, pausing is now done by pressing ZL and ZR at the same time.
Release 4:
I wanted to make this release already multiple months ago, though always something came into my way, whether it was some feature I wanted to finish or later me loosing seeing it as pointless when a Drastic port will happen sooner or later. Thus a lot of smaller things have been accumulating:
- Fast memory emulation by mirroring virtual memory so that it has the same layout as on the DS. This also should resolve all previous issues with Literal Optimisations
- Start at making geometry submission faster
- The GUI is now rendered using deko3d instead of OpenGL (using mesa). Deko3d not only has less overhead, but this also reduced the binary size significantly. Special thanks go to fincs and where we're at it also to the the other devkitpro and libnx people like yellows8 and Wintermute!
- Misc improvements to the GUI (the rom directory isn't hardcoded anymore, a melony color scheme, ...)
- Better screen layout options
- Alternative ways to give touchscreen inputs, including my (unironically besides using the real touchscreen) favourite mode: motion control. See the FAQ for more info
- This isn't really that noteworthy, but in 30 FPS games every second (3D) frame is now skipped automatically
- A bunch of fixes, optimisations and features I can't remember because I'm too unorganised
FAQ?
How can the emulation be paused?
Press ZL and ZR at the same time.
How can I fast forward?
By pressing either ZL or ZR depending which button is used to do a touchscreen click (which depends on whether Left handed mode is enabled in the Input settings). Note that this is not available in gyro mode, because there this button is used for recalibration.
What do the Block Size, Branch Optimisations, Literal Optimisations and Fast Memory settings do?
Ideally they can stay enabled/at maximum all the time because they enable optimisations beneficial for the performance. But if there's an issue with the JIT recompiler it can be tracked down faster. Only touch them if something unexpected happens and mention which (if any) setting makes a difference in bug reports.
I want to play with a Flip Grip. Which settings should I use?
Use the Global Rotation option which rotates the entire GUI. Shout-out here to @uzimakiuchiha who got me a Flip Grip!
I want to play a game where the DS is held side ways (like e.g. Dr Kawashima's Brain Training), which should I do?
For this case it's the best to use the Screen rotation in the Display settings, once a game is launched (it rotates the buttons as well, as if you're holding the DS that way).
How can I quickly switch the focussed screen?
Press down the right stick. There's also an automatic mode where we the main screen is guessed in the display settings.
How can I only display one screen at a time (and for some reason I want it to be stretched across the whole screen ruining all proportions)?
Go into the Display settings. Set Top aspect ratio and Bottom aspect ratio to 16:9 and then set Screen sizing to either Top only or Bottom only.
How do I use gyro control?
First enable it in the Input settings. Press ZL or ZR (depending on whether you enabled Left handed mode in the Input Settings) to calibrate the rotation. Since this utilises the gyroscopes (and not IR like the Wiimote, which gives an absolute position) it's only based on it's rotation, so it needs recentering if you change the way you hold the Switch/Joy-Con.
How can I change the access the DS menu (e.g. for changing the system language)?
Press Boot Firmware or disable the setting Direct boot in the Emulation settings.
Starting a DSiWare dumped as a NDS file doesn't work, what is wrong?
To run DSiWare it needs to be installed on the NAND. If you start it from the filebrowser it will be started as a cartridge and thus fail to load.
How can I give microphone input? (e.g. a lot of games require one to blow into the microphone)
Press down the left stick to simulate a blowing noise. Proper microphone input via an external microphone is currently not supported.