Browse Source
Merge pull request #12927 from german77/cheat-pause
dmnt: cheat: Add pause and resume support
pull/15/merge
liamwhite
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with
22 additions and
2 deletions
-
src/core/memory/cheat_engine.cpp
-
src/core/memory/cheat_engine.h
-
src/core/memory/dmnt_cheat_vm.cpp
-
src/core/memory/dmnt_cheat_vm.h
|
|
|
@ -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); |
|
|
|
} |
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
|
|
|
|
@ -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; |
|
|
|
|
|
|
|
@ -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; |
|
|
|
}; |
|
|
|
|