|
|
|
@ -114,7 +114,15 @@ public:
|
|
|
|
|
* @param event Event which has happened
|
|
|
|
|
* @param data Optional data pointer (pass nullptr if unused). Needs to remain valid until Resume() is called.
|
|
|
|
|
*/
|
|
|
|
|
void OnEvent(Event event, void* data);
|
|
|
|
|
void OnEvent(Event event, void* data) {
|
|
|
|
|
// This check is left in the header to allow the compiler to inline it.
|
|
|
|
|
if (!breakpoints[(int)event].enabled)
|
|
|
|
|
return;
|
|
|
|
|
// For the rest of event handling, call a separate function.
|
|
|
|
|
DoOnEvent(event, data);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void DoOnEvent(Event event, void *data);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Resume from the current breakpoint.
|
|
|
|
@ -126,12 +134,14 @@ public:
|
|
|
|
|
* Delete all set breakpoints and resume emulation.
|
|
|
|
|
*/
|
|
|
|
|
void ClearBreakpoints() {
|
|
|
|
|
breakpoints.clear();
|
|
|
|
|
for (auto &bp : breakpoints) {
|
|
|
|
|
bp.enabled = false;
|
|
|
|
|
}
|
|
|
|
|
Resume();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TODO: Evaluate if access to these members should be hidden behind a public interface.
|
|
|
|
|
std::map<Event, BreakPoint> breakpoints;
|
|
|
|
|
std::array<BreakPoint, (int)Event::NumEvents> breakpoints;
|
|
|
|
|
Event active_breakpoint;
|
|
|
|
|
bool at_breakpoint = false;
|
|
|
|
|
|
|
|
|
|