Add is_available function to CD-ROM devices

Now `SI 2` command returns zero if no audio track is available.
This commit is contained in:
kichikuou
2025-11-28 10:45:24 +09:00
parent 8806bc9545
commit 0342141358
5 changed files with 17 additions and 1 deletions
+5
View File
@@ -63,6 +63,10 @@ static bool cdrom_bgm_getPlayingInfo(cd_time *info) {
return true;
}
static bool cdrom_bgm_is_available(void) {
return true;
}
cdromdevice_t cdrom_bgm = {
.init = cdrom_bgm_init,
.exit = cdrom_bgm_exit,
@@ -70,4 +74,5 @@ cdromdevice_t cdrom_bgm = {
.start = cdrom_bgm_start,
.stop = cdrom_bgm_stop,
.getpos = cdrom_bgm_getPlayingInfo,
.is_available = cdrom_bgm_is_available,
};
+5
View File
@@ -62,6 +62,10 @@ static bool cdrom_getPlayingInfo(cd_time *info) {
return true;
}
static bool cdrom_is_available(void) {
return EM_ASM_INT({ return xsystem35.cdPlayer.hasAudioTrack(); });
}
cdromdevice_t cdrom_emscripten = {
.init = cdrom_init,
.exit = cdrom_exit,
@@ -69,4 +73,5 @@ cdromdevice_t cdrom_emscripten = {
.start = cdrom_start,
.stop = cdrom_stop,
.getpos = cdrom_getPlayingInfo,
.is_available = cdrom_is_available,
};
+1
View File
@@ -38,6 +38,7 @@ typedef struct {
bool (*start)(int trk, int loop);
void (*stop)(void);
bool (*getpos)(cd_time *);
bool (*is_available)(void);
} cdromdevice_t;
extern cdromdevice_t cdrom_bgm;
+5
View File
@@ -164,6 +164,10 @@ static bool cdrom_getPlayingInfo (cd_time *inf) {
return true;
}
static bool cdrom_is_available(void) {
return enabled;
}
cdromdevice_t cdrom_mp3 = {
.init = cdrom_init,
.exit = cdrom_exit,
@@ -171,4 +175,5 @@ cdromdevice_t cdrom_mp3 = {
.start = cdrom_start,
.stop = cdrom_stop,
.getpos = cdrom_getPlayingInfo,
.is_available = cdrom_is_available,
};
+1 -1
View File
@@ -113,5 +113,5 @@ int muscd_get_maxtrack(void) {
}
bool muscd_is_available(void) {
return prv.cddev;
return prv.cddev && prv.cddev->is_available();
}