Mercurial > repos > blastem
comparison 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 |
comparison
equal
deleted
inserted
replaced
2279:3b5fef896475 | 2280:9ead0fe69d9b |
---|---|
260 for (int i = 0; i < 8; i ++) | 260 for (int i = 0; i < 8; i ++) |
261 { | 261 { |
262 pcm->channels[i].scope_channel = scope_add_channel(scope, names[i], 50000000 / (pcm->clock_step * 96)); | 262 pcm->channels[i].scope_channel = scope_add_channel(scope, names[i], 50000000 / (pcm->clock_step * 96)); |
263 } | 263 } |
264 } | 264 } |
265 | |
266 void rf5c164_serialize(rf5c164* pcm, serialize_buffer *buf) | |
267 { | |
268 save_int32(buf, pcm->cycle); | |
269 save_buffer16(buf, pcm->ram, sizeof(pcm->ram)/sizeof(*pcm->ram)); | |
270 save_int16(buf, pcm->ram_bank); | |
271 save_int16(buf, pcm->pending_address); | |
272 save_int32(buf, pcm->left); | |
273 save_int32(buf, pcm->right); | |
274 for (int i = 0; i < 8; i++) | |
275 { | |
276 rf5c164_channel *chan = pcm->channels + i; | |
277 save_int32(buf, chan->cur_ptr); | |
278 save_buffer8(buf, chan->regs, sizeof(chan->regs)); | |
279 save_int8(buf, chan->sample); | |
280 } | |
281 save_int8(buf, pcm->pending_byte); | |
282 save_int8(buf, pcm->channel_enable); | |
283 save_int8(buf, pcm->selected_channel); | |
284 save_int8(buf, pcm->cur_channel); | |
285 save_int8(buf, pcm->step); | |
286 save_int8(buf, pcm->flags); | |
287 } | |
288 | |
289 void rf5c164_deserialize(deserialize_buffer *buf, void *vpcm) | |
290 { | |
291 rf5c164 *pcm = vpcm; | |
292 pcm->cycle = load_int32(buf); | |
293 load_buffer16(buf, pcm->ram, sizeof(pcm->ram)/sizeof(*pcm->ram)); | |
294 pcm->ram_bank = load_int16(buf); | |
295 pcm->pending_address = load_int16(buf); | |
296 pcm->left = load_int32(buf); | |
297 pcm->right = load_int32(buf); | |
298 for (int i = 0; i < 8; i++) | |
299 { | |
300 rf5c164_channel *chan = pcm->channels + i; | |
301 chan->cur_ptr = load_int32(buf); | |
302 load_buffer8(buf, chan->regs, sizeof(chan->regs)); | |
303 chan->sample = load_int8(buf); | |
304 } | |
305 pcm->pending_byte = load_int8(buf); | |
306 pcm->channel_enable = load_int8(buf); | |
307 pcm->selected_channel = load_int8(buf); | |
308 pcm->cur_channel = load_int8(buf); | |
309 pcm->step = load_int8(buf); | |
310 pcm->flags = load_int8(buf); | |
311 } |