Hacking my 3DS

Configure system settings, enter cheats and much more using Rosalina menu
Configure system settings, enter cheats and much more using Rosalina menu

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).

3DS Hacks Guide
A complete guide to 3DS custom firmware, from stock to boot9strap.
💡
Before starting, I thought 'what if this breaks my 3DS?'. I gave it a thought and came to the conclusion that I wasn't too concerned about corrupting my game data. I've had my fun over the years ... if plans go astray, I'll just have to replay the handful of games I have.

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:

Filthy fingerprints on top screen

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.
💡
For more information about the required homebrew apps during this walkthrough, head here.

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.

💡
I only realised at the end of all this that I couldn't use Luma3DS to take screenshots directly from the device due to insufficient SD storage. As a workaround I resorted to using my phone. 

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
Super Mario 64 DS running on a 3DS through a DS emulator
Super Mario 64 DS running on a 3DS through a DS emulator

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).

💡
I don't think I've ever tried running a DS game cartridge directly in a 3DS before. Perhaps this was the most-unsurprising result of all the emulators possible ... Good news is it worked!

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.

Aladdin (both rom and character) running smoothly
Aladdin (both rom and character) running smoothly

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.

Crash Bandicoot - The Huge Adventure running just like GBA.
Crash Bandicoot: The Huge Adventure running just like GBA.

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:

Not my finest photo. Error on launching rom.
Not my finest photo. Error on launching 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
💡
More games testing will come! As you'll read further down, due to memory issues I was encountering I've had to limit the amount of games I could store on the SD card. Once I upgrade my memory I'll redo this whole process again.

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.

Back in the TwiLight Menu++ to select another game
Back in the TwiLight Menu++ to select another game

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.

Memory successfully updated!

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

TWiLight Menu++ FAQ & Troubleshooting
FAQs and troubleshooting for TWiLight Menu++
Emulators on the DS
A reference on Emulators on the DS
GitHub - DS-Homebrew/TWiLightMenu: DSi Menu replacement for DS/DSi/3DS/2DS
DSi Menu replacement for DS/DSi/3DS/2DS. Contribute to DS-Homebrew/TWiLightMenu development by creating an account on GitHub.
GitHub - profi200/open_agb_firm: open_agb_firm is a bare metal app for running GBA homebrew/games using the 3DS builtin GBA hardware.
open_agb_firm is a bare metal app for running GBA homebrew/games using the 3DS builtin GBA hardware. - GitHub - profi200/open_agb_firm: open_agb_firm is a bare metal app for running GBA homebrew/ga...
GitHub - DS-Homebrew/GodMode9i: GodMode9i Explorer - A full access file browser for the Nintendo DS and DSi consoles
GodMode9i Explorer - A full access file browser for the Nintendo DS and DSi consoles :godmode: - GitHub - DS-Homebrew/GodMode9i: GodMode9i Explorer - A full access file browser for the Nintendo DS ...

Non-retro game resources

GitHub - mtheall/ftpd: FTP Server for 3DS/Switch
FTP Server for 3DS/Switch. Contribute to mtheall/ftpd development by creating an account on GitHub.
Linux for 3DS
Linux for 3DS is a homebrew project that allows you to run Linux on your 3DS.
Exploring The World Of Nintendo 3DS Homebrew
When Nintendo officially ended production of the 3DS in September 2020, it wasn’t exactly a surprise. For one thing, some variation of the handheld system had been on the market since 2011. W…

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:

The DS menu running in the 3DS
The DS menu running in the 3DS

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:

Red light, green light. Red light, green light.
Red light, green light. Red light, green light. 

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.