From bd1ec4ff0f891a8897e07e9278b69b36dd0f0e32 Mon Sep 17 00:00:00 2001 From: zilmar Date: Thu, 28 Sep 2023 07:29:11 +0930 Subject: [PATCH] Core: Create a setting for RDRAM Size that plugins can read --- Source/Android/Bridge/jniBridgeSettings.cpp | 2 ++ .../N64System/Mips/MemoryVirtualMem.cpp | 1 + Source/Project64-core/Settings.cpp | 14 ++++++++++++++ .../SettingType/SettingsType-TempNumber.cpp | 13 +++++++------ .../Settings/SettingType/SettingsType-TempNumber.h | 11 ++++++++--- Source/Project64-core/Settings/SettingsID.h | 1 + Source/Project64-rsp-core/RSPInfo.cpp | 1 + Source/Project64-rsp-core/RSPInfo.h | 1 + Source/Project64-rsp-core/Settings/RspSettings.cpp | 3 ++- Source/Project64-rsp-core/Settings/RspSettings.h | 2 +- Source/Project64-rsp/Main.cpp | 6 ++++++ 11 files changed, 44 insertions(+), 11 deletions(-) diff --git a/Source/Android/Bridge/jniBridgeSettings.cpp b/Source/Android/Bridge/jniBridgeSettings.cpp index 6c6b7ba2d..dc2382efc 100644 --- a/Source/Android/Bridge/jniBridgeSettings.cpp +++ b/Source/Android/Bridge/jniBridgeSettings.cpp @@ -70,6 +70,8 @@ CJniBridegSettings::CJniBridegSettings() ADD_SETTING(Setting_SyncViaAudioEnabled); ADD_SETTING(Setting_Enhancement); ADD_SETTING(Setting_DiskSaveType); + ADD_SETTING(Setting_UpdateControllerOnRefresh); + ADD_SETTING(Setting_AllocatedRdramSize); // Default settings ADD_SETTING(Default_RDRamSizeUnknown); diff --git a/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp b/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp index 9f5651430..9e0b23325 100755 --- a/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp +++ b/Source/Project64-core/N64System/Mips/MemoryVirtualMem.cpp @@ -172,6 +172,7 @@ bool CMipsMemoryVM::Initialize(bool SyncSystem) FreeMemory(); return false; } + g_Settings->SaveDword(Setting_AllocatedRdramSize, m_AllocatedRdramSize); m_MemoryReadMap = new size_t[0x100000]; if (m_MemoryReadMap == nullptr) diff --git a/Source/Project64-core/Settings.cpp b/Source/Project64-core/Settings.cpp index 6bd54ca11..109d07441 100644 --- a/Source/Project64-core/Settings.cpp +++ b/Source/Project64-core/Settings.cpp @@ -128,6 +128,7 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory) AddHandler(Setting_SyncViaAudioEnabled, new CSettingTypeTempBool(false, "SyncViaAudioEnabled")); AddHandler(Setting_DiskSaveType, new CSettingTypeApplication("Settings", "Disk Save Type", (uint32_t)1)); AddHandler(Setting_UpdateControllerOnRefresh, new CSettingTypeTempBool(false)); + AddHandler(Setting_AllocatedRdramSize, new CSettingTypeTempNumber(0, "AllocatedRdramSize")); AddHandler(Default_RDRamSizeUnknown, new CSettingTypeApplication("Defaults", "Unknown RDRAM Size", 0x800000u)); AddHandler(Default_RDRamSizeKnown, new CSettingTypeApplication("Defaults", "Known RDRAM Size", 0x400000u)); @@ -497,6 +498,19 @@ uint32_t CSettings::FindSetting(CSettings * _this, const char * Name) } setting_id = iter->first; } + else if (Setting->GetSettingType() == SettingType_NumberVariable) + { + CSettingTypeTempNumber * NumberSetting = (CSettingTypeTempNumber *)Setting; + if (_stricmp(NumberSetting->GetName(), Name) != 0) + { + continue; + } + if (setting_id != 0) + { + g_Notify->BreakPoint(__FILE__, __LINE__); + } + setting_id = iter->first; + } } return setting_id; } diff --git a/Source/Project64-core/Settings/SettingType/SettingsType-TempNumber.cpp b/Source/Project64-core/Settings/SettingType/SettingsType-TempNumber.cpp index 969759190..c360d339c 100644 --- a/Source/Project64-core/Settings/SettingType/SettingsType-TempNumber.cpp +++ b/Source/Project64-core/Settings/SettingType/SettingsType-TempNumber.cpp @@ -2,9 +2,10 @@ #include "SettingsType-TempNumber.h" -CSettingTypeTempNumber::CSettingTypeTempNumber(uint32_t initialValue) : - m_value(initialValue), - m_initialValue(initialValue) +CSettingTypeTempNumber::CSettingTypeTempNumber(uint32_t initialValue, const char * Name) : + m_Value(initialValue), + m_InitialValue(initialValue), + m_Name(Name ? Name : "") { } @@ -20,7 +21,7 @@ bool CSettingTypeTempNumber::Load(uint32_t /*Index*/, bool & /*Value*/) const bool CSettingTypeTempNumber::Load(uint32_t /*Index*/, uint32_t & Value) const { - Value = m_value; + Value = m_Value; return false; } @@ -38,7 +39,7 @@ void CSettingTypeTempNumber::LoadDefault(uint32_t /*Index*/, bool & /*Value*/) c void CSettingTypeTempNumber::LoadDefault(uint32_t /*Index*/, uint32_t & Value) const { - Value = m_initialValue; + Value = m_InitialValue; } void CSettingTypeTempNumber::LoadDefault(uint32_t /*Index*/, std::string & /*Value*/) const @@ -53,7 +54,7 @@ void CSettingTypeTempNumber::Save(uint32_t /*Index*/, bool /*Value*/) void CSettingTypeTempNumber::Save(uint32_t /*Index*/, uint32_t Value) { - m_value = Value; + m_Value = Value; } void CSettingTypeTempNumber::Save(uint32_t /*Index*/, const std::string & /*Value*/) diff --git a/Source/Project64-core/Settings/SettingType/SettingsType-TempNumber.h b/Source/Project64-core/Settings/SettingType/SettingsType-TempNumber.h index 50386b2ad..69107a3a9 100644 --- a/Source/Project64-core/Settings/SettingType/SettingsType-TempNumber.h +++ b/Source/Project64-core/Settings/SettingType/SettingsType-TempNumber.h @@ -6,7 +6,7 @@ class CSettingTypeTempNumber : public CSettingType { public: - CSettingTypeTempNumber(uint32_t initialValue); + CSettingTypeTempNumber(uint32_t initialValue, const char * Name = nullptr); ~CSettingTypeTempNumber(); bool IndexBasedSetting(void) const @@ -21,6 +21,10 @@ public: { return false; } + const char * GetName(void) const + { + return m_Name.c_str(); + } // Return the values bool Load(uint32_t Index, bool & Value) const; @@ -46,6 +50,7 @@ private: CSettingTypeTempNumber(const CSettingTypeTempNumber &); CSettingTypeTempNumber & operator=(const CSettingTypeTempNumber &); - uint32_t m_value; - uint32_t m_initialValue; + uint32_t m_Value; + uint32_t m_InitialValue; + std::string m_Name; }; diff --git a/Source/Project64-core/Settings/SettingsID.h b/Source/Project64-core/Settings/SettingsID.h index daa602b2d..c58222e5b 100644 --- a/Source/Project64-core/Settings/SettingsID.h +++ b/Source/Project64-core/Settings/SettingsID.h @@ -62,6 +62,7 @@ enum SettingID Setting_Enhancement, Setting_DiskSaveType, Setting_UpdateControllerOnRefresh, + Setting_AllocatedRdramSize, // Default settings Default_RDRamSizeUnknown, diff --git a/Source/Project64-rsp-core/RSPInfo.cpp b/Source/Project64-rsp-core/RSPInfo.cpp index 0010b4470..39b593c54 100644 --- a/Source/Project64-rsp-core/RSPInfo.cpp +++ b/Source/Project64-rsp-core/RSPInfo.cpp @@ -7,6 +7,7 @@ #include RSP_INFO RSPInfo; +uint32_t RdramSize = 0; void InitilizeRSP(RSP_INFO & Rsp_Info) { diff --git a/Source/Project64-rsp-core/RSPInfo.h b/Source/Project64-rsp-core/RSPInfo.h index 4834b0d03..911a2625b 100644 --- a/Source/Project64-rsp-core/RSPInfo.h +++ b/Source/Project64-rsp-core/RSPInfo.h @@ -1,5 +1,6 @@ #include extern RSP_INFO RSPInfo; +extern uint32_t RdramSize; void InitilizeRSP(RSP_INFO & Rsp_Info); diff --git a/Source/Project64-rsp-core/Settings/RspSettings.cpp b/Source/Project64-rsp-core/Settings/RspSettings.cpp index bcc18d6e1..731c14ee2 100644 --- a/Source/Project64-rsp-core/Settings/RspSettings.cpp +++ b/Source/Project64-rsp-core/Settings/RspSettings.cpp @@ -4,7 +4,7 @@ #include #include -uint16_t Set_AudioHle = 0, Set_GraphicsHle = 0; +uint16_t Set_AudioHle = 0, Set_GraphicsHle = 0, Set_AllocatedRdramSize = 0; bool GraphicsHle = true, AudioHle, ConditionalMove; bool DebuggingEnabled = false, Profiling, IndvidualBlock, ShowErrors, BreakOnStart = false, LogRDP = false, LogX86Code = false; @@ -13,6 +13,7 @@ void InitializeRspSetting(void) SetModuleName("RSP"); Set_GraphicsHle = FindSystemSettingId("HLE GFX"); Set_AudioHle = FindSystemSettingId("HLE Audio"); + Set_AllocatedRdramSize = FindSystemSettingId("AllocatedRdramSize"); RegisterSetting(Set_BreakOnStart, Data_DWORD_General, "Break on Start", NULL, BreakOnStart, NULL); RegisterSetting(Set_CPUCore, Data_DWORD_General, "CPU Method", NULL, g_CPUCore, NULL); diff --git a/Source/Project64-rsp-core/Settings/RspSettings.h b/Source/Project64-rsp-core/Settings/RspSettings.h index 08bf3e669..e2bf1d834 100644 --- a/Source/Project64-rsp-core/Settings/RspSettings.h +++ b/Source/Project64-rsp-core/Settings/RspSettings.h @@ -3,6 +3,6 @@ void InitializeRspSetting(void); -extern uint16_t Set_AudioHle, Set_GraphicsHle; +extern uint16_t Set_AudioHle, Set_GraphicsHle, Set_AllocatedRdramSize; extern bool GraphicsHle, AudioHle, ConditionalMove; extern bool DebuggingEnabled, Profiling, IndvidualBlock, ShowErrors, BreakOnStart, LogRDP, LogX86Code; \ No newline at end of file diff --git a/Source/Project64-rsp/Main.cpp b/Source/Project64-rsp/Main.cpp index bef6be3a8..10e356cbb 100644 --- a/Source/Project64-rsp/Main.cpp +++ b/Source/Project64-rsp/Main.cpp @@ -485,6 +485,12 @@ EXPORT void RomOpen(void) JumpTableSize = GetSetting(Set_JumpTableSize); Mfc0Count = GetSetting(Set_Mfc0Count); SemaphoreExit = GetSetting(Set_SemaphoreExit); + + RdramSize = Set_AllocatedRdramSize != 0 ? GetSystemSetting(Set_AllocatedRdramSize) : 0; + if (RdramSize == 0) + { + RdramSize = 0x00400000; + } } /*