add events.onexecvalue
This commit is contained in:
parent
4c5f5c4eab
commit
9f4323c06b
File diff suppressed because it is too large
Load Diff
|
@ -391,6 +391,7 @@ void CDebuggerUI::CPUStepStarted()
|
||||||
uint32_t JumpToLocation = R4300iOp::m_JumpToLocation;
|
uint32_t JumpToLocation = R4300iOp::m_JumpToLocation;
|
||||||
|
|
||||||
m_ScriptSystem->HookCPUExec()->InvokeByParamInRange(PROGRAM_COUNTER);
|
m_ScriptSystem->HookCPUExec()->InvokeByParamInRange(PROGRAM_COUNTER);
|
||||||
|
m_ScriptSystem->HookCPUExecValue()->InvokeByParamInRangeWithMaskedValue(PROGRAM_COUNTER, R4300iOp::m_Opcode.Hex);
|
||||||
|
|
||||||
// Memory breakpoints
|
// Memory breakpoints
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,8 @@
|
||||||
#include "ScriptInstance.h"
|
#include "ScriptInstance.h"
|
||||||
#include "ScriptSystem.h"
|
#include "ScriptSystem.h"
|
||||||
|
|
||||||
int CScriptHook::Add(CScriptInstance* scriptInstance, void* heapptr, uint32_t param, uint32_t param2, bool bOnce)
|
int CScriptHook::Add(CScriptInstance* scriptInstance, void* heapptr, uint32_t param, uint32_t param2,
|
||||||
|
uint32_t param3, uint32_t param4, bool bOnce)
|
||||||
{
|
{
|
||||||
JSCALLBACK jsCallback;
|
JSCALLBACK jsCallback;
|
||||||
jsCallback.scriptInstance = scriptInstance;
|
jsCallback.scriptInstance = scriptInstance;
|
||||||
|
@ -12,6 +13,8 @@ int CScriptHook::Add(CScriptInstance* scriptInstance, void* heapptr, uint32_t pa
|
||||||
jsCallback.callbackId = m_ScriptSystem->GetNextCallbackId();
|
jsCallback.callbackId = m_ScriptSystem->GetNextCallbackId();
|
||||||
jsCallback.param = param;
|
jsCallback.param = param;
|
||||||
jsCallback.param2 = param2;
|
jsCallback.param2 = param2;
|
||||||
|
jsCallback.param3 = param3;
|
||||||
|
jsCallback.param4 = param4;
|
||||||
jsCallback.bOnce = bOnce;
|
jsCallback.bOnce = bOnce;
|
||||||
m_Callbacks.push_back(jsCallback);
|
m_Callbacks.push_back(jsCallback);
|
||||||
return jsCallback.callbackId;
|
return jsCallback.callbackId;
|
||||||
|
@ -56,6 +59,22 @@ void CScriptHook::InvokeByParamInRange(uint32_t param)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CScriptHook::InvokeByParamInRangeWithMaskedValue(uint32_t param, uint32_t value)
|
||||||
|
{
|
||||||
|
int nCallbacks = m_Callbacks.size();
|
||||||
|
for (int i = 0; i < nCallbacks; i++)
|
||||||
|
{
|
||||||
|
if (param == m_Callbacks[i].param || (param >= m_Callbacks[i].param && param < m_Callbacks[i].param2))
|
||||||
|
{
|
||||||
|
if ((m_Callbacks[i].param3 & m_Callbacks[i].param4) == (value & m_Callbacks[i].param4))
|
||||||
|
{
|
||||||
|
m_Callbacks[i].scriptInstance->Invoke(m_Callbacks[i].heapptr, param);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void CScriptHook::InvokeAll()
|
void CScriptHook::InvokeAll()
|
||||||
{
|
{
|
||||||
int nCallbacks = m_Callbacks.size();
|
int nCallbacks = m_Callbacks.size();
|
||||||
|
|
|
@ -13,6 +13,8 @@ private:
|
||||||
void* heapptr;
|
void* heapptr;
|
||||||
uint32_t param;
|
uint32_t param;
|
||||||
uint32_t param2;
|
uint32_t param2;
|
||||||
|
uint32_t param3;
|
||||||
|
uint32_t param4;
|
||||||
int callbackId;
|
int callbackId;
|
||||||
bool bOnce;
|
bool bOnce;
|
||||||
} JSCALLBACK;
|
} JSCALLBACK;
|
||||||
|
@ -22,18 +24,21 @@ private:
|
||||||
//int m_NextCallbackId;
|
//int m_NextCallbackId;
|
||||||
vector<JSCALLBACK> m_Callbacks;
|
vector<JSCALLBACK> m_Callbacks;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CScriptHook(CScriptSystem* scriptSystem);
|
CScriptHook(CScriptSystem* scriptSystem);
|
||||||
~CScriptHook();
|
~CScriptHook();
|
||||||
int Add(CScriptInstance* scriptInstance, void* heapptr, uint32_t param = 0, uint32_t param2 = 0, bool bOnce = false);
|
int Add(CScriptInstance* scriptInstance, void* heapptr, uint32_t param = 0, uint32_t param2 = 0,
|
||||||
|
uint32_t param3 = 0, uint32_t param4 = 0, bool bOnce = false);
|
||||||
void InvokeAll();
|
void InvokeAll();
|
||||||
void InvokeById(int callbackId);
|
void InvokeById(int callbackId);
|
||||||
void InvokeByParam(uint32_t param);
|
void InvokeByParam(uint32_t param);
|
||||||
/* invoke if param >= cb.param && param < cb.param2*/
|
/* invoke if param >= cb.param && param < cb.param2*/
|
||||||
void InvokeByParamInRange(uint32_t param);
|
void InvokeByParamInRange(uint32_t param);
|
||||||
|
/* invoke if param >= cb.param && param < cb.param2 && (value & cb.param4) == cb.param3 */
|
||||||
|
void InvokeByParamInRangeWithMaskedValue(uint32_t param, uint32_t value);
|
||||||
void RemoveById(int callbackId);
|
void RemoveById(int callbackId);
|
||||||
void RemoveByParam(uint32_t tag);
|
void RemoveByParam(uint32_t tag);
|
||||||
void RemoveByInstance(CScriptInstance* scriptInstance);
|
void RemoveByInstance(CScriptInstance* scriptInstance);
|
||||||
bool HasContext(CScriptInstance* scriptInstance);
|
bool HasContext(CScriptInstance* scriptInstance);
|
||||||
//bool HasTag(uint32_t tag);
|
//bool HasTag(uint32_t tag);
|
||||||
};
|
};
|
||||||
|
|
|
@ -741,6 +741,8 @@ duk_ret_t CScriptInstance::js_AddCallback(duk_context* ctx)
|
||||||
void* heapptr;
|
void* heapptr;
|
||||||
uint32_t param = 0;
|
uint32_t param = 0;
|
||||||
uint32_t param2 = 0;
|
uint32_t param2 = 0;
|
||||||
|
uint32_t param3 = 0;
|
||||||
|
uint32_t param4 = 0;
|
||||||
bool bOnce = false;
|
bool bOnce = false;
|
||||||
|
|
||||||
int argc = duk_get_top(ctx);
|
int argc = duk_get_top(ctx);
|
||||||
|
@ -748,25 +750,18 @@ duk_ret_t CScriptInstance::js_AddCallback(duk_context* ctx)
|
||||||
hookId = duk_get_string(ctx, 0);
|
hookId = duk_get_string(ctx, 0);
|
||||||
heapptr = duk_get_heapptr(ctx, 1);
|
heapptr = duk_get_heapptr(ctx, 1);
|
||||||
|
|
||||||
if (argc >= 3)
|
if (argc >= 3) param = duk_get_uint(ctx, 2);
|
||||||
{
|
if (argc >= 4) param2 = duk_get_uint(ctx, 3);
|
||||||
param = duk_get_uint(ctx, 2);
|
if (argc >= 5) param3 = duk_get_uint(ctx, 4);
|
||||||
if (argc > 3)
|
if (argc >= 6) param4 = duk_get_uint(ctx, 5);
|
||||||
{
|
if (argc >= 7) bOnce = (duk_get_boolean(ctx, 6) != 0);
|
||||||
param2 = duk_get_uint(ctx, 3);
|
|
||||||
if (argc > 4)
|
|
||||||
{
|
|
||||||
bOnce = duk_get_boolean(ctx, 4) != 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int callbackId = -1;
|
int callbackId = -1;
|
||||||
|
|
||||||
CScriptHook* hook = _this->m_ScriptSystem->GetHook(hookId);
|
CScriptHook* hook = _this->m_ScriptSystem->GetHook(hookId);
|
||||||
if (hook != NULL)
|
if (hook != NULL)
|
||||||
{
|
{
|
||||||
callbackId = hook->Add(_this, heapptr, param, param2, bOnce);
|
callbackId = hook->Add(_this, heapptr, param, param2, param3, param4, bOnce);
|
||||||
}
|
}
|
||||||
|
|
||||||
duk_pop_n(ctx, argc);
|
duk_pop_n(ctx, argc);
|
||||||
|
|
|
@ -25,6 +25,7 @@ CScriptSystem::CScriptSystem(CDebuggerUI* debugger)
|
||||||
m_Debugger = debugger;
|
m_Debugger = debugger;
|
||||||
|
|
||||||
m_HookCPUExec = new CScriptHook(this);
|
m_HookCPUExec = new CScriptHook(this);
|
||||||
|
m_HookCPUExecValue = new CScriptHook(this);
|
||||||
m_HookCPURead = new CScriptHook(this);
|
m_HookCPURead = new CScriptHook(this);
|
||||||
m_HookCPUWrite = new CScriptHook(this);
|
m_HookCPUWrite = new CScriptHook(this);
|
||||||
m_HookFrameDrawn = new CScriptHook(this);
|
m_HookFrameDrawn = new CScriptHook(this);
|
||||||
|
@ -33,6 +34,7 @@ CScriptSystem::CScriptSystem(CDebuggerUI* debugger)
|
||||||
RegisterHook("read", m_HookCPURead);
|
RegisterHook("read", m_HookCPURead);
|
||||||
RegisterHook("write", m_HookCPUWrite);
|
RegisterHook("write", m_HookCPUWrite);
|
||||||
RegisterHook("draw", m_HookFrameDrawn);
|
RegisterHook("draw", m_HookFrameDrawn);
|
||||||
|
RegisterHook("execvalue", m_HookCPUExecValue);
|
||||||
|
|
||||||
HMODULE hInst = GetModuleHandle(NULL);
|
HMODULE hInst = GetModuleHandle(NULL);
|
||||||
HRSRC hRes = FindResource(hInst, MAKEINTRESOURCE(IDR_JSAPI_TEXT), "TEXT");
|
HRSRC hRes = FindResource(hInst, MAKEINTRESOURCE(IDR_JSAPI_TEXT), "TEXT");
|
||||||
|
|
|
@ -54,6 +54,7 @@ private:
|
||||||
CScriptHook* m_HookCPUExec;
|
CScriptHook* m_HookCPUExec;
|
||||||
CScriptHook* m_HookCPURead;
|
CScriptHook* m_HookCPURead;
|
||||||
CScriptHook* m_HookCPUWrite;
|
CScriptHook* m_HookCPUWrite;
|
||||||
|
CScriptHook* m_HookCPUExecValue;
|
||||||
|
|
||||||
CScriptHook* m_HookFrameDrawn;
|
CScriptHook* m_HookFrameDrawn;
|
||||||
|
|
||||||
|
@ -120,6 +121,11 @@ public:
|
||||||
return m_HookCPUWrite;
|
return m_HookCPUWrite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CScriptHook* HookCPUExecValue()
|
||||||
|
{
|
||||||
|
return m_HookCPUExecValue;
|
||||||
|
}
|
||||||
|
|
||||||
CScriptHook* HookFrameDrawn()
|
CScriptHook* HookFrameDrawn()
|
||||||
{
|
{
|
||||||
return m_HookFrameDrawn;
|
return m_HookFrameDrawn;
|
||||||
|
|
Loading…
Reference in New Issue