RSP: Start to have a RSP Settings class
This commit is contained in:
parent
96080bfdd2
commit
5eac210197
|
@ -89,11 +89,6 @@ void DetectCpuSpecs(void)
|
|||
void RspPluginLoaded(void)
|
||||
{
|
||||
BreakOnStart = false;
|
||||
#if defined(_M_IX86) && defined(_MSC_VER)
|
||||
g_CPUCore = RecompilerCPU;
|
||||
#else
|
||||
g_CPUCore = InterpreterCPU;
|
||||
#endif
|
||||
LogRDP = false;
|
||||
LogX86Code = false;
|
||||
Profiling = false;
|
||||
|
@ -111,8 +106,7 @@ void RspPluginLoaded(void)
|
|||
Compiler.bGPRConstants = true;
|
||||
DetectCpuSpecs();
|
||||
|
||||
InitializeRspSetting();
|
||||
SetCPU(g_CPUCore);
|
||||
CRSPSettings::InitializeRspSetting();
|
||||
}
|
||||
|
||||
void InitilizeRSP(RSP_INFO & Rsp_Info)
|
||||
|
@ -138,7 +132,9 @@ void InitilizeRSP(RSP_INFO & Rsp_Info)
|
|||
|
||||
void RspRomOpened(void)
|
||||
{
|
||||
CRSPSettings::SetRomOpen(true);
|
||||
ClearAllx86Code();
|
||||
|
||||
JumpTableSize = GetSetting(Set_JumpTableSize);
|
||||
Mfc0Count = GetSetting(Set_Mfc0Count);
|
||||
SemaphoreExit = GetSetting(Set_SemaphoreExit);
|
||||
|
@ -151,6 +147,7 @@ void RspRomOpened(void)
|
|||
|
||||
void RspRomClosed(void)
|
||||
{
|
||||
CRSPSettings::SetRomOpen(false);
|
||||
if (Profiling)
|
||||
{
|
||||
StopTimer();
|
||||
|
|
|
@ -4,11 +4,26 @@
|
|||
#include <Project64-rsp-core/cpu/RSPCpu.h>
|
||||
#include <Settings/Settings.h>
|
||||
|
||||
bool CRSPSettings::m_DebuggingEnabled = false;
|
||||
bool CRSPSettings::m_RomOpen = false;
|
||||
|
||||
#if defined(_M_IX86) && defined(_MSC_VER)
|
||||
RSPCpuMethod CRSPSettings::m_CPUMethod = RSPCpuMethod::Recompiler;
|
||||
#else
|
||||
RSPCpuMethod CRSPSettings::m_CPUMethod = RSPCpuMethod::Interpreter;
|
||||
#endif
|
||||
|
||||
uint16_t Set_AudioHle = 0, Set_GraphicsHle = 0, Set_MultiThreaded = 0, Set_AllocatedRdramSize = 0, Set_DirectoryLog = 0;
|
||||
bool GraphicsHle = true, AudioHle, ConditionalMove, HleAlistTask = false, RspMultiThreaded = false;
|
||||
bool DebuggingEnabled = false, Profiling, IndvidualBlock, ShowErrors, BreakOnStart = false, LogRDP = false, LogX86Code = false;
|
||||
|
||||
void InitializeRspSetting(void)
|
||||
void CRSPSettings::EnableDebugging(bool Enabled)
|
||||
{
|
||||
m_DebuggingEnabled = Enabled;
|
||||
RefreshSettings();
|
||||
}
|
||||
|
||||
void CRSPSettings::InitializeRspSetting(void)
|
||||
{
|
||||
SetModuleName("RSP");
|
||||
Set_GraphicsHle = FindSystemSettingId("HLE GFX");
|
||||
|
@ -18,7 +33,7 @@ void InitializeRspSetting(void)
|
|||
Set_DirectoryLog = FindSystemSettingId("Dir:Log");
|
||||
|
||||
RegisterSetting(Set_BreakOnStart, Data_DWORD_General, "Break on Start", NULL, BreakOnStart, NULL);
|
||||
RegisterSetting(Set_CPUCore, Data_DWORD_General, "CPU Method", NULL, g_CPUCore, NULL);
|
||||
RegisterSetting(Set_CPUCore, Data_DWORD_General, "CPU Method", NULL, (int)m_CPUMethod, NULL);
|
||||
RegisterSetting(Set_LogRDP, Data_DWORD_General, "Log RDP", NULL, LogRDP, NULL);
|
||||
RegisterSetting(Set_LogX86Code, Data_DWORD_General, "Log X86 Code", NULL, LogX86Code, NULL);
|
||||
RegisterSetting(Set_Profiling, Data_DWORD_General, "Profiling", NULL, Profiling, NULL);
|
||||
|
@ -45,4 +60,29 @@ void InitializeRspSetting(void)
|
|||
AudioHle = Set_AudioHle != 0 ? GetSystemSetting(Set_AudioHle) != 0 : false;
|
||||
GraphicsHle = Set_GraphicsHle != 0 ? GetSystemSetting(Set_GraphicsHle) != 0 : true;
|
||||
RspMultiThreaded = Set_MultiThreaded != 0 ? GetSystemSetting(Set_MultiThreaded) != 0 : false;
|
||||
|
||||
RefreshSettings();
|
||||
}
|
||||
|
||||
CRSPSettings::CRSPSettings()
|
||||
{
|
||||
}
|
||||
|
||||
CRSPSettings::~CRSPSettings()
|
||||
{
|
||||
}
|
||||
|
||||
void CRSPSettings::RefreshSettings(void)
|
||||
{
|
||||
#if defined(_M_IX86) && defined(_MSC_VER)
|
||||
m_CPUMethod = m_DebuggingEnabled ? (RSPCpuMethod)GetSetting(Set_CPUCore) : RSPCpuMethod::Recompiler;
|
||||
#else
|
||||
m_CPUMethod = m_DebuggingEnabled ? (RSPCpuMethod)GetSetting(Set_CPUCore) : RSPCpuMethod::Interpreter;
|
||||
#endif
|
||||
}
|
||||
|
||||
void CRSPSettings::SetRomOpen(bool Opened)
|
||||
{
|
||||
m_RomOpen = Opened;
|
||||
RefreshSettings();
|
||||
}
|
||||
|
|
|
@ -1,8 +1,42 @@
|
|||
#pragma once
|
||||
#include <stdint.h>
|
||||
|
||||
void InitializeRspSetting(void);
|
||||
|
||||
extern uint16_t Set_AudioHle, Set_GraphicsHle, Set_AllocatedRdramSize, Set_DirectoryLog;
|
||||
extern bool GraphicsHle, AudioHle, ConditionalMove, HleAlistTask, RspMultiThreaded;
|
||||
extern bool DebuggingEnabled, Profiling, IndvidualBlock, ShowErrors, BreakOnStart, LogRDP, LogX86Code;
|
||||
extern bool DebuggingEnabled, Profiling, IndvidualBlock, ShowErrors, BreakOnStart, LogRDP, LogX86Code;
|
||||
|
||||
enum class RSPCpuMethod
|
||||
{
|
||||
Interpreter = 0,
|
||||
Recompiler = 1,
|
||||
};
|
||||
|
||||
class CRSPSettings
|
||||
{
|
||||
public:
|
||||
CRSPSettings();
|
||||
virtual ~CRSPSettings();
|
||||
|
||||
inline static RSPCpuMethod CPUMethod(void)
|
||||
{
|
||||
return m_CPUMethod;
|
||||
}
|
||||
inline static bool RomOpen(void)
|
||||
{
|
||||
return m_RomOpen;
|
||||
}
|
||||
|
||||
static void EnableDebugging(bool Enabled);
|
||||
static void InitializeRspSetting(void);
|
||||
static void RefreshSettings(void);
|
||||
|
||||
static void SetRomOpen(bool Opened);
|
||||
|
||||
private:
|
||||
CRSPSettings(const CRSPSettings &);
|
||||
CRSPSettings & operator=(const CRSPSettings &);
|
||||
|
||||
static bool m_DebuggingEnabled;
|
||||
static bool m_RomOpen;
|
||||
static RSPCpuMethod m_CPUMethod;
|
||||
};
|
||||
|
|
|
@ -16,13 +16,6 @@ uint32_t RSP_Running;
|
|||
|
||||
CriticalSection g_CPUCriticalSection;
|
||||
uint32_t Mfc0Count, SemaphoreExit = 0;
|
||||
RSPCpuType g_CPUCore = InterpreterCPU;
|
||||
|
||||
void SetCPU(RSPCpuType core)
|
||||
{
|
||||
CGuard Guard(g_CPUCriticalSection);
|
||||
g_CPUCore = core;
|
||||
}
|
||||
|
||||
void Build_RSP(void)
|
||||
{
|
||||
|
@ -33,7 +26,6 @@ void Build_RSP(void)
|
|||
SQroot.UW = 0;
|
||||
SQrootResult.UW = 0;
|
||||
|
||||
SetCPU(g_CPUCore);
|
||||
if (g_RSPDebugger != nullptr)
|
||||
{
|
||||
g_RSPDebugger->ResetTimerList();
|
||||
|
@ -165,12 +157,12 @@ uint32_t DoRspCycles(uint32_t Cycles)
|
|||
}
|
||||
CGuard Guard(g_CPUCriticalSection);
|
||||
|
||||
switch (g_CPUCore)
|
||||
switch (CRSPSettings::CPUMethod())
|
||||
{
|
||||
case RecompilerCPU:
|
||||
case RSPCpuMethod::Recompiler:
|
||||
RSPSystem.RunRecompiler();
|
||||
break;
|
||||
case InterpreterCPU:
|
||||
case RSPCpuMethod::Interpreter:
|
||||
RSPSystem.RunInterpreterCPU(Cycles);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -5,18 +5,10 @@
|
|||
#include "RspTypes.h"
|
||||
#include <memory>
|
||||
|
||||
enum RSPCpuType
|
||||
{
|
||||
InterpreterCPU = 0,
|
||||
RecompilerCPU = 1,
|
||||
};
|
||||
|
||||
extern UDWORD EleSpec[16], Indx[16];
|
||||
|
||||
extern uint32_t RSP_Running;
|
||||
|
||||
void SetCPU(RSPCpuType core);
|
||||
void Build_RSP(void);
|
||||
|
||||
extern uint32_t Mfc0Count, SemaphoreExit;
|
||||
extern RSPCpuType g_CPUCore;
|
||||
|
|
|
@ -849,7 +849,7 @@ void RSPOp::Cop0_MF(void)
|
|||
|
||||
void RSPOp::Cop0_MT(void)
|
||||
{
|
||||
if (LogRDP && g_CPUCore == InterpreterCPU)
|
||||
if (LogRDP && CPUMethod() == RSPCpuMethod::Interpreter)
|
||||
{
|
||||
RDPLog.LogMT0(*m_SP_PC_REG, m_OpCode.rd, m_GPR[m_OpCode.rt].UW);
|
||||
}
|
||||
|
|
|
@ -7,7 +7,8 @@ class CRSPSystem;
|
|||
class CRSPRegisters;
|
||||
class RSPRegisterHandlerPlugin;
|
||||
|
||||
class RSPOp
|
||||
class RSPOp :
|
||||
private CRSPSettings
|
||||
{
|
||||
friend class CRSPSystem;
|
||||
friend class CRSPRecompilerOps;
|
||||
|
|
|
@ -41,7 +41,7 @@ void RSPRegisterHandlerPlugin::SetHalt(void)
|
|||
|
||||
void RSPRegisterHandlerPlugin::DmaReadDone(uint32_t End)
|
||||
{
|
||||
if (g_CPUCore == RecompilerCPU && (*RSPInfo.SP_MEM_ADDR_REG & 0x1000) != 0 && g_CPUCore == RecompilerCPU)
|
||||
if (CPUMethod() == RSPCpuMethod::Recompiler && (*RSPInfo.SP_MEM_ADDR_REG & 0x1000) != 0)
|
||||
{
|
||||
m_System.m_Recompiler.SetJumpTable(End);
|
||||
}
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
#pragma once
|
||||
#include "RSPRegisterHandler.h"
|
||||
#include <Project64-rsp-core/Settings/RspSettings.h>
|
||||
|
||||
class CRSPSystem;
|
||||
|
||||
class RSPRegisterHandlerPlugin :
|
||||
public RSPRegisterHandler
|
||||
public RSPRegisterHandler,
|
||||
private CRSPSettings
|
||||
{
|
||||
public:
|
||||
RSPRegisterHandlerPlugin(CRSPSystem & System);
|
||||
|
|
|
@ -119,7 +119,7 @@ void RSPDebuggerUI::UnknownOpcode(void)
|
|||
|
||||
void RSPDebuggerUI::RDP_LogMF0(uint32_t PC, uint32_t Reg)
|
||||
{
|
||||
if (LogRDP && g_CPUCore == InterpreterCPU)
|
||||
if (LogRDP && CRSPSettings::CPUMethod() == RSPCpuMethod::Interpreter)
|
||||
{
|
||||
RDPLog.LogMF0(PC, Reg);
|
||||
}
|
||||
|
|
|
@ -173,9 +173,11 @@ void FixMenuState(void)
|
|||
EnableMenuItem(hRSPMenu, ID_PROFILING_GENERATELOG, MF_BYCOMMAND | (DebuggingEnabled ? MF_ENABLED : (MF_GRAYED | MF_DISABLED)));
|
||||
EnableMenuItem(hRSPMenu, ID_DUMP_RSPCODE, MF_BYCOMMAND | (DebuggingEnabled ? MF_ENABLED : (MF_GRAYED | MF_DISABLED)));
|
||||
EnableMenuItem(hRSPMenu, ID_DUMP_DMEM, MF_BYCOMMAND | (DebuggingEnabled ? MF_ENABLED : (MF_GRAYED | MF_DISABLED)));
|
||||
EnableMenuItem(hRSPMenu, ID_CPUMETHOD_RECOMPILER, MF_BYCOMMAND | (!CRSPSettings::RomOpen() ? MF_ENABLED : (MF_GRAYED | MF_DISABLED)));
|
||||
EnableMenuItem(hRSPMenu, ID_CPUMETHOD_INTERPT, MF_BYCOMMAND | (!CRSPSettings::RomOpen() ? MF_ENABLED : (MF_GRAYED | MF_DISABLED)));
|
||||
|
||||
CheckMenuItem(hRSPMenu, ID_CPUMETHOD_RECOMPILER, MF_BYCOMMAND | (g_CPUCore == RecompilerCPU ? MFS_CHECKED : MF_UNCHECKED));
|
||||
CheckMenuItem(hRSPMenu, ID_CPUMETHOD_INTERPT, MF_BYCOMMAND | (g_CPUCore == InterpreterCPU ? MFS_CHECKED : MF_UNCHECKED));
|
||||
CheckMenuItem(hRSPMenu, ID_CPUMETHOD_RECOMPILER, MF_BYCOMMAND | ((RSPCpuMethod)GetSetting(Set_CPUCore) == RSPCpuMethod::Recompiler ? MFS_CHECKED : MF_UNCHECKED));
|
||||
CheckMenuItem(hRSPMenu, ID_CPUMETHOD_INTERPT, MF_BYCOMMAND | ((RSPCpuMethod)GetSetting(Set_CPUCore) == RSPCpuMethod::Interpreter ? MFS_CHECKED : MF_UNCHECKED));
|
||||
CheckMenuItem(hRSPMenu, ID_BREAKONSTARTOFTASK, MF_BYCOMMAND | (BreakOnStart ? MFS_CHECKED : MF_UNCHECKED));
|
||||
CheckMenuItem(hRSPMenu, ID_LOGRDPCOMMANDS, MF_BYCOMMAND | (LogRDP ? MFS_CHECKED : MF_UNCHECKED));
|
||||
CheckMenuItem(hRSPMenu, ID_SETTINGS_HLEALISTTASK, MF_BYCOMMAND | (HleAlistTask ? MFS_CHECKED : MF_UNCHECKED));
|
||||
|
@ -226,6 +228,7 @@ EXPORT void GetRspDebugInfo(RSPDEBUG_INFO * _DebugInfo)
|
|||
if (hRSPMenu == NULL)
|
||||
{
|
||||
hRSPMenu = LoadMenu((HINSTANCE)hinstDLL, MAKEINTRESOURCE(RspMenu));
|
||||
CRSPSettings::InitializeRspSetting();
|
||||
FixMenuState();
|
||||
}
|
||||
_DebugInfo->hRSPMenu = hRSPMenu;
|
||||
|
@ -398,16 +401,12 @@ void ProcessMenuItem(int32_t ID)
|
|||
break;
|
||||
}
|
||||
case ID_CPUMETHOD_RECOMPILER:
|
||||
SetSetting(Set_CPUCore, RecompilerCPU);
|
||||
g_CPUCore = RecompilerCPU;
|
||||
SetSetting(Set_CPUCore, (int)RSPCpuMethod::Recompiler);
|
||||
FixMenuState();
|
||||
SetCPU(RecompilerCPU);
|
||||
break;
|
||||
case ID_CPUMETHOD_INTERPT:
|
||||
SetSetting(Set_CPUCore, InterpreterCPU);
|
||||
g_CPUCore = InterpreterCPU;
|
||||
SetSetting(Set_CPUCore, (int)RSPCpuMethod::Interpreter);
|
||||
FixMenuState();
|
||||
SetCPU(InterpreterCPU);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -439,6 +438,7 @@ Output: None
|
|||
EXPORT void RomClosed(void)
|
||||
{
|
||||
RspRomClosed();
|
||||
FixMenuState();
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
|
@ -545,7 +545,7 @@ BOOL CALLBACK ConfigDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM /*lParam
|
|||
hWndItem = GetDlgItem(hDlg, IDC_COMPILER_SELECT);
|
||||
ComboBox_AddString(hWndItem, "Interpreter");
|
||||
ComboBox_AddString(hWndItem, "Recompiler");
|
||||
ComboBox_SetCurSel(hWndItem, g_CPUCore);
|
||||
//ComboBox_SetCurSel(hWndItem, g_CPUCore);
|
||||
break;
|
||||
case WM_COMMAND:
|
||||
switch (GET_WM_COMMAND_ID(wParam, lParam))
|
||||
|
@ -553,7 +553,6 @@ BOOL CALLBACK ConfigDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM /*lParam
|
|||
case IDOK:
|
||||
hWndItem = GetDlgItem(hDlg, IDC_COMPILER_SELECT);
|
||||
value = ComboBox_GetCurSel(hWndItem);
|
||||
SetCPU((RSPCpuType)value);
|
||||
|
||||
AudioHle = GetBooleanCheck(hDlg, IDC_AUDIOHLE);
|
||||
GraphicsHle = GetBooleanCheck(hDlg, IDC_GRAPHICSHLE);
|
||||
|
@ -580,11 +579,11 @@ BOOL CALLBACK ConfigDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM /*lParam
|
|||
|
||||
EXPORT void EnableDebugging(int Enabled)
|
||||
{
|
||||
CRSPSettings::EnableDebugging(Enabled != 0);
|
||||
DebuggingEnabled = Enabled != 0;
|
||||
if (DebuggingEnabled)
|
||||
{
|
||||
BreakOnStart = GetSetting(Set_BreakOnStart) != 0;
|
||||
g_CPUCore = (RSPCpuType)GetSetting(Set_CPUCore);
|
||||
LogRDP = GetSetting(Set_LogRDP) != 0;
|
||||
LogX86Code = GetSetting(Set_LogX86Code) != 0;
|
||||
Profiling = GetSetting(Set_Profiling) != 0;
|
||||
|
@ -602,7 +601,6 @@ EXPORT void EnableDebugging(int Enabled)
|
|||
Compiler.bGPRConstants = GetSetting(Set_GPRConstants) != 0;
|
||||
Compiler.bFlags = GetSetting(Set_Flags) != 0;
|
||||
Compiler.bAlignVector = GetSetting(Set_AlignVector) != 0;
|
||||
SetCPU(g_CPUCore);
|
||||
}
|
||||
#ifdef _WIN32
|
||||
FixMenuState();
|
||||
|
|
Loading…
Reference in New Issue