changeset 1209:5ee6b6345ea9

Implement SMS hardware soft reset (note only available on real hardware on the Genesis in PBC mode)
author Michael Pavone <pavone@retrodev.com>
date Fri, 27 Jan 2017 22:30:52 -0800
parents 95f5253e75c7
children c95893007a83
files sms.c
diffstat 1 files changed, 11 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/sms.c	Fri Jan 27 21:27:37 2017 -0800
+++ b/sms.c	Fri Jan 27 22:30:52 2017 -0800
@@ -202,6 +202,9 @@
 			zdebugger(sms->z80, sms->z80->pc);
 		}
 		z80_run(sms->z80, target_cycle);
+		if (sms->z80->reset) {
+			z80_clear_reset(sms->z80, sms->z80->current_cycle + 128*15);
+		}
 		target_cycle = sms->z80->current_cycle;
 		vdp_run_context(sms->vdp, target_cycle);
 		psg_run(sms->psg, target_cycle);
@@ -236,6 +239,13 @@
 	run_sms(system);
 }
 
+static void soft_reset(system_header *system)
+{
+	sms_context *sms = (sms_context *)system;
+	z80_assert_reset(sms->z80, sms->z80->current_cycle);
+	sms->z80->target_cycle = sms->z80->sync_cycle = sms->z80->current_cycle;
+}
+
 static void free_sms(system_header *system)
 {
 	sms_context *sms = (sms_context *)system;
@@ -341,6 +351,7 @@
 	sms->header.free_context = free_sms;
 	sms->header.get_open_bus_value = get_open_bus_value;
 	sms->header.request_exit = request_exit;
+	sms->header.soft_reset = soft_reset;
 	sms->header.inc_debug_mode = inc_debug_mode;
 	sms->header.inc_debug_pal = inc_debug_pal;