diff --git a/command_event.c b/command_event.c index 9188ac60e9..0d739e509d 100644 --- a/command_event.c +++ b/command_event.c @@ -393,8 +393,8 @@ static void event_deinit_core(bool reinit) #endif event_deinit_core_interfaces(); - core.retro_unload_game(); - core.retro_deinit(); + core_ctl(CORE_CTL_RETRO_UNLOAD_GAME, NULL); + core_ctl(CORE_CTL_RETRO_DEINIT, NULL); if (reinit) event_cmd_ctl(EVENT_CMD_DRIVERS_DEINIT, NULL); @@ -591,7 +591,7 @@ static bool event_init_core(void) rarch_ctl(RARCH_CTL_SET_PATHS_REDIRECT, NULL); rarch_ctl(RARCH_CTL_VERIFY_API_VERSION, NULL); - core.retro_init(); + core_ctl(CORE_CTL_RETRO_INIT, NULL); global->sram.use = rarch_ctl(RARCH_CTL_IS_PLAIN_CORE, NULL) && !content_ctl(CONTENT_CTL_DOES_NOT_NEED_CONTENT, NULL); @@ -1046,8 +1046,7 @@ bool event_cmd_ctl(enum event_command cmd, void *data) #ifdef HAVE_CHEEVOS cheevos_set_cheats(); #endif - core.retro_reset(); - + core_ctl(CORE_CTL_RETRO_RESET, NULL); break; case EVENT_CMD_SAVE_STATE: if (settings->savestate_auto_index) diff --git a/libretro_version_1.c b/libretro_version_1.c index 954795907e..25d24674d9 100644 --- a/libretro_version_1.c +++ b/libretro_version_1.c @@ -171,6 +171,18 @@ bool core_ctl(enum core_ctl_state state, void *data) { switch (state) { + case CORE_CTL_RETRO_RESET: + core.retro_reset(); + break; + case CORE_CTL_RETRO_INIT: + core.retro_init(); + break; + case CORE_CTL_RETRO_DEINIT: + core.retro_deinit(); + break; + case CORE_CTL_RETRO_UNLOAD_GAME: + core.retro_unload_game(); + break; case CORE_CTL_RETRO_RUN: switch (core.poll_type) { diff --git a/libretro_version_1.h b/libretro_version_1.h index cbe6270b12..ba88e341cb 100644 --- a/libretro_version_1.h +++ b/libretro_version_1.h @@ -50,7 +50,15 @@ enum core_ctl_state CORE_CTL_SET_CBS_REWIND, /* Runs the core for one frame. */ - CORE_CTL_RETRO_RUN + CORE_CTL_RETRO_RUN, + + CORE_CTL_RETRO_INIT, + + CORE_CTL_RETRO_DEINIT, + + CORE_CTL_RETRO_UNLOAD_GAME, + + CORE_CTL_RETRO_RESET }; typedef struct retro_callbacks