|
|
@@ -145,7 +145,7 @@ struct System::Impl {
|
|
|
}
|
|
|
|
|
|
ResultStatus Init(System& system, Frontend::EmuWindow& emu_window) {
|
|
|
- LOG_DEBUG(HW_Memory, "initialized OK");
|
|
|
+ LOG_DEBUG(Core, "initialized OK");
|
|
|
|
|
|
device_memory = std::make_unique<Core::DeviceMemory>();
|
|
|
|
|
|
@@ -208,9 +208,11 @@ struct System::Impl {
|
|
|
return ResultStatus::Success;
|
|
|
}
|
|
|
|
|
|
- ResultStatus Load(System& system, Frontend::EmuWindow& emu_window,
|
|
|
- const std::string& filepath) {
|
|
|
- app_loader = Loader::GetLoader(system, GetGameFileFromPath(virtual_filesystem, filepath));
|
|
|
+ ResultStatus Load(System& system, Frontend::EmuWindow& emu_window, const std::string& filepath,
|
|
|
+ std::size_t program_index) {
|
|
|
+ app_loader = Loader::GetLoader(system, GetGameFileFromPath(virtual_filesystem, filepath),
|
|
|
+ program_index);
|
|
|
+
|
|
|
if (!app_loader) {
|
|
|
LOG_CRITICAL(Core, "Failed to obtain loader for {}!", filepath);
|
|
|
return ResultStatus::ErrorGetLoader;
|
|
|
@@ -416,6 +418,8 @@ struct System::Impl {
|
|
|
bool is_multicore{};
|
|
|
bool is_async_gpu{};
|
|
|
|
|
|
+ ExecuteProgramCallback execute_program_callback;
|
|
|
+
|
|
|
std::array<u64, Core::Hardware::NUM_CPU_CORES> dynarmic_ticks{};
|
|
|
std::array<MicroProfileToken, Core::Hardware::NUM_CPU_CORES> microprofile_dynarmic{};
|
|
|
};
|
|
|
@@ -451,8 +455,9 @@ void System::Shutdown() {
|
|
|
impl->Shutdown();
|
|
|
}
|
|
|
|
|
|
-System::ResultStatus System::Load(Frontend::EmuWindow& emu_window, const std::string& filepath) {
|
|
|
- return impl->Load(*this, emu_window, filepath);
|
|
|
+System::ResultStatus System::Load(Frontend::EmuWindow& emu_window, const std::string& filepath,
|
|
|
+ std::size_t program_index) {
|
|
|
+ return impl->Load(*this, emu_window, filepath, program_index);
|
|
|
}
|
|
|
|
|
|
bool System::IsPoweredOn() const {
|
|
|
@@ -789,4 +794,16 @@ bool System::IsMulticore() const {
|
|
|
return impl->is_multicore;
|
|
|
}
|
|
|
|
|
|
+void System::RegisterExecuteProgramCallback(ExecuteProgramCallback&& callback) {
|
|
|
+ impl->execute_program_callback = std::move(callback);
|
|
|
+}
|
|
|
+
|
|
|
+void System::ExecuteProgram(std::size_t program_index) {
|
|
|
+ if (impl->execute_program_callback) {
|
|
|
+ impl->execute_program_callback(program_index);
|
|
|
+ } else {
|
|
|
+ LOG_CRITICAL(Core, "execute_program_callback must be initialized by the frontend");
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
} // namespace Core
|