Mercurial > repos > blastem
diff rf5c164.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 | 5a21bc0ec583 |
children | 0343f0d5add0 |
line wrap: on
line diff
--- a/rf5c164.c Sun Jan 08 14:20:43 2023 -0800 +++ b/rf5c164.c Sun Jan 08 14:42:24 2023 -0800 @@ -262,3 +262,50 @@ pcm->channels[i].scope_channel = scope_add_channel(scope, names[i], 50000000 / (pcm->clock_step * 96)); } } + +void rf5c164_serialize(rf5c164* pcm, serialize_buffer *buf) +{ + save_int32(buf, pcm->cycle); + save_buffer16(buf, pcm->ram, sizeof(pcm->ram)/sizeof(*pcm->ram)); + save_int16(buf, pcm->ram_bank); + save_int16(buf, pcm->pending_address); + save_int32(buf, pcm->left); + save_int32(buf, pcm->right); + for (int i = 0; i < 8; i++) + { + rf5c164_channel *chan = pcm->channels + i; + save_int32(buf, chan->cur_ptr); + save_buffer8(buf, chan->regs, sizeof(chan->regs)); + save_int8(buf, chan->sample); + } + save_int8(buf, pcm->pending_byte); + save_int8(buf, pcm->channel_enable); + save_int8(buf, pcm->selected_channel); + save_int8(buf, pcm->cur_channel); + save_int8(buf, pcm->step); + save_int8(buf, pcm->flags); +} + +void rf5c164_deserialize(deserialize_buffer *buf, void *vpcm) +{ + rf5c164 *pcm = vpcm; + pcm->cycle = load_int32(buf); + load_buffer16(buf, pcm->ram, sizeof(pcm->ram)/sizeof(*pcm->ram)); + pcm->ram_bank = load_int16(buf); + pcm->pending_address = load_int16(buf); + pcm->left = load_int32(buf); + pcm->right = load_int32(buf); + for (int i = 0; i < 8; i++) + { + rf5c164_channel *chan = pcm->channels + i; + chan->cur_ptr = load_int32(buf); + load_buffer8(buf, chan->regs, sizeof(chan->regs)); + chan->sample = load_int8(buf); + } + pcm->pending_byte = load_int8(buf); + pcm->channel_enable = load_int8(buf); + pcm->selected_channel = load_int8(buf); + pcm->cur_channel = load_int8(buf); + pcm->step = load_int8(buf); + pcm->flags = load_int8(buf); +}