Merge branch 'domainedmemoryhooks' of https://github.com/TASVideos/BizHawk into domainedmemoryhooks
This commit is contained in:
commit
635c1cdd05
|
@ -115,6 +115,21 @@ namespace BizHawk.Emulation.Common
|
|||
|
||||
public bool HasExecutes => _hasExecutes;
|
||||
|
||||
public bool HasReadsForScope(string scope)
|
||||
{
|
||||
return _reads.Where(e => e.Scope == scope).Any();
|
||||
}
|
||||
|
||||
public bool HasWritesForScope(string scope)
|
||||
{
|
||||
return _writes.Where(e => e.Scope == scope).Any();
|
||||
}
|
||||
|
||||
public bool HasExecutesForScope(string scope)
|
||||
{
|
||||
return _execs.Where(e => e.Scope == scope).Any();
|
||||
}
|
||||
|
||||
private void UpdateHasVariables()
|
||||
{
|
||||
_hasReads = _reads.Count > 0;
|
||||
|
|
|
@ -37,6 +37,21 @@ namespace BizHawk.Emulation.Common
|
|||
/// </summary>
|
||||
bool HasExecutes { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether or not there are currently any read hooks
|
||||
/// </summary>
|
||||
bool HasReadsForScope(string scope);
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether or not there are currently any write hooks
|
||||
/// </summary>
|
||||
bool HasWritesForScope(string scope);
|
||||
|
||||
/// <summary>
|
||||
/// Gets a value indicating whether or not there are currently any execute hooks
|
||||
/// </summary>
|
||||
bool HasExecutesForScope(string scope);
|
||||
|
||||
/// <summary>
|
||||
/// Adds a callback for the given type to the given address
|
||||
/// If no address is specified the callback will be hooked to all addresses
|
||||
|
|
|
@ -151,6 +151,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
|||
public Action<uint> ReadHook, ExecHook;
|
||||
public Action<uint, byte> WriteHook;
|
||||
|
||||
public Action<uint> ReadHook_SMP, ExecHook_SMP;
|
||||
public Action<uint, byte> WriteHook_SMP;
|
||||
|
||||
public enum eCDLog_AddrType
|
||||
{
|
||||
CARTROM, CARTRAM, WRAM, APURAM,
|
||||
|
|
|
@ -25,6 +25,16 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
|||
WriteHook(_comm->addr, (byte)_comm->value);
|
||||
break;
|
||||
|
||||
case eMessage.eMessage_BRK_hook_exec_smp:
|
||||
ExecHook_SMP(_comm->addr);
|
||||
break;
|
||||
case eMessage.eMessage_BRK_hook_read_smp:
|
||||
ReadHook_SMP(_comm->addr);
|
||||
break;
|
||||
case eMessage.eMessage_BRK_hook_write_smp:
|
||||
WriteHook_SMP(_comm->addr, (byte)_comm->value);
|
||||
break;
|
||||
|
||||
//not supported yet
|
||||
case eMessage.eMessage_BRK_hook_nmi:
|
||||
break;
|
||||
|
|
|
@ -24,6 +24,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
|||
eMessage_QUERY_state_hook_write,
|
||||
eMessage_QUERY_state_hook_nmi,
|
||||
eMessage_QUERY_state_hook_irq,
|
||||
eMessage_QUERY_state_hook_exec_smp,
|
||||
eMessage_QUERY_state_hook_read_smp,
|
||||
eMessage_QUERY_state_hook_write_smp,
|
||||
eMessage_QUERY_enable_trace,
|
||||
eMessage_QUERY_enable_scanline,
|
||||
eMessage_QUERY_enable_audio,
|
||||
|
@ -63,6 +66,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
|||
eMessage_BRK_hook_write,
|
||||
eMessage_BRK_hook_nmi,
|
||||
eMessage_BRK_hook_irq,
|
||||
eMessage_BRK_hook_exec_smp,
|
||||
eMessage_BRK_hook_read_smp,
|
||||
eMessage_BRK_hook_write_smp,
|
||||
eMessage_BRK_scanlineStart,
|
||||
};
|
||||
|
||||
|
|
|
@ -63,7 +63,10 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
|||
{
|
||||
ReadHook = ReadHook,
|
||||
ExecHook = ExecHook,
|
||||
WriteHook = WriteHook
|
||||
WriteHook = WriteHook,
|
||||
ReadHook_SMP = ReadHook_SMP,
|
||||
ExecHook_SMP = ExecHook_SMP,
|
||||
WriteHook_SMP = WriteHook_SMP,
|
||||
};
|
||||
|
||||
ScanlineHookManager = new MyScanlineHookManager(this);
|
||||
|
@ -383,6 +386,21 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
|||
// RefreshMemoryCallbacks();
|
||||
}
|
||||
|
||||
private void ReadHook_SMP(uint addr)
|
||||
{
|
||||
MemoryCallbacks.CallReads(addr, "SMP");
|
||||
}
|
||||
|
||||
private void ExecHook_SMP(uint addr)
|
||||
{
|
||||
MemoryCallbacks.CallExecutes(addr, "SMP");
|
||||
}
|
||||
|
||||
private void WriteHook_SMP(uint addr, byte val)
|
||||
{
|
||||
MemoryCallbacks.CallWrites(addr, "SMP");
|
||||
}
|
||||
|
||||
private enum LoadParamType
|
||||
{
|
||||
Normal, SuperGameBoy
|
||||
|
@ -557,9 +575,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES
|
|||
private void RefreshMemoryCallbacks(bool suppress)
|
||||
{
|
||||
var mcs = MemoryCallbacks;
|
||||
Api.QUERY_set_state_hook_exec(!suppress && mcs.HasExecutes);
|
||||
Api.QUERY_set_state_hook_read(!suppress && mcs.HasReads);
|
||||
Api.QUERY_set_state_hook_write(!suppress && mcs.HasWrites);
|
||||
Api.QUERY_set_state_hook_exec(!suppress && mcs.HasExecutesForScope("System Bus"));
|
||||
Api.QUERY_set_state_hook_read(!suppress && mcs.HasReadsForScope("System Bus"));
|
||||
Api.QUERY_set_state_hook_write(!suppress && mcs.HasWritesForScope("System Bus"));
|
||||
}
|
||||
|
||||
//public byte[] snes_get_memory_data_read(LibsnesApi.SNES_MEMORY id)
|
||||
|
|
Binary file not shown.
|
@ -18,6 +18,12 @@ struct SMP : public Processor, public SMPcore {
|
|||
~SMP();
|
||||
void initialize();
|
||||
|
||||
struct Debugger {
|
||||
hook<void (uint16)> op_exec;
|
||||
hook<void (uint16)> op_read;
|
||||
hook<void (uint16, uint8)> op_write;
|
||||
} debugger;
|
||||
|
||||
privileged:
|
||||
#include "memory/memory.hpp"
|
||||
#include "timing/timing.hpp"
|
||||
|
@ -50,12 +56,6 @@ privileged:
|
|||
static void Enter();
|
||||
|
||||
friend class SMPcore;
|
||||
|
||||
struct Debugger {
|
||||
hook<void (uint16)> op_exec;
|
||||
hook<void (uint16)> op_read;
|
||||
hook<void (uint16, uint8)> op_write;
|
||||
} debugger;
|
||||
};
|
||||
|
||||
extern SMP smp;
|
||||
|
|
|
@ -47,6 +47,9 @@ enum eMessage : int32
|
|||
eMessage_QUERY_state_hook_write,
|
||||
eMessage_QUERY_state_hook_nmi,
|
||||
eMessage_QUERY_state_hook_irq,
|
||||
eMessage_QUERY_state_hook_exec_smp,
|
||||
eMessage_QUERY_state_hook_read_smp,
|
||||
eMessage_QUERY_state_hook_write_smp,
|
||||
eMessage_QUERY_enable_trace,
|
||||
eMessage_QUERY_enable_scanline,
|
||||
eMessage_QUERY_enable_audio,
|
||||
|
@ -86,6 +89,9 @@ enum eMessage : int32
|
|||
eMessage_BRK_hook_write,
|
||||
eMessage_BRK_hook_nmi,
|
||||
eMessage_BRK_hook_irq,
|
||||
eMessage_BRK_hook_exec_smp,
|
||||
eMessage_BRK_hook_read_smp,
|
||||
eMessage_BRK_hook_write_smp,
|
||||
eMessage_BRK_scanlineStart,
|
||||
};
|
||||
|
||||
|
@ -348,6 +354,25 @@ static void debug_op_irq()
|
|||
BREAK(eMessage_BRK_hook_irq);
|
||||
}
|
||||
|
||||
static void debug_op_exec_smp(uint24 addr)
|
||||
{
|
||||
comm.addr = addr;
|
||||
BREAK(eMessage_BRK_hook_exec_smp);
|
||||
}
|
||||
|
||||
static void debug_op_read_smp(uint24 addr)
|
||||
{
|
||||
comm.addr = addr;
|
||||
BREAK(eMessage_BRK_hook_read_smp);
|
||||
}
|
||||
|
||||
static void debug_op_write_smp(uint24 addr, uint8 value)
|
||||
{
|
||||
comm.addr = addr;
|
||||
comm.value = value;
|
||||
BREAK(eMessage_BRK_hook_write_smp);
|
||||
}
|
||||
|
||||
void pwrap_init()
|
||||
{
|
||||
//bsnes's interface initialization calls into this after initializing itself, so we can get a chance to mod it for pwrap functionalities
|
||||
|
@ -455,6 +480,15 @@ void QUERY_state_hook_nmi() {
|
|||
void QUERY_state_hook_irq() {
|
||||
SNES::cpu.debugger.op_irq = comm.value ? debug_op_irq : hook<void()>();
|
||||
}
|
||||
void QUERY_state_hook_exec_smp() {
|
||||
SNES::smp.debugger.op_exec = comm.value ? debug_op_exec_smp : hook<void(uint24)>();
|
||||
}
|
||||
void QUERY_state_hook_read_smp() {
|
||||
SNES::smp.debugger.op_read = comm.value ? debug_op_read_smp : hook<void(uint24)>();
|
||||
}
|
||||
void QUERY_state_hook_write_smp() {
|
||||
SNES::smp.debugger.op_write = comm.value ? debug_op_write_smp : hook<void(uint24, uint8)>();
|
||||
}
|
||||
void QUERY_state_enable_trace() {
|
||||
snes_set_trace_callback(comm.value, snes_trace);
|
||||
}
|
||||
|
@ -535,6 +569,9 @@ const Action kHandlers_QUERY[] = {
|
|||
QUERY_state_hook_exec, //eMessage_QUERY_state_hook_exec
|
||||
QUERY_state_hook_read, //eMessage_QUERY_state_hook_read
|
||||
QUERY_state_hook_write, //eMessage_QUERY_state_hook_write
|
||||
QUERY_state_hook_exec_smp, //eMessage_QUERY_state_hook_exec_smp
|
||||
QUERY_state_hook_read_smp, //eMessage_QUERY_state_hook_read_smp
|
||||
QUERY_state_hook_write_smp, //eMessage_QUERY_state_hook_write_smp
|
||||
QUERY_state_hook_nmi, //eMessage_QUERY_state_hook_nmi
|
||||
QUERY_state_hook_irq, //eMessage_QUERY_state_hook_irq
|
||||
QUERY_state_enable_trace, //eMessage_QUERY_enable_trace TODO - consolidate enable flags
|
||||
|
|
Loading…
Reference in New Issue