Merge pull request #561 from SciresM/master

Add config option to disable exception vectors.
This commit is contained in:
TuxSH 2017-06-09 00:17:14 +02:00 committed by GitHub
commit 4d99143da0
6 changed files with 53 additions and 3 deletions

View File

@ -94,6 +94,7 @@ void configMenu(bool oldPinStatus, u32 oldPinMode)
"( ) Show GBA boot screen in patched AGB_FIRM", "( ) Show GBA boot screen in patched AGB_FIRM",
"( ) Patch ARM9 access", "( ) Patch ARM9 access",
"( ) Set developer UNITINFO", "( ) Set developer UNITINFO",
"( ) Disable Exception Vectors",
}; };
const char *optionsDescription[] = { "Select the default EmuNAND.\n\n" const char *optionsDescription[] = { "Select the default EmuNAND.\n\n"
@ -187,6 +188,13 @@ void configMenu(bool oldPinStatus, u32 oldPinMode)
"and booting some developer software).\n\n" "and booting some developer software).\n\n"
"Only select this if you know what you\n" "Only select this if you know what you\n"
"are doing!", "are doing!",
"Disables the fatal error exception\n"
"vectors for the ARM11 CPU\n"
"Note: Disabling the exception vectors\n"
"will disqualify you from submitting\n"
"issues or bug reports to the Luma3DS\n"
"GitHub repository!"
}; };
struct multiOption { struct multiOption {
@ -214,6 +222,7 @@ void configMenu(bool oldPinStatus, u32 oldPinMode)
{ .visible = true }, { .visible = true },
{ .visible = true }, { .visible = true },
{ .visible = true }, { .visible = true },
{ .visible = true },
{ .visible = true } { .visible = true }
}; };

View File

@ -34,7 +34,7 @@
#define CONFIG_FILE "config.bin" #define CONFIG_FILE "config.bin"
#define CONFIG_VERSIONMAJOR 1 #define CONFIG_VERSIONMAJOR 1
#define CONFIG_VERSIONMINOR 12 #define CONFIG_VERSIONMINOR 13
#define BOOTCFG_NAND BOOTCONFIG(0, 7) #define BOOTCFG_NAND BOOTCONFIG(0, 7)
#define BOOTCFG_FIRM BOOTCONFIG(3, 7) #define BOOTCFG_FIRM BOOTCONFIG(3, 7)
@ -58,7 +58,8 @@ enum singleOptions
PATCHVERSTRING, PATCHVERSTRING,
SHOWGBABOOT, SHOWGBABOOT,
PATCHACCESS, PATCHACCESS,
PATCHUNITINFO PATCHUNITINFO,
DISABLEVECTORS
}; };
typedef enum ConfigurationStatus typedef enum ConfigurationStatus

View File

@ -31,7 +31,8 @@ enum singleOptions
PATCHVERSTRING, PATCHVERSTRING,
SHOWGBABOOT, SHOWGBABOOT,
PATCHACCESS, PATCHACCESS,
PATCHUNITINFO PATCHUNITINFO,
DISABLEVECTORS
}; };
void patchCode(u64 progId, u16 progVer, u8 *code, u32 size, u32 textSize, u32 roSize, u32 dataSize, u32 roAddress, u32 dataAddress); void patchCode(u64 progId, u16 progVer, u8 *code, u32 size, u32 textSize, u32 roSize, u32 dataSize, u32 roAddress, u32 dataAddress);

View File

@ -0,0 +1,36 @@
#pragma once
#include "types.h"
#define MAKE_BRANCH(src,dst) (0xEA000000 | ((u32)((((u8 *)(dst) - (u8 *)(src)) >> 2) - 2) & 0xFFFFFF))
#define MAKE_BRANCH_LINK(src,dst) (0xEB000000 | ((u32)((((u8 *)(dst) - (u8 *)(src)) >> 2) - 2) & 0xFFFFFF))
#define CONFIG(a) (((cfwInfo.config >> (a + 17)) & 1) != 0)
#define MULTICONFIG(a) ((cfwInfo.config >> (a * 2 + 7)) & 3)
#define BOOTCONFIG(a, b) ((cfwInfo.config >> a) & b)
#define BOOTCFG_NAND BOOTCONFIG(0, 7)
#define BOOTCFG_FIRM BOOTCONFIG(3, 7)
#define BOOTCFG_NOFORCEFLAG BOOTCONFIG(6, 1)
enum multiOptions
{
DEFAULTEMU = 0,
BRIGHTNESS,
SPLASH,
PIN,
NEWCPU
};
enum singleOptions
{
AUTOBOOTEMU = 0,
USEEMUFIRM,
LOADEXTFIRMSANDMODULES,
PATCHGAMES,
PATCHVERSTRING,
SHOWGBABOOT,
PATCHACCESS,
PATCHUNITINFO,
DISABLEVECTORS
};

View File

@ -26,6 +26,7 @@
#pragma once #pragma once
#include "config.h"
#include "kernel.h" #include "kernel.h"
extern KRecursiveLock *criticalSectionLock; extern KRecursiveLock *criticalSectionLock;

View File

@ -35,6 +35,8 @@
bool isExceptionFatal(u32 spsr, u32 *regs, u32 index) bool isExceptionFatal(u32 spsr, u32 *regs, u32 index)
{ {
if (CONFIG(DISABLEVECTORS)) return false;
if((spsr & 0x1f) != 0x10) return true; if((spsr & 0x1f) != 0x10) return true;
KThread *thread = currentCoreContext->objectContext.currentThread; KThread *thread = currentCoreContext->objectContext.currentThread;