Fix this... "invalid return 0" request
[pcsx_rearmed.git] / frontend / libretro.c
index 5e5d88c..bc56ff8 100644 (file)
@@ -22,6 +22,7 @@
 #include "../libpcsxcore/cdrom.h"
 #include "../libpcsxcore/cdriso.h"
 #include "../libpcsxcore/cheat.h"
+#include "../libpcsxcore/r3000a.h"
 #include "../plugins/dfsound/out.h"
 #include "../plugins/dfsound/spu_config.h"
 #include "../plugins/dfinput/externals.h"
@@ -1289,7 +1290,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");
@@ -1579,7 +1583,9 @@ static void update_variables(bool in_flight)
          if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) || var.value)
          {
             if (strcmp(var.value, "enabled") == 0)
-               rebootemu = 1;
+               Config.SlowBoot = 1;
+            else
+               Config.SlowBoot = 0;
          }
       }
    }
@@ -1619,11 +1625,15 @@ static uint16_t get_analog_button(retro_input_state_t input_state_cb, int player
 
 void retro_run(void)
 {
-    int i;
-    //SysReset must be run while core is running,Not in menu (Locks up Retroarch)
-    if(rebootemu != 0){
-      rebootemu = 0;
-      SysReset();
+       int i;
+       //SysReset must be run while core is running,Not in menu (Locks up Retroarch)
+       if (rebootemu != 0) {
+               rebootemu = 0;
+               SysReset();
+               if (!Config.HLE && !Config.SlowBoot) {
+                       // skip BIOS logos
+                       psxRegs.pc = psxRegs.GPR.n.ra;
+               }
     }
 
        input_poll_cb();
@@ -1935,7 +1945,7 @@ void retro_init(void)
 #endif
   
   vout_buf_ptr = vout_buf;
-  
+
        if (environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &dir) && dir)
        {
                snprintf(Config.BiosDir, sizeof(Config.BiosDir), "%s", dir);