mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-19 16:18:45 +00:00
f9a833abf0
svn-id: r5759
126 lines
4.4 KiB
C
126 lines
4.4 KiB
C
//////////////////////////////////////////////////////////////////////////////
|
|
// 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;
|
|
}
|