# Debug Utility Library

## Data Structures

struct | _PspDebugRegBlock
| Structure to hold the register data associated with an exception. More...
struct | _PspDebugStackTrace
| Structure to hold a single stack trace entry. More...
struct | _PspDebugProfilerRegs
| Structure to hold the psp profiler register values. More...

## Typedefs

typedef _PspDebugRegBlock | PspDebugRegBlock
| Structure to hold the register data associated with an exception.
typedef void(* | PspDebugErrorHandler )(PspDebugRegBlock *regs)
| Defines a debug error handler.
typedef int(* | PspDebugKprintfHandler )(const char *format, u32 *args)
| Type for Kprintf handler.
typedef _PspDebugStackTrace | PspDebugStackTrace
| Structure to hold a single stack trace entry.
typedef _PspDebugProfilerRegs | PspDebugProfilerRegs
| Structure to hold the psp profiler register values.
typedef int(* | PspDebugPrintHandler )(const char *data, int len)
| Type for the debug print handlers.
typedef int(* | PspDebugInputHandler )(char *data, int len)
| Type for the debug input handler.

## Functions

void | pspDebugScreenInit (void)
| Initialise the debug screen.
void | pspDebugScreenPrintf (const char *fmt,...) __attribute__((format(printf
| Do a printf to the debug screen.
void void | pspDebugScreenSetBackColor (u32 color)
| Set the background color for the text.
void | pspDebugScreenSetTextColor (u32 color)
| Set the text color.
void | pspDebugScreenPutChar (int x, int y, u32 color, u8 ch)
| Draw a single character to the screen.
void | pspDebugScreenSetXY (int x, int y)
| Set the current X and Y co-ordinate for the screen (in character units).
int | pspDebugScreenGetX (void)
| Get the current X co-ordinate (in character units).
int | pspDebugScreenGetY (void)
| Get the current Y co-ordinate (in character units).
void | pspDebugScreenClear (void)
| Clear the debug screen.
int | pspDebugScreenPrintData (const char *buff, int size)
| Print non-nul terminated strings.
void | pspDebugGetStackTrace (unsigned int *results, int max)
| Get a MIPS stack trace (might work :P).
int | pspDebugInstallErrorHandler (PspDebugErrorHandler handler)
| Install an error handler to catch unhandled exceptions.
void | pspDebugDumpException (PspDebugRegBlock *regs)
| Dump an exception to screen using the pspDebugScreen functions.
int | pspDebugInstallKprintfHandler (PspDebugKprintfHandler handler)
| Install a Kprintf handler into the system.
int | pspDebugGetStackTrace2 (PspDebugRegBlock *regs, PspDebugStackTrace *trace, int max)
| Do a stack trace from the current exception.
void | pspDebugProfilerEnable (void)
| Enables the profiler hardware.
void | pspDebugProfilerDisable (void)
| Disables the profiler hardware.
void | pspDebugProfilerClear (void)
| Clear the profiler registers.
void | pspDebugProfilerGetRegs (PspDebugProfilerRegs *regs)
| Get the profiler register state.
void | pspDebugProfilerPrint (void)
| Print the profiler registers to screen.
int | pspDebugInstallStdinHandler (PspDebugInputHandler handler)
| Install a handler for stdin (so you can use normal stdio functions).
int | pspDebugInstallStdoutHandler (PspDebugPrintHandler handler)
| Install a print handler for stdout (so you can use normal print functions).
int | pspDebugInstallStderrHandler (PspDebugPrintHandler handler)
| Install a print handler for stderr (so you can use normal print functions).
void | pspDebugSioPutchar (int ch)
| Put a character to the remote sio.
int | pspDebugSioGetchar (void)
| Get a character from the remote sio.
void | pspDebugSioPuts (const char *str)
| Write a string to the sio port.
int | pspDebugSioPutData (const char *data, int len)
| Write a set of data to the sio port.
void | pspDebugSioInit (void)
| Initialise the remote SIO port (defaults to 4800 8N1).
void | pspDebugSioSetBaud (int baud)
| Set the baud rate of the SIO, e.g.
void | pspDebugEnablePutchar (void)
| Enable debug character output.
void | pspDebugSioInstallKprintf (void)
| Install a kprintf debug putchar handler.
void | pspDebugGdbStubInit (void)
| Install the gdb stub handler.
void | pspDebugBreakpoint (void)
| Generate a breakpoint exception.

## Typedef Documentation

typedef void(* PspDebugErrorHandler)(PspDebugRegBlock *regs)

| Defines a debug error handler.

typedef int(* PspDebugInputHandler)(char *data, int len)

| Type for the debug input handler.

typedef int(* PspDebugKprintfHandler)(const char *format, u32 *args)

| Type for Kprintf handler.

typedef int(* PspDebugPrintHandler)(const char *data, int len)

| Type for the debug print handlers.

typedef struct _PspDebugProfilerRegs PspDebugProfilerRegs

| Structure to hold the psp profiler register values.

typedef struct _PspDebugRegBlock PspDebugRegBlock

| Structure to hold the register data associated with an exception.

typedef struct _PspDebugStackTrace PspDebugStackTrace

| Structure to hold a single stack trace entry.

## Function Documentation

void pspDebugBreakpoint | ( | void |  | ) |

| Generate a breakpoint exception.

void pspDebugDumpException | ( | PspDebugRegBlock * | regs | ) |

Dump an exception to screen using the pspDebugScreen functions.

Note:
  This function will not setup the screen for debug output, you should call sceDebugScreenInit before using it if it isn't already.

Parameters:

  | regs | - Pointer to a register block.

void pspDebugEnablePutchar | ( | void |  | ) |

| Enable debug character output. Needs to be called in order for the default Kprintf handler to work.

void pspDebugGdbStubInit | ( | void |  | ) |

| Install the gdb stub handler.

void pspDebugGetStackTrace | ( | unsigned int * | results,
|  | int | max
| ) |

Get a MIPS stack trace (might work :P).

Parameters:

  | results | - List of points to store the results of the trace, (up to max)
  | max | - Maximum number of back traces

int pspDebugGetStackTrace2 | ( | PspDebugRegBlock * | regs,
|  | PspDebugStackTrace * | trace,
|  | int | max
| ) |

Do a stack trace from the current exception.

Note:
  This function really isn't too general purpose and it is more than likely to generate a few false positives but I consider that better then missing out calls entirely. You have to use your discretion, your code and a objdump to work out if some calls are completely surprious or not ;)

Parameters:

  | regs | - Pointer to a register block from an exception.
  | trace | - Pointer to an array of PspDebugStackTrace structures.
  | max | - The maximum number of traces to make.

Returns:
  The number of functions found.

int pspDebugInstallErrorHandler | ( | PspDebugErrorHandler | handler | ) |

Install an error handler to catch unhandled exceptions.

Parameters:

  | handler | - Pointer to a handler function. If set to NULL it will default to resetting the screen and dumping the error.

Returns:
  < 0 on error

int pspDebugInstallKprintfHandler | ( | PspDebugKprintfHandler | handler | ) |

Install a Kprintf handler into the system.

Parameters:

  | handler | - Function pointer to the handler.

Returns:
  < 0 on error.

int pspDebugInstallStderrHandler | ( | PspDebugPrintHandler | handler | ) |

Install a print handler for stderr (so you can use normal print functions).

Parameters:

  | handler | - A pointer to print handler, NULL to disable.

Returns:
  < 0 on error, else 0.

int pspDebugInstallStdinHandler | ( | PspDebugInputHandler | handler | ) |

Install a handler for stdin (so you can use normal stdio functions).

Parameters:

  | handler | - A pointer to input handler, NULL to disable.

Returns:
  < 0 on error, else 0.

int pspDebugInstallStdoutHandler | ( | PspDebugPrintHandler | handler | ) |

Install a print handler for stdout (so you can use normal print functions).

Parameters:

  | handler | - A pointer to print handler, NULL to disable.

Returns:
  < 0 on error, else 0.

void pspDebugProfilerClear | ( | void |  | ) |

| Clear the profiler registers.

void pspDebugProfilerDisable | ( | void |  | ) |

| Disables the profiler hardware.

void pspDebugProfilerEnable | ( | void |  | ) |

| Enables the profiler hardware.

void pspDebugProfilerGetRegs | ( | PspDebugProfilerRegs * | regs | ) |

Get the profiler register state.

Parameters:

  | regs | - A pointer to a PspDebugProfilerRegs structure.

void pspDebugProfilerPrint | ( | void |  | ) |

| Print the profiler registers to screen.

void pspDebugScreenClear | ( | void |  | ) |

| Clear the debug screen.

int pspDebugScreenGetX | ( | void |  | ) |

Get the current X co-ordinate (in character units).

Returns:
  The X co-ordinate

int pspDebugScreenGetY | ( | void |  | ) |

Get the current Y co-ordinate (in character units).

Returns:
  The Y co-ordinate

void pspDebugScreenInit | ( | void |  | ) |

| Initialise the debug screen.

int pspDebugScreenPrintData | ( | const char * | buff,
|  | int | size
| ) |

Print non-nul terminated strings.

Parameters:

  | buff | - Buffer containing the text.
  | size | - Size of the data

Returns:
  The number of characters written

void pspDebugScreenPrintf | ( | const char * | fmt,
|  |  | ...
| ) |

Do a printf to the debug screen.

Parameters:

  | fmt | - Format string to print
  | ... | - Arguments

void pspDebugScreenPutChar | ( | int | x,
|  | int | y,
|  | u32 | color,
|  | u8 | ch
| ) |

Draw a single character to the screen.

Parameters:

  | x | - The x co-ordinate to draw to (pixel units)
  | y | - The y co-ordinate to draw to (pixel units)
  | color | - The text color to draw
  | ch | - The character to draw

void void pspDebugScreenSetBackColor | ( | u32 | color | ) |

Set the background color for the text.

Note:
  To reset the entire screens bg colour you need to call pspDebugScreenClear

Parameters:

  | color | - A 32bit RGB colour

void pspDebugScreenSetTextColor | ( | u32 | color | ) |

Set the text color.

Parameters:

  | color | - A 32 bit RGB color

void pspDebugScreenSetXY | ( | int | x,
|  | int | y
| ) |

| Set the current X and Y co-ordinate for the screen (in character units).

int pspDebugSioGetchar | ( | void |  | ) |

Get a character from the remote sio.

Returns:
  The character read or -1 if no characters available.

void pspDebugSioInit | ( | void |  | ) |

Initialise the remote SIO port (defaults to 4800 8N1).

Note:
  will delay 2 seconds to wait for the power to come up.

void pspDebugSioInstallKprintf | ( | void |  | ) |

| Install a kprintf debug putchar handler. Implicitly calls pspDebugEnablePutchar so you do not need to call it explicitly. Sio must be initialised before calling this function however.

void pspDebugSioPutchar | ( | int | ch | ) |

Put a character to the remote sio.

Parameters:

  | ch | - Character to write.

int pspDebugSioPutData | ( | const char * | data,
|  | int | len
| ) |

Write a set of data to the sio port.

Parameters:

  | data | - Pointer to the data to send.
  | len | - Length of the data.

Returns:
  Number of characters written.

void pspDebugSioPuts | ( | const char * | str | ) |

Write a string to the sio port.

Parameters:

  | str | - String to write.

void pspDebugSioSetBaud | ( | int | baud | ) |

Set the baud rate of the SIO, e.g.

4800/9600..115200.

Parameters:

  | baud | - The baudrate to set.