diff vdp.c @ 2009:4ace0fef6f8f

Add support for the parts of the KMod debug ports used by SGDK
author Mike Pavone <pavone@retrodev.com>
date Mon, 19 Oct 2020 15:46:16 -0700
parents 0740d90812ee
children 19957e7353a4
line wrap: on
line diff
--- a/vdp.c	Fri Oct 16 22:13:07 2020 -0700
+++ b/vdp.c	Mon Oct 19 15:46:16 2020 -0700
@@ -10,6 +10,7 @@
 #include "render.h"
 #include "util.h"
 #include "event_log.h"
+#include "terminal.h"
 
 #define NTSC_INACTIVE_START 224
 #define PAL_INACTIVE_START 240
@@ -3782,6 +3783,33 @@
 				if (reg == REG_MODE_1 || reg == REG_MODE_2 || reg == REG_MODE_4) {
 					update_video_params(context);
 				}
+			} else if (reg == REG_KMOD_CTRL) {
+				if (!(value & 0xFF)) {
+					context->system->enter_debugger = 1;
+				}
+			} else if (reg == REG_KMOD_MSG) {
+				char c = value;
+				if (c) {
+					context->kmod_buffer_length++;
+					if ((context->kmod_buffer_length + 1) > context->kmod_buffer_storage) {
+						context->kmod_buffer_storage = context->kmod_buffer_length ? 128 : context->kmod_buffer_length * 2;
+						context->kmod_msg_buffer = realloc(context->kmod_msg_buffer, context->kmod_buffer_storage);
+					}
+					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);
+					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 (value & 0xC0) {
+					context->timer_start_cycle = context->cycles;
+				}
 			}
 		} else if (mode_5) {
 			context->flags |= FLAG_PENDING;