Mercurial > repos > blastem
diff cdimage.c @ 2280:9ead0fe69d9b
Implement savestate support for Sega CD
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 08 Jan 2023 14:42:24 -0800 |
parents | 646d1797f20d |
children | efc75ea79164 |
line wrap: on
line diff
--- a/cdimage.c Sun Jan 08 14:20:43 2023 -0800 +++ b/cdimage.c Sun Jan 08 14:42:24 2023 -0800 @@ -561,3 +561,41 @@ media->read_subcodes = bin_subcode_read; return media->size; } + +void cdimage_serialize(system_media *media, serialize_buffer *buf) +{ + if (media->type != MEDIA_CDROM) { + return; + } + save_int32(buf, media->cur_track); + save_int32(buf, media->cur_sector); + if (media->cur_track < media->num_tracks && media->tracks[media->cur_track].f) { + save_int32(buf, ftell(media->tracks[media->cur_track].f)); + } else { + save_int32(buf, 0); + } + save_int8(buf, media->in_fake_pregap); + save_int8(buf, media->byte_storage); + if (media->tmp_buffer) { + save_buffer8(buf, media->tmp_buffer, 96); + } +} + +void cdimage_deserialize(deserialize_buffer *buf, void *vmedia) +{ + system_media *media = vmedia; + if (media->type != MEDIA_CDROM) { + return; + } + media->cur_track = load_int32(buf); + media->cur_sector = load_int32(buf); + uint32_t seekpos = load_int32(buf); + if (media->cur_track < media->num_tracks && media->tracks[media->cur_track].f) { + fseek(media->tracks[media->cur_track].f, seekpos, SEEK_SET); + } + media->in_fake_pregap = load_int8(buf); + media->byte_storage = load_int8(buf); + if (media->tmp_buffer) { + load_buffer8(buf, media->tmp_buffer, 96); + } +}