all repos — mgba @ 325380989cec960668ba43d008f710c82e1cac11

mGBA Game Boy Advance Emulator

src/debugger/debugger.h (view raw)

 1#ifndef DEBUGGER_H
 2#define DEBUGGER_H
 3
 4#include "arm.h"
 5
 6enum DebuggerState {
 7	DEBUGGER_PAUSED,
 8	DEBUGGER_RUNNING,
 9	DEBUGGER_EXITING,
10	DEBUGGER_SHUTDOWN
11};
12
13struct DebugBreakpoint {
14	struct DebugBreakpoint* next;
15	uint32_t address;
16};
17
18struct DebugMemoryShim {
19	struct ARMMemory d;
20	struct ARMMemory* original;
21
22	struct ARMDebugger* p;
23	struct DebugBreakpoint* watchpoints;
24};
25
26enum DebuggerEntryReason {
27	DEBUGGER_ENTER_MANUAL,
28	DEBUGGER_ENTER_ATTACHED,
29	DEBUGGER_ENTER_BREAKPOINT,
30	DEBUGGER_ENTER_WATCHPOINT,
31	DEBUGGER_ENTER_ILLEGAL_OP
32};
33
34struct ARMDebugger {
35	enum DebuggerState state;
36	struct ARMCore* cpu;
37
38	struct DebugBreakpoint* breakpoints;
39	struct DebugMemoryShim memoryShim;
40
41	void (*init)(struct ARMDebugger*);
42	void (*deinit)(struct ARMDebugger*);
43	void (*paused)(struct ARMDebugger*);
44	void (*entered)(struct ARMDebugger*, enum DebuggerEntryReason);
45};
46
47void ARMDebuggerInit(struct ARMDebugger*, struct ARMCore*);
48void ARMDebuggerDeinit(struct ARMDebugger*);
49void ARMDebuggerRun(struct ARMDebugger*);
50void ARMDebuggerEnter(struct ARMDebugger*, enum DebuggerEntryReason);
51void ARMDebuggerSetBreakpoint(struct ARMDebugger* debugger, uint32_t address);
52void ARMDebuggerClearBreakpoint(struct ARMDebugger* debugger, uint32_t address);
53void ARMDebuggerSetWatchpoint(struct ARMDebugger* debugger, uint32_t address);
54
55#endif