ps2sdk  1.1
A collection of Open Source libraries used for developing applications on Sony's PlayStation 2® (PS2).
ee_debug.h File Reference
#include <tamtypes.h>
#include <ee_cop0_defs.h>
#include <ps2_debug.h>
+ Include dependency graph for ee_debug.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Typedefs

typedef int() EE_ExceptionHandler(struct st_EE_RegFrame *)
 

Functions

int ee_dbg_install (int levels)
 
int ee_dbg_remove (int levels)
 
EE_ExceptionHandleree_dbg_get_level1_handler (int cause)
 
EE_ExceptionHandleree_dbg_set_level1_handler (int cause, EE_ExceptionHandler *handler)
 
EE_ExceptionHandleree_dbg_get_level2_handler (int cause)
 
EE_ExceptionHandleree_dbg_set_level2_handler (int cause, EE_ExceptionHandler *handler)
 
u32 ee_dbg_get_bpc (void)
 
void ee_dbg_set_bpc (u32)
 
u32 ee_dbg_get_iab (void)
 
void ee_dbg_set_iab (u32)
 
u32 ee_dbg_get_iabm (void)
 
void ee_dbg_set_iabm (u32)
 
u32 ee_dbg_get_dab (void)
 
void ee_dbg_set_dab (u32)
 
u32 ee_dbg_get_dabm (void)
 
void ee_dbg_set_dabm (u32)
 
u32 ee_dbg_get_dvb (void)
 
void ee_dbg_set_dvb (u32)
 
u32 ee_dbg_get_dvbm (void)
 
void ee_dbg_set_dvbm (u32)
 
void ee_dbg_set_bpr (u32 addr, u32 mask, u32 opmode_mask)
 
void ee_dbg_set_bpw (u32 addr, u32 mask, u32 opmode_mask)
 
void ee_dbg_set_bpv (u32 value, u32 mask, u32 opmode_mask)
 
void ee_dbg_set_bpx (u32 addr, u32 mask, u32 opmode_mask)
 
void ee_dbg_clr_bps (void)
 
void ee_dbg_clr_bpda (void)
 
void ee_dbg_clr_bpdv (void)
 
void ee_dbg_clr_bpx (void)
 

Detailed Description

EEDEBUG - EE debugging library. Definitions for the EEDEBUG library.

Definition in file ee_debug.h.

Typedef Documentation

◆ EE_ExceptionHandler

typedef int() EE_ExceptionHandler(struct st_EE_RegFrame *)

Definition at line 28 of file ee_debug.h.

Function Documentation

◆ ee_dbg_clr_bpda()

void ee_dbg_clr_bpda ( void  )

Definition at line 120 of file ee_debug.c.

121 {
122  u32 bpc = ee_dbg_get_bpc();
123 
124  bpc &= ~(EE_BPC_DWE | EE_BPC_DRE);
125 
126  if(!(bpc & (EE_BPC_DVE)))
127  {
128  // if Data Value breakpoint not enabled, disable all Data bp bits.
130  }
131 
132  ee_dbg_set_bpc(bpc);
133 }
#define EE_BPC_DWE
Definition: ee_cop0_defs.h:69
#define EE_BPC_DKE
Definition: ee_cop0_defs.h:93
#define EE_BPC_DVE
Definition: ee_cop0_defs.h:72
#define EE_BPC_DXE
Definition: ee_cop0_defs.h:96
#define EE_BPC_DRE
Definition: ee_cop0_defs.h:66
#define EE_BPC_DUE
Definition: ee_cop0_defs.h:87
#define EE_BPC_DSE
Definition: ee_cop0_defs.h:90
#define EE_BPC_DTE
Definition: ee_cop0_defs.h:102
u32 ee_dbg_get_bpc(void)
void ee_dbg_set_bpc(u32)
unsigned int u32
Definition: tamtypes.h:30

References EE_BPC_DKE, EE_BPC_DRE, EE_BPC_DSE, EE_BPC_DTE, EE_BPC_DUE, EE_BPC_DVE, EE_BPC_DWE, EE_BPC_DXE, ee_dbg_get_bpc(), and ee_dbg_set_bpc().

◆ ee_dbg_clr_bpdv()

void ee_dbg_clr_bpdv ( void  )

Definition at line 135 of file ee_debug.c.

