diff options
| author | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-10-10 00:59:47 +0000 |
|---|---|---|
| committer | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-10-10 00:59:47 +0000 |
| commit | 5c85c661fe983e02e60a18daa4c9e616307095eb (patch) | |
| tree | 765338dab8ff07e414116ff84ea68bd22876d37b | |
| parent | b056099cfb2193910faff0e58dbb4440d0996970 (diff) | |
| download | pcsxr-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.c | 25 |
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; |
