diff options
author | liamwhite <[email protected]> | 2024-02-09 11:47:34 -0500 |
---|---|---|
committer | GitHub <[email protected]> | 2024-02-09 11:47:34 -0500 |
commit | a133eadf0679ba55615d13cf2dfc3df5b1ea6f4b (patch) | |
tree | 661c419d5705c3f7f023fe4a5310a9e6d112047b /src/core/memory | |
parent | 89dd0fa932ce8ef114d4bddb47587195f9360aa2 (diff) | |
parent | c52d7cc694047eea48714e8046bb150592d67e56 (diff) | |
download | yuzu-mainline-a133eadf0679ba55615d13cf2dfc3df5b1ea6f4b.tar.gz yuzu-mainline-a133eadf0679ba55615d13cf2dfc3df5b1ea6f4b.zip |
Merge pull request #12927 from german77/cheat-pause
dmnt: cheat: Add pause and resume support
Diffstat (limited to 'src/core/memory')
-rw-r--r-- | src/core/memory/cheat_engine.cpp | 15 | ||||
-rw-r--r-- | src/core/memory/cheat_engine.h | 2 | ||||
-rw-r--r-- | src/core/memory/dmnt_cheat_vm.cpp | 4 | ||||
-rw-r--r-- | src/core/memory/dmnt_cheat_vm.h | 3 |
4 files changed, 22 insertions, 2 deletions
diff --git a/src/core/memory/cheat_engine.cpp b/src/core/memory/cheat_engine.cpp index 470521f44..b84b57d92 100644 --- a/src/core/memory/cheat_engine.cpp +++ b/src/core/memory/cheat_engine.cpp @@ -11,6 +11,7 @@ #include "core/hle/kernel/k_page_table.h" #include "core/hle/kernel/k_process.h" #include "core/hle/kernel/k_process_page_table.h" +#include "core/hle/kernel/svc_types.h" #include "core/hle/service/hid/hid_server.h" #include "core/hle/service/sm/sm.h" #include "core/memory.h" @@ -87,6 +88,20 @@ u64 StandardVmCallbacks::HidKeysDown() { return static_cast<u64>(press_state & HID::NpadButton::All); } +void StandardVmCallbacks::PauseProcess() { + if (system.ApplicationProcess()->IsSuspended()) { + return; + } + system.ApplicationProcess()->SetActivity(Kernel::Svc::ProcessActivity::Paused); +} + +void StandardVmCallbacks::ResumeProcess() { + if (!system.ApplicationProcess()->IsSuspended()) { + return; + } + system.ApplicationProcess()->SetActivity(Kernel::Svc::ProcessActivity::Runnable); +} + void StandardVmCallbacks::DebugLog(u8 id, u64 value) { LOG_INFO(CheatEngine, "Cheat triggered DebugLog: ID '{:01X}' Value '{:016X}'", id, value); } diff --git a/src/core/memory/cheat_engine.h b/src/core/memory/cheat_engine.h index 619cabaa2..f52f2be7c 100644 --- a/src/core/memory/cheat_engine.h +++ b/src/core/memory/cheat_engine.h @@ -30,6 +30,8 @@ public: void MemoryReadUnsafe(VAddr address, void* data, u64 size) override; void MemoryWriteUnsafe(VAddr address, const void* data, u64 size) override; u64 HidKeysDown() override; + void PauseProcess() override; + void ResumeProcess() override; void DebugLog(u8 id, u64 value) override; void CommandLog(std::string_view data) override; diff --git a/src/core/memory/dmnt_cheat_vm.cpp b/src/core/memory/dmnt_cheat_vm.cpp index 8bc81e72d..f7097d01d 100644 --- a/src/core/memory/dmnt_cheat_vm.cpp +++ b/src/core/memory/dmnt_cheat_vm.cpp @@ -1205,9 +1205,9 @@ void DmntCheatVm::Execute(const CheatProcessMetadata& metadata) { static_registers[rw_static_reg->static_idx] = registers[rw_static_reg->idx]; } } else if (std::holds_alternative<PauseProcessOpcode>(cur_opcode.opcode)) { - // TODO: Pause cheat process + callbacks->PauseProcess(); } else if (std::holds_alternative<ResumeProcessOpcode>(cur_opcode.opcode)) { - // TODO: Resume cheat process + callbacks->ResumeProcess(); } else if (auto debug_log = std::get_if<DebugLogOpcode>(&cur_opcode.opcode)) { // Read value from memory. u64 log_value = 0; diff --git a/src/core/memory/dmnt_cheat_vm.h b/src/core/memory/dmnt_cheat_vm.h index fed6a24ad..1c1ed1259 100644 --- a/src/core/memory/dmnt_cheat_vm.h +++ b/src/core/memory/dmnt_cheat_vm.h @@ -271,6 +271,9 @@ public: virtual u64 HidKeysDown() = 0; + virtual void PauseProcess() = 0; + virtual void ResumeProcess() = 0; + virtual void DebugLog(u8 id, u64 value) = 0; virtual void CommandLog(std::string_view data) = 0; }; |