136 {
137  u32 bpc = ee_dbg_get_bpc();
138 
139  bpc &= ~(EE_BPC_DVE);
140 
141  if(!(bpc & (EE_BPC_DWE | EE_BPC_DRE)))
142  {
143  // if Data Read or Data Write breakpoints not enabled, disable all Data bp bits.
145  }
146 
147  ee_dbg_set_bpc(bpc);
148 }

References EE_BPC_DKE, EE_BPC_DRE, EE_BPC_DSE, EE_BPC_DTE, EE_BPC_DUE, EE_BPC_DVE, EE_BPC_DWE, EE_BPC_DXE, ee_dbg_get_bpc(), and ee_dbg_set_bpc().

◆ ee_dbg_clr_bps()

void ee_dbg_clr_bps ( void  )

Definition at line 157 of file ee_debug.c.

158 {
160  ee_dbg_set_iab(0);
161  ee_dbg_set_iabm(0);
162  ee_dbg_set_dab(0);
163  ee_dbg_set_dabm(0);
164  ee_dbg_set_dvb(0);
165  ee_dbg_set_dvbm(0);
166 }
#define EE_BPC_BED
Definition: ee_cop0_defs.h:105
void ee_dbg_set_iab(u32)
void ee_dbg_set_dvbm(u32)
void ee_dbg_set_dabm(u32)
void ee_dbg_set_iabm(u32)
void ee_dbg_set_dvb(u32)
void ee_dbg_set_dab(u32)

References EE_BPC_BED, ee_dbg_set_bpc(), ee_dbg_set_dab(), ee_dbg_set_dabm(), ee_dbg_set_dvb(), ee_dbg_set_dvbm(), ee_dbg_set_iab(), and ee_dbg_set_iabm().

Referenced by ee_dbg_install(), and ee_dbg_remove().

◆ ee_dbg_clr_bpx()

void ee_dbg_clr_bpx ( void  )

Definition at line 150 of file ee_debug.c.

151 {
152  u32 bpc = ee_dbg_get_bpc();
154  ee_dbg_set_bpc(bpc);
155 }
#define EE_BPC_IUE
Definition: ee_cop0_defs.h:75
#define EE_BPC_ISE
Definition: ee_cop0_defs.h:78
#define EE_BPC_ITE
Definition: ee_cop0_defs.h:99
#define EE_BPC_IKE
Definition: ee_cop0_defs.h:81
#define EE_BPC_IXE
Definition: ee_cop0_defs.h:84

References EE_BPC_IKE, EE_BPC_ISE, EE_BPC_ITE, EE_BPC_IUE, EE_BPC_IXE, ee_dbg_get_bpc(), and ee_dbg_set_bpc().

◆ ee_dbg_get_bpc()

u32 ee_dbg_get_bpc ( void  )

◆ ee_dbg_get_dab()

u32 ee_dbg_get_dab ( void  )

◆ ee_dbg_get_dabm()

u32 ee_dbg_get_dabm ( void  )

◆ ee_dbg_get_dvb()

u32 ee_dbg_get_dvb ( void  )

◆ ee_dbg_get_dvbm()

u32 ee_dbg_get_dvbm ( void  )

◆ ee_dbg_get_iab()

u32 ee_dbg_get_iab ( void  )

◆ ee_dbg_get_iabm()

u32 ee_dbg_get_iabm ( void  )

◆ ee_dbg_get_level1_handler()

EE_ExceptionHandler* ee_dbg_get_level1_handler ( int  cause)

Definition at line 53 of file ee_debug.c.

54 {
55  if((cause < 0) || (cause > 13)) { return(NULL); }
56 
57  return(ee_level1_exception_handlers[cause]);
58 }
static EE_ExceptionHandler * ee_level1_exception_handlers[16]
Definition: ee_debug.c:23
#define NULL
Definition: tamtypes.h:91

References ee_level1_exception_handlers, and NULL.

◆ ee_dbg_get_level2_handler()

EE_ExceptionHandler* ee_dbg_get_level2_handler ( int  cause)

Definition at line 77 of file ee_debug.c.

78 {
79  if((cause < 0) || (cause > 3)) { return(NULL); }
80 
81  return(ee_level2_exception_handlers[cause]);
82 }
static EE_ExceptionHandler * ee_level2_exception_handlers[4]
Definition: ee_debug.c:24

References ee_level2_exception_handlers, and NULL.

◆ ee_dbg_install()

int ee_dbg_install ( int  levels)

Definition at line 171 of file ee_debug.c.

