Files
dolphin/Source/Core/Core/System.cpp
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

336 lines
8.1 KiB
C++
Raw Normal View History

2020-12-19 22:32:55 -05:00
// Copyright 2020 Dolphin Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
2020-12-19 22:32:55 -05:00
#include "Core/System.h"
#include <memory>
#include "AudioCommon/SoundStream.h"
#include "Core/Config/MainSettings.h"
#include "Core/CoreTiming.h"
2024-01-05 09:31:59 +01:00
#include "Core/FifoPlayer/FifoPlayer.h"
2024-01-12 13:35:47 +01:00
#include "Core/FifoPlayer/FifoRecorder.h"
#include "Core/HW/AudioInterface.h"
2023-03-07 04:02:48 +01:00
#include "Core/HW/CPU.h"
2022-10-02 05:13:55 +02:00
#include "Core/HW/DSP.h"
#include "Core/HW/DVD/DVDInterface.h"
#include "Core/HW/DVD/DVDThread.h"
#include "Core/HW/EXI/EXI.h"
#include "Core/HW/GPFifo.h"
2023-03-07 02:11:39 +01:00
#include "Core/HW/HSP/HSP.h"
#include "Core/HW/Memmap.h"
#include "Core/HW/MemoryInterface.h"
#include "Core/HW/ProcessorInterface.h"
#include "Core/HW/SI/SI.h"
2022-09-14 01:11:04 +02:00
#include "Core/HW/Sram.h"
#include "Core/HW/SystemTimers.h"
#include "Core/HW/VideoInterface.h"
#include "Core/HW/WII_IPC.h"
#include "Core/Movie.h"
#include "Core/PowerPC/Interpreter/Interpreter.h"
#include "Core/PowerPC/JitInterface.h"
2023-01-11 06:01:50 +01:00
#include "Core/PowerPC/PowerPC.h"
2023-01-25 10:51:02 +13:00
#include "IOS/USB/Emulated/Infinity.h"
#include "IOS/USB/Emulated/Skylanders/Skylander.h"
2023-03-20 01:22:09 -05:00
#include "VideoCommon/Assets/CustomAssetLoader.h"
#include "VideoCommon/CommandProcessor.h"
#include "VideoCommon/Fifo.h"
#include "VideoCommon/GeometryShaderManager.h"
#include "VideoCommon/PixelEngine.h"
#include "VideoCommon/PixelShaderManager.h"
#include "VideoCommon/VertexShaderManager.h"
#include "VideoCommon/XFStateManager.h"
2020-12-19 22:32:55 -05:00
namespace Core
{
struct System::Impl
{
2023-01-10 04:47:34 +01:00
explicit Impl(System& system)
: m_audio_interface(system), m_core_timing(system), m_command_processor{system},
m_cpu(system), m_dsp(system), m_dvd_interface(system), m_dvd_thread(system),
m_expansion_interface(system), m_fifo{system}, m_gp_fifo(system), m_wii_ipc(system),
m_memory(system), m_pixel_engine{system}, m_power_pc(system),
m_mmu(system, m_memory, m_power_pc), m_processor_interface(system),
m_serial_interface(system), m_system_timers(system), m_video_interface(system),
m_interpreter(system, m_power_pc.GetPPCState(), m_mmu, m_power_pc.GetBranchWatch(),
m_power_pc.GetSymbolDB()),
2023-12-07 09:18:38 -08:00
m_jit_interface(system), m_fifo_player(system), m_fifo_recorder(system), m_movie(system)
2023-01-10 04:47:34 +01:00
{
}
std::unique_ptr<SoundStream> m_sound_stream;
bool m_sound_stream_running = false;
bool m_audio_dump_started = false;
std::unique_ptr<IOS::HLE::EmulationKernel> m_ios;
2023-03-08 23:26:31 +01:00
AudioInterface::AudioInterfaceManager m_audio_interface;
2022-11-26 09:29:46 +01:00
CoreTiming::CoreTimingManager m_core_timing;
CommandProcessor::CommandProcessorManager m_command_processor;
2023-03-07 04:02:48 +01:00
CPU::CPUManager m_cpu;
2023-03-09 02:36:43 +01:00
DSP::DSPManager m_dsp;
DVD::DVDInterface m_dvd_interface;
DVD::DVDThread m_dvd_thread;
ExpansionInterface::ExpansionInterfaceManager m_expansion_interface;
Fifo::FifoManager m_fifo;
GeometryShaderManager m_geometry_shader_manager;
GPFifo::GPFifoManager m_gp_fifo;
2023-03-07 02:11:39 +01:00
HSP::HSPManager m_hsp;
2023-01-25 10:51:02 +13:00
IOS::HLE::USB::InfinityBase m_infinity_base;
2023-01-12 14:21:29 +13:00
IOS::HLE::USB::SkylanderPortal m_skylander_portal;
IOS::WiiIPC m_wii_ipc;
Memory::MemoryManager m_memory;
2023-03-10 21:27:35 +01:00
MemoryInterface::MemoryInterfaceManager m_memory_interface;
PixelEngine::PixelEngineManager m_pixel_engine;
PixelShaderManager m_pixel_shader_manager;
2023-03-28 20:26:52 +02:00
PowerPC::PowerPCManager m_power_pc;
PowerPC::MMU m_mmu;
ProcessorInterface::ProcessorInterfaceManager m_processor_interface;
2023-03-12 14:20:32 +01:00
SerialInterface::SerialInterfaceManager m_serial_interface;
2022-09-14 01:11:04 +02:00
Sram m_sram;
SystemTimers::SystemTimersManager m_system_timers;
VertexShaderManager m_vertex_shader_manager;
XFStateManager m_xf_state_manager;
2023-03-10 22:14:54 +01:00
VideoInterface::VideoInterfaceManager m_video_interface;
Interpreter m_interpreter;
JitInterface m_jit_interface;
2023-03-20 01:22:09 -05:00
VideoCommon::CustomAssetLoader m_custom_asset_loader;
2024-01-05 09:31:59 +01:00
FifoPlayer m_fifo_player;
2024-01-12 13:35:47 +01:00
FifoRecorder m_fifo_recorder;
Movie::MovieManager m_movie;
2020-12-19 22:32:55 -05:00
};
System::System() : m_impl{std::make_unique<Impl>(*this)}
2020-12-19 22:32:55 -05:00
{
}
System::~System() = default;
void System::Initialize()
{
m_separate_cpu_and_gpu_threads = Config::Get(Config::MAIN_CPU_THREAD);
m_mmu_enabled = Config::Get(Config::MAIN_MMU);
2022-04-17 00:15:12 -07:00
m_pause_on_panic_enabled = Config::Get(Config::MAIN_PAUSE_ON_PANIC);
}
SoundStream* System::GetSoundStream() const
{
return m_impl->m_sound_stream.get();
}
void System::SetSoundStream(std::unique_ptr<SoundStream> sound_stream)
{
m_impl->m_sound_stream = std::move(sound_stream);
}
bool System::IsSoundStreamRunning() const
{
return m_impl->m_sound_stream_running;
}
void System::SetSoundStreamRunning(bool running)
{
m_impl->m_sound_stream_running = running;
}
bool System::IsAudioDumpStarted() const
{
return m_impl->m_audio_dump_started;
}
void System::SetAudioDumpStarted(bool started)
{
m_impl->m_audio_dump_started = started;
}
IOS::HLE::EmulationKernel* System::GetIOS() const
{
return m_impl->m_ios.get();
}
void System::SetIOS(std::unique_ptr<IOS::HLE::EmulationKernel> ios)
{
m_impl->m_ios = std::move(ios);
}
2023-03-08 23:26:31 +01:00
AudioInterface::AudioInterfaceManager& System::GetAudioInterface() const
{
2023-03-08 23:26:31 +01:00
return m_impl->m_audio_interface;
}
2023-03-07 04:02:48 +01:00
CPU::CPUManager& System::GetCPU() const
{
return m_impl->m_cpu;
}
2022-11-26 09:29:46 +01:00
CoreTiming::CoreTimingManager& System::GetCoreTiming() const
{
2022-11-26 09:29:46 +01:00
return m_impl->m_core_timing;
}
CommandProcessor::CommandProcessorManager& System::GetCommandProcessor() const
{
return m_impl->m_command_processor;
}
2023-03-09 02:36:43 +01:00
DSP::DSPManager& System::GetDSP() const
2022-10-02 05:13:55 +02:00
{
2023-03-09 02:36:43 +01:00
return m_impl->m_dsp;
2022-10-02 05:13:55 +02:00
}
DVD::DVDInterface& System::GetDVDInterface() const
{
2023-03-09 21:43:03 +01:00
return m_impl->m_dvd_interface;
}
DVD::DVDThread& System::GetDVDThread() const
{
2023-03-10 17:51:26 +01:00
return m_impl->m_dvd_thread;
}
2022-09-14 01:11:04 +02:00
ExpansionInterface::ExpansionInterfaceManager& System::GetExpansionInterface() const
{
return m_impl->m_expansion_interface;
}
Fifo::FifoManager& System::GetFifo() const
{
return m_impl->m_fifo;
}
2024-01-05 09:31:59 +01:00
FifoPlayer& System::GetFifoPlayer() const
{
return m_impl->m_fifo_player;
}
2024-01-12 13:35:47 +01:00
FifoRecorder& System::GetFifoRecorder() const
{
return m_impl->m_fifo_recorder;
}
GeometryShaderManager& System::GetGeometryShaderManager() const
{
return m_impl->m_geometry_shader_manager;
}
GPFifo::GPFifoManager& System::GetGPFifo() const
{
return m_impl->m_gp_fifo;
}
2023-03-07 02:11:39 +01:00
HSP::HSPManager& System::GetHSP() const
{
return m_impl->m_hsp;
}
Interpreter& System::GetInterpreter() const
{
return m_impl->m_interpreter;
}
JitInterface& System::GetJitInterface() const
{
return m_impl->m_jit_interface;
}
2023-01-12 14:21:29 +13:00
IOS::HLE::USB::SkylanderPortal& System::GetSkylanderPortal() const
{
return m_impl->m_skylander_portal;
}
2023-01-25 10:51:02 +13:00
IOS::HLE::USB::InfinityBase& System::GetInfinityBase() const
{
return m_impl->m_infinity_base;
}
IOS::WiiIPC& System::GetWiiIPC() const
{
return m_impl->m_wii_ipc;
}
Memory::MemoryManager& System::GetMemory() const
{
return m_impl->m_memory;
}
2023-03-10 21:27:35 +01:00
MemoryInterface::MemoryInterfaceManager& System::GetMemoryInterface() const
{
2023-03-10 21:27:35 +01:00
return m_impl->m_memory_interface;
}
PowerPC::MMU& System::GetMMU() const
{
return m_impl->m_mmu;
}
Movie::MovieManager& System::GetMovie() const
{
return m_impl->m_movie;
}
PixelEngine::PixelEngineManager& System::GetPixelEngine() const
{
return m_impl->m_pixel_engine;
}
PixelShaderManager& System::GetPixelShaderManager() const
{
return m_impl->m_pixel_shader_manager;
}
2023-03-28 20:26:52 +02:00
PowerPC::PowerPCManager& System::GetPowerPC() const
{
return m_impl->m_power_pc;
}
2023-01-11 06:01:50 +01:00
PowerPC::PowerPCState& System::GetPPCState() const
{
2023-03-28 20:26:52 +02:00
return m_impl->m_power_pc.GetPPCState();
2023-01-11 06:01:50 +01:00
}
PPCSymbolDB& System::GetPPCSymbolDB() const
{
return m_impl->m_power_pc.GetSymbolDB();
}
ProcessorInterface::ProcessorInterfaceManager& System::GetProcessorInterface() const
{
return m_impl->m_processor_interface;
}
2023-03-12 14:20:32 +01:00
SerialInterface::SerialInterfaceManager& System::GetSerialInterface() const
{
2023-03-12 14:20:32 +01:00
return m_impl->m_serial_interface;
}
2022-09-14 01:11:04 +02:00
Sram& System::GetSRAM() const
{
return m_impl->m_sram;
}
SystemTimers::SystemTimersManager& System::GetSystemTimers() const
{
return m_impl->m_system_timers;
}
VertexShaderManager& System::GetVertexShaderManager() const
{
return m_impl->m_vertex_shader_manager;
}
XFStateManager& System::GetXFStateManager() const
{
return m_impl->m_xf_state_manager;
}
2023-03-10 22:14:54 +01:00
VideoInterface::VideoInterfaceManager& System::GetVideoInterface() const
{
2023-03-10 22:14:54 +01:00
return m_impl->m_video_interface;
}
2023-03-20 01:22:09 -05:00
VideoCommon::CustomAssetLoader& System::GetCustomAssetLoader() const
{
return m_impl->m_custom_asset_loader;
}
2020-12-19 22:32:55 -05:00
} // namespace Core