LumaTeam / Luma3DS

Nintendo 3DS "Custom Firmware"
GNU General Public License v3.0
5.34k stars 562 forks source link
3ds custom-firmware homebrew nintendo-3ds

Luma3DS

GitHub Downloads (all assets, all releases) License

Nintendo 3DS "Custom Firmware"

Boot menu screenshot Rosalina menu screenshot

Description

Luma3DS patches and reimplements significant parts of the system software running on all models of the Nintendo 3DS family of consoles. It aims to greatly improve the user experience and support the 3DS far beyond its end-of-life. Features include:

Installation and upgrade

Luma3DS requires boot9strap to run.

Once boot9strap has been installed, simply download the latest release archive and extract the archive onto the root of your SD card to "install" or to upgrade Luma3DS alongside the homebrew menu and certs bundle shipped with it. Replace existing files and merge existing folders if necessary.

Basic usage

The main Luma3DS configuration menu can be accessed by pressing Select at boot. The configuration file is stored in /luma/config.ini on the SD card (or /rw/luma/config.ini on the CTRNAND partition if Luma3DS has been launched from the CTRNAND partition, which happens when SD card is missing).

The chainloader menu is accessed by pressing Start at boot, or from the configuration menu. Payloads are expected to be located in /luma/payloads with the .firm extension; if there is only one such payload, the aforementionned selection menu will be skipped. Hotkeys can be assigned to payload, for example x_test.firm will be chainloaded when X is pressed at boot.

The overlay menu, Rosalina, has a default button combination: L+Down+Select. For greater flexbility, most Rosalina menu settings aren't saved automatically, hence the "Save settings" option.

GDB ports, when enabled, are 4000-4002 for the normal ports. Use of attach in "extended-remote" mode, alongside info os processes is supported and encouraged (for reverse-engineering, also check out monitor getmemregions). The port for the break-on-start feature is 4003 without "extended-remote". Both devkitARM-patched GDB and IDA Pro (without "stepping support" enabled) are actively supported.

We have a wiki, however it is currently very outdated.

Components

Luma3DS consists of multiple components. While the code style within each component is mostly consistent, these components have been written over many years and may not reflect how maintainers would write new code in new components/projects:

Maintainers

Roadmap

There are still a lot more features and consolidation planned for Luma3DS! Here is a list of what is currently in store:

Known issues

Building from source

To build Luma3DS, the following is needed:

While Luma3DS releases are bundled with 3ds-hbmenu, Luma3DS actually compiles into one single file: boot.firm. Just copy it over to the root of your SD card (ftpd is the easiest way to do so), and you're done.

Licensing

This software is licensed under the terms of the GPLv3. You can find a copy of the license in the LICENSE.txt file.

Files in the GDB stub are instead triple-licensed as MIT or "GPLv2 or any later version", in which case it's specified in the file header. PM, SM, PXI reimplementations are also licensed under MIT.

Credits

Luma3DS would not be what it is without the contributions and constructive feedback of many. We would like to thanks in particular: