Luma3DS

Nintendo 3DS "Custom Firmware"

GPL-3.0 License

Stars
5.2K

Bot releases are visible (Hide)

Luma3DS - v9.0

Published by AuroraWright almost 7 years ago

Here's our holiday gift to you :)

  • Use open source reimplementations of the SM and PXI FIRM modules
  • Fixed breakpoints in the Rosalina debugger (thanks @Nanquitas)
  • Added RAM viewer/editor/dumper feature to Rosalina (thanks @LiquidFenrir)
  • Rosalina now cleanly reboots the console when the option is selected
  • Fixed Rosalina screenshots for RGB5_A1/RGBA4 framebuffer formats (used for example in Virtual Console titles)
  • Stubbed isTitleAllowed to allow Nintendo-blocked titles to launch (outdated Ironfall/Flipnote Studio 3D/etc)
  • ARM9 exheader and FS patches are now always applied as they cause no drawbacks
  • Throw an error if file writes or emuNAND boot are attempted while the SD card is write-locked
  • Display boot source on the bottom screen in the config menu
  • The console will now shutdown when the shell is closed in the Luma menus, unless the user booted via ntrboot
  • Numerous Exception Handler fixes
  • FatFS updated to v0.13
  • Check if NWM is running before allowing WiFi toggling in Rosalina
  • Screenshots are now sorted by date/time using osGetTime, removing the counting delay if the user has a lot of screenshots, thanks to @Hayleia!

Note: BootNTR is broken in this version, unless you use the latest commit, not release from this repo: https://github.com/Nanquitas/BootNTR

Edit (20/12/17 18:28 EST): BootNTR Selector v2.10 has been released with support for Luma v9.0, you can now use the latest release instead of needing to manually compile the latest commit!

Notes on the changes made to Rosalina's debugger:

  • The physical memory access "bit31" mapping (0--0x30000000 => 0x80000000--0xB0000000) as well as privileged (kernel) mappings confuse debugger clients like IDA's which interpret the value of the registers. Access to those mappings can be toggled using "monitor toggleextmemaccess" instead (issue reported by @Nanquitas).
  • Additionally, support for the buggy IDA 6.8 gdb client was removed. Please use IDA 7.0 or higher.

P.S: IDA 7.0 added client support for no-ack mode (Debugging options > Set specific options), which should be enabled to make debugging twice as smooth. "Use stepping support" should be unchecked.

Luma3DS - v8.1.1

Published by AuroraWright about 7 years ago

  • Add WiFi and LED toggling in Rosalina
  • Add loading of extended headers from SD card/CTRNAND, they can be loaded from /luma/titles/TITLEID/exheader.bin. Among the other things, this also allows to load bigger code.bins
  • "Logged" ErrDisp errors are now written to /luma/errdisp.txt without causing an error screen
  • Fix LayeredFS for Pokemon Art Academy and possibly other games which mistakenly load files from rom:// instead of rom:/
  • Fix conflict between emunand selection and payload booting when "Autoboot EmuNAND" is checked, you now need to press L + DPad to boot payloads if that option is checked
  • Rearranged options in the Rosalina menu
  • Fix warnings with devkitARM r47

Note: given the efforts in supporting two separate codebases and the lack of confirmed issues which can be attributed to the changes in 8.1 compared to "legacy" Luma, we're discontinuing that branch. If you have an issue which you can reproduce on this release (test at least twice to make sure it can be reproduced) but not on a "legacy" build, please submit an issue to this GitHub repository. We will fully discontinue the "legacy" codebase in 2 weeks from now if no such issue is reported and verified.

We're taking donations to help a homeless friend who is in dire need for help.

Luma3DS - v8.1

