Merge pull request #370 from LegendOfDragoon/master

Fix losing audio while loading a save state
This commit is contained in:
zilmar 2015-04-13 10:00:31 +10:00
commit a43b33d985
3 changed files with 14 additions and 2 deletions

View File

@ -1571,7 +1571,7 @@ bool CN64System::LoadState(void)
bool CN64System::LoadState(LPCSTR FileName)
{
DWORD dwRead, Value,SaveRDRAMSize, NextVITimer = 0;
bool LoadedZipFile = false;
bool LoadedZipFile = false, AudioResetOnLoad;
WriteTraceF((TraceType)(TraceDebug | TraceRecompiler),__FUNCTION__ "(%s): Start",FileName);
@ -1725,7 +1725,15 @@ bool CN64System::LoadState(LPCSTR FileName)
ReadFile( hSaveFile,m_MMU_VM.Imem(),0x1000,&dwRead,NULL);
CloseHandle(hSaveFile);
}
//Fix losing audio in certain games with certain plugins
AudioResetOnLoad = g_Settings->LoadBool(Game_AudioResetOnLoad);
if (AudioResetOnLoad)
{
m_Reg.m_AudioIntrReg |= MI_INTR_AI;
m_Reg.AI_STATUS_REG &= ~AI_STATUS_FIFO_FULL;
}
//Fix Random Register
while ((int)m_Reg.RANDOM_REGISTER < (int)m_Reg.WIRED_REGISTER)
{

View File

@ -95,6 +95,7 @@ enum SettingID {
Rdb_GameCheatFixPlugin,
Rdb_ViRefreshRate,
Rdb_AiCountPerBytes,
Rdb_AudioResetOnLoad,
//Individual Game Settings
Game_IniKey,
@ -139,6 +140,7 @@ enum SettingID {
Game_LoadRomToMemory,
Game_ViRefreshRate,
Game_AiCountPerBytes,
Game_AudioResetOnLoad,
// General Game running info
GameRunning_LoadingInProgress,

View File

@ -167,6 +167,7 @@ void CSettings::AddHowToHandleSetting ()
AddHandler(Rdb_GameCheatFixPlugin, new CSettingTypeRomDatabaseIndex("CheatPlugin","",""));
AddHandler(Rdb_ViRefreshRate, new CSettingTypeRomDatabase("ViRefresh",1500));
AddHandler(Rdb_AiCountPerBytes, new CSettingTypeRomDatabase("AiCountPerBytes",400));
AddHandler(Rdb_AudioResetOnLoad, new CSettingTypeRDBYesNo("AudioResetOnLoad", false));
AddHandler(Game_IniKey, new CSettingTypeTempString(""));
AddHandler(Game_GameName, new CSettingTypeTempString(""));
@ -210,6 +211,7 @@ void CSettings::AddHowToHandleSetting ()
AddHandler(Game_SMM_ValidFunc, new CSettingTypeGame("SMM-FUNC",Rdb_SMM_ValidFunc));
AddHandler(Game_ViRefreshRate, new CSettingTypeGame("ViRefresh",Rdb_ViRefreshRate));
AddHandler(Game_AiCountPerBytes, new CSettingTypeGame("AiCountPerBytes",Rdb_AiCountPerBytes));
AddHandler(Game_AudioResetOnLoad, new CSettingTypeGame("AudioResetOnLoad", Rdb_AudioResetOnLoad));
//User Interface
AddHandler(UserInterface_BasicMode, new CSettingTypeApplication("","Basic Mode", (DWORD)true));