diff --git a/include/arm11/main.h b/include/arm11/main.h index 42f469e..ac08e87 100644 --- a/include/arm11/main.h +++ b/include/arm11/main.h @@ -19,9 +19,5 @@ */ - -// true: skip/leave menu -extern volatile bool g_continueBootloader; - // 0 if no FIRM loaded / 1...3 FIRM loaded from slot / > 3 FIRM loaded from elsewhere extern volatile u32 g_startFirmLaunch; diff --git a/include/arm11/menu/menu.h b/include/arm11/menu/menu.h index 2ee077f..c5ad16e 100644 --- a/include/arm11/menu/menu.h +++ b/include/arm11/menu/menu.h @@ -21,6 +21,8 @@ #include "types.h" #include "arm11/console.h" +#define MENU_LEAVE_PARAM ((u32) -1) + #define MENU_MAX_ENTRIES 8 #define MENU_MAX_DEPTH 4 diff --git a/include/arm11/menu/menu_fb3ds.h b/include/arm11/menu/menu_fb3ds.h index fbb4727..ebb428e 100644 --- a/include/arm11/menu/menu_fb3ds.h +++ b/include/arm11/menu/menu_fb3ds.h @@ -78,7 +78,7 @@ { "Main Menu", 6, NULL, 0, { - { "Continue boot", DESC_CONTINUE, &menuContinueBoot, 0 }, + { "Continue boot", DESC_CONTINUE, NULL, MENU_LEAVE_PARAM }, { "Boot menu...", DESC_BOOT_MENU, NULL, 1 }, { "Boot from file...", DESC_BOOT_FILE, &menuLaunchFirm, 0xFF }, { "NAND tools...", DESC_NAND_TOOLS, NULL, 7 }, diff --git a/include/arm11/menu/menu_func.h b/include/arm11/menu/menu_func.h index ec2addb..135fd01 100644 --- a/include/arm11/menu/menu_func.h +++ b/include/arm11/menu/menu_func.h @@ -40,7 +40,6 @@ u32 menuRestoreNand(PrintConsole* term_con, PrintConsole* menu_con, u32 param); u32 menuInstallFirm(PrintConsole* term_con, PrintConsole* menu_con, u32 param); u32 menuUpdateFastboot3ds(PrintConsole* term_con, PrintConsole* menu_con, u32 param); -u32 menuContinueBoot(PrintConsole* term_con, PrintConsole* menu_con, u32 param); u32 menuShowCredits(PrintConsole* term_con, PrintConsole* menu_con, u32 param); // everything below has to go diff --git a/source/arm11/main.c b/source/arm11/main.c index d004a15..cd0a32d 100644 --- a/source/arm11/main.c +++ b/source/arm11/main.c @@ -37,7 +37,6 @@ #include "fsutils.h" -volatile bool g_continueBootloader = true; volatile u32 g_startFirmLaunch = 0; @@ -114,7 +113,7 @@ // show splash if (bootmode != BootModeSilent) if(show_menu || (bootmode != BootModeQuiet)) { - GFX_init(); + if (!gfx_initialized) GFX_init(); gfx_initialized = true; if (drawSplashscreen(banner_spla, -1, -1)) @@ -161,7 +160,6 @@ consoleInit(SCREEN_SUB, &menu_con, false); // run menu - g_continueBootloader = false; menuProcess(&menu_con, &term_con, menu_fb3ds); // clear consoles and screen @@ -179,7 +177,7 @@ } // search for a bootable firmware (all slots) - if (g_continueBootloader && !g_startFirmLaunch) + if (!g_startFirmLaunch) { err_string = (char*) malloc(512); char* err_ptr = err_string; @@ -280,5 +278,6 @@ // reaching here was never intended.... + panicMsg("Reached code end!"); return 0; } diff --git a/source/arm11/menu/menu.c b/source/arm11/menu/menu.c index 5cdd733..2400a7e 100644 --- a/source/arm11/menu/menu.c +++ b/source/arm11/menu/menu.c @@ -276,7 +276,7 @@ u32 last_index = (u32) -1; // main menu processing loop - while (!g_startFirmLaunch && !g_continueBootloader) { + while (!g_startFirmLaunch) { // update menu and description (on demand) if ((index != last_index) || (curr_menu != last_menu)) { menuDraw(curr_menu, menu_con, index); @@ -304,6 +304,12 @@ } else if ((kDown & KEY_A) && (curr_menu->entries[index].function == NULL)) { + u32 next_menu_idx = curr_menu->entries[index].param; + + // special handling for MENU_LEAVE_PARAM + if (next_menu_idx == MENU_LEAVE_PARAM) + break; + // store previous menu and index for return if (menu_lvl < MENU_MAX_DEPTH) { @@ -312,7 +318,7 @@ menu_lvl++; } // enter submenu - curr_menu = info + curr_menu->entries[index].param; + curr_menu = info + next_menu_idx; index = 0; } else if (kDown & KEY_A) diff --git a/source/arm11/menu/menu_func.c b/source/arm11/menu/menu_func.c index b4e3739..70cfcd2 100644 --- a/source/arm11/menu/menu_func.c +++ b/source/arm11/menu/menu_func.c @@ -320,16 +320,6 @@ return 1; } -u32 menuContinueBoot(PrintConsole* term_con, PrintConsole* menu_con, u32 param) -{ - // all the relevant stuff handled outside - (void) term_con; - (void) menu_con; - (void) param; - g_continueBootloader = true; - return 0; -} - u32 menuBackupNand(PrintConsole* term_con, PrintConsole* menu_con, u32 param) { (void) menu_con;