GBDK 2020 Docs  4.5.0
API Documentation for GBDK 2020
emu_debug.h
Go to the documentation of this file.
1
13// Suppress SDCC "info 128" warnings that are a non-issue
14#pragma disable_warning 218
15
16#ifndef __GBDK_EMU_DEBUG_H_INCLUDE
17#define __GBDK_EMU_DEBUG_H_INCLUDE
18
19#include <types.h>
20
21#if defined(__TARGET_gb) || defined(__TARGET_ap) || defined(__TARGET_sms) || defined(__TARGET_gg)
22
46#define EMU_MESSAGE(message_text) EMU_MESSAGE1(EMU_MACRONAME(__LINE__), message_text)
47#define BGB_MESSAGE(message_text) EMU_MESSAGE(message_text)
48
50#define EMU_MACRONAME(A) EMU_MACRONAME1(A)
51#define EMU_MACRONAME1(A) EMULOG##A
52
53#define EMU_MESSAGE1(name, message_text) \
54__asm \
55.MACRO name msg_t, ?llbl \
56 ld d, d \
57 jr llbl \
58 .dw 0x6464 \
59 .dw 0x0000 \
60 .ascii msg_t \
61llbl: \
62.ENDM \
63name ^/message_text/ \
64__endasm
65
66#define EMU_MESSAGE_SUFFIX(message_text, message_suffix) EMU_MESSAGE3(EMU_MACRONAME(__LINE__), message_text, message_suffix)
67#define EMU_MESSAGE3(name, message_text, message_suffix) \
68__asm \
69.MACRO name msg_t, msg_s, ?llbl \
70 ld d, d \
71 jr llbl \
72 .dw 0x6464 \
73 .dw 0x0000 \
74 .ascii msg_t \
75 .ascii msg_s \
76llbl: \
77.ENDM \
78name ^/message_text/, ^/message_suffix/ \
79__endasm
81
92#define EMU_PROFILE_BEGIN(MSG) EMU_MESSAGE_SUFFIX(MSG, "%ZEROCLKS%");
93#define BGB_PROFILE_BEGIN(MSG) EMU_PROFILE_BEGIN(MSG)
119#if defined(NINTENDO)
120#define EMU_PROFILE_END(MSG) EMU_MESSAGE_SUFFIX(MSG,"%-8+LASTCLKS%");
121#define BGB_PROFILE_END(MSG) EMU_PROFILE_END(MSG)
122#elif defined(SEGA)
123#define EMU_PROFILE_END(MSG) EMU_MESSAGE_SUFFIX(MSG,"%-16+LASTCLKS%");
124#define BGB_PROFILE_END(MSG) EMU_PROFILE_END(MSG)
125#endif
126
127#define EMU_TEXT(MSG) EMU_MESSAGE(MSG)
128#define BGB_TEXT(MSG) EMU_TEXT(MSG)
129
130#if defined(NINTENDO)
140#define BGB_profiler_message EMU_profiler_message()
141#endif // NINTENDO
142
173void EMU_printf(const char *format, ...) PRESERVES_REGS(a, b, c);
174#define BGB_printf(...) EMU_printf(__VA_ARGS__)
175
185void EMU_fmtbuf(const unsigned char * format, void * data) PRESERVES_REGS(a, b, c);
186
187#ifdef NINTENDO
188static void * __EMU_PROFILER_INIT = &EMU_profiler_message;
189#endif // NINTENDO
190
193#define EMU_BREAKPOINT __asm__("ld b, b");
194#define BGB_BREAKPOINT EMU_BREAKPOINT
195
196#elif defined(__TARGET_duck)
197 #error Not implemented yet
198#else
199 #error Unrecognized port
200#endif
201
202#endif
#define PRESERVES_REGS(...)
Definition: types.h:32
void EMU_fmtbuf(const unsigned char *format, void *data) PRESERVES_REGS(a
void EMU_printf(const char *format,...) PRESERVES_REGS(a
void EMU_profiler_message(void)
void b
Definition: emu_debug.h:173
void c
Definition: emu_debug.h:173