The new wifi adventure
I'm doing this while waiting for my surgery, which will be in 3 days. So, a bit more about yesterday's screenshot.


Basically, it all started with a new branch called slirp. What's that, you ask, another of Arisotura's oddball noises?

Nah. If you followed the melonDS history, you know that a while back, support for internet connectivity was added. It was pretty similar to how DeSmuME did it back then: providing a basic emulated access point to connect to, then forwarding outgoing traffic via libpcap.

While it was straightforward, it had its lot of issues: it required installing libpcap (or any Windows equivalent), required admin/root privileges, and, more annoyingly, did not work over wifi connections, as explained here.

Eventually indirect mode (aka LANMAGIC) was developed to get around this. The basic idea was to emulate a local network and use simple BSD sockets to forward outgoing traffic to the host network. The idea was good, but the actual implementation was more or less a pile of hacks that never really worked right.

Enter the slirp branch. Basically, QEMU's libslirp does exactly what LANMAGIC clumsily tried to do.

So I reimplemented indirect mode using that. Took a while to figure out how to use libslirp, as it isn't really documented, but we got there, and it works beautifully.

More notably, this is how we like it. Unlike direct mode, it requires no setup, it Just Works™. Over any sort of connection, without any special privileges, ...


Then I got carried away and began implementing features of the DSi's new wifi device. From there, you can see how this ended.

The DSi uses this new wifi device when connecting to the internet (local-multiplayer type connections use the old DS wifi device).

Alas, due to being a few years late to the party, there isn't much to do anymore. You can try using the DSi browser, but it won't be able to load a lot of websites successfully due to how limited and outdated it is. This site works fine... somewhat.

I was also able to update my emulated DSi to the latest firmware version, 1.4.5E. It doesn't do much, but it's working without issues, so there's atleast that.

Connecting to the DSi Shop gave me some weird undocumented error code. The logs showed that it was trying to use AES-CCM encryption, which was unimplemented. As I had already taken care of CCM decryption and verification, I could implement encryption quickly. Then I was able to access the Shop, from which you can download the 3DS transfer utility, and, well, nothing else.

Atleast these features are emulated, in case this can help spark new initiatives in the field, akin to AltWFC. Although things like custom DSi Shop servers would pose obvious copyright problems, unless they only distributed homebrew...


Regarding the old libpcap-powered direct mode, I'm thinking of retiring it. Perhaps not for 0.9, but later for sure. It might stick around for debugging purposes, but it has little advantage for the average joe if libslirp works just as well and is more flexible and easier to setup.


Regarding directions to take now, I have several ideas.

An interface for editing firmware settings. We could atleast make it work for DS mode. It would also allow you to change the console's MAC address, mostly to make up for the fact we're removing MAC randomization.

We also need some FAT library that can access files inside a FAT image. One of the purposes would be accessing the config files inside the NAND (which, below the encryption layer, is mostly a FAT filesystem), so we could edit the DSi-mode firmware settings too. We could also patch the touchscreen calibration data, like we do for DS mode (might also make that feature optional?).

Being able to generate a FAT image from a given folder, and maybe reflect changes to the actual files, would be perfect for things like the DSi's SD card, or DLDI. Not sure what is possible there, but we'll see.

I also need to finish the cheats feature. Dammit, considering all these things you see are popping up because I'm procrastinating on that.


Either way, this has been a fun ride.
Arisotura says:
Jun 23rd 2020
you'll need to calibrate the touchscreen. melonDS uses different digitizer ranges from NO$GBA.
MelonMan says:
Jun 23rd 2020
Why didn't I think of that before... Also, great work, the sound is noticeably better than no$gba. And now that we have wifi support with the DSi melonDS has greatly surpassed no$gba!
Amnesia says:
Jun 23rd 2020
I have the error 2-2435-8325
Amnesia says:
Jun 23rd 2020
I download the no$gba bios for DSi and the nand,but when you start the firmware, the screen remains blank and does not start. Could it be the firmware of my DSi? I can't find a DSi firmware on the internet to test if that's it.

https://streamable.com/bsxgik
Riancaio says:
Jun 24th 2020
I also need the firmware of dsi because its not with the no$gba
MelonMan says:
Jun 24th 2020
You need to dump them yourself using a real DSi.
Amnesia says:
Jun 24th 2020
MelonMan I dumped my files but it gave the above mentioned error, now that I use the nand of no$gba it doesn't give the error but the screen remains blank
MelonMan says:
Jun 24th 2020
2-2435-8325 means "Invalid Firmware".
Amnesia says:
Jun 24th 2020
Do I need any specific firmware? My DSi is an XL in 1.4.5
Amnesia says:
Jun 24th 2020
First of all I want to apologize for the amount of messages xD. I am dumping the firmware, bios and Nand again. What should be the sizes of each one? How do I fix the no$gba footer in the Nand?

I dump everything with the DSi Firmware tool 2.0.0. Is it ok or should I use another tool?
MelonMan says:
Jun 24th 2020
Try following this guide: https://melonds.kuribo64.net/comments.php?id=103
MelonMan says:
Jun 24th 2020
Also, dump your nand using dumpTool (https://github.com/zoogie/dumpTool) to make sure it includes the nocash footer.
Amnesia says:
Jun 24th 2020
dunpTool tells me "This dump can't be decrypted with this footer!"
Amnesia says:
Jun 24th 2020
And dsbf_dump dont work. The screen remains black.

NDS B+F dumper 0.1
=-----------------------------=
MelonMan says:
Jun 24th 2020
Where are you launching these from?
Post a comment
Name:
DO NOT TOUCH