Experimental patches
1- gpu.c We don't emulate bus conflicts. Especially with DMA. Lower vram2mem, mem2vram times (1 -> 0.25) - fixes X-Files videos 2- cdrom.c Duke Nukem - Time to Kill uses CD attenuation values for XA music, speech - fix volume slider 3- cdrom.c Add cdrom dma wrapping - possible Ape Escape additional fixes (>2352 transfers in several places) All disabled - view diff and activate at your own risk (accuracy regressions) git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@62832 e17a0e51-4ae3-4d35-97c3-1a29b211df97
This commit is contained in:
parent
f1da161879
commit
b0cf7dd03d
|
@ -488,6 +488,27 @@ void CDXA_Attenuation( s16 *buf, int size )
|
|||
|
||||
spsound = buf;
|
||||
|
||||
#if 0
|
||||
// mono xa attenuation
|
||||
// - Tales of Phantasia (voice meter)
|
||||
if( stereo == 0 ) {
|
||||
s16 temp[32768];
|
||||
int dst;
|
||||
|
||||
// TODO: do later
|
||||
return;
|
||||
|
||||
dst = 0;
|
||||
for( i = 0; i < size / 2; i++, dst+=2 ) {
|
||||
temp[dst+0] = spsound[i];
|
||||
temp[dst+1] = spsound[i];
|
||||
}
|
||||
|
||||
size <<= 1;
|
||||
memcpy( spsound, temp, size*2 );
|
||||
}
|
||||
#endif
|
||||
|
||||
for( i = 0; i < size / 2; i += 2 )
|
||||
{
|
||||
lc = (spsound[i+0] * cdr.AttenuatorLeft[0] + spsound[i+1] * cdr.AttenuatorRight[1]) / 128;
|
||||
|
@ -1575,7 +1596,13 @@ void cdrReadInterrupt() {
|
|||
(cdr.Transfer[4 + 0] == cdr.File)) {
|
||||
int ret = xa_decode_sector(&cdr.Xa, cdr.Transfer+4, cdr.FirstSector);
|
||||
|
||||
if (!ret) {
|
||||
if (!ret) {
|
||||
#if 0
|
||||
// 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 );
|
||||
#endif
|
||||
|
||||
SPU_playADPCMchannel(&cdr.Xa);
|
||||
cdr.FirstSector = 0;
|
||||
|
||||
|
@ -2229,6 +2256,8 @@ void psxDma3(u32 madr, u32 bcr, u32 chcr) {
|
|||
break;
|
||||
}
|
||||
|
||||
|
||||
#if 1
|
||||
/*
|
||||
GS CDX: Enhancement CD crash
|
||||
- Setloc 0:0:0
|
||||
|
@ -2248,6 +2277,51 @@ void psxDma3(u32 madr, u32 bcr, u32 chcr) {
|
|||
|
||||
psxCpu->Clear(madr, cdsize / 4);
|
||||
cdr.pTransfer += cdsize;
|
||||
#else
|
||||
// fast copy - no wrap
|
||||
if( cdr.pTransfer + cdsize <= cdr.Transfer + 2352 ) {
|
||||
memcpy(ptr, cdr.pTransfer, cdsize);
|
||||
|
||||
psxCpu->Clear(madr, cdsize / 4);
|
||||
cdr.pTransfer += cdsize;
|
||||
} else {
|
||||
int lcv;
|
||||
|
||||
/*
|
||||
CDROM wrapping
|
||||
|
||||
Ape Escape - used several times
|
||||
Gameshark Lite - opening movie
|
||||
|
||||
Gameshark CDX: enhancement CD patcher
|
||||
- calls CdlPlay @ 0:2:0
|
||||
- spams DMA3 and overruns buffer
|
||||
*/
|
||||
|
||||
for( lcv = 0; lcv < cdsize; lcv++ )
|
||||
{
|
||||
*(ptr+lcv) = *cdr.pTransfer;
|
||||
|
||||
cdr.pTransfer++;
|
||||
if( cdr.pTransfer == cdr.Transfer + 2352 ) {
|
||||
// wrap cdrom ptr
|
||||
switch (cdr.Mode & (MODE_SIZE_2340|MODE_SIZE_2328)) {
|
||||
case MODE_SIZE_2328:
|
||||
case 0x00:
|
||||
cdr.pTransfer += 12;
|
||||
break;
|
||||
|
||||
case MODE_SIZE_2340:
|
||||
cdr.pTransfer += 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
psxCpu->Clear(madr, cdsize / 4);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
// burst vs normal
|
||||
|
|
|
@ -122,8 +122,13 @@ void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU
|
|||
GPU_readDataMem(ptr, size);
|
||||
psxCpu->Clear(madr, size);
|
||||
|
||||
#if 1
|
||||
// already 32-bit word size ((size * 4) / 4)
|
||||
GPUDMA_INT(size);
|
||||
#else
|
||||
// NOTE: no bus conflicts emulated - speed this up
|
||||
GPUDMA_INT(size/4);
|
||||
#endif
|
||||
return;
|
||||
|
||||
case 0x01000201: // mem2vram
|
||||
|
@ -141,8 +146,14 @@ void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU
|
|||
size = (bcr >> 16) * (bcr & 0xffff);
|
||||
GPU_writeDataMem(ptr, size);
|
||||
|
||||
#if 1
|
||||
// already 32-bit word size ((size * 4) / 4)
|
||||
GPUDMA_INT(size);
|
||||
#else
|
||||
// X-Files: use very fast time for movies
|
||||
// - we don't simulate bus conflicts
|
||||
GPUDMA_INT( size / 4 );
|
||||
#endif
|
||||
return;
|
||||
|
||||
case 0x01000401: // dma chain
|
||||
|
|
Loading…
Reference in New Issue