-fixed plugin coverflow not reloading on changed plugins using

the plugin menu in the global settings
-using different way to boot something (affects all views)
This commit is contained in:
fix94.1 2012-12-08 17:30:00 +00:00
parent c19f116046
commit 3029c59e13
5 changed files with 22 additions and 37 deletions

View File

@ -32,13 +32,8 @@
#include "memory/mem2.hpp" #include "memory/mem2.hpp"
#include "plugin/crc32.h" #include "plugin/crc32.h"
typedef void (*entrypoint) (void);
extern "C" { void __exception_closeall(); }
/* External WiiFlow Game Booter */ /* External WiiFlow Game Booter */
#define BOOTER_ADDR ((u8 *)0x80B00000)
static the_CFG *BooterConfig = (the_CFG*)0x93100000; static the_CFG *BooterConfig = (the_CFG*)0x93100000;
static entrypoint exeEntryPoint = (entrypoint)BOOTER_ADDR;
extern "C" { extern "C" {
u8 configbytes[2]; u8 configbytes[2];
@ -52,8 +47,6 @@ extern u8 *codelistend;
extern u32 gameconfsize; extern u32 gameconfsize;
extern u32 *gameconf; extern u32 *gameconf;
u32 cookie;
__argv args;
the_CFG normalCFG; the_CFG normalCFG;
void WiiFlow_ExternalBooter(u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode, int aspectRatio, u32 returnTo, u8 BootType) void WiiFlow_ExternalBooter(u8 vidMode, bool vipatch, bool countryString, u8 patchVidMode, int aspectRatio, u32 returnTo, u8 BootType)
{ {
@ -85,14 +78,8 @@ void WiiFlow_ExternalBooter(u8 vidMode, bool vipatch, bool countryString, u8 pat
/* Copy in booter */ /* Copy in booter */
memcpy(BOOTER_ADDR, booter, booter_size); memcpy(BOOTER_ADDR, booter, booter_size);
DCFlushRange(BOOTER_ADDR, booter_size); DCFlushRange(BOOTER_ADDR, booter_size);
/* Shutdown IOS subsystems */
__IOS_ShutdownSubsystems();
u32 level = IRQ_Disable();
__exception_closeall();
/* Boot it */ /* Boot it */
exeEntryPoint(); JumpToBooter();
/* Fail */
IRQ_Restore(level);
} }
extern FragList *frag_list; extern FragList *frag_list;

View File

@ -19,7 +19,7 @@
#include <unistd.h> #include <unistd.h>
#include <string.h> #include <string.h>
#include <ogc/machine/processor.h> #include <ogc/machine/processor.h>
#include <ogc/lwp_threads.h>
// for directory parsing and low-level file I/O // for directory parsing and low-level file I/O
#include <sys/types.h> #include <sys/types.h>
#include <sys/stat.h> #include <sys/stat.h>
@ -153,7 +153,7 @@ u8 *loader_bin = NULL;
u32 loader_size = 0; u32 loader_size = 0;
extern "C" { extern void __exception_closeall(); } extern "C" { extern void __exception_closeall(); }
static gconfig *DEVO_CONFIG = (gconfig*)0x80000020; static gconfig *DEVO_CONFIG = (gconfig*)0x80000020;
#define DEVO_Entry() ((void(*)(void))loader_bin)() #define DEVO_Entry ((void(*)())loader_bin)
bool DEVO_Installed(const char *path) bool DEVO_Installed(const char *path)
{ {
@ -297,13 +297,9 @@ void DEVO_Boot()
MEM2_free(tmp_buffer); MEM2_free(tmp_buffer);
gprintf("%s\n", (loader_bin+4)); gprintf("%s\n", (loader_bin+4));
/* cleaning up and load bin */ /* cleaning up and load bin */
u32 cookie;
gprintf("Jumping to Entry 0x%08x\n", loader_bin); gprintf("Jumping to Entry 0x%08x\n", loader_bin);
SYS_ResetSystem(SYS_SHUTDOWN, 0, 0); SYS_ResetSystem(SYS_SHUTDOWN, 0, 0);
_CPU_ISR_Disable(cookie); __lwp_thread_stopmultitasking(DEVO_Entry);
__exception_closeall();
DEVO_Entry();
_CPU_ISR_Restore(cookie);
} }

View File

@ -3,14 +3,12 @@
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <ogc/machine/processor.h> #include <ogc/machine/processor.h>
#include <ogc/lwp_threads.h>
#include <vector> #include <vector>
#include <string> #include <string>
#include "homebrew.h"
#include "gecko/gecko.hpp" #include "gecko/gecko.hpp"
#define EXECUTE_ADDR ((u8 *)0x92000000)
#define BOOTER_ADDR ((u8 *)0x93000000)
#define ARGS_ADDR ((u8 *)0x93200000)
using namespace std; using namespace std;
extern const u8 app_booter_bin[]; extern const u8 app_booter_bin[];
@ -19,9 +17,6 @@ extern const u32 app_booter_bin_size;
extern const u8 stub_bin[]; extern const u8 stub_bin[];
extern const u32 stub_bin_size; extern const u32 stub_bin_size;
typedef void (*entrypoint) (void);
extern "C" { void __exception_closeall(); }
u32 buffer_size = 0; u32 buffer_size = 0;
static vector<string> Arguments; static vector<string> Arguments;
@ -126,17 +121,17 @@ int BootHomebrew()
memcpy(BOOTER_ADDR, app_booter_bin, app_booter_bin_size); memcpy(BOOTER_ADDR, app_booter_bin, app_booter_bin_size);
DCFlushRange(BOOTER_ADDR, app_booter_bin_size); DCFlushRange(BOOTER_ADDR, app_booter_bin_size);
entrypoint exeEntryPoint = (entrypoint)BOOTER_ADDR;
u32 cookie;
memmove(ARGS_ADDR, &args, sizeof(args)); memmove(ARGS_ADDR, &args, sizeof(args));
DCFlushRange(ARGS_ADDR, sizeof(args) + args.length); DCFlushRange(ARGS_ADDR, sizeof(args) + args.length);
/* cleaning up and load dol */ JumpToBooter();
SYS_ResetSystem(SYS_SHUTDOWN, 0, 0);
_CPU_ISR_Disable(cookie);
__exception_closeall();
exeEntryPoint();
_CPU_ISR_Restore(cookie);
return 0; return 0;
} }
#define BOOTER_ENTRY ((void(*)())BOOTER_ADDR)
void JumpToBooter()
{
/* cleaning up and load bin */
SYS_ResetSystem(SYS_SHUTDOWN, 0, 0);
__lwp_thread_stopmultitasking(BOOTER_ENTRY);
}

View File

@ -1,10 +1,16 @@
#ifndef _BOOTHOMEBREW_H_ #ifndef _BOOTHOMEBREW_H_
#define _BOOTHOMEBREW_H_ #define _BOOTHOMEBREW_H_
#define EXECUTE_ADDR ((u8 *)0x92000000)
#define BOOTER_ADDR ((u8 *)0x93000000)
#define ARGS_ADDR ((u8 *)0x93200000)
int BootHomebrew(); int BootHomebrew();
int SetupARGV(struct __argv * args); int SetupARGV(struct __argv * args);
void AddBootArgument(const char * arg); void AddBootArgument(const char * arg);
int LoadHomebrew(const char * filepath); int LoadHomebrew(const char * filepath);
void JumpToBooter();
void writeStub(); void writeStub();
#endif #endif

View File

@ -166,6 +166,7 @@ void CMenu::_PluginSettings()
} }
} }
_hidePluginSettings(); _hidePluginSettings();
_loadList();
} }
void CMenu::_initPluginSettingsMenu() void CMenu::_initPluginSettingsMenu()