AICA: Make async dma an option, default on

This commit is contained in:
Stefanos Kornilios Mitsis Poiitidis 2018-10-03 01:39:24 +02:00
parent 10c7650690
commit 09f8a50bf2
3 changed files with 18 additions and 5 deletions

View File

@ -195,6 +195,7 @@ int dma_end_sched(int tag, int cycl, int jitt)
SB_ADST = 0x00000000;//dma done
SB_ADLEN = 0x00000000;
// indicate that dma is not happening, or has been paused
SB_ADSUSP |= 0x10;
asic_RaiseInterrupt(holly_SPU_DMA);
@ -238,14 +239,24 @@ void Write_SB_ADST(u32 addr, u32 data)
WriteMem32_nommu(dst+i,data);
}
*/
// idicate that dma is in progress
SB_ADSUSP &= ~0x10;
// Schedule the end of DMA transfer interrupt
int cycles = len * (SH4_MAIN_CLOCK / 2 / 25000000); // 16 bits @ 25 MHz
if (cycles < 4096)
dma_end_sched(0, 0, 0);
if (!settings.aica.OldSyncronousDma)
{
// Schedule the end of DMA transfer interrupt
int cycles = len * (SH4_MAIN_CLOCK / 2 / 25000000); // 16 bits @ 25 MHz
if (cycles < 4096)
dma_end_sched(0, 0, 0);
else
sh4_sched_request(dma_sched_id, cycles);
}
else
sh4_sched_request(dma_sched_id, cycles);
{
dma_end_sched(0, 0, 0);
}
}
}
}

View File

@ -297,6 +297,7 @@ void LoadSettings()
settings.aica.LimitFPS = cfgLoadInt("config", "aica.LimitFPS", 1);
settings.aica.NoBatch = cfgLoadInt("config", "aica.NoBatch", 0);
settings.aica.NoSound = cfgLoadInt("config", "aica.NoSound", 0);
settings.aica.OldSyncronousDma = cfgLoadBool("config", "aica.OldSyncronousDma", false);
settings.rend.UseMipmaps = cfgLoadInt("config", "rend.UseMipmaps", 1);
settings.rend.WideScreen = cfgLoadInt("config", "rend.WideScreen", 0);
settings.rend.Clipping = cfgLoadInt("config", "rend.Clipping", 1);

View File

@ -654,6 +654,7 @@ struct settings_t
u32 DSPEnabled; //0 -> no, 1 -> yes
u32 NoBatch;
u32 NoSound; //0 ->sound, 1 -> no sound
bool OldSyncronousDma; // 0 -> sync dma (old behavior), 1 -> async dma (fixes some games, partial implementation)
} aica;
#if USE_OMX