From 8cddf57556a1fc436981a32637a0e5c9d7f13e3f Mon Sep 17 00:00:00 2001
From: notaz <notasas@gmail.com>
Date: Sun, 6 Aug 2023 20:46:16 +0300
Subject: [PATCH] libretro: understand psx exes

---
 frontend/libretro.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/frontend/libretro.c b/frontend/libretro.c
index 98eea829..5d876ae4 100644
--- a/frontend/libretro.c
+++ b/frontend/libretro.c
@@ -1471,6 +1471,8 @@ bool retro_load_game(const struct retro_game_info *info)
    size_t i;
    unsigned int cd_index = 0;
    bool is_m3u = (strcasestr(info->path, ".m3u") != NULL);
+   bool is_exe = (strcasestr(info->path, ".exe") != NULL);
+   int ret;
 
    struct retro_input_descriptor desc[] = {
 #define JOYP(port)                                                                                                \
@@ -1664,7 +1666,7 @@ bool retro_load_game(const struct retro_game_info *info)
    plugin_call_rearmed_cbs();
    /* dfinput_activate(); */
 
-   if (CheckCdrom() == -1)
+   if (!is_exe && CheckCdrom() == -1)
    {
       log_cb(RETRO_LOG_INFO, "unsupported/invalid CD image: %s\n", info->path);
       return false;
@@ -1672,9 +1674,13 @@ bool retro_load_game(const struct retro_game_info *info)
 
    SysReset();
 
-   if (LoadCdrom() == -1)
+   if (is_exe)
+      ret = Load(info->path);
+   else
+      ret = LoadCdrom();
+   if (ret != 0)
    {
-      log_cb(RETRO_LOG_INFO, "could not load CD\n");
+      log_cb(RETRO_LOG_INFO, "could not load %s (%d)\n", is_exe ? "exe" : "CD", ret);
       return false;
    }
    emu_on_new_cd(0);
-- 
2.39.5