(GX) support ROM passing through salamander

Needed on Wii since we might need to load salamander when switching cores due to memory issues
This commit is contained in:
ToadKing 2013-05-08 19:11:52 -04:00
parent 7f88b51828
commit 5290a25ccd
2 changed files with 26 additions and 4 deletions

View File

@ -225,6 +225,10 @@ int gx_logger_file(struct _reent *r, int fd, const char *ptr, size_t len)
#endif
#ifdef IS_SALAMANDER
extern char gx_rom_path[PATH_MAX];
#endif
static void get_environment_settings(int argc, char *argv[])
{
(void)argc;
@ -253,6 +257,14 @@ static void get_environment_settings(int argc, char *argv[])
strlcpy(default_paths.filesystem_root_dir, "/", sizeof(default_paths.filesystem_root_dir));
snprintf(default_paths.filebrowser_startup_dir, sizeof(default_paths.filebrowser_startup_dir), default_paths.filesystem_root_dir);
snprintf(default_paths.input_presets_dir, sizeof(default_paths.input_presets_dir), "%s/input", default_paths.port_dir);
#ifdef IS_SALAMANDER
if (argc > 2 && argv[1] != NULL && argv[2] != NULL)
snprintf(gx_rom_path, sizeof(gx_rom_path),
"%s%s", argv[1], argv[2]);
else
gx_rom_path[0] = '\0';
#endif
}
extern void __exception_setreload(int t);
@ -299,14 +311,17 @@ static void system_init(void)
static void system_exitspawn(void)
{
#if defined(IS_SALAMANDER)
rarch_console_exec(default_paths.libretro_path, false);
rarch_console_exec(default_paths.libretro_path, gx_rom_path[0] != '\0' ? true : false);
#elif defined(HW_RVL)
bool should_load_game = false;
if (g_extern.lifecycle_mode_state & (1ULL << MODE_EXITSPAWN_START_GAME))
should_load_game = true;
rarch_console_exec(g_settings.libretro, should_load_game);
rarch_console_exec(g_extern.fullpath, false);
// direct loading failed (out of memory), try to jump to salamander then load the correct core
char boot_dol[PATH_MAX];
snprintf(boot_dol, sizeof(boot_dol), "%s/boot.dol", default_paths.core_dir);
rarch_console_exec(boot_dol, should_load_game);
#endif
}

View File

@ -38,6 +38,10 @@ extern uint8_t _binary_wii_app_booter_app_booter_bin_end[];
#include "../../retroarch_logger.h"
#include "../../file.h"
#ifdef IS_SALAMANDER
char gx_rom_path[PATH_MAX];
#endif
static void dol_copy_argv_path(const char *dolpath, const char *argpath)
{
char tmp[PATH_MAX];
@ -72,7 +76,6 @@ static void dol_copy_argv_path(const char *dolpath, const char *argpath)
len += t_len;
cmdline[len++] = 0;
#ifndef IS_SALAMANDER
// file must be split into two parts, the path and the actual filename
// done to be compatible with loaders
if (argpath && strchr(argpath, '/') != NULL)
@ -91,7 +94,7 @@ static void dol_copy_argv_path(const char *dolpath, const char *argpath)
len += t_len;
cmdline[len++] = 0;
}
#endif
cmdline[len++] = 0;
argv->length = len;
DCFlushRange(ARGS_ADDR, sizeof(struct __argv) + argv->length);
@ -137,7 +140,11 @@ static void rarch_console_exec(const char *path, bool should_load_game)
memmove(EXECUTE_ADDR, dol, size);
DCFlushRange(EXECUTE_ADDR, size);
#ifdef IS_SALAMANDER
dol_copy_argv_path(path, should_load_game ? gx_rom_path : NULL);
#else
dol_copy_argv_path(path, should_load_game ? g_extern.fullpath : NULL);
#endif
size_t booter_size = booter_end - booter_start;
memcpy(BOOTER_ADDR, booter_start, booter_size);