Hacking my 3DS
Background
I've been playing 3DS with my son recently, sticking to 2 games that I know provide a consistent level of enjoyment: Mario Kart 7 & Super Smash Bros. These games are flashy, interactive and full of animation. The perfect recipe for grabbing our attention.
However, after hitting PBs on every time trial track and playing ~500 smash games with level 9 CPU, I needed to find something different. Oh and I could tell my son was getting bored of these games as he started closing the lid on each Smash load so ... yeah it was time for something new.
Enter ... 3DS hacks!
Solution
After a very quick google search, I landed onto this reddit post.
And now, the mission begins.
Equipment
- SD card reader
- Nintendo 3DS (original model, 2011) & charger
- Nintendo 3DS stylus (makes selecting inputs slightly less frustrating)
- Computer to manage SD card and download dependencies
Installation walkthrough
The below guide contains a full e2e walkthrough of what to do and includes various troubleshooting tips. I highly recommend this guide. I also recommend to NOT speed run the walkthrough. You WILL make mistakes (as I did).
From start to finish, the whole process was completed within 1 hour. Give it patience and you'll have a hacked 3DS in no time.
New software
Throughout the installation steps, you'll encounter new software available on your 3DS. I've numbered the new apps in the screenshot below:
Below are short summaries of what they do:
- Universal Updater: An elegant and user-friendly homebrew app to provides an easy to use interface to download all kinds of software, taking care of all installation steps itself
- the homebrew launcher: view and launch downloaded 3DS homebrew apps (e.g FBI or other apps from Universal Updater)
- FBI: FREEZE! Joking, it provides an interface to manage SD card files and install homebrew apps
- Checkpoint: backs up save files, although it crashed my 3DS when I tried launching it
- anemone 3DS theme manager: self explanatory, a theme & splash screen manager
- mGBA (optional): I downloaded this gba emulator (from Universal Updater), but it suffers from poor performance and is pretty much unusable. Yay
- TWiLight Menu++: An emulation launcher which contains a file explorer and rom selection. So far I've tried out DS, sega megadrive and snes roms.
Walkthrough complete
Well that's it! After following that amazing walkthrough, the 3DS has opened its doors to homebrew apps and emulators.
To begin with, I'll focus on playing retro games. Outside of console emulation, there's so much more possible. Check out this link for a few ideas on what to do next.
Performance
My emulators and test roms are ready. Now it's time to trial what this beasty old 3DS can handle. During my testing, I did my best to capture performance summaries and screenshots.
DS
This emulator actually gave me the most appropriate performance so far. It was as if I was running an actual DS! The frame rate and gameplay is top notch. Sound, audio, controls, all working fine. No hiccups encountered.
Games tested
- Super Mario 64 DS
- Force Unleashed
The one thing I need though is to figure out how to exit games to return back to the previous game menu. Restarting the console is a workaround but my son does get impatient with loading times (never going to let him endure Crash Bandicoot: Wrath of Cortex on PS2).
SNES
Wow! This worked pretty well for the most part. I chose Mega Man 7 as my guinea pig and I was pleasantly surprised by how well this was playing. Sound, frame rate, speed, all running smoothly.
One issue I discovered were the text boxes. I could hear the text typewriter effect but no text was visible. Other times, the text itself was visible but the background UI layer of each text box was not rendered, making the text difficult to read. In addition, the start menu was unusable to me, as I was unable to see any text or options available.
This probably isn't a deal breaker for action or racing games, but I'd have to test out RPGs before committing to them. Sorry Final Fantasy!
Games tested
- Mega Man 7
- Street Fighter II
Sega Genesis
Finally I launched one of my favourite games of all time, Sonic 3 & Knuckles. This was playable but ... a few issues were encountered.
Audio: no audio! I'm not totally reliant on this, as when I was younger I used to play games using a tiny CRT tv that only had a video input (yellow cable) available. That being said, some sound would be nice.
Graphics: a cosmetic issue than anything else. When Sonic descends to a low position in the level, it looks like the blue, underwater effect overlays the player, even though there is no water around. Below are 2 examples:
This graphical issue did not impact Sonic's movement thankfully but I did not stick around to see if I would drown.
Another game I tried out was Aladdin and this one ... has sound! Something strange with Sonic it seems. Perhaps traveling past the speed of sound.
Aladdin performed reasonably well. I could use the L/R buttons on the 3DS to toggle zoom settings, which was necessary as the boundary UI elements were often cut off-screen. Other than that, Aladdin was fully playable with only minor cosmetic issues.
Games tested
- Sonic 3 & Knuckles
- Aladdin
Gameboy color
Nothing to say here. I couldn't get TwiLight Menu++ to display any roms. I was hoping to play Pokemon Trading Card game but I still requires further investigation to resolve this issue.
mGBA - gba attempt #1
Oh not quite sure what's happening here. This emulator from the homebrew app store is pretty dreadful. The games are super slow, laggy cut scenes and choppy performance. I tried rotating through a handful of roms but nothing was ever smooth. Even the startup loading scenes were unbearable! Sorry dude, I'm going to say next.
DS->GBA - gba attempt #2
Hmm ok something is seriously wrong here. This is the DS -> GBA via TwiLight Menu++ method but even this is unplayable. It was lagging so bad I couldn't even progress past a splash screen.
open_agb_firm - gba attempt #3
Finally! A gameboy advance emulator that runs smoothly and (so far) plays pretty perfectly.
The trial & error here was pretty frustrating as I was certain the 3DS could handle gba games. Turns out, I needed to use this bare metal app to run gba games on my original model 3DS.
This method though differs from the other emulators as I do not launch from the TwiLight++ Menu. Instead, when I power on I must hold down the "START" button to launch Luma3DS. From there, I navigate to the gba rom location and begin.
Weirdly though, this error message appears upon selecting the rom:
To proceed, I press the POWER button ... it works though 🤷 and I'm taken to the GBA power on animation to continue launching the game.
My only gripe is that the gameplay is entirely on the top screen, with no emulator options or configuration available on the bottom screen. Nor can I exit back to the 3DS menu to play something else. I guess in a way, it's as if I'm actually running a real life gameboy advance.
Overall, great performance and emulation, but not as feature-full as the other emulators so far.
Games tested
- Crash Bandicoot: The Huge Adventure
That's all the testing for me!
The consoles I dabble with tend to date from early 90s to mid 2000s. There are alternative emulators and custom apps available in the Universal Updater app store which are worth trying out also.
Now sadly, a little bit of googling concluded that N64 emulators aren't possible for the 3DS due to architecture & performance limitations. But that's ok, I have my raspberry pi 4 that (see what I did there 😏).
Troubleshooting
TWiLight Menu++ automatically starts last played rom
This was a real headscratcher, involving trial, error and many resets.
I initally had to change a key value to 0
in ./_nds/TWiLightMenu/settings.ini
. Sadly, this proved to be a one-time fix as each game after that still auto-ran on launch.
Looking around more, I came across a quicker solution suggesting I hold down A, B, Y, X
when launching TwiLight Menu++. This actually worked and I was able to return to the desired menu.
Now this isn't super perfect as I have to force muscle memory to hold down all 4 buttons each time I launch the app but it'll work for now. Not perfect, but workable.
Memory
Talk about a n00b mistake. After nights of toying around with settings, installing software & playing games, I only realised my 3DS original SD card had a measly 2gb worth of memory.
I was desperately trying to free up memory by deleting whatever I could, spending hours modifying files and testing out any small game file that I could find. After a few days, I realised that the SD card was not reflecting file deletions and the space they should have freed up. I was stuck on 66kb for ages! Nicht gut!!
To resolve this, I simply emptied the trash bin on Mac whilst the SD card was connected into the reader. I don't know if this is a full-proof method, but it did resolve it for me.
Wrapping up
All in all, this was an interesting hack to perform on a 1st-generation 3DS. I was surprised at how active and clever the 3DS hacking community is. I'll definitely need to upgrade my SD card (64Gb?) and fully stack up my game library for my son and I to enjoy.
Now that I can install custom software, I'll be looking to experiment even futher. Running linux, hosting webservers. There's so much more to do!
Emulators & tips resources
Non-retro game resources
Now for something weird
Whilst in the TwiLight Menu++, I pressed the shortcut for the Luma3DS menu: L + d-pad UP + SELECT. Now upon doing this, I was transported to the year 2005:
Here is my most recently played DS rom (Super Mario) alongside other options.
Now being the tester that I am, I naturally selected the option that looks totally out of place and likely to effect my system. I selected slot1
at the top. Below is the result:
Not much more to say here. No idea what this screen does or what input it's expecting... Righto!
That's it folks. Thanks for sticking around and joining me for my journey into 3DS hacking. Till next time.