Add enable_dsi_external_filter and allow_updown_leftright_dsi
This commit is contained in:
parent
cf3cf12414
commit
41edcde5c0
Binary file not shown.
@ -64,6 +64,8 @@ static const char *singleOptionIniNamesBoot[] = {
|
|||||||
"app_syscore_threads_on_core_2",
|
"app_syscore_threads_on_core_2",
|
||||||
"show_system_settings_string",
|
"show_system_settings_string",
|
||||||
"show_gba_boot_screen",
|
"show_gba_boot_screen",
|
||||||
|
"enable_dsi_external_filter",
|
||||||
|
"allow_updown_leftright_dsi",
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *singleOptionIniNamesMisc[] = {
|
static const char *singleOptionIniNamesMisc[] = {
|
||||||
@ -649,6 +651,7 @@ static size_t saveLumaIniConfigToStr(char *out)
|
|||||||
(int)CONFIG(AUTOBOOTEMU), (int)CONFIG(LOADEXTFIRMSANDMODULES),
|
(int)CONFIG(AUTOBOOTEMU), (int)CONFIG(LOADEXTFIRMSANDMODULES),
|
||||||
(int)CONFIG(PATCHGAMES), (int)CONFIG(REDIRECTAPPTHREADS),
|
(int)CONFIG(PATCHGAMES), (int)CONFIG(REDIRECTAPPTHREADS),
|
||||||
(int)CONFIG(PATCHVERSTRING), (int)CONFIG(SHOWGBABOOT),
|
(int)CONFIG(PATCHVERSTRING), (int)CONFIG(SHOWGBABOOT),
|
||||||
|
(int)CONFIG(ENABLEDSIEXTFILTER), (int)CONFIG(ALLOWUPDOWNLEFTRIGHTDSI),
|
||||||
|
|
||||||
1 + (int)MULTICONFIG(DEFAULTEMU), 4 - (int)MULTICONFIG(BRIGHTNESS),
|
1 + (int)MULTICONFIG(DEFAULTEMU), 4 - (int)MULTICONFIG(BRIGHTNESS),
|
||||||
splashPosStr, (unsigned int)cfg->splashDurationMsec,
|
splashPosStr, (unsigned int)cfg->splashDurationMsec,
|
||||||
@ -828,6 +831,8 @@ void configMenu(bool oldPinStatus, u32 oldPinMode)
|
|||||||
"( ) Redirect app. syscore threads to core2",
|
"( ) Redirect app. syscore threads to core2",
|
||||||
"( ) Show NAND or user string in System Settings",
|
"( ) Show NAND or user string in System Settings",
|
||||||
"( ) Show GBA boot screen in patched AGB_FIRM",
|
"( ) Show GBA boot screen in patched AGB_FIRM",
|
||||||
|
"( ) Enable custom upscaling filters for DSi",
|
||||||
|
"( ) Allow Left+Right / Up+Down combos for DSi",
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *optionsDescription[] = { "Select the default EmuNAND.\n\n"
|
static const char *optionsDescription[] = { "Select the default EmuNAND.\n\n"
|
||||||
@ -912,6 +917,18 @@ void configMenu(bool oldPinStatus, u32 oldPinMode)
|
|||||||
|
|
||||||
"Enable showing the GBA boot screen\n"
|
"Enable showing the GBA boot screen\n"
|
||||||
"when booting GBA games.",
|
"when booting GBA games.",
|
||||||
|
|
||||||
|
"Enable replacing the default upscaling\n"
|
||||||
|
"filter used for DS(i) software by the\n"
|
||||||
|
"contents of:\n\n"
|
||||||
|
"/luma/twl_upscaling_filter.bin\n\n"
|
||||||
|
"Refer to the wiki for further details.",
|
||||||
|
|
||||||
|
"Allow Left+Right and Up+Down button\n"
|
||||||
|
"combos (using DPAD and CPAD\n"
|
||||||
|
"simultaneously) in DS(i) software.\n\n"
|
||||||
|
"Commercial software filter these\n"
|
||||||
|
"combos on their own too, though.",
|
||||||
};
|
};
|
||||||
|
|
||||||
FirmwareSource nandType = FIRMWARE_SYSNAND;
|
FirmwareSource nandType = FIRMWARE_SYSNAND;
|
||||||
@ -949,6 +966,8 @@ void configMenu(bool oldPinStatus, u32 oldPinMode)
|
|||||||
{ .visible = ISN3DS },
|
{ .visible = ISN3DS },
|
||||||
{ .visible = true },
|
{ .visible = true },
|
||||||
{ .visible = true },
|
{ .visible = true },
|
||||||
|
{ .visible = true },
|
||||||
|
{ .visible = true },
|
||||||
};
|
};
|
||||||
|
|
||||||
//Calculate the amount of the various kinds of options and pre-select the first single one
|
//Calculate the amount of the various kinds of options and pre-select the first single one
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
#define CONFIG_FILE "config.ini"
|
#define CONFIG_FILE "config.ini"
|
||||||
#define CONFIG_VERSIONMAJOR 3
|
#define CONFIG_VERSIONMAJOR 3
|
||||||
#define CONFIG_VERSIONMINOR 9
|
#define CONFIG_VERSIONMINOR 10
|
||||||
|
|
||||||
#define BOOTCFG_NAND BOOTCONFIG(0, 1)
|
#define BOOTCFG_NAND BOOTCONFIG(0, 1)
|
||||||
#define BOOTCFG_EMUINDEX BOOTCONFIG(1, 3)
|
#define BOOTCFG_EMUINDEX BOOTCONFIG(1, 3)
|
||||||
@ -62,6 +62,8 @@ enum singleOptions
|
|||||||
REDIRECTAPPTHREADS,
|
REDIRECTAPPTHREADS,
|
||||||
PATCHVERSTRING,
|
PATCHVERSTRING,
|
||||||
SHOWGBABOOT,
|
SHOWGBABOOT,
|
||||||
|
ENABLEDSIEXTFILTER,
|
||||||
|
ALLOWUPDOWNLEFTRIGHTDSI,
|
||||||
PATCHUNITINFO,
|
PATCHUNITINFO,
|
||||||
DISABLEARM11EXCHANDLERS,
|
DISABLEARM11EXCHANDLERS,
|
||||||
ENABLESAFEFIRMROSALINA,
|
ENABLESAFEFIRMROSALINA,
|
||||||
|
@ -483,11 +483,7 @@ static void mergeSection0(FirmwareType firmType, u32 firmVersion, bool loadFromS
|
|||||||
CopyKipResult copyRes = copyKip(dst, moduleList[i].src, maxModuleSize, isStockTwlBg);
|
CopyKipResult copyRes = copyKip(dst, moduleList[i].src, maxModuleSize, isStockTwlBg);
|
||||||
|
|
||||||
if (isStockTwlBg)
|
if (isStockTwlBg)
|
||||||
{
|
patchTwlBg(copyRes.codeDstAddr, copyRes.codeSize);
|
||||||
u32 patchRes = patchTwlBg(copyRes.codeDstAddr, copyRes.codeSize);
|
|
||||||
if (patchRes > 0)
|
|
||||||
error("Failed to apply %d TwlBg patch(es)", patchRes);
|
|
||||||
}
|
|
||||||
|
|
||||||
dst += copyRes.cxiSize;
|
dst += copyRes.cxiSize;
|
||||||
maxModuleSize -= copyRes.cxiSize;
|
maxModuleSize -= copyRes.cxiSize;
|
||||||
|
@ -767,9 +767,45 @@ u32 patchAgbBootSplash(u8 *pos, u32 size)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 patchTwlBg(u8 *pos, u32 size)
|
void patchTwlBg(u8 *pos, u32 size)
|
||||||
{
|
{
|
||||||
(void)pos;
|
// You can use the following Python code to convert something like below
|
||||||
(void)size;
|
// into twl_upscaling_filter.bin:
|
||||||
return 0;
|
// import struct; open("twl_upscaling_filter.bin", "wb+").write(struct.pack("<30H", [array contents]))
|
||||||
|
static const u16 nintendoFilterTwl[] = {
|
||||||
|
0x0000, 0x004E, 0x011D, 0x01E3, 0x01C1,
|
||||||
|
0x0000, 0xFCA5, 0xF8D0, 0xF69D, 0xF873,
|
||||||
|
0x0000, 0x0D47, 0x1E35, 0x2F08, 0x3B6F,
|
||||||
|
0x4000, 0x3B6F, 0x2F08, 0x1E35, 0x0D47,
|
||||||
|
0x0000, 0xF873, 0xF69D, 0xF8D0, 0xFCA5,
|
||||||
|
0x0000, 0x01C1, 0x01E3, 0x011D, 0x004E,
|
||||||
|
};
|
||||||
|
|
||||||
|
// "error" func doesn't seem to work here
|
||||||
|
if (CONFIG(ENABLEDSIEXTFILTER))
|
||||||
|
{
|
||||||
|
u16 filter[5*6] = { 0 };
|
||||||
|
u32 rd = fileRead(filter, "twl_upscaling_filter.bin", sizeof(filter));
|
||||||
|
if (rd == sizeof(filter))
|
||||||
|
{
|
||||||
|
// else error("Failed to apply enable_dsi_external_filter:\n\ntwl_upscaling_filter.bin is missing or invalid.");
|
||||||
|
u8 *off = memsearch(pos, nintendoFilterTwl, size, sizeof(nintendoFilterTwl));
|
||||||
|
if (off != NULL)
|
||||||
|
memcpy(off, filter, sizeof(filter));
|
||||||
|
// else error("Failed to apply enable_dsi_external_filter.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (CONFIG(ALLOWUPDOWNLEFTRIGHTDSI))
|
||||||
|
{
|
||||||
|
u16 *off2;
|
||||||
|
for (off2 = (u16 *)pos; (u8 *)off2 < pos + size && (off2[0] != 0x2040 || off2[1] != 0x4020); off2++);
|
||||||
|
|
||||||
|
if ((u8 *)off2 < pos + size)
|
||||||
|
{
|
||||||
|
// else error("Failed to apply allow_updown_leftright_dsi.");
|
||||||
|
for (u32 i = 0; i < 8; i++)
|
||||||
|
off2[i] = 0x46C0;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
@ -66,4 +66,4 @@ u32 patchTwlFlashcartChecks(u8 *pos, u32 size, u32 firmVersion);
|
|||||||
u32 patchOldTwlFlashcartChecks(u8 *pos, u32 size);
|
u32 patchOldTwlFlashcartChecks(u8 *pos, u32 size);
|
||||||
u32 patchTwlShaHashChecks(u8 *pos, u32 size);
|
u32 patchTwlShaHashChecks(u8 *pos, u32 size);
|
||||||
u32 patchAgbBootSplash(u8 *pos, u32 size);
|
u32 patchAgbBootSplash(u8 *pos, u32 size);
|
||||||
u32 patchTwlBg(u8 *pos, u32 size);
|
void patchTwlBg(u8 *pos, u32 size); // silently fails
|
||||||
|
@ -33,6 +33,8 @@ enum singleOptions
|
|||||||
REDIRECTAPPTHREADS,
|
REDIRECTAPPTHREADS,
|
||||||
PATCHVERSTRING,
|
PATCHVERSTRING,
|
||||||
SHOWGBABOOT,
|
SHOWGBABOOT,
|
||||||
|
ENABLEDSIEXTFILTER,
|
||||||
|
ALLOWUPDOWNLEFTRIGHTDSI,
|
||||||
PATCHUNITINFO,
|
PATCHUNITINFO,
|
||||||
DISABLEARM11EXCHANDLERS,
|
DISABLEARM11EXCHANDLERS,
|
||||||
ENABLESAFEFIRMROSALINA,
|
ENABLESAFEFIRMROSALINA,
|
||||||
|
@ -36,6 +36,8 @@ enum singleOptions
|
|||||||
REDIRECTAPPTHREADS,
|
REDIRECTAPPTHREADS,
|
||||||
PATCHVERSTRING,
|
PATCHVERSTRING,
|
||||||
SHOWGBABOOT,
|
SHOWGBABOOT,
|
||||||
|
ENABLEDSIEXTFILTER,
|
||||||
|
ALLOWUPDOWNLEFTRIGHTDSI,
|
||||||
PATCHUNITINFO,
|
PATCHUNITINFO,
|
||||||
DISABLEARM11EXCHANDLERS,
|
DISABLEARM11EXCHANDLERS,
|
||||||
ENABLESAFEFIRMROSALINA,
|
ENABLESAFEFIRMROSALINA,
|
||||||
|
@ -30,6 +30,8 @@ enum singleOptions
|
|||||||
REDIRECTAPPTHREADS,
|
REDIRECTAPPTHREADS,
|
||||||
PATCHVERSTRING,
|
PATCHVERSTRING,
|
||||||
SHOWGBABOOT,
|
SHOWGBABOOT,
|
||||||
|
ENABLEDSIEXTFILTER,
|
||||||
|
ALLOWUPDOWNLEFTRIGHTDSI,
|
||||||
PATCHUNITINFO,
|
PATCHUNITINFO,
|
||||||
DISABLEARM11EXCHANDLERS,
|
DISABLEARM11EXCHANDLERS,
|
||||||
ENABLESAFEFIRMROSALINA,
|
ENABLESAFEFIRMROSALINA,
|
||||||
|
Binary file not shown.
@ -38,6 +38,8 @@ enum singleOptions
|
|||||||
REDIRECTAPPTHREADS,
|
REDIRECTAPPTHREADS,
|
||||||
PATCHVERSTRING,
|
PATCHVERSTRING,
|
||||||
SHOWGBABOOT,
|
SHOWGBABOOT,
|
||||||
|
ENABLEDSIEXTFILTER,
|
||||||
|
ALLOWUPDOWNLEFTRIGHTDSI,
|
||||||
PATCHUNITINFO,
|
PATCHUNITINFO,
|
||||||
DISABLEARM11EXCHANDLERS,
|
DISABLEARM11EXCHANDLERS,
|
||||||
ENABLESAFEFIRMROSALINA,
|
ENABLESAFEFIRMROSALINA,
|
||||||
|
@ -168,6 +168,7 @@ static size_t LumaConfig_SaveLumaIniConfigToStr(char *out, const CfgData *cfg)
|
|||||||
(int)CONFIG(AUTOBOOTEMU), (int)CONFIG(LOADEXTFIRMSANDMODULES),
|
(int)CONFIG(AUTOBOOTEMU), (int)CONFIG(LOADEXTFIRMSANDMODULES),
|
||||||
(int)CONFIG(PATCHGAMES), (int)CONFIG(REDIRECTAPPTHREADS),
|
(int)CONFIG(PATCHGAMES), (int)CONFIG(REDIRECTAPPTHREADS),
|
||||||
(int)CONFIG(PATCHVERSTRING), (int)CONFIG(SHOWGBABOOT),
|
(int)CONFIG(PATCHVERSTRING), (int)CONFIG(SHOWGBABOOT),
|
||||||
|
(int)CONFIG(ENABLEDSIEXTFILTER), (int)CONFIG(ALLOWUPDOWNLEFTRIGHTDSI),
|
||||||
|
|
||||||
1 + (int)MULTICONFIG(DEFAULTEMU), 4 - (int)MULTICONFIG(BRIGHTNESS),
|
1 + (int)MULTICONFIG(DEFAULTEMU), 4 - (int)MULTICONFIG(BRIGHTNESS),
|
||||||
splashPosStr, (unsigned int)cfg->splashDurationMsec,
|
splashPosStr, (unsigned int)cfg->splashDurationMsec,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user