From ed4c715a9f7861a8cfc15c3015402637929f7aaa Mon Sep 17 00:00:00 2001 From: zeromus Date: Sun, 14 Sep 2014 18:39:26 +0000 Subject: [PATCH] add ROM memorydomain to n64 --- .../Nintendo/N64/N64.IMemoryDomains.cs | 2 ++ .../N64/NativeAPI/mupen64plusCoreApi.cs | 4 +++- .../projects/msvc11/mupen64plus-core.vcxproj | 2 +- .../mupen64plus-core/src/api/debugger.c | 7 +++++++ .../mupen64plus-core/src/api/m64p_types.h | 4 +++- output/dll/mupen64plus.dll | Bin 432640 -> 432640 bytes 6 files changed, 16 insertions(+), 3 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IMemoryDomains.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IMemoryDomains.cs index a620c52357..250a3facde 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IMemoryDomains.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.IMemoryDomains.cs @@ -81,6 +81,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64 //zero 07-sep-2014 - made RDRAM big endian domain, but none others. others need to be studied individually. MakeMemoryDomain("RDRAM", mupen64plusApi.N64_MEMORY.RDRAM, MemoryDomain.Endian.Big, true); + MakeMemoryDomain("ROM", mupen64plusApi.N64_MEMORY.THE_ROM, MemoryDomain.Endian.Big, true); + MakeMemoryDomain("PI Register", mupen64plusApi.N64_MEMORY.PI_REG, MemoryDomain.Endian.Little); MakeMemoryDomain("SI Register", mupen64plusApi.N64_MEMORY.SI_REG, MemoryDomain.Endian.Little); MakeMemoryDomain("VI Register", mupen64plusApi.N64_MEMORY.VI_REG, MemoryDomain.Endian.Little); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeAPI/mupen64plusCoreApi.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeAPI/mupen64plusCoreApi.cs index 2c8f31c0f3..dac999c33c 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeAPI/mupen64plusCoreApi.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeAPI/mupen64plusCoreApi.cs @@ -112,7 +112,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi MEMPAK1, MEMPAK2, MEMPAK3, - MEMPAK4 + MEMPAK4, + + THE_ROM } // Core Specifc functions diff --git a/libmupen64plus/mupen64plus-core/projects/msvc11/mupen64plus-core.vcxproj b/libmupen64plus/mupen64plus-core/projects/msvc11/mupen64plus-core.vcxproj index 2f0abf07b1..2a76f73588 100644 --- a/libmupen64plus/mupen64plus-core/projects/msvc11/mupen64plus-core.vcxproj +++ b/libmupen64plus/mupen64plus-core/projects/msvc11/mupen64plus-core.vcxproj @@ -93,7 +93,6 @@ Level3 - ProgramDatabase Default true @@ -105,6 +104,7 @@ true true MachineX86 + /PDBALTPATH:%_PDB%.%_EXT% %(AdditionalOptions) diff --git a/libmupen64plus/mupen64plus-core/src/api/debugger.c b/libmupen64plus/mupen64plus-core/src/api/debugger.c index 65b4079fdd..81feb83672 100644 --- a/libmupen64plus/mupen64plus-core/src/api/debugger.c +++ b/libmupen64plus/mupen64plus-core/src/api/debugger.c @@ -38,6 +38,7 @@ #include "debugger/debugger.h" #include "memory/memory.h" #include "r4300/r4300.h" +#include "main/rom.h" extern unsigned int op; /* this is in r4300/pure_interp.c */ @@ -231,6 +232,9 @@ EXPORT void * CALL DebugMemGetPointer(m64p_dbg_memptr_type mem_ptr_type) return mempack[2]; case MEMPAK4: return mempack[3]; + + case THE_ROM: + return rom; default: DebugMessage(M64MSG_ERROR, "Bug: DebugMemGetPointer() called with invalid m64p_dbg_memptr_type"); return NULL; @@ -264,6 +268,9 @@ EXPORT int CALL MemGetSize(m64p_dbg_memptr_type mem_ptr_type) return 0x8000; case MEMPAK4: return 0x8000; + + case THE_ROM: + return rom_size; default: DebugMessage(M64MSG_ERROR, "Bug: MemGetSize() called with invalid m64p_dbg_memptr_type"); return NULL; diff --git a/libmupen64plus/mupen64plus-core/src/api/m64p_types.h b/libmupen64plus/mupen64plus-core/src/api/m64p_types.h index 9e96f6fcda..3d101c01d0 100644 --- a/libmupen64plus/mupen64plus-core/src/api/m64p_types.h +++ b/libmupen64plus/mupen64plus-core/src/api/m64p_types.h @@ -269,7 +269,9 @@ typedef enum { MEMPAK1, MEMPAK2, MEMPAK3, - MEMPAK4 + MEMPAK4, + + THE_ROM, } m64p_dbg_memptr_type; typedef enum { diff --git a/output/dll/mupen64plus.dll b/output/dll/mupen64plus.dll index d0b6641c85e79a374a8d65bc27661a8058bff649..c6f4fa969c13d33416992c5a13184cc0df43ad72 100644 GIT binary patch delta 8484 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 delta 8465 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 jl^Eq46%eJ5ij7K&N{`BodN(e+fio_<;hv7~t9