Published by AuroraWright over 7 years ago

  • Add saving of Rosalina settings (key combo and homebrew title ID)
  • Add a reboot and a power-off option in the "Miscellaneous" Rosalina menu
  • Display the IP address on most menus when either InputRedirection or the GDB stub (or both) is enabled
  • Full support for system versions >= 4.0
  • Partial support (all arm9 patches, but no arm11 patch) for 3.0
  • Halve the time necessary to take a screenshot
  • Boots around 1 second faster on New 3DS
  • Add region-free patch for e-manuals
  • Add DSP firmware signature patch by @MerryMage
  • Fix InputRedirection, C-stick/ZL/ZR redirection works in games too
  • Fix langemu bugs
  • Fix write-only hardware watchpoint support in the gdbstub
  • Fix random boot issues
  • Fix booting on 2.x and 1.x dev units
  • Merge #561
  • Fix building on macOS
  • Other minor improvements and fixes

Existing software compatible with InputRedirection are InputRedirectionClient-Qt, InputClient-SDL, TPPFLUSH

We're taking donations to help a friend.

Luma3DS - v8.0

Published by TuxSH over 7 years ago

This major release introduces Rosalina, Luma3DS's custom system module, the functionalities of which are described below.

You'll need to upgrade to boot9strap v1.2 or higher.

Edit: please use newer releases!


  • A menu which can be opened at any time (combo: L+Down+Select, although you can change it at runtime), featuring:
    • A process list submenu (used to select process to attach when the debugger is enabled)
    • A processes patch submenu: patches FS and SM
    • A N3DS Clock+L2 submenu (hidden on O3DS)
    • A screenshot action. This is slow but it works
    • Other various options, see below
    • A display of the remaining battery percentage in the bottom right of the screen, and of the Luma3DS commit at the bottom left
  • Input redirection:
    • Implementation thanks to @Stary2001, based off the work of ShinyQuagsire
    • Allows you to control your 3DS using your PC with, for example, an external controller (Xbox360 controller, etc.)
    • Should work with every game with minimal lag
    • C-stick/ZL/ZR redirection is N3DS-only, possibly only with newer games
    • Use this client (compatible with xinput on Windows, evdev on Linux, should be compatible with OSX) or that one
    • If you activate this feature in Home Menu, applications will be prevented to disconnect the 3DS from the Internet while they're running. This takes effect until the next boot
  • 3DSX loading:
    • Thanks to @fincs
    • 3DSX files can now be loaded seamlessly, and work just like installed titles (meaning you can use the Home Menu and applets while a 3DSX application is running, use the GDB stub (see below), etc.)!
    • No need for *hax payloads anymore!
    • By default, the title used to boot boot.3dsx is hblauncher_loader, but this can be changed at any time (Miscellaneous options > Switch the hb. title to the current app.) : simply launch any title, use that option, close the title ; the next time you launch that title, it will run boot.3dsx
    • *hax payloads don't work anymore. You'll have to use version of the Homebrew Menu >= 2.0, which can be found here (and in the homebrew starter pack later on)
  • Better language emulation:
    • Language (and region) emulation should now work for all games
    • You can now specify a country (2 letter code) and a state ID (2-digit hex integer), for example: EUR FR FR 01
  • A fully-featured GDB stub:
    • Network code and skeleton thanks to @Stary2001
    • Can debug up to 3 processes simultaneously (the process to attach to are to be selected in the process list menu)
      • Use the process menu when the debugger is enabled to select processes to attach to.
    • Use -lctrud and -lcitro3dd instead of -lctru and -lcitro3d, -Og instead of -O2, drop -fomit-frame-pointer build debug versions of your own applications.
    • Compatible with both GDB and IDA PRO:
      • The GDB stub requires a patched version of GDB to work, available here (3ds-gdb-* archives), which will get eventually integrated into devkitARM itself.
      • The GDB stubs also works with IDA (Use single-step support, in the specific debugger options prompt, should be unchecked).
    • Software breakpoints, 2 hardware watchpoints (globally), all basic features and many more, like catch syscall, info os, etc.
    • Can access the 80000000..B0000000 strongly ordered mapping (see below) as well as privileged memory
    • If you activate this feature in Home Menu, applications will be prevented to disconnect the 3DS from the Internet while they're running. This takes effect until the next boot

