diff options
| author | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-10-30 14:56:17 +0000 |
|---|---|---|
| committer | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-10-30 14:56:17 +0000 |
| commit | f550678e07ce132bd3e05aac031577a69b4e63c7 (patch) | |
| tree | 0f92087e4507fdebcf9fba3e2782f87662516b17 /libpcsxcore | |
| parent | 985796c01484339cbd10045b7cfd346d0090bc63 (diff) | |
| download | pcsxr-f550678e07ce132bd3e05aac031577a69b4e63c7.tar.gz | |
Tekken: cdrom.c
- CD-XA volume controls
- Fixes fadeout at end of match
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@58928 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'libpcsxcore')
| -rw-r--r-- | libpcsxcore/cdrom.c | 64 | ||||
| -rw-r--r-- | libpcsxcore/cdrom.h | 2 |
2 files changed, 59 insertions, 7 deletions
diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index b0e3750a..de0acd62 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -1272,11 +1272,19 @@ void cdrWrite0(unsigned char rt) { #endif cdr.Ctrl = rt | (cdr.Ctrl & ~0x3); - if (rt == 0) { - cdr.ParamP = 0; - cdr.ParamC = 0; - cdr.ResultReady = 0; - } + if (rt == 0) {
+ cdr.ParamP = 0;
+ cdr.ParamC = 0;
+ cdr.ResultReady = 0;
+ }
+
+ // Tekken: CDXA fade-out
+ else if( rt == 2 ) {
+ cdr.LeftVol = 0;
+ }
+ else if( rt == 3 ) {
+ cdr.RightVol = 0;
+ }
} unsigned char cdrRead1(void) { @@ -1301,8 +1309,16 @@ void cdrWrite1(unsigned char rt) { #ifdef CDR_LOG CDR_LOG("cdrWrite1() Log: CD1 write: %x (%s)\n", rt, CmdName[rt]); #endif -// psxHu8(0x1801) = rt; - cdr.Cmd = rt; +
+
+ // Tekken: CDXA fade-out
+ if( (cdr.Ctrl & 3) == 3 ) {
+ cdr.RightVol |= (rt << 8);
+ }
+
+
+ // psxHu8(0x1801) = rt; + cdr.Cmd = rt; cdr.OCUP = 0; #ifdef CDRCMD_DEBUG @@ -1637,6 +1653,18 @@ void cdrWrite2(unsigned char rt) { #ifdef CDR_LOG CDR_LOG("cdrWrite2() Log: CD2 write: %x\n", rt); #endif +
+
+ // Tekken: CDXA fade-out
+ if( (cdr.Ctrl & 3) == 2 ) {
+ cdr.LeftVol |= (rt << 8);
+ }
+ else if( (cdr.Ctrl & 3) == 3 ) {
+ cdr.RightVol |= (rt << 0);
+ }
+
+
+
if (cdr.Ctrl & 0x1) { switch (rt) { case 0x07: @@ -1676,6 +1704,28 @@ void cdrWrite3(unsigned char rt) { CDR_LOG("cdrWrite3() Log: CD3 write: %x\n", rt); #endif + // Tekken: CDXA fade-out
+ if( (cdr.Ctrl & 3) == 2 ) {
+ 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
+
+ if( !cdr.Muted ) {
+ /*
+ 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 );
+ }
+ }
+
+
// GameShark CDX CD Player: Irq timing mania if( rt == 0 && cdr.Irq != 0 && cdr.Irq != 0xff && diff --git a/libpcsxcore/cdrom.h b/libpcsxcore/cdrom.h index 697b9e97..82afa42c 100644 --- a/libpcsxcore/cdrom.h +++ b/libpcsxcore/cdrom.h @@ -92,6 +92,8 @@ typedef struct { u8 LidCheck; u8 FastForward;
u8 FastBackward;
+
+ u32 LeftVol, RightVol;
} cdrStruct; extern cdrStruct cdr; |
