Mercurial > repos > blastem
annotate event_log.c @ 2688:b42f00a3a937 default tip
Fix default target. Ensure m68k.h and z80.h are built before anything else when no dep info is available
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 31 Mar 2025 21:06:18 -0700 |
parents | 05915f01046d |
children |
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 #ifdef _WIN32 |
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 #define WINVER 0x501 |
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 <winsock2.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 #include <ws2tcpip.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
|
5 #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
|
6 #include <sys/types.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
|
7 #include <sys/socket.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
|
8 #include <unistd.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
|
9 #include <netdb.h> |
2681
c4256ce2c45a
Updated Android port using gradle toolchain and with basic Storage Access Framework support for Android 11+ support
Michael Pavone <pavone@retrodev.com>
parents:
1986
diff
changeset
|
10 #include <netinet/in.h> |
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
|
11 #include <netinet/tcp.h> |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
12 #include <pthread.h> |
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
|
13 #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
|
14 |
1986 | 15 #include <stdlib.h> |
16 #include <string.h> | |
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
|
17 #include <errno.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
|
18 #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
|
19 #include "util.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
|
20 #include "blastem.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
|
21 #include "saves.h" |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
22 #include "zlib/zlib.h" |
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
|
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 enum { |
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 CMD_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
|
26 CMD_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
|
27 }; |
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 static uint8_t active, fully_active; |
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 static FILE *event_file; |
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 static serialize_buffer buffer; |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
32 static uint8_t *compressed; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
33 static size_t compressed_storage; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
34 static z_stream output_stream; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
35 static uint32_t last; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
36 |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
37 static void event_log_common_init(void) |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
38 { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
39 init_serialize(&buffer); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
40 compressed_storage = 128*1024; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
41 compressed = malloc(compressed_storage); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
42 deflateInit(&output_stream, 9); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
43 output_stream.avail_out = compressed_storage; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
44 output_stream.next_out = compressed; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
45 output_stream.avail_in = 0; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
46 output_stream.next_in = buffer.data; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
47 last = 0; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
48 active = 1; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
49 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
50 |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
51 static uint8_t multi_count; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
52 static size_t multi_start; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
53 static void finish_multi(void) |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
54 { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
55 buffer.data[multi_start] |= multi_count - 2; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
56 multi_count = 0; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
57 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
58 |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
59 static void file_finish(void) |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
60 { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
61 fwrite(compressed, 1, output_stream.next_out - compressed, event_file); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
62 output_stream.next_out = compressed; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
63 output_stream.avail_out = compressed_storage; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
64 int result = deflate(&output_stream, Z_FINISH); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
65 if (Z_STREAM_END != result) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
66 fatal_error("Final deflate call returned %d\n", result); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
67 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
68 fwrite(compressed, 1, output_stream.next_out - compressed, event_file); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
69 fclose(event_file); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
70 } |
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
|
71 |
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 static const char el_ident[] = "BLSTEL\x02\x00"; |
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 void event_log_file(char *fname) |
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 { |
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 event_file = fopen(fname, "wb"); |
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 if (!event_file) { |
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 warning("Failed to open event file %s for writing\n", fname); |
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 return; |
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 } |
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 fwrite(el_ident, 1, sizeof(el_ident) - 1, event_file); |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
81 event_log_common_init(); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
82 fully_active = 1; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
83 atexit(file_finish); |
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
|
84 } |
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 |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
86 typedef struct { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
87 uint8_t *send_progress; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
88 int sock; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
89 uint8_t players[1]; //TODO: Expand when support for multiple players per remote is added |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
90 uint8_t num_players; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
91 } remote; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
92 |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
93 static int listen_sock; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
94 static remote remotes[7]; |
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
|
95 static int num_remotes; |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
96 static uint8_t available_players[7] = {2,3,4,5,6,7,8}; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
97 static int num_available_players = 7; |
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
|
98 void event_log_tcp(char *address, char *port) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
99 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
100 struct addrinfo request, *result; |
1949
5a76a7373823
Get WIP net play code compiling on Windows and cleanup some unistd.h includes
Michael Pavone <pavone@retrodev.com>
parents:
1948
diff
changeset
|
101 socket_init(); |
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
|
102 memset(&request, 0, sizeof(request)); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
103 request.ai_family = AF_INET; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
104 request.ai_socktype = SOCK_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
|
105 request.ai_flags = AI_PASSIVE; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
106 getaddrinfo(address, port, &request, &result); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
107 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
108 listen_sock = socket(result->ai_family, result->ai_socktype, result->ai_protocol); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
109 if (listen_sock < 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
|
110 warning("Failed to open event log listen socket on %s:%s\n", address, port); |
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 goto cleanup_address; |
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 } |
1949
5a76a7373823
Get WIP net play code compiling on Windows and cleanup some unistd.h includes
Michael Pavone <pavone@retrodev.com>
parents:
1948
diff
changeset
|
113 int param = 1; |
5a76a7373823
Get WIP net play code compiling on Windows and cleanup some unistd.h includes
Michael Pavone <pavone@retrodev.com>
parents:
1948
diff
changeset
|
114 setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, (const char *)¶m, sizeof(param)); |
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
|
115 if (bind(listen_sock, result->ai_addr, result->ai_addrlen) < 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
|
116 warning("Failed to bind event log listen socket on %s:%s\n", address, port); |
1949
5a76a7373823
Get WIP net play code compiling on Windows and cleanup some unistd.h includes
Michael Pavone <pavone@retrodev.com>
parents:
1948
diff
changeset
|
117 socket_close(listen_sock); |
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
|
118 goto cleanup_address; |
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 if (listen(listen_sock, 3) < 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
|
121 warning("Failed to listen for event log remotes on %s:%s\n", address, port); |
1949
5a76a7373823
Get WIP net play code compiling on Windows and cleanup some unistd.h includes
Michael Pavone <pavone@retrodev.com>
parents:
1948
diff
changeset
|
122 socket_close(listen_sock); |
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
|
123 goto cleanup_address; |
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 } |
1949
5a76a7373823
Get WIP net play code compiling on Windows and cleanup some unistd.h includes
Michael Pavone <pavone@retrodev.com>
parents:
1948
diff
changeset
|
125 socket_blocking(listen_sock, 0); |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
126 event_log_common_init(); |
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
|
127 cleanup_address: |
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 freeaddrinfo(result); |
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 |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
131 static event_reader *mem_reader; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
132 static uint8_t mem_reader_quit = 1; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
133 #ifndef _WIN32 |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
134 void event_log_mem(void) |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
135 { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
136 event_log_common_init(); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
137 free(buffer.data); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
138 buffer.storage = 1024 * 1024; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
139 buffer.data = malloc(buffer.storage); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
140 mem_reader = calloc(1, sizeof(event_reader)); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
141 mem_reader->last_cycle = 0; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
142 mem_reader->repeat_event = 0xFF; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
143 mem_reader->storage = buffer.storage; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
144 init_deserialize(&mem_reader->buffer, buffer.data, 0); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
145 mem_reader_quit = 0; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
146 } |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
147 #endif |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
148 |
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
|
149 static uint8_t *system_start; |
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 static size_t system_start_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
|
151 void event_system_start(system_type stype, vid_std video_std, char *name) |
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 { |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
153 if (!active || mem_reader) { |
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
|
154 return; |
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 save_int8(&buffer, stype); |
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 save_int8(&buffer, video_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
|
158 size_t name_len = strlen(name); |
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 if (name_len > 255) { |
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 name_len = 255; |
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 save_int8(&buffer, 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
|
163 save_buffer8(&buffer, name, strlen(name)); |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
164 if (listen_sock) { |
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
|
165 system_start = malloc(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
|
166 system_start_size = 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
|
167 memcpy(system_start, buffer.data, buffer.size); |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
168 } else { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
169 //system start header is never compressed, so write to file immediately |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
170 fwrite(buffer.data, 1, buffer.size, event_file); |
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
|
171 } |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
172 buffer.size = 0; |
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
|
173 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
174 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
175 //header formats |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
176 //Single byte: 4 bit type, 4 bit delta (16-31) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
177 //Three Byte: 8 bit type, 16-bit delta |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
178 //Four byte: 8-bit type, 24-bit signed delta |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
179 #define FORMAT_3BYTE 0xE0 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
180 #define FORMAT_4BYTE 0xF0 |
1956
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
181 static uint8_t last_event_type = 0xFF; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
182 static uint32_t last_delta; |
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
|
183 static void event_header(uint8_t type, 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
|
184 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
185 uint32_t delta = cycle - last; |
1956
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
186 if (multi_count) { |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
187 if (type != last_event_type || delta != last_delta) { |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
188 finish_multi(); |
1956
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
189 } else { |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
190 ++multi_count; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
191 if (multi_count == 17) { |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
192 finish_multi(); |
1956
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
193 last_event_type = 0xFF; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
194 } |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
195 return; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
196 } |
1957 | 197 } else if (type == last_event_type && delta == last_delta && type != EVENT_FLUSH) { |
1956
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
198 //make some room |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
199 save_int8(&buffer, 0); |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
200 //shift existing command |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
201 memmove(buffer.data + multi_start + 1, buffer.data + multi_start, buffer.size - multi_start - 1); |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
202 buffer.data[multi_start] = EVENT_MULTI << 4; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
203 multi_count = 2; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
204 return; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
205 } |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
206 multi_start = buffer.size; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
207 last_event_type = type; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
208 last_delta = delta; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
209 |
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
|
210 if (delta > 65535) { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
211 save_int8(&buffer, FORMAT_4BYTE | type); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
212 save_int8(&buffer, delta >> 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
|
213 save_int16(&buffer, delta); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
214 } else if (delta >= 16 && delta < 32) { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
215 save_int8(&buffer, type << 4 | (delta - 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
|
216 } 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
|
217 save_int8(&buffer, FORMAT_3BYTE | type); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
218 save_int16(&buffer, delta); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
219 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
220 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
221 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
222 void event_cycle_adjust(uint32_t cycle, uint32_t 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
|
223 { |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
224 if (!fully_active && !mem_reader) { |
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
|
225 return; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
226 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
227 event_header(EVENT_ADJUST, 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
|
228 last = cycle - 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
|
229 save_int32(&buffer, 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
|
230 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
231 |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
232 static uint8_t next_available_player(void) |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
233 { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
234 uint8_t lowest = 0xFF; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
235 int lowest_index = -1; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
236 for (int i = 0; i < num_available_players; i++) |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
237 { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
238 if (available_players[i] < lowest) { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
239 lowest = available_players[i]; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
240 lowest_index = i; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
241 } |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
242 } |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
243 if (lowest_index >= 0) { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
244 available_players[lowest_index] = available_players[num_available_players - 1]; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
245 --num_available_players; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
246 } |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
247 return lowest; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
248 } |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
249 |
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
|
250 static void flush_socket(void) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
251 { |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
252 int remote_sock = accept(listen_sock, NULL, NULL); |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
253 if (remote_sock != -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
|
254 if (num_remotes == 7) { |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
255 socket_close(remote_sock); |
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
|
256 } 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
|
257 printf("remote %d connected\n", num_remotes); |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
258 uint8_t player = next_available_player(); |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
259 remotes[num_remotes++] = (remote){ |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
260 .sock = remote_sock, |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
261 .send_progress = NULL, |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
262 .players = {player}, |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
263 .num_players = player == 0xFF ? 0 : 1 |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
264 }; |
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
|
265 current_system->save_state = EVENTLOG_SLOT + 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
|
266 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
267 } |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
268 uint8_t *min_progress = compressed; |
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
|
269 for (int i = 0; i < num_remotes; i++) { |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
270 if (remotes[i].send_progress) { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
271 uint8_t recv_buffer[1500]; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
272 int bytes = recv(remotes[i].sock, recv_buffer, sizeof(recv_buffer), 0); |
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
|
273 for (int j = 0; j < bytes; j++) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
274 { |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
275 uint8_t cmd = recv_buffer[j]; |
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
|
276 switch(cmd) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
277 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
278 case CMD_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
|
279 case CMD_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
|
280 ++j; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
281 if (j < bytes) { |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
282 uint8_t button = recv_buffer[j]; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
283 uint8_t pad = (button >> 5) - 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
|
284 button &= 0x1F; |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
285 if (pad < remotes[i].num_players) { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
286 pad = remotes[i].players[pad]; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
287 if (cmd == CMD_GAMEPAD_DOWN) { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
288 current_system->gamepad_down(current_system, pad, button); |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
289 } else { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
290 current_system->gamepad_up(current_system, pad, button); |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
291 } |
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
|
292 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
293 } 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
|
294 warning("Received incomplete command %X\n", cmd); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
295 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
296 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
|
297 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
298 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
|
299 warning("Unrecognized remote command %X\n", cmd); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
300 j = bytes; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
301 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
302 } |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
303 int sent = 1; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
304 while (sent && output_stream.next_out > remotes[i].send_progress) |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
305 { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
306 sent = send(remotes[i].sock, remotes[i].send_progress, output_stream.next_out - remotes[i].send_progress, 0); |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
307 if (sent >= 0) { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
308 remotes[i].send_progress += sent; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
309 } else if (!socket_error_is_wouldblock()) { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
310 socket_close(remotes[i].sock); |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
311 for (int j = 0; j < remotes[i].num_players; j++) { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
312 available_players[num_available_players++] = remotes[i].players[j]; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
313 } |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
314 remotes[i] = remotes[num_remotes-1]; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
315 num_remotes--; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
316 if (!num_remotes) { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
317 //last remote disconnected, reset buffers/deflate |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
318 fully_active = 0; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
319 deflateReset(&output_stream); |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
320 output_stream.next_out = compressed; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
321 output_stream.avail_out = compressed_storage; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
322 buffer.size = 0; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
323 } |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
324 i--; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
325 break; |
1973
cd163b230cf9
Fix handling of remote disconnects
Michael Pavone <pavone@retrodev.com>
parents:
1972
diff
changeset
|
326 } |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
327 if (remotes[i].send_progress > min_progress) { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
328 min_progress = remotes[i].send_progress; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
329 } |
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
|
330 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
331 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
332 } |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
333 if (min_progress == output_stream.next_out) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
334 output_stream.next_out = compressed; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
335 output_stream.avail_out = compressed_storage; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
336 for (int i = 0; i < num_remotes; i++) { |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
337 if (remotes[i].send_progress) { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
338 remotes[i].send_progress = compressed; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
339 } |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
340 } |
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
|
341 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
342 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
343 |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
344 #ifndef _WIN32 |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
345 static pthread_mutex_t event_log_lock = PTHREAD_MUTEX_INITIALIZER; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
346 static pthread_cond_t event_cond = PTHREAD_COND_INITIALIZER; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
347 #endif |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
348 static event_reader *mem_reader; |
1971
80920c21bb52
Add an event log soft flush and call it twice per frame in between hard flushes to netplay latency when there are insufficient hardware updates to flush packets in the middle of a frame
Michael Pavone <pavone@retrodev.com>
parents:
1967
diff
changeset
|
349 uint8_t wrote_since_last_flush; |
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
|
350 void event_log(uint8_t type, uint32_t cycle, uint8_t size, uint8_t *payload) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
351 { |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
352 if (!fully_active && (!mem_reader || type == EVENT_PSG_REG || type == EVENT_YM_REG)) { |
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
|
353 return; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
354 } |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
355 |
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
|
356 event_header(type, 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
|
357 last = 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
|
358 save_buffer8(&buffer, payload, size); |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
359 if (!multi_count) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
360 last_event_type = 0xFF; |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
361 #ifndef _WIN32 |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
362 if (mem_reader) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
363 pthread_mutex_lock(&event_log_lock); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
364 if (mem_reader->buffer.cur_pos) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
365 memmove(buffer.data, buffer.data + mem_reader->buffer.cur_pos, buffer.size - mem_reader->buffer.cur_pos); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
366 buffer.size -= mem_reader->buffer.cur_pos; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
367 mem_reader->buffer.cur_pos = 0; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
368 } |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
369 mem_reader->buffer.size = buffer.size; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
370 pthread_cond_signal(&event_cond); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
371 pthread_mutex_unlock(&event_log_lock); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
372 } else |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
373 #endif |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
374 { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
375 output_stream.avail_in = buffer.size - (output_stream.next_in - buffer.data); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
376 int result = deflate(&output_stream, Z_NO_FLUSH); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
377 if (result != Z_OK) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
378 fatal_error("deflate returned %d\n", result); |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
379 } |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
380 if (listen_sock) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
381 if ((output_stream.next_out - compressed) > 1280 || !output_stream.avail_out) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
382 flush_socket(); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
383 wrote_since_last_flush = 1; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
384 } |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
385 } else if (!output_stream.avail_out) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
386 fwrite(compressed, 1, compressed_storage, event_file); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
387 output_stream.next_out = compressed; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
388 output_stream.avail_out = compressed_storage; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
389 } |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
390 if (!output_stream.avail_in) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
391 buffer.size = 0; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
392 output_stream.next_in = buffer.data; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
393 } |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
394 } |
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
|
395 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
396 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
397 |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
398 #ifndef _WIN32 |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
399 void event_log_mem_stop(void) |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
400 { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
401 pthread_mutex_lock(&event_log_lock); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
402 mem_reader_quit = 1; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
403 pthread_cond_signal(&event_cond); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
404 pthread_mutex_unlock(&event_log_lock); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
405 } |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
406 #endif |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
407 |
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
|
408 static uint32_t last_word_address; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
409 void event_vram_word(uint32_t cycle, uint32_t address, uint16_t 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
|
410 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
411 uint32_t delta = address - last_word_address; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
412 if (delta < 256) { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
413 uint8_t buffer[3] = {delta, value >> 8, 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
|
414 event_log(EVENT_VRAM_WORD_DELTA, cycle, sizeof(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
|
415 } 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
|
416 uint8_t buffer[5] = {address >> 16, address >> 8, address, value >> 8, 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
|
417 event_log(EVENT_VRAM_WORD, cycle, sizeof(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
|
418 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
419 last_word_address = address; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
420 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
421 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
422 static uint32_t last_byte_address; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
423 void event_vram_byte(uint32_t cycle, uint16_t address, uint8_t byte, uint8_t auto_inc) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
424 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
425 uint32_t delta = address - last_byte_address; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
426 if (delta == 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
|
427 event_log(EVENT_VRAM_BYTE_ONE, cycle, sizeof(byte), &byte); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
428 } else if (delta == auto_inc) { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
429 event_log(EVENT_VRAM_BYTE_AUTO, cycle, sizeof(byte), &byte); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
430 } else if (delta < 256) { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
431 uint8_t buffer[2] = {delta, byte}; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
432 event_log(EVENT_VRAM_BYTE_DELTA, cycle, sizeof(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
|
433 } 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
|
434 uint8_t buffer[3] = {address >> 8, address, byte}; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
435 event_log(EVENT_VRAM_BYTE, cycle, sizeof(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
|
436 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
437 last_byte_address = address; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
438 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
439 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
440 static size_t send_all(int sock, uint8_t *data, size_t size, int flags) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
441 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
442 size_t total = 0, sent = 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
|
443 while(sent > 0 && total < 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
|
444 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
445 sent = send(sock, data + total, size - total, flags); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
446 if (sent > 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
|
447 total += sent; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
448 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
449 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
450 return total; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
451 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
452 |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
453 void deflate_flush(uint8_t full) |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
454 { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
455 output_stream.avail_in = buffer.size - (output_stream.next_in - buffer.data); |
1972
f2d37131840e
Fix "full" deflate flush so multiple remotes can successfully join
Michael Pavone <pavone@retrodev.com>
parents:
1971
diff
changeset
|
456 uint8_t force = full; |
f2d37131840e
Fix "full" deflate flush so multiple remotes can successfully join
Michael Pavone <pavone@retrodev.com>
parents:
1971
diff
changeset
|
457 while (output_stream.avail_in || force) |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
458 { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
459 if (!output_stream.avail_out) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
460 size_t old_storage = compressed_storage; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
461 uint8_t *old_compressed = compressed; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
462 compressed_storage *= 2; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
463 compressed = realloc(compressed, compressed_storage); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
464 output_stream.next_out = compressed + old_storage; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
465 output_stream.avail_out = old_storage; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
466 for (int i = 0; i < num_remotes; i++) { |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
467 if (remotes[i].send_progress) { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
468 remotes[i].send_progress = compressed + (remotes[i].send_progress - old_compressed); |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
469 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
470 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
471 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
472 int result = deflate(&output_stream, full ? Z_FINISH : Z_SYNC_FLUSH); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
473 if (result != (full ? Z_STREAM_END : Z_OK)) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
474 fatal_error("deflate returned %d\n", result); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
475 } |
1972
f2d37131840e
Fix "full" deflate flush so multiple remotes can successfully join
Michael Pavone <pavone@retrodev.com>
parents:
1971
diff
changeset
|
476 if (full && result == Z_STREAM_END) { |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
477 result = deflateReset(&output_stream); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
478 if (result != Z_OK) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
479 fatal_error("deflateReset returned %d\n", result); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
480 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
481 } |
1972
f2d37131840e
Fix "full" deflate flush so multiple remotes can successfully join
Michael Pavone <pavone@retrodev.com>
parents:
1971
diff
changeset
|
482 force = 0; |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
483 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
484 output_stream.next_in = buffer.data; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
485 buffer.size = 0; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
486 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
487 |
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
|
488 void event_state(uint32_t cycle, serialize_buffer *state) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
489 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
490 if (!fully_active) { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
491 last = 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
|
492 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
493 uint8_t header[] = { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
494 EVENT_STATE << 4, last >> 24, last >> 16, last >> 8, last, |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
495 last_word_address >> 16, last_word_address >> 8, last_word_address, |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
496 last_byte_address >> 8, last_byte_address, |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
497 state->size >> 16, state->size >> 8, state->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
|
498 }; |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
499 uint8_t sent_system_start = 0; |
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
|
500 for (int i = 0; i < num_remotes; i++) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
501 { |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
502 if (!remotes[i].send_progress) { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
503 if (send_all(remotes[i].sock, system_start, system_start_size, 0) == system_start_size) { |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
504 sent_system_start = 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
|
505 } else { |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
506 socket_close(remotes[i].sock); |
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
|
507 remotes[i] = remotes[num_remotes-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
|
508 num_remotes--; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
509 i--; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
510 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
511 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
512 } |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
513 if (sent_system_start) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
514 if (fully_active) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
515 if (multi_count) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
516 finish_multi(); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
517 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
518 //full flush is needed so new and old clients can share a stream |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
519 deflate_flush(1); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
520 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
521 save_buffer8(&buffer, header, sizeof(header)); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
522 save_buffer8(&buffer, state->data, state->size); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
523 size_t old_compressed_size = output_stream.next_out - compressed; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
524 deflate_flush(1); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
525 size_t state_size = output_stream.next_out - compressed - old_compressed_size; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
526 for (int i = 0; i < num_remotes; i++) { |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
527 if (!remotes[i].send_progress) { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
528 if (send_all(remotes[i].sock, compressed + old_compressed_size, state_size, 0) == state_size) { |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
529 remotes[i].send_progress = compressed + old_compressed_size; |
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
530 socket_blocking(remotes[i].sock, 0); |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
531 int flag = 1; |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
532 setsockopt(remotes[i].sock, IPPROTO_TCP, TCP_NODELAY, (const char *)&flag, sizeof(flag)); |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
533 fully_active = 1; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
534 } else { |
1974
04b79a725b7f
Better handling of pad assignment to remotes
Michael Pavone <pavone@retrodev.com>
parents:
1973
diff
changeset
|
535 socket_close(remotes[i].sock); |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
536 remotes[i] = remotes[num_remotes-1]; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
537 num_remotes--; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
538 i--; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
539 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
540 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
541 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
542 output_stream.next_out = compressed + old_compressed_size; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
543 output_stream.avail_out = compressed_storage - old_compressed_size; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
544 } |
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
|
545 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
546 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
547 void event_flush(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
|
548 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
549 if (!active) { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
550 return; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
551 } |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
552 if (fully_active || mem_reader) { |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
553 event_header(EVENT_FLUSH, cycle); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
554 last = cycle; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
555 |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
556 #ifndef _WIN32 |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
557 if (mem_reader) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
558 pthread_mutex_lock(&event_log_lock); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
559 if (mem_reader->buffer.cur_pos) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
560 memmove(buffer.data, buffer.data + mem_reader->buffer.cur_pos, buffer.size - mem_reader->buffer.cur_pos); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
561 buffer.size -= mem_reader->buffer.cur_pos; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
562 mem_reader->buffer.cur_pos = 0; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
563 } |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
564 mem_reader->buffer.size = buffer.size; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
565 pthread_cond_signal(&event_cond); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
566 pthread_mutex_unlock(&event_log_lock); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
567 } else |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
568 #endif |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
569 { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
570 deflate_flush(0); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
571 } |
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
|
572 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
573 if (event_file) { |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
574 fwrite(compressed, 1, output_stream.next_out - compressed, event_file); |
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
|
575 fflush(event_file); |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
576 output_stream.next_out = compressed; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
577 output_stream.avail_out = compressed_storage; |
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
|
578 } else if (listen_sock) { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
579 flush_socket(); |
1971
80920c21bb52
Add an event log soft flush and call it twice per frame in between hard flushes to netplay latency when there are insufficient hardware updates to flush packets in the middle of a frame
Michael Pavone <pavone@retrodev.com>
parents:
1967
diff
changeset
|
580 wrote_since_last_flush = 0; |
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
|
581 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
582 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
583 |
1971
80920c21bb52
Add an event log soft flush and call it twice per frame in between hard flushes to netplay latency when there are insufficient hardware updates to flush packets in the middle of a frame
Michael Pavone <pavone@retrodev.com>
parents:
1967
diff
changeset
|
584 void event_soft_flush(uint32_t cycle) |
80920c21bb52
Add an event log soft flush and call it twice per frame in between hard flushes to netplay latency when there are insufficient hardware updates to flush packets in the middle of a frame
Michael Pavone <pavone@retrodev.com>
parents:
1967
diff
changeset
|
585 { |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
586 if ((!fully_active && !mem_reader) || wrote_since_last_flush || event_file) { |
1971
80920c21bb52
Add an event log soft flush and call it twice per frame in between hard flushes to netplay latency when there are insufficient hardware updates to flush packets in the middle of a frame
Michael Pavone <pavone@retrodev.com>
parents:
1967
diff
changeset
|
587 return; |
80920c21bb52
Add an event log soft flush and call it twice per frame in between hard flushes to netplay latency when there are insufficient hardware updates to flush packets in the middle of a frame
Michael Pavone <pavone@retrodev.com>
parents:
1967
diff
changeset
|
588 } |
80920c21bb52
Add an event log soft flush and call it twice per frame in between hard flushes to netplay latency when there are insufficient hardware updates to flush packets in the middle of a frame
Michael Pavone <pavone@retrodev.com>
parents:
1967
diff
changeset
|
589 event_header(EVENT_FLUSH, cycle); |
80920c21bb52
Add an event log soft flush and call it twice per frame in between hard flushes to netplay latency when there are insufficient hardware updates to flush packets in the middle of a frame
Michael Pavone <pavone@retrodev.com>
parents:
1967
diff
changeset
|
590 last = cycle; |
80920c21bb52
Add an event log soft flush and call it twice per frame in between hard flushes to netplay latency when there are insufficient hardware updates to flush packets in the middle of a frame
Michael Pavone <pavone@retrodev.com>
parents:
1967
diff
changeset
|
591 |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
592 #ifndef _WIN32 |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
593 if (mem_reader) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
594 pthread_mutex_lock(&event_log_lock); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
595 if (mem_reader->buffer.cur_pos) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
596 memmove(buffer.data, buffer.data + mem_reader->buffer.cur_pos, buffer.size - mem_reader->buffer.cur_pos); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
597 buffer.size -= mem_reader->buffer.cur_pos; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
598 mem_reader->buffer.cur_pos = 0; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
599 } |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
600 mem_reader->buffer.size = buffer.size; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
601 pthread_cond_signal(&event_cond); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
602 pthread_mutex_unlock(&event_log_lock); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
603 } else |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
604 #endif |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
605 { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
606 deflate_flush(0); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
607 flush_socket(); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
608 } |
1971
80920c21bb52
Add an event log soft flush and call it twice per frame in between hard flushes to netplay latency when there are insufficient hardware updates to flush packets in the middle of a frame
Michael Pavone <pavone@retrodev.com>
parents:
1967
diff
changeset
|
609 } |
80920c21bb52
Add an event log soft flush and call it twice per frame in between hard flushes to netplay latency when there are insufficient hardware updates to flush packets in the middle of a frame
Michael Pavone <pavone@retrodev.com>
parents:
1967
diff
changeset
|
610 |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
611 static void init_event_reader_common(event_reader *reader) |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
612 { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
613 reader->last_cycle = 0; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
614 reader->repeat_event = 0xFF; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
615 reader->storage = 512 * 1024; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
616 init_deserialize(&reader->buffer, malloc(reader->storage), reader->storage); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
617 reader->buffer.size = 0; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
618 memset(&reader->input_stream, 0, sizeof(reader->input_stream)); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
619 |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
620 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
621 |
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
|
622 void init_event_reader(event_reader *reader, uint8_t *data, size_t 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
|
623 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
624 reader->socket = 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
|
625 reader->last_cycle = 0; |
1956
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
626 reader->repeat_event = 0xFF; |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
627 init_event_reader_common(reader); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
628 uint8_t name_len = data[1]; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
629 reader->buffer.size = name_len + 2; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
630 memcpy(reader->buffer.data, data, reader->buffer.size); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
631 reader->input_stream.next_in = data + reader->buffer.size; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
632 reader->input_stream.avail_in = size - reader->buffer.size; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
633 |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
634 int result = inflateInit(&reader->input_stream); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
635 if (Z_OK != result) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
636 fatal_error("inflateInit returned %d\n", result); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
637 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
638 reader->input_stream.next_out = reader->buffer.data + reader->buffer.size; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
639 reader->input_stream.avail_out = reader->storage - reader->buffer.size; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
640 result = inflate(&reader->input_stream, Z_NO_FLUSH); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
641 if (Z_OK != result && Z_STREAM_END != result) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
642 fatal_error("inflate returned %d\n", result); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
643 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
644 reader->buffer.size = reader->input_stream.next_out - reader->buffer.data; |
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
|
645 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
646 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
647 void init_event_reader_tcp(event_reader *reader, char *address, char *port) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
648 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
649 struct addrinfo request, *result; |
1949
5a76a7373823
Get WIP net play code compiling on Windows and cleanup some unistd.h includes
Michael Pavone <pavone@retrodev.com>
parents:
1948
diff
changeset
|
650 socket_init(); |
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
|
651 memset(&request, 0, sizeof(request)); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
652 request.ai_family = AF_INET; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
653 request.ai_socktype = SOCK_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
|
654 request.ai_flags = AI_PASSIVE; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
655 getaddrinfo(address, port, &request, &result); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
656 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
657 reader->socket = socket(result->ai_family, result->ai_socktype, result->ai_protocol); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
658 if (reader->socket < 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
|
659 fatal_error("Failed to create socket for event log connection to %s:%s\n", address, port); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
660 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
661 if (connect(reader->socket, result->ai_addr, result->ai_addrlen) < 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
|
662 fatal_error("Failed to connect to %s:%s for event log stream\n", address, port); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
663 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
664 |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
665 init_event_reader_common(reader); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
666 reader->socket_buffer_size = 256 * 1024; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
667 reader->socket_buffer = malloc(reader->socket_buffer_size); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
668 |
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
|
669 while(reader->buffer.size < 3 || reader->buffer.size < 3 + reader->buffer.data[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
|
670 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
671 int bytes = recv(reader->socket, reader->buffer.data + reader->buffer.size, reader->storage - reader->buffer.size, 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
|
672 if (bytes < 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
|
673 fatal_error("Failed to receive system init from %s:%s\n", address, port); |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
674 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
675 reader->buffer.size += bytes; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
676 } |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
677 size_t init_msg_len = 3 + reader->buffer.data[2]; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
678 memcpy(reader->socket_buffer, reader->buffer.data + init_msg_len, reader->buffer.size - init_msg_len); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
679 reader->input_stream.next_in = reader->socket_buffer; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
680 reader->input_stream.avail_in = reader->buffer.size - init_msg_len; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
681 reader->buffer.size = init_msg_len; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
682 int res = inflateInit(&reader->input_stream); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
683 if (Z_OK != res) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
684 fatal_error("inflateInit returned %d\n", res); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
685 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
686 reader->input_stream.next_out = reader->buffer.data + init_msg_len; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
687 reader->input_stream.avail_out = reader->storage - init_msg_len; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
688 res = inflate(&reader->input_stream, Z_NO_FLUSH); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
689 if (Z_OK != res && Z_BUF_ERROR != res) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
690 fatal_error("inflate returned %d in init_event_reader_tcp\n", res); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
691 } |
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
|
692 int flag = 1; |
1949
5a76a7373823
Get WIP net play code compiling on Windows and cleanup some unistd.h includes
Michael Pavone <pavone@retrodev.com>
parents:
1948
diff
changeset
|
693 setsockopt(reader->socket, IPPROTO_TCP, TCP_NODELAY, (const char *)&flag, sizeof(flag)); |
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
|
694 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
695 |
1957 | 696 static void read_from_socket(event_reader *reader) |
697 { | |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
698 if (reader->socket_buffer_size - reader->input_stream.avail_in < 128 * 1024) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
699 reader->socket_buffer_size *= 2; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
700 uint8_t *new_buf = malloc(reader->socket_buffer_size); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
701 memcpy(new_buf, reader->input_stream.next_in, reader->input_stream.avail_in); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
702 free(reader->socket_buffer); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
703 reader->socket_buffer = new_buf; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
704 reader->input_stream.next_in = new_buf; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
705 } else if ( |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
706 reader->input_stream.next_in - reader->socket_buffer >= reader->input_stream.avail_in |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
707 && reader->input_stream.next_in - reader->socket_buffer + reader->input_stream.avail_in >= reader->socket_buffer_size/2 |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
708 ) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
709 memmove(reader->socket_buffer, reader->input_stream.next_in, reader->input_stream.avail_in); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
710 reader->input_stream.next_in = reader->socket_buffer; |
1957 | 711 } |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
712 uint8_t *space_start = reader->input_stream.next_in + reader->input_stream.avail_in; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
713 size_t space = (reader->socket_buffer + reader->socket_buffer_size) - space_start; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
714 int bytes = recv(reader->socket, space_start, space, 0); |
1957 | 715 if (bytes >= 0) { |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
716 reader->input_stream.avail_in += bytes; |
1957 | 717 } else if (!socket_error_is_wouldblock()) { |
718 fatal_error("Connection closed, error = %X\n", socket_last_error()); | |
719 } | |
720 } | |
721 | |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
722 static void inflate_flush(event_reader *reader) |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
723 { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
724 if (reader->buffer.cur_pos > reader->storage / 2) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
725 memmove(reader->buffer.data, reader->buffer.data + reader->buffer.cur_pos, reader->buffer.size - reader->buffer.cur_pos); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
726 reader->buffer.size -= reader->buffer.cur_pos; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
727 reader->buffer.cur_pos = 0; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
728 reader->input_stream.next_out = reader->buffer.data + reader->buffer.size; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
729 reader->input_stream.avail_out = reader->storage - reader->buffer.size; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
730 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
731 int result = inflate(&reader->input_stream, Z_SYNC_FLUSH); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
732 if (Z_OK != result && Z_STREAM_END != result) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
733 fatal_error("inflate returned %d\n", result); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
734 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
735 reader->buffer.size = reader->input_stream.next_out - reader->buffer.data; |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
736 if (result == Z_STREAM_END && (reader->socket || reader->input_stream.avail_in)) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
737 inflateReset(&reader->input_stream); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
738 if (reader->input_stream.avail_in) { |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
739 inflate_flush(reader); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
740 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
741 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
742 |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
743 } |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
744 |
1957 | 745 void reader_ensure_data(event_reader *reader, size_t bytes) |
746 { | |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
747 #ifndef _WIN32 |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
748 if (reader == mem_reader) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
749 while (!mem_reader_quit && reader->buffer.size - reader->buffer.cur_pos < bytes) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
750 pthread_cond_wait(&event_cond, &event_log_lock); |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
751 } |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
752 } else |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
753 #endif |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
754 { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
755 if (reader->buffer.size - reader->buffer.cur_pos < bytes) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
756 if (reader->input_stream.avail_in) { |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
757 inflate_flush(reader); |
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
758 } |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
759 if (reader->socket) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
760 while (reader->buffer.size - reader->buffer.cur_pos < bytes) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
761 read_from_socket(reader); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
762 inflate_flush(reader); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
763 } |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
764 } |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
765 } |
1957 | 766 } |
767 } | |
768 | |
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
|
769 uint8_t reader_next_event(event_reader *reader, uint32_t *cycle_out) |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
770 { |
1956
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
771 if (reader->repeat_remaining) { |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
772 reader->repeat_remaining--; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
773 *cycle_out = reader->last_cycle + reader->repeat_delta; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
774 reader->last_cycle = *cycle_out; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
775 return reader->repeat_event; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
776 } |
1958
9c01945b5d20
Use zlib to compress event log streams
Mike Pavone <pavone@retrodev.com>
parents:
1957
diff
changeset
|
777 reader_ensure_data(reader, 1); |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
778 if (reader == mem_reader && mem_reader_quit) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
779 return EVENT_EOF; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
780 } |
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
|
781 uint8_t header = load_int8(&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
|
782 uint8_t ret; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
783 uint32_t delta; |
1956
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
784 uint8_t multi_start = 0; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
785 if ((header & 0xF0) == (EVENT_MULTI << 4)) { |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
786 reader->repeat_remaining = (header & 0xF) + 1; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
787 multi_start = 1; |
1957 | 788 reader_ensure_data(reader, 1); |
1956
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
789 header = load_int8(&reader->buffer); |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
790 } |
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
|
791 if ((header & 0xF0) < FORMAT_3BYTE) { |
1948
d01527615c7c
Fix short event format decode bug
Michael Pavone <pavone@retrodev.com>
parents:
1947
diff
changeset
|
792 delta = (header & 0xF) + 16; |
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
|
793 ret = header >> 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
|
794 } else if ((header & 0xF0) == FORMAT_3BYTE) { |
1957 | 795 reader_ensure_data(reader, 2); |
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
|
796 delta = load_int16(&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
|
797 ret = header & 0xF; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
798 } else { |
1957 | 799 reader_ensure_data(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
|
800 delta = load_int8(&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
|
801 //sign extend 24-bit delta to 32-bit |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
802 if (delta & 0x800000) { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
803 delta |= 0xFF000000; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
804 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
805 delta |= load_int16(&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
|
806 ret = header & 0xF; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
807 } |
1956
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
808 if (multi_start) { |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
809 reader->repeat_event = ret; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
810 reader->repeat_delta = delta; |
275f1c4bdb25
Netplay protocol size optimization
Michael Pavone <pavone@retrodev.com>
parents:
1955
diff
changeset
|
811 } |
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
|
812 *cycle_out = reader->last_cycle + delta; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
813 reader->last_cycle = *cycle_out; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
814 if (ret == EVENT_ADJUST) { |
1957 | 815 reader_ensure_data(reader, 4); |
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
|
816 size_t old_pos = reader->buffer.cur_pos; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
817 uint32_t adjust = load_int32(&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
|
818 reader->buffer.cur_pos = old_pos; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
819 reader->last_cycle -= 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
|
820 } else if (ret == EVENT_STATE) { |
1957 | 821 reader_ensure_data(reader, 8); |
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
|
822 reader->last_cycle = load_int32(&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
|
823 reader->last_word_address = load_int8(&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
|
824 reader->last_word_address |= load_int16(&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
|
825 reader->last_byte_address = load_int16(&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
|
826 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
827 return ret; |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
828 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
829 |
2686
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
830 #ifndef _WIN32 |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
831 uint8_t mem_reader_next_event(event_out *out) |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
832 { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
833 uint8_t ret = EVENT_EOF; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
834 if (mem_reader->repeat_remaining) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
835 mem_reader->repeat_remaining--; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
836 mem_reader->last_cycle += mem_reader->repeat_delta; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
837 out->cycle = mem_reader->last_cycle; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
838 ret = mem_reader->repeat_event; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
839 } |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
840 if (ret < EVENT_PSG_REG) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
841 return ret; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
842 } |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
843 pthread_mutex_lock(&event_log_lock); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
844 if (ret == EVENT_EOF) { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
845 ret = reader_next_event(mem_reader, &out->cycle); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
846 } |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
847 switch (ret) |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
848 { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
849 case EVENT_ADJUST: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
850 out->address = load_int32(&mem_reader->buffer); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
851 break; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
852 case EVENT_VRAM_BYTE: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
853 out->address = load_int16(&mem_reader->buffer); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
854 break; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
855 case EVENT_VRAM_BYTE_DELTA: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
856 out->address = mem_reader->last_byte_address + load_int8(&mem_reader->buffer); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
857 break; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
858 case EVENT_VRAM_BYTE_ONE: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
859 out->address = mem_reader->last_byte_address + 1; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
860 break; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
861 case EVENT_VRAM_BYTE_AUTO: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
862 out->address = mem_reader->last_byte_address + out->autoinc; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
863 break; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
864 case EVENT_VRAM_WORD: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
865 out->address = load_int8(&mem_reader->buffer) << 16; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
866 out->address |= load_int16(&mem_reader->buffer); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
867 break; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
868 case EVENT_VRAM_WORD_DELTA: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
869 out->address = mem_reader->last_word_address + load_int8(&mem_reader->buffer); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
870 break; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
871 case EVENT_VDP_REG: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
872 case EVENT_VDP_INTRAM: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
873 out->address = load_int8(&mem_reader->buffer); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
874 break; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
875 } |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
876 switch (ret) |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
877 { |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
878 case EVENT_VRAM_BYTE: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
879 case EVENT_VRAM_BYTE_DELTA: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
880 case EVENT_VRAM_BYTE_ONE: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
881 case EVENT_VRAM_BYTE_AUTO: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
882 mem_reader->last_byte_address = out->address; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
883 case EVENT_VDP_REG: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
884 out->value = load_int8(&mem_reader->buffer); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
885 break; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
886 case EVENT_VRAM_WORD: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
887 case EVENT_VRAM_WORD_DELTA: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
888 mem_reader->last_word_address = out->address; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
889 case EVENT_VDP_INTRAM: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
890 out->value = load_int16(&mem_reader->buffer); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
891 break; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
892 case EVENT_EOF: |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
893 free(mem_reader); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
894 mem_reader = NULL; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
895 break; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
896 } |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
897 pthread_mutex_unlock(&event_log_lock); |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
898 return ret; |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
899 } |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
900 #endif |
05915f01046d
WIP attempt to move VDP rendering to a separate thread
Michael Pavone <pavone@retrodev.com>
parents:
2681
diff
changeset
|
901 |
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
|
902 uint8_t reader_system_type(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
|
903 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
904 return load_int8(&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
|
905 } |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
906 |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
907 void reader_send_gamepad_event(event_reader *reader, uint8_t pad, uint8_t button, uint8_t 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
|
908 { |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
909 uint8_t buffer[] = {down ? CMD_GAMEPAD_DOWN : CMD_GAMEPAD_UP, pad << 5 | 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
|
910 //TODO: Deal with the fact that we're not in blocking mode so this may not actually send all |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
911 //if the buffer is full |
c36102d09351
Add missing netplay files and add in support for sending gamepad commands back to host
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
912 send_all(reader->socket, buffer, sizeof(buffer), 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
|
913 } |