Mercurial > repos > blastem
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 } |