451ab91e |
1 | /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * |
2 | * Mupen64plus-core - m64p_debugger.h * |
3 | * Mupen64Plus homepage: http://code.google.com/p/mupen64plus/ * |
4 | * Copyright (C) 2009 Richard Goedeken * |
5 | * * |
6 | * This program is free software; you can redistribute it and/or modify * |
7 | * it under the terms of the GNU General Public License as published by * |
8 | * the Free Software Foundation; either version 2 of the License, or * |
9 | * (at your option) any later version. * |
10 | * * |
11 | * This program is distributed in the hope that it will be useful, * |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of * |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
14 | * GNU General Public License for more details. * |
15 | * * |
16 | * You should have received a copy of the GNU General Public License * |
17 | * along with this program; if not, write to the * |
18 | * Free Software Foundation, Inc., * |
19 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * |
20 | * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ |
21 | |
22 | /* This header file defines typedefs for function pointers to Core Debugger |
23 | * functions. |
24 | */ |
25 | |
26 | #if !defined(M64P_DEBUGGER_H) |
27 | #define M64P_DEBUGGER_H |
28 | |
29 | #include "m64p_types.h" |
30 | |
31 | #ifdef __cplusplus |
32 | extern "C" { |
33 | #endif |
34 | |
35 | /* DebugSetCallbacks() |
36 | * |
37 | * This function is called by the front-end to supply debugger callback |
38 | * function pointers. If debugger is enabled and then later disabled within the |
39 | * UI, this function may be called with NULL pointers in order to disable the |
40 | * callbacks. |
41 | */ |
42 | typedef m64p_error (*ptr_DebugSetCallbacks)(void (*)(void), void (*)(unsigned int), void (*)(void)); |
43 | #if defined(M64P_CORE_PROTOTYPES) |
44 | EXPORT m64p_error CALL DebugSetCallbacks(void (*)(void), void (*)(unsigned int), void (*)(void)); |
45 | #endif |
46 | |
47 | /* DebugSetCoreCompare() |
48 | * |
49 | * This function is called by the front-end to supply callback function pointers |
50 | * for the Core Comparison feature. |
51 | */ |
52 | typedef m64p_error (*ptr_DebugSetCoreCompare)(void (*)(unsigned int), void (*)(int, void *)); |
53 | #if defined(M64P_CORE_PROTOTYPES) |
54 | EXPORT m64p_error CALL DebugSetCoreCompare(void (*)(unsigned int), void (*)(int, void *)); |
55 | #endif |
56 | |
57 | /* DebugSetRunState() |
58 | * |
59 | * This function sets the run state of the R4300 CPU emulator. |
60 | */ |
61 | typedef m64p_error (*ptr_DebugSetRunState)(int); |
62 | #if defined(M64P_CORE_PROTOTYPES) |
63 | EXPORT m64p_error CALL DebugSetRunState(int); |
64 | #endif |
65 | |
66 | /* DebugGetState() |
67 | * |
68 | * This function reads and returns a debugger state variable, which are |
69 | * enumerated in m64p_types.h. |
70 | */ |
71 | typedef int (*ptr_DebugGetState)(m64p_dbg_state); |
72 | #if defined(M64P_CORE_PROTOTYPES) |
73 | EXPORT int CALL DebugGetState(m64p_dbg_state); |
74 | #endif |
75 | |
76 | /* DebugStep() |
77 | * |
78 | * This function signals the debugger to advance one instruction when in the |
79 | * stepping mode. |
80 | */ |
81 | typedef m64p_error (*ptr_DebugStep)(void); |
82 | #if defined(M64P_CORE_PROTOTYPES) |
83 | EXPORT m64p_error CALL DebugStep(void); |
84 | #endif |
85 | |
86 | /* DebugDecodeOp() |
87 | * |
88 | * This is a helper function for the debugger front-end. This instruction takes |
89 | * a PC value and an R4300 instruction opcode and writes the disassembled |
90 | * instruction mnemonic and arguments into character buffers. This is intended |
91 | * to be used to display disassembled code. |
92 | */ |
93 | typedef void (*ptr_DebugDecodeOp)(unsigned int, char *, char *, int); |
94 | #if defined(M64P_CORE_PROTOTYPES) |
95 | EXPORT void CALL DebugDecodeOp(unsigned int, char *, char *, int); |
96 | #endif |
97 | |
98 | /* DebugMemGetRecompInfo() |
99 | * |
100 | * This function is used by the front-end to retrieve disassembly information |
101 | * about recompiled code. For example, the dynamic recompiler may take a single |
102 | * R4300 instruction and compile it into 10 x86 instructions. This function may |
103 | * then be used to retrieve the disassembled code of the 10 x86 instructions. |
104 | */ |
105 | typedef void * (*ptr_DebugMemGetRecompInfo)(m64p_dbg_mem_info, unsigned int, int); |
106 | #if defined(M64P_CORE_PROTOTYPES) |
107 | EXPORT void * CALL DebugMemGetRecompInfo(m64p_dbg_mem_info, unsigned int, int); |
108 | #endif |
109 | |
110 | /* DebugMemGetMemInfo() |
111 | * |
112 | * This function returns an integer value regarding the memory location address, |
113 | * corresponding to the information requested by mem_info_type, which is a type |
114 | * enumerated in m64p_types.h. |
115 | */ |
116 | typedef int (*ptr_DebugMemGetMemInfo)(m64p_dbg_mem_info, unsigned int); |
117 | #if defined(M64P_CORE_PROTOTYPES) |
118 | EXPORT int CALL DebugMemGetMemInfo(m64p_dbg_mem_info, unsigned int); |
119 | #endif |
120 | |
121 | /* DebugMemGetPointer() |
122 | * |
123 | * This function returns a memory pointer (in x86 memory space) to a block of |
124 | * emulated N64 memory. This may be used to retrieve a pointer to a special N64 |
125 | * block (such as the serial, video, or audio registers) or the RDRAM. |
126 | */ |
127 | typedef void * (*ptr_DebugMemGetPointer)(m64p_dbg_memptr_type); |
128 | #if defined(M64P_CORE_PROTOTYPES) |
129 | EXPORT void * CALL DebugMemGetPointer(m64p_dbg_memptr_type); |
130 | #endif |
131 | |
132 | /* DebugMemRead**() |
133 | * |
134 | * These functions retrieve a value from the emulated N64 memory. The returned |
135 | * value will be correctly byte-swapped for the host architecture. |
136 | */ |
137 | typedef unsigned long long (*ptr_DebugMemRead64)(unsigned int); |
138 | typedef unsigned int (*ptr_DebugMemRead32)(unsigned int); |
139 | typedef unsigned short (*ptr_DebugMemRead16)(unsigned int); |
140 | typedef unsigned char (*ptr_DebugMemRead8)(unsigned int); |
141 | #if defined(M64P_CORE_PROTOTYPES) |
142 | EXPORT unsigned long long CALL DebugMemRead64(unsigned int); |
143 | EXPORT unsigned int CALL DebugMemRead32(unsigned int); |
144 | EXPORT unsigned short CALL DebugMemRead16(unsigned int); |
145 | EXPORT unsigned char CALL DebugMemRead8(unsigned int); |
146 | #endif |
147 | |
148 | /* DebugMemWrite**() |
149 | * |
150 | * These functions write a value into the emulated N64 memory. The given value |
151 | * will be correctly byte-swapped before storage. |
152 | */ |
153 | typedef void (*ptr_DebugMemWrite64)(unsigned int, unsigned long long); |
154 | typedef void (*ptr_DebugMemWrite32)(unsigned int, unsigned int); |
155 | typedef void (*ptr_DebugMemWrite16)(unsigned int, unsigned short); |
156 | typedef void (*ptr_DebugMemWrite8)(unsigned int, unsigned char); |
157 | #if defined(M64P_CORE_PROTOTYPES) |
158 | EXPORT void CALL DebugMemWrite64(unsigned int, unsigned long long); |
159 | EXPORT void CALL DebugMemWrite32(unsigned int, unsigned int); |
160 | EXPORT void CALL DebugMemWrite16(unsigned int, unsigned short); |
161 | EXPORT void CALL DebugMemWrite8(unsigned int, unsigned char); |
162 | #endif |
163 | |
164 | /* DebugGetCPUDataPtr() |
165 | * |
166 | * This function returns a memory pointer (in x86 memory space) to a specific |
167 | * register in the emulated R4300 CPU. |
168 | */ |
169 | typedef void * (*ptr_DebugGetCPUDataPtr)(m64p_dbg_cpu_data); |
170 | #if defined(M64P_CORE_PROTOTYPES) |
171 | EXPORT void * CALL DebugGetCPUDataPtr(m64p_dbg_cpu_data); |
172 | #endif |
173 | |
174 | /* DebugBreakpointLookup() |
175 | * |
176 | * This function searches through all current breakpoints in the debugger to |
177 | * find one that matches the given input parameters. If a matching breakpoint |
178 | * is found, the index number is returned. If no breakpoints are found, -1 is |
179 | * returned. |
180 | */ |
181 | typedef int (*ptr_DebugBreakpointLookup)(unsigned int, unsigned int, unsigned int); |
182 | #if defined(M64P_CORE_PROTOTYPES) |
183 | EXPORT int CALL DebugBreakpointLookup(unsigned int, unsigned int, unsigned int); |
184 | #endif |
185 | |
186 | /* DebugBreakpointCommand() |
187 | * |
188 | * This function is used to process common breakpoint commands, such as adding, |
189 | * removing, or searching the breakpoints. The meanings of the index and ptr |
190 | * input parameters vary by command. |
191 | */ |
192 | typedef int (*ptr_DebugBreakpointCommand)(m64p_dbg_bkp_command, unsigned int, void *); |
193 | #if defined(M64P_CORE_PROTOTYPES) |
194 | EXPORT int CALL DebugBreakpointCommand(m64p_dbg_bkp_command, unsigned int, void *); |
195 | #endif |
196 | |
197 | #ifdef __cplusplus |
198 | } |
199 | #endif |
200 | |
201 | #endif /* #define M64P_DEBUGGER_H */ |
202 | |