Mercurial > repos > blastem
diff sms.c @ 1696:956c1cce05e2 mame_interp
Merge from default
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Thu, 24 Jan 2019 19:15:59 -0800 |
parents | b7ecd0d6a77b 319d90025d50 |
children | 95e387e1d63c |
line wrap: on
line diff
--- a/sms.c Tue Dec 25 11:12:26 2018 -0800 +++ b/sms.c Thu Jan 24 19:15:59 2019 -0800 @@ -235,6 +235,18 @@ end_section(buf); } +static uint8_t *serialize(system_header *sys, size_t *size_out) +{ + sms_context *sms = (sms_context *)sys; + serialize_buffer state; + init_serialize(&state); + sms_serialize(sms, &state); + if (size_out) { + *size_out = state.size; + } + return state.data; +} + static void ram_deserialize(deserialize_buffer *buf, void *vsms) { sms_context *sms = vsms; @@ -290,6 +302,16 @@ //cart RAM is enabled, invalidate the region in case there is any code there z80_invalidate_code_range(sms->z80, 0x8000, 0xC000); } + free(buf->handlers); + buf->handlers = NULL; +} + +static void deserialize(system_header *sys, uint8_t *data, size_t size) +{ + sms_context *sms = (sms_context *)sys; + deserialize_buffer buffer; + init_deserialize(&buffer, data, size); + sms_deserialize(&buffer, sms); } static void save_state(sms_context *sms, uint8_t slot) @@ -392,18 +414,22 @@ target_cycle -= adjust; } } +#ifndef IS_LIB bindings_release_capture(); vdp_release_framebuffer(sms->vdp); render_pause_source(sms->psg->audio); +#endif sms->should_return = 0; } static void resume_sms(system_header *system) { sms_context *sms = (sms_context *)system; +#ifndef IS_LIB bindings_reacquire_capture(); vdp_reacquire_framebuffer(sms->vdp); render_resume_source(sms->psg->audio); +#endif run_sms(system); } @@ -456,6 +482,7 @@ { sms_context *sms = (sms_context *)system; sms->should_return = 1; + sms->z80->target_cycle = sms->z80->sync_cycle = sms->z80->current_cycle; } static void inc_debug_mode(system_header *system) @@ -608,6 +635,8 @@ sms->header.keyboard_down = keyboard_down; sms->header.keyboard_up = keyboard_up; sms->header.config_updated = config_updated; + sms->header.serialize = serialize; + sms->header.deserialize = deserialize; sms->header.type = SYSTEM_SMS; return sms;