Mercurial > repos > blastem
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); |