aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/memory
diff options
context:
space:
mode:
authorliamwhite <[email protected]>2024-02-09 11:47:34 -0500
committerGitHub <[email protected]>2024-02-09 11:47:34 -0500
commita133eadf0679ba55615d13cf2dfc3df5b1ea6f4b (patch)
tree661c419d5705c3f7f023fe4a5310a9e6d112047b /src/core/memory
parent89dd0fa932ce8ef114d4bddb47587195f9360aa2 (diff)
parentc52d7cc694047eea48714e8046bb150592d67e56 (diff)
downloadyuzu-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.cpp15
-rw-r--r--src/core/memory/cheat_engine.h2
-rw-r--r--src/core/memory/dmnt_cheat_vm.cpp4
-rw-r--r--src/core/memory/dmnt_cheat_vm.h3
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;
};