- ReadTrack(cdr.SetSectorPlay);
-
-
- // Crusaders of Might and Magic - update getlocl now
- // - fixes cutscene speech
- {
- u8 *buf = CDR_getBuffer();
- if (buf != NULL)
- memcpy(cdr.Transfer, buf, 8);
- }
-
- /*
- Duke Nukem: Land of the Babes - seek then delay read for one frame
- - fixes cutscenes
- C-12 - Final Resistance - doesn't like seek
- */
-
- /*
- By nicolasnoble from PCSX Redux :
- "It LOOKS like this logic is wrong, therefore disabling it with `&& false` for now.
- For "PoPoLoCrois Monogatari II", the game logic will soft lock and will never issue GetLocP to detect
- the end of its XA streams, as it seems to assume ReadS will not return a status byte with the SEEK
- flag set. I think the reasonning is that since it's invalid to call GetLocP while seeking, the game
- tries to protect itself against errors by preventing from issuing a GetLocP while it knows the
- last status was "seek". But this makes the logic just softlock as it'll never get a notification
- about the fact the drive is done seeking and the read actually started.
-
- In other words, this state machine here is probably wrong in assuming the response to ReadS/ReadN is
- done right away. It's rather when it's done seeking, and the read has actually started. This probably
- requires a bit more work to make sure seek delays are processed properly.
- Checked with a few games, this seems to work fine."
-
- Gameblabla additional notes :
- This still needs the "+ seekTime" that PCSX Redux doesn't have for the Driver "retry" mission error.
- */
- CDREAD_INT(((cdr.Mode & 0x80) ? (cdReadTime) : cdReadTime * 2) + seekTime);
+ UpdateSubq(cdr.SetSectorPlay);
+ cdr.LocL[0] = LOCL_INVALID;
+ cdr.SubqForwardSectors = 1;
+ cdr.sectorsRead = 0;
+ cdr.DriveState = DRIVESTATE_SEEK;
+ CDR_prefetch(cdr.SetSectorPlay[0], cdr.SetSectorPlay[1],
+ cdr.SetSectorPlay[2]);
+
+ cycles = (cdr.Mode & MODE_SPEED) ? cdReadTime : cdReadTime * 2;
+ cycles += seekTime;
+ if (Config.hacks.cdr_read_timing)
+ cycles = cdrAlignTimingHack(cycles);
+ CDRPLAYREAD_INT(cycles, 1);