From 0ba88b55b7fb41c0cb9ff6dca5eac1e3253d588e Mon Sep 17 00:00:00 2001 From: Gericom Date: Sat, 10 Jan 2026 16:35:00 +0100 Subject: [PATCH] Only setup homebrew bootstub when launcherPath is set --- arm7/source/header.cpp | 6 +----- arm7/source/loader/NdsLoader.cpp | 24 ++++++++++++++---------- arm9/source/main.cpp | 7 +++---- common/ipcCommands.h | 26 +++++++++++++------------- 4 files changed, 31 insertions(+), 32 deletions(-) diff --git a/arm7/source/header.cpp b/arm7/source/header.cpp index 8bac928..e1db34b 100644 --- a/arm7/source/header.cpp +++ b/arm7/source/header.cpp @@ -10,9 +10,5 @@ extern u8 __bss_size[]; pload_header7_t gLoaderHeader { .entryPoint = (void*)&_start, - .apiVersion = PICO_LOADER_API_VERSION, - .v2 = - { - .launcherPath = "/_picoboot.nds" - } + .apiVersion = PICO_LOADER_API_VERSION }; \ No newline at end of file diff --git a/arm7/source/loader/NdsLoader.cpp b/arm7/source/loader/NdsLoader.cpp index 1cf6f2e..36f95de 100644 --- a/arm7/source/loader/NdsLoader.cpp +++ b/arm7/source/loader/NdsLoader.cpp @@ -436,17 +436,21 @@ void NdsLoader::InsertArgv() void NdsLoader::HandleHomebrewPatching() { - sendToArm9(IPC_COMMAND_ARM9_APPLY_HOMEBREW_PATCHES); - sendToArm9(16 * 1024); // required dldi space - void* dldiSpace = (void*)receiveFromArm9(); - char* launcherPath = (char*)receiveFromArm9(); - if (dldiSpace != nullptr) + if (_launcherPath != nullptr && _launcherPath[0] != 0) { - dldi_copyTo(dldiSpace); - } - if (launcherPath != nullptr) - { - strncpy(launcherPath, _launcherPath, 256); + sendToArm9(IPC_COMMAND_ARM9_SETUP_HOMEBREW_BOOTSTUB); + sendToArm9(16 * 1024); // required dldi space + void* dldiSpace = (void*)receiveFromArm9(); + char* launcherPath = (char*)receiveFromArm9(); + if (dldiSpace != nullptr) + { + dldi_copyTo(dldiSpace); + } + if (launcherPath != nullptr) + { + strncpy(launcherPath, _launcherPath, 256); + launcherPath[255] = 0; + } } } diff --git a/arm9/source/main.cpp b/arm9/source/main.cpp index 10e331e..e731381 100644 --- a/arm9/source/main.cpp +++ b/arm9/source/main.cpp @@ -233,9 +233,8 @@ static void handleBootCommand() bootArm9(); } -static void handleApplyHomebrewPatches(u32 dldiRequiredSpace) +static void handleSetupHomebrewBootstub(u32 dldiRequiredSpace) { - // Insert bootstub PatchHeap patchHeap; PatchCodeCollection patchCodeCollection; void* patchSpace = (void*)&HOMEBREW_BOOTSTUB[1]; @@ -328,10 +327,10 @@ static void handleArm7Command(u32 command) handleBootCommand(); break; } - case IPC_COMMAND_ARM9_APPLY_HOMEBREW_PATCHES: + case IPC_COMMAND_ARM9_SETUP_HOMEBREW_BOOTSTUB: { u32 dldiRequiredSpace = receiveFromArm7(); - handleApplyHomebrewPatches(dldiRequiredSpace); + handleSetupHomebrewBootstub(dldiRequiredSpace); break; } } diff --git a/common/ipcCommands.h b/common/ipcCommands.h index 4328988..8809fd5 100644 --- a/common/ipcCommands.h +++ b/common/ipcCommands.h @@ -1,15 +1,15 @@ #pragma once -#define IPC_COMMAND_ARM9_WRAM_CONFIG 1 -#define IPC_COMMAND_ARM9_CLEAR_MAIN_MEM 2 -#define IPC_COMMAND_ARM9_APPLY_PATCHES 3 -#define IPC_COMMAND_ARM9_APPLY_ARM7_PATCHES 4 -#define IPC_COMMAND_ARM9_SET_AP_INFO 5 -#define IPC_COMMAND_ARM9_SET_ROM_FILE_INFO 6 -#define IPC_COMMAND_ARM9_INITIALIZE_SD_CARD 8 -#define IPC_COMMAND_ARM9_INITIALIZE_LOADER_INFO 9 -#define IPC_COMMAND_ARM9_GET_SD_FUNCTIONS 0xA -#define IPC_COMMAND_ARM9_DISPLAY_ERROR 0xB -#define IPC_COMMAND_ARM9_SWITCH_TO_DS_MODE 0xD -#define IPC_COMMAND_ARM9_BOOT 0xF -#define IPC_COMMAND_ARM9_APPLY_HOMEBREW_PATCHES 0x10 +#define IPC_COMMAND_ARM9_WRAM_CONFIG 1 +#define IPC_COMMAND_ARM9_CLEAR_MAIN_MEM 2 +#define IPC_COMMAND_ARM9_APPLY_PATCHES 3 +#define IPC_COMMAND_ARM9_APPLY_ARM7_PATCHES 4 +#define IPC_COMMAND_ARM9_SET_AP_INFO 5 +#define IPC_COMMAND_ARM9_SET_ROM_FILE_INFO 6 +#define IPC_COMMAND_ARM9_INITIALIZE_SD_CARD 8 +#define IPC_COMMAND_ARM9_INITIALIZE_LOADER_INFO 9 +#define IPC_COMMAND_ARM9_GET_SD_FUNCTIONS 0xA +#define IPC_COMMAND_ARM9_DISPLAY_ERROR 0xB +#define IPC_COMMAND_ARM9_SWITCH_TO_DS_MODE 0xD +#define IPC_COMMAND_ARM9_BOOT 0xF +#define IPC_COMMAND_ARM9_SETUP_HOMEBREW_BOOTSTUB 0x10