Now for some developer/technical details:

  • A "kernel extension" extending the features of Kernel11 ( ͡° ͜ʖ ͡°):
    • New features for existing SVCs, for example:
      • New types for svcGetProcessInfo: 0x10000 to get a process's name, 0x10001 to get a process's title ID, 0x10002 to 0x10007 for section attributes, 0x10008 for TTBR1, etc.
      • New types for svcGetSystemInfo: 0x10000 for CFW info, 0x10001 for N3DS-related info, 0x10002 for TTBCR and TTBR0 per core, etc.
      • New types for svcGetThreadInfo: 0x10000 for thread local storage
      • Many other changes not listed here
    • New SVCs:
      • See csvc.h ( ͡° ͜ʖ ͡°)
      • Indirect SVC: svc 0xFE
    • Debug features:
      • SVC permission checks don't exist anymore
      • Everything behaves as if the "Allow debug" kernel flags was always set, and svcKernelSetState as well as the official debug handlers always believe that the unit is a development one. This is needed for the below item
      • No need to do svcKernelSetState(6, 1, 1LL) for user-specified exception handlers anymore.
      • Numerous fixes of Luma3DS's fatal exception handlers. Moreover, they are now only used either on privileged-mode crashes or when there is no preferred alternative, that are namely: KDebug based-debugging, or user-defined exception handlers.
    • New memory mapping: PA 00000000..30000000 -> VA 80000000..B0000000 [ Priv: RWX, User: RWX ] [ Shared, Strongly Ordered ] (accessible from the GDB stub)
    • Because of memory issues, ErrDisp is not launched; err:f has been reimplemented.

Minor issues: the menu can sometime freeze in some games (that will be attempted to be fixed before next release), versions < 9.0 haven't been tested.


  • Luma is now a proper FIRM with separate arm11, arm9 and modules sections
  • Switched to a whitelist for FIRM loading
  • It's now possible to boot newer DS flashcarts (the ones appearing in the original DS' main menu) and early DSi flashcarts directly from Home Menu
  • Luma now works with NANDs using custom NCSDs/MBRs
  • "Enable exception handlers" was removed, since it's always on with Rosalina choosing the best exception reporting method depending on the context
  • Luma can now boot on its own as FIRM0/1 (although note this is not recommended or supported at all and we very strongly recommend using boot9strap)
Luma3DS - v7.1

Published by AuroraWright over 7 years ago

  • boot9strap support (all older entrypoints, including ARM9LoaderHax and menuhax, are no longer supported).
  • Replaced .bin (brahma/a9lh) payload loading with .firm (FIRM format) payloads. This format allows for way more flexibility and is also the only one supported by boot9strap.
  • Holding START when only one payload is present directly boots it.
  • Small LayeredFS fixes.
Luma3DS - v7.0.5

Published by AuroraWright over 7 years ago

  • You can now load code.bin binaries and code.ips patches for system modules and applets.
  • Fixed LayeredFS being broken in 7.0.4 with several games (Animal Crossing, Zelda Triforce Heroes and probably more).
  • Rewrote a large part of the LayeredFS code, this should allow to properly fix eventual conflicts that arose with extdata and other non-RomFS archives.
Luma3DS - v7.0.4

Published by AuroraWright over 7 years ago

Unfortunate events related to moderator censorship have occurred regarding the /r/3DShacks subreddit (read more on Plailect's guide). Given this we cannot, in good faith, support this subreddit or its IRC until there is a change in leadership and will no longer be participating.

Sorry for the many close releases, but some bugs were discovered regarding LayeredFS.

  • Fixed not closing folder handles after checking for "romfs" folders' existence.
  • Fixed extdata being redirected in 7.0.3 (could have caused issues if an extdata and a romfs file with the same path and name existed), thanks @mariohackandglitch for discovering this.
  • Added displaying title IDs for ARM11 exceptions.
  • Sped up the pattern searching for LayeredFS.
  • Cleaned up loader's code.
Luma3DS - v7.0.3

Published by AuroraWright over 7 years ago

Unfortunate events related to moderator censorship have occurred regarding the /r/3DShacks subreddit (read more on Plailect's guide). Given this we cannot, in good faith, support this subreddit or its IRC until there is a change in leadership and will no longer be participating.

  • LayeredFS compatibility has been improved: update RomFSes which are mounted as "ext:" (such as Taiko no Tatsujin: Don Don! Mystery Adventure) now work.
Luma3DS - v7.0.2

Published by AuroraWright over 7 years ago

Unfortunate events related to moderator censorship have occurred regarding the /r/3DShacks subreddit (read more on Plailect's guide). Given this we cannot, in good faith, support this subreddit or its IRC until there is a change in leadership and will no longer be participating.

  • Improved LayeredFS compatibility: games like New Super Mario Bros. 2 and Zelda: Triforce Heroes now work.
Luma3DS - v7.0.1

Published by AuroraWright over 7 years ago

  • *hax payloads work again (if you use arm9loaderhax this doesn't apply).
  • LayeredFS compatibility has been improved (thanks to @svanheulen and NeoBeo): recent Monster Hunter games and update RomFSes which get mounted as "patch:" (like Daigasso's update) now work.
Luma3DS - v7.0

Published by AuroraWright over 7 years ago

  • Added chainloader selector menu (can be called with START on boot, the START payload can now be booted with L+START).
  • Implemented IPS patcher for code.bin, you need to copy the IPS patch to /luma/titles/<titleID>/code.ips.
  • Added a LayeredFS implementation thanks to @delebile's hard work. Compatibility should be really good as only two games have been reported as being not working out of all the reports (due to the unusual way they were compiled). To use it, you will need to copy romfs files (following the romfs folder structure) to /luma/titles/<titleID>/romfs/. Coupled with IPS code patching, this allows for easy legal distribution of game translations/hacks.
  • Added unverified New3DS SigHax support (it should work fine, though).
  • Added support for the power button in menus (thanks @d0k3).
  • Added possibility to patch NAND apps (like the eShop).
  • Download Play is now region free (thanks @adibsurani).
  • Signature checks are patched out for 1.x/2.x NATIVE_FIRM and SAFE_FIRMs (thanks @SciresM).
  • PIN changes: PIN is now hidden while being entered, added possibility to clear the inserted PIN by pressing SELECT.
  • Stubbed the SetGpuProt syscall on 11.3+ to make *hax payloads work on Old3DS. It is advised to use the 11.2 payloads on 11.3+ with this patch.
  • Fixed firmlaunch/reboot patch on New3DS 11.4.
  • Fixed config not being saved if a payload was launched after quitting the config menu.
  • Refactored the codebase to limit nested if/elses.
  • Several other improvements to overall system stability and other minor adjustments and bug fixes have been made to enhance the user experience.

We would like to thank anyone who helped testing LayeredFS!

Luma3DS - v6.6

Published by AuroraWright almost 8 years ago

  • Made it possible to use arm9loaderhax.bin from CTRNAND with the SD inserted (DS/DSi/GBA/extended memory games will now work).
  • Fixed the New 3DS CPU patch affecting titles which already make use of the higher CPU clock and L2 cache (New 3DS exclusive titles and others like Smash Bros and Pokemon S/M). If "Clock" or "L2" are selected, these titles will now retain their normal (Clock + L2) setting.
  • Increased the compatibility of region/language emulation, some rare titles are now working.
  • Added support for zerokey-encrypted NCCHs to NAND and SD card. This makes it possible to use some old, Gateway-era CIAs.
  • If the UNITINFO developer option is checked, you will be able to install CIAs encrypted with the developer 0x3D normalkey (such as the SDK ones). This will also make retail-encrypted CIAs fail to install (all already installed titles will keep working in both cases).
  • Improved support for development units (thanks to @SciresM), 9.5+ FIRMs can now be regularly booted, 7.x+ ones can be booted from 4.x, and the system updaters won't overwrite A9LH.
  • Fixed support for system versions 7.x and lower.
  • Fixed bugs in the exception handlers.
Luma3DS - v6.5

Published by AuroraWright almost 8 years ago

  • Full CTRNAND support: if the SD card is missing, you can boot Luma from CTRNAND with a compatible A9LH install. On CTRNAND, the luma folder is located in /rw and can be managed with tools like FBI and GodMode9. The EmuNAND options will also be automatically hidden.
  • Added safety checks everywhere throughout Luma when possible, this also includes FIRM patching (if any patch fails, Luma will either display the amount of failed patches or shutdown).
  • Made the exception dump parser output the disassembly of the dumped code where possible.
  • Kernel9 patches patterns are now only looked for in Kernel9 itself (might speedup the patching slightly).
  • AGB and TWL FIRM from 3.0 onwards are now supported (instead of just the latest versions).
  • Fixed the anti-anti-downgrading patch on 11.2 FIRM.
  • Removed the eShop update check patch as it caused more problems than it solved, and the background updates patch as it didn't work at all.
  • Allowed using the FIRM of SysNAND with EmuNAND and vice-versa (booting with R) if not using A9LH.
  • Fixed bug that made it impossible to print to the screen after FIRM was loaded.
  • Fixed some files in the FIRM folders being incorrectly detected as FIRMs.
  • Major cleanup/minor bug fixing/refactoring of the code, removed several assumptions and switched to structs where possible.

Please note that starting with this release, Luma won't support pre-patched FIRMs or other system titles with the same patches Luma does. Common pre-patched titles include NS, Home Menu, TWL_FIRM and AGB_FIRM (in these cases you will either get a svcBreak in loader or a shutdown when launching DS/GBA games). Clean versions of these titles need to be reinstalled before upgrading (the wiki will be updated with a walkthrough soon™).

Luma3DS - v6.3.1

Published by AuroraWright about 8 years ago

  • Increased the maximum custom path size to 55 characters from 37.
  • The Luma3DS.dat file isn't needed anymore with the new .3dsx (*hax, menuhax) launchers, arm9loaderhax.bin (or the filename specified with the custom payload path) will be loaded directly.
  • Replaced the top screen image in the .nds file.

Reuploaded because people reported the CakeBrah .3dsx launchers wrongly displaying the .dat filename when arm9loaderhax.bin was not found, Luma3DS itself was not updated.

Luma3DS - v6.3

Published by AuroraWright about 8 years ago

  • Merged the regular and dev builds into one.
  • Custom version changes: if the custom version has more than 5 but less than 19 characters it will be truncated to avoid System Settings crashes; separated the custom versions for each NAND (the paths are now /luma/customversion_sys.txt, /luma/customversion_emu.txt, /luma/customversion_emu2.txt. /luma/customversion_emu3.txt. /luma/customversion_emu4.txt).
  • To reduce file accesses for people with high-latency large SD cards, an option to toggle loading firmware.bins and FIRM sysmodules from the SD card and one to toggle loading the splash screens were added.
  • External FIRMs support changes: added support for NUS-encrypted firmware.bins (all four are supported, a matching cetk file for each encrypted FIRM is needed: /luma/cetk for /luma/firmware.bin, /luma/cetk_twl for /luma/firmware_twl.bin, /luma/cetk_agb for /luma/firmware_agb.bin. /luma/cetk_safe for /luma/firmware_safe.bin) and New 3DS ARM9bin-decrypted firmware.bins.
  • Turned the .dat file into a simple chainloader that loads arm9loaderhax.bin, added .nds file to use it with mset.
  • The path changer is now deprecated (although it will still work). To have a custom path you can now enable the option for it in the configuration and type it in a /luma/path.txt file, it must start with a /. This path is also picked up by the above mentioned .dat chainloader.
  • A full format of the SD card is no longer necessary to remove an EmuNAND (also fixes crashes when trying to boot EmuNAND with an SD which used to have one and wasn't fully formatted).
  • The splash screens now display all at once thanks to the alternate framebuffer support.
  • Fixed screen weirdnesses when not launching from arm9loaderhax.
  • Added support for text files with a trailing newline (as per UNIX convention) for region/language emulation and custom versions.
  • Fixed loading SafeA9LHInstaller and other payloads which need the OTP hash if having a PIN.
  • Slightly changed the PIN format.
  • Made option descriptions more readable.
  • Fixed non-working double newlines in PIN messages.
  • Fixed hangs on errors after a firmlaunch, reboots now happen as expected.
  • bin2c is no longer needed to compile.

Reuploaded to fix a confusing typo in the config

Luma3DS - v6.2.3

Published by AuroraWright about 8 years ago

Both versions:

  • Finally fixed GW-downgraded O3DS(XL) NANDs.
Luma3DS - v6.2.2

Published by AuroraWright about 8 years ago

Both versions:

  • If Autoboot SysNAND was unchecked, it became impossible to select the EmuNAND if having a corresponding directional pad payload. Now it's possible to do this by holding A + the directional pad button.
  • Added UTF-8 support to customversion.txt. You can now use symbols, including those special Nintendo font ones :P

v6.2.2: Fixed question marks at the beginning of the custom strings with files created by Windows Notepad.

Luma3DS - v6.2

Published by AuroraWright about 8 years ago

Both versions:

  • Revamped EmuNAND support: up to four EmuNANDs are now supported, the default can be selected in the config and it can be changed on boot by holding Up/Right/Down/Left (respectively for EmuNAND 1/2/3/4); other than the legacy layout the minsize layout (for RedNANDs only) and the default layout are now also supported
  • Added a B payload (b_NAME.bin) to the chainloader
  • PIN changes: the number of digits to input is now shown, a message on the bottom screen can be displayed by placing a text file named pinmessage.txt in luma (800 characters maximum)
  • Implemented custom System Settings Ver. string, it needs to be in a text file named customversion.txt (19 characters maximum) in luma, with the stock Nintendo string being Ver. %d.%d.%d-%d%ls
  • When booting with R and the Use SysNAND FIRM if booting with R option is selected, FIRM will be loaded from the default EmuNAND instead of the first one and you can choose a different one with the directional pad, in the same way you would select the EmuNAND
  • Changed the logic of the NIM update patch to only be applied when booting with R
  • Hid the New 3DS CPU setting on Old 3DS
  • Show descriptions for the options on the bottom screen
  • Fixed support for pre-9.0 FIRMs. Luma3DS now directly supports >= 5.x FIRMs, as intended
  • Fixed crashes for people with pre-patched Home Menu and NS module
  • Added boundary checks for files loaded from SD
  • More code refactoring

Dev version:

  • Fixed crashes on some Old 3DS FIRMs (such as 9.0)
  • Added displaying a partial stack dump on the bottom screen when handling an exception
Luma3DS - v6.1.2

Published by AuroraWright about 8 years ago

On both branches:

  • 1.x and 2.x NATIVE_FIRM are now supported on SysNAND with the FIRM writes patch, this allows you to update retaining A9LH on every system version.
  • PIN changes: you can now set the PIN length and easily change the PIN (you will get a prompt when exiting the config menu, which can be skipped with START), booting SAFE_MODE is easier with a PIN, the PIN file gets deleted when disabling the PIN lock.
  • The TWL dev launcher patch has been removed as it's no longer needed and causes incompatibilities with a lot of NTR/TWL games.
  • New config.bin format which allows to automatically discard the configuration as soon as it becomes incompatible with new Luma3DS releases.
  • Large amounts of code refactoring and cleanups.

On dev branch only:

  • Fixed crashes on New 3DS with the "Disable access checks" option enabled on FIRMs between 9.3 and 10.4. Unfortunately the service and archive checks patch can't work on said firmwares, and won't be applied.
  • ARM9 debugging has been removed from TWL and AGB FIRMs as it didn't work and didn't serve a real purpose.
  • The "Disable access checks" option has been renamed to "Patch SVC/service/archive/ARM9 access".
Luma3DS - v6.1.1

Published by AuroraWright about 8 years ago

On both branches:

  • Fixed a likely issue with the TwlBg patch and made it selectable, as it triggers antipiracy checks for some DS games and possibly causes other issues.
  • Fixed 3ds_injector picking up the previous boot configuration, which caused several bugs (like the NIM update patch activating when not needed - remember to select "Use SysNAND FIRM if booting with R" if you use a SysNAND setup).
  • 1.25s speed boost on boot.
  • Minor cleanups.

On dev branch only:

  • Fixed another critical bug in the exception handlers.