From 9dca6543647a07f8b4e5e69554718a428fd3f88d Mon Sep 17 00:00:00 2001 From: notaz Date: Sun, 29 Oct 2023 23:54:58 +0200 Subject: [PATCH] cdrom: simplify getStatus --- libpcsxcore/cdriso.c | 37 +++++++++++-------------------------- libpcsxcore/cdrom.c | 2 ++ libpcsxcore/plugins.h | 6 +++--- 3 files changed, 16 insertions(+), 29 deletions(-) diff --git a/libpcsxcore/cdriso.c b/libpcsxcore/cdriso.c index a12ec31d..37e67d4d 100644 --- a/libpcsxcore/cdriso.c +++ b/libpcsxcore/cdriso.c @@ -75,7 +75,6 @@ static boolean multifile = FALSE; static unsigned char cdbuffer[CD_FRAMESIZE_RAW]; static unsigned char subbuffer[SUB_FRAMESIZE]; -static boolean playing = FALSE; static boolean cddaBigEndian = FALSE; /* Frame offset into CD image where pregap data would be found if it was there. * If a game seeks there we must *not* return subchannel data since it's @@ -83,8 +82,6 @@ static boolean cddaBigEndian = FALSE; * XXX: there could be multiple pregaps but PSX dumps only have one? */ static unsigned int pregapOffset; -static unsigned int cddaCurPos; - // compressed image stuff static struct { unsigned char buff_raw[16][CD_FRAMESIZE_RAW]; @@ -233,11 +230,12 @@ static int parsetoc(const char *isofile) { } // check if it's really a TOC named as a .cue if (fgets(linebuf, sizeof(linebuf), fi) != NULL) { - token = strtok(linebuf, " "); - if (token && strncmp(token, "CD", 2) != 0 && strcmp(token, "CATALOG") != 0) { - fclose(fi); - return -1; - } + token = strtok(linebuf, " "); + if (token && strncmp(token, "CD", 2) != 0) { + // && strcmp(token, "CATALOG") != 0) - valid for a real .cue + fclose(fi); + return -1; + } } fseek(fi, 0, SEEK_SET); } @@ -1598,7 +1596,8 @@ static void PrintTracks(void) { for (i = 1; i <= numtracks; i++) { SysPrintf(_("Track %.2d (%s) - Start %.2d:%.2d:%.2d, Length %.2d:%.2d:%.2d\n"), - i, (ti[i].type == DATA ? "DATA" : "AUDIO"), + i, (ti[i].type == DATA ? "DATA" : + (ti[i].type == CDDA ? "AUDIO" : "UNKNOWN")), ti[i].start[0], ti[i].start[1], ti[i].start[2], ti[i].length[0], ti[i].length[1], ti[i].length[2]); } @@ -1748,7 +1747,6 @@ static long CALLBACK ISOclose(void) { fclose(subHandle); subHandle = NULL; } - playing = FALSE; cddaHandle = NULL; if (compr_img != NULL) { @@ -1884,13 +1882,11 @@ static boolean CALLBACK ISOreadTrack(unsigned char *time) { // sector: byte 0 - minute; byte 1 - second; byte 2 - frame // does NOT uses bcd format static long CALLBACK ISOplay(unsigned char *time) { - playing = TRUE; return 0; } // stops cdda audio static long CALLBACK ISOstop(void) { - playing = FALSE; return 0; } @@ -1921,22 +1917,10 @@ static unsigned char* CALLBACK ISOgetBufferSub(int sector) { } static long CALLBACK ISOgetStatus(struct CdrStat *stat) { - u32 sect; - CDR__getStatus(stat); - if (playing) { - stat->Type = 0x02; - stat->Status |= 0x80; - } - else { - // BIOS - boot ID (CD type) - stat->Type = ti[1].type; - } - - // relative -> absolute time - sect = cddaCurPos; - sec2msf(sect, (char *)stat->Time); + // BIOS - boot ID (CD type) + stat->Type = ti[1].type; return 0; } @@ -1946,6 +1930,7 @@ long CALLBACK ISOreadCDDA(unsigned char m, unsigned char s, unsigned char f, uns unsigned char msf[3] = {m, s, f}; unsigned int track, track_start = 0; FILE *handle = cdHandle; + unsigned int cddaCurPos; int ret; cddaCurPos = msf2sec((char *)msf); diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index 6f4e3eb4..83f8c1c1 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -1132,6 +1132,8 @@ void cdrInterrupt(void) { cdr.Result[1] |= 0x80; } cdr.Result[0] |= (cdr.Result[1] >> 4) & 0x08; + CDR_LOG_I("CdlID: %02x %02x %02x %02x\n", cdr.Result[0], + cdr.Result[1], cdr.Result[2], cdr.Result[3]); /* This adds the string "PCSX" in Playstation bios boot screen */ memcpy((char *)&cdr.Result[4], "PCSX", 4); diff --git a/libpcsxcore/plugins.h b/libpcsxcore/plugins.h index b106028c..269ef18a 100644 --- a/libpcsxcore/plugins.h +++ b/libpcsxcore/plugins.h @@ -120,9 +120,9 @@ typedef long (CALLBACK* CDRplay)(unsigned char *); typedef long (CALLBACK* CDRstop)(void); typedef long (CALLBACK* CDRsetfilename)(char *); struct CdrStat { - uint32_t Type; - uint32_t Status; - unsigned char Time[3]; + uint32_t Type; // DATA, CDDA + uint32_t Status; // same as cdr.StatP + unsigned char Time_[3]; // unused }; typedef long (CALLBACK* CDRgetStatus)(struct CdrStat *); typedef char* (CALLBACK* CDRgetDriveLetter)(void); -- 2.39.5