comparison io.h @ 1692:5dacaef602a7 segacd

Merge from default
author Michael Pavone <pavone@retrodev.com>
date Sat, 05 Jan 2019 00:58:08 -0800
parents d6c403135e64
children e7a516f08cec
comparison
equal deleted inserted replaced
1504:95b3a1a8b26c 1692:5dacaef602a7
9 #include "tern.h" 9 #include "tern.h"
10 #include "romdb.h" 10 #include "romdb.h"
11 #include "serialize.h" 11 #include "serialize.h"
12 12
13 enum { 13 enum {
14 IO_NONE,
14 IO_GAMEPAD2, 15 IO_GAMEPAD2,
15 IO_GAMEPAD3, 16 IO_GAMEPAD3,
16 IO_GAMEPAD6, 17 IO_GAMEPAD6,
17 IO_MOUSE, 18 IO_MOUSE,
18 IO_SATURN_KEYBOARD, 19 IO_SATURN_KEYBOARD,
21 IO_JUSTIFIER, 22 IO_JUSTIFIER,
22 IO_SEGA_MULTI, 23 IO_SEGA_MULTI,
23 IO_EA_MULTI_A, 24 IO_EA_MULTI_A,
24 IO_EA_MULTI_B, 25 IO_EA_MULTI_B,
25 IO_SEGA_PARALLEL, 26 IO_SEGA_PARALLEL,
26 IO_GENERIC, 27 IO_GENERIC
27 IO_NONE
28 }; 28 };
29 29
30 typedef struct { 30 typedef struct {
31 union { 31 union {
32 struct { 32 struct {
68 uint8_t device_type; 68 uint8_t device_type;
69 } io_port; 69 } io_port;
70 70
71 typedef struct { 71 typedef struct {
72 io_port ports[3]; 72 io_port ports[3];
73 uint8_t mouse_mode;
74 uint8_t mouse_captured;
75 uint8_t keyboard_captured;
76 } sega_io; 73 } sega_io;
77 74
78 #define GAMEPAD_TH0 0 75 //pseudo gamepad for buttons on main console unit
79 #define GAMEPAD_TH1 1 76 #define GAMEPAD_MAIN_UNIT 255
80 #define GAMEPAD_EXTRA 2
81 #define GAMEPAD_NONE 0xF
82
83 #define IO_TH0 0
84 #define IO_TH1 1
85 #define IO_STATE 2
86 77
87 enum { 78 enum {
88 IO_WRITE_PENDING, 79 BUTTON_INVALID,
89 IO_WRITTEN, 80 DPAD_UP,
90 IO_READ_PENDING, 81 DPAD_DOWN,
91 IO_READ 82 DPAD_LEFT,
83 DPAD_RIGHT,
84 BUTTON_A,
85 BUTTON_B,
86 BUTTON_C,
87 BUTTON_START,
88 BUTTON_X,
89 BUTTON_Y,
90 BUTTON_Z,
91 BUTTON_MODE,
92 NUM_GAMEPAD_BUTTONS
92 }; 93 };
93 94
94 typedef struct genesis_context genesis_context; 95 enum {
96 MAIN_UNIT_PAUSE
97 };
95 98
96 void set_keybindings(sega_io *io); 99 enum {
97 void map_all_bindings(sega_io *io); 100 MOUSE_LEFT = 1,
101 MOUSE_RIGHT = 2,
102 MOUSE_MIDDLE = 4,
103 MOUSE_START = 8,
104 PSEUDO_BUTTON_MOTION=0xFF
105 };
106
98 void setup_io_devices(tern_node * config, rom_info *rom, sega_io *io); 107 void setup_io_devices(tern_node * config, rom_info *rom, sega_io *io);
99 void io_adjust_cycles(io_port * pad, uint32_t current_cycle, uint32_t deduction); 108 void io_adjust_cycles(io_port * pad, uint32_t current_cycle, uint32_t deduction);
100 void io_control_write(io_port *port, uint8_t value, uint32_t current_cycle); 109 void io_control_write(io_port *port, uint8_t value, uint32_t current_cycle);
101 void io_data_write(io_port * pad, uint8_t value, uint32_t current_cycle); 110 void io_data_write(io_port * pad, uint8_t value, uint32_t current_cycle);
102 uint8_t io_data_read(io_port * pad, uint32_t current_cycle); 111 uint8_t io_data_read(io_port * pad, uint32_t current_cycle);
103 void handle_keydown(int keycode, uint8_t scancode);
104 void handle_keyup(int keycode, uint8_t scancode);
105 void handle_joydown(int joystick, int button);
106 void handle_joyup(int joystick, int button);
107 void handle_joy_dpad(int joystick, int dpad, uint8_t state);
108 void handle_joy_axis(int joystick, int axis, int16_t value);
109 void handle_joy_added(int joystick);
110 void handle_mouse_moved(int mouse, uint16_t x, uint16_t y, int16_t deltax, int16_t deltay);
111 void handle_mousedown(int mouse, int button);
112 void handle_mouseup(int mouse, int button);
113 void io_serialize(io_port *port, serialize_buffer *buf); 112 void io_serialize(io_port *port, serialize_buffer *buf);
114 void io_deserialize(deserialize_buffer *buf, void *vport); 113 void io_deserialize(deserialize_buffer *buf, void *vport);
115 114
115 void io_port_gamepad_down(io_port *port, uint8_t button);
116 void io_port_gamepad_up(io_port *port, uint8_t button);
117 void io_gamepad_down(sega_io *io, uint8_t gamepad_num, uint8_t button);
118 void io_gamepad_up(sega_io *io, uint8_t gamepad_num, uint8_t button);
119 void io_mouse_down(sega_io *io, uint8_t mouse_num, uint8_t button);
120 void io_mouse_up(sega_io *io, uint8_t mouse_num, uint8_t button);
121 void io_mouse_motion_absolute(sega_io *io, uint8_t mouse_num, uint16_t x, uint16_t y);
122 void io_mouse_motion_relative(sega_io *io, uint8_t mouse_num, int32_t x, int32_t y);
123 void io_keyboard_down(sega_io *io, uint8_t scancode);
124 void io_keyboard_up(sega_io *io, uint8_t scancode);
125 uint8_t io_has_keyboard(sega_io *io);
126
127 extern const char * device_type_names[];
128
116 #endif //IO_H_ 129 #endif //IO_H_
117 130