summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-10-30 14:56:17 +0000
committerSND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-10-30 14:56:17 +0000
commitf550678e07ce132bd3e05aac031577a69b4e63c7 (patch)
tree0f92087e4507fdebcf9fba3e2782f87662516b17
parent985796c01484339cbd10045b7cfd346d0090bc63 (diff)
downloadpcsxr-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
-rw-r--r--libpcsxcore/cdrom.c64
-rw-r--r--libpcsxcore/cdrom.h2
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;