comparison sms.c @ 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 aee2177a1630
children 071e761bcdcf
comparison
equal deleted inserted replaced
1208:95f5253e75c7 1209:5ee6b6345ea9
200 if (system->enter_debugger && sms->z80->pc) { 200 if (system->enter_debugger && sms->z80->pc) {
201 system->enter_debugger = 0; 201 system->enter_debugger = 0;
202 zdebugger(sms->z80, sms->z80->pc); 202 zdebugger(sms->z80, sms->z80->pc);
203 } 203 }
204 z80_run(sms->z80, target_cycle); 204 z80_run(sms->z80, target_cycle);
205 if (sms->z80->reset) {
206 z80_clear_reset(sms->z80, sms->z80->current_cycle + 128*15);
207 }
205 target_cycle = sms->z80->current_cycle; 208 target_cycle = sms->z80->current_cycle;
206 vdp_run_context(sms->vdp, target_cycle); 209 vdp_run_context(sms->vdp, target_cycle);
207 psg_run(sms->psg, target_cycle); 210 psg_run(sms->psg, target_cycle);
208 target_cycle += 3420*262; 211 target_cycle += 3420*262;
209 if (target_cycle > 0x10000000) { 212 if (target_cycle > 0x10000000) {
232 235
233 z80_assert_reset(sms->z80, 0); 236 z80_assert_reset(sms->z80, 0);
234 z80_clear_reset(sms->z80, 128*15); 237 z80_clear_reset(sms->z80, 128*15);
235 238
236 run_sms(system); 239 run_sms(system);
240 }
241
242 static void soft_reset(system_header *system)
243 {
244 sms_context *sms = (sms_context *)system;
245 z80_assert_reset(sms->z80, sms->z80->current_cycle);
246 sms->z80->target_cycle = sms->z80->sync_cycle = sms->z80->current_cycle;
237 } 247 }
238 248
239 static void free_sms(system_header *system) 249 static void free_sms(system_header *system)
240 { 250 {
241 sms_context *sms = (sms_context *)system; 251 sms_context *sms = (sms_context *)system;
339 sms->header.load_save = NULL; 349 sms->header.load_save = NULL;
340 sms->header.persist_save = NULL; 350 sms->header.persist_save = NULL;
341 sms->header.free_context = free_sms; 351 sms->header.free_context = free_sms;
342 sms->header.get_open_bus_value = get_open_bus_value; 352 sms->header.get_open_bus_value = get_open_bus_value;
343 sms->header.request_exit = request_exit; 353 sms->header.request_exit = request_exit;
354 sms->header.soft_reset = soft_reset;
344 sms->header.inc_debug_mode = inc_debug_mode; 355 sms->header.inc_debug_mode = inc_debug_mode;
345 sms->header.inc_debug_pal = inc_debug_pal; 356 sms->header.inc_debug_pal = inc_debug_pal;
346 357
347 return sms; 358 return sms;
348 } 359 }