summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-10-10 00:59:47 +0000
committerSND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-10-10 00:59:47 +0000
commit5c85c661fe983e02e60a18daa4c9e616307095eb (patch)
tree765338dab8ff07e414116ff84ea68bd22876d37b
parentb056099cfb2193910faff0e58dbb4440d0996970 (diff)
downloadpcsxr-5c85c661fe983e02e60a18daa4c9e616307095eb.tar.gz
G-Police: cdrom.c
- Longer GetlocL time, no autopause on ADPCM - Fixes music, speech git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@58258 e17a0e51-4ae3-4d35-97c3-1a29b211df97
-rw-r--r--libpcsxcore/cdrom.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c
index 8a0d9168..de8e97ee 100644
--- a/libpcsxcore/cdrom.c
+++ b/libpcsxcore/cdrom.c
@@ -458,14 +458,12 @@ void cdrInterrupt() {
cdr.Stat = Acknowledge;
break;
- case CdlGetlocL:
+ case CdlGetlocL:
SetResultSize(8);
-// for (i = 0; i < 8; i++)
-// cdr.Result[i] = itob(cdr.Transfer[i]);
- for (i = 0; i < 8; i++)
+ for (i = 0; i < 8; i++)
cdr.Result[i] = cdr.Transfer[i];
- cdr.Stat = Acknowledge;
- break;
+ cdr.Stat = Acknowledge;
+ break;
case CdlGetlocP:
// GameShark CDX CD Player: uses 17 bytes output (wraps around)
@@ -887,7 +885,10 @@ void cdrReadInterrupt() {
cdr.Readed = 0;
- if ((cdr.Transfer[4 + 2] & 0x80) && (cdr.Mode & 0x2)) { // EOF
+ // G-Police: Don't autopause ADPCM even if mode set (music)
+ if ((cdr.Transfer[4 + 2] & 0x80) && (cdr.Mode & 0x2) &&
+ (cdr.Transfer[4 + 0] == cdr.File) && (cdr.Transfer[4 + 1] == cdr.Channel) &&
+ (cdr.Transfer[4 + 2] & 0x64) != 0x64 ) { // EOF
#ifdef CDR_LOG
CDR_LOG("cdrReadInterrupt() Log: Autopausing read\n");
#endif
@@ -903,7 +904,7 @@ void cdrReadInterrupt() {
Xenogears: use correct FORM2 ID ($64 / $E4 for movies)
*/
- if( (cdr.Mode & 0x40) == 0 || (cdr.Transfer[4+2] & 0x64) != 0x64 ) {
+ if( (cdr.Transfer[4+2] & 0x64) != 0x64 ) {
cdr.Stat = DataReady;
psxHu32ref(0x1070) |= SWAP32((u32)0x4);
@@ -1243,10 +1244,12 @@ void cdrWrite1(unsigned char rt) {
break;
case CdlGetlocL:
- cdr.Ctrl |= 0x80;
+ cdr.Ctrl |= 0x80;
cdr.Stat = NoIntr;
- AddIrqQueue(cdr.Cmd, 0x1000);
- break;
+
+ // G-Police: in-game music needs longer time
+ AddIrqQueue(cdr.Cmd, 0x4000);
+ break;
case CdlGetlocP:
cdr.Ctrl |= 0x80;