Duke Nukem: Land of the Babes - cdrom.c

- Fix read interrupt start timing, Seek / Reading flags
- Fixes cutscene loading


git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@58924 e17a0e51-4ae3-4d35-97c3-1a29b211df97
This commit is contained in:
SND\shalma_cp 2010-10-30 13:34:38 +00:00
parent e2cc5d251c
commit 4d4c05a503
1 changed files with 31 additions and 17 deletions

View File

@ -599,7 +599,6 @@ void cdrInterrupt() {
cdr.Result[0] = cdr.StatP;
cdr.StatP |= 0x40;
cdr.Stat = Acknowledge;
cdr.Seeked = TRUE;
AddIrqQueue(CdlSeekL + 0x20, 0x1000);
break;
@ -608,6 +607,7 @@ void cdrInterrupt() {
cdr.StatP |= 0x2;
cdr.StatP &= ~0x40;
cdr.Result[0] = cdr.StatP;
cdr.Seeked = TRUE;
cdr.Stat = Complete;
break;
@ -626,6 +626,7 @@ void cdrInterrupt() {
cdr.StatP &= ~0x40;
cdr.Result[0] = cdr.StatP;
cdr.Stat = Complete;
cdr.Seeked = TRUE;
// Tomb Raider 2: must update read cursor for getlocp
ReadTrack();
@ -721,20 +722,33 @@ void cdrInterrupt() {
break;
case READ_ACK:
if (!cdr.Reading) return;
SetResultSize(1);
cdr.StatP |= 0x2;
cdr.Result[0] = cdr.StatP;
if (!cdr.Seeked) {
cdr.Seeked = TRUE;
cdr.StatP |= 0x40;
}
cdr.StatP |= 0x20;
cdr.Stat = Acknowledge;
// CDREAD_INT((cdr.Mode & 0x80) ? (cdReadTime / 2) : cdReadTime);
CDREAD_INT(0x80000);
if (!cdr.Reading) return;
// Duke Nukem: Land of the Babes - seek then read
// - fixes cutscenes
if (!cdr.Seeked) {
cdr.Seeked = TRUE;
cdr.StatP |= 0x40;
cdr.StatP &= ~0x20;
} else {
cdr.StatP |= 0x20;
cdr.StatP &= ~0x40;
}
/*
Duke Nukem: Land of the Babes - delay read for one frame
- fixes cutscenes
Judge Dredd - don't delay too long
- breaks gameplay movies
*/
CDREAD_INT((cdr.Mode & 0x80) ? (cdReadTime / 2) : cdReadTime);
SetResultSize(1);
cdr.StatP |= 0x02;
cdr.Result[0] = cdr.StatP;
cdr.Stat = Acknowledge;
break;
case 0xff:
@ -893,8 +907,8 @@ void cdrReadInterrupt() {
#ifdef CDR_LOG
CDR_LOG("cdrReadInterrupt() Log: Autopausing read\n");
#endif
// AddIrqQueue(AUTOPAUSE, 0x1000);
AddIrqQueue(CdlPause, 0x1000);
// AddIrqQueue(AUTOPAUSE, 0x2000);
AddIrqQueue(CdlPause, 0x2000);
}
else {
CDREAD_INT((cdr.Mode & 0x80) ? (cdReadTime / 2) : cdReadTime);