mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2024-11-24 04:09:15 +01:00
-we should read in the loader.bin before closing the devices :P
This commit is contained in:
parent
aeafda53a0
commit
b4dbfeaa1d
@ -126,7 +126,9 @@ void DML_New_WriteOptions()
|
|||||||
|
|
||||||
|
|
||||||
// Devolution
|
// Devolution
|
||||||
|
u8 *loader_bin = NULL;
|
||||||
static gconfig *DEVO_CONFIG = (gconfig*)0x80000020;
|
static gconfig *DEVO_CONFIG = (gconfig*)0x80000020;
|
||||||
|
#define LAUNCH() ((void(*)(void))loader_bin)()
|
||||||
|
|
||||||
bool DEVO_Installed(const char* path)
|
bool DEVO_Installed(const char* path)
|
||||||
{
|
{
|
||||||
@ -142,8 +144,23 @@ bool DEVO_Installed(const char* path)
|
|||||||
return devo;
|
return devo;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DEVO_SetOptions(const char *path, const char *partition)
|
void DEVO_SetOptions(const char *path, const char *partition, const char* loader)
|
||||||
{
|
{
|
||||||
|
//Read in loader.bin
|
||||||
|
char loader_path[256];
|
||||||
|
snprintf(loader_path, sizeof(loader_path), "%s/loader.bin", loader);
|
||||||
|
FILE *f = fopen(loader_path, "rb");
|
||||||
|
if(f)
|
||||||
|
{
|
||||||
|
fseek(f, 0, SEEK_END);
|
||||||
|
u32 size = ftell(f);
|
||||||
|
rewind(f);
|
||||||
|
loader_bin = (u8*)MEM2_alloc(size);
|
||||||
|
fread(loader_bin, 1, size, f);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
||||||
|
//start writing cfg to mem
|
||||||
struct stat st;
|
struct stat st;
|
||||||
char full_path[256];
|
char full_path[256];
|
||||||
int data_fd;
|
int data_fd;
|
||||||
@ -204,24 +221,11 @@ void DEVO_SetOptions(const char *path, const char *partition)
|
|||||||
DCFlushRange(lowmem, 64);
|
DCFlushRange(lowmem, 64);
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 *loader_bin = NULL;
|
void DEVO_Boot()
|
||||||
#define LAUNCH() ((void(*)(void))loader_bin)()
|
|
||||||
|
|
||||||
void DEVO_Boot(const char* path)
|
|
||||||
{
|
{
|
||||||
char loader_path[256];
|
// the Devolution blob has an ID string at offset 4
|
||||||
snprintf(loader_path, sizeof(loader_path), "%s/loader.bin", path);
|
puts((const char*)loader_bin + 4);
|
||||||
FILE *f = fopen(loader_path, "rb");
|
LAUNCH();
|
||||||
if(f)
|
|
||||||
{
|
|
||||||
fseek(f, 0, SEEK_END);
|
|
||||||
u32 size = ftell(f);
|
|
||||||
rewind(f);
|
|
||||||
loader_bin = (u8*)MEM2_alloc(size);
|
|
||||||
fread(loader_bin, 1, size, f);
|
|
||||||
puts((const char*)loader_bin + 4);
|
|
||||||
LAUNCH();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -64,8 +64,8 @@ typedef struct global_config
|
|||||||
} gconfig;
|
} gconfig;
|
||||||
|
|
||||||
bool DEVO_Installed(const char* path);
|
bool DEVO_Installed(const char* path);
|
||||||
void DEVO_SetOptions(const char* path, const char *partition);
|
void DEVO_SetOptions(const char* path, const char *partition, const char *loader);
|
||||||
void DEVO_Boot(const char* path);
|
void DEVO_Boot();
|
||||||
|
|
||||||
|
|
||||||
// General
|
// General
|
||||||
|
@ -801,7 +801,7 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool DML)
|
|||||||
DMLvideoMode = 2;
|
DMLvideoMode = 2;
|
||||||
|
|
||||||
if(m_devo_installed && strcasestr(path.c_str(), "boot.bin") == NULL)
|
if(m_devo_installed && strcasestr(path.c_str(), "boot.bin") == NULL)
|
||||||
DEVO_SetOptions(path.c_str(), DeviceName[currentPartition]);
|
DEVO_SetOptions(path.c_str(), DeviceName[currentPartition], m_dataDir.c_str());
|
||||||
else if(DML)
|
else if(DML)
|
||||||
{
|
{
|
||||||
m_cfg.setString("DML", "current_item", id);
|
m_cfg.setString("DML", "current_item", id);
|
||||||
@ -814,13 +814,11 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool DML)
|
|||||||
nodisc = (nodisc == 0) ? m_cfg.getInt("DML", "no_disc_patch", 0) : nodisc-1;
|
nodisc = (nodisc == 0) ? m_cfg.getInt("DML", "no_disc_patch", 0) : nodisc-1;
|
||||||
bool cheats = m_gcfg2.testOptBool(id, "cheat", m_cfg.getBool("DML", "cheat", false));
|
bool cheats = m_gcfg2.testOptBool(id, "cheat", m_cfg.getBool("DML", "cheat", false));
|
||||||
bool DML_debug = m_gcfg2.getBool(id, "debugger", false);
|
bool DML_debug = m_gcfg2.getBool(id, "debugger", false);
|
||||||
|
|
||||||
if(cheats)
|
if(cheats)
|
||||||
{
|
{
|
||||||
snprintf(CheatPath, sizeof(CheatPath), "%s/%s", m_cheatDir.c_str(), fmt("%s.gct", id.c_str()));
|
snprintf(CheatPath, sizeof(CheatPath), "%s/%s", m_cheatDir.c_str(), fmt("%s.gct", id.c_str()));
|
||||||
snprintf(NewCheatPath, sizeof(NewCheatPath), "%s/%s/%s", fmt(DML_DIR, "sd"), path.c_str(), fmt("%s.gct", id.c_str()));
|
snprintf(NewCheatPath, sizeof(NewCheatPath), "%s/%s/%s", fmt(DML_DIR, "sd"), path.c_str(), fmt("%s.gct", id.c_str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
string newPath;
|
string newPath;
|
||||||
if(strcasestr(path.c_str(), "boot.bin") != NULL)
|
if(strcasestr(path.c_str(), "boot.bin") != NULL)
|
||||||
{
|
{
|
||||||
@ -863,7 +861,7 @@ void CMenu::_launchGC(dir_discHdr *hdr, bool DML)
|
|||||||
Sys_LoadMenu();
|
Sys_LoadMenu();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
DEVO_Boot(m_dataDir.c_str());
|
DEVO_Boot();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CMenu::_launchHomebrew(const char *filepath, vector<string> arguments)
|
void CMenu::_launchHomebrew(const char *filepath, vector<string> arguments)
|
||||||
|
Loading…
Reference in New Issue
Block a user