PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
ps2_dbg.c
1#include <tamtypes.h>
2#include <ps2.h>
3#include "ps2_sbus.h"
4#include "sbus_priv.h"
5
6#define DBG_CMD_PUTS (1)
7
8#ifdef _EE
9#define DMA_BUF_ALIGNMENT 128
10#else
11#define DMA_BUF_ALIGNMENT 16
12#endif
13
14u32 _dbg_cmd_dma_buf[128] __attribute__((aligned(DMA_BUF_ALIGNMENT)));
15
16#ifdef _EE
17
18void sio_write(char *buf, int size)
19{
20 while (size--) {
21 sio_putc(*(buf++));
22 }
23}
24
25void _sif2_cmd_puts(SIF2_CmdPkt *cmd, void *param)
26{
27 char *str;
28
29 if (cmd->extra) {
30 int left;
31 // sio_printf("getting %d extra bytes\n", cmd->extra_size);
32 left = cmd->extra_size;
33
34 while (left > 0) {
35 int toget;
36 toget = left;
37 if (toget > sizeof(_dbg_cmd_dma_buf)) {
38 toget = sizeof(_dbg_cmd_dma_buf);
39 }
40
41 // sio_printf("getting %d of %d bytes left\n", toget, left);
42
43 SIF2_set_dma((u32)&_dbg_cmd_dma_buf, toget, PS2_DMA_TO_MEM);
44
45 // wait for transfer to complete.
46 SIF2_sync_dma();
47
48 // sio_printf("sunk!\n");
49
50 str = (char *)((((u32)_dbg_cmd_dma_buf)) | 0x20000000);
51 sio_write(str, toget);
52 // str[toget] = '\0';
53 // sio_puts(str);
54
55 left -= toget;
56 }
57 } else {
58 str = (char *)(((u32)cmd) + sizeof(SIF2_CmdPkt));
59 sio_puts(str);
60 }
61}
62#endif
63
64int dbg_puts(char *str)
65{
66 SIF2_send_cmd(DBG_CMD_PUTS, str, strlen(str) + 1);
67 return (0);
68}
69
70int dbg_init(void)
71{
72
73#ifdef _EE
74 SIF2_set_cmd_handler(DBG_CMD_PUTS, &_sif2_cmd_puts, NULL);
75#endif
76
77 return (0);
78}
typedef __attribute__
Definition tlbfunc.c:60
size_t sio_write(void *buf, size_t size)