clear Index0 data FIFO flag (#241)
[pcsx_rearmed.git] / libpcsxcore / cdrom.c
index 016b993..ea97308 100644 (file)
@@ -451,7 +451,6 @@ static void cdrPlayInterrupt_Autopause()
                StopCdda();
        }
        else if (((cdr.Mode & MODE_REPORT) || cdr.FastForward || cdr.FastBackward)) {
-               CDR_readCDDA(cdr.SetSectorPlay[0], cdr.SetSectorPlay[1], cdr.SetSectorPlay[2], (u8 *)read_buf);
                cdr.Result[0] = cdr.StatP;
                cdr.Result[1] = cdr.subq.Track;
                cdr.Result[2] = cdr.subq.Index;
@@ -527,13 +526,14 @@ void cdrPlayInterrupt()
                StopCdda();
                cdr.TrackChanged = TRUE;
        }
+       else {
+               CDR_readCDDA(cdr.SetSectorPlay[0], cdr.SetSectorPlay[1], cdr.SetSectorPlay[2], (u8 *)read_buf);
+       }
 
        if (!cdr.Irq && !cdr.Stat && (cdr.Mode & (MODE_AUTOPAUSE|MODE_REPORT)))
                cdrPlayInterrupt_Autopause();
 
-       if (!cdr.Play) return;
-       
-       if (CDR_readCDDA && !cdr.Muted && cdr.Mode & MODE_REPORT) {
+       if (CDR_readCDDA && !cdr.Muted && !Config.Cdda) {
                cdrAttenuate(read_buf, CD_FRAMESIZE_RAW / 4, 1);
                if (SPU_playCDDAchannel)
                        SPU_playCDDAchannel(read_buf, CD_FRAMESIZE_RAW);
@@ -775,7 +775,7 @@ void cdrInterrupt() {
                         * Mednafen's timing don't work for Gundam Battle Assault 2 in PAL/50hz mode,
                         * seems to be timing sensitive as it can depend on the CPU's clock speed.
                         * */
-                       if (cdr.DriveState != DRIVESTATE_STANDBY)
+                       if (cdr.DriveState == DRIVESTATE_STANDBY)
                        {
                                delay = 7000;
                        }
@@ -841,9 +841,6 @@ void cdrInterrupt() {
                case CdlGetlocP:
                        SetResultSize(8);
                        memcpy(&cdr.Result, &cdr.subq, 8);
-
-                       if (!cdr.Play && !cdr.Reading)
-                               cdr.Result[1] = 0; // HACK?
                        break;
 
                case CdlReadT: // SetSession?
@@ -1284,8 +1281,8 @@ unsigned char cdrRead0(void) {
 
        if (cdr.OCUP)
                cdr.Ctrl |= 0x40;
-//  else
-//             cdr.Ctrl &= ~0x40;
+       else
+               cdr.Ctrl &= ~0x40;
 
        // What means the 0x10 and the 0x08 bits? I only saw it used by the bios
        cdr.Ctrl |= 0x18;
@@ -1381,6 +1378,7 @@ unsigned char cdrRead2(void) {
        unsigned char ret;
 
        if (cdr.Readed == 0) {
+               cdr.OCUP = 0;
                ret = 0;
        } else {
                ret = *pTransfer++;