summaryrefslogtreecommitdiff
path: root/gen_player.c
diff options
context:
space:
mode:
Diffstat (limited to 'gen_player.c')
-rw-r--r--gen_player.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/gen_player.c b/gen_player.c
index c282517..91045e2 100644
--- a/gen_player.c
+++ b/gen_player.c
@@ -47,10 +47,12 @@ void start_context(system_header *sys, char *statefile)
break;
case EVENT_PSG_REG:
sync_sound(player, cycle);
+ reader_ensure_data(&player->reader, 1);
psg_write(player->psg, load_int8(&player->reader.buffer));
break;
case EVENT_YM_REG: {
sync_sound(player, cycle);
+ reader_ensure_data(&player->reader, 3);
uint8_t part = load_int8(&player->reader.buffer);
uint8_t reg = load_int8(&player->reader.buffer);
uint8_t value = load_int8(&player->reader.buffer);
@@ -62,12 +64,10 @@ void start_context(system_header *sys, char *statefile)
ym_data_write(player->ym, value);
break;
case EVENT_STATE: {
+ reader_ensure_data(&player->reader, 3);
uint32_t size = load_int8(&player->reader.buffer) << 16;
size |= load_int16(&player->reader.buffer);
- if (player->reader.buffer.size - player->reader.buffer.cur_pos < size) {
- puts("State has not been fully loaded!");
- exit(1);
- }
+ reader_ensure_data(&player->reader, size);
deserialize_buffer buffer;
init_deserialize(&buffer, player->reader.buffer.data + player->reader.buffer.cur_pos, size);
register_section_handler(&buffer, (section_handler){.fun = vdp_deserialize, .data = player->vdp}, SECTION_VDP);