Mercurial > repos > blastem
changeset 2032:441d5d6cea2f
Make KDEBUG functionality play nice with gdb remote debugging
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 20 Feb 2021 14:52:32 -0800 |
parents | 0757da8ee702 |
children | 894bf99a13f1 |
files | util.c util.h vdp.c |
diffstat | 3 files changed, 21 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/util.c Sat Feb 20 14:51:45 2021 -0800 +++ b/util.c Sat Feb 20 14:52:32 2021 -0800 @@ -534,6 +534,11 @@ output_enabled = 0; } +uint8_t is_stdout_enabled(void) +{ + return output_enabled; +} + #ifdef _WIN32 #define WINVER 0x501 #include <winsock2.h>
--- a/util.h Sat Feb 20 14:51:45 2021 -0800 +++ b/util.h Sat Feb 20 14:52:32 2021 -0800 @@ -88,6 +88,8 @@ void debug_message(char *format, ...); //Disables output of info and debug messages to stdout void disable_stdout_messages(void); +//Returns stdout disable status +uint8_t is_stdout_enabled(void); //Deletes a file, returns true on success, false on failure uint8_t delete_file(char *path); //Initializes the socket library on platforms that need it
--- a/vdp.c Sat Feb 20 14:51:45 2021 -0800 +++ b/vdp.c Sat Feb 20 14:52:32 2021 -0800 @@ -3809,14 +3809,24 @@ context->kmod_msg_buffer[context->kmod_buffer_length - 1] = c; } else if (context->kmod_buffer_length) { context->kmod_msg_buffer[context->kmod_buffer_length] = 0; - init_terminal(); - printf("KDEBUG MESSAGE: %s\n", context->kmod_msg_buffer); + if (is_stdout_enabled()) { + init_terminal(); + printf("KDEBUG MESSAGE: %s\n", context->kmod_msg_buffer); + } else { + // GDB remote debugging is enabled, use stderr instead + fprintf(stderr, "KDEBUG MESSAGE: %s\n", context->kmod_msg_buffer); + } context->kmod_buffer_length = 0; } } else if (reg == REG_KMOD_TIMER) { if (!(value & 0x80)) { - init_terminal(); - printf("KDEBUG TIMER: %d\n", (context->cycles - context->timer_start_cycle) / 7); + if (is_stdout_enabled()) { + init_terminal(); + printf("KDEBUG TIMER: %d\n", (context->cycles - context->timer_start_cycle) / 7); + } else { + // GDB remote debugging is enabled, use stderr instead + fprintf(stderr, "KDEBUG TIMER: %d\n", (context->cycles - context->timer_start_cycle) / 7); + } } if (value & 0xC0) { context->timer_start_cycle = context->cycles;