comparison gen_player.c @ 1957:ba06346611a1

Fix some netplay issues
author Mike Pavone <pavone@retrodev.com>
date Sat, 02 May 2020 00:52:21 -0700
parents c36102d09351
children 9c01945b5d20
comparison
equal deleted inserted replaced
1956:275f1c4bdb25 1957:ba06346611a1
45 vdp_adjust_cycles(player->vdp, deduction); 45 vdp_adjust_cycles(player->vdp, deduction);
46 player->psg->cycles -= deduction; 46 player->psg->cycles -= deduction;
47 break; 47 break;
48 case EVENT_PSG_REG: 48 case EVENT_PSG_REG:
49 sync_sound(player, cycle); 49 sync_sound(player, cycle);
50 reader_ensure_data(&player->reader, 1);
50 psg_write(player->psg, load_int8(&player->reader.buffer)); 51 psg_write(player->psg, load_int8(&player->reader.buffer));
51 break; 52 break;
52 case EVENT_YM_REG: { 53 case EVENT_YM_REG: {
53 sync_sound(player, cycle); 54 sync_sound(player, cycle);
55 reader_ensure_data(&player->reader, 3);
54 uint8_t part = load_int8(&player->reader.buffer); 56 uint8_t part = load_int8(&player->reader.buffer);
55 uint8_t reg = load_int8(&player->reader.buffer); 57 uint8_t reg = load_int8(&player->reader.buffer);
56 uint8_t value = load_int8(&player->reader.buffer); 58 uint8_t value = load_int8(&player->reader.buffer);
57 if (part) { 59 if (part) {
58 ym_address_write_part2(player->ym, reg); 60 ym_address_write_part2(player->ym, reg);
60 ym_address_write_part1(player->ym, reg); 62 ym_address_write_part1(player->ym, reg);
61 } 63 }
62 ym_data_write(player->ym, value); 64 ym_data_write(player->ym, value);
63 break; 65 break;
64 case EVENT_STATE: { 66 case EVENT_STATE: {
67 reader_ensure_data(&player->reader, 3);
65 uint32_t size = load_int8(&player->reader.buffer) << 16; 68 uint32_t size = load_int8(&player->reader.buffer) << 16;
66 size |= load_int16(&player->reader.buffer); 69 size |= load_int16(&player->reader.buffer);
67 if (player->reader.buffer.size - player->reader.buffer.cur_pos < size) { 70 reader_ensure_data(&player->reader, size);
68 puts("State has not been fully loaded!");
69 exit(1);
70 }
71 deserialize_buffer buffer; 71 deserialize_buffer buffer;
72 init_deserialize(&buffer, player->reader.buffer.data + player->reader.buffer.cur_pos, size); 72 init_deserialize(&buffer, player->reader.buffer.data + player->reader.buffer.cur_pos, size);
73 register_section_handler(&buffer, (section_handler){.fun = vdp_deserialize, .data = player->vdp}, SECTION_VDP); 73 register_section_handler(&buffer, (section_handler){.fun = vdp_deserialize, .data = player->vdp}, SECTION_VDP);
74 register_section_handler(&buffer, (section_handler){.fun = ym_deserialize, .data = player->ym}, SECTION_YM2612); 74 register_section_handler(&buffer, (section_handler){.fun = ym_deserialize, .data = player->ym}, SECTION_YM2612);
75 register_section_handler(&buffer, (section_handler){.fun = psg_deserialize, .data = player->psg}, SECTION_PSG); 75 register_section_handler(&buffer, (section_handler){.fun = psg_deserialize, .data = player->psg}, SECTION_PSG);