comparison 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
comparison
equal deleted inserted replaced
2279:3b5fef896475 2280:9ead0fe69d9b
559 media->seek = bin_seek; 559 media->seek = bin_seek;
560 media->read = bin_read; 560 media->read = bin_read;
561 media->read_subcodes = bin_subcode_read; 561 media->read_subcodes = bin_subcode_read;
562 return media->size; 562 return media->size;
563 } 563 }
564
565 void cdimage_serialize(system_media *media, serialize_buffer *buf)
566 {
567 if (media->type != MEDIA_CDROM) {
568 return;
569 }
570 save_int32(buf, media->cur_track);
571 save_int32(buf, media->cur_sector);
572 if (media->cur_track < media->num_tracks && media->tracks[media->cur_track].f) {
573 save_int32(buf, ftell(media->tracks[media->cur_track].f));
574 } else {
575 save_int32(buf, 0);
576 }
577 save_int8(buf, media->in_fake_pregap);
578 save_int8(buf, media->byte_storage);
579 if (media->tmp_buffer) {
580 save_buffer8(buf, media->tmp_buffer, 96);
581 }
582 }
583
584 void cdimage_deserialize(deserialize_buffer *buf, void *vmedia)
585 {
586 system_media *media = vmedia;
587 if (media->type != MEDIA_CDROM) {
588 return;
589 }
590 media->cur_track = load_int32(buf);
591 media->cur_sector = load_int32(buf);
592 uint32_t seekpos = load_int32(buf);
593 if (media->cur_track < media->num_tracks && media->tracks[media->cur_track].f) {
594 fseek(media->tracks[media->cur_track].f, seekpos, SEEK_SET);
595 }
596 media->in_fake_pregap = load_int8(buf);
597 media->byte_storage = load_int8(buf);
598 if (media->tmp_buffer) {
599 load_buffer8(buf, media->tmp_buffer, 96);
600 }
601 }