diff --git a/libretro-common/include/media/media_detect_cd.h b/libretro-common/include/media/media_detect_cd.h index 66181061c5..7ef403cc99 100644 --- a/libretro-common/include/media/media_detect_cd.h +++ b/libretro-common/include/media/media_detect_cd.h @@ -34,7 +34,8 @@ enum media_detect_cd_system MEDIA_CD_SYSTEM_SATURN, MEDIA_CD_SYSTEM_DREAMCAST, MEDIA_CD_SYSTEM_PSX, - MEDIA_CD_SYSTEM_3DO + MEDIA_CD_SYSTEM_3DO, + MEDIA_CD_SYSTEM_PC_ENGINE_CD }; typedef struct diff --git a/libretro-common/media/media_detect_cd.c b/libretro-common/media/media_detect_cd.c index a6b375de99..110c2fbb15 100644 --- a/libretro-common/media/media_detect_cd.c +++ b/libretro-common/media/media_detect_cd.c @@ -265,6 +265,12 @@ bool media_detect_cd_info(const char *path, media_detect_cd_info_t *info) strlcpy(info->system, "3DO", sizeof(info->system)); } + else if (!memcmp(buf + offset + 0x950, "PC Engine CD-ROM SYSTEM", 23)) + { + info->system_id = MEDIA_CD_SYSTEM_PC_ENGINE_CD; + + strlcpy(info->system, "TurboGrafx-CD / PC-Engine CD", sizeof(info->system)); + } free(buf); } diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index 908c5fb2c3..49b254aa0e 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -5015,13 +5015,27 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, if (file) { const cdrom_toc_t *toc = retro_vfs_file_get_cdrom_toc(); + unsigned first_data_track = 1; atip = cdrom_has_atip(filestream_get_vfs_handle(file)); filestream_close(file); - /* open first track */ - cdrom_device_fillpath(file_path, sizeof(file_path), drive, 1, false); + { + unsigned i; + + for (i = 0; i < toc->num_tracks; i++) + { + if (!toc->track[i].audio) + { + first_data_track = i + 1; + break; + } + } + } + + /* open first data track */ + cdrom_device_fillpath(file_path, sizeof(file_path), drive, first_data_track, false); if (media_detect_cd_info(file_path, &cd_info)) {