Remove loading of /luma/TwlBg.cxi, fix bugs.
This commit is contained in:
parent
384dd2ad81
commit
33238cee54
@ -43,7 +43,7 @@ static const firmSectionHeader *section;
|
||||
u32 config,
|
||||
emuOffset;
|
||||
|
||||
bool isN3DS, isDevUnit;
|
||||
bool isN3DS, isDevUnit, isFirmlaunch;
|
||||
|
||||
FirmwareSource firmSource;
|
||||
|
||||
@ -234,7 +234,7 @@ void main(void)
|
||||
break;
|
||||
}
|
||||
|
||||
launchFirm(firmType, isFirmlaunch);
|
||||
launchFirm(firmType);
|
||||
}
|
||||
|
||||
static inline u32 loadFirm(FirmwareType firmType)
|
||||
@ -350,7 +350,7 @@ static inline void copySection0AndInjectSystemModules(FirmwareType firmType)
|
||||
u8 *pos = arm11Section0, *end = pos + section[0].size;
|
||||
u32 n = 0;
|
||||
|
||||
u32 loaderIndex = 0, twlBgIndex = 0;
|
||||
u32 loaderIndex = 0;
|
||||
|
||||
while(pos < end)
|
||||
{
|
||||
@ -361,42 +361,25 @@ static inline void copySection0AndInjectSystemModules(FirmwareType firmType)
|
||||
pos += modules[n].size;
|
||||
|
||||
if(firmType == NATIVE_FIRM && memcmp(modules[n].name, "loader", 7) == 0) loaderIndex = n;
|
||||
else if(firmType == TWL_FIRM && memcmp(modules[n].name, "TwlBg", 6) == 0) twlBgIndex = n;
|
||||
|
||||
n++;
|
||||
}
|
||||
|
||||
u32 twlBgSize = 0;
|
||||
|
||||
if(firmType == NATIVE_FIRM)
|
||||
{
|
||||
modules[loaderIndex].size = injector_size;
|
||||
modules[loaderIndex].addr = injector;
|
||||
}
|
||||
|
||||
else if(firmType == TWL_FIRM)
|
||||
{
|
||||
twlBgSize = getFileSize("/luma/TwlBg.cxi");
|
||||
if(twlBgSize != 0)
|
||||
{
|
||||
modules[twlBgIndex].size = twlBgSize;
|
||||
modules[twlBgIndex].addr = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
pos = section[0].address;
|
||||
for(u32 i = 0; i < n; i++)
|
||||
{
|
||||
if(firmType == TWL_FIRM && i == twlBgIndex && twlBgSize != 0)
|
||||
fileRead(pos, "/luma/TwlBg.cxi");
|
||||
else if(modules[i].addr != NULL)
|
||||
memcpy(pos, modules[i].addr, modules[i].size);
|
||||
|
||||
memcpy(pos, modules[i].addr, modules[i].size);
|
||||
pos += modules[i].size;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static inline void launchFirm(FirmwareType firmType, bool isFirmlaunch)
|
||||
static inline void launchFirm(FirmwareType firmType)
|
||||
{
|
||||
//If we're booting NATIVE_FIRM, section0 needs to be copied separately to inject 3ds_injector
|
||||
u32 sectionNum;
|
||||
|
@ -54,4 +54,4 @@ static inline void patchNativeFirm(u32 firmVersion, FirmwareSource nandType, u32
|
||||
static inline void patchLegacyFirm(FirmwareType firmType);
|
||||
static inline void patchSafeFirm(void);
|
||||
static inline void copySection0AndInjectSystemModules(FirmwareType firmType);
|
||||
static inline void launchFirm(FirmwareType firmType, bool isFirmlaunch);
|
||||
static inline void launchFirm(FirmwareType firmType);
|
@ -29,7 +29,6 @@
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#define PDN_GPU_CNT (*(vu8 *)0x10141200)
|
||||
#define ARM11_STUB_ADDRESS (0x25000000 - 0x30) //It's currently only 0x28 bytes large. We're putting 0x30 just to be sure here
|
||||
#define WAIT_FOR_ARM9() *arm11Entry = 0; while(!*arm11Entry); ((void (*)())*arm11Entry)();
|
||||
|
||||
|
@ -26,11 +26,13 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#define PDN_MPCORE_CFG (*(vu32 *)0x10140FFC)
|
||||
#define PDN_SPI_CNT (*(vu32 *)0x101401C0)
|
||||
#define CFG_BOOTENV (*(vu32 *)0x10010000)
|
||||
#define CFG_UNITINFO (*(vu8 *)0x10010010)
|
||||
|
||||
#define PDN_MPCORE_CFG (*(vu32 *)0x10140FFC)
|
||||
#define PDN_SPI_CNT (*(vu32 *)0x101401C0)
|
||||
#define PDN_GPU_CNT (*(vu8 *)0x10141200)
|
||||
|
||||
//Common data types
|
||||
typedef uint8_t u8;
|
||||
typedef uint16_t u16;
|
||||
|
@ -27,6 +27,8 @@
|
||||
#include "draw.h"
|
||||
#include "cache.h"
|
||||
|
||||
extern bool isFirmlaunch;
|
||||
|
||||
u32 waitInput(void)
|
||||
{
|
||||
u32 pressedKey = 0,
|
||||
@ -56,7 +58,7 @@ u32 waitInput(void)
|
||||
|
||||
void mcuReboot(void)
|
||||
{
|
||||
if(PDN_GPU_CNT != 1) clearScreens();
|
||||
if(!isFirmlaunch && PDN_GPU_CNT != 1) clearScreens();
|
||||
|
||||
flushEntireDCache(); //Ensure that all memory transfers have completed and that the data cache has been flushed
|
||||
|
||||
@ -66,7 +68,7 @@ void mcuReboot(void)
|
||||
|
||||
void mcuPowerOff(void)
|
||||
{
|
||||
if(PDN_GPU_CNT != 1) clearScreens();
|
||||
if(!isFirmlaunch && PDN_GPU_CNT != 1) clearScreens();
|
||||
|
||||
flushEntireDCache(); //Ensure that all memory transfers have completed and that the data cache has been flushed
|
||||
|
||||
|
Reference in New Issue
Block a user