56
57
/* Latched joystick status. */
57
58
static BYTE latch_joystick_value[JOYSTICK_NUM] = { 0, 0, 0 };
59
static BYTE network_joystick_value[JOYSTICK_NUM] = { 0, 0, 0 };
59
61
/* to prevent illegal direction combinations */
60
62
static const BYTE joystick_opposite_direction[] =
63
65
static alarm_t *joystick_alarm = NULL;
67
static CLOCK joystick_delay;
66
69
static void joystick_latch_matrix(CLOCK offset)
68
memcpy(joystick_value, latch_joystick_value, sizeof(joystick_value));
73
if (network_connected()) {
74
idx = network_joystick_value[0];
76
joystick_value[idx] = network_joystick_value[idx];
78
memcpy(joystick_value, network_joystick_value, sizeof(joystick_value));
80
idx = latch_joystick_value[0];
82
joystick_value[idx] = latch_joystick_value[idx];
84
memcpy(joystick_value, latch_joystick_value, sizeof(joystick_value));
69
86
ui_display_joyport(joystick_value);
94
111
joystick_event_record();
114
void joystick_event_delayed_playback(void *data)
116
memcpy(network_joystick_value, data, sizeof(latch_joystick_value));
117
alarm_set(joystick_alarm, maincpu_clk + joystick_delay);
120
void joystick_register_delay(unsigned int delay)
122
joystick_delay = delay;
97
124
/*-----------------------------------------------------------------------*/
125
static void joystick_process_latch(void)
127
if (network_connected()) {
128
CLOCK joystick_delay = JOYSTICK_RAND();
129
network_event_record(EVENT_JOYSTICK_DELAY,
130
(void *)&joystick_delay, sizeof(joystick_delay));
131
network_event_record(EVENT_JOYSTICK_VALUE,
132
(void *)latch_joystick_value, sizeof(latch_joystick_value));
136
alarm_set(joystick_alarm, maincpu_clk + JOYSTICK_RAND());
99
140
void joystick_set_value_absolute(unsigned int joyport, BYTE value)
101
142
if (event_playback_active())
104
latch_joystick_value[joyport] = value;
105
alarm_set(joystick_alarm, maincpu_clk + JOYSTICK_RAND());
108
BYTE joystick_get_value_absolute(unsigned int joyport)
110
return latch_joystick_value[joyport];
145
if (latch_joystick_value[joyport] != value) {
146
latch_joystick_value[joyport] = value;
147
latch_joystick_value[0] = (BYTE)joyport;
148
joystick_process_latch();
113
152
void joystick_set_value_or(unsigned int joyport, BYTE value)
118
157
latch_joystick_value[joyport] |= value;
119
158
latch_joystick_value[joyport] &= ~joystick_opposite_direction[value & 0xf];
120
alarm_set(joystick_alarm, maincpu_clk + JOYSTICK_RAND());
159
latch_joystick_value[0] = (BYTE)joyport;
160
joystick_process_latch();
123
163
void joystick_set_value_and(unsigned int joyport, BYTE value)
128
168
latch_joystick_value[joyport] &= value;
129
alarm_set(joystick_alarm, maincpu_clk + JOYSTICK_RAND());
169
latch_joystick_value[0] = (BYTE)joyport;
170
joystick_process_latch();
132
173
void joystick_clear(unsigned int joyport)
134
175
latch_joystick_value[joyport] = 0;
176
latch_joystick_value[0] = (BYTE)joyport;
135
177
joystick_latch_matrix(0);