Closes#2137.
Even though (when running TWL/AGB FIRM) the SoC is in O3DS mode, and the GPU also is,
as well as most other components behaving as such (external RAM, L2C not usable, etc.),
this is NOT the case for the LCD and adaptive backlight logic which retains FULL N3DS
functionality, including a feature where the window is blended with a given color depending
on the overall relative luminance of that window.
However, Nintendo's own code mistakenly assumes the opposite, and clearly so ("if GPU in N3DS mode"
checks, not passing N3DS extra adaptive backlight (ABL) to TWL/AGB_FIRM). This has implications:
- Powersaving (ABL) settings in TWL/AGB_FIRM is inconsistent with *both* O3DS (because the new RGB blend
LUT has been set to its current value by NATIVE_FIRM) and N3DS (because "pwn_cnt" and "inertia" are missing
their N3DS-only bits)
- "rave party" when booting into TWL/AGB_FIRM or O3DS NATIVE_FIRM without these regs (well, the LUT)
initialized. Easiest way to do so is by leveraging the "DSi autooboot" feature Luma provides. It is worth
noting at least the LUT survives hardware reboots (if Nintendo were using DSi software that was using
TLNC-based reboots, they wouldn't have noticed).
Only touch the autoboot path, for now
Add option to make the 3DS screens look like sRGB monitors. While this
is not perfect (due to screen variance, and it may make dark tones
slightly darker), this significantly improves the color fidelity of
homebrew and custon HOME Menu themes, removing that "blueish, washed-out
look".
Do note that first-party party 3DS games are designed around the 3DS's
"washed-out" color curve, and may not need that adjustment.
(done in collaboration with @profi200)
Closes#1882.
Whenever power button is held long enough ("force shutdown"), mcu sysmodule
stores a flag in free reg 0. It will clear it next boot.
During that next boot, if that flag was set and if CFG_BOOTENV.bit0 is set
(warmboot/firm chainload, i.e. not coldbooting), then main() will simulate
a "power button held" interrupt (after upgrading mcu fw if necessary -- it
will reboot console after if it has upgraded mcu fw, I guess that's one of
the reasons the flag is there). This obviously cause other processes to initiate
a shutdown.
In the case of autoboot, ns will panic when this happens.
- Remove allow_updown_leftright_dsi (option was unused and useless)
- Hide enable_dsi_external_filter. Do not mention out-of-date wiki,
fixes#1992
- Limit gamma to a more reasonable value of 8, fixes#1989
- Move emuNAND hook to ITCM, fixing previously untested emuNAND support
for 5.0 (and possibly more versions). This was a very long-standing
bug
- Fix booting on versions 4.x to 8.x, and restore full support for 5.x
to 8.x. All Arm11 custom sysmodules and k11ext have been disabled on
4.x because the Luma3DS v13.0 changes couldn't be ported (this means
no Rosalina and no region-free and such, and while I could restore
some of the functionality, you should just update *after* installing
Luma, like you've been instructed to)
While the copy to NAND process is generally a good idea for end users,
this can quickly get annoying for actual developers looking to test
low level stuff or contribute to Luma3DS if a testing FIRM gets sent to
the NAND.
This commit adds all the changes made to the 3GX plugin loader fork of Luma3DS. The most important features are:
- Add 3GX plugin loader support. New service added to rosalina: plg:ldr
- Add svcControlProcess, svcControlMemoryUnsafe and improve svcMapProcessMemoryEx (breaking change)
- Allow applications to override certain configurations depending on their needs:
- Disable core2 thread redirection
- Disable game patching for the next app
- Force New 3DS speedup
- Force next application in a specific memory mode
- Block the opening of the Rosalina menu
- Add GDB commands to list all process handles and catch all SVC (latter is for IDA Pro as gdb client supports it)
- Other changes necessary for plugins to work properly. Please check changed files in this PR for more details.
---------
Co-authored-by: PabloMK7 <hackyglitch@gmail.com>
Co-authored-by: Nanquitas <nath.doidi@gmail.com>
Co-authored-by: TuxSH <1922548+TuxSH@users.noreply.github.com>
As we forgot to patch LGY k11, we were limited by the current size of the KIP.
That is not the case anymore and LGY k11 does support uncompressed KIPs.
This is a leftover from the Gateway era that has long lost its utility
and that unnecessarily complicated the code base.
Please just load an external FIRM from SD card if you need something
similar.
Also refactor the multi-EmuNAND code and CTRNAND mounting code.
... even when HPs aren't inserted.
This is aimed at people using Bluetooth audio hw mods.
There are some software limitations, please read the INI/option
description.
Closes#1828.
N3DS-only option. See config.ini for details and context. This should
make very demanding games (those which already use 3x clockrate and L2C
by default, like Pokémon US/UM) between 5 to 15% faster. Not widely
tested, and can potentially break some games and other apps.
For stuff like testing PASLR, *hax2x, khc3ds, etc.
Also fix a corner-case bug when changing the 3dsx app from itself to
itself, if its TID corresponds to the default.
This being said, neither legacy FIRM nor DSiWare actually support
EmuNAND; installing the same TWL title on both SysNAND and EmuNAND and
then launch it from EmuNAND will work though.
It is only when exiting AGB firm that we want to boot SysNAND no matter
what, because the save file has been written on a partition in SysNAND.
This is mainly to ensure we reboot to the proper NAND in case we reboot.
Add config option to autoboot into 3DS and DSi homebrew menu, without
going through Home Menu (nor launching it).
For 3DS homebrew, this requires homebrew built with libctru v2.0.0 or
later (v2.0.0 was released 2.5y ago).
We simulate a "reboot into title" to achieve this. This being said, when
launching stuff like Pokemon US/UM on O3DS, Home Menu reboots into
itself and not the game directly. This will cause Home Menu to crash if
you use this feature and configure it to use a non-default memory layout
(but if you don't, Home Menu will work just fine).
Upgrade process always copied sdmc:/boot.firm to nand:/boot.firm even if
Luma3DS was chainloaded from another path.
Fix this by copying from argv[0], if Luma3DS was launched from the SD
card.
Also use "sdmc:" and "nand:" instead of "0:" and "1:" when using FatFS.
Closes#1776.