diff options
| -rw-r--r-- | libpcsxcore/cdrom.c | 35 | ||||
| -rw-r--r-- | libpcsxcore/gpu.c | 4 | ||||
| -rw-r--r-- | libpcsxcore/psxdma.c | 4 |
3 files changed, 29 insertions, 14 deletions
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;
|
