From c8edcac4e14a31af9d848c0dfded76908b8c1d7d Mon Sep 17 00:00:00 2001 From: "SND\\shalma_cp" Date: Wed, 2 Feb 2011 17:26:59 +0000 Subject: Experimental patches - cdrom.c - burst dma 0.3333x - cdrom.c - mono xa attenuation (Tales of Phantasia) - misc comments cleanup Disabled by default git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@62851 e17a0e51-4ae3-4d35-97c3-1a29b211df97 --- libpcsxcore/cdrom.c | 35 +++++++++++++++++++++++++---------- libpcsxcore/gpu.c | 4 ++-- libpcsxcore/psxdma.c | 4 ++-- 3 files changed, 29 insertions(+), 14 deletions(-) (limited to 'libpcsxcore') diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index 63acae32..1b7e4d66 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -481,7 +481,7 @@ static void ReadTrack( u8 *time ) { } -void CDXA_Attenuation( s16 *buf, int size ) +void CDXA_Attenuation( s16 *buf, int size, int stereo ) { s16 *spsound; s32 lc,rc; @@ -496,17 +496,13 @@ void CDXA_Attenuation( s16 *buf, int size ) s16 temp[32768]; int dst; - // TODO: do later - return; - dst = 0; - for( i = 0; i < size / 2; i++, dst+=2 ) { + for( i = 0; i < size; i++, dst+=2 ) { temp[dst+0] = spsound[i]; temp[dst+1] = spsound[i]; } - size <<= 1; - memcpy( spsound, temp, size*2 ); + memcpy( spsound, temp, (size*2)*2 ); } #endif @@ -892,7 +888,7 @@ void cdrPlayInterrupt() if( CDR_readCDDA ) { CDR_readCDDA( cdr.SetSectorPlay[0], cdr.SetSectorPlay[1], cdr.SetSectorPlay[2], cdr.Transfer ); - CDXA_Attenuation( (short *) cdr.Transfer, 2352 ); + CDXA_Attenuation( (short *) cdr.Transfer, 2352, 1 ); } @@ -1598,14 +1594,28 @@ void cdrReadInterrupt() { int ret = xa_decode_sector(&cdr.Xa, cdr.Transfer+4, cdr.FirstSector); if (!ret) { + int xa_type; + #if 0 + // save - set only for FirstSector + xa_type = cdr.Xa.stereo; + + // Duke Nukem - Time to Kill - speech, music volume control // Tekken 3 - post-match fade out CDXA_Attenuation( cdr.Xa.pcm, cdr.Xa.nsamples, cdr.Xa.stereo ); + + // fix mono xa attenuation + if( cdr.Xa.stereo == 0 ) cdr.Xa.stereo = 1; #endif SPU_playADPCMchannel(&cdr.Xa); cdr.FirstSector = 0; + + +#if 0 + cdr.Xa.stereo = xa_type; +#endif // Crash Team Racing: music, speech @@ -2336,8 +2346,13 @@ void psxDma3(u32 madr, u32 bcr, u32 chcr) { // burst vs normal - if( chcr == 0x11400100 ) { - CDRDMA_INT( (cdsize/4) / 4 ); + if( chcr == 0x11400100 ) { +#if 1 + CDRDMA_INT( (cdsize/4) / 4 ); +#else + // Experimental burst dma transfer (0.333x max) + CDRDMA_INT( (cdsize/4) / 3 ); +#endif } else if( chcr == 0x11000000 ) { CDRDMA_INT( (cdsize/4) * 1 ); diff --git a/libpcsxcore/gpu.c b/libpcsxcore/gpu.c index ff3426f3..63a18cf8 100644 --- a/libpcsxcore/gpu.c +++ b/libpcsxcore/gpu.c @@ -126,7 +126,7 @@ void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU // already 32-bit word size ((size * 4) / 4) GPUDMA_INT(size); #else - // Possible DMA burst + overhead + // Experimental burst dma transfer (0.333x max) GPUDMA_INT(size/3); #endif return; @@ -150,7 +150,7 @@ void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU // already 32-bit word size ((size * 4) / 4) GPUDMA_INT(size); #else - // Possible DMA burst + overhead + // Experimental burst dma transfer // - X-Files = 0.333333x max for videos GPUDMA_INT( size / 3 ); #endif diff --git a/libpcsxcore/psxdma.c b/libpcsxcore/psxdma.c index e03750d9..88eb7fa8 100644 --- a/libpcsxcore/psxdma.c +++ b/libpcsxcore/psxdma.c @@ -71,7 +71,7 @@ void psxDma4(u32 madr, u32 bcr, u32 chcr) { // SPU #if 1 SPUDMA_INT((bcr >> 16) * (bcr & 0xffff) / 2); #else - // Experimental DMA timing + // Experimental burst dma transfer (0.333x max) SPUDMA_INT((bcr >> 16) * (bcr & 0xffff) / 3); #endif return; @@ -118,7 +118,7 @@ void psxDma6(u32 madr, u32 bcr, u32 chcr) { #if 1 GPUOTCDMA_INT( size ); #else - // Experimental DMA timing + // Experimental burst dma transfer (0.333x max) GPUOTCDMA_INT( size/3 ); #endif return; -- cgit v1.2.3