diff options
| author | Oxore <oxore@protonmail.com> | 2022-09-26 01:32:22 +0300 |
|---|---|---|
| committer | Oxore <oxore@protonmail.com> | 2022-09-26 01:35:42 +0300 |
| commit | ab0fddd81a4c2cf6075f6a59014a1f12eab19c70 (patch) | |
| tree | 17da7138346289a84b2821eac22b8c22104be9a0 /m68k_debugging.cpp | |
| parent | 3acfbd6f634a1d48045fb6b2a2c1031efebe80e4 (diff) | |
Fix watchpoints, add PC backtrace
Diffstat (limited to 'm68k_debugging.cpp')
| -rw-r--r-- | m68k_debugging.cpp | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/m68k_debugging.cpp b/m68k_debugging.cpp index d02e463..7b7c84c 100644 --- a/m68k_debugging.cpp +++ b/m68k_debugging.cpp @@ -9,7 +9,7 @@ #include <cstdlib> #include <cassert> -static inline m68k_register_t ConvertRegisterId(M68KRegister register_id) +static inline m68k_register_t ConvertRegisterId(const M68KRegister register_id) { switch (register_id) { case M68KRegister::kD0: @@ -60,7 +60,7 @@ static inline m68k_register_t ConvertRegisterId(M68KRegister register_id) UNREACHABLE; } -uint32_t M68KDebuggingControl::GetRegister(M68KRegister register_id) const +uint32_t M68KDebuggingControl::GetRegister(const M68KRegister register_id) const { return m68k_get_reg(nullptr, ConvertRegisterId(register_id)); } @@ -92,7 +92,7 @@ M68KCPUState M68KDebuggingControl::GetCPUState() const }; } -void M68KDebuggingControl::SetRegister(M68KRegister register_id, uint32_t value) +void M68KDebuggingControl::SetRegister(const M68KRegister register_id, const uint32_t value) { return m68k_set_reg(ConvertRegisterId(register_id), value); } @@ -114,38 +114,44 @@ void M68KDebuggingControl::Pause() abort(); } -uint8_t M68KDebuggingControl::Read8(uint32_t address) const +#define MASK_24(X) ((X) & 0x00ffffff) + +uint8_t M68KDebuggingControl::Read8(const uint32_t address) const { - return static_cast<uint8_t>(m68k_read_memory_8(address & 0x00FFFFFF)); + return static_cast<uint8_t>(m68k_read_memory_8(MASK_24(address))); } -uint16_t M68KDebuggingControl::Read16(uint32_t address) const +uint16_t M68KDebuggingControl::Read16(const uint32_t address) const { - return static_cast<uint16_t>(m68k_read_memory_16(address & 0x00FFFFFF)); + return static_cast<uint16_t>(m68k_read_memory_16(MASK_24(address))); } -uint32_t M68KDebuggingControl::Read32(uint32_t address) const +uint32_t M68KDebuggingControl::Read32(const uint32_t address) const { - return static_cast<uint32_t>(m68k_read_memory_32(address & 0x00FFFFFF)); + return static_cast<uint32_t>(m68k_read_memory_32(MASK_24(address))); } -void M68KDebuggingControl::Write8(uint32_t address, uint8_t value) +void M68KDebuggingControl::Write8(const uint32_t address, const uint8_t value) { m68k_write_memory_8(address, value); } -void M68KDebuggingControl::Write16(uint32_t address, uint16_t value) +void M68KDebuggingControl::Write16(const uint32_t address, const uint16_t value) { m68k_write_memory_16(address, value); } -void M68KDebuggingControl::Write32(uint32_t address, uint32_t value) +void M68KDebuggingControl::Write32(const uint32_t address, const uint32_t value) { m68k_write_memory_32(address, value); } -void M68KDebuggingControl::SetBreakpoint(BreakpointType type, uint32_t address, uint32_t length) +void M68KDebuggingControl::SetBreakpoint( + const BreakpointType type, + const uint32_t address_a, + const uint32_t length) { + const uint32_t address = MASK_24(address_a); switch (type) { case BreakpointType::kSoftwareBreakpoint: case BreakpointType::kHardwareBreakpoint: { @@ -187,8 +193,12 @@ void M68KDebuggingControl::SetBreakpoint(BreakpointType type, uint32_t address, } } -void M68KDebuggingControl::RemoveBreakpoint(BreakpointType type, uint32_t address, uint32_t length) +void M68KDebuggingControl::RemoveBreakpoint( + const BreakpointType type, + const uint32_t address_a, + const uint32_t length) { + const uint32_t address = MASK_24(address_a); switch (type) { case BreakpointType::kSoftwareBreakpoint: case BreakpointType::kHardwareBreakpoint: { |
