Minor stuff (2), update readme
This commit is contained in:
parent
100c3d9e36
commit
11d29368ce
@ -12,7 +12,8 @@ To use it, you will need a console capable of running homebrew software on the A
|
|||||||
## Compiling
|
## Compiling
|
||||||
|
|
||||||
First you need to clone the repository recursively with: `git clone --recursive https://github.com/AuroraWright/Luma3DS.git`
|
First you need to clone the repository recursively with: `git clone --recursive https://github.com/AuroraWright/Luma3DS.git`
|
||||||
To compile, you'll need [armips](https://github.com/Kingcom/armips), [bin2c](https://sourceforge.net/projects/bin2c/), and a recent build of [makerom](https://github.com/profi200/Project_CTR) added to your PATH.
|
To compile, you'll need [armips](https://github.com/Kingcom/armips) and a build of a recent commit of [makerom](https://github.com/profi200/Project_CTR) added to your PATH.
|
||||||
|
For now, you'll also need to update your [libctru](https://github.com/smealum/ctrulib) install, building from the latest commit.
|
||||||
For your convenience, here are [Windows](http://www91.zippyshare.com/v/ePGpjk9r/file.html) and [Linux](https://mega.nz/#!uQ1T1IAD!Q91O0e12LXKiaXh_YjXD3D5m8_W3FuMI-hEa6KVMRDQ) builds of armips (thanks to who compiled them!).
|
For your convenience, here are [Windows](http://www91.zippyshare.com/v/ePGpjk9r/file.html) and [Linux](https://mega.nz/#!uQ1T1IAD!Q91O0e12LXKiaXh_YjXD3D5m8_W3FuMI-hEa6KVMRDQ) builds of armips (thanks to who compiled them!).
|
||||||
Finally just run `make` and everything should work!
|
Finally just run `make` and everything should work!
|
||||||
You can find the compiled files in the `out` folder.
|
You can find the compiled files in the `out` folder.
|
||||||
|
@ -417,46 +417,25 @@ void patchCode(u64 progId, u8 *code, u32 size)
|
|||||||
{
|
{
|
||||||
verStringSize = 8;
|
verStringSize = 8;
|
||||||
u32 currentFirm = BOOTCFG_FIRM;
|
u32 currentFirm = BOOTCFG_FIRM;
|
||||||
bool matchingFirm = (currentFirm != 0) == (currentNand != 0);
|
|
||||||
|
|
||||||
static u16 verStringEmu[] = u"Emu ",
|
static u16 *verStringsNands[] = { u" Sys",
|
||||||
verStringEmuSys[] = u"Em S",
|
u" Emu",
|
||||||
verStringSysEmu[] = u"SyE ";
|
u"Emu2",
|
||||||
|
u"Emu3",
|
||||||
|
u"Emu4" },
|
||||||
|
|
||||||
switch(currentNand)
|
*verStringsEmuSys[] = { u"EmuS",
|
||||||
{
|
u"Em2S",
|
||||||
case 1:
|
u"Em3S",
|
||||||
verString = matchingFirm ? u" Emu" : u"EmuS";
|
u"Em4S" },
|
||||||
break;
|
|
||||||
case 2:
|
*verStringsSysEmu[] = { u"SysE",
|
||||||
case 3:
|
u"SyE2",
|
||||||
case 4:
|
u"SyE3",
|
||||||
{
|
u"SyE4" };
|
||||||
if(matchingFirm)
|
|
||||||
{
|
verString = (currentFirm != 0) == (currentNand != 0) ? verStringsNands[currentNand] :
|
||||||
verStringEmu[3] = '0' + currentNand;
|
(!currentNand ? verStringsSysEmu[currentFirm - 1] : verStringsEmuSys[currentNand - 1]);
|
||||||
verString = verStringEmu;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
verStringEmuSys[2] = '0' + currentNand;
|
|
||||||
verString = verStringEmuSys;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
if(matchingFirm) verString = u" Sys";
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(currentFirm == 1) verString = u"SysE";
|
|
||||||
else
|
|
||||||
{
|
|
||||||
verStringSysEmu[3] = '0' + currentFirm;
|
|
||||||
verString = verStringSysEmu;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//Patch Ver. string
|
//Patch Ver. string
|
||||||
|
@ -11,7 +11,7 @@ size_t strnlen(const char *string, size_t maxlen)
|
|||||||
|
|
||||||
void progIdToStr(char *strEnd, u64 progId)
|
void progIdToStr(char *strEnd, u64 progId)
|
||||||
{
|
{
|
||||||
while(progId)
|
while(progId > 0)
|
||||||
{
|
{
|
||||||
static const char hexDigits[] = "0123456789ABCDEF";
|
static const char hexDigits[] = "0123456789ABCDEF";
|
||||||
*strEnd-- = hexDigits[(u32)(progId & 0xF)];
|
*strEnd-- = hexDigits[(u32)(progId & 0xF)];
|
||||||
|
@ -112,20 +112,15 @@ static inline u32 getSdmmc(u8 *pos, u32 size)
|
|||||||
|
|
||||||
static inline void patchNandRw(u8 *pos, u32 size, u32 branchOffset)
|
static inline void patchNandRw(u8 *pos, u32 size, u32 branchOffset)
|
||||||
{
|
{
|
||||||
const u16 nandRedir[2] = {0x4C00, 0x47A0};
|
|
||||||
|
|
||||||
//Look for read/write code
|
//Look for read/write code
|
||||||
const u8 pattern[] = {0x1E, 0x00, 0xC8, 0x05};
|
const u8 pattern[] = {0x1E, 0x00, 0xC8, 0x05};
|
||||||
|
|
||||||
u16 *readOffset = (u16 *)memsearch(pos, pattern, size, sizeof(pattern)) - 3,
|
u16 *readOffset = (u16 *)memsearch(pos, pattern, size, sizeof(pattern)) - 3,
|
||||||
*writeOffset = (u16 *)memsearch((u8 *)(readOffset + 5), pattern, 0x100, sizeof(pattern)) - 3;
|
*writeOffset = (u16 *)memsearch((u8 *)(readOffset + 5), pattern, 0x100, sizeof(pattern)) - 3;
|
||||||
|
|
||||||
*readOffset = nandRedir[0];
|
*readOffset = *writeOffset = 0x4C00;
|
||||||
readOffset[1] = nandRedir[1];
|
readOffset[1] = writeOffset[1] = 0x47A0;
|
||||||
((u32 *)readOffset)[1] = branchOffset;
|
((u32 *)writeOffset)[1] = ((u32 *)readOffset)[1] = branchOffset;
|
||||||
*writeOffset = nandRedir[0];
|
|
||||||
writeOffset[1] = nandRedir[1];
|
|
||||||
((u32 *)writeOffset)[1] = branchOffset;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void patchMpu(u8 *pos, u32 size)
|
static inline void patchMpu(u8 *pos, u32 size)
|
||||||
|
@ -63,8 +63,6 @@ u32 *getKernel11Info(u8 *pos, u32 size, u32 *baseK11VA, u8 **freeK11Space, u32 *
|
|||||||
|
|
||||||
void patchSignatureChecks(u8 *pos, u32 size)
|
void patchSignatureChecks(u8 *pos, u32 size)
|
||||||
{
|
{
|
||||||
const u16 sigPatch[2] = {0x2000, 0x4770};
|
|
||||||
|
|
||||||
//Look for signature checks
|
//Look for signature checks
|
||||||
const u8 pattern[] = {0xC0, 0x1C, 0x76, 0xE7},
|
const u8 pattern[] = {0xC0, 0x1C, 0x76, 0xE7},
|
||||||
pattern2[] = {0xB5, 0x22, 0x4D, 0x0C};
|
pattern2[] = {0xB5, 0x22, 0x4D, 0x0C};
|
||||||
@ -72,9 +70,8 @@ void patchSignatureChecks(u8 *pos, u32 size)
|
|||||||
u16 *off = (u16 *)memsearch(pos, pattern, size, sizeof(pattern)),
|
u16 *off = (u16 *)memsearch(pos, pattern, size, sizeof(pattern)),
|
||||||
*off2 = (u16 *)(memsearch(pos, pattern2, size, sizeof(pattern2)) - 1);
|
*off2 = (u16 *)(memsearch(pos, pattern2, size, sizeof(pattern2)) - 1);
|
||||||
|
|
||||||
*off = sigPatch[0];
|
*off = off2[0] = 0x2000;
|
||||||
off2[0] = sigPatch[0];
|
off2[1] = 0x4770;
|
||||||
off2[1] = sigPatch[1];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void patchFirmlaunches(u8 *pos, u32 size, u32 process9MemAddr)
|
void patchFirmlaunches(u8 *pos, u32 size, u32 process9MemAddr)
|
||||||
|
Reference in New Issue
Block a user