diff psg.c @ 1427:4e5797b3935a

WIP - New savestate format
author Michael Pavone <pavone@retrodev.com>
date Sun, 06 Aug 2017 00:06:36 -0700
parents 4d16c09210fd
children 9c65819afec3
line wrap: on
line diff
--- a/psg.c	Fri Jul 07 21:44:49 2017 -0700
+++ b/psg.c	Sun Aug 06 00:06:36 2017 -0700
@@ -151,3 +151,35 @@
 	}
 }
 
+void psg_serialize(psg_context *context, serialize_buffer *buf)
+{
+	save_int16(buf, context->lsfr);
+	save_buffer16(buf, context->counter_load, 4);
+	save_buffer16(buf, context->counters, 4);
+	save_buffer8(buf, context->volume, 4);
+	uint8_t output_state = context->output_state[0] << 3 | context->output_state[1] << 2
+		| context->output_state[2] << 1 | context->output_state[3]
+		| context->noise_use_tone << 4;
+	save_int8(buf, output_state);
+	save_int8(buf, context->noise_type);
+	save_int8(buf, context->latch);
+	save_int32(buf, context->cycles);
+}
+
+void psg_deserialize(deserialize_buffer *buf, void *vcontext)
+{
+	psg_context *context = vcontext;
+	context->lsfr = load_int16(buf);
+	load_buffer16(buf, context->counter_load, 4);
+	load_buffer16(buf, context->counters, 4);
+	load_buffer8(buf, context->volume, 4);
+	uint8_t output_state = load_int8(buf);
+	context->output_state[0] = output_state & 8 >> 3;
+	context->output_state[1] = output_state & 4 >> 2;
+	context->output_state[2] = output_state & 2 >> 1;
+	context->output_state[3] = output_state & 1;
+	context->noise_use_tone = output_state & 0x10 >> 4;
+	context->noise_type = load_int8(buf);
+	context->latch = load_int8(buf);
+	context->cycles = load_int32(buf);
+}