172 {
173  u32 oldintr, oldop;
174  int i;
175 
176  if(_installed_levels & levels)
177  {
178  return(-1);
179  }
180 
181  if(levels & 1)
182  {
183  for(i = 0; i < 16; i++) { ee_level1_exception_handlers[i] = NULL; }
184  }
185 
186  if(levels & 2)
187  {
188  for(i = 0; i < 4; i++) { ee_level2_exception_handlers[i] = NULL; }
189 
190  oldintr = DIntr();
191  oldop = ee_set_opmode(0);
192 
193  ee_dbg_clr_bps();
194 
195  // save the original level 2 debug exception vector.
196  memcpy(&__saved_dbg_ex_vector, (void *) (0x80000100), 0x80);
197 
198  // replace the level 2 debug exception vector with our own
199  memcpy((void *) (0x80000100), &__ee_level2_ex_vector, 32);
200 
201  ee_set_opmode(oldop);
202  if(oldintr) { EIntr(); }
203  }
204 
205  if(levels & 1)
206  {
207  // redirect desirable "Level 1" exceptions to our level 1 handler.
208  for(i = 1; i <= 3; i++)
209  {
212  }
213 
214  for(i = 4; i <= 7; i++)
215  {
218  }
219 
220  for(i = 10; i <= 13; i++)
221  {
224  }
225  }
226 
227  FlushCache(0);
228  FlushCache(2);
229 
230  _installed_levels |= levels;
231 
232  return(0);
233 }
void __ee_level2_ex_vector(void)
void __ee_level1_ex_vector(void)
static u32 __saved_dbg_ex_vector[0x80/4]
Definition: ee_debug.c:16
void ee_dbg_clr_bps(void)
Definition: ee_debug.c:157
static void * _old_l1_handlers[16]
Definition: ee_debug.c:19
static int _installed_levels
Definition: ee_debug.c:21
void SetVCommonHandler(s32 handler_num, void *handler_func)
static int ee_set_opmode(u32 opmode)
Definition: kernel.h:163
void SetVTLBRefillHandler(s32 handler_num, void *handler_func)
void FlushCache(s32 operation)
int DIntr(void)
void * GetExceptionHandler(int except_no)
int EIntr(void)

References __ee_level1_ex_vector(), __ee_level2_ex_vector(), __saved_dbg_ex_vector, _installed_levels, _old_l1_handlers, DIntr(), ee_dbg_clr_bps(), ee_level1_exception_handlers, ee_level2_exception_handlers, ee_set_opmode(), EIntr(), FlushCache(), GetExceptionHandler(), NULL, SetVCommonHandler(), and SetVTLBRefillHandler().

◆ ee_dbg_remove()

int ee_dbg_remove ( int  levels)

Definition at line 235 of file ee_debug.c.

236 {
237  u32 oldintr, oldop;
238  int i;
239 
240  if((levels < 1) || (levels > 3)) { return(-1); }
241 
242  if(!(_installed_levels & levels)) { return(-1); }
243 
244  if((levels & _installed_levels) & 2)
245  {
246  oldintr = DIntr();
247  oldop = ee_set_opmode(0);
248 
249  ee_dbg_clr_bps();
250 
251  // restore the original debug exception vector.
252  memcpy((void *) (0x80000100), &__saved_dbg_ex_vector, sizeof(__saved_dbg_ex_vector));
253 
254  ee_set_opmode(oldop);
255  if(oldintr) { EIntr(); }
256 
257  FlushCache(0);
258  FlushCache(2);
259 
260  _installed_levels &= 1;
261  }
262 
263  if((levels & _installed_levels) & 1)
264  {
265  // restore the exception handlers that we previously hooked.
266  for(i = 1; i <= 3; i++)
267  {
268  if(_old_l1_handlers[i] != NULL)
269  {
271  _old_l1_handlers[i] = NULL;
272  }
273  }
274  for(i = 4; i <= 7; i++)
275  {
276  if(_old_l1_handlers[i] != NULL)
277  {
279  _old_l1_handlers[i] = NULL;
280  }
281  }
282  for(i = 10; i <= 13; i++)
283  {
284  if(_old_l1_handlers[i] != NULL)
285  {
287  _old_l1_handlers[i] = NULL;
288  }
289  }
290 
291  FlushCache(0);
292  FlushCache(2);
293 
294  _installed_levels &= 2;
295  }
296 
297  return(0);
298 }

References __saved_dbg_ex_vector, _installed_levels, _old_l1_handlers, DIntr(), ee_dbg_clr_bps(), ee_set_opmode(), EIntr(), FlushCache(), NULL, SetVCommonHandler(), and SetVTLBRefillHandler().

◆ ee_dbg_set_bpc()

void ee_dbg_set_bpc ( u32  )

◆ ee_dbg_set_bpr()

void ee_dbg_set_bpr ( u32  addr,
u32  mask,
u32  opmode_mask 
)

Definition at line 106 of file ee_debug.c.

106 { _ee_dbg_set_bpda(addr, mask, EE_BPC_DRE | opmode_mask); }
void _ee_dbg_set_bpda(u32, u32, u32)

References _ee_dbg_set_bpda(), and EE_BPC_DRE.

◆ ee_dbg_set_bpv()

void ee_dbg_set_bpv ( u32  value,
u32  mask,
u32  opmode_mask 
)

Definition at line 115 of file ee_debug.c.

115 { _ee_dbg_set_bpdv(value, mask, opmode_mask); }
void _ee_dbg_set_bpdv(u32, u32, u32)

References _ee_dbg_set_bpdv().

◆ ee_dbg_set_bpw()

void ee_dbg_set_bpw ( u32  addr,
u32  mask,
u32  opmode_mask 
)

Definition at line 109 of file ee_debug.c.

109 { _ee_dbg_set_bpda(addr, mask, EE_BPC_DWE | opmode_mask); }

References _ee_dbg_set_bpda(), and EE_BPC_DWE.

◆ ee_dbg_set_bpx()

void ee_dbg_set_bpx ( u32  addr,
u32  mask,
u32  opmode_mask 
)

Definition at line 118 of file ee_debug.c.

118 { _ee_dbg_set_bpx(addr, mask, opmode_mask); }
void _ee_dbg_set_bpx(u32, u32, u32)

References _ee_dbg_set_bpx().

◆ ee_dbg_set_dab()

void ee_dbg_set_dab ( u32  )

Referenced by ee_dbg_clr_bps().

◆ ee_dbg_set_dabm()

void ee_dbg_set_dabm ( u32  )

Referenced by ee_dbg_clr_bps().

◆ ee_dbg_set_dvb()

void ee_dbg_set_dvb ( u32  )

Referenced by ee_dbg_clr_bps().

◆ ee_dbg_set_dvbm()

void ee_dbg_set_dvbm ( u32  )

Referenced by ee_dbg_clr_bps().

◆ ee_dbg_set_iab()

void ee_dbg_set_iab ( u32  )

Referenced by ee_dbg_clr_bps().

◆ ee_dbg_set_iabm()

void ee_dbg_set_iabm ( u32  )

Referenced by ee_dbg_clr_bps().

◆ ee_dbg_set_level1_handler()

EE_ExceptionHandler* ee_dbg_set_level1_handler ( int  cause,
EE_ExceptionHandler handler 
)

Definition at line 60 of file ee_debug.c.

61 {
62  EE_ExceptionHandler *old_handler;
63  u32 oldintr;
64 
65  if((cause < 0) || (cause > 13)) { return(NULL); }
66 
67  oldintr = DIntr();
68 
69  old_handler = ee_level1_exception_handlers[cause];
70  ee_level1_exception_handlers[cause] = handler;
71 
72  if(oldintr) { EIntr(); }
73 
74  return(old_handler);
75 }
int() EE_ExceptionHandler(struct st_EE_RegFrame *)
Definition: ee_debug.h:28

References DIntr(), ee_level1_exception_handlers, EIntr(), and NULL.

◆ ee_dbg_set_level2_handler()

EE_ExceptionHandler* ee_dbg_set_level2_handler ( int  cause,
EE_ExceptionHandler handler 
)

Definition at line 84 of file ee_debug.c.

85 {
86  EE_ExceptionHandler *old_handler;
87  u32 oldintr;
88 
89  if((cause < 0) || (cause > 3)) { return(NULL); }
90 
91  oldintr = DIntr();
92 
93  old_handler = ee_level2_exception_handlers[cause];
94  ee_level2_exception_handlers[cause] = handler;
95 
96  if(oldintr) { EIntr(); }
97 
98  return(old_handler);
99 }

References DIntr(), ee_level2_exception_handlers, EIntr(), and NULL.