cdrom: Move libretro specific stuff out of libpcsxcore
authorPaul Cercueil <paul@crapouillou.net>
Mon, 14 Apr 2025 19:21:51 +0000 (21:21 +0200)
committernotaz <notasas@gmail.com>
Tue, 22 Apr 2025 22:07:51 +0000 (01:07 +0300)
This stuff doesn't belong here, and prevents other emulators using
libpcsxcore from implementing the new async CDROM API properly.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
frontend/libretro-cdrom.c
libpcsxcore/cdrom-async.c
libpcsxcore/cdrom-async.h

index 1c71f8a..bc10a2d 100644 (file)
@@ -4,6 +4,14 @@
 //#include <linux/cdrom.h>
 #endif
 
+#include "../libpcsxcore/psxcommon.h"
+#include "../libpcsxcore/cdrom.h"
+
+//#include "vfs/vfs_implementation.h"
+#include "vfs/vfs_implementation_cdrom.h"
+
+void *g_cd_handle;
+
 static int cdrom_send_command_dummy(const libretro_vfs_implementation_file *stream,
       CDROM_CMD_Direction dir, void *buf, size_t len, unsigned char *cmd, size_t cmd_len,
       unsigned char *sense, size_t sense_len)
@@ -66,4 +74,69 @@ int cdrom_read_sector(libretro_vfs_implementation_file *stream,
    return cdrom_send_command_once(stream, DIRECTION_IN, b, 2352, cmd, sizeof(cmd));
 }
 
+int rcdrom_open(const char *name, u32 *total_lba)
+{
+   g_cd_handle = retro_vfs_file_open_impl(name, RETRO_VFS_FILE_ACCESS_READ,
+        RETRO_VFS_FILE_ACCESS_HINT_NONE);
+   if (!g_cd_handle) {
+      SysPrintf("retro_vfs_file_open failed for '%s'\n", name);
+      return -1;
+   }
+   else {
+      int ret = cdrom_set_read_speed_x(g_cd_handle, 4);
+      if (ret) SysPrintf("CD speed set failed\n");
+      const cdrom_toc_t *toc = retro_vfs_file_get_cdrom_toc();
+      const cdrom_track_t *last = &toc->track[toc->num_tracks - 1];
+      unsigned int lba = MSF2SECT(last->min, last->sec, last->frame);
+      *total_lba = lba + last->track_size;
+      //cdrom_get_current_config_random_readable(acdrom.h);
+      //cdrom_get_current_config_multiread(acdrom.h);
+      //cdrom_get_current_config_cdread(acdrom.h);
+      //cdrom_get_current_config_profiles(acdrom.h);
+      return 0;
+   }
+}
+
+void rcdrom_close(void)
+{
+   if (g_cd_handle) {
+      retro_vfs_file_close_impl(g_cd_handle);
+      g_cd_handle = NULL;
+   }
+}
+
+int rcdrom_getTN(u8 *tn)
+{
+   const cdrom_toc_t *toc = retro_vfs_file_get_cdrom_toc();
+   if (toc) {
+     tn[0] = 1;
+     tn[1] = toc->num_tracks;
+     return 0;
+   }
+   return -1;
+}
+
+int rcdrom_getTD(u32 total_lba, u8 track, u8 *rt)
+{
+   const cdrom_toc_t *toc = retro_vfs_file_get_cdrom_toc();
+   rt[0] = 0, rt[1] = 2, rt[2] = 0;
+   if (track == 0) {
+      lba2msf(total_lba + 150, &rt[0], &rt[1], &rt[2]);
+   }
+   else if (track <= toc->num_tracks) {
+      int i = track - 1;
+      rt[0] = toc->track[i].min;
+      rt[1] = toc->track[i].sec;
+      rt[2] = toc->track[i].frame;
+   }
+   return 0;
+}
+
+int rcdrom_getStatus(struct CdrStat *stat)
+{
+   const cdrom_toc_t *toc = retro_vfs_file_get_cdrom_toc();
+   stat->Type = toc->track[0].audio ? 2 : 1;
+   return 0;
+}
+
 // vim:sw=3:ts=3:expandtab
index fadb774..494b417 100644 (file)
 
 #ifdef HAVE_CDROM
 
-#include "vfs/vfs_implementation.h"
-#include "vfs/vfs_implementation_cdrom.h"
-#include "../frontend/libretro-cdrom.h"
-
-static libretro_vfs_implementation_file *g_cd_handle;
-
-static int rcdrom_open(const char *name, u32 *total_lba)
-{
-   g_cd_handle = retro_vfs_file_open_impl(name, RETRO_VFS_FILE_ACCESS_READ,
-        RETRO_VFS_FILE_ACCESS_HINT_NONE);
-   if (!g_cd_handle) {
-      SysPrintf("retro_vfs_file_open failed for '%s'\n", name);
-      return -1;
-   }
-   else {
-      int ret = cdrom_set_read_speed_x(g_cd_handle, 4);
-      if (ret) SysPrintf("CD speed set failed\n");
-      const cdrom_toc_t *toc = retro_vfs_file_get_cdrom_toc();
-      const cdrom_track_t *last = &toc->track[toc->num_tracks - 1];
-      unsigned int lba = MSF2SECT(last->min, last->sec, last->frame);
-      *total_lba = lba + last->track_size;
-      //cdrom_get_current_config_random_readable(acdrom.h);
-      //cdrom_get_current_config_multiread(acdrom.h);
-      //cdrom_get_current_config_cdread(acdrom.h);
-      //cdrom_get_current_config_profiles(acdrom.h);
-      return 0;
-   }
-}
-
-static void rcdrom_close(void)
-{
-   if (g_cd_handle) {
-      retro_vfs_file_close_impl(g_cd_handle);
-      g_cd_handle = NULL;
-   }
-}
-
-static int rcdrom_getTN(u8 *tn)
-{
-   const cdrom_toc_t *toc = retro_vfs_file_get_cdrom_toc();
-   if (toc) {
-     tn[0] = 1;
-     tn[1] = toc->num_tracks;
-     return 0;
-   }
-   return -1;
-}
-
-static int rcdrom_getTD(u32 total_lba, u8 track, u8 *rt)
-{
-   const cdrom_toc_t *toc = retro_vfs_file_get_cdrom_toc();
-   rt[0] = 0, rt[1] = 2, rt[2] = 0;
-   if (track == 0) {
-      lba2msf(total_lba + 150, &rt[0], &rt[1], &rt[2]);
-   }
-   else if (track <= toc->num_tracks) {
-      int i = track - 1;
-      rt[0] = toc->track[i].min;
-      rt[1] = toc->track[i].sec;
-      rt[2] = toc->track[i].frame;
-   }
-   return 0;
-}
-
-static int rcdrom_getStatus(struct CdrStat *stat)
-{
-   const cdrom_toc_t *toc = retro_vfs_file_get_cdrom_toc();
-   stat->Type = toc->track[0].audio ? 2 : 1;
-   return 0;
-}
+extern void *g_cd_handle;
 
 #elif defined(USE_ASYNC_CDROM)
 
index c72ca9c..969c9f9 100644 (file)
@@ -1,3 +1,4 @@
+#include "psxcommon.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -5,6 +6,17 @@ extern "C" {
 
 struct CdrStat;
 
+#ifdef HAVE_CDROM
+int  rcdrom_open(const char *name, u32 *total_lba);
+void rcdrom_close(void);
+int  rcdrom_getTN(u8 *tn);
+int  rcdrom_getTD(u32 total_lba, u8 track, u8 *rt);
+int  rcdrom_getStatus(struct CdrStat *stat);
+
+int cdrom_read_sector(void *stream, unsigned int lba, void *b);
+int cdrom_is_media_inserted(void *stream);
+#endif
+
 int  cdra_init(void);
 void cdra_shutdown(void);
 int  cdra_open(void);