Merge pull request #12542 from AdmiralCurtiss/system-sconfig

Migrate m_is_mios and bWii from SConfig to System.
This commit is contained in:
Mai 2024-01-31 09:57:17 -05:00 committed by GitHub
commit 30fdf25f8f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
41 changed files with 125 additions and 144 deletions

View file

@ -760,7 +760,7 @@ JNIEXPORT jboolean JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_IsGameMe
JNIEXPORT jboolean JNICALL
Java_org_dolphinemu_dolphinemu_NativeLibrary_IsEmulatingWiiUnchecked(JNIEnv*, jclass)
{
return SConfig::GetInstance().bWii;
return Core::System::GetInstance().IsWii();
}
JNIEXPORT jstring JNICALL

View file

@ -522,7 +522,7 @@ bool CBoot::BootUp(Core::System& system, const Core::CPUThreadGuard& guard,
// PAL Wii uses NTSC framerate and linecount in 60Hz modes
system.GetVideoInterface().Preset(DiscIO::IsNTSC(config.m_region) ||
(config.bWii && Config::Get(Config::SYSCONF_PAL60)));
(system.IsWii() && Config::Get(Config::SYSCONF_PAL60)));
struct BootTitle
{
@ -541,7 +541,7 @@ bool CBoot::BootUp(Core::System& system, const Core::CPUThreadGuard& guard,
if (!volume)
return false;
if (!EmulatedBS2(system, guard, config.bWii, *volume, riivolution_patches))
if (!EmulatedBS2(system, guard, system.IsWii(), *volume, riivolution_patches))
return false;
SConfig::OnNewTitleLoad(guard);
@ -560,11 +560,11 @@ bool CBoot::BootUp(Core::System& system, const Core::CPUThreadGuard& guard,
auto& ppc_state = system.GetPPCState();
SetupMSR(ppc_state);
SetupHID(ppc_state, config.bWii);
SetupBAT(system, config.bWii);
SetupHID(ppc_state, system.IsWii());
SetupBAT(system, system.IsWii());
CopyDefaultExceptionHandlers(system);
if (config.bWii)
if (system.IsWii())
{
// Set a value for the SP. It doesn't matter where this points to,
// as long as it is a valid location. This value is taken from a homebrew binary.

View file

@ -60,19 +60,19 @@ bool BootCore(std::unique_ptr<BootParameters> boot, const WindowSystemInfo& wsi)
if (!boot)
return false;
auto& system = Core::System::GetInstance();
SConfig& StartUp = SConfig::GetInstance();
if (!StartUp.SetPathsAndGameMetadata(*boot))
if (!StartUp.SetPathsAndGameMetadata(system, *boot))
return false;
// Movie settings
auto& system = Core::System::GetInstance();
auto& movie = system.GetMovie();
if (movie.IsPlayingInput() && movie.IsConfigSaved())
{
for (ExpansionInterface::Slot slot : ExpansionInterface::MEMCARD_SLOTS)
{
if (movie.IsUsingMemcard(slot) && movie.IsStartingFromClearSave() && !StartUp.bWii)
if (movie.IsUsingMemcard(slot) && movie.IsStartingFromClearSave() && !system.IsWii())
{
const auto raw_path =
File::GetUserPath(D_GCUSER_IDX) +
@ -104,7 +104,7 @@ bool BootCore(std::unique_ptr<BootParameters> boot, const WindowSystemInfo& wsi)
Config::MAIN_GC_LANGUAGE,
DiscIO::ToGameCubeLanguage(StartUp.GetLanguageAdjustedForRegion(false, StartUp.m_region)));
if (StartUp.bWii)
if (system.IsWii())
{
const u32 wii_language =
static_cast<u32>(StartUp.GetLanguageAdjustedForRegion(true, StartUp.m_region));
@ -137,7 +137,7 @@ bool BootCore(std::unique_ptr<BootParameters> boot, const WindowSystemInfo& wsi)
// Some NTSC Wii games such as Doc Louis's Punch-Out!! and
// 1942 (Virtual Console) crash if the PAL60 option is enabled
if (StartUp.bWii && DiscIO::IsNTSC(StartUp.m_region) && Config::Get(Config::SYSCONF_PAL60))
if (system.IsWii() && DiscIO::IsNTSC(StartUp.m_region) && Config::Get(Config::SYSCONF_PAL60))
Config::SetCurrent(Config::SYSCONF_PAL60, false);
// Disable loading time emulation for Riivolution-patched games until we have proper emulation.
@ -148,7 +148,7 @@ bool BootCore(std::unique_ptr<BootParameters> boot, const WindowSystemInfo& wsi)
Core::UpdateWantDeterminism(/*initial*/ true);
if (StartUp.bWii)
if (system.IsWii())
{
Core::InitializeWiiRoot(Core::WantsDeterminism());
@ -170,7 +170,7 @@ bool BootCore(std::unique_ptr<BootParameters> boot, const WindowSystemInfo& wsi)
AchievementManager::GetInstance().SetDisabled(false);
#endif // USE_RETRO_ACHIEVEMENTS
const bool load_ipl = !StartUp.bWii && !Config::Get(Config::MAIN_SKIP_IPL) &&
const bool load_ipl = !system.IsWii() && !Config::Get(Config::MAIN_SKIP_IPL) &&
std::holds_alternative<BootParameters::Disc>(boot->parameters);
if (load_ipl)
{

View file

@ -181,7 +181,8 @@ void SConfig::SetRunningGameMetadata(const std::string& game_id, const std::stri
}
const Core::TitleDatabase title_database;
const DiscIO::Language language = GetLanguageAdjustedForRegion(bWii, region);
auto& system = Core::System::GetInstance();
const DiscIO::Language language = GetLanguageAdjustedForRegion(system.IsWii(), region);
m_title_name = title_database.GetTitleName(m_gametdb_id, language);
m_title_description = title_database.Describe(m_gametdb_id, language);
NOTICE_LOG_FMT(CORE, "Active title: {}", m_title_description);
@ -221,7 +222,8 @@ void SConfig::LoadDefaults()
bAutomaticStart = false;
bBootToPause = false;
bWii = false;
auto& system = Core::System::GetInstance();
system.SetIsWii(false);
ResetRunningGameMetadata();
}
@ -237,11 +239,14 @@ std::string SConfig::MakeGameID(std::string_view file_name)
struct SetGameMetadata
{
SetGameMetadata(SConfig* config_, DiscIO::Region* region_) : config(config_), region(region_) {}
SetGameMetadata(SConfig* config_, Core::System& system_, DiscIO::Region* region_)
: config(config_), system(system_), region(region_)
{
}
bool operator()(const BootParameters::Disc& disc) const
{
*region = disc.volume->GetRegion();
config->bWii = disc.volume->GetVolumeType() == DiscIO::Platform::WiiDisc;
system.SetIsWii(disc.volume->GetVolumeType() == DiscIO::Platform::WiiDisc);
config->m_disc_booted_from_game_list = true;
config->SetRunningGameMetadata(*disc.volume, disc.volume->GetGamePartition());
return true;
@ -253,7 +258,7 @@ struct SetGameMetadata
return false;
*region = DiscIO::Region::Unknown;
config->bWii = executable.reader->IsWii();
system.SetIsWii(executable.reader->IsWii());
// Strip the .elf/.dol file extension and directories before the name
SplitPath(executable.path, nullptr, &config->m_debugger_game_id, nullptr);
@ -285,7 +290,7 @@ struct SetGameMetadata
const IOS::ES::TMDReader& tmd = wad.GetTMD();
*region = tmd.GetRegion();
config->bWii = true;
system.SetIsWii(true);
config->SetRunningGameMetadata(tmd, DiscIO::Platform::WiiWAD);
return true;
@ -302,7 +307,7 @@ struct SetGameMetadata
}
*region = tmd.GetRegion();
config->bWii = true;
system.SetIsWii(false);
config->SetRunningGameMetadata(tmd, DiscIO::Platform::WiiWAD);
return true;
@ -311,7 +316,7 @@ struct SetGameMetadata
bool operator()(const BootParameters::IPL& ipl) const
{
*region = ipl.region;
config->bWii = false;
system.SetIsWii(false);
Host_TitleChanged();
return true;
@ -324,7 +329,7 @@ struct SetGameMetadata
return false;
*region = DiscIO::Region::NTSC_U;
config->bWii = dff_file->GetIsWii();
system.SetIsWii(dff_file->GetIsWii());
Host_TitleChanged();
return true;
@ -332,14 +337,15 @@ struct SetGameMetadata
private:
SConfig* config;
Core::System& system;
DiscIO::Region* region;
};
bool SConfig::SetPathsAndGameMetadata(const BootParameters& boot)
bool SConfig::SetPathsAndGameMetadata(Core::System& system, const BootParameters& boot)
{
m_is_mios = false;
system.SetIsMIOS(false);
m_disc_booted_from_game_list = false;
if (!std::visit(SetGameMetadata(this, &m_region), boot.parameters))
if (!std::visit(SetGameMetadata(this, system, &m_region), boot.parameters))
return false;
if (m_region == DiscIO::Region::Unknown)

View file

@ -22,7 +22,8 @@ class IniFile;
namespace Core
{
class CPUThreadGuard;
}
class System;
} // namespace Core
namespace DiscIO
{
@ -51,9 +52,6 @@ struct SConfig
bool bCopyWiiSaveNetplay = true;
bool bWii = false;
bool m_is_mios = false;
DiscIO::Region m_region;
// files
@ -80,7 +78,7 @@ struct SConfig
void LoadDefaults();
static std::string MakeGameID(std::string_view file_name);
bool SetPathsAndGameMetadata(const BootParameters& boot);
bool SetPathsAndGameMetadata(Core::System& system, const BootParameters& boot);
DiscIO::Language GetCurrentLanguage(bool wii) const;
DiscIO::Language GetLanguageAdjustedForRegion(bool wii, DiscIO::Region region) const;
std::string GetGameTDBImageRegionCode(bool wii, DiscIO::Region region) const;

View file

@ -254,7 +254,7 @@ bool Init(Core::System& system, std::unique_ptr<BootParameters> boot, const Wind
// Drain any left over jobs
HostDispatchJobs();
INFO_LOG_FMT(BOOT, "Starting core = {} mode", SConfig::GetInstance().bWii ? "Wii" : "GameCube");
INFO_LOG_FMT(BOOT, "Starting core = {} mode", system.IsWii() ? "Wii" : "GameCube");
INFO_LOG_FMT(BOOT, "CPU Thread separate = {}", system.IsDualCoreMode() ? "Yes" : "No");
Host_UpdateMainFrame(); // Disable any menus or buttons at boot
@ -483,7 +483,6 @@ static void FifoPlayerThread(Core::System& system, const std::optional<std::stri
static void EmuThread(Core::System& system, std::unique_ptr<BootParameters> boot,
WindowSystemInfo wsi)
{
const SConfig& core_parameter = SConfig::GetInstance();
CallOnStateChangedCallbacks(State::Starting);
Common::ScopeGuard flag_guard{[] {
s_is_booting.Clear();
@ -521,7 +520,7 @@ static void EmuThread(Core::System& system, std::unique_ptr<BootParameters> boot
const bool delete_savestate =
boot_session_data.GetDeleteSavestate() == DeleteSavestateAfterBoot::Yes;
bool sync_sd_folder = core_parameter.bWii && Config::Get(Config::MAIN_WII_SD_CARD) &&
bool sync_sd_folder = system.IsWii() && Config::Get(Config::MAIN_WII_SD_CARD) &&
Config::Get(Config::MAIN_WII_SD_CARD_ENABLE_FOLDER_SYNC);
if (sync_sd_folder)
{
@ -544,7 +543,7 @@ static void EmuThread(Core::System& system, std::unique_ptr<BootParameters> boot
}};
// Load Wiimotes - only if we are booting in Wii mode
if (core_parameter.bWii && !Config::Get(Config::MAIN_BLUETOOTH_PASSTHROUGH_ENABLED))
if (system.IsWii() && !Config::Get(Config::MAIN_BLUETOOTH_PASSTHROUGH_ENABLED))
{
Wiimote::LoadConfig();
}
@ -600,7 +599,7 @@ static void EmuThread(Core::System& system, std::unique_ptr<BootParameters> boot
else
Config::SetBaseOrCurrent(Config::MAIN_DSP_THREAD, cpu_info.num_cores > 2);
if (!system.GetDSP().GetDSPEmulator()->Initialize(core_parameter.bWii,
if (!system.GetDSP().GetDSPEmulator()->Initialize(system.IsWii(),
Config::Get(Config::MAIN_DSP_THREAD)))
{
PanicAlertFmt("Failed to initialize DSP emulation!");
@ -628,7 +627,7 @@ static void EmuThread(Core::System& system, std::unique_ptr<BootParameters> boot
cpuThreadFunc = CpuThread;
std::optional<DiscIO::Riivolution::SavegameRedirect> savegame_redirect = std::nullopt;
if (SConfig::GetInstance().bWii)
if (system.IsWii())
savegame_redirect = DiscIO::Riivolution::ExtractSavegameRedirect(boot->riivolution_patches);
{
@ -645,7 +644,7 @@ static void EmuThread(Core::System& system, std::unique_ptr<BootParameters> boot
Core::CleanUpWiiFileSystemContents(boot_session_data);
boot_session_data.InvokeWiiSyncCleanup();
}};
if (SConfig::GetInstance().bWii)
if (system.IsWii())
Core::InitializeWiiFileSystemContents(savegame_redirect, boot_session_data);
else
wiifs_guard.Dismiss();

View file

@ -10,7 +10,6 @@
#include "Common/MsgHandler.h"
#include "Common/Thread.h"
#include "Core/ConfigManager.h"
#include "Core/HW/Memmap.h"
#include "Core/System.h"
@ -244,7 +243,7 @@ void FifoRecorder::StartRecording(s32 numFrames, CallbackFunc finishedCb)
std::fill(m_Ram.begin(), m_Ram.end(), 0);
std::fill(m_ExRam.begin(), m_ExRam.end(), 0);
m_File->SetIsWii(SConfig::GetInstance().bWii);
m_File->SetIsWii(m_system.IsWii());
if (!m_IsRecording)
{

View file

@ -16,7 +16,6 @@
#include "Common/FileUtil.h"
#include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/PowerPC/MMU.h"
#include "Core/PowerPC/PowerPC.h"
@ -136,7 +135,7 @@ static Installation InstallCodeHandlerLocked(const Core::CPUThreadGuard& guard)
}
u8 mmio_addr = 0xCC;
if (SConfig::GetInstance().bWii)
if (guard.GetSystem().IsWii())
{
mmio_addr = 0xCD;
}

View file

@ -11,7 +11,6 @@
#include "Common/Config/Config.h"
#include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/GeckoCode.h"
#include "Core/HLE/HLE_Misc.h"
@ -85,7 +84,7 @@ void PatchFixedFunctions(Core::System& system)
// that get patched by MIOS. See https://bugs.dolphin-emu.org/issues/11952 for more info.
// Not applying the Gecko HLE patches means that Gecko codes will not work under MIOS,
// but this is better than the alternative of having specific games crash.
if (SConfig::GetInstance().m_is_mios)
if (system.IsMIOS())
return;
// HLE jump to loader (homebrew). Disabled when Gecko is active as it interferes with the code

View file

@ -6,7 +6,6 @@
#include <algorithm>
#include "Common/BitUtils.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/HW/DSP.h"
#include "Core/HW/Memmap.h"
@ -209,7 +208,7 @@ struct AuxiliaryAddressSpaceAccessors : Accessors
static constexpr u32 aram_base_address = 0;
bool IsValidAddress(const Core::CPUThreadGuard& guard, u32 address) const override
{
return !SConfig::GetInstance().bWii && (address - aram_base_address) < GetSize();
return !guard.GetSystem().IsWii() && (address - aram_base_address) < GetSize();
}
u8 ReadU8(const Core::CPUThreadGuard& guard, u32 address) const override
{
@ -442,7 +441,7 @@ Accessors* GetAccessors(Type address_space)
case Type::Effective:
return &s_effective_address_space_accessors;
case Type::Physical:
if (SConfig::GetInstance().bWii)
if (Core::System::GetInstance().IsWii())
{
return &s_physical_address_space_accessors_wii;
}
@ -453,13 +452,13 @@ Accessors* GetAccessors(Type address_space)
case Type::Mem1:
return &s_mem1_address_space_accessors;
case Type::Mem2:
if (SConfig::GetInstance().bWii)
if (Core::System::GetInstance().IsWii())
{
return &s_mem2_address_space_accessors;
}
break;
case Type::Auxiliary:
if (!SConfig::GetInstance().bWii)
if (!Core::System::GetInstance().IsWii())
{
return &s_auxiliary_address_space_accessors;
}

View file

@ -352,6 +352,6 @@ u32 AudioInterfaceManager::Get32KHzSampleRateDivisor() const
u32 AudioInterfaceManager::Get48KHzSampleRateDivisor() const
{
return (SConfig::GetInstance().bWii ? 1125 : 1124) * 2;
return (m_system.IsWii() ? 1125 : 1124) * 2;
}
} // namespace AudioInterface

View file

@ -31,7 +31,6 @@
#include "Common/CommonTypes.h"
#include "Common/MemoryUtil.h"
#include "Core/ConfigManager.h"
#include "Core/CoreTiming.h"
#include "Core/DSPEmulator.h"
#include "Core/HW/HSP/HSP.h"
@ -122,7 +121,7 @@ void DSPManager::Reinit(bool hle)
m_dsp_emulator = CreateDSPEmulator(m_system, hle);
m_is_lle = m_dsp_emulator->IsLLE();
if (SConfig::GetInstance().bWii)
if (m_system.IsWii())
{
auto& memory = m_system.GetMemory();
m_aram.wii_mode = true;
@ -317,8 +316,8 @@ void DSPManager::RegisterMMIO(MMIO::Mapping* mmio, u32 base)
MMIO::ComplexWrite<u16>([](Core::System& system, u32, u16 val) {
auto& dsp = system.GetDSP();
*MMIO::Utils::HighPart(&dsp.m_audio_dma.SourceAddress) =
val & (SConfig::GetInstance().bWii ? WMASK_AUDIO_HI_RESTRICT_WII :
WMASK_AUDIO_HI_RESTRICT_GCN);
val &
(system.IsWii() ? WMASK_AUDIO_HI_RESTRICT_WII : WMASK_AUDIO_HI_RESTRICT_GCN);
}));
// Audio DMA MMIO controlling the DMA start.

View file

@ -11,7 +11,6 @@
#include "Common/CommonTypes.h"
#include "Common/Logging/Log.h"
#include "Common/Swap.h"
#include "Core/ConfigManager.h"
#include "Core/HW/DSP.h"
#include "Core/HW/DSPHLE/DSPHLE.h"
#include "Core/HW/DSPHLE/MailHandler.h"
@ -1549,7 +1548,7 @@ void ZeldaAudioRenderer::Resample(VPB* vpb, const s16* src, MixingBuffer* dst)
void* ZeldaAudioRenderer::GetARAMPtr(u32 offset) const
{
if (SConfig::GetInstance().bWii)
if (m_system.IsWii())
return HLEMemory_Get_Pointer(m_system.GetMemory(), m_aram_base_addr + offset);
else
return reinterpret_cast<u8*>(m_system.GetDSP().GetARAMPtr()) + offset;

View file

@ -9,7 +9,6 @@
#include "Common/Hash.h"
#include "Common/Logging/Log.h"
#include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h"
#include "Core/DSP/DSPAnalyzer.h"
#include "Core/DSP/DSPCodeUtil.h"
#include "Core/DSP/DSPCore.h"
@ -64,7 +63,7 @@ bool OnThread()
bool IsWiiHost()
{
return SConfig::GetInstance().bWii;
return Core::System::GetInstance().IsWii();
}
void InterruptRequest()

View file

@ -377,7 +377,7 @@ void DVDInterface::SetDisc(std::unique_ptr<DiscIO::VolumeDisc> disc,
// Wii disc, which triggers Error #001. In those cases we manually make the check succeed to
// avoid problems.
const bool should_fake_error_001 =
SConfig::GetInstance().bWii && blob.GetBlobType() == DiscIO::BlobType::DIRECTORY;
m_system.IsWii() && blob.GetBlobType() == DiscIO::BlobType::DIRECTORY;
Config::SetCurrent(Config::SESSION_SHOULD_FAKE_ERROR_001, should_fake_error_001);
if (!blob.HasFastRandomAccessInBlock() && blob.GetBlockSize() > 0x200000)

View file

@ -106,7 +106,7 @@ CEXIIPL::CEXIIPL(Core::System& system) : IEXIDevice(system)
// Load whole ROM dump
// Note: The Wii doesn't have a copy of the IPL, only fonts.
if (!SConfig::GetInstance().bWii && Config::Get(Config::SESSION_LOAD_IPL_DUMP) &&
if (!system.IsWii() && Config::Get(Config::SESSION_LOAD_IPL_DUMP) &&
LoadFileToIPL(SConfig::GetInstance().m_strBootROM, 0))
{
// Descramble the encrypted section (contains BS1 and BS2)

View file

@ -7,7 +7,6 @@
#include "Common/CommonTypes.h"
#include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/CoreTiming.h"
#include "Core/HW/AddressSpace.h"
@ -54,7 +53,7 @@ void Init(Core::System& system, const Sram* override_sram)
system.GetCPU().Init(Config::Get(Config::MAIN_CPU_CORE));
system.GetSystemTimers().Init();
if (SConfig::GetInstance().bWii)
if (system.IsWii())
{
system.GetWiiIPC().Init();
IOS::HLE::Init(system); // Depends on Memory
@ -63,7 +62,7 @@ void Init(Core::System& system, const Sram* override_sram)
void Shutdown(Core::System& system)
{
// IOS should always be shut down regardless of bWii because it can be running in GC mode (MIOS).
// IOS should always be shut down regardless of IsWii because it can be running in GC mode (MIOS).
IOS::HLE::Shutdown(); // Depends on Memory
system.GetWiiIPC().Shutdown();
@ -108,7 +107,7 @@ void DoState(Core::System& system, PointerWrap& p)
system.GetHSP().DoState(p);
p.DoMarker("HSP");
if (SConfig::GetInstance().bWii)
if (system.IsWii())
{
system.GetWiiIPC().DoState(p);
p.DoMarker("IOS");

View file

@ -12,7 +12,6 @@
#include "Common/Assert.h"
#include "Common/BitUtils.h"
#include "Common/CommonTypes.h"
#include "Core/ConfigManager.h"
#include "Core/HW/GPFifo.h"
#include "Core/HW/MMIOHandlers.h"
@ -47,14 +46,14 @@ const u32 NUM_MMIOS = NUM_BLOCKS * BLOCK_SIZE;
// We have a special exception here for FIFO writes: these are handled via a
// different mechanism and should not go through the normal MMIO access
// interface.
inline bool IsMMIOAddress(u32 address)
inline bool IsMMIOAddress(u32 address, bool is_wii)
{
if (address == GPFifo::GATHER_PIPE_PHYSICAL_ADDRESS)
return false; // WG Pipe
if ((address & 0xFFFF0000) == 0x0C000000)
return true; // GameCube MMIOs
if (SConfig::GetInstance().bWii)
if (is_wii)
{
return ((address & 0xFFFF0000) == 0x0D000000) || // Wii MMIOs
((address & 0xFFFF0000) == 0x0D800000); // Mirror of Wii MMIOs

View file

@ -21,7 +21,6 @@
#include "Common/MsgHandler.h"
#include "Common/Swap.h"
#include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/HW/AudioInterface.h"
#include "Core/HW/DSP.h"
@ -103,7 +102,7 @@ void MemoryManager::Init()
m_physical_regions[3] = PhysicalMemoryRegion{
&m_exram, 0x10000000, GetExRamSize(), PhysicalMemoryRegion::WII_ONLY, 0, false};
const bool wii = SConfig::GetInstance().bWii;
const bool wii = m_system.IsWii();
const bool mmu = m_system.IsMMUMode();
// If MMU is turned off in GameCube mode, turn on fake VMEM hack.

View file

@ -124,7 +124,7 @@ void ProcessorInterfaceManager::RegisterMMIO(MMIO::Mapping* mmio, u32 base)
processor_interface.m_reset_code = val;
INFO_LOG_FMT(PROCESSORINTERFACE, "Wrote PI_RESET_CODE: {:08x}",
processor_interface.m_reset_code);
if (!SConfig::GetInstance().bWii && ~processor_interface.m_reset_code & 0x4)
if (!system.IsWii() && (~processor_interface.m_reset_code & 0x4))
{
system.GetDVDInterface().ResetDrive(true);
}

View file

@ -54,7 +54,6 @@ IPC_HLE_PERIOD: For the Wii Remote this is the call schedule:
#include "Common/Thread.h"
#include "Common/Timer.h"
#include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/CoreTiming.h"
#include "Core/DSPEmulator.h"
@ -102,7 +101,7 @@ void SystemTimersManager::AudioDMACallback(Core::System& system, u64 userdata, s
void SystemTimersManager::IPC_HLE_UpdateCallback(Core::System& system, u64 userdata,
s64 cycles_late)
{
if (SConfig::GetInstance().bWii)
if (system.IsWii())
{
IOS::HLE::GetIOS()->UpdateDevices();
auto& system_timers = system.GetSystemTimers();
@ -241,7 +240,7 @@ double SystemTimersManager::GetEstimatedEmulationPerformance() const
// SystemTimers::Init
void SystemTimersManager::PreInit()
{
ChangePPCClock(SConfig::GetInstance().bWii ? Mode::Wii : Mode::GC);
ChangePPCClock(m_system.IsWii() ? Mode::Wii : Mode::GC);
}
void SystemTimersManager::ChangePPCClock(Mode mode)
@ -256,7 +255,7 @@ void SystemTimersManager::ChangePPCClock(Mode mode)
void SystemTimersManager::Init()
{
if (SConfig::GetInstance().bWii)
if (m_system.IsWii())
{
// AyuanX: TO BE TWEAKED
// Now the 1500 is a pure assumption
@ -306,7 +305,7 @@ void SystemTimersManager::Init()
core_timing.ScheduleEvent(vi.GetTicksPerField(), m_event_type_patch_engine);
if (SConfig::GetInstance().bWii)
if (m_system.IsWii())
core_timing.ScheduleEvent(m_ipc_hle_period, m_event_type_ipc_hle);
}

View file

@ -19,7 +19,6 @@
#include "Core/Config/MainSettings.h"
#include "Core/Config/WiimoteSettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/HW/Wiimote.h"
#include "Core/HW/WiimoteCommon/DataReport.h"
@ -28,6 +27,7 @@
#include "Core/HW/WiimoteReal/IOLinux.h"
#include "Core/HW/WiimoteReal/IOWin.h"
#include "Core/HW/WiimoteReal/IOhidapi.h"
#include "Core/System.h"
#include "InputCommon/ControllerInterface/Wiimote/WiimoteController.h"
#include "InputCommon/InputConfig.h"
@ -723,7 +723,7 @@ void WiimoteScanner::ThreadFunc()
// We don't want any remotes in passthrough mode or running in GC mode.
const bool core_running = Core::GetState() != Core::State::Uninitialized;
if (Config::Get(Config::MAIN_BLUETOOTH_PASSTHROUGH_ENABLED) ||
(core_running && !SConfig::GetInstance().bWii))
(core_running && !Core::System::GetInstance().IsWii()))
continue;
// We don't want any remotes if we already connected everything we need.

View file

@ -32,7 +32,7 @@ namespace IOS::HLE::MIOS
{
static void ReinitHardware(Core::System& system)
{
SConfig::GetInstance().bWii = false;
system.SetIsWii(false);
// IOS clears mem2 and overwrites it with pseudo-random data (for security).
auto& memory = system.GetMemory();
@ -47,8 +47,7 @@ static void ReinitHardware(Core::System& system)
// Note: this is specific to Dolphin and is required because we initialised it in Wii mode.
auto& dsp = system.GetDSP();
dsp.Reinit(Config::Get(Config::MAIN_DSP_HLE));
dsp.GetDSPEmulator()->Initialize(SConfig::GetInstance().bWii,
Config::Get(Config::MAIN_DSP_THREAD));
dsp.GetDSPEmulator()->Initialize(system.IsWii(), Config::Get(Config::MAIN_DSP_THREAD));
system.GetSystemTimers().ChangePPCClock(SystemTimers::Mode::GC);
}
@ -101,7 +100,7 @@ bool Load(Core::System& system)
memory.Write_U32(0x00000000, ADDRESS_INIT_SEMAPHORE);
NOTICE_LOG_FMT(IOS, "IPL ready.");
SConfig::GetInstance().m_is_mios = true;
system.SetIsMIOS(true);
system.GetDVDInterface().UpdateRunningGameMetadata();
SConfig::OnNewTitleLoad(guard);
return true;

View file

@ -1035,7 +1035,7 @@ void MovieManager::LoadInput(const std::string& movie_path)
}
ChangePads();
if (SConfig::GetInstance().bWii)
if (m_system.IsWii())
ChangeWiiPads(true);
u64 totalSavedBytes = t_record.GetSize() - 256;
@ -1377,7 +1377,7 @@ void MovieManager::SaveRecording(const std::string& filename)
header.filetype[2] = 'M';
header.filetype[3] = 0x1A;
strncpy(header.gameID.data(), SConfig::GetInstance().GetGameID().c_str(), 6);
header.bWii = SConfig::GetInstance().bWii;
header.bWii = m_system.IsWii();
header.controllers = 0;
header.GBAControllers = 0;
for (int i = 0; i < 4; ++i)
@ -1386,7 +1386,7 @@ void MovieManager::SaveRecording(const std::string& filename)
header.GBAControllers |= 1 << i;
if (IsUsingPad(i))
header.controllers |= 1 << i;
if (IsUsingWiimote(i) && SConfig::GetInstance().bWii)
if (IsUsingWiimote(i) && m_system.IsWii())
header.controllers |= 1 << (i + 4);
}
@ -1454,7 +1454,7 @@ void MovieManager::GetSettings()
m_save_config = true;
m_net_play = NetPlay::IsNetPlayRunning();
if (SConfig::GetInstance().bWii)
if (m_system.IsWii())
{
u64 title_id = SConfig::GetInstance().GetTitleID();
m_clear_save = !File::Exists(

View file

@ -36,7 +36,6 @@
#include "Common/CommonTypes.h"
#include "Common/Logging/Log.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/HW/CPU.h"
#include "Core/HW/GPFifo.h"
@ -1241,7 +1240,7 @@ u32 MMU::IsOptimizableMMIOAccess(u32 address, u32 access_size) const
// Check whether the address is an aligned address of an MMIO register.
const bool aligned = (address & ((access_size >> 3) - 1)) == 0;
if (!aligned || !MMIO::IsMMIOAddress(address))
if (!aligned || !MMIO::IsMMIOAddress(address, m_system.IsWii()))
return 0;
return address;
@ -1641,7 +1640,7 @@ void MMU::DBATUpdated()
{
m_dbat_table = {};
UpdateBATs(m_dbat_table, SPR_DBAT0U);
bool extended_bats = SConfig::GetInstance().bWii && HID4(m_ppc_state).SBE;
bool extended_bats = m_system.IsWii() && HID4(m_ppc_state).SBE;
if (extended_bats)
UpdateBATs(m_dbat_table, SPR_DBAT4U);
if (m_memory.GetFakeVMEM())
@ -1663,7 +1662,7 @@ void MMU::IBATUpdated()
{
m_ibat_table = {};
UpdateBATs(m_ibat_table, SPR_IBAT0U);
bool extended_bats = SConfig::GetInstance().bWii && HID4(m_ppc_state).SBE;
bool extended_bats = m_system.IsWii() && HID4(m_ppc_state).SBE;
if (extended_bats)
UpdateBATs(m_ibat_table, SPR_IBAT4U);
if (m_memory.GetFakeVMEM())

View file

@ -20,7 +20,6 @@
#include "Core/CPUThreadConfigCallback.h"
#include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/CoreTiming.h"
#include "Core/HW/CPU.h"
@ -168,7 +167,7 @@ void PowerPCManager::ResetRegisters()
// 0x00083214 = gekko 2.4e (8SE) - retail HW2
// Wii:
// 0x00087102 = broadway retail hw
if (SConfig::GetInstance().bWii)
if (m_system.IsWii())
{
m_ppc_state.spr[SPR_PVR] = 0x00087102;
}

View file

@ -139,7 +139,9 @@ void EnableCompression(bool compression)
static void DoState(PointerWrap& p)
{
bool is_wii = SConfig::GetInstance().bWii || SConfig::GetInstance().m_is_mios;
auto& system = Core::System::GetInstance();
bool is_wii = system.IsWii() || system.IsMIOS();
const bool is_wii_currently = is_wii;
p.Do(is_wii);
if (is_wii != is_wii_currently)
@ -152,7 +154,6 @@ static void DoState(PointerWrap& p)
}
// Check to make sure the emulated memory sizes are the same as the savestate
auto& system = Core::System::GetInstance();
auto& memory = system.GetMemory();
u32 state_mem1_size = memory.GetRamSizeReal();
u32 state_mem2_size = memory.GetExRamSizeReal();
@ -193,7 +194,7 @@ static void DoState(PointerWrap& p)
system.GetPowerPC().DoState(p);
p.DoMarker("PowerPC");
if (SConfig::GetInstance().bWii)
if (system.IsWii())
Wiimote::DoState(p);
p.DoMarker("Wiimote");
Gecko::DoState(p);

View file

@ -135,6 +135,11 @@ public:
bool IsDualCoreMode() const { return m_separate_cpu_and_gpu_threads; }
bool IsMMUMode() const { return m_mmu_enabled; }
bool IsPauseOnPanicMode() const { return m_pause_on_panic_enabled; }
bool IsMIOS() const { return m_is_mios; }
bool IsWii() const { return m_is_wii; }
void SetIsMIOS(bool is_mios) { m_is_mios = is_mios; }
void SetIsWii(bool is_wii) { m_is_wii = is_wii; }
SoundStream* GetSoundStream() const;
void SetSoundStream(std::unique_ptr<SoundStream> sound_stream);
@ -188,5 +193,7 @@ private:
bool m_separate_cpu_and_gpu_threads = false;
bool m_mmu_enabled = false;
bool m_pause_on_panic_enabled = false;
bool m_is_mios = false;
bool m_is_wii = false;
};
} // namespace Core

View file

@ -19,7 +19,6 @@
#include "Common/StringUtil.h"
#include "Core/CheatSearch.h"
#include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/HW/Memmap.h"
#include "Core/PowerPC/MMU.h"
@ -170,7 +169,7 @@ void CheatSearchFactoryWidget::OnNewSearchClicked()
auto& system = Core::System::GetInstance();
auto& memory = system.GetMemory();
memory_ranges.emplace_back(0x80000000, memory.GetRamSizeReal());
if (SConfig::GetInstance().bWii)
if (system.IsWii())
memory_ranges.emplace_back(0x90000000, memory.GetExRamSizeReal());
address_space = PowerPC::RequestedAddressSpace::Virtual;
}

View file

@ -28,6 +28,7 @@
#include "Core/IOS/IOS.h"
#include "Core/IOS/USB/Bluetooth/BTReal.h"
#include "Core/NetPlayProto.h"
#include "Core/System.h"
#include "Core/WiiUtils.h"
#include "DolphinQt/Config/Mapping/MappingWindow.h"
@ -295,7 +296,7 @@ void WiimoteControllersWidget::LoadSettings(Core::State state)
m_wiimote_emu->setEnabled(!running);
m_wiimote_passthrough->setEnabled(!running);
const bool running_gc = running && !SConfig::GetInstance().bWii;
const bool running_gc = running && !Core::System::GetInstance().IsWii();
const bool enable_passthrough = m_wiimote_passthrough->isChecked() && !running_gc;
const bool enable_emu_bt = !m_wiimote_passthrough->isChecked() && !running_gc;
const bool is_netplay = NetPlay::IsNetPlayRunning();

View file

@ -46,7 +46,6 @@
#include "Common/FileUtil.h"
#include "Core/Config/MainSettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/HW/DVD/DVDInterface.h"
#include "Core/HW/EXI/EXI.h"
@ -437,7 +436,7 @@ void GameList::ShowContextMenu(const QPoint&)
// system menu, trigger a refresh.
Settings::Instance().NANDRefresh();
});
perform_disc_update->setEnabled(!Core::IsRunning() || !SConfig::GetInstance().bWii);
perform_disc_update->setEnabled(!Core::IsRunning() || !Core::System::GetInstance().IsWii());
}
if (!is_mod_descriptor && platform == DiscIO::Platform::WiiWAD)

View file

@ -23,7 +23,6 @@
#include "Core/Config/GraphicsSettings.h"
#include "Core/Config/MainSettings.h"
#include "Core/Config/UISettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/FreeLookManager.h"
#include "Core/Host.h"
@ -266,7 +265,7 @@ void HotkeyScheduler::Run()
// TODO: HK_MBP_ADD
if (SConfig::GetInstance().bWii)
if (Core::System::GetInstance().IsWii())
{
int wiimote_id = -1;
if (IsHotkey(HK_WIIMOTE1_CONNECT))

View file

@ -46,7 +46,6 @@
#include "Core/Config/MainSettings.h"
#include "Core/Config/NetplaySettings.h"
#include "Core/Config/WiimoteSettings.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/FreeLookManager.h"
#include "Core/HW/DVD/DVDInterface.h"
@ -1970,7 +1969,7 @@ void MainWindow::ShowTASInput()
for (int i = 0; i < num_wii_controllers; i++)
{
if (Config::Get(Config::GetInfoForWiimoteSource(i)) == WiimoteSource::Emulated &&
(!Core::IsRunning() || SConfig::GetInstance().bWii))
(!Core::IsRunning() || Core::System::GetInstance().IsWii()))
{
SetQWidgetWindowDecorations(m_wii_tas_input_windows[i]);
m_wii_tas_input_windows[i]->show();

View file

@ -21,6 +21,8 @@
#include "Common/HttpRequest.h"
#include "Common/StringUtil.h"
#include "Core/System.h"
#endif
namespace Discord
@ -95,7 +97,7 @@ void HandleDiscordJoin(const char* join_secret)
std::string ArtworkForGameId()
{
const DiscIO::Region region = SConfig::GetInstance().m_region;
const bool is_wii = SConfig::GetInstance().bWii;
const bool is_wii = Core::System::GetInstance().IsWii();
const std::string region_code = SConfig::GetInstance().GetGameTDBImageRegionCode(is_wii, region);
static constexpr char cover_url[] = "https://discord.dolphin-emu.org/cover-art/{}/{}.png";

View file

@ -14,7 +14,6 @@
#include "Common/EnumMap.h"
#include "Common/Logging/Log.h"
#include "Core/ConfigManager.h"
#include "Core/CoreTiming.h"
#include "Core/DolphinAnalytics.h"
#include "Core/FifoPlayer/FifoPlayer.h"
@ -389,7 +388,8 @@ static void BPWritten(PixelShaderManager& pixel_shader_manager, XFStateManager&
u32 addr = bpmem.tmem_config.tlut_src << 5;
// The GameCube ignores the upper bits of this address. Some games (WW, MKDD) set them.
if (!SConfig::GetInstance().bWii)
auto& system = Core::System::GetInstance();
if (!system.IsWii())
addr = addr & 0x01FFFFFF;
// The copy below will always be in bounds as tmem is bigger than the maximum address a TLUT can
@ -400,7 +400,6 @@ static void BPWritten(PixelShaderManager& pixel_shader_manager, XFStateManager&
(1 << bpmem.tmem_config.tlut_dest.tmem_line_count.NumBits()) * TMEM_LINE_SIZE;
static_assert(MAX_LOADABLE_TMEM_ADDR + MAX_TMEM_LINE_COUNT < TMEM_SIZE);
auto& system = Core::System::GetInstance();
auto& memory = system.GetMemory();
memory.CopyFromEmu(texMem + tmem_addr, addr, tmem_transfer_count);

View file

@ -10,6 +10,7 @@
#include "Common/EnumUtils.h"
#include "Common/Logging/Log.h"
#include "Core/DolphinAnalytics.h"
#include "Core/System.h"
#include "VideoCommon/CommandProcessor.h"
#include "VideoCommon/VertexLoaderManager.h"
@ -186,7 +187,7 @@ void CPState::LoadCPReg(u8 sub_cmd, u32 value)
// Pointers to vertex arrays in GC RAM
case ARRAY_BASE:
array_bases[static_cast<CPArray>(sub_cmd & CP_ARRAY_MASK)] =
value & CommandProcessor::GetPhysicalAddressMask();
value & CommandProcessor::GetPhysicalAddressMask(Core::System::GetInstance().IsWii());
break;
case ARRAY_STRIDE:

View file

@ -13,7 +13,6 @@
#include "Common/Flag.h"
#include "Common/Logging/Log.h"
#include "Common/MsgHandler.h"
#include "Core/ConfigManager.h"
#include "Core/CoreTiming.h"
#include "Core/HW/GPFifo.h"
#include "Core/HW/MMIO.h"
@ -137,19 +136,12 @@ void CommandProcessorManager::Init()
m_system.GetCoreTiming().RegisterEvent("CPInterrupt", UpdateInterrupts_Wrapper);
}
u32 GetPhysicalAddressMask()
{
// Physical addresses in CP seem to ignore some of the upper bits (depending on platform)
// This can be observed in CP MMIO registers by setting to 0xffffffff and then reading back.
return SConfig::GetInstance().bWii ? 0x1fffffff : 0x03ffffff;
}
void CommandProcessorManager::RegisterMMIO(MMIO::Mapping* mmio, u32 base)
{
constexpr u16 WMASK_NONE = 0x0000;
constexpr u16 WMASK_ALL = 0xffff;
constexpr u16 WMASK_LO_ALIGN_32BIT = 0xffe0;
const u16 WMASK_HI_RESTRICT = GetPhysicalAddressMask() >> 16;
const u16 WMASK_HI_RESTRICT = GetPhysicalAddressMask(m_system.IsWii()) >> 16;
struct
{

View file

@ -155,7 +155,12 @@ union UCPClearReg
UCPClearReg(u16 _hex) { Hex = _hex; }
};
u32 GetPhysicalAddressMask();
constexpr u32 GetPhysicalAddressMask(bool is_wii)
{
// Physical addresses in CP seem to ignore some of the upper bits (depending on platform)
// This can be observed in CP MMIO registers by setting to 0xffffffff and then reading back.
return is_wii ? 0x1fffffff : 0x03ffffff;
}
class CommandProcessorManager
{

View file

@ -14,7 +14,6 @@
#include "Common/MathUtil.h"
#include "Common/SmallVector.h"
#include "Core/ConfigManager.h"
#include "Core/DolphinAnalytics.h"
#include "Core/HW/SystemTimers.h"
#include "Core/System.h"
@ -511,7 +510,8 @@ void VertexManagerBase::Flush()
#endif
// Track some stats used elsewhere by the anamorphic widescreen heuristic.
if (!SConfig::GetInstance().bWii)
auto& system = Core::System::GetInstance();
if (!system.IsWii())
{
const bool is_perspective = xfmem.projection.type == ProjectionType::Perspective;
@ -538,7 +538,6 @@ void VertexManagerBase::Flush()
}
}
auto& system = Core::System::GetInstance();
auto& pixel_shader_manager = system.GetPixelShaderManager();
auto& geometry_shader_manager = system.GetGeometryShaderManager();
auto& vertex_shader_manager = system.GetVertexShaderManager();

View file

@ -5,7 +5,7 @@
#include "Common/ChunkFile.h"
#include "Core/Config/SYSCONFSettings.h"
#include "Core/ConfigManager.h"
#include "Core/System.h"
#include "VideoCommon/VertexManagerBase.h"
@ -23,7 +23,8 @@ WidescreenManager::WidescreenManager()
"Widescreen");
// VertexManager doesn't maintain statistics in Wii mode.
if (!SConfig::GetInstance().bWii)
auto& system = Core::System::GetInstance();
if (!system.IsWii())
{
m_update_widescreen =
AfterFrameEvent::Register([this] { UpdateWidescreenHeuristic(); }, "WideScreen Heuristic");
@ -32,7 +33,8 @@ WidescreenManager::WidescreenManager()
void WidescreenManager::Update()
{
if (SConfig::GetInstance().bWii)
auto& system = Core::System::GetInstance();
if (system.IsWii())
m_is_game_widescreen = Config::Get(Config::SYSCONF_WIDESCREEN);
// suggested_aspect_mode overrides SYSCONF_WIDESCREEN

View file

@ -4,16 +4,12 @@
#include <gtest/gtest.h>
#include <memory>
#include <string>
#include <unordered_set>
#include "Common/CommonTypes.h"
#include "Common/Config/Config.h"
#include "Common/FileUtil.h"
#include "Core/HW/GPFifo.h"
#include "Core/HW/MMIO.h"
#include "Core/System.h"
#include "UICommon/UICommon.h"
// Tests that the UniqueID function returns a "unique enough" identifier
// number: that is, it is unique in the address ranges we care about.
@ -36,34 +32,25 @@ TEST(UniqueID, UniqueEnough)
TEST(IsMMIOAddress, SpecialAddresses)
{
const std::string profile_path = File::CreateTempDir();
ASSERT_FALSE(profile_path.empty());
UICommon::SetUserDirectory(profile_path);
Config::Init();
SConfig::Init();
SConfig::GetInstance().bWii = true;
constexpr bool is_wii = true;
// WG Pipe address, should not be handled by MMIO.
EXPECT_FALSE(MMIO::IsMMIOAddress(GPFifo::GATHER_PIPE_PHYSICAL_ADDRESS));
EXPECT_FALSE(MMIO::IsMMIOAddress(GPFifo::GATHER_PIPE_PHYSICAL_ADDRESS, is_wii));
// Locked L1 cache allocation.
EXPECT_FALSE(MMIO::IsMMIOAddress(0xE0000000));
EXPECT_FALSE(MMIO::IsMMIOAddress(0xE0000000, is_wii));
// Uncached mirror of MEM1, shouldn't be handled by MMIO
EXPECT_FALSE(MMIO::IsMMIOAddress(0xC0000000));
EXPECT_FALSE(MMIO::IsMMIOAddress(0xC0000000, is_wii));
// Effective address of an MMIO register; MMIO only deals with physical
// addresses.
EXPECT_FALSE(MMIO::IsMMIOAddress(0xCC0000E0));
EXPECT_FALSE(MMIO::IsMMIOAddress(0xCC0000E0, is_wii));
// And let's check some valid addresses too
EXPECT_TRUE(MMIO::IsMMIOAddress(0x0C0000E0)); // GameCube MMIOs
EXPECT_TRUE(MMIO::IsMMIOAddress(0x0D00008C)); // Wii MMIOs
EXPECT_TRUE(MMIO::IsMMIOAddress(0x0D800F10)); // Mirror of Wii MMIOs
SConfig::Shutdown();
Config::Shutdown();
File::DeleteDirRecursively(profile_path);
EXPECT_TRUE(MMIO::IsMMIOAddress(0x0C0000E0, is_wii)); // GameCube MMIOs
EXPECT_TRUE(MMIO::IsMMIOAddress(0x0D00008C, is_wii)); // Wii MMIOs
EXPECT_TRUE(MMIO::IsMMIOAddress(0x0D800F10, is_wii)); // Mirror of Wii MMIOs
}
class MappingTest : public testing::Test