Immediately process ARAM DMA transfers if they are 1 block in length. Fixes the teleportation in Beyond Good and Evil.
Fixes issue 6289.
This commit is contained in:
1 parent
c80309ee1a
commit
18b0556e0d
1 file changed
+20
-5
@@ -687,12 +687,27 @@ void UpdateAudioDMA()
|
|||||||
|
|
||||||
void Do_ARAM_DMA()
|
void Do_ARAM_DMA()
|
||||||
{
|
{
|
||||||
g_dspState.DSPControl.DMAState = 1;
|
if (g_arDMA.Cnt.count == 32)
|
||||||
CoreTiming::ScheduleEvent_Threadsafe(0, et_GenerateDSPInterrupt, INT_ARAM | (1<<16));
|
{
|
||||||
|
// Beyond Good and Evil (GGEE41) sends count 32
|
||||||
|
GenerateDSPInterrupt(INT_ARAM);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_dspState.DSPControl.DMAState = 1;
|
||||||
|
CoreTiming::ScheduleEvent_Threadsafe(0, et_GenerateDSPInterrupt, INT_ARAM | (1<<16));
|
||||||
|
|
||||||
// Force an early exception check on large transfers. Fixes RE2 audio.
|
// Force an early exception check on large transfers. Fixes RE2 audio.
|
||||||
if (g_arDMA.Cnt.count > 2048 && g_arDMA.Cnt.count <= 6144)
|
// NFS:HP2 (<= 6144)
|
||||||
CoreTiming::ForceExceptionCheck(100);
|
// Viewtiful Joe (<= 6144)
|
||||||
|
// Sonic Mega Collection (> 2048)
|
||||||
|
// Paper Mario battles (> 32)
|
||||||
|
// Mario Super Baseball (> 32)
|
||||||
|
// Knockout Kings 2003 loading (> 32)
|
||||||
|
// WWE DOR (> 32)
|
||||||
|
if (g_arDMA.Cnt.count > 2048 && g_arDMA.Cnt.count <= 6144)
|
||||||
|
CoreTiming::ForceExceptionCheck(100);
|
||||||
|
}
|
||||||
|
|
||||||
// Real hardware DMAs in 32byte chunks, but we can get by with 8byte chunks
|
// Real hardware DMAs in 32byte chunks, but we can get by with 8byte chunks
|
||||||
if (g_arDMA.Cnt.dir)
|
if (g_arDMA.Cnt.dir)
|
||||||
|
|||||||
Reference in new issue
Block a user