Mercurial > repos > blastem
annotate gen_player.c @ 1975:3701517d852c
Avoid expensive re-init from switching to external sync after render_init has been called
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Fri, 08 May 2020 16:52:32 -0700 |
parents | bd70f1e15684 |
children | a042e046f7f2 |
rev | line source |
---|---|
1947
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 #include "gen_player.h" |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 #include "event_log.h" |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 #include "render.h" |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 #ifdef IS_LIB |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 #define MAX_SOUND_CYCLES (MCLKS_PER_YM*NUM_OPERATORS*6*4) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 #else |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 #define MAX_SOUND_CYCLES 100000 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 #endif |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 static void sync_sound(gen_player *gen, uint32_t target) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 //printf("YM | Cycle: %d, bpos: %d, PSG | Cycle: %d, bpos: %d\n", gen->ym->current_cycle, gen->ym->buffer_pos, gen->psg->cycles, gen->psg->buffer_pos * 2); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 while (target > gen->psg->cycles && target - gen->psg->cycles > MAX_SOUND_CYCLES) { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 uint32_t cur_target = gen->psg->cycles + MAX_SOUND_CYCLES; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 //printf("Running PSG to cycle %d\n", cur_target); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 psg_run(gen->psg, cur_target); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 //printf("Running YM-2612 to cycle %d\n", cur_target); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 ym_run(gen->ym, cur_target); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 psg_run(gen->psg, target); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 ym_run(gen->ym, target); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 //printf("Target: %d, YM bufferpos: %d, PSG bufferpos: %d\n", target, gen->ym->buffer_pos, gen->psg->buffer_pos * 2); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
27 static void run(gen_player *player) |
1947
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 while(player->reader.socket || player->reader.buffer.cur_pos < player->reader.buffer.size) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 uint32_t cycle; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 uint8_t event = reader_next_event(&player->reader, &cycle); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 switch (event) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 case EVENT_FLUSH: |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 sync_sound(player, cycle); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 vdp_run_context(player->vdp, cycle); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 break; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 case EVENT_ADJUST: { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 sync_sound(player, cycle); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 vdp_run_context(player->vdp, cycle); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 uint32_t deduction = load_int32(&player->reader.buffer); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 ym_adjust_cycles(player->ym, deduction); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 vdp_adjust_cycles(player->vdp, deduction); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 player->psg->cycles -= deduction; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 break; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 case EVENT_PSG_REG: |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 sync_sound(player, cycle); |
1957 | 49 reader_ensure_data(&player->reader, 1); |
1947
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 psg_write(player->psg, load_int8(&player->reader.buffer)); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 break; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 case EVENT_YM_REG: { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 sync_sound(player, cycle); |
1957 | 54 reader_ensure_data(&player->reader, 3); |
1947
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 uint8_t part = load_int8(&player->reader.buffer); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 uint8_t reg = load_int8(&player->reader.buffer); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 uint8_t value = load_int8(&player->reader.buffer); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 if (part) { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 ym_address_write_part2(player->ym, reg); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 } else { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 ym_address_write_part1(player->ym, reg); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 ym_data_write(player->ym, value); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 break; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
65 case EVENT_STATE: { |
1957 | 66 reader_ensure_data(&player->reader, 3); |
1947
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
67 uint32_t size = load_int8(&player->reader.buffer) << 16; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
68 size |= load_int16(&player->reader.buffer); |
1957 | 69 reader_ensure_data(&player->reader, size); |
1947
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 deserialize_buffer buffer; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
71 init_deserialize(&buffer, player->reader.buffer.data + player->reader.buffer.cur_pos, size); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 register_section_handler(&buffer, (section_handler){.fun = vdp_deserialize, .data = player->vdp}, SECTION_VDP); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 register_section_handler(&buffer, (section_handler){.fun = ym_deserialize, .data = player->ym}, SECTION_YM2612); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 register_section_handler(&buffer, (section_handler){.fun = psg_deserialize, .data = player->psg}, SECTION_PSG); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 while (buffer.cur_pos < buffer.size) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 load_section(&buffer); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 player->reader.buffer.cur_pos += size; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
80 free(buffer.handlers); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
81 break; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
82 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
83 default: |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
84 vdp_run_context(player->vdp, cycle); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
85 vdp_replay_event(player->vdp, event, &player->reader); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
86 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
87 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
88 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
89 } |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
90 if (!player->reader.socket) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
91 reader_ensure_data(&player->reader, 1); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
92 } |
1947
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
93 } |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
94 } |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
95 |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
96 static int thread_main(void *player) |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
97 { |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
98 run(player); |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
99 return 0; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
100 } |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
101 |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
102 void start_context(system_header *sys, char *statefile) |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
103 { |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
104 gen_player *player = (gen_player *)sys; |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
105 if (player->reader.socket) { |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
106 render_create_thread(&player->thread, "player", thread_main, player); |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
107 } else { |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
108 run(player); |
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
109 } |
1947
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
110 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
111 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
112 static void gamepad_down(system_header *system, uint8_t gamepad_num, uint8_t button) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
113 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
114 gen_player *player = (gen_player *)system; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
115 reader_send_gamepad_event(&player->reader, gamepad_num, button, 1); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
116 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
117 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
118 static void gamepad_up(system_header *system, uint8_t gamepad_num, uint8_t button) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
119 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
120 gen_player *player = (gen_player *)system; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
121 reader_send_gamepad_event(&player->reader, gamepad_num, button, 0); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
122 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
123 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
124 #define MCLKS_NTSC 53693175 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
125 #define MCLKS_PAL 53203395 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
126 #define MCLKS_PER_YM 7 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
127 #define MCLKS_PER_Z80 15 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
128 #define MCLKS_PER_PSG (MCLKS_PER_Z80*16) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
129 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
130 static void config_common(gen_player *player) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
131 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
132 uint8_t vid_std = load_int8(&player->reader.buffer); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
133 uint8_t name_len = load_int8(&player->reader.buffer); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
134 player->header.info.name = calloc(1, name_len + 1); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
135 load_buffer8(&player->reader.buffer, player->header.info.name, name_len); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
136 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
137 player->vdp = init_vdp_context(vid_std == VID_PAL, 0); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
138 render_set_video_standard(vid_std); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
139 uint32_t master_clock = vid_std == VID_NTSC ? MCLKS_NTSC : MCLKS_PAL; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
140 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
141 player->ym = malloc(sizeof(ym2612_context)); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
142 ym_init(player->ym, master_clock, MCLKS_PER_YM, 0); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
143 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
144 player->psg = malloc(sizeof(psg_context)); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
145 psg_init(player->psg, master_clock, MCLKS_PER_PSG); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
146 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
147 player->header.start_context = start_context; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
148 player->header.gamepad_down = gamepad_down; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
149 player->header.gamepad_up = gamepad_up; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
150 player->header.type = SYSTEM_GENESIS_PLAYER; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
151 player->header.info.save_type = SAVE_NONE; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
152 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
153 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
154 gen_player *alloc_config_gen_player(void *stream, uint32_t rom_size) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
155 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
156 uint8_t *data = stream; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
157 gen_player *player = calloc(1, sizeof(gen_player)); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
158 init_event_reader(&player->reader, data + 9, rom_size - 9); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
159 config_common(player); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
160 return player; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
161 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
162 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
163 gen_player *alloc_config_gen_player_reader(event_reader *reader) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
164 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
165 gen_player *player = calloc(1, sizeof(gen_player)); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
166 player->reader = *reader; |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
167 inflateCopy(&player->reader.input_stream, &reader->input_stream); |
1967
bd70f1e15684
Make netplay remote sync to network rather than audio or video so it doesn't drift out of sync with the host
Michael Pavone <pavone@retrodev.com>
parents:
1958
diff
changeset
|
168 render_set_external_sync(1); |
1947
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
169 config_common(player); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
170 return player; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
171 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
172 |