summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-10-30 13:31:04 +0000
committerSND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-10-30 13:31:04 +0000
commite2cc5d251c76a663f9fee92a78d67fd17bbe0a76 (patch)
tree140a1274d7e341ed9e8ca9c1cd7ecf434147ad23
parent275e41b282b624fd530befeb140275d3963841f0 (diff)
downloadpcsxr-e2cc5d251c76a663f9fee92a78d67fd17bbe0a76.tar.gz
Doom - cdrom.c
- IRQ reschedule - Fixes boot - InuYasha CdlPause adjustment git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@58923 e17a0e51-4ae3-4d35-97c3-1a29b211df97
-rw-r--r--libpcsxcore/cdrom.c50
1 files changed, 29 insertions, 21 deletions
diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c
index af770d12..0c68ff7a 100644
--- a/libpcsxcore/cdrom.c
+++ b/libpcsxcore/cdrom.c
@@ -192,19 +192,19 @@ static void ReadTrack() {
#define DiskError 5
void AddIrqQueue(unsigned char irq, unsigned long ecycle) {
- cdr.Irq = irq;
- if (cdr.Stat) {
- cdr.eCycle = ecycle;
- } else {
- CDR_INT(ecycle);
- }
+ cdr.Irq = irq;
+ cdr.eCycle = ecycle;
+
+ // Doom: Force rescheduling
+ // - Fixes boot
+ CDR_INT(ecycle);
}
void cdrRepplayInterrupt()
{
// Wait for IRQ to be acknowledged
if (cdr.Stat) {
- CDREAD_INT(0x1000);
+ CDREAD_INT( cdReadTime );
return;
}
@@ -292,10 +292,11 @@ void cdrInterrupt() {
int i;
unsigned char Irq = cdr.Irq;
- if (cdr.Stat) {
- CDR_INT(0x1000);
- return;
- }
+ // Reschedule IRQ
+ if (cdr.Stat) {
+ CDR_INT( cdr.eCycle );
+ return;
+ }
cdr.Irq = 0xff;
cdr.Ctrl &= ~0x80;
@@ -390,9 +391,7 @@ void cdrInterrupt() {
cdr.Result[0] = cdr.StatP;
cdr.Stat = Acknowledge;
- // Gundam Battle Assault 2: sync to next frame @ 0.5x speed
- AddIrqQueue(CdlPause + 0x20, cdReadTime * 2);
-
+ AddIrqQueue(CdlPause + 0x20, 0x1000);
cdr.Ctrl |= 0x80;
break;
@@ -1205,8 +1204,17 @@ void cdrWrite1(unsigned char rt) {
cdr.Ctrl |= 0x80;
cdr.Stat = NoIntr;
- // Gundam Battle Assault 2: sync to next frame @ 0.5x speed
- AddIrqQueue(cdr.Cmd, cdReadTime * 2);
+ /*
+ Gundam Battle Assault 2: much slower (*)
+ - Fixes boot, gameplay
+
+ Hokuto no Ken 2: slower
+ - Fixes intro + subtitles
+
+ InuYasha - Feudal Fairy Tale: slower
+ - Fixes battles
+ */
+ AddIrqQueue(cdr.Cmd, cdReadTime * 3);
break;
case CdlReset:
@@ -1420,11 +1428,11 @@ void cdrWrite3(unsigned char rt) {
return;
}
- if (cdr.Irq)
- CDR_INT(cdr.eCycle);
-
- if (cdr.Reading && !cdr.ResultReady)
- CDREAD_INT((cdr.Mode & 0x80) ? (cdReadTime / 2) : cdReadTime);
+ /*
+ Do not reset interrupts here
+ - Doom: fixes boot
+ - Judge Dredd: better gameplay, some dropped frames
+ */
return;
}