Move loadPayload to fs.c, and the path to the beginning of the chainloader
This commit is contained in:
parent
85615d1916
commit
df112b550b
@ -11,7 +11,7 @@ void main(void)
|
||||
FIL payload;
|
||||
unsigned int read;
|
||||
|
||||
f_open(&payload, (char *)0x24F02000, FA_READ);
|
||||
f_open(&payload, (char *)0x24F00004, FA_READ);
|
||||
f_read(&payload, (void *)PAYLOAD_ADDRESS, f_size(&payload), &read);
|
||||
f_close(&payload);
|
||||
|
||||
|
@ -2,6 +2,11 @@
|
||||
.align 4
|
||||
.global _start
|
||||
_start:
|
||||
b start
|
||||
|
||||
.word 0, 0, 0, 0, 0, 0, 0
|
||||
|
||||
start:
|
||||
@ Flush caches
|
||||
mov r0, #0
|
||||
mcr p15, 0, r0, c7, c5, 0 @ flush I-cache
|
||||
|
@ -12,7 +12,6 @@
|
||||
#include "crypto.h"
|
||||
#include "draw.h"
|
||||
#include "screeninit.h"
|
||||
#include "loader.h"
|
||||
#include "buttons.h"
|
||||
#include "../build/patches.h"
|
||||
|
||||
|
18
source/fs.c
18
source/fs.c
@ -4,9 +4,12 @@
|
||||
|
||||
#include "fs.h"
|
||||
#include "memory.h"
|
||||
#include "buttons.h"
|
||||
#include "screeninit.h"
|
||||
#include "../build/loader.h"
|
||||
#include "fatfs/ff.h"
|
||||
#include "buttons.h"
|
||||
|
||||
#define PAYLOAD_ADDRESS 0x24F00000
|
||||
#define PATTERN(a) a "_*.bin"
|
||||
|
||||
static FATFS sdFs,
|
||||
@ -55,7 +58,7 @@ u32 fileWrite(const void *buffer, const char *path, u32 size)
|
||||
return result;
|
||||
}
|
||||
|
||||
u32 payloadExists(u32 pressed)
|
||||
void loadPayload(u32 pressed)
|
||||
{
|
||||
const char *pattern;
|
||||
|
||||
@ -80,14 +83,15 @@ u32 payloadExists(u32 pressed)
|
||||
|
||||
if(result == FR_OK && info.fname[0])
|
||||
{
|
||||
initScreens();
|
||||
memcpy((void *)PAYLOAD_ADDRESS, loader, loader_size);
|
||||
|
||||
path[sizeof(path) - 1] = '/';
|
||||
memcpy((void *)0x24F02000, path, sizeof(path));
|
||||
memcpy((void *)(0x24F02000 + sizeof(path)), info.altname, 13);
|
||||
memcpy((void *)(PAYLOAD_ADDRESS + 4), path, sizeof(path));
|
||||
memcpy((void *)(PAYLOAD_ADDRESS + 4 + sizeof(path)), info.altname, 13);
|
||||
|
||||
return 1;
|
||||
((void (*)())PAYLOAD_ADDRESS)();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void firmRead(void *dest, const char *firmFolder)
|
||||
|
@ -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 payloadExists(u32 pressed);
|
||||
void loadPayload(u32 pressed);
|
||||
void firmRead(void *dest, const char *firmFolder);
|
@ -1,21 +0,0 @@
|
||||
/*
|
||||
* loader.c
|
||||
*/
|
||||
|
||||
#include "loader.h"
|
||||
#include "fs.h"
|
||||
#include "memory.h"
|
||||
#include "screeninit.h"
|
||||
#include "../build/loader.h"
|
||||
|
||||
#define PAYLOAD_ADDRESS 0x24F00000
|
||||
|
||||
void loadPayload(u32 pressed)
|
||||
{
|
||||
if(payloadExists(pressed))
|
||||
{
|
||||
initScreens();
|
||||
memcpy((void *)PAYLOAD_ADDRESS, loader, loader_size);
|
||||
((void (*)())PAYLOAD_ADDRESS)();
|
||||
}
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
/*
|
||||
* loader.h
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "types.h"
|
||||
|
||||
void loadPayload(u32 pressed);
|
Reference in New Issue
Block a user