X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Fcdrom.c;h=e232d05a47a19af3667f51ccc6709ff1ff74908b;hb=abf094858889145af1fde9840429dfb8a0e70a39;hp=6f48df05fdc7173900c0a2ec60e49c135088d818;hpb=4f38d1f8434e47c5505489144aac0ba40eaf2264;p=pcsx_rearmed.git diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index 6f48df05..e232d05a 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -23,6 +23,7 @@ #include #include "cdrom.h" +#include "misc.h" #include "ppf.h" #include "psxdma.h" #include "arm_features.h" @@ -65,7 +66,8 @@ static struct { unsigned char Absolute[3]; } subq; unsigned char TrackChanged; - unsigned char unused3[3]; + unsigned char ReportDelay; + unsigned char unused3[2]; unsigned int freeze_ver; unsigned char Prev[4]; @@ -524,7 +526,9 @@ static void cdrPlayInterrupt_Autopause() StopCdda(); SetPlaySeekRead(cdr.StatP, 0); } - else if (((cdr.Mode & MODE_REPORT) || cdr.FastForward || cdr.FastBackward)) { + else if ((cdr.Mode & MODE_REPORT) && !cdr.ReportDelay && + ((cdr.subq.Absolute[2] & 0x0f) == 0 || cdr.FastForward || cdr.FastBackward)) + { cdr.Result[0] = cdr.StatP; cdr.Result[1] = cdr.subq.Track; cdr.Result[2] = cdr.subq.Index; @@ -560,6 +564,9 @@ static void cdrPlayInterrupt_Autopause() SetResultSize(8); setIrq(0x1001); } + + if (cdr.ReportDelay) + cdr.ReportDelay--; } // LastReadCycles @@ -817,6 +824,7 @@ void cdrInterrupt(void) { cdr.SubqForwardSectors = 1; cdr.TrackChanged = FALSE; cdr.FirstSector = 1; + cdr.ReportDelay = 60; if (!Config.Cdda) CDR_play(cdr.SetSectorPlay);