From b86a7748b172586330155072550bd84a7c1522e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20K=C3=B6pcke?= Date: Fri, 1 Apr 2022 00:06:37 +0200 Subject: [PATCH] Interface: Added a function to get/set the ARM9 next instruction (#517) * Interface: Added a function to set the ARM9 next instruction * Comment about potential JIT issues * Interface: Made setting next instructions no-op with JIT --- desmume/src/frontend/interface/interface.cpp | 12 ++++++++++++ desmume/src/frontend/interface/interface.h | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/desmume/src/frontend/interface/interface.cpp b/desmume/src/frontend/interface/interface.cpp index fc730f1ce..bb731db2c 100644 --- a/desmume/src/frontend/interface/interface.cpp +++ b/desmume/src/frontend/interface/interface.cpp @@ -481,6 +481,18 @@ EXPORTED void desmume_memory_write_register(char* register_name, u32 value) } } +EXPORTED u32 desmume_memory_get_next_instruction() +{ + return CommonSettings.use_jit ? 0 : NDS_ARM9.next_instruction; +} + +EXPORTED void desmume_memory_set_next_instruction(u32 value) +{ + if (!CommonSettings.use_jit) { + NDS_ARM9.next_instruction = value; + } +} + INLINE void memory_register_hook(int addr, MemHookType hook_type, int size, memory_cb_fnc cb) { for(unsigned int i = addr; i != addr+size; i++) diff --git a/desmume/src/frontend/interface/interface.h b/desmume/src/frontend/interface/interface.h index 9b868e8a9..d595423c4 100755 --- a/desmume/src/frontend/interface/interface.h +++ b/desmume/src/frontend/interface/interface.h @@ -129,6 +129,12 @@ EXPORTED void desmume_memory_write_long(int address, unsigned long value); EXPORTED u32 desmume_memory_read_register(char* register_name); EXPORTED void desmume_memory_write_register(char* register_name, u32 value); +// Get the next instruction address that the ARM9 processor will execute. +// NOTE: This will NOT work with JIT enabled. NULL will be returned. +EXPORTED u32 desmume_memory_get_next_instruction(); +// Get the next instruction address that the ARM9 processor will execute. Should be combined with setting the PC register (r15). +// NOTE: This is a no-op with JIT enabled. +EXPORTED void desmume_memory_set_next_instruction(u32 value); EXPORTED void desmume_memory_register_write(int address, int size, memory_cb_fnc cb); EXPORTED void desmume_memory_register_read(int address, int size, memory_cb_fnc cb);