Remade the chainloader to only try to load the right payload for the pressed button, got rid of the default payload (start now boots "start_NAME.bin"), sel_NAME is now select_NAME as there is no more SFN limitations anymore

This commit is contained in:
Aurora
2016-04-29 14:28:37 +02:00
parent e651c3d9cc
commit c6d3158b56
10 changed files with 55 additions and 85 deletions

View File

@@ -129,7 +129,7 @@ void main(void)
the Safe Mode combo is not pressed, chainload an external payload */
if(((pressed & SINGLE_PAYLOAD_BUTTONS) || ((pressed & BUTTON_L1) && (pressed & L_PAYLOAD_BUTTONS)))
&& pressed != SAFE_MODE)
loadPayload();
loadPayload(pressed);
//If no configuration file exists or SELECT is held, load configuration menu
if(needConfig == 2 || (pressed & BUTTON_SELECT))

View File

@@ -4,8 +4,11 @@
#include "fs.h"
#include "memory.h"
#include "buttons.h"
#include "fatfs/ff.h"
#define PATTERN(a) a "_*.bin"
static FATFS sdFs,
nandFs;
@@ -52,16 +55,39 @@ u32 fileWrite(const void *buffer, const char *path, u32 size)
return result;
}
u32 defPayloadExists(void)
u32 payloadExists(u32 pressed)
{
const char *pattern;
if(pressed & BUTTON_RIGHT) pattern = PATTERN("right");
else if(pressed & BUTTON_LEFT) pattern = PATTERN("left");
else if(pressed & BUTTON_UP) pattern = PATTERN("up");
else if(pressed & BUTTON_DOWN) pattern = PATTERN("down");
else if(pressed & BUTTON_X) pattern = PATTERN("x");
else if(pressed & BUTTON_Y) pattern = PATTERN("y");
else if(pressed & BUTTON_R1) pattern = PATTERN("r");
else if(pressed & BUTTON_A) pattern = PATTERN("a");
else if(pressed & BUTTON_START) pattern = PATTERN("start");
else pattern = PATTERN("select");
DIR dir;
FILINFO info;
char path[] = "/luma/payloads";
FRESULT result = f_findfirst(&dir, &info, "/luma/payloads", "def_*.bin");
FRESULT result = f_findfirst(&dir, &info, path, pattern);
f_closedir(&dir);
return (result == FR_OK && info.fname[0]);
if(result == FR_OK && info.fname[0])
{
path[sizeof(path) - 1] = '/';
memcpy((void *)0x24F02000, path, sizeof(path));
memcpy((void *)(0x24F02000 + sizeof(path)), info.altname, 13);
return 1;
}
return 0;
}
void firmRead(void *dest, const char *firmFolder)

View File

@@ -9,5 +9,5 @@
u32 mountFs(void);
u32 fileRead(void *dest, const char *path, u32 size);
u32 fileWrite(const void *buffer, const char *path, u32 size);
u32 defPayloadExists(void);
u32 payloadExists(u32 pressed);
void firmRead(void *dest, const char *firmFolder);

View File

@@ -10,9 +10,9 @@
#define PAYLOAD_ADDRESS 0x24F00000
void loadPayload(void)
void loadPayload(u32 pressed)
{
if(defPayloadExists())
if(payloadExists(pressed))
{
initScreens();
memcpy((void *)PAYLOAD_ADDRESS, loader, loader_size);

View File

@@ -6,4 +6,4 @@
#include "types.h"
void loadPayload(void);
void loadPayload(u32 pressed);