diff options
Diffstat (limited to 'm68k_debugging.cpp')
-rw-r--r-- | m68k_debugging.cpp | 53 |
1 files changed, 52 insertions, 1 deletions
diff --git a/m68k_debugging.cpp b/m68k_debugging.cpp index f9b0b38..509299d 100644 --- a/m68k_debugging.cpp +++ b/m68k_debugging.cpp @@ -3,6 +3,7 @@ #include "m68k_debugging.hpp" #include "musashi-m68k/m68k.h" +#include "bus.hpp" #include "utils.hpp" #include <cstdlib> @@ -56,7 +57,7 @@ static inline m68k_register_t ConvertRegisterId(M68KRegister register_id) break; } assert(!"Unknown register_id"); - UNREACHABLE(); + UNREACHABLE; } uint32_t M68KDebuggingControl::GetRegister(M68KRegister register_id) const @@ -142,3 +143,53 @@ void M68KDebuggingControl::Write32(uint32_t address, uint32_t value) { m68k_write_memory_32(address, value); } + +void M68KDebuggingControl::SetBreakpoint(BreakpointType type, uint32_t address, uint32_t length) +{ + switch (type) { + case BreakpointType::kSoftwareBreakpoint: + case BreakpointType::kHardwareBreakpoint: { + const auto it = std::find_if( + code_bkpts.begin(), + code_bkpts.end(), + [&](const Breakpoint& b) { return b.offset == address && b.length == length; }); + if (it == code_bkpts.end()) + code_bkpts.push_back(Breakpoint{address, length}); + } break; + case BreakpointType::kWriteWatchpoint: { + } break; + case BreakpointType::kReadWatchpoint: { + } break; + case BreakpointType::kAccessWatchpoint: { + } break; + break; + case BreakpointType::kUnsupported: { + UNREACHABLE; + } break; + } +} + +void M68KDebuggingControl::RemoveBreakpoint(BreakpointType type, uint32_t address, uint32_t length) +{ + switch (type) { + case BreakpointType::kSoftwareBreakpoint: + case BreakpointType::kHardwareBreakpoint: { + const auto it = std::find_if( + code_bkpts.begin(), + code_bkpts.end(), + [&](const Breakpoint& b) { return b.offset == address && b.length == length; }); + if (it != code_bkpts.end()) + code_bkpts.erase(it); + } break; + case BreakpointType::kWriteWatchpoint: { + } break; + case BreakpointType::kReadWatchpoint: { + } break; + case BreakpointType::kAccessWatchpoint: { + } break; + break; + case BreakpointType::kUnsupported: { + UNREACHABLE; + } break; + } +} |