diff options
| author | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-11-24 01:21:28 +0000 |
|---|---|---|
| committer | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-11-24 01:21:28 +0000 |
| commit | 3614c1cedfce6ef5e96b2f0f4e7807dd44f2369b (patch) | |
| tree | 0d02b62158a578cb02748ed517190d52dd3cf0d7 | |
| parent | dd86ebe733746c215d59091bf0704334651bebac (diff) | |
| download | pcsxr-3614c1cedfce6ef5e96b2f0f4e7807dd44f2369b.tar.gz | |
Crusaders of Might and Magic - cdrom.c
- fix seek, getlocl, read_ack times
- fix cutscene speech (start + play)
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@60064 e17a0e51-4ae3-4d35-97c3-1a29b211df97
| -rw-r--r-- | libpcsxcore/cdrom.c | 32 |
1 files changed, 22 insertions, 10 deletions
diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index 37cded91..acbbc10a 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -1122,7 +1122,7 @@ void cdrInterrupt() { cdr.Result[0] = cdr.StatP; cdr.StatP |= 0x40; cdr.Stat = Acknowledge; - AddIrqQueue(CdlSeekL + 0x20, 0x1000); + AddIrqQueue(CdlSeekL + 0x20, cdReadTime * 1); break; case CdlSeekL + 0x20: @@ -1140,7 +1140,7 @@ void cdrInterrupt() { cdr.Result[0] = cdr.StatP; cdr.StatP |= 0x40; cdr.Stat = Acknowledge; - AddIrqQueue(CdlSeekP + 0x20, 0x1000); + AddIrqQueue(CdlSeekP + 0x20, cdReadTime * 1);
break; case CdlSeekP + 0x20: @@ -1267,12 +1267,17 @@ void cdrInterrupt() { ReadTrack( cdr.SetSector );
+ // Crusaders of Might and Magic - update getlocl now
+ // - fixes cutscene speech
+ {
+ u8 *buf = CDR_getBuffer();
+ memcpy(cdr.Transfer, buf, 8);
+ }
+
+
/*
Duke Nukem: Land of the Babes - seek then delay read for one frame
- fixes cutscenes
-
- Judge Dredd - don't delay too long
- - breaks gameplay movies
*/
if (!cdr.Seeked) { @@ -1280,12 +1285,18 @@ void cdrInterrupt() { cdr.StatP |= 0x40; cdr.StatP &= ~0x20;
+
+ // Crusaders of Might and Magic - use short time
+ // - fix cutscene speech (startup)
+
+ // ??? - use more accurate seek time later
+ CDREAD_INT((cdr.Mode & 0x80) ? (cdReadTime / 2) : cdReadTime * 1);
} else {
cdr.StatP |= 0x20;
cdr.StatP &= ~0x40;
+
+ CDREAD_INT((cdr.Mode & 0x80) ? (cdReadTime / 2) : cdReadTime * 1);
}
- - CDREAD_INT((cdr.Mode & 0x80) ? (cdReadTime * 4) : cdReadTime * 8);
SetResultSize(1); cdr.StatP |= 0x02; @@ -1418,7 +1429,8 @@ void cdrReadInterrupt() { if( (cdr.Mode & 0x40) == 0 || (cdr.Transfer[4+2] & 0x4) != 0x4 ||
(cdr.Mode & 0x20) ) { cdr.Stat = DataReady; - } else { + } else {
+ // Rockman X5 - no music restart problem cdr.Stat = NoIntr; } psxHu32ref(0x1070) |= SWAP32((u32)0x4);
@@ -1758,8 +1770,8 @@ void cdrWrite1(unsigned char rt) { cdr.Ctrl |= 0x80; cdr.Stat = NoIntr; - // G-Police: in-game music needs longer time - AddIrqQueue(cdr.Cmd, 0x4000); + // Crusaders of Might and Magic - cutscene speech + AddIrqQueue(cdr.Cmd, 0x800); break; case CdlGetlocP: |
