diff --git a/retail/bootloaderi/source/arm7/hook_arm9.c b/retail/bootloaderi/source/arm7/hook_arm9.c index d7b075c09..f487f043a 100644 --- a/retail/bootloaderi/source/arm7/hook_arm9.c +++ b/retail/bootloaderi/source/arm7/hook_arm9.c @@ -31,6 +31,7 @@ #define b_fntFatCached BIT(17) #define b_waitForPreloadToFinish BIT(18) #define b_resetOnFirstException BIT(19) +#define b_resetOnEveryException BIT(20) static const int MAX_HANDLER_LEN = 50; @@ -378,6 +379,8 @@ int hookNdsRetailArm9( } if (!dataToPreloadFound(ndsHeader) && (strncmp(romTid, "YPT", 3) == 0)) { // Puppy Palace ce9->valueBits |= b_resetOnFirstException; + } else if (strncmp(romTid, "CLJ", 3) == 0) { // Mario & Luigi: Bowser's Inside Story + ce9->valueBits |= b_resetOnEveryException; } if (ndsHeader->unitCode == 0 || !dsiMode) { diff --git a/retail/cardenginei/arm9/source/exception.c b/retail/cardenginei/arm9/source/exception.c index e513ac533..06658bbf8 100644 --- a/retail/cardenginei/arm9/source/exception.c +++ b/retail/cardenginei/arm9/source/exception.c @@ -7,6 +7,7 @@ #define dsiBios BIT(11) #define bypassExceptionHandler BIT(16) #define resetOnFirstException BIT(19) +#define resetOnEveryException BIT(20) #define EXCEPTION_VECTOR_SDK1 (*(VoidFn *)(0x27FFD9C)) @@ -23,7 +24,7 @@ void userException() { sharedAddr[0] = 0x524F5245; // 'EROR' #ifndef TWLSDK - if (ce9->valueBits & resetOnFirstException) { + if ((ce9->valueBits & resetOnFirstException) || (ce9->valueBits & resetOnEveryException)) { ce9->valueBits &= ~resetOnFirstException; extern void reset(u32 param, u32 tid2); diff --git a/retail/common/include/cardengine_header_arm9.h b/retail/common/include/cardengine_header_arm9.h index 188650839..842725ba6 100644 --- a/retail/common/include/cardengine_header_arm9.h +++ b/retail/common/include/cardengine_header_arm9.h @@ -105,6 +105,7 @@ typedef struct cardengineArm9 { 17: fntFatCached 18: waitForPreloadToFinish 19: resetOnFirstException + 20: resetOnEveryException */ s32 mainScreen; u32 consoleModel;