diff options
| author | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-11-28 19:48:39 +0000 |
|---|---|---|
| committer | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-11-28 19:48:39 +0000 |
| commit | 6b4d831db0b4c9f64c63d1ce6db05f0abbdb063a (patch) | |
| tree | 7230d94c1a1fd83e8666c965783fac046fe67458 | |
| parent | 988aa3bbfbc3079ca8f977fad8fadcc729aa5009 (diff) | |
| download | pcsxr-6b4d831db0b4c9f64c63d1ce6db05f0abbdb063a.tar.gz | |
Smurf Racer - cdrom.c
- separate left-right attenuation
- fix movie volume
- eternal compatibility hack
- fixme later
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@60309 e17a0e51-4ae3-4d35-97c3-1a29b211df97
| -rw-r--r-- | libpcsxcore/cdrom.c | 48 |
1 files changed, 36 insertions, 12 deletions
diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index fbba9a4f..3848b8ae 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -1977,18 +1977,42 @@ void cdrWrite3(unsigned char rt) { cdr.LeftVol |= (rt << 0); } else if( (cdr.Ctrl & 3) == 3 && rt == 0x20 ) { -#ifdef CDR_LOG - CDR_LOG( "CD-XA Volume: %X %X\n", cdr.LeftVol, cdr.RightVol ); -#endif - - /* - Eternal SPU: scale volume from [0-ffff] -> [0,8000] - - Destruction Derby Raw movies (ff00) - */ - - // write CD-XA volumes - SPU_writeRegister( H_CDLeft, cdr.LeftVol / 2 ); - SPU_writeRegister( H_CDRight, cdr.RightVol / 2 ); + u16 cdleft, cdright;
+ u8 l1,l2,r1,r2;
+
+#ifdef CDR_LOG
+ CDR_LOG( "CD-XA Volume: %X %X\n", cdr.LeftVol, cdr.RightVol );
+#endif
+
+ // TODO: Use real attenuation (left - right mixer)
+
+ /*
+ Eternal SPU: scale volume from [0-ffff] -> [0,8000]
+ - Destruction Derby Raw - movies (ff00 ff00)
+ - Smurf Racer - movies (00ff 00ff)
+ */
+
+ // Fake attenuation volume hack for Eternal
+ l1 = (cdr.LeftVol >> 8) & 0xff;
+ l2 = (cdr.LeftVol >> 0) & 0xff;
+ r1 = (cdr.RightVol >> 8) & 0xff;
+ r2 = (cdr.RightVol >> 0) & 0xff;
+
+ if( l1 > 0x80 ) l1 = 0x80;
+ if( l2 > 0x80 ) l2 = 0x80;
+ if( r1 > 0x80 ) r1 = 0x80;
+ if( r2 > 0x80 ) r2 = 0x80;
+
+ // spu compatibility volume hack
+ if( l1 == 0 && l2 > 0 ) { l1 = l2; l2 = 0; }
+ if( r1 == 0 && r2 > 0 ) { r1 = r2; r2 = 0; }
+
+ cdleft = (l1 << 8) | l2;
+ cdright = (r1 << 8) | r2;
+
+ // write CD-XA volumes
+ SPU_writeRegister( H_CDLeft, cdleft );
+ SPU_writeRegister( H_CDRight, cdright );
} |
