|Home | Downloads | Screenshots | Forums | Source code | RSS | Donate|
|Register | Log in|
melonDS aims at providing fast and accurate Nintendo DS emulation. While it is still a work in progress, it has a pretty solid set of features:
• Nearly complete core (CPU, video, audio, ...)
• JIT recompiler for fast emulation
• OpenGL renderer, 3D upscaling
• RTC, microphone, lid close/open
• Joystick support
• Various display position/sizing/rotation modes
• (WIP) Wifi: local multiplayer, online connectivity
• (WIP) DSi emulation
• (WIP) GBA slot add-ons
• and more are planned!
If you're running into trouble: Howto/FAQ
Opening your eyes to the world
Apr 17th 2022, by Arisotura
I haven't been very active these days, mostly real life getting in the way, as usual. Anyway, I have been thinking of cool things I could work on for melonDS. I have some ideas in mind regarding input, like supporting multi-touch and other fun touchscreen-related features, but lately I felt like working on some actual emulation, especially in the DSi field. It's well known that DSi emulation in melonDS needs more love.
I was thinking of implementing things like SoundEx and microphone support, but Generic said he was going to implement that, so I'm letting him having fun there. Instead, I went for improving camera emulation. After all, cameras are the main thing DSi-exclusive games make use of, so DSi emulation with no camera support just feels incomplete.
melonDS 0.9.4 already has some very basic camera emulation, but it basically just does the bare minimum to pass the camera init sequence, and then returns a fixed stripe pattern (which is basically just the picture data register returning a fixed value). Nothing exciting.
For example, you can open the DSi camera app and get to the actual camera part of it, but trying to take a picture will result in a system error. Reason for this is that the camera can be set to output at multiple resolutions. It has two modes of operation, named 'preview' and 'capture', which makes sense in applications like digital cameras: preview mode would provide a low-res preview of what the camera sees, that can be displayed on a built-in screen, while capture mode would provide a full-res picture that can be saved. The DSi camera lets you configure two contexts, each with their output resolution, image format, and various other options (for example, flipping the picture...).
So I first had to add support for these modes of operation. I first implemented the registers necessary to handle the camera mode/context switch. But, of course this wasn't enough. The stub in place for picture transfer assumed a resolution of 256x192, but in this case, the resolution is changed to 640x480. This also means that the DSi camera app expects more picture data to come, and it will softlock if there isn't enough data incoming.
This is where my camera test homebrew came in handy. I modified it so that I could do things like switching between the front and back cameras, switch between preview and capture modes, and even use the picture cropping feature to view different areas of the picture in 640x480 mode (as obviously it wouldn't fit onscreen). Doing this let me get a good grasp on how these features were supposed to work.
Then I felt confident implementing all that into melonDS.
This is a preexisting still picture, not actual camera input. But regardless, we have working camera emulation now, and this is half the battle. The other half would be reading picture data from sources like an actual camera, feeding it into the emulator, and integrating all that into the UI.
... read more
|24 comments (last by AceAttorneyFanDL6) | Post a comment|
melonDS has been acquired by Meta
Apr 1st 2022, by Arisotura
EDIT - this post is an April Fools joke (in case that wasn't obvious)
A while ago we had an... unusual visit at the melonDS HQ: Mark Zuckerberg, no less. Zuck stated that he had always been a great fan of emulation, and that he loved our project greatly.
He offered us $324 million for the melonDS company, including both the HQ and the Melon Factory of Kuribo64.
An offer we could hardly refuse. Zuck is a very cool guy, and we greatly enjoyed the time spent in his company at the HQ. Plus, he's good at karaoke, so that will definitely make for some fun nights!
On more practical terms: this means lots of new exciting developments for melonDS.
For example, one of the new ideas is selling NFTs of the best melonDS screenshots. That is an obvious one, but not the only one at all.
There are also many possibilities opened by Metaverse integration: melonDS could be made compatible with game cartridges you would buy in the Metaverse, and you would then get to enjoy your favorite DS classics in VR. Who wouldn't love that?
melonDS will also become smarter, for an enhanced user experience. We are thinking about keeping a database of games, so melonDS can detect which game it is running, and offer ads related to that game. That is a start, but with AI we might be able to take this even further and offer the most relevant ads an emulator has ever offered.
Harnessing the power of a cloud could let us determine for you what the best emulator settings are, so you never ever have to mess with settings again.
... read more
|19 comments (last by Seriously???) | Post a comment|
melonDS 0.9.4 is out!
Mar 8th 2022, by Arisotura
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.
... read more
|44 comments (last by Adrot) | Post a comment|
Server move complete!
Jan 13th 2022, by Arisotura
Finally. We have been moving Kuribo64 to a new server that has better specs, is more modern, more secure, cleaner, and overall better.
Everything seems to be working smoothly now, but let us know asap if anything goes wrong.
There are also some further changes planned, like setting up HTTPS.
|10 comments (last by Rayyan) | Post a comment|
Custom path support has been merged
Jan 9th 2022, by Arisotura
As title says.
This also comes with some extra features. For comparison, the File menu in melonDS 0.9.3, and the new File menu:
First of all, the 'Open ROM inside archive' option has been merged with 'Open ROM', to declutter the menu and make things more intuitive. The file picker dialog just lets you pick either a ROM file or an archive, and in the latter case, it asks you which file you want to open from the archive.
When opening a ROM from an archive, the recent ROM menu remembers the archive file but also which ROM you picked inside it. Similarly, you can now pass a ROM inside an archive to the command line, like so:
As I wanted to make the GBA ROM/addon feature more obvious, it has been decoupled from the regular 'Open ROM' feature. Previously, you had to open your GBA ROM before opening your NDS ROM, but it wasn't obvious at all that the feature existed or how it worked. Now, the separate menus should make this more obvious.
The way DS ROMs are handled has been revamped in a similar fashion. Basically:
* 'Open ROM' loads a DS ROM and starts running it, resetting emulation if another ROM was loaded previously, basically retaining its existing behavior.
* Under the DS slot section, 'Insert cart' will load a DS ROM, and that's it. Just like inserting a cartridge in a DS. The current cart, if any, will be ejected prior. This makes it possible to hotswap carts while running a game or the DS/DSi menu. Similarly, you guess what 'Eject cart' is for.
* The GBA slot section works in much the same way. You can choose to either insert a ROM cart, mimicking the presence of a GBA game cart for the DS games that can sense that, or insert an add-on cart, like for example the memory expansion cart which the DS browser uses. Note that melonDS does not support running GBA games.
... read more
|16 comments (last by Rayyan) | Post a comment|
The path to success
Dec 22nd 2021, by Arisotura
You might have seen that pic I posted on Twitter a while back:
This is what I'm currently working on. It's been a popular request for a while: customizable paths for things like save files, savestates, ... As of now, melonDS takes the easy route and dumps these files alongside the current ROM, but not everybody wants that.
And, well, implementing this whole thing raises a bunch of issues. This is also why it can be difficult for me to get things done: I will try to envision the scope of the task at hand, then begin seeing related things that need to be done, more or less drifting away from the original task, and at the end I have too many ideas and I don't know where to start.
This is one of these occurences. I had tried to make plans of what I wanted for the custom paths feature, but, surprise, the actual implementation is going to be different. The state of the melonDS codebase doesn't help, either, sometimes. I mean, it certainly could be worse, but some parts could definitely use a refactor.
ROM loading is a prime example. When I first built the melonDS core, it was pretty simple, and all it had to do was load a ROM from a given file, load the associated save file, and start emulating. So the original NDSCart::LoadROM() function did just that.
Of course, as melonDS evolved, other concerns arose.
For example, archive support was added. In this case, the ROM isn't accessible as a regular file, instead we get a memory buffer with the ROM's contents. So this means a second NDSCart::LoadROM() function was added, that loads a ROM from a memory buffer. A tad redundant.
Another fun thing is DSi support. On the DS, you can't hotswap cartridges, because there's no hardware support for it, so we didn't have to account for this possibility. However, things are different with the DSi: for example, you can insert and eject carts while in the DSi menu and it detects that. So it's something we need to take in account too. And as of now, melonDS has no provision for ejecting the current cart, nor for loading a new cart without resetting emulation.
... read more
|13 comments (last by LInuxnoob) | Post a comment|
Little status update
Nov 28th 2021, by Arisotura
I hoped to deliver a release around Christmas, but, seeing how things are going, it may not happen.
First of all, I'm having a rough time these days. It's a mix of your typical winter depression and other things, family-related. I'm not going to go over these things in public.
Next, I'm setting up a new server that will eventually replace the server Kuribo64 runs on. More modern, better specs, more secure, all you want. I will keep you informed about this, as there will be a downtime whenever I get round to migrating everything to the new server. There will also be some additions, like proper HTTPS.
Finally, happy birthday Generic! The melonDS HQ will bring you your melon-cake tonight.
Even if I'm not posting here, you can follow me on Twitter for smaller melonDS updates (but also a lot of other bullshit). The other team members are also working on cool things, even if they might not be as talkative as me.
|14 comments (last by ApacheMan) | Post a comment|
New DSi BIOS/NAND/firmware dumper
Nov 8th 2021, by Arisotura
I have been updating the DSi BIOS dumper, to hopefully make DSi mode more accessible. It is now able to dump all the files you need for DSi emulation: NAND, DS-mode firmware, BIOSes.
This dumper is also a tad smarter: it will warn you if the data required for proper augmented BIOS dumps has been altered. By the way, the dumps should now be correct-- there was a bug in the previous dumper, where some of augmented bits were read from wrong addresses, although these particular bits don't seem to be important.
The NAND is dumped with a 'nocash footer' (small data block holding the eMMC CID and console ID, required for decryption) added at 0xFF800.
The dumper will place the dumped files in a folder named dsidump, rather than dumping them in your SD card's root.
You can get it here: DSi dumper
I will also redesign the downloads page as to feature a tools section with this, among others.
|15 comments (last by Shade Lich) | Post a comment|
Happy birthday, melonDS!
Nov 4th 2021, by Arisotura
I'm one day late, oops! Regardless, counting from the first real commit, melonDS is 5 years old. We don't realize, but that's quite a bunch of time. To think, back then, it was just that little project I started for the sake of it. And now, the 'DS emulator, sorta' is turning into something completely serious.
Speaking of, I would have loved to provide a birthday release, but the tight timings and usual factors (real-life shito, ADHD, ...) didn't let this happen for this time. However, depending on how development and testing goes... we will keep you informed, as usual :)
As I said in the last post, we're in the process of making melonDS less obtuse for the average emu user, and while we're at it, there are some more popular-request features we may throw in for the next release. One would be configurable paths for save files and such -- I have some ideas for a clean system for these. I also want to add an interface for modifying user settings, among other fun things.
1.0 may not come in the near future, though. One of the requirements for it is getting local multiplayer stable. melonDS is largely known as 'the wifi emulator', so it's lame that local multiplayer is still this finicky. I have already explained why it's hard to emulate, so instead of going in detail over that, I will simply state that Generic is working on getting it stable. He also working on addressing the shortcomings of our OpenGL renderer, like the lack of proper upscaling in dual-screen 3D scenarios.
I'm also going to give you an occasion to know more about melonDS and the little team behind it!
The melonDS repo was actually created in May 2016. Why did it take until November to see any real work on it? One of the reasons was that I moved out of my parents' home in June that same year. It's been a rocky adventure to say the least, but I don't regret any of it. melonDS, having existed within this timeframe, is also part of this whole adventure of self-discovery for me.
Of course, I also have to thank the rest of the team, and everyone else who got involved, for sticking around and helping make melonDS what it is today. I mean, I have quite a bunch of old projects, and none of them have lasted as long as melonDS has. These projects all fell to my ADHD, and melonDS would likely have met a similar fate without the team and without the emulation community in general. So, thank you all!
Self-discovery can surprise you, in fun or less fun ways. When I moved out, I first thought I was going to lead a normal life, graduate, get girls, all that. Well, so much for that. I would never have predicted what has happened to me, but again, zero regret.
So yeah, I come with all sorts of quirks, fun and less fun. Now, as I'm taking care of the last bits of my transition, there isn't much to say about it anymore, and I have already mentioned ADHD a billion times, so I'm going to mention something more fun:
... read more
|14 comments (last by Guest) | Post a comment|
Little update on what's going on
Oct 18th 2021, by Arisotura
I've been wanting to write this post for a while now, but I'm having trouble focusing on it (as usual, I guess :P ). Regardless, I figured I'd just tell you folks about what's cooking in the melonDS HQ.
The focus for the next release is basically on making melonDS less obtuse to the average user. One of the biggest parts of this is removing the requirement for external BIOS and firmware files.
We started the work in that direction by merging some relevant pull requests, making melonDS able to fall back to the DraStic FreeBIOS and a generated firmware for DS mode. There are still some issues we need to take care of in one way or another, namely:
* We need to either force direct boot, or include some small bootloader inside the replacement BIOS/firmware. The easiest route is to force direct boot.
* The original BIOS includes the Blowfish key required to decrypt the secure area in encrypted ROMs. Lacking the key would make it impossible to support encrypted ROMs, but including it is muddy waters from a legal standpoint.
* A notable exception is that some of the encrypted ROMs, like those found in VC titles, contain the data for Blowfish crypto. It could be possible to make melonDS take advantage of it, but not all ROM dumps out there contain that (it's not normally readable in retail cartridges).
All in all, it seems pretty manageable on the DS side. Things get more rocky on the DSi side:
* As the NUS is still online, it is in theory possible to build a DSi NAND from scratch, though it needs to be studied closer. Some of the contents, like font files, would have to be replicated in free variants. The NAND bootloader would not be terribly difficult to replicate.
* There are several more crypto keys found in the DSi BIOS. While it is still possible to load DSi ROMs without requiring any key from the BIOS (provided the secure area is decrypted, which it generally is), I'm not sure about things like DSiWare.
... read more
|23 comments (last by AsPika) | Post a comment|