Run SysReset() only from retro_run, causes retroarch to freeze...
[pcsx_rearmed.git] / frontend / libretro.c
index 7fa63cb..ec0065d 100644 (file)
@@ -57,7 +57,7 @@ static retro_input_poll_t input_poll_cb;
 static retro_input_state_t input_state_cb;
 static retro_environment_t environ_cb;
 static retro_audio_sample_batch_t audio_batch_cb;
-static struct retro_rumble_interface rumble;
+static retro_set_rumble_state_t rumble_cb;
 static struct retro_log_callback logging;
 static retro_log_printf_t log_cb;
 
@@ -430,10 +430,13 @@ void pl_timing_prepare(int is_pal)
 
 void plat_trigger_vibrate(int pad, int low, int high)
 {
-       if(in_enable_vibration)
+       if (!rumble_cb)
+               return;
+
+       if (in_enable_vibration)
        {
-       rumble.set_rumble_state(pad, RETRO_RUMBLE_STRONG, high << 8);
-       rumble.set_rumble_state(pad, RETRO_RUMBLE_WEAK, low ? 0xffff : 0x0);
+               rumble_cb(pad, RETRO_RUMBLE_STRONG, high << 8);
+               rumble_cb(pad, RETRO_RUMBLE_WEAK, low ? 0xffff : 0x0);
     }
 }
 
@@ -1286,7 +1289,10 @@ bool retro_load_game(const struct retro_game_info *info)
                return false;
        }
 
-       SysReset();
+       /* TODO: Calling SysReset() outside retro_run for some system
+        * causes RetroArch to freeze, e.g Ludo */
+       //SysReset();
+       rebootemu = 1;
 
        if (LoadCdrom() == -1) {
                log_cb(RETRO_LOG_INFO, "could not load CD\n");
@@ -1883,6 +1889,7 @@ static int init_memcards(void)
 
 void retro_init(void)
 {
+       struct retro_rumble_interface rumble;
        const char *bios[] = {
                "SCPH101", "SCPH7001", "SCPH5501", "SCPH1001",
                "scph101", "scph7001", "scph5501", "scph1001"
@@ -1962,7 +1969,10 @@ void retro_init(void)
 
        environ_cb(RETRO_ENVIRONMENT_GET_CAN_DUPE, &vout_can_dupe);
        environ_cb(RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE, &disk_control);
-       environ_cb(RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE, &rumble);
+
+       rumble_cb = NULL;
+       if (environ_cb(RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE, &rumble))
+               rumble_cb = rumble.set_rumble_state;
 
        /* Set how much slower PSX CPU runs * 100 (so that 200 is 2 times)
         * we have to do this because cache misses and some IO penalties