(PS3) Implemented SSNES control flow

This commit is contained in:
TwinAphex51224 2012-01-20 18:00:33 +01:00
parent 955c0e85c8
commit d9a72ea076
3 changed files with 61 additions and 13 deletions

View File

@ -66,10 +66,13 @@
if(!(config_get_array(currentconfig, charstring, setting, sizeof(setting)))) \
strncpy(setting,defaultvalue, sizeof(setting));
uint32_t g_emulator_initialized = 0;
char special_action_msg[256]; /* message which should be overlaid on top of the screen*/
uint32_t special_action_msg_expired; /* time at which the message no longer needs to be overlaid onscreen*/
uint32_t mode_switch = MODE_MENU;
bool init_ssnes = false;
char contentInfoPath[MAX_PATH_LENGTH];
char usrDirPath[MAX_PATH_LENGTH];
@ -200,7 +203,6 @@ static void callback_sysutil_exit(uint64_t status, uint64_t param, void *userdat
case CELL_SYSUTIL_REQUEST_EXITGAME:
menu_is_running = 0;
g_quitting = true;
sys_process_exit(0);
break;
}
}
@ -252,23 +254,53 @@ int main(int argc, char *argv[])
ps3_input_init();
menu_init();
menu_loop();
char arg1[] = "ssnes";
char arg2[PATH_MAX];
snprintf(arg2, sizeof(arg2), g_extern.system.fullpath);
char arg3[] = "-v";
char arg4[] = "-c";
char arg5[MAX_PATH_LENGTH];
begin_loop:
if(mode_switch == MODE_EMULATION)
{
while(ssnes_main_iterate());
ssnes_main_deinit();
}
else if(mode_switch == MODE_MENU)
{
menu_loop();
if(init_ssnes)
{
char arg1[] = "ssnes";
char arg2[PATH_MAX];
snprintf(arg5, sizeof(arg5), SYS_CONFIG_FILE);
char *argv_[] = { arg1, arg2, arg3, arg4, arg5, NULL };
snprintf(arg2, sizeof(arg2), g_extern.system.fullpath);
char arg3[] = "-v";
char arg4[] = "-c";
char arg5[MAX_PATH_LENGTH];
g_emulator_initialized = 1;
snprintf(arg5, sizeof(arg5), SYS_CONFIG_FILE);
char *argv_[] = { arg1, arg2, arg3, arg4, arg5, NULL };
return ssnes_main(sizeof(argv_) / sizeof(argv_[0]) - 1, argv_);
g_emulator_initialized = 1;
int argc = sizeof(argv_) / sizeof(argv_[0]) - 1;
int init_ret = ssnes_main_init(argc, argv_);
printf("init_ret: %d\n", init_ret);
if(init_ret)
{
mode_switch = MODE_MENU;
ssnes_main_deinit();
}
init_ssnes = 0;
}
}
#ifdef MULTIMAN_SUPPORT
else if(mode_switch == MODE_MULTIMAN_STARTUP)
{
}
#endif
else
goto begin_shutdown;
goto begin_loop;
begin_shutdown:
ps3_input_deinit();
ps3_video_deinit();
sys_process_exit(0);
}

View File

@ -279,6 +279,7 @@ static void browser_update(filebrowser_t * b)
if (g_emulator_initialized)
{
menu_is_running = 0;
mode_switch = MODE_EMULATION;
set_text_message("", 15);
}
}
@ -1197,6 +1198,7 @@ static void select_setting(menu * menu_obj)
if (g_emulator_initialized)
{
menu_is_running = 0;
mode_switch = MODE_EMULATION;
set_text_message("", 15);
}
old_state = state;
@ -1277,6 +1279,8 @@ static void select_rom(void)
menu_is_running = 0;
snprintf(g_extern.system.fullpath, sizeof(g_extern.system.fullpath), "%s/%s", FILEBROWSER_GET_CURRENT_DIRECTORY_NAME(browser), FILEBROWSER_GET_CURRENT_FILENAME(browser));
init_ssnes = 1;
mode_switch = MODE_EMULATION;
old_state = state;
return;

View File

@ -18,10 +18,22 @@
#define MAX_PATH_LENGTH 1024
enum
{
MODE_EMULATION,
MODE_MENU,
#ifdef MULTIMAN_SUPPORT
MODE_MULTIMAN_STARTUP,
#endif
MODE_EXIT
};
extern char special_action_msg[256];
extern uint32_t g_emulator_initialized;
extern uint32_t special_action_msg_expired;
extern uint32_t mode_switch;
extern unsigned g_frame_count;
extern bool init_ssnes;
extern bool g_quitting;
extern char contentInfoPath[MAX_PATH_LENGTH];