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;