blob: 4626c44bc5b9c7e992e7e9d9f990f190e760755e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
|
//////////////////////////////////////////////////////////////////////////////
// debug_emu.cpp //
//////////////////////////////////////////////////////////////////////////////
/*
debug support for EmuDebug console v1.2+
*/
//////////////////////////////////////////////////////////////////////////////
// Includes //
//////////////////////////////////////////////////////////////////////////////
#include "gpdebug.h"
//////////////////////////////////////////////////////////////////////////////
// Defines //
//////////////////////////////////////////////////////////////////////////////
#define debugBufferData ((volatile char *)debugBufferAddr + 8)
#define debugBufferBegin REG4((int)debugBufferAddr + 0) // read
#define debugBufferEnd REG4((int)debugBufferAddr + 4) // write
#define debugBufferDataSize 256
#define debugBufferSize (8 + debugBufferDataSize)
//////////////////////////////////////////////////////////////////////////////
// Variables //
//////////////////////////////////////////////////////////////////////////////
static int debugging = 0;
static void * volatile debugBufferAddr;
char debugBuffer[debugBufferDataSize]; // instead of malloc
//////////////////////////////////////////////////////////////////////////////
// __putchar //
//////////////////////////////////////////////////////////////////////////////
void __putchar(int c)
{
unsigned int nextEnd;
if (!debugging) return;
do
{
nextEnd = debugBufferEnd + 1;
if (nextEnd >= debugBufferDataSize) nextEnd = 0;
} while (nextEnd == debugBufferBegin); // full?
debugBufferData[debugBufferEnd] = c;
debugBufferEnd = nextEnd;
}
//////////////////////////////////////////////////////////////////////////////
// __getchar //
//////////////////////////////////////////////////////////////////////////////
int __getchar()
{
//if (!debugging) return -1;
return -1;
}
//////////////////////////////////////////////////////////////////////////////
// __kbhit //
//////////////////////////////////////////////////////////////////////////////
int __kbhit()
{
//if (!debugging) return false;
return 0;
}
//////////////////////////////////////////////////////////////////////////////
// __gets //
//////////////////////////////////////////////////////////////////////////////
char * __gets(char *s)
{
char *p = s;
if (!debugging) return 0;
while (1)
{
int c = getchar();
if (c >= 0) *p++ = c;
if (c == 0) return s;
}
return s;
}
//////////////////////////////////////////////////////////////////////////////
// __puts //
//////////////////////////////////////////////////////////////////////////////
int __puts(const char *s)
{
if (!debugging) return 0;
while (*s) putchar(*s++);
return 0;
/*
while (debugBufferAddr[0]) {} // wait until buffer is clear
int r = sprintf(debugBufferAddr+1, "%s", s);
debugBufferAddr[0] = r;
return r;
*/
}
//////////////////////////////////////////////////////////////////////////////
// __printf //
//////////////////////////////////////////////////////////////////////////////
int __printf(char *fmt, ...)
{
char s[256];
int r;
va_list marker;
if (!debugging) return 0;
va_start(marker, fmt);
r = vsprintf(s, fmt, marker);
va_end(marker);
puts(s);
return r;
}
//////////////////////////////////////////////////////////////////////////////
// InitDebug //
//////////////////////////////////////////////////////////////////////////////
void InitDebug()
{
debugBufferAddr = debugBuffer;
//debugBufferAddr = malloc(debugBufferSize);
debugBufferBegin = debugBufferEnd = 0xEDEBEDEB;
memset((void *)debugBufferData, ' ', debugBufferDataSize);
debugBufferData[0] = '{'; debugBufferData[debugBufferDataSize - 1] = '}';
while (debugBufferBegin && debugBufferEnd) { } // wait for debugger
debugging = 1;
}
|