diff options
author | 2011-05-30 19:07:19 +0000 | |
---|---|---|
committer | 2011-05-30 19:07:19 +0000 | |
commit | 665d213ee424496f94702f3643c69b3d85129556 (patch) | |
tree | 45bfdcb86bf3950084fc54d512827331d4e48934 | |
parent | 8f7d456e70ae1caeda6f5573bd2e7d93e26cec9e (diff) |
(Finally found the time to finish this....)
Low-level input upgrade. Classes now exist for input_codes, input_items,
input_devices, and input_seqs. Also created an input_manager class to
hold machine-global state and made it accessible via machine.input().
Expanded the device index range (0-255, up from 0-16), and the OSD can
now specify the device index explicitly if they can better keep the
indexes from varying run-to-run. [Aaron Giles]
Note that I've built and run SDL on Windows, but not all the code paths
were exercised. If you use mice/joysticks extensively double-check them
to be sure it all still works as expected.
This is mainly an OSD and core change. The only thing impacting drivers
is if they query for specific keys for debugging. The following S&Rs
took care of most of that:
S: input_code_pressed( *)\(( *)([^, ]+) *, *
R: \3\.input\(\)\.code_pressed\1\(\2
S: input_code_pressed_once( *)\(( *)([^, ]+) *, *
R: \3\.input\(\)\.code_pressed_once\1\(\2
151 files changed, 4146 insertions, 4029 deletions
diff --git a/.gitattributes b/.gitattributes index 01203820f67..c5ff7b7be26 100644 --- a/.gitattributes +++ b/.gitattributes @@ -717,8 +717,6 @@ src/emu/inptport.h svneol=native#text/plain src/emu/inpttype.h svneol=native#text/plain src/emu/input.c svneol=native#text/plain src/emu/input.h svneol=native#text/plain -src/emu/inputseq.c svneol=native#text/plain -src/emu/inputseq.h svneol=native#text/plain src/emu/layout/dualhovu.lay svneol=native#text/plain src/emu/layout/dualhsxs.lay svneol=native#text/plain src/emu/layout/dualhuov.lay svneol=native#text/plain diff --git a/src/build/makelist.c b/src/build/makelist.c index ee960a074bd..cc24118c488 100644 --- a/src/build/makelist.c +++ b/src/build/makelist.c @@ -61,6 +61,12 @@ int sort_callback(const void *elem1, const void *elem2) return strcmp(*item1, *item2); } + +//------------------------------------------------- +// parse_file - parse a single file, may be +// called recursively +//------------------------------------------------- + int parse_file(const char *srcfile) { // read source file @@ -78,7 +84,6 @@ int parse_file(const char *srcfile) char *endptr = srcptr + length; int linenum = 1; bool in_comment = false; - bool in_import = false; while (srcptr < endptr) { char c = *srcptr++; @@ -116,13 +121,6 @@ int parse_file(const char *srcfile) continue; } - // look for start of import directive start - if (c == '#') - { - in_import = true; - continue; - } - // if we hit a C++ comment, scan to the end of line if (c == '/' && *srcptr == '/') { @@ -131,11 +129,11 @@ int parse_file(const char *srcfile) continue; } - if (in_import) { - in_import = false; + // look for an import directive + if (c == '#') + { char filename[256]; filename[0] = 0; - srcptr--; for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(filename) - 1 && !isspace(*srcptr); pos++) { filename[pos] = *srcptr++; @@ -143,34 +141,37 @@ int parse_file(const char *srcfile) } fprintf(stderr, "Importing drivers from '%s'\n", filename); parse_file(filename); - } else { - // extract the driver name - char drivname[32]; - drivname[0] = 0; - srcptr--; - for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(drivname) - 1 && !isspace(*srcptr); pos++) - { - drivname[pos] = *srcptr++; - drivname[pos+1] = 0; - } - - // verify the name as valid - for (char *drivch = drivname; *drivch != 0; drivch++) - { - if ((*drivch >= 'a' && *drivch <= 'z') || (*drivch >= '0' && *drivch <= '9') || *drivch == '_') - continue; - fprintf(stderr, "%s:%d - Invalid character '%c' in driver \"%s\"\n", srcfile, linenum, *drivch, drivname); - return 1; - } + continue; + } + + // otherwise treat as a driver name + char drivname[32]; + drivname[0] = 0; + srcptr--; + for (int pos = 0; srcptr < endptr && pos < ARRAY_LENGTH(drivname) - 1 && !isspace(*srcptr); pos++) + { + drivname[pos] = *srcptr++; + drivname[pos+1] = 0; + } - // add it to the list - char *name = (char *)malloc(strlen(drivname) + 1); - strcpy(name, drivname); - drivlist[drivcount++] = name; + // verify the name as valid + for (char *drivch = drivname; *drivch != 0; drivch++) + { + if ((*drivch >= 'a' && *drivch <= 'z') || (*drivch >= '0' && *drivch <= '9') || *drivch == '_') + continue; + fprintf(stderr, "%s:%d - Invalid character '%c' in driver \"%s\"\n", srcfile, linenum, *drivch, drivname); + return 1; } + + // add it to the list + char *name = (char *)malloc(strlen(drivname) + 1); + strcpy(name, drivname); + drivlist[drivcount++] = name; } return 0; } + + //------------------------------------------------- // main - primary entry point //------------------------------------------------- @@ -190,10 +191,10 @@ int main(int argc, char *argv[]) // extract arguments const char *srcfile = argv[1]; + // parse the root file, exit early upon failure drivcount = 0; - if (parse_file(srcfile)) { + if (parse_file(srcfile)) return 1; - } // add a reference to the ___empty driver drivlist[drivcount++] = "___empty"; diff --git a/src/emu/cpu/tms34010/34010gfx.c b/src/emu/cpu/tms34010/34010gfx.c index 80bc9074f2c..39d02ad6d52 100644 --- a/src/emu/cpu/tms34010/34010gfx.c +++ b/src/emu/cpu/tms34010/34010gfx.c @@ -11,7 +11,7 @@ #define LOG_GFX_OPS 0 -#define LOGGFX(x) do { if (LOG_GFX_OPS && input_code_pressed(tms->device->machine(), KEYCODE_L)) logerror x; } while (0) +#define LOGGFX(x) do { if (LOG_GFX_OPS && tms->device->machine().input().code_pressed(KEYCODE_L)) logerror x; } while (0) /* Graphics Instructions */ diff --git a/src/emu/emu.h b/src/emu/emu.h index 5364a0c350a..33d2897ace4 100644 --- a/src/emu/emu.h +++ b/src/emu/emu.h @@ -81,7 +81,6 @@ typedef device_t * (*machine_config_constructor)(machine_config &config, device_ // I/O #include "input.h" -#include "inputseq.h" #include "inptport.h" #include "output.h" diff --git a/src/emu/emu.mak b/src/emu/emu.mak index 6fd83e46737..d2aba9dfb4b 100644 --- a/src/emu/emu.mak +++ b/src/emu/emu.mak @@ -79,7 +79,6 @@ EMUOBJS = \ $(EMUOBJ)/image.o \ $(EMUOBJ)/info.o \ $(EMUOBJ)/input.o \ - $(EMUOBJ)/inputseq.o \ $(EMUOBJ)/inptport.o \ $(EMUOBJ)/mame.o \ $(EMUOBJ)/machine.o \ diff --git a/src/emu/inptport.c b/src/emu/inptport.c index 79b7a74e0cc..b8d78d80f54 100644 --- a/src/emu/inptport.c +++ b/src/emu/inptport.c @@ -235,16 +235,6 @@ struct _input_port_state }; -/* internal live state of an input type */ -typedef struct _input_type_state input_type_state; -struct _input_type_state -{ - input_type_state * next; /* pointer to the next live state in the list */ - input_type_desc typedesc; /* copy of the original description, modified by the OSD */ - input_seq seq[SEQ_TYPE_TOTAL];/* currently configured sequences */ -}; - - typedef struct _inputx_code inputx_code; struct _inputx_code { @@ -277,8 +267,8 @@ struct _input_port_private UINT8 safe_to_read; /* clear at start; set after state is loaded */ /* types */ - input_type_state * typestatelist; /* list of live type states */ - input_type_state * type_to_typestate[__ipt_max][MAX_PLAYERS]; /* map from type/player to type state */ + simple_list<input_type_entry> typelist; /* list of live type states */ + input_type_entry * type_to_entry[__ipt_max][MAX_PLAYERS]; /* map from type/player to type state */ /* specific special global input states */ digital_joystick_state joystick_info[MAX_PLAYERS][DIGITAL_JOYSTICKS_PER_PLAYER]; /* joystick states */ @@ -800,7 +790,7 @@ static int load_game_config(running_machine &machine, xml_data_node *portnode, i /* settings save */ static void save_config_callback(running_machine &machine, int config_type, xml_data_node *parentnode); -static void save_sequence(running_machine &machine, xml_data_node *parentnode, int type, int porttype, const input_seq *seq); +static void save_sequence(running_machine &machine, xml_data_node *parentnode, int type, int porttype, const input_seq &seq); static int save_this_input_field_type(int type); static void save_default_inputs(running_machine &machine, xml_data_node *parentnode); static void save_game_inputs(running_machine &machine, xml_data_node *parentnode); @@ -1028,20 +1018,17 @@ const char *input_field_name(const input_field_config *field) for the given input field -------------------------------------------------*/ -const input_seq *input_field_seq(const input_field_config *field, input_seq_type seqtype) +const input_seq &input_field_seq(const input_field_config *field, input_seq_type seqtype) { - static const input_seq ip_none = SEQ_DEF_0; - const input_seq *portseq = &ip_none; - /* if the field is disabled, return no key */ if (field->flags & FIELD_FLAG_UNUSED) - return portseq; + return input_seq::empty_seq; /* select either the live or config state depending on whether we have live state */ - portseq = (field->state == NULL) ? &field->seq[seqtype] : &field->state->seq[seqtype]; + const input_seq &portseq = (field->state == NULL) ? field->seq[seqtype] : field->state->seq[seqtype]; /* if the portseq is the special default code, return the expanded default value */ - if (input_seq_get_1(portseq) == SEQCODE_DEFAULT) + if (portseq.is_default()) return input_type_seq(field->machine(), field->type, field->player, seqtype); /* otherwise, return the sequence as-is */ @@ -1087,15 +1074,14 @@ void input_field_get_user_settings(const input_field_config *field, input_field_ void input_field_set_user_settings(const input_field_config *field, const input_field_user_settings *settings) { - static const input_seq default_seq = SEQ_DEF_1(SEQCODE_DEFAULT); int seqtype; /* copy the basics */ for (seqtype = 0; seqtype < ARRAY_LENGTH(settings->seq); seqtype++) { - const input_seq *defseq = input_type_seq(field->machine(), field->type, field->player, (input_seq_type)seqtype); - if (input_seq_cmp(defseq, &settings->seq[seqtype]) == 0) - field->state->seq[seqtype] = default_seq; + const input_seq &defseq = input_type_seq(field->machine(), field->type, field->player, (input_seq_type)seqtype); + if (defseq == settings->seq[seqtype]) + field->state->seq[seqtype] = input_seq::default_seq; else field->state->seq[seqtype] = settings->seq[seqtype]; } @@ -1289,22 +1275,10 @@ int input_type_is_analog(int type) const char *input_type_name(running_machine &machine, int type, int player) { /* if we have a machine, use the live state and quick lookup */ - if (1)//machine != NULL) - { - input_port_private *portdata = machine.input_port_data; - input_type_state *typestate = portdata->type_to_typestate[type][player]; - if (typestate != NULL) - return typestate->typedesc.name; - } - - /* if no machine, fall back to brute force searching */ - else - { - int typenum; - for (typenum = 0; typenum < ARRAY_LENGTH(core_types); typenum++) - if (core_types[typenum].type == type && core_types[typenum].player == player) - return core_types[typenum].name; - } + input_port_private *portdata = machine.input_port_data; + input_type_entry *entry = portdata->type_to_entry[type][player]; + if (entry != NULL) + return entry->name; /* if we find nothing, return an invalid group */ return "???"; @@ -1318,23 +1292,10 @@ const char *input_type_name(running_machine &machine, int type, int player) int input_type_group(running_machine &machine, int type, int player) { - /* if we have a machine, use the live state and quick lookup */ - if (1)//machine != NULL) - { - input_port_private *portdata = machine.input_port_data; - input_type_state *typestate = portdata->type_to_typestate[type][player]; - if (typestate != NULL) - return typestate->typedesc.group; - } - - /* if no machine, fall back to brute force searching */ - else - { - int typenum; - for (typenum = 0; typenum < ARRAY_LENGTH(core_types); typenum++) - if (core_types[typenum].type == type && core_types[typenum].player == player) - return core_types[typenum].group; - } + input_port_private *portdata = machine.input_port_data; + input_type_entry *entry = portdata->type_to_entry[type][player]; + if (entry != NULL) + return entry->group; /* if we find nothing, return an invalid group */ return IPG_INVALID; @@ -1346,33 +1307,19 @@ int input_type_group(running_machine &machine, int type, int player) sequence for the given type/player -------------------------------------------------*/ -const input_seq *input_type_seq(running_machine &machine, int type, int player, input_seq_type seqtype) +const input_seq &input_type_seq(running_machine &machine, int type, int player, input_seq_type seqtype) { - static const input_seq ip_none = SEQ_DEF_0; - - assert((type >= 0) && (type < __ipt_max)); - assert((player >= 0) && (player < MAX_PLAYERS)); + assert(type >= 0 && type < __ipt_max); + assert(player >= 0 && player < MAX_PLAYERS); /* if we have a machine, use the live state and quick lookup */ - if (1)//machine != NULL) - { - input_port_private *portdata = machine.input_port_data; - input_type_state *typestate = portdata->type_to_typestate[type][player]; - if (typestate != NULL) - return &typestate->seq[seqtype]; - } - - /* if no machine, fall back to brute force searching */ - else - { - int typenum; - for (typenum = 0; typenum < ARRAY_LENGTH(core_types); typenum++) - if (core_types[typenum].type == type && core_types[typenum].player == player) - return &core_types[typenum].seq[seqtype]; - } + input_port_private *portdata = machine.input_port_data; + input_type_entry *entry = portdata->type_to_entry[type][player]; + if (entry != NULL) + return entry->seq[seqtype]; /* if we find nothing, return an empty sequence */ - return &ip_none; + return input_seq::empty_seq; } @@ -1384,9 +1331,9 @@ const input_seq *input_type_seq(running_machine &machine, int type, int player, void input_type_set_seq(running_machine &machine, int type, int player, input_seq_type seqtype, const input_seq *newseq) { input_port_private *portdata = machine.input_port_data; - input_type_state *typestate = portdata->type_to_typestate[type][player]; - if (typestate != NULL) - typestate->seq[seqtype] = *newseq; + input_type_entry *entry = portdata->type_to_entry[type][player]; + if (entry != NULL) + entry->seq[seqtype] = *newseq; } @@ -1398,7 +1345,7 @@ void input_type_set_seq(running_machine &machine, int type, int player, input_se int input_type_pressed(running_machine &machine, int type, int player) { - return input_seq_pressed(machine, input_type_seq(machine, type, player, SEQ_TYPE_STANDARD)); + return machine.input().seq_pressed(input_type_seq(machine, type, player, SEQ_TYPE_STANDARD)); } @@ -1406,10 +1353,10 @@ int input_type_pressed(running_machine &machine, int type, int player) input_type_list - return the list of types -------------------------------------------------*/ -const input_type_desc *input_type_list(running_machine &machine) +const simple_list<input_type_entry> &input_type_list(running_machine &machine) { input_port_private *portdata = machine.input_port_data; - return &portdata->typestatelist->typedesc; + return portdata->typelist; } @@ -1851,44 +1798,26 @@ const char *input_port_string_from_token(const char *string) static void init_port_types(running_machine &machine) { input_port_private *portdata = machine.input_port_data; - input_type_state **stateptr; - input_type_state *curtype; - input_type_desc *lasttype = NULL; - int seqtype, typenum; /* convert the array into a list of type states that can be modified */ - portdata->typestatelist = NULL; - stateptr = &portdata->typestatelist; - for (typenum = 0; typenum < ARRAY_LENGTH(core_types); typenum++) - { - /* allocate memory for the state and link it to the end of the list */ - *stateptr = auto_alloc_clear(machine, input_type_state); - - /* copy the type description and link the previous description to it */ - (*stateptr)->typedesc = core_types[typenum]; - if (lasttype != NULL) - lasttype->next = &(*stateptr)->typedesc; - lasttype = &(*stateptr)->typedesc; - - /* advance */ - stateptr = &(*stateptr)->next; - } + construct_core_types(portdata->typelist); /* ask the OSD to customize the list */ - machine.osd().customize_input_type_list(&portdata->typestatelist->typedesc); + machine.osd().customize_input_type_list(portdata->typelist); /* now iterate over the OSD-modified types */ - for (curtype = portdata->typestatelist; curtype != NULL; curtype = curtype->next) + for (input_type_entry *curtype = portdata->typelist.first(); curtype != NULL; curtype = curtype->next()) { /* first copy all the OSD-updated sequences into our current state */ - for (seqtype = 0; seqtype < ARRAY_LENGTH(curtype->seq); seqtype++) - curtype->seq[seqtype] = curtype->typedesc.seq[seqtype]; + for (int seqtype = 0; seqtype < ARRAY_LENGTH(curtype->seq); seqtype++) + curtype->seq[seqtype] = curtype->defseq[seqtype]; /* also make a lookup table mapping type/player to the appropriate type list entry */ - portdata->type_to_typestate[curtype->typedesc.type][curtype->typedesc.player] = curtype; + portdata->type_to_entry[curtype->type][curtype->player] = curtype; } } + /*------------------------------------------------- get_keyboard_code - accesses a particular keyboard code @@ -1904,6 +1833,7 @@ static unicode_char get_keyboard_code(const input_field_config *field, int i) return ch; } + /*************************************************************************** MISCELLANEOUS ***************************************************************************/ @@ -2124,7 +2054,7 @@ static void init_port_state(running_machine &machine) for (field = port->first_field(); field != NULL; field = field->next()) if (field->state->joystick != NULL && field->way == 4) { - input_device_set_joystick_map(machine, -1, (field->flags & FIELD_FLAG_ROTATED) ? joystick_map_4way_diagonal : joystick_map_4way_sticky); + machine.input().set_global_joystick_map((field->flags & FIELD_FLAG_ROTATED) ? joystick_map_4way_diagonal : joystick_map_4way_sticky); break; } } @@ -2174,7 +2104,7 @@ static void init_autoselect_devices(running_machine &machine, int type1, int typ mame_printf_error("Invalid %s value %s; reverting to keyboard\n", option, stemp); /* only scan the list if we haven't already enabled this class of control */ - if (portlist.first() != NULL && !input_device_class_enabled(portlist.first()->machine(), autoenable)) + if (portlist.first() != NULL && !machine.input().device_class(autoenable).enabled()) for (port = portlist.first(); port != NULL; port = port->next()) for (field = port->first_field(); field != NULL; field = field->next()) @@ -2184,7 +2114,7 @@ static void init_autoselect_devices(running_machine &machine, int type1, int typ (type3 != 0 && field->type == type3)) { mame_printf_verbose("Input: Autoenabling %s due to presence of a %s\n", autostring, ananame); - input_device_class_enable(port->machine(), autoenable, TRUE); + machine.input().device_class(autoenable).enable(); break; } } @@ -2590,13 +2520,13 @@ static void frame_update_digital_joysticks(running_machine &machine) joystick->current = 0; /* read all the associated ports */ - if (joystick->field[JOYDIR_UP] != NULL && input_seq_pressed(machine, input_field_seq(joystick->field[JOYDIR_UP], SEQ_TYPE_STANDARD))) + if (joystick->field[JOYDIR_UP] != NULL && machine.input().seq_pressed(input_field_seq(joystick->field[JOYDIR_UP], SEQ_TYPE_STANDARD))) joystick->current |= JOYDIR_UP_BIT; - if (joystick->field[JOYDIR_DOWN] != NULL && input_seq_pressed(machine, input_field_seq(joystick->field[JOYDIR_DOWN], SEQ_TYPE_STANDARD))) + if (joystick->field[JOYDIR_DOWN] != NULL && machine.input().seq_pressed(input_field_seq(joystick->field[JOYDIR_DOWN], SEQ_TYPE_STANDARD))) joystick->current |= JOYDIR_DOWN_BIT; - if (joystick->field[JOYDIR_LEFT] != NULL && input_seq_pressed(machine, input_field_seq(joystick->field[JOYDIR_LEFT], SEQ_TYPE_STANDARD))) + if (joystick->field[JOYDIR_LEFT] != NULL && machine.input().seq_pressed(input_field_seq(joystick->field[JOYDIR_LEFT], SEQ_TYPE_STANDARD))) joystick->current |= JOYDIR_LEFT_BIT; - if (joystick->field[JOYDIR_RIGHT] != NULL && input_seq_pressed(machine, input_field_seq(joystick->field[JOYDIR_RIGHT], SEQ_TYPE_STANDARD))) + if (joystick->field[JOYDIR_RIGHT] != NULL && machine.input().seq_pressed(input_field_seq(joystick->field[JOYDIR_RIGHT], SEQ_TYPE_STANDARD))) joystick->current |= JOYDIR_RIGHT_BIT; /* lock out opposing directions (left + right or up + down) */ @@ -2669,7 +2599,7 @@ static void frame_update_analog_field(running_machine &machine, analog_field_sta analog->previous = analog->accum = apply_analog_min_max(analog, analog->accum); /* get the new raw analog value and its type */ - rawvalue = input_seq_axis_value(machine, input_field_seq(analog->field, SEQ_TYPE_STANDARD), &itemclass); + rawvalue = machine.input().seq_axis_value(input_field_seq(analog->field, SEQ_TYPE_STANDARD), itemclass); /* if we got an absolute input, it overrides everything else */ if (itemclass == ITEM_CLASS_ABSOLUTE) @@ -2727,7 +2657,7 @@ static void frame_update_analog_field(running_machine &machine, analog_field_sta /* if the decrement code sequence is pressed, add the key delta to */ /* the accumulated delta; also note that the last input was a digital one */ - if (input_seq_pressed(machine, input_field_seq(analog->field, SEQ_TYPE_DECREMENT))) + if (machine.input().seq_pressed(input_field_seq(analog->field, SEQ_TYPE_DECREMENT))) { keypressed = TRUE; if (analog->delta != 0) @@ -2739,7 +2669,7 @@ static void frame_update_analog_field(running_machine &machine, analog_field_sta } /* same for the increment code sequence */ - if (input_seq_pressed(machine, input_field_seq(analog->field, SEQ_TYPE_INCREMENT))) + if (machine.input().seq_pressed(input_field_seq(analog->field, SEQ_TYPE_INCREMENT))) { keypressed = TRUE; if (analog->delta) @@ -2803,7 +2733,7 @@ static void frame_update_analog_field(running_machine &machine, analog_field_sta static int frame_get_digital_field_state(const input_field_config *field, int mouse_down) { - int curstate = mouse_down || input_seq_pressed(field->machine(), input_field_seq(field, SEQ_TYPE_STANDARD)); + int curstate = mouse_down || field->machine().input().seq_pressed(input_field_seq(field, SEQ_TYPE_STANDARD)); int changed = FALSE; /* if the state changed, look for switch down/switch up */ @@ -2955,7 +2885,7 @@ input_field_config::input_field_config(input_port_config &port, int _type, input { memset(&condition, 0, sizeof(condition)); for (int seqtype = 0; seqtype < ARRAY_LENGTH(seq); seqtype++) - input_seq_set_1(&seq[seqtype], SEQCODE_DEFAULT); + seq[seqtype].set_default(); chars[0] = chars[1] = chars[2] = (unicode_char) 0; } @@ -3144,7 +3074,6 @@ void diplocation_list_alloc(input_field_config &field, const char *location, ast static int token_to_input_field_type(running_machine &machine, const char *string, int *player) { input_port_private *portdata = machine.input_port_data; - const input_type_desc *typedesc; int ipnum; /* check for our failsafe case first */ @@ -3152,11 +3081,11 @@ static int token_to_input_field_type(running_machine &machine, const char *strin return ipnum; /* find the token in the list */ - for (typedesc = &portdata->typestatelist->typedesc; typedesc != NULL; typedesc = typedesc->next) - if (typedesc->token != NULL && !strcmp(typedesc->token, string)) + for (input_type_entry *entry = portdata->typelist.first(); entry != NULL; entry = entry->next()) + if (entry->token != NULL && !strcmp(entry->token, string)) { - *player = typedesc->player; - return typedesc->type; + *player = entry->player; + return entry->type; } /* if we fail, return IPT_UNKNOWN */ @@ -3173,13 +3102,12 @@ static int token_to_input_field_type(running_machine &machine, const char *strin static const char *input_field_type_to_token(running_machine &machine, int type, int player) { input_port_private *portdata = machine.input_port_data; - input_type_state *typestate; static char tempbuf[32]; /* look up the port and return the token */ - typestate = portdata->type_to_typestate[type][player]; - if (typestate != NULL) - return typestate->typedesc.token; + input_type_entry *entry = portdata->type_to_entry[type][player]; + if (entry != NULL) + return entry->token; /* if that fails, carry on */ sprintf(tempbuf, "TYPE_OTHER(%d,%d)", type, player); @@ -3248,7 +3176,7 @@ static void load_config_callback(running_machine &machine, int config_type, xml_ /* initialize sequences to invalid defaults */ for (seqtype = 0; seqtype < ARRAY_LENGTH(newseq); seqtype++) - input_seq_set_1(&newseq[seqtype], INPUT_CODE_INVALID); + newseq[seqtype].set(INPUT_CODE_INVALID); /* loop over new sequences */ for (seqnode = xml_get_sibling(portnode->child, "newseq"); seqnode; seqnode = xml_get_sibling(seqnode->next, "newseq")) @@ -3258,9 +3186,9 @@ static void load_config_callback(running_machine &machine, int config_type, xml_ if (seqtype != -1 && seqnode->value != NULL) { if (strcmp(seqnode->value, "NONE") == 0) - input_seq_set_0(&newseq[seqtype]); - else if (input_seq_from_tokens(machine, seqnode->value, &tempseq) != 0) - newseq[seqtype] = tempseq; + newseq[seqtype].set(); + else + machine.input().seq_from_tokens(newseq[seqtype], seqnode->value); } } @@ -3274,14 +3202,9 @@ static void load_config_callback(running_machine &machine, int config_type, xml_ /* after applying the controller config, push that back into the backup, since that is */ /* what we will diff against */ if (config_type == CONFIG_TYPE_CONTROLLER) - { - input_type_state *typestate; - int seqtype; - - for (typestate = portdata->typestatelist; typestate != NULL; typestate = typestate->next) - for (seqtype = 0; seqtype < ARRAY_LENGTH(typestate->typedesc.seq); seqtype++) - typestate->typedesc.seq[seqtype] = typestate->seq[seqtype]; - } + for (input_type_entry *entry = portdata->typelist.first(); entry != NULL; entry = entry->next()) + for (int seqtype = 0; seqtype < ARRAY_LENGTH(entry->seq); seqtype++) + entry->defseq[seqtype] = entry->seq[seqtype]; } @@ -3315,8 +3238,8 @@ static void load_remap_table(running_machine &machine, xml_data_node *parentnode count = 0; for (remapnode = xml_get_sibling(parentnode->child, "remap"); remapnode != NULL; remapnode = xml_get_sibling(remapnode->next, "remap")) { - input_code origcode = input_code_from_token(machine, xml_get_attribute_string(remapnode, "origcode", "")); - input_code newcode = input_code_from_token(machine, xml_get_attribute_string(remapnode, "newcode", "")); + input_code origcode = machine.input().code_from_token(xml_get_attribute_string(remapnode, "origcode", "")); + input_code newcode = machine.input().code_from_token(xml_get_attribute_string(remapnode, "newcode", "")); if (origcode != INPUT_CODE_INVALID && newcode != INPUT_CODE_INVALID) { oldtable[count] = origcode; @@ -3330,18 +3253,13 @@ static void load_remap_table(running_machine &machine, xml_data_node *parentnode { input_code oldcode = oldtable[remapnum]; input_code newcode = newtable[remapnum]; - input_type_state *typestate; /* loop over all default ports, remapping the requested keys */ - for (typestate = portdata->typestatelist; typestate != NULL; typestate = typestate->next) + for (input_type_entry *entry = portdata->typelist.first(); entry != NULL; entry = entry->next()) { - int seqtype, codenum; - /* remap anything in the default sequences */ - for (seqtype = 0; seqtype < ARRAY_LENGTH(typestate->seq); seqtype++) - for (codenum = 0; codenum < ARRAY_LENGTH(typestate->seq[0].code); codenum++) - if (typestate->seq[seqtype].code[codenum] == oldcode) - typestate->seq[seqtype].code[codenum] = newcode; + for (int seqtype = 0; seqtype < ARRAY_LENGTH(entry->seq); seqtype++) + entry->seq[seqtype].replace(oldcode, newcode); } } @@ -3360,16 +3278,14 @@ static void load_remap_table(running_machine &machine, xml_data_node *parentnode static int load_default_config(running_machine &machine, xml_data_node *portnode, int type, int player, const input_seq *newseq) { input_port_private *portdata = machine.input_port_data; - input_type_state *typestate; - int seqtype; /* find a matching port in the list */ - for (typestate = portdata->typestatelist; typestate != NULL; typestate = typestate->next) - if (typestate->typedesc.type == type && typestate->typedesc.player == player) + for (input_type_entry *entry = portdata->typelist.first(); entry != NULL; entry = entry->next()) + if (entry->type == type && entry->player == player) { - for (seqtype = 0; seqtype < ARRAY_LENGTH(typestate->seq); seqtype++) - if (input_seq_get_1(&newseq[seqtype]) != INPUT_CODE_INVALID) - typestate->seq[seqtype] = newseq[seqtype]; + for (int seqtype = 0; seqtype < ARRAY_LENGTH(entry->seq); seqtype++) + if (newseq[seqtype][0] != INPUT_CODE_INVALID) + entry->seq[seqtype] = newseq[seqtype]; return TRUE; } @@ -3409,7 +3325,7 @@ static int load_game_config(running_machine &machine, xml_data_node *portnode, i /* if a sequence was specified, copy it in */ for (seqtype = 0; seqtype < ARRAY_LENGTH(field->state->seq); seqtype++) - if (input_seq_get_1(&newseq[seqtype]) != INPUT_CODE_INVALID) + if (newseq[seqtype][0] != INPUT_CODE_INVALID) field->state->seq[seqtype] = newseq[seqtype]; /* for non-analog fields, fetch the value */ @@ -3465,16 +3381,16 @@ static void save_config_callback(running_machine &machine, int config_type, xml_ sequence -------------------------------------------------*/ -static void save_sequence(running_machine &machine, xml_data_node *parentnode, int type, int porttype, const input_seq *seq) +static void save_sequence(running_machine &machine, xml_data_node *parentnode, int type, int porttype, const input_seq &seq) { astring seqstring; xml_data_node *seqnode; /* get the string for the sequence */ - if (input_seq_get_1(seq) == SEQCODE_END) + if (seq.length() == 0) seqstring.cpy("NONE"); else - input_seq_to_tokens(machine, seqstring, seq); + machine.input().seq_to_tokens(seqstring, seq); /* add the new node */ seqnode = xml_add_child(parentnode, "newseq", seqstring); @@ -3511,35 +3427,35 @@ static int save_this_input_field_type(int type) static void save_default_inputs(running_machine &machine, xml_data_node *parentnode) { input_port_private *portdata = machine.input_port_data; - input_type_state *typestate; + input_type_entry *entry; /* iterate over ports */ - for (typestate = portdata->typestatelist; typestate != NULL; typestate = typestate->next) + for (entry = portdata->typelist.first(); entry != NULL; entry = entry->next()) { /* only save if this port is a type we save */ - if (save_this_input_field_type(typestate->typedesc.type)) + if (save_this_input_field_type(entry->type)) { int seqtype; /* see if any of the sequences have changed */ - for (seqtype = 0; seqtype < ARRAY_LENGTH(typestate->seq); seqtype++) - if (input_seq_cmp(&typestate->seq[seqtype], &typestate->typedesc.seq[seqtype]) != 0) + for (seqtype = 0; seqtype < ARRAY_LENGTH(entry->seq); seqtype++) + if (entry->seq[seqtype] != entry->defseq[seqtype]) break; /* if so, we need to add a node */ - if (seqtype < ARRAY_LENGTH(typestate->seq)) + if (seqtype < ARRAY_LENGTH(entry->seq)) { /* add a new port node */ xml_data_node *portnode = xml_add_child(parentnode, "port", NULL); if (portnode != NULL) { /* add the port information and attributes */ - xml_set_attribute(portnode, "type", input_field_type_to_token(machine, typestate->typedesc.type, typestate->typedesc.player)); + xml_set_attribute(portnode, "type", input_field_type_to_token(machine, entry->type, entry->player)); /* add only the sequences that have changed from the defaults */ - for (seqtype = 0; seqtype < ARRAY_LENGTH(typestate->seq); seqtype++) - if (input_seq_cmp(&typestate->seq[seqtype], &typestate->typedesc.seq[seqtype]) != 0) - save_sequence(machine, portnode, seqtype, typestate->typedesc.type, &typestate->seq[seqtype]); + for (int seqtype = 0; seqtype < ARRAY_LENGTH(entry->seq); seqtype++) + if (entry->seq[seqtype] != entry->defseq[seqtype]) + save_sequence(machine, portnode, seqtype, entry->type, entry->seq[seqtype]); } } } @@ -3567,7 +3483,7 @@ static void save_game_inputs(running_machine &machine, xml_data_node *parentnode /* determine if we changed */ for (seqtype = 0; seqtype < ARRAY_LENGTH(field->state->seq); seqtype++) - changed |= (input_seq_cmp(&field->state->seq[seqtype], &field->seq[seqtype]) != 0); + changed |= (field->state->seq[seqtype] != field->seq[seqtype]); /* non-analog changes */ if (field->state->analog == NULL) @@ -3599,8 +3515,8 @@ static void save_game_inputs(running_machine &machine, xml_data_node *parentnode /* add sequences if changed */ for (seqtype = 0; seqtype < ARRAY_LENGTH(field->state->seq); seqtype++) - if (input_seq_cmp(&field->state->seq[seqtype], &field->seq[seqtype]) != 0) - save_sequence(machine, portnode, seqtype, field->type, &field->state->seq[seqtype]); + if (field->state->seq[seqtype] != field->seq[seqtype]) + save_sequence(machine, portnode, seqtype, field->type, field->state->seq[seqtype]); /* write out non-analog changes */ if (field->state->analog == NULL) @@ -4080,10 +3996,10 @@ static const char *code_point_string(running_machine &machine, unicode_char ch) } else if (ch >= UCHAR_MAMEKEY_BEGIN) { - /* try to obtain a codename with input_code_name(); this can result in an empty string */ - astring astr; - input_code_name(machine, astr, (input_code) ch - UCHAR_MAMEKEY_BEGIN); - snprintf(buf, ARRAY_LENGTH(buf), "%s", astr.cstr()); + /* try to obtain a codename with code_name(); this can result in an empty string */ + input_code code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, input_item_id(ch - UCHAR_MAMEKEY_BEGIN)); + astring tempstr; + snprintf(buf, ARRAY_LENGTH(buf), "%s", machine.input().code_name(tempstr, code)); } else { @@ -4949,7 +4865,7 @@ input_field_config *ioconfig_alloc_onoff(input_port_config &port, const char *na if (name == DEF_STR(Service_Mode)) { curfield->flags |= FIELD_FLAG_TOGGLE; - curfield->seq[SEQ_TYPE_STANDARD].code[0] = KEYCODE_F2; + curfield->seq[SEQ_TYPE_STANDARD].set(KEYCODE_F2); } if (diplocation != NULL) diplocation_list_alloc(*curfield, diplocation, errorbuf); @@ -4975,6 +4891,33 @@ void ioconfig_field_add_char(input_field_config &field, unicode_char ch, astring void ioconfig_add_code(input_field_config &field, int which, input_code code) { - input_seq_append_or(&field.seq[which], code); + field.seq[which] |= code; +} + + + +input_type_entry::input_type_entry(UINT32 _type, ioport_group _group, int _player, const char *_token, const char *_name, input_seq standard) + : type(_type), + group(_group), + player(_player), + token(_token), + name(_name), + m_next(NULL) +{ + defseq[SEQ_TYPE_STANDARD] = seq[SEQ_TYPE_STANDARD] = standard; + defseq[SEQ_TYPE_INCREMENT] = seq[SEQ_TYPE_INCREMENT] = input_seq::empty_seq; + defseq[SEQ_TYPE_DECREMENT] = seq[SEQ_TYPE_DECREMENT] = input_seq::empty_seq; } +input_type_entry::input_type_entry(UINT32 _type, ioport_group _group, int _player, const char *_token, const char *_name, input_seq standard, input_seq decrement, input_seq increment) + : type(_type), + group(_group), + player(_player), + token(_token), + name(_name), + m_next(NULL) +{ + defseq[SEQ_TYPE_STANDARD] = seq[SEQ_TYPE_STANDARD] = standard; + defseq[SEQ_TYPE_INCREMENT] = seq[SEQ_TYPE_INCREMENT] = increment; + defseq[SEQ_TYPE_DECREMENT] = seq[SEQ_TYPE_DECREMENT] = decrement; +} diff --git a/src/emu/inptport.h b/src/emu/inptport.h index 521b8c2a230..2cbdc394e31 100644 --- a/src/emu/inptport.h +++ b/src/emu/inptport.h @@ -84,7 +84,7 @@ enum /* groups for input ports */ -enum +enum ioport_group { IPG_UI = 0, IPG_PLAYER1, @@ -512,8 +512,7 @@ enum #define UCHAR_SHIFT_1 (UCHAR_PRIVATE + 0) #define UCHAR_SHIFT_2 (UCHAR_PRIVATE + 1) #define UCHAR_MAMEKEY_BEGIN (UCHAR_PRIVATE + 2) -#define UCHAR_MAMEKEY_END (UCHAR_MAMEKEY_BEGIN + __code_key_last) -#define UCHAR_MAMEKEY(code) (UCHAR_MAMEKEY_BEGIN + KEYCODE_##code) +#define UCHAR_MAMEKEY(code) (UCHAR_MAMEKEY_BEGIN + ITEM_ID_##code) #define UCHAR_SHIFT_BEGIN (UCHAR_SHIFT_1) #define UCHAR_SHIFT_END (UCHAR_SHIFT_2) @@ -725,16 +724,26 @@ private: /* describes a fundamental input type, including default input sequences */ -class input_type_desc +class input_type_entry { + friend class simple_list<input_type_entry>; + public: - input_type_desc * next; /* next description in the list */ + input_type_entry(UINT32 type, ioport_group group, int player, const char *token, const char *name, input_seq standard); + input_type_entry(UINT32 type, ioport_group group, int player, const char *token, const char *name, input_seq standard, input_seq decrement, input_seq increment); + + input_type_entry *next() const { return m_next; } + UINT32 type; /* IPT_* for this entry */ - UINT8 group; /* which group the port belongs to */ + ioport_group group; /* which group the port belongs to */ UINT8 player; /* player number (0 is player 1) */ const char * token; /* token used to store settings */ const char * name; /* user-friendly name */ - input_seq seq[SEQ_TYPE_TOTAL];/* default input sequence */ + input_seq defseq[SEQ_TYPE_TOTAL];/* default input sequence */ + input_seq seq[SEQ_TYPE_TOTAL];/* currently configured sequences */ + +private: + input_type_entry * m_next; /* next description in the list */ }; @@ -1140,7 +1149,7 @@ const char *input_type_name(running_machine &machine, int type, int player); int input_type_group(running_machine &machine, int type, int player); /* return the global input mapping sequence for the given type/player */ -const input_seq *input_type_seq(running_machine &machine, int type, int player, input_seq_type seqtype); +const input_seq &input_type_seq(running_machine &machine, int type, int player, input_seq_type seqtype); /* change the global input sequence for the given type/player */ void input_type_set_seq(running_machine &machine, int type, int player, input_seq_type seqtype, const input_seq *newseq); @@ -1149,7 +1158,7 @@ void input_type_set_seq(running_machine &machine, int type, int player, input_se int input_type_pressed(running_machine &machine, int type, int player); /* return the list of default mappings */ -const input_type_desc *input_type_list(running_machine &machine); +const simple_list<input_type_entry> &input_type_list(running_machine &machine); @@ -1159,7 +1168,7 @@ const input_type_desc *input_type_list(running_machine &machine); const char *input_field_name(const input_field_config *field); /* return the input sequence for the given input field */ -const input_seq *input_field_seq(const input_field_config *field, input_seq_type seqtype); +const input_seq &input_field_seq(const input_field_config *field, input_seq_type seqtype); /* return the current settings for the given input field */ void input_field_get_user_settings(const input_field_config *field, input_field_user_settings *settings); diff --git a/src/emu/inpttype.h b/src/emu/inpttype.h index a7d8ab3b606..4383f87d126 100644 --- a/src/emu/inpttype.h +++ b/src/emu/inpttype.h @@ -4,8 +4,36 @@ Array of core-defined input types and default mappings. - Copyright Nicola Salmoria and the MAME Team. - Visit http://mamedev.org for licensing and usage restrictions. +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. ***************************************************************************/ @@ -15,632 +43,631 @@ ***************************************************************************/ #define INPUT_PORT_DIGITAL_TYPE(_player,_group,_type,_name,_seq) \ - { NULL, IPT_##_type, IPG_##_group, (_player == 0) ? _player : (_player) - 1, (_player == 0) ? #_type : ("P" #_player "_" #_type), _name, { _seq, SEQ_DEF_0, SEQ_DEF_0 } }, + typelist.append(*global_alloc(input_type_entry(IPT_##_type, IPG_##_group, (_player == 0) ? _player : (_player) - 1, (_player == 0) ? #_type : ("P" #_player "_" #_type), _name, _seq))); #define INPUT_PORT_ANALOG_TYPE(_player,_group,_type,_name,_seq,_decseq,_incseq) \ - { NULL, IPT_##_type, IPG_##_group, (_player == 0) ? _player : (_player) - 1, (_player == 0) ? #_type : ("P" #_player "_" #_type), _name, { _seq, _incseq, _decseq } }, + typelist.append(*global_alloc(input_type_entry(IPT_##_type, IPG_##_group, (_player == 0) ? _player : (_player) - 1, (_player == 0) ? #_type : ("P" #_player "_" #_type), _name, _seq, _incseq, _decseq))); -#define INDEXED(a,b) INPUT_CODE_SET_DEVINDEX(a,b) -static const input_type_desc core_types[] = +void construct_core_types(simple_list<input_type_entry> &typelist) { - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICK_UP, "P1 Up", SEQ_DEF_3(KEYCODE_UP, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICK_DOWN, "P1 Down", SEQ_DEF_3(KEYCODE_DOWN, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICK_LEFT, "P1 Left", SEQ_DEF_3(KEYCODE_LEFT, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICK_RIGHT, "P1 Right", SEQ_DEF_3(KEYCODE_RIGHT, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKRIGHT_UP, "P1 Right/Up", SEQ_DEF_3(KEYCODE_I, SEQCODE_OR, INDEXED(JOYCODE_BUTTON2, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKRIGHT_DOWN, "P1 Right/Down", SEQ_DEF_3(KEYCODE_K, SEQCODE_OR, INDEXED(JOYCODE_BUTTON3, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKRIGHT_LEFT, "P1 Right/Left", SEQ_DEF_3(KEYCODE_J, SEQCODE_OR, INDEXED(JOYCODE_BUTTON1, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKRIGHT_RIGHT, "P1 Right/Right", SEQ_DEF_3(KEYCODE_L, SEQCODE_OR, INDEXED(JOYCODE_BUTTON4, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKLEFT_UP, "P1 Left/Up", SEQ_DEF_3(KEYCODE_E, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKLEFT_DOWN, "P1 Left/Down", SEQ_DEF_3(KEYCODE_D, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKLEFT_LEFT, "P1 Left/Left", SEQ_DEF_3(KEYCODE_S, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKLEFT_RIGHT, "P1 Left/Right", SEQ_DEF_3(KEYCODE_F, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON1, "P1 Button 1", SEQ_DEF_7(KEYCODE_LCONTROL, SEQCODE_OR, INDEXED(JOYCODE_BUTTON1, 0), SEQCODE_OR, INDEXED(MOUSECODE_BUTTON1, 0), SEQCODE_OR, INDEXED(GUNCODE_BUTTON1, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON2, "P1 Button 2", SEQ_DEF_7(KEYCODE_LALT, SEQCODE_OR, INDEXED(JOYCODE_BUTTON2, 0), SEQCODE_OR, INDEXED(MOUSECODE_BUTTON3, 0), SEQCODE_OR, INDEXED(GUNCODE_BUTTON2, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON3, "P1 Button 3", SEQ_DEF_5(KEYCODE_SPACE, SEQCODE_OR, INDEXED(JOYCODE_BUTTON3, 0), SEQCODE_OR, INDEXED(MOUSECODE_BUTTON2, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON4, "P1 Button 4", SEQ_DEF_3(KEYCODE_LSHIFT, SEQCODE_OR, INDEXED(JOYCODE_BUTTON4, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON5, "P1 Button 5", SEQ_DEF_3(KEYCODE_Z, SEQCODE_OR, INDEXED(JOYCODE_BUTTON5, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON6, "P1 Button 6", SEQ_DEF_3(KEYCODE_X, SEQCODE_OR, INDEXED(JOYCODE_BUTTON6, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON7, "P1 Button 7", SEQ_DEF_3(KEYCODE_C, SEQCODE_OR, INDEXED(JOYCODE_BUTTON7, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON8, "P1 Button 8", SEQ_DEF_3(KEYCODE_V, SEQCODE_OR, INDEXED(JOYCODE_BUTTON8, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON9, "P1 Button 9", SEQ_DEF_3(KEYCODE_B, SEQCODE_OR, INDEXED(JOYCODE_BUTTON9, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON10, "P1 Button 10", SEQ_DEF_3(KEYCODE_N, SEQCODE_OR, INDEXED(JOYCODE_BUTTON10, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON11, "P1 Button 11", SEQ_DEF_3(KEYCODE_M, SEQCODE_OR, INDEXED(JOYCODE_BUTTON11, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON12, "P1 Button 12", SEQ_DEF_3(KEYCODE_COMMA, SEQCODE_OR, INDEXED(JOYCODE_BUTTON12, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON13, "P1 Button 13", SEQ_DEF_3(KEYCODE_STOP, SEQCODE_OR, INDEXED(JOYCODE_BUTTON13, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON14, "P1 Button 14", SEQ_DEF_3(KEYCODE_SLASH, SEQCODE_OR, INDEXED(JOYCODE_BUTTON14, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON15, "P1 Button 15", SEQ_DEF_3(KEYCODE_RSHIFT, SEQCODE_OR, INDEXED(JOYCODE_BUTTON15, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON16, "P1 Button 16", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON16, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, START, "P1 Start", SEQ_DEF_3(KEYCODE_1, SEQCODE_OR, INDEXED(JOYCODE_START, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, SELECT, "P1 Select", SEQ_DEF_3(KEYCODE_5, SEQCODE_OR, INDEXED(JOYCODE_SELECT, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_A, "P1 Mahjong A", SEQ_DEF_1(KEYCODE_A) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_B, "P1 Mahjong B", SEQ_DEF_1(KEYCODE_B) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_C, "P1 Mahjong C", SEQ_DEF_1(KEYCODE_C) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_D, "P1 Mahjong D", SEQ_DEF_1(KEYCODE_D) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_E, "P1 Mahjong E", SEQ_DEF_1(KEYCODE_E) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_F, "P1 Mahjong F", SEQ_DEF_1(KEYCODE_F) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_G, "P1 Mahjong G", SEQ_DEF_1(KEYCODE_G) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_H, "P1 Mahjong H", SEQ_DEF_1(KEYCODE_H) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_I, "P1 Mahjong I", SEQ_DEF_1(KEYCODE_I) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_J, "P1 Mahjong J", SEQ_DEF_1(KEYCODE_J) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_K, "P1 Mahjong K", SEQ_DEF_1(KEYCODE_K) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_L, "P1 Mahjong L", SEQ_DEF_1(KEYCODE_L) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_M, "P1 Mahjong M", SEQ_DEF_1(KEYCODE_M) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_N, "P1 Mahjong N", SEQ_DEF_1(KEYCODE_N) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_O, "P1 Mahjong O", SEQ_DEF_1(KEYCODE_O) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_P, "P1 Mahjong P", SEQ_DEF_1(KEYCODE_COLON) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_Q, "P1 Mahjong Q", SEQ_DEF_1(KEYCODE_Q) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_KAN, "P1 Mahjong Kan", SEQ_DEF_1(KEYCODE_LCONTROL) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_PON, "P1 Mahjong Pon", SEQ_DEF_1(KEYCODE_LALT) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_CHI, "P1 Mahjong Chi", SEQ_DEF_1(KEYCODE_SPACE) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_REACH, "P1 Mahjong Reach", SEQ_DEF_1(KEYCODE_LSHIFT) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_RON, "P1 Mahjong Ron", SEQ_DEF_1(KEYCODE_Z) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_BET, "P1 Mahjong Bet", SEQ_DEF_1(KEYCODE_3) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_LAST_CHANCE, "P1 Mahjong Last Chance", SEQ_DEF_1(KEYCODE_RALT) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_SCORE, "P1 Mahjong Score", SEQ_DEF_1(KEYCODE_RCONTROL) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_DOUBLE_UP, "P1 Mahjong Double Up", SEQ_DEF_1(KEYCODE_RSHIFT) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_FLIP_FLOP, "P1 Mahjong Flip Flop", SEQ_DEF_1(KEYCODE_Y) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_BIG, "P1 Mahjong Big", SEQ_DEF_1(KEYCODE_ENTER) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_SMALL, "P1 Mahjong Small", SEQ_DEF_1(KEYCODE_BACKSPACE) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_A, "P1 Hanafuda A / 1", SEQ_DEF_1(KEYCODE_A) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_B, "P1 Hanafuda B / 2", SEQ_DEF_1(KEYCODE_B) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_C, "P1 Hanafuda C / 3", SEQ_DEF_1(KEYCODE_C) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_D, "P1 Hanafuda D / 4", SEQ_DEF_1(KEYCODE_D) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_E, "P1 Hanafuda E / 5", SEQ_DEF_1(KEYCODE_E) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_F, "P1 Hanafuda F / 6", SEQ_DEF_1(KEYCODE_F) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_G, "P1 Hanafuda G / 7", SEQ_DEF_1(KEYCODE_G) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_H, "P1 Hanafuda H / 8", SEQ_DEF_1(KEYCODE_H) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_YES, "P1 Hanafuda Yes", SEQ_DEF_1(KEYCODE_M) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_NO, "P1 Hanafuda No", SEQ_DEF_1(KEYCODE_N) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_HIGH, "High", SEQ_DEF_1(KEYCODE_A) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_LOW, "Low", SEQ_DEF_1(KEYCODE_S) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_HALF, "Half Gamble", SEQ_DEF_1(KEYCODE_D) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_DEAL, "Deal", SEQ_DEF_1(KEYCODE_2) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_D_UP, "Double Up", SEQ_DEF_1(KEYCODE_3) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_TAKE, "Take", SEQ_DEF_1(KEYCODE_4) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_STAND, "Stand", SEQ_DEF_1(KEYCODE_L) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_BET, "Bet", SEQ_DEF_1(KEYCODE_M) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_KEYIN, "Key In", SEQ_DEF_1(KEYCODE_Q) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_KEYOUT, "Key Out", SEQ_DEF_1(KEYCODE_W) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_PAYOUT, "Payout", SEQ_DEF_1(KEYCODE_I) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_DOOR, "Door", SEQ_DEF_1(KEYCODE_O) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_SERVICE, "Service", SEQ_DEF_1(KEYCODE_9) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_BOOK, "Book-Keeping", SEQ_DEF_1(KEYCODE_0) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, POKER_HOLD1, "Hold 1", SEQ_DEF_1(KEYCODE_Z) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, POKER_HOLD2, "Hold 2", SEQ_DEF_1(KEYCODE_X) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, POKER_HOLD3, "Hold 3", SEQ_DEF_1(KEYCODE_C) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, POKER_HOLD4, "Hold 4", SEQ_DEF_1(KEYCODE_V) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, POKER_HOLD5, "Hold 5", SEQ_DEF_1(KEYCODE_B) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, POKER_CANCEL, "Cancel", SEQ_DEF_1(KEYCODE_N) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, POKER_BET, "Bet", SEQ_DEF_1(KEYCODE_1) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, SLOT_STOP1, "Stop Reel 1", SEQ_DEF_1(KEYCODE_X) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, SLOT_STOP2, "Stop Reel 2", SEQ_DEF_1(KEYCODE_C) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, SLOT_STOP3, "Stop Reel 3", SEQ_DEF_1(KEYCODE_V) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, SLOT_STOP4, "Stop Reel 4", SEQ_DEF_1(KEYCODE_B) ) - INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, SLOT_STOP_ALL, "Stop All Reels", SEQ_DEF_1(KEYCODE_Z) ) - - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICK_UP, "P2 Up", SEQ_DEF_3(KEYCODE_R, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICK_DOWN, "P2 Down", SEQ_DEF_3(KEYCODE_F, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICK_LEFT, "P2 Left", SEQ_DEF_3(KEYCODE_D, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICK_RIGHT, "P2 Right", SEQ_DEF_3(KEYCODE_G, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKRIGHT_UP, "P2 Right/Up", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKRIGHT_DOWN, "P2 Right/Down", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKRIGHT_LEFT, "P2 Right/Left", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKRIGHT_RIGHT, "P2 Right/Right", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKLEFT_UP, "P2 Left/Up", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKLEFT_DOWN, "P2 Left/Down", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKLEFT_LEFT, "P2 Left/Left", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKLEFT_RIGHT, "P2 Left/Right", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON1, "P2 Button 1", SEQ_DEF_7(KEYCODE_A, SEQCODE_OR, INDEXED(JOYCODE_BUTTON1, 1), SEQCODE_OR, INDEXED(MOUSECODE_BUTTON1, 1), SEQCODE_OR, INDEXED(GUNCODE_BUTTON1, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON2, "P2 Button 2", SEQ_DEF_7(KEYCODE_S, SEQCODE_OR, INDEXED(JOYCODE_BUTTON2, 1), SEQCODE_OR, INDEXED(MOUSECODE_BUTTON3, 1), SEQCODE_OR, INDEXED(GUNCODE_BUTTON2, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON3, "P2 Button 3", SEQ_DEF_5(KEYCODE_Q, SEQCODE_OR, INDEXED(JOYCODE_BUTTON3, 1), SEQCODE_OR, INDEXED(MOUSECODE_BUTTON2, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON4, "P2 Button 4", SEQ_DEF_3(KEYCODE_W, SEQCODE_OR, INDEXED(JOYCODE_BUTTON4, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON5, "P2 Button 5", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON5, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON6, "P2 Button 6", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON6, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON7, "P2 Button 7", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON7, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON8, "P2 Button 8", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON8, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON9, "P2 Button 9", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON9, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON10, "P2 Button 10", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON10, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON11, "P2 Button 11", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON11, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON12, "P2 Button 12", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON12, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON13, "P2 Button 13", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON13, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON14, "P2 Button 14", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON14, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON15, "P2 Button 15", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON15, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON16, "P2 Button 16", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON16, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, START, "P2 Start", SEQ_DEF_3(KEYCODE_2, SEQCODE_OR, INDEXED(JOYCODE_START, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, SELECT, "P2 Select", SEQ_DEF_3(KEYCODE_6, SEQCODE_OR, INDEXED(JOYCODE_SELECT, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_A, "P2 Mahjong A", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_B, "P2 Mahjong B", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_C, "P2 Mahjong C", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_D, "P2 Mahjong D", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_E, "P2 Mahjong E", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_F, "P2 Mahjong F", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_G, "P2 Mahjong G", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_H, "P2 Mahjong H", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_I, "P2 Mahjong I", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_J, "P2 Mahjong J", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_K, "P2 Mahjong K", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_L, "P2 Mahjong L", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_M, "P2 Mahjong M", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_N, "P2 Mahjong N", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_O, "P2 Mahjong O", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_P, "P2 Mahjong P", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_Q, "P2 Mahjong Q", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_KAN, "P2 Mahjong Kan", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_PON, "P2 Mahjong Pon", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_CHI, "P2 Mahjong Chi", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_REACH, "P2 Mahjong Reach", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_RON, "P2 Mahjong Ron", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_BET, "P2 Mahjong Bet", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_LAST_CHANCE, "P2 Mahjong Last Chance", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_SCORE, "P2 Mahjong Score", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_DOUBLE_UP, "P2 Mahjong Double Up", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_FLIP_FLOP, "P2 Mahjong Flip Flop", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_BIG, "P2 Mahjong Big", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_SMALL, "P2 Mahjong Small", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_A, "P2 Hanafuda A / 1", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_B, "P2 Hanafuda B / 2", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_C, "P2 Hanafuda C / 3", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_D, "P2 Hanafuda D / 4", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_E, "P2 Hanafuda E / 5", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_F, "P2 Hanafuda F / 6", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_G, "P2 Hanafuda G / 7", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_H, "P2 Hanafuda H / 8", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_YES, "P2 Hanafuda Yes", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_NO, "P2 Hanafuda No", SEQ_DEF_0 ) - - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICK_UP, "P3 Up", SEQ_DEF_3(KEYCODE_I, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICK_DOWN, "P3 Down", SEQ_DEF_3(KEYCODE_K, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICK_LEFT, "P3 Left", SEQ_DEF_3(KEYCODE_J, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICK_RIGHT, "P3 Right", SEQ_DEF_3(KEYCODE_L, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKRIGHT_UP, "P3 Right/Up", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKRIGHT_DOWN, "P3 Right/Down", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKRIGHT_LEFT, "P3 Right/Left", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKRIGHT_RIGHT, "P3 Right/Right", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKLEFT_UP, "P3 Left/Up", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKLEFT_DOWN, "P3 Left/Down", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKLEFT_LEFT, "P3 Left/Left", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKLEFT_RIGHT, "P3 Left/Right", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON1, "P3 Button 1", SEQ_DEF_5(KEYCODE_RCONTROL, SEQCODE_OR, INDEXED(JOYCODE_BUTTON1, 2), SEQCODE_OR, INDEXED(GUNCODE_BUTTON1, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON2, "P3 Button 2", SEQ_DEF_5(KEYCODE_RSHIFT, SEQCODE_OR, INDEXED(JOYCODE_BUTTON2, 2), SEQCODE_OR, INDEXED(GUNCODE_BUTTON2, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON3, "P3 Button 3", SEQ_DEF_3(KEYCODE_ENTER, SEQCODE_OR, INDEXED(JOYCODE_BUTTON3, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON4, "P3 Button 4", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON4, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON5, "P3 Button 5", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON5, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON6, "P3 Button 6", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON6, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON7, "P3 Button 7", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON7, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON8, "P3 Button 8", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON8, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON9, "P3 Button 9", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON9, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON10, "P3 Button 10", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON10, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON11, "P3 Button 11", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON11, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON12, "P3 Button 12", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON12, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON13, "P3 Button 13", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON13, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON14, "P3 Button 14", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON14, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON15, "P3 Button 15", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON15, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON16, "P3 Button 16", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON16, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, START, "P3 Start", SEQ_DEF_3(KEYCODE_3, SEQCODE_OR, INDEXED(JOYCODE_START, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, SELECT, "P3 Select", SEQ_DEF_3(KEYCODE_7, SEQCODE_OR, INDEXED(JOYCODE_SELECT, 2)) ) - - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICK_UP, "P4 Up", SEQ_DEF_3(KEYCODE_8_PAD, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICK_DOWN, "P4 Down", SEQ_DEF_3(KEYCODE_2_PAD, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICK_LEFT, "P4 Left", SEQ_DEF_3(KEYCODE_4_PAD, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICK_RIGHT, "P4 Right", SEQ_DEF_3(KEYCODE_6_PAD, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKRIGHT_UP, "P4 Right/Up", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKRIGHT_DOWN, "P4 Right/Down", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKRIGHT_LEFT, "P4 Right/Left", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKRIGHT_RIGHT, "P4 Right/Right", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKLEFT_UP, "P4 Left/Up", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKLEFT_DOWN, "P4 Left/Down", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKLEFT_LEFT, "P4 Left/Left", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKLEFT_RIGHT, "P4 Left/Right", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON1, "P4 Button 1", SEQ_DEF_3(KEYCODE_0_PAD, SEQCODE_OR, INDEXED(JOYCODE_BUTTON1, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON2, "P4 Button 2", SEQ_DEF_3(KEYCODE_DEL_PAD, SEQCODE_OR, INDEXED(JOYCODE_BUTTON2, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON3, "P4 Button 3", SEQ_DEF_3(KEYCODE_ENTER_PAD, SEQCODE_OR, INDEXED(JOYCODE_BUTTON3, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON4, "P4 Button 4", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON4, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON5, "P4 Button 5", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON5, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON6, "P4 Button 6", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON6, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON7, "P4 Button 7", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON7, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON8, "P4 Button 8", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON8, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON9, "P4 Button 9", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON9, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON10, "P4 Button 10", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON10, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON11, "P4 Button 11", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON11, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON12, "P4 Button 12", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON12, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON13, "P4 Button 13", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON13, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON14, "P4 Button 14", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON14, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON15, "P4 Button 15", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON15, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON16, "P4 Button 16", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON16, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, START, "P4 Start", SEQ_DEF_3(KEYCODE_4, SEQCODE_OR, INDEXED(JOYCODE_START, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, SELECT, "P4 Select", SEQ_DEF_3(KEYCODE_8, SEQCODE_OR, INDEXED(JOYCODE_SELECT, 3)) ) - - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICK_UP, "P5 Up", SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICK_DOWN, "P5 Down", SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICK_LEFT, "P5 Left", SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICK_RIGHT, "P5 Right", SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKRIGHT_UP, "P5 Right/Up", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKRIGHT_DOWN, "P5 Right/Down", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKRIGHT_LEFT, "P5 Right/Left", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKRIGHT_RIGHT, "P5 Right/Right", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKLEFT_UP, "P5 Left/Up", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKLEFT_DOWN, "P5 Left/Down", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKLEFT_LEFT, "P5 Left/Left", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKLEFT_RIGHT, "P5 Left/Right", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON1, "P5 Button 1", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON1, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON2, "P5 Button 2", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON2, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON3, "P5 Button 3", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON3, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON4, "P5 Button 4", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON4, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON5, "P5 Button 5", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON5, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON6, "P5 Button 6", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON6, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON7, "P5 Button 7", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON7, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON8, "P5 Button 8", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON8, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON9, "P5 Button 9", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON9, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON10, "P5 Button 10", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON10, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON11, "P5 Button 11", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON11, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON12, "P5 Button 12", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON12, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON13, "P5 Button 13", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON13, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON14, "P5 Button 14", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON14, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON15, "P5 Button 15", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON15, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON16, "P5 Button 16", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON16, 4)) ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, START, "P5 Start", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, SELECT, "P5 Select", SEQ_DEF_0 ) - - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICK_UP, "P6 Up", SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICK_DOWN, "P6 Down", SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICK_LEFT, "P6 Left", SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICK_RIGHT, "P6 Right", SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKRIGHT_UP, "P6 Right/Up", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKRIGHT_DOWN, "P6 Right/Down", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKRIGHT_LEFT, "P6 Right/Left", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKRIGHT_RIGHT, "P6 Right/Right", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKLEFT_UP, "P6 Left/Up", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKLEFT_DOWN, "P6 Left/Down", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKLEFT_LEFT, "P6 Left/Left", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKLEFT_RIGHT, "P6 Left/Right", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON1, "P6 Button 1", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON1, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON2, "P6 Button 2", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON2, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON3, "P6 Button 3", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON3, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON4, "P6 Button 4", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON4, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON5, "P6 Button 5", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON5, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON6, "P6 Button 6", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON6, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON7, "P6 Button 7", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON7, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON8, "P6 Button 8", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON8, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON9, "P6 Button 9", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON9, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON10, "P6 Button 10", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON10, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON11, "P6 Button 11", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON11, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON12, "P6 Button 12", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON12, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON13, "P6 Button 13", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON13, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON14, "P6 Button 14", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON14, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON15, "P6 Button 15", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON15, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON16, "P6 Button 16", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON16, 5)) ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, START, "P6 Start", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, SELECT, "P6 Select", SEQ_DEF_0 ) - - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICK_UP, "P7 Up", SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICK_DOWN, "P7 Down", SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICK_LEFT, "P7 Left", SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICK_RIGHT, "P7 Right", SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKRIGHT_UP, "P7 Right/Up", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKRIGHT_DOWN, "P7 Right/Down", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKRIGHT_LEFT, "P7 Right/Left", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKRIGHT_RIGHT, "P7 Right/Right", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKLEFT_UP, "P7 Left/Up", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKLEFT_DOWN, "P7 Left/Down", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKLEFT_LEFT, "P7 Left/Left", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKLEFT_RIGHT, "P7 Left/Right", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON1, "P7 Button 1", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON1, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON2, "P7 Button 2", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON2, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON3, "P7 Button 3", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON3, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON4, "P7 Button 4", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON4, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON5, "P7 Button 5", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON5, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON6, "P7 Button 6", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON6, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON7, "P7 Button 7", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON7, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON8, "P7 Button 8", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON8, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON9, "P7 Button 9", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON9, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON10, "P7 Button 10", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON10, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON11, "P7 Button 11", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON11, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON12, "P7 Button 12", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON12, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON13, "P7 Button 13", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON13, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON14, "P7 Button 14", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON14, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON15, "P7 Button 15", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON15, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON16, "P7 Button 16", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON16, 6)) ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, START, "P7 Start", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, SELECT, "P7 Select", SEQ_DEF_0 ) - - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICK_UP, "P8 Up", SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICK_DOWN, "P8 Down", SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICK_LEFT, "P8 Left", SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICK_RIGHT, "P8 Right", SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKRIGHT_UP, "P8 Right/Up", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKRIGHT_DOWN, "P8 Right/Down", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKRIGHT_LEFT, "P8 Right/Left", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKRIGHT_RIGHT, "P8 Right/Right", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKLEFT_UP, "P8 Left/Up", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKLEFT_DOWN, "P8 Left/Down", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKLEFT_LEFT, "P8 Left/Left", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKLEFT_RIGHT, "P8 Left/Right", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON1, "P8 Button 1", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON1, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON2, "P8 Button 2", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON2, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON3, "P8 Button 3", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON3, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON4, "P8 Button 4", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON4, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON5, "P8 Button 5", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON5, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON6, "P8 Button 6", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON6, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON7, "P8 Button 7", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON7, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON8, "P8 Button 8", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON8, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON9, "P8 Button 9", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON9, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON10, "P8 Button 10", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON10, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON11, "P8 Button 11", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON11, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON12, "P8 Button 12", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON12, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON13, "P8 Button 13", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON13, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON14, "P8 Button 14", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON14, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON15, "P8 Button 15", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON15, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON16, "P8 Button 16", SEQ_DEF_1(INDEXED(JOYCODE_BUTTON16, 7)) ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, START, "P8 Start", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, SELECT, "P8 Select", SEQ_DEF_0 ) - - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START1, "1 Player Start", SEQ_DEF_3(KEYCODE_1, SEQCODE_OR, INDEXED(JOYCODE_START, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START2, "2 Players Start", SEQ_DEF_3(KEYCODE_2, SEQCODE_OR, INDEXED(JOYCODE_START, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START3, "3 Players Start", SEQ_DEF_3(KEYCODE_3, SEQCODE_OR, INDEXED(JOYCODE_START, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START4, "4 Players Start", SEQ_DEF_3(KEYCODE_4, SEQCODE_OR, INDEXED(JOYCODE_START, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START5, "5 Players Start", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START6, "6 Players Start", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START7, "7 Players Start", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START8, "8 Players Start", SEQ_DEF_0 ) - - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN1, "Coin 1", SEQ_DEF_3(KEYCODE_5, SEQCODE_OR, INDEXED(JOYCODE_SELECT, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN2, "Coin 2", SEQ_DEF_3(KEYCODE_6, SEQCODE_OR, INDEXED(JOYCODE_SELECT, 1)) ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN3, "Coin 3", SEQ_DEF_3(KEYCODE_7, SEQCODE_OR, INDEXED(JOYCODE_SELECT, 2)) ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN4, "Coin 4", SEQ_DEF_3(KEYCODE_8, SEQCODE_OR, INDEXED(JOYCODE_SELECT, 3)) ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN5, "Coin 5", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN6, "Coin 6", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN7, "Coin 7", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN8, "Coin 8", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN9, "Coin 9", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN10, "Coin 10", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN11, "Coin 11", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN12, "Coin 12", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, BILL1, "Bill 1", SEQ_DEF_1(KEYCODE_BACKSPACE) ) - - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, SERVICE1, "Service 1", SEQ_DEF_1(KEYCODE_9) ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, SERVICE2, "Service 2", SEQ_DEF_1(KEYCODE_0) ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, SERVICE3, "Service 3", SEQ_DEF_1(KEYCODE_MINUS) ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, SERVICE4, "Service 4", SEQ_DEF_1(KEYCODE_EQUALS) ) - - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, TILT1, "Tilt 1", SEQ_DEF_1(KEYCODE_T) ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, TILT2, "Tilt 2", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, TILT3, "Tilt 3", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, TILT4, "Tilt 4", SEQ_DEF_0 ) - - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, SERVICE, "Service", SEQ_DEF_1(KEYCODE_F2) ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, TILT, "Tilt", SEQ_DEF_1(KEYCODE_T) ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, INTERLOCK, "Door Interlock", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, VOLUME_DOWN, "Volume Down", SEQ_DEF_1(KEYCODE_MINUS) ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, VOLUME_UP, "Volume Up", SEQ_DEF_1(KEYCODE_EQUALS) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, PEDAL, "P1 Pedal 1", SEQ_DEF_1(INDEXED(JOYCODE_Y_NEG_ABSOLUTE, 0)), SEQ_DEF_0, SEQ_DEF_3(KEYCODE_LCONTROL, SEQCODE_OR, INDEXED(JOYCODE_BUTTON1, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, PEDAL, "P2 Pedal 1", SEQ_DEF_1(INDEXED(JOYCODE_Y_NEG_ABSOLUTE, 1)), SEQ_DEF_0, SEQ_DEF_3(KEYCODE_A, SEQCODE_OR, INDEXED(JOYCODE_BUTTON1, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, PEDAL, "P3 Pedal 1", SEQ_DEF_1(INDEXED(JOYCODE_Y_NEG_ABSOLUTE, 2)), SEQ_DEF_0, SEQ_DEF_3(KEYCODE_RCONTROL, SEQCODE_OR, INDEXED(JOYCODE_BUTTON1, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, PEDAL, "P4 Pedal 1", SEQ_DEF_1(INDEXED(JOYCODE_Y_NEG_ABSOLUTE, 3)), SEQ_DEF_0, SEQ_DEF_3(KEYCODE_0_PAD, SEQCODE_OR, INDEXED(JOYCODE_BUTTON1, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, PEDAL, "P5 Pedal 1", SEQ_DEF_1(INDEXED(JOYCODE_Y_NEG_ABSOLUTE, 4)), SEQ_DEF_0, SEQ_DEF_1(INDEXED(JOYCODE_BUTTON1, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, PEDAL, "P6 Pedal 1", SEQ_DEF_1(INDEXED(JOYCODE_Y_NEG_ABSOLUTE, 5)), SEQ_DEF_0, SEQ_DEF_1(INDEXED(JOYCODE_BUTTON1, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, PEDAL, "P7 Pedal 1", SEQ_DEF_1(INDEXED(JOYCODE_Y_NEG_ABSOLUTE, 6)), SEQ_DEF_0, SEQ_DEF_1(INDEXED(JOYCODE_BUTTON1, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, PEDAL, "P8 Pedal 1", SEQ_DEF_1(INDEXED(JOYCODE_Y_NEG_ABSOLUTE, 7)), SEQ_DEF_0, SEQ_DEF_1(INDEXED(JOYCODE_BUTTON1, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, PEDAL2, "P1 Pedal 2", SEQ_DEF_1(INDEXED(JOYCODE_Y_POS_ABSOLUTE, 0)), SEQ_DEF_0, SEQ_DEF_3(KEYCODE_LALT, SEQCODE_OR, INDEXED(JOYCODE_BUTTON2, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, PEDAL2, "P2 Pedal 2", SEQ_DEF_1(INDEXED(JOYCODE_Y_POS_ABSOLUTE, 1)), SEQ_DEF_0, SEQ_DEF_3(KEYCODE_S, SEQCODE_OR, INDEXED(JOYCODE_BUTTON2, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, PEDAL2, "P3 Pedal 2", SEQ_DEF_1(INDEXED(JOYCODE_Y_POS_ABSOLUTE, 2)), SEQ_DEF_0, SEQ_DEF_3(KEYCODE_RSHIFT, SEQCODE_OR, INDEXED(JOYCODE_BUTTON2, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, PEDAL2, "P4 Pedal 2", SEQ_DEF_1(INDEXED(JOYCODE_Y_POS_ABSOLUTE, 3)), SEQ_DEF_0, SEQ_DEF_3(KEYCODE_DEL_PAD, SEQCODE_OR, INDEXED(JOYCODE_BUTTON2, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, PEDAL2, "P5 Pedal 2", SEQ_DEF_1(INDEXED(JOYCODE_Y_POS_ABSOLUTE, 4)), SEQ_DEF_0, SEQ_DEF_1(INDEXED(JOYCODE_BUTTON2, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, PEDAL2, "P6 Pedal 2", SEQ_DEF_1(INDEXED(JOYCODE_Y_POS_ABSOLUTE, 5)), SEQ_DEF_0, SEQ_DEF_1(INDEXED(JOYCODE_BUTTON2, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, PEDAL2, "P7 Pedal 2", SEQ_DEF_1(INDEXED(JOYCODE_Y_POS_ABSOLUTE, 6)), SEQ_DEF_0, SEQ_DEF_1(INDEXED(JOYCODE_BUTTON2, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, PEDAL2, "P8 Pedal 2", SEQ_DEF_1(INDEXED(JOYCODE_Y_POS_ABSOLUTE, 7)), SEQ_DEF_0, SEQ_DEF_1(INDEXED(JOYCODE_BUTTON2, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, PEDAL3, "P1 Pedal 3", SEQ_DEF_0, SEQ_DEF_0, SEQ_DEF_3(KEYCODE_SPACE, SEQCODE_OR, INDEXED(JOYCODE_BUTTON3, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, PEDAL3, "P2 Pedal 3", SEQ_DEF_0, SEQ_DEF_0, SEQ_DEF_3(KEYCODE_Q, SEQCODE_OR, INDEXED(JOYCODE_BUTTON3, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, PEDAL3, "P3 Pedal 3", SEQ_DEF_0, SEQ_DEF_0, SEQ_DEF_3(KEYCODE_ENTER, SEQCODE_OR, INDEXED(JOYCODE_BUTTON3, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, PEDAL3, "P4 Pedal 3", SEQ_DEF_0, SEQ_DEF_0, SEQ_DEF_3(KEYCODE_ENTER_PAD, SEQCODE_OR, INDEXED(JOYCODE_BUTTON3, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, PEDAL3, "P5 Pedal 3", SEQ_DEF_0, SEQ_DEF_0, SEQ_DEF_1(INDEXED(JOYCODE_BUTTON3, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, PEDAL3, "P6 Pedal 3", SEQ_DEF_0, SEQ_DEF_0, SEQ_DEF_1(INDEXED(JOYCODE_BUTTON3, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, PEDAL3, "P7 Pedal 3", SEQ_DEF_0, SEQ_DEF_0, SEQ_DEF_1(INDEXED(JOYCODE_BUTTON3, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, PEDAL3, "P8 Pedal 3", SEQ_DEF_0, SEQ_DEF_0, SEQ_DEF_1(INDEXED(JOYCODE_BUTTON3, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, PADDLE, "Paddle", SEQ_DEF_3(INDEXED(MOUSECODE_X, 0), SEQCODE_OR, INDEXED(JOYCODE_X, 0)), SEQ_DEF_3(KEYCODE_LEFT, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 0)), SEQ_DEF_3(KEYCODE_RIGHT, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, PADDLE, "Paddle 2", SEQ_DEF_3(INDEXED(MOUSECODE_X, 1), SEQCODE_OR, INDEXED(JOYCODE_X, 1)), SEQ_DEF_3(KEYCODE_D, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 1)), SEQ_DEF_3(KEYCODE_G, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, PADDLE, "Paddle 3", SEQ_DEF_3(INDEXED(MOUSECODE_X, 2), SEQCODE_OR, INDEXED(JOYCODE_X, 2)), SEQ_DEF_3(KEYCODE_J, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 2)), SEQ_DEF_3(KEYCODE_L, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, PADDLE, "Paddle 4", SEQ_DEF_3(INDEXED(MOUSECODE_X, 3), SEQCODE_OR, INDEXED(JOYCODE_X, 3)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 3)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, PADDLE, "Paddle 5", SEQ_DEF_3(INDEXED(MOUSECODE_X, 4), SEQCODE_OR, INDEXED(JOYCODE_X, 4)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 4)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, PADDLE, "Paddle 6", SEQ_DEF_3(INDEXED(MOUSECODE_X, 5), SEQCODE_OR, INDEXED(JOYCODE_X, 5)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 5)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, PADDLE, "Paddle 7", SEQ_DEF_3(INDEXED(MOUSECODE_X, 6), SEQCODE_OR, INDEXED(JOYCODE_X, 6)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 6)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, PADDLE, "Paddle 8", SEQ_DEF_3(INDEXED(MOUSECODE_X, 7), SEQCODE_OR, INDEXED(JOYCODE_X, 7)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 7)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, PADDLE_V, "Paddle V", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 0), SEQCODE_OR, INDEXED(JOYCODE_Y, 0)), SEQ_DEF_3(KEYCODE_UP, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 0)), SEQ_DEF_3(KEYCODE_DOWN, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, PADDLE_V, "Paddle V 2", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 1), SEQCODE_OR, INDEXED(JOYCODE_Y, 1)), SEQ_DEF_3(KEYCODE_R, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 1)), SEQ_DEF_3(KEYCODE_F, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, PADDLE_V, "Paddle V 3", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 2), SEQCODE_OR, INDEXED(JOYCODE_Y, 2)), SEQ_DEF_3(KEYCODE_I, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 2)), SEQ_DEF_3(KEYCODE_K, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, PADDLE_V, "Paddle V 4", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 3), SEQCODE_OR, INDEXED(JOYCODE_Y, 3)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 3)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, PADDLE_V, "Paddle V 5", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 4), SEQCODE_OR, INDEXED(JOYCODE_Y, 4)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 4)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, PADDLE_V, "Paddle V 6", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 5), SEQCODE_OR, INDEXED(JOYCODE_Y, 5)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 5)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, PADDLE_V, "Paddle V 7", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 6), SEQCODE_OR, INDEXED(JOYCODE_Y, 6)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 6)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, PADDLE_V, "Paddle V 8", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 7), SEQCODE_OR, INDEXED(JOYCODE_Y, 7)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 7)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, POSITIONAL, "Positional", SEQ_DEF_3(INDEXED(MOUSECODE_X, 0), SEQCODE_OR, INDEXED(JOYCODE_X, 0)), SEQ_DEF_3(KEYCODE_LEFT, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 0)), SEQ_DEF_3(KEYCODE_RIGHT, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, POSITIONAL, "Positional 2", SEQ_DEF_3(INDEXED(MOUSECODE_X, 1), SEQCODE_OR, INDEXED(JOYCODE_X, 1)), SEQ_DEF_3(KEYCODE_D, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 1)), SEQ_DEF_3(KEYCODE_G, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, POSITIONAL, "Positional 3", SEQ_DEF_3(INDEXED(MOUSECODE_X, 2), SEQCODE_OR, INDEXED(JOYCODE_X, 2)), SEQ_DEF_3(KEYCODE_J, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 2)), SEQ_DEF_3(KEYCODE_L, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, POSITIONAL, "Positional 4", SEQ_DEF_3(INDEXED(MOUSECODE_X, 3), SEQCODE_OR, INDEXED(JOYCODE_X, 3)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 3)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, POSITIONAL, "Positional 5", SEQ_DEF_3(INDEXED(MOUSECODE_X, 4), SEQCODE_OR, INDEXED(JOYCODE_X, 4)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 4)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, POSITIONAL, "Positional 6", SEQ_DEF_3(INDEXED(MOUSECODE_X, 5), SEQCODE_OR, INDEXED(JOYCODE_X, 5)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 5)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, POSITIONAL, "Positional 7", SEQ_DEF_3(INDEXED(MOUSECODE_X, 6), SEQCODE_OR, INDEXED(JOYCODE_X, 6)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 6)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, POSITIONAL, "Positional 8", SEQ_DEF_3(INDEXED(MOUSECODE_X, 7), SEQCODE_OR, INDEXED(JOYCODE_X, 7)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 7)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, POSITIONAL_V, "Positional V", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 0), SEQCODE_OR, INDEXED(JOYCODE_Y, 0)), SEQ_DEF_3(KEYCODE_UP, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 0)), SEQ_DEF_3(KEYCODE_DOWN, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, POSITIONAL_V, "Positional V 2", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 1), SEQCODE_OR, INDEXED(JOYCODE_Y, 1)), SEQ_DEF_3(KEYCODE_R, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 1)), SEQ_DEF_3(KEYCODE_F, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, POSITIONAL_V, "Positional V 3", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 2), SEQCODE_OR, INDEXED(JOYCODE_Y, 2)), SEQ_DEF_3(KEYCODE_I, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 2)), SEQ_DEF_3(KEYCODE_K, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, POSITIONAL_V, "Positional V 4", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 3), SEQCODE_OR, INDEXED(JOYCODE_Y, 3)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 3)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, POSITIONAL_V, "Positional V 5", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 4), SEQCODE_OR, INDEXED(JOYCODE_Y, 4)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 4)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, POSITIONAL_V, "Positional V 6", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 5), SEQCODE_OR, INDEXED(JOYCODE_Y, 5)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 5)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, POSITIONAL_V, "Positional V 7", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 6), SEQCODE_OR, INDEXED(JOYCODE_Y, 6)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 6)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, POSITIONAL_V, "Positional V 8", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 7), SEQCODE_OR, INDEXED(JOYCODE_Y, 7)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 7)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, DIAL, "Dial", SEQ_DEF_3(INDEXED(MOUSECODE_X, 0), SEQCODE_OR, INDEXED(JOYCODE_X, 0)), SEQ_DEF_3(KEYCODE_LEFT, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 0)), SEQ_DEF_3(KEYCODE_RIGHT, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, DIAL, "Dial 2", SEQ_DEF_3(INDEXED(MOUSECODE_X, 1), SEQCODE_OR, INDEXED(JOYCODE_X, 1)), SEQ_DEF_3(KEYCODE_D, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 1)), SEQ_DEF_3(KEYCODE_G, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, DIAL, "Dial 3", SEQ_DEF_3(INDEXED(MOUSECODE_X, 2), SEQCODE_OR, INDEXED(JOYCODE_X, 2)), SEQ_DEF_3(KEYCODE_J, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 2)), SEQ_DEF_3(KEYCODE_L, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, DIAL, "Dial 4", SEQ_DEF_3(INDEXED(MOUSECODE_X, 3), SEQCODE_OR, INDEXED(JOYCODE_X, 3)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 3)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, DIAL, "Dial 5", SEQ_DEF_3(INDEXED(MOUSECODE_X, 4), SEQCODE_OR, INDEXED(JOYCODE_X, 4)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 4)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, DIAL, "Dial 6", SEQ_DEF_3(INDEXED(MOUSECODE_X, 5), SEQCODE_OR, INDEXED(JOYCODE_X, 5)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 5)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, DIAL, "Dial 7", SEQ_DEF_3(INDEXED(MOUSECODE_X, 6), SEQCODE_OR, INDEXED(JOYCODE_X, 6)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 6)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, DIAL, "Dial 8", SEQ_DEF_3(INDEXED(MOUSECODE_X, 7), SEQCODE_OR, INDEXED(JOYCODE_X, 7)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 7)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, DIAL_V, "Dial V", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 0), SEQCODE_OR, INDEXED(JOYCODE_Y, 0)), SEQ_DEF_3(KEYCODE_UP, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 0)), SEQ_DEF_3(KEYCODE_DOWN, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, DIAL_V, "Dial V 2", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 1), SEQCODE_OR, INDEXED(JOYCODE_Y, 1)), SEQ_DEF_3(KEYCODE_R, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 1)), SEQ_DEF_3(KEYCODE_F, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, DIAL_V, "Dial V 3", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 2), SEQCODE_OR, INDEXED(JOYCODE_Y, 2)), SEQ_DEF_3(KEYCODE_I, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 2)), SEQ_DEF_3(KEYCODE_K, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, DIAL_V, "Dial V 4", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 3), SEQCODE_OR, INDEXED(JOYCODE_Y, 3)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 3)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, DIAL_V, "Dial V 5", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 4), SEQCODE_OR, INDEXED(JOYCODE_Y, 4)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 4)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, DIAL_V, "Dial V 6", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 5), SEQCODE_OR, INDEXED(JOYCODE_Y, 5)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 5)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, DIAL_V, "Dial V 7", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 6), SEQCODE_OR, INDEXED(JOYCODE_Y, 6)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 6)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, DIAL_V, "Dial V 8", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 7), SEQCODE_OR, INDEXED(JOYCODE_Y, 7)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 7)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, TRACKBALL_X, "Track X", SEQ_DEF_3(INDEXED(MOUSECODE_X, 0), SEQCODE_OR, INDEXED(JOYCODE_X, 0)), SEQ_DEF_3(KEYCODE_LEFT, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 0)), SEQ_DEF_3(KEYCODE_RIGHT, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, TRACKBALL_X, "Track X 2", SEQ_DEF_3(INDEXED(MOUSECODE_X, 1), SEQCODE_OR, INDEXED(JOYCODE_X, 1)), SEQ_DEF_3(KEYCODE_D, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 1)), SEQ_DEF_3(KEYCODE_G, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, TRACKBALL_X, "Track X 3", SEQ_DEF_3(INDEXED(MOUSECODE_X, 2), SEQCODE_OR, INDEXED(JOYCODE_X, 2)), SEQ_DEF_3(KEYCODE_J, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 2)), SEQ_DEF_3(KEYCODE_L, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, TRACKBALL_X, "Track X 4", SEQ_DEF_3(INDEXED(MOUSECODE_X, 3), SEQCODE_OR, INDEXED(JOYCODE_X, 3)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 3)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, TRACKBALL_X, "Track X 5", SEQ_DEF_3(INDEXED(MOUSECODE_X, 4), SEQCODE_OR, INDEXED(JOYCODE_X, 4)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 4)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, TRACKBALL_X, "Track X 6", SEQ_DEF_3(INDEXED(MOUSECODE_X, 5), SEQCODE_OR, INDEXED(JOYCODE_X, 5)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 5)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, TRACKBALL_X, "Track X 7", SEQ_DEF_3(INDEXED(MOUSECODE_X, 6), SEQCODE_OR, INDEXED(JOYCODE_X, 6)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 6)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, TRACKBALL_X, "Track X 8", SEQ_DEF_3(INDEXED(MOUSECODE_X, 7), SEQCODE_OR, INDEXED(JOYCODE_X, 7)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 7)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, TRACKBALL_Y, "Track Y", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 0), SEQCODE_OR, INDEXED(JOYCODE_Y, 0)), SEQ_DEF_3(KEYCODE_UP, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 0)), SEQ_DEF_3(KEYCODE_DOWN, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, TRACKBALL_Y, "Track Y 2", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 1), SEQCODE_OR, INDEXED(JOYCODE_Y, 1)), SEQ_DEF_3(KEYCODE_R, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 1)), SEQ_DEF_3(KEYCODE_F, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, TRACKBALL_Y, "Track Y 3", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 2), SEQCODE_OR, INDEXED(JOYCODE_Y, 2)), SEQ_DEF_3(KEYCODE_I, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 2)), SEQ_DEF_3(KEYCODE_K, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, TRACKBALL_Y, "Track Y 4", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 3), SEQCODE_OR, INDEXED(JOYCODE_Y, 3)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 3)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, TRACKBALL_Y, "Track Y 5", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 4), SEQCODE_OR, INDEXED(JOYCODE_Y, 4)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 4)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, TRACKBALL_Y, "Track Y 6", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 5), SEQCODE_OR, INDEXED(JOYCODE_Y, 5)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 5)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, TRACKBALL_Y, "Track Y 7", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 6), SEQCODE_OR, INDEXED(JOYCODE_Y, 6)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 6)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, TRACKBALL_Y, "Track Y 8", SEQ_DEF_3(INDEXED(MOUSECODE_Y, 7), SEQCODE_OR, INDEXED(JOYCODE_Y, 7)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 7)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, AD_STICK_X, "AD Stick X", SEQ_DEF_3(INDEXED(JOYCODE_X, 0), SEQCODE_OR, INDEXED(MOUSECODE_X, 0)), SEQ_DEF_3(KEYCODE_LEFT, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 0)), SEQ_DEF_3(KEYCODE_RIGHT, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, AD_STICK_X, "AD Stick X 2", SEQ_DEF_3(INDEXED(JOYCODE_X, 1), SEQCODE_OR, INDEXED(MOUSECODE_X, 1)), SEQ_DEF_3(KEYCODE_D, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 1)), SEQ_DEF_3(KEYCODE_G, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, AD_STICK_X, "AD Stick X 3", SEQ_DEF_3(INDEXED(JOYCODE_X, 2), SEQCODE_OR, INDEXED(MOUSECODE_X, 2)), SEQ_DEF_3(KEYCODE_J, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 2)), SEQ_DEF_3(KEYCODE_L, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, AD_STICK_X, "AD Stick X 4", SEQ_DEF_3(INDEXED(JOYCODE_X, 3), SEQCODE_OR, INDEXED(MOUSECODE_X, 3)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 3)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, AD_STICK_X, "AD Stick X 5", SEQ_DEF_3(INDEXED(JOYCODE_X, 4), SEQCODE_OR, INDEXED(MOUSECODE_X, 4)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 4)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, AD_STICK_X, "AD Stick X 6", SEQ_DEF_3(INDEXED(JOYCODE_X, 5), SEQCODE_OR, INDEXED(MOUSECODE_X, 5)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 5)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, AD_STICK_X, "AD Stick X 7", SEQ_DEF_3(INDEXED(JOYCODE_X, 6), SEQCODE_OR, INDEXED(MOUSECODE_X, 6)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 6)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, AD_STICK_X, "AD Stick X 8", SEQ_DEF_3(INDEXED(JOYCODE_X, 7), SEQCODE_OR, INDEXED(MOUSECODE_X, 7)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 7)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, AD_STICK_Y, "AD Stick Y", SEQ_DEF_3(INDEXED(JOYCODE_Y, 0), SEQCODE_OR, INDEXED(MOUSECODE_Y, 0)), SEQ_DEF_3(KEYCODE_UP, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 0)), SEQ_DEF_3(KEYCODE_DOWN, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, AD_STICK_Y, "AD Stick Y 2", SEQ_DEF_3(INDEXED(JOYCODE_Y, 1), SEQCODE_OR, INDEXED(MOUSECODE_Y, 1)), SEQ_DEF_3(KEYCODE_R, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 1)), SEQ_DEF_3(KEYCODE_F, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, AD_STICK_Y, "AD Stick Y 3", SEQ_DEF_3(INDEXED(JOYCODE_Y, 2), SEQCODE_OR, INDEXED(MOUSECODE_Y, 2)), SEQ_DEF_3(KEYCODE_I, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 2)), SEQ_DEF_3(KEYCODE_K, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, AD_STICK_Y, "AD Stick Y 4", SEQ_DEF_3(INDEXED(JOYCODE_Y, 3), SEQCODE_OR, INDEXED(MOUSECODE_Y, 3)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 3)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, AD_STICK_Y, "AD Stick Y 5", SEQ_DEF_3(INDEXED(JOYCODE_Y, 4), SEQCODE_OR, INDEXED(MOUSECODE_Y, 4)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 4)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, AD_STICK_Y, "AD Stick Y 6", SEQ_DEF_3(INDEXED(JOYCODE_Y, 5), SEQCODE_OR, INDEXED(MOUSECODE_Y, 5)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 5)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, AD_STICK_Y, "AD Stick Y 7", SEQ_DEF_3(INDEXED(JOYCODE_Y, 6), SEQCODE_OR, INDEXED(MOUSECODE_Y, 6)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 6)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, AD_STICK_Y, "AD Stick Y 8", SEQ_DEF_3(INDEXED(JOYCODE_Y, 7), SEQCODE_OR, INDEXED(MOUSECODE_Y, 7)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 7)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, AD_STICK_Z, "AD Stick Z", SEQ_DEF_1(INDEXED(JOYCODE_Z, 0)), SEQ_DEF_0, SEQ_DEF_0 ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, AD_STICK_Z, "AD Stick Z 2", SEQ_DEF_1(INDEXED(JOYCODE_Z, 1)), SEQ_DEF_0, SEQ_DEF_0 ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, AD_STICK_Z, "AD Stick Z 3", SEQ_DEF_1(INDEXED(JOYCODE_Z, 2)), SEQ_DEF_0, SEQ_DEF_0 ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, AD_STICK_Z, "AD Stick Z 4", SEQ_DEF_1(INDEXED(JOYCODE_Z, 3)), SEQ_DEF_0, SEQ_DEF_0 ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, AD_STICK_Z, "AD Stick Z 5", SEQ_DEF_1(INDEXED(JOYCODE_Z, 4)), SEQ_DEF_0, SEQ_DEF_0 ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, AD_STICK_Z, "AD Stick Z 6", SEQ_DEF_1(INDEXED(JOYCODE_Z, 5)), SEQ_DEF_0, SEQ_DEF_0 ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, AD_STICK_Z, "AD Stick Z 7", SEQ_DEF_1(INDEXED(JOYCODE_Z, 6)), SEQ_DEF_0, SEQ_DEF_0 ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, AD_STICK_Z, "AD Stick Z 8", SEQ_DEF_1(INDEXED(JOYCODE_Z, 7)), SEQ_DEF_0, SEQ_DEF_0 ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, LIGHTGUN_X, "Lightgun X", SEQ_DEF_5(INDEXED(GUNCODE_X, 0), SEQCODE_OR, INDEXED(MOUSECODE_X, 0), SEQCODE_OR, INDEXED(JOYCODE_X, 0)), SEQ_DEF_3(KEYCODE_LEFT, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 0)), SEQ_DEF_3(KEYCODE_RIGHT, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, LIGHTGUN_X, "Lightgun X 2", SEQ_DEF_5(INDEXED(GUNCODE_X, 1), SEQCODE_OR, INDEXED(MOUSECODE_X, 1), SEQCODE_OR, INDEXED(JOYCODE_X, 1)), SEQ_DEF_3(KEYCODE_D, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 1)), SEQ_DEF_3(KEYCODE_G, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, LIGHTGUN_X, "Lightgun X 3", SEQ_DEF_5(INDEXED(GUNCODE_X, 2), SEQCODE_OR, INDEXED(MOUSECODE_X, 2), SEQCODE_OR, INDEXED(JOYCODE_X, 2)), SEQ_DEF_3(KEYCODE_J, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 2)), SEQ_DEF_3(KEYCODE_L, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, LIGHTGUN_X, "Lightgun X 4", SEQ_DEF_5(INDEXED(GUNCODE_X, 3), SEQCODE_OR, INDEXED(MOUSECODE_X, 3), SEQCODE_OR, INDEXED(JOYCODE_X, 3)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 3)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, LIGHTGUN_X, "Lightgun X 5", SEQ_DEF_5(INDEXED(GUNCODE_X, 4), SEQCODE_OR, INDEXED(MOUSECODE_X, 4), SEQCODE_OR, INDEXED(JOYCODE_X, 4)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 4)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, LIGHTGUN_X, "Lightgun X 6", SEQ_DEF_5(INDEXED(GUNCODE_X, 5), SEQCODE_OR, INDEXED(MOUSECODE_X, 5), SEQCODE_OR, INDEXED(JOYCODE_X, 5)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 5)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, LIGHTGUN_X, "Lightgun X 7", SEQ_DEF_5(INDEXED(GUNCODE_X, 6), SEQCODE_OR, INDEXED(MOUSECODE_X, 6), SEQCODE_OR, INDEXED(JOYCODE_X, 6)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 6)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, LIGHTGUN_X, "Lightgun X 8", SEQ_DEF_5(INDEXED(GUNCODE_X, 7), SEQCODE_OR, INDEXED(MOUSECODE_X, 7), SEQCODE_OR, INDEXED(JOYCODE_X, 7)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 7)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, LIGHTGUN_Y, "Lightgun Y", SEQ_DEF_5(INDEXED(GUNCODE_Y, 0), SEQCODE_OR, INDEXED(MOUSECODE_Y, 0), SEQCODE_OR, INDEXED(JOYCODE_Y, 0)), SEQ_DEF_3(KEYCODE_UP, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 0)), SEQ_DEF_3(KEYCODE_DOWN, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, LIGHTGUN_Y, "Lightgun Y 2", SEQ_DEF_5(INDEXED(GUNCODE_Y, 1), SEQCODE_OR, INDEXED(MOUSECODE_Y, 1), SEQCODE_OR, INDEXED(JOYCODE_Y, 1)), SEQ_DEF_3(KEYCODE_R, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 1)), SEQ_DEF_3(KEYCODE_F, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, LIGHTGUN_Y, "Lightgun Y 3", SEQ_DEF_5(INDEXED(GUNCODE_Y, 2), SEQCODE_OR, INDEXED(MOUSECODE_Y, 2), SEQCODE_OR, INDEXED(JOYCODE_Y, 2)), SEQ_DEF_3(KEYCODE_I, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 2)), SEQ_DEF_3(KEYCODE_K, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, LIGHTGUN_Y, "Lightgun Y 4", SEQ_DEF_5(INDEXED(GUNCODE_Y, 3), SEQCODE_OR, INDEXED(MOUSECODE_Y, 3), SEQCODE_OR, INDEXED(JOYCODE_Y, 3)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 3)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, LIGHTGUN_Y, "Lightgun Y 5", SEQ_DEF_5(INDEXED(GUNCODE_Y, 4), SEQCODE_OR, INDEXED(MOUSECODE_Y, 4), SEQCODE_OR, INDEXED(JOYCODE_Y, 4)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 4)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, LIGHTGUN_Y, "Lightgun Y 6", SEQ_DEF_5(INDEXED(GUNCODE_Y, 5), SEQCODE_OR, INDEXED(MOUSECODE_Y, 5), SEQCODE_OR, INDEXED(JOYCODE_Y, 5)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 5)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, LIGHTGUN_Y, "Lightgun Y 7", SEQ_DEF_5(INDEXED(GUNCODE_Y, 6), SEQCODE_OR, INDEXED(MOUSECODE_Y, 6), SEQCODE_OR, INDEXED(JOYCODE_Y, 6)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 6)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, LIGHTGUN_Y, "Lightgun Y 8", SEQ_DEF_5(INDEXED(GUNCODE_Y, 7), SEQCODE_OR, INDEXED(MOUSECODE_Y, 7), SEQCODE_OR, INDEXED(JOYCODE_Y, 7)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 7)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, MOUSE_X, "Mouse X", SEQ_DEF_1(INDEXED(MOUSECODE_X, 0)), SEQ_DEF_3(KEYCODE_LEFT, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 0)), SEQ_DEF_3(KEYCODE_RIGHT, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, MOUSE_X, "Mouse X 2", SEQ_DEF_1(INDEXED(MOUSECODE_X, 1)), SEQ_DEF_3(KEYCODE_D, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 1)), SEQ_DEF_3(KEYCODE_G, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, MOUSE_X, "Mouse X 3", SEQ_DEF_1(INDEXED(MOUSECODE_X, 2)), SEQ_DEF_3(KEYCODE_J, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 2)), SEQ_DEF_3(KEYCODE_L, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, MOUSE_X, "Mouse X 4", SEQ_DEF_1(INDEXED(MOUSECODE_X, 3)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 3)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, MOUSE_X, "Mouse X 5", SEQ_DEF_1(INDEXED(MOUSECODE_X, 4)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 4)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, MOUSE_X, "Mouse X 6", SEQ_DEF_1(INDEXED(MOUSECODE_X, 5)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 5)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, MOUSE_X, "Mouse X 7", SEQ_DEF_1(INDEXED(MOUSECODE_X, 6)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 6)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, MOUSE_X, "Mouse X 8", SEQ_DEF_1(INDEXED(MOUSECODE_X, 7)), SEQ_DEF_1(INDEXED(JOYCODE_X_LEFT_SWITCH, 7)), SEQ_DEF_1(INDEXED(JOYCODE_X_RIGHT_SWITCH, 7)) ) - - INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, MOUSE_Y, "Mouse Y", SEQ_DEF_1(INDEXED(MOUSECODE_Y, 0)), SEQ_DEF_3(KEYCODE_UP, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 0)), SEQ_DEF_3(KEYCODE_DOWN, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 0)) ) - INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, MOUSE_Y, "Mouse Y 2", SEQ_DEF_1(INDEXED(MOUSECODE_Y, 1)), SEQ_DEF_3(KEYCODE_R, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 1)), SEQ_DEF_3(KEYCODE_F, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 1)) ) - INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, MOUSE_Y, "Mouse Y 3", SEQ_DEF_1(INDEXED(MOUSECODE_Y, 2)), SEQ_DEF_3(KEYCODE_I, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 2)), SEQ_DEF_3(KEYCODE_K, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 2)) ) - INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, MOUSE_Y, "Mouse Y 4", SEQ_DEF_1(INDEXED(MOUSECODE_Y, 3)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 3)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 3)) ) - INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, MOUSE_Y, "Mouse Y 5", SEQ_DEF_1(INDEXED(MOUSECODE_Y, 4)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 4)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 4)) ) - INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, MOUSE_Y, "Mouse Y 6", SEQ_DEF_1(INDEXED(MOUSECODE_Y, 5)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 5)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 5)) ) - INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, MOUSE_Y, "Mouse Y 7", SEQ_DEF_1(INDEXED(MOUSECODE_Y, 6)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 6)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 6)) ) - INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, MOUSE_Y, "Mouse Y 8", SEQ_DEF_1(INDEXED(MOUSECODE_Y, 7)), SEQ_DEF_1(INDEXED(JOYCODE_Y_UP_SWITCH, 7)), SEQ_DEF_1(INDEXED(JOYCODE_Y_DOWN_SWITCH, 7)) ) - - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, KEYPAD, "Keypad", SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, OTHER, KEYBOARD, "Keyboard", SEQ_DEF_0 ) - - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_ON_SCREEN_DISPLAY,"On Screen Display", SEQ_DEF_1(KEYCODE_TILDE) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_DEBUG_BREAK, "Break in Debugger", SEQ_DEF_1(KEYCODE_TILDE) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_CONFIGURE, "Config Menu", SEQ_DEF_1(KEYCODE_TAB) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_PAUSE, "Pause", SEQ_DEF_1(KEYCODE_P) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_RESET_MACHINE, "Reset Game", SEQ_DEF_2(KEYCODE_F3, KEYCODE_LSHIFT) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_SOFT_RESET, "Soft Reset", SEQ_DEF_3(KEYCODE_F3, SEQCODE_NOT, KEYCODE_LSHIFT) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_SHOW_GFX, "Show Gfx", SEQ_DEF_1(KEYCODE_F4) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_FRAMESKIP_DEC, "Frameskip Dec", SEQ_DEF_1(KEYCODE_F8) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_FRAMESKIP_INC, "Frameskip Inc", SEQ_DEF_1(KEYCODE_F9) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_THROTTLE, "Throttle", SEQ_DEF_1(KEYCODE_F10) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_FAST_FORWARD, "Fast Forward", SEQ_DEF_1(KEYCODE_INSERT) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_SHOW_FPS, "Show FPS", SEQ_DEF_5(KEYCODE_F11, SEQCODE_NOT, KEYCODE_LCONTROL, SEQCODE_NOT, KEYCODE_LSHIFT) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_SNAPSHOT, "Save Snapshot", SEQ_DEF_3(KEYCODE_F12, SEQCODE_NOT, KEYCODE_LSHIFT) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_RECORD_MOVIE, "Record Movie", SEQ_DEF_2(KEYCODE_F12, KEYCODE_LSHIFT) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_TOGGLE_CHEAT, "Toggle Cheat", SEQ_DEF_1(KEYCODE_F6) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_UP, "UI Up", SEQ_DEF_3(KEYCODE_UP, SEQCODE_OR, INDEXED(JOYCODE_Y_UP_SWITCH, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_DOWN, "UI Down", SEQ_DEF_3(KEYCODE_DOWN, SEQCODE_OR, INDEXED(JOYCODE_Y_DOWN_SWITCH, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_LEFT, "UI Left", SEQ_DEF_3(KEYCODE_LEFT, SEQCODE_OR, INDEXED(JOYCODE_X_LEFT_SWITCH, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_RIGHT, "UI Right", SEQ_DEF_3(KEYCODE_RIGHT, SEQCODE_OR, INDEXED(JOYCODE_X_RIGHT_SWITCH, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_HOME, "UI Home", SEQ_DEF_1(KEYCODE_HOME) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_END, "UI End", SEQ_DEF_1(KEYCODE_END) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_PAGE_UP, "UI Page Up", SEQ_DEF_1(KEYCODE_PGUP) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_PAGE_DOWN, "UI Page Down", SEQ_DEF_1(KEYCODE_PGDN) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_SELECT, "UI Select", SEQ_DEF_3(KEYCODE_ENTER, SEQCODE_OR, INDEXED(JOYCODE_BUTTON1, 0)) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_CANCEL, "UI Cancel", SEQ_DEF_1(KEYCODE_ESC) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_DISPLAY_COMMENT, "UI Display Comment", SEQ_DEF_1(KEYCODE_SPACE) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_CLEAR, "UI Clear", SEQ_DEF_1(KEYCODE_DEL) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_ZOOM_IN, "UI Zoom In", SEQ_DEF_1(KEYCODE_EQUALS) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_ZOOM_OUT, "UI Zoom Out", SEQ_DEF_1(KEYCODE_MINUS) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_PREV_GROUP, "UI Previous Group", SEQ_DEF_1(KEYCODE_OPENBRACE) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_NEXT_GROUP, "UI Next Group", SEQ_DEF_1(KEYCODE_CLOSEBRACE) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_ROTATE, "UI Rotate", SEQ_DEF_1(KEYCODE_R) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_SHOW_PROFILER, "Show Profiler", SEQ_DEF_2(KEYCODE_F11, KEYCODE_LSHIFT) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_TOGGLE_UI, "UI Toggle", SEQ_DEF_3(KEYCODE_SCRLOCK, SEQCODE_NOT, KEYCODE_LSHIFT) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_PASTE, "UI Paste Text", SEQ_DEF_2(KEYCODE_SCRLOCK, KEYCODE_LSHIFT) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_TOGGLE_DEBUG, "Toggle Debugger", SEQ_DEF_1(KEYCODE_F5) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_SAVE_STATE, "Save State", SEQ_DEF_2(KEYCODE_F7, KEYCODE_LSHIFT) ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_LOAD_STATE, "Load State", SEQ_DEF_3(KEYCODE_F7, SEQCODE_NOT, KEYCODE_LSHIFT) ) - - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_1, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_2, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_3, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_4, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_5, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_6, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_7, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_8, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_9, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_10, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_11, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_12, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_13, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_14, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_15, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_16, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, INVALID, UNKNOWN, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, INVALID, UNUSED, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, INVALID, SPECIAL, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, INVALID, OTHER, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, INVALID, ADJUSTER, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, INVALID, DIPSWITCH, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, INVALID, CONFIG, NULL, SEQ_DEF_0 ) - INPUT_PORT_DIGITAL_TYPE( 0, INVALID, CATEGORY, NULL, SEQ_DEF_0 ) -}; + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICK_UP, "P1 Up", input_seq(KEYCODE_UP, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICK_DOWN, "P1 Down", input_seq(KEYCODE_DOWN, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICK_LEFT, "P1 Left", input_seq(KEYCODE_LEFT, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICK_RIGHT, "P1 Right", input_seq(KEYCODE_RIGHT, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKRIGHT_UP, "P1 Right/Up", input_seq(KEYCODE_I, input_seq::or_code, JOYCODE_BUTTON2_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKRIGHT_DOWN, "P1 Right/Down", input_seq(KEYCODE_K, input_seq::or_code, JOYCODE_BUTTON3_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKRIGHT_LEFT, "P1 Right/Left", input_seq(KEYCODE_J, input_seq::or_code, JOYCODE_BUTTON1_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKRIGHT_RIGHT, "P1 Right/Right", input_seq(KEYCODE_L, input_seq::or_code, JOYCODE_BUTTON4_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKLEFT_UP, "P1 Left/Up", input_seq(KEYCODE_E, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKLEFT_DOWN, "P1 Left/Down", input_seq(KEYCODE_D, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKLEFT_LEFT, "P1 Left/Left", input_seq(KEYCODE_S, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, JOYSTICKLEFT_RIGHT, "P1 Left/Right", input_seq(KEYCODE_F, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON1, "P1 Button 1", input_seq(KEYCODE_LCONTROL, input_seq::or_code, JOYCODE_BUTTON1_INDEXED(0), input_seq::or_code, MOUSECODE_BUTTON1_INDEXED(0), input_seq::or_code, GUNCODE_BUTTON1_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON2, "P1 Button 2", input_seq(KEYCODE_LALT, input_seq::or_code, JOYCODE_BUTTON2_INDEXED(0), input_seq::or_code, MOUSECODE_BUTTON3_INDEXED(0), input_seq::or_code, GUNCODE_BUTTON2_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON3, "P1 Button 3", input_seq(KEYCODE_SPACE, input_seq::or_code, JOYCODE_BUTTON3_INDEXED(0), input_seq::or_code, MOUSECODE_BUTTON2_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON4, "P1 Button 4", input_seq(KEYCODE_LSHIFT, input_seq::or_code, JOYCODE_BUTTON4_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON5, "P1 Button 5", input_seq(KEYCODE_Z, input_seq::or_code, JOYCODE_BUTTON5_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON6, "P1 Button 6", input_seq(KEYCODE_X, input_seq::or_code, JOYCODE_BUTTON6_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON7, "P1 Button 7", input_seq(KEYCODE_C, input_seq::or_code, JOYCODE_BUTTON7_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON8, "P1 Button 8", input_seq(KEYCODE_V, input_seq::or_code, JOYCODE_BUTTON8_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON9, "P1 Button 9", input_seq(KEYCODE_B, input_seq::or_code, JOYCODE_BUTTON9_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON10, "P1 Button 10", input_seq(KEYCODE_N, input_seq::or_code, JOYCODE_BUTTON10_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON11, "P1 Button 11", input_seq(KEYCODE_M, input_seq::or_code, JOYCODE_BUTTON11_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON12, "P1 Button 12", input_seq(KEYCODE_COMMA, input_seq::or_code, JOYCODE_BUTTON12_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON13, "P1 Button 13", input_seq(KEYCODE_STOP, input_seq::or_code, JOYCODE_BUTTON13_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON14, "P1 Button 14", input_seq(KEYCODE_SLASH, input_seq::or_code, JOYCODE_BUTTON14_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON15, "P1 Button 15", input_seq(KEYCODE_RSHIFT, input_seq::or_code, JOYCODE_BUTTON15_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, BUTTON16, "P1 Button 16", input_seq(JOYCODE_BUTTON16_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, START, "P1 Start", input_seq(KEYCODE_1, input_seq::or_code, JOYCODE_START_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, SELECT, "P1 Select", input_seq(KEYCODE_5, input_seq::or_code, JOYCODE_SELECT_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_A, "P1 Mahjong A", input_seq(KEYCODE_A) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_B, "P1 Mahjong B", input_seq(KEYCODE_B) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_C, "P1 Mahjong C", input_seq(KEYCODE_C) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_D, "P1 Mahjong D", input_seq(KEYCODE_D) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_E, "P1 Mahjong E", input_seq(KEYCODE_E) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_F, "P1 Mahjong F", input_seq(KEYCODE_F) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_G, "P1 Mahjong G", input_seq(KEYCODE_G) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_H, "P1 Mahjong H", input_seq(KEYCODE_H) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_I, "P1 Mahjong I", input_seq(KEYCODE_I) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_J, "P1 Mahjong J", input_seq(KEYCODE_J) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_K, "P1 Mahjong K", input_seq(KEYCODE_K) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_L, "P1 Mahjong L", input_seq(KEYCODE_L) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_M, "P1 Mahjong M", input_seq(KEYCODE_M) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_N, "P1 Mahjong N", input_seq(KEYCODE_N) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_O, "P1 Mahjong O", input_seq(KEYCODE_O) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_P, "P1 Mahjong P", input_seq(KEYCODE_COLON) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_Q, "P1 Mahjong Q", input_seq(KEYCODE_Q) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_KAN, "P1 Mahjong Kan", input_seq(KEYCODE_LCONTROL) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_PON, "P1 Mahjong Pon", input_seq(KEYCODE_LALT) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_CHI, "P1 Mahjong Chi", input_seq(KEYCODE_SPACE) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_REACH, "P1 Mahjong Reach", input_seq(KEYCODE_LSHIFT) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_RON, "P1 Mahjong Ron", input_seq(KEYCODE_Z) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_BET, "P1 Mahjong Bet", input_seq(KEYCODE_3) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_LAST_CHANCE, "P1 Mahjong Last Chance", input_seq(KEYCODE_RALT) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_SCORE, "P1 Mahjong Score", input_seq(KEYCODE_RCONTROL) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_DOUBLE_UP, "P1 Mahjong Double Up", input_seq(KEYCODE_RSHIFT) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_FLIP_FLOP, "P1 Mahjong Flip Flop", input_seq(KEYCODE_Y) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_BIG, "P1 Mahjong Big", input_seq(KEYCODE_ENTER) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, MAHJONG_SMALL, "P1 Mahjong Small", input_seq(KEYCODE_BACKSPACE) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_A, "P1 Hanafuda A / 1", input_seq(KEYCODE_A) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_B, "P1 Hanafuda B / 2", input_seq(KEYCODE_B) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_C, "P1 Hanafuda C / 3", input_seq(KEYCODE_C) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_D, "P1 Hanafuda D / 4", input_seq(KEYCODE_D) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_E, "P1 Hanafuda E / 5", input_seq(KEYCODE_E) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_F, "P1 Hanafuda F / 6", input_seq(KEYCODE_F) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_G, "P1 Hanafuda G / 7", input_seq(KEYCODE_G) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_H, "P1 Hanafuda H / 8", input_seq(KEYCODE_H) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_YES, "P1 Hanafuda Yes", input_seq(KEYCODE_M) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, HANAFUDA_NO, "P1 Hanafuda No", input_seq(KEYCODE_N) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_HIGH, "High", input_seq(KEYCODE_A) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_LOW, "Low", input_seq(KEYCODE_S) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_HALF, "Half Gamble", input_seq(KEYCODE_D) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_DEAL, "Deal", input_seq(KEYCODE_2) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_D_UP, "Double Up", input_seq(KEYCODE_3) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_TAKE, "Take", input_seq(KEYCODE_4) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_STAND, "Stand", input_seq(KEYCODE_L) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_BET, "Bet", input_seq(KEYCODE_M) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_KEYIN, "Key In", input_seq(KEYCODE_Q) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_KEYOUT, "Key Out", input_seq(KEYCODE_W) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_PAYOUT, "Payout", input_seq(KEYCODE_I) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_DOOR, "Door", input_seq(KEYCODE_O) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_SERVICE, "Service", input_seq(KEYCODE_9) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, GAMBLE_BOOK, "Book-Keeping", input_seq(KEYCODE_0) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, POKER_HOLD1, "Hold 1", input_seq(KEYCODE_Z) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, POKER_HOLD2, "Hold 2", input_seq(KEYCODE_X) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, POKER_HOLD3, "Hold 3", input_seq(KEYCODE_C) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, POKER_HOLD4, "Hold 4", input_seq(KEYCODE_V) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, POKER_HOLD5, "Hold 5", input_seq(KEYCODE_B) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, POKER_CANCEL, "Cancel", input_seq(KEYCODE_N) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, POKER_BET, "Bet", input_seq(KEYCODE_1) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, SLOT_STOP1, "Stop Reel 1", input_seq(KEYCODE_X) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, SLOT_STOP2, "Stop Reel 2", input_seq(KEYCODE_C) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, SLOT_STOP3, "Stop Reel 3", input_seq(KEYCODE_V) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, SLOT_STOP4, "Stop Reel 4", input_seq(KEYCODE_B) ) + INPUT_PORT_DIGITAL_TYPE( 1, PLAYER1, SLOT_STOP_ALL, "Stop All Reels", input_seq(KEYCODE_Z) ) + + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICK_UP, "P2 Up", input_seq(KEYCODE_R, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICK_DOWN, "P2 Down", input_seq(KEYCODE_F, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICK_LEFT, "P2 Left", input_seq(KEYCODE_D, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICK_RIGHT, "P2 Right", input_seq(KEYCODE_G, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKRIGHT_UP, "P2 Right/Up", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKRIGHT_DOWN, "P2 Right/Down", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKRIGHT_LEFT, "P2 Right/Left", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKRIGHT_RIGHT, "P2 Right/Right", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKLEFT_UP, "P2 Left/Up", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKLEFT_DOWN, "P2 Left/Down", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKLEFT_LEFT, "P2 Left/Left", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, JOYSTICKLEFT_RIGHT, "P2 Left/Right", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON1, "P2 Button 1", input_seq(KEYCODE_A, input_seq::or_code, JOYCODE_BUTTON1_INDEXED(1), input_seq::or_code, MOUSECODE_BUTTON1_INDEXED(1), input_seq::or_code, GUNCODE_BUTTON1_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON2, "P2 Button 2", input_seq(KEYCODE_S, input_seq::or_code, JOYCODE_BUTTON2_INDEXED(1), input_seq::or_code, MOUSECODE_BUTTON3_INDEXED(1), input_seq::or_code, GUNCODE_BUTTON2_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON3, "P2 Button 3", input_seq(KEYCODE_Q, input_seq::or_code, JOYCODE_BUTTON3_INDEXED(1), input_seq::or_code, MOUSECODE_BUTTON2_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON4, "P2 Button 4", input_seq(KEYCODE_W, input_seq::or_code, JOYCODE_BUTTON4_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON5, "P2 Button 5", input_seq(JOYCODE_BUTTON5_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON6, "P2 Button 6", input_seq(JOYCODE_BUTTON6_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON7, "P2 Button 7", input_seq(JOYCODE_BUTTON7_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON8, "P2 Button 8", input_seq(JOYCODE_BUTTON8_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON9, "P2 Button 9", input_seq(JOYCODE_BUTTON9_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON10, "P2 Button 10", input_seq(JOYCODE_BUTTON10_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON11, "P2 Button 11", input_seq(JOYCODE_BUTTON11_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON12, "P2 Button 12", input_seq(JOYCODE_BUTTON12_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON13, "P2 Button 13", input_seq(JOYCODE_BUTTON13_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON14, "P2 Button 14", input_seq(JOYCODE_BUTTON14_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON15, "P2 Button 15", input_seq(JOYCODE_BUTTON15_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, BUTTON16, "P2 Button 16", input_seq(JOYCODE_BUTTON16_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, START, "P2 Start", input_seq(KEYCODE_2, input_seq::or_code, JOYCODE_START_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, SELECT, "P2 Select", input_seq(KEYCODE_6, input_seq::or_code, JOYCODE_SELECT_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_A, "P2 Mahjong A", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_B, "P2 Mahjong B", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_C, "P2 Mahjong C", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_D, "P2 Mahjong D", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_E, "P2 Mahjong E", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_F, "P2 Mahjong F", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_G, "P2 Mahjong G", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_H, "P2 Mahjong H", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_I, "P2 Mahjong I", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_J, "P2 Mahjong J", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_K, "P2 Mahjong K", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_L, "P2 Mahjong L", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_M, "P2 Mahjong M", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_N, "P2 Mahjong N", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_O, "P2 Mahjong O", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_P, "P2 Mahjong P", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_Q, "P2 Mahjong Q", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_KAN, "P2 Mahjong Kan", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_PON, "P2 Mahjong Pon", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_CHI, "P2 Mahjong Chi", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_REACH, "P2 Mahjong Reach", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_RON, "P2 Mahjong Ron", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_BET, "P2 Mahjong Bet", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_LAST_CHANCE, "P2 Mahjong Last Chance", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_SCORE, "P2 Mahjong Score", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_DOUBLE_UP, "P2 Mahjong Double Up", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_FLIP_FLOP, "P2 Mahjong Flip Flop", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_BIG, "P2 Mahjong Big", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, MAHJONG_SMALL, "P2 Mahjong Small", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_A, "P2 Hanafuda A / 1", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_B, "P2 Hanafuda B / 2", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_C, "P2 Hanafuda C / 3", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_D, "P2 Hanafuda D / 4", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_E, "P2 Hanafuda E / 5", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_F, "P2 Hanafuda F / 6", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_G, "P2 Hanafuda G / 7", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_H, "P2 Hanafuda H / 8", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_YES, "P2 Hanafuda Yes", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 2, PLAYER2, HANAFUDA_NO, "P2 Hanafuda No", input_seq() ) + + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICK_UP, "P3 Up", input_seq(KEYCODE_I, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICK_DOWN, "P3 Down", input_seq(KEYCODE_K, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICK_LEFT, "P3 Left", input_seq(KEYCODE_J, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICK_RIGHT, "P3 Right", input_seq(KEYCODE_L, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKRIGHT_UP, "P3 Right/Up", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKRIGHT_DOWN, "P3 Right/Down", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKRIGHT_LEFT, "P3 Right/Left", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKRIGHT_RIGHT, "P3 Right/Right", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKLEFT_UP, "P3 Left/Up", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKLEFT_DOWN, "P3 Left/Down", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKLEFT_LEFT, "P3 Left/Left", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, JOYSTICKLEFT_RIGHT, "P3 Left/Right", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON1, "P3 Button 1", input_seq(KEYCODE_RCONTROL, input_seq::or_code, JOYCODE_BUTTON1_INDEXED(2), input_seq::or_code, GUNCODE_BUTTON1_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON2, "P3 Button 2", input_seq(KEYCODE_RSHIFT, input_seq::or_code, JOYCODE_BUTTON2_INDEXED(2), input_seq::or_code, GUNCODE_BUTTON2_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON3, "P3 Button 3", input_seq(KEYCODE_ENTER, input_seq::or_code, JOYCODE_BUTTON3_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON4, "P3 Button 4", input_seq(JOYCODE_BUTTON4_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON5, "P3 Button 5", input_seq(JOYCODE_BUTTON5_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON6, "P3 Button 6", input_seq(JOYCODE_BUTTON6_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON7, "P3 Button 7", input_seq(JOYCODE_BUTTON7_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON8, "P3 Button 8", input_seq(JOYCODE_BUTTON8_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON9, "P3 Button 9", input_seq(JOYCODE_BUTTON9_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON10, "P3 Button 10", input_seq(JOYCODE_BUTTON10_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON11, "P3 Button 11", input_seq(JOYCODE_BUTTON11_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON12, "P3 Button 12", input_seq(JOYCODE_BUTTON12_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON13, "P3 Button 13", input_seq(JOYCODE_BUTTON13_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON14, "P3 Button 14", input_seq(JOYCODE_BUTTON14_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON15, "P3 Button 15", input_seq(JOYCODE_BUTTON15_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, BUTTON16, "P3 Button 16", input_seq(JOYCODE_BUTTON16_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, START, "P3 Start", input_seq(KEYCODE_3, input_seq::or_code, JOYCODE_START_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 3, PLAYER3, SELECT, "P3 Select", input_seq(KEYCODE_7, input_seq::or_code, JOYCODE_SELECT_INDEXED(2)) ) + + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICK_UP, "P4 Up", input_seq(KEYCODE_8_PAD, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICK_DOWN, "P4 Down", input_seq(KEYCODE_2_PAD, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICK_LEFT, "P4 Left", input_seq(KEYCODE_4_PAD, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICK_RIGHT, "P4 Right", input_seq(KEYCODE_6_PAD, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKRIGHT_UP, "P4 Right/Up", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKRIGHT_DOWN, "P4 Right/Down", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKRIGHT_LEFT, "P4 Right/Left", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKRIGHT_RIGHT, "P4 Right/Right", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKLEFT_UP, "P4 Left/Up", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKLEFT_DOWN, "P4 Left/Down", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKLEFT_LEFT, "P4 Left/Left", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, JOYSTICKLEFT_RIGHT, "P4 Left/Right", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON1, "P4 Button 1", input_seq(KEYCODE_0_PAD, input_seq::or_code, JOYCODE_BUTTON1_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON2, "P4 Button 2", input_seq(KEYCODE_DEL_PAD, input_seq::or_code, JOYCODE_BUTTON2_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON3, "P4 Button 3", input_seq(KEYCODE_ENTER_PAD, input_seq::or_code, JOYCODE_BUTTON3_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON4, "P4 Button 4", input_seq(JOYCODE_BUTTON4_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON5, "P4 Button 5", input_seq(JOYCODE_BUTTON5_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON6, "P4 Button 6", input_seq(JOYCODE_BUTTON6_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON7, "P4 Button 7", input_seq(JOYCODE_BUTTON7_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON8, "P4 Button 8", input_seq(JOYCODE_BUTTON8_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON9, "P4 Button 9", input_seq(JOYCODE_BUTTON9_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON10, "P4 Button 10", input_seq(JOYCODE_BUTTON10_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON11, "P4 Button 11", input_seq(JOYCODE_BUTTON11_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON12, "P4 Button 12", input_seq(JOYCODE_BUTTON12_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON13, "P4 Button 13", input_seq(JOYCODE_BUTTON13_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON14, "P4 Button 14", input_seq(JOYCODE_BUTTON14_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON15, "P4 Button 15", input_seq(JOYCODE_BUTTON15_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, BUTTON16, "P4 Button 16", input_seq(JOYCODE_BUTTON16_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, START, "P4 Start", input_seq(KEYCODE_4, input_seq::or_code, JOYCODE_START_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 4, PLAYER4, SELECT, "P4 Select", input_seq(KEYCODE_8, input_seq::or_code, JOYCODE_SELECT_INDEXED(3)) ) + + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICK_UP, "P5 Up", input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICK_DOWN, "P5 Down", input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICK_LEFT, "P5 Left", input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICK_RIGHT, "P5 Right", input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKRIGHT_UP, "P5 Right/Up", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKRIGHT_DOWN, "P5 Right/Down", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKRIGHT_LEFT, "P5 Right/Left", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKRIGHT_RIGHT, "P5 Right/Right", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKLEFT_UP, "P5 Left/Up", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKLEFT_DOWN, "P5 Left/Down", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKLEFT_LEFT, "P5 Left/Left", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, JOYSTICKLEFT_RIGHT, "P5 Left/Right", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON1, "P5 Button 1", input_seq(JOYCODE_BUTTON1_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON2, "P5 Button 2", input_seq(JOYCODE_BUTTON2_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON3, "P5 Button 3", input_seq(JOYCODE_BUTTON3_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON4, "P5 Button 4", input_seq(JOYCODE_BUTTON4_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON5, "P5 Button 5", input_seq(JOYCODE_BUTTON5_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON6, "P5 Button 6", input_seq(JOYCODE_BUTTON6_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON7, "P5 Button 7", input_seq(JOYCODE_BUTTON7_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON8, "P5 Button 8", input_seq(JOYCODE_BUTTON8_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON9, "P5 Button 9", input_seq(JOYCODE_BUTTON9_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON10, "P5 Button 10", input_seq(JOYCODE_BUTTON10_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON11, "P5 Button 11", input_seq(JOYCODE_BUTTON11_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON12, "P5 Button 12", input_seq(JOYCODE_BUTTON12_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON13, "P5 Button 13", input_seq(JOYCODE_BUTTON13_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON14, "P5 Button 14", input_seq(JOYCODE_BUTTON14_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON15, "P5 Button 15", input_seq(JOYCODE_BUTTON15_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, BUTTON16, "P5 Button 16", input_seq(JOYCODE_BUTTON16_INDEXED(4)) ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, START, "P5 Start", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 5, PLAYER5, SELECT, "P5 Select", input_seq() ) + + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICK_UP, "P6 Up", input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICK_DOWN, "P6 Down", input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICK_LEFT, "P6 Left", input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICK_RIGHT, "P6 Right", input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKRIGHT_UP, "P6 Right/Up", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKRIGHT_DOWN, "P6 Right/Down", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKRIGHT_LEFT, "P6 Right/Left", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKRIGHT_RIGHT, "P6 Right/Right", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKLEFT_UP, "P6 Left/Up", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKLEFT_DOWN, "P6 Left/Down", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKLEFT_LEFT, "P6 Left/Left", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, JOYSTICKLEFT_RIGHT, "P6 Left/Right", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON1, "P6 Button 1", input_seq(JOYCODE_BUTTON1_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON2, "P6 Button 2", input_seq(JOYCODE_BUTTON2_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON3, "P6 Button 3", input_seq(JOYCODE_BUTTON3_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON4, "P6 Button 4", input_seq(JOYCODE_BUTTON4_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON5, "P6 Button 5", input_seq(JOYCODE_BUTTON5_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON6, "P6 Button 6", input_seq(JOYCODE_BUTTON6_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON7, "P6 Button 7", input_seq(JOYCODE_BUTTON7_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON8, "P6 Button 8", input_seq(JOYCODE_BUTTON8_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON9, "P6 Button 9", input_seq(JOYCODE_BUTTON9_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON10, "P6 Button 10", input_seq(JOYCODE_BUTTON10_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON11, "P6 Button 11", input_seq(JOYCODE_BUTTON11_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON12, "P6 Button 12", input_seq(JOYCODE_BUTTON12_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON13, "P6 Button 13", input_seq(JOYCODE_BUTTON13_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON14, "P6 Button 14", input_seq(JOYCODE_BUTTON14_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON15, "P6 Button 15", input_seq(JOYCODE_BUTTON15_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, BUTTON16, "P6 Button 16", input_seq(JOYCODE_BUTTON16_INDEXED(5)) ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, START, "P6 Start", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 6, PLAYER6, SELECT, "P6 Select", input_seq() ) + + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICK_UP, "P7 Up", input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICK_DOWN, "P7 Down", input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICK_LEFT, "P7 Left", input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICK_RIGHT, "P7 Right", input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKRIGHT_UP, "P7 Right/Up", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKRIGHT_DOWN, "P7 Right/Down", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKRIGHT_LEFT, "P7 Right/Left", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKRIGHT_RIGHT, "P7 Right/Right", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKLEFT_UP, "P7 Left/Up", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKLEFT_DOWN, "P7 Left/Down", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKLEFT_LEFT, "P7 Left/Left", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, JOYSTICKLEFT_RIGHT, "P7 Left/Right", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON1, "P7 Button 1", input_seq(JOYCODE_BUTTON1_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON2, "P7 Button 2", input_seq(JOYCODE_BUTTON2_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON3, "P7 Button 3", input_seq(JOYCODE_BUTTON3_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON4, "P7 Button 4", input_seq(JOYCODE_BUTTON4_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON5, "P7 Button 5", input_seq(JOYCODE_BUTTON5_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON6, "P7 Button 6", input_seq(JOYCODE_BUTTON6_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON7, "P7 Button 7", input_seq(JOYCODE_BUTTON7_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON8, "P7 Button 8", input_seq(JOYCODE_BUTTON8_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON9, "P7 Button 9", input_seq(JOYCODE_BUTTON9_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON10, "P7 Button 10", input_seq(JOYCODE_BUTTON10_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON11, "P7 Button 11", input_seq(JOYCODE_BUTTON11_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON12, "P7 Button 12", input_seq(JOYCODE_BUTTON12_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON13, "P7 Button 13", input_seq(JOYCODE_BUTTON13_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON14, "P7 Button 14", input_seq(JOYCODE_BUTTON14_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON15, "P7 Button 15", input_seq(JOYCODE_BUTTON15_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, BUTTON16, "P7 Button 16", input_seq(JOYCODE_BUTTON16_INDEXED(6)) ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, START, "P7 Start", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 7, PLAYER7, SELECT, "P7 Select", input_seq() ) + + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICK_UP, "P8 Up", input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICK_DOWN, "P8 Down", input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICK_LEFT, "P8 Left", input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICK_RIGHT, "P8 Right", input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKRIGHT_UP, "P8 Right/Up", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKRIGHT_DOWN, "P8 Right/Down", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKRIGHT_LEFT, "P8 Right/Left", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKRIGHT_RIGHT, "P8 Right/Right", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKLEFT_UP, "P8 Left/Up", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKLEFT_DOWN, "P8 Left/Down", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKLEFT_LEFT, "P8 Left/Left", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, JOYSTICKLEFT_RIGHT, "P8 Left/Right", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON1, "P8 Button 1", input_seq(JOYCODE_BUTTON1_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON2, "P8 Button 2", input_seq(JOYCODE_BUTTON2_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON3, "P8 Button 3", input_seq(JOYCODE_BUTTON3_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON4, "P8 Button 4", input_seq(JOYCODE_BUTTON4_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON5, "P8 Button 5", input_seq(JOYCODE_BUTTON5_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON6, "P8 Button 6", input_seq(JOYCODE_BUTTON6_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON7, "P8 Button 7", input_seq(JOYCODE_BUTTON7_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON8, "P8 Button 8", input_seq(JOYCODE_BUTTON8_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON9, "P8 Button 9", input_seq(JOYCODE_BUTTON9_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON10, "P8 Button 10", input_seq(JOYCODE_BUTTON10_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON11, "P8 Button 11", input_seq(JOYCODE_BUTTON11_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON12, "P8 Button 12", input_seq(JOYCODE_BUTTON12_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON13, "P8 Button 13", input_seq(JOYCODE_BUTTON13_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON14, "P8 Button 14", input_seq(JOYCODE_BUTTON14_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON15, "P8 Button 15", input_seq(JOYCODE_BUTTON15_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, BUTTON16, "P8 Button 16", input_seq(JOYCODE_BUTTON16_INDEXED(7)) ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, START, "P8 Start", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 8, PLAYER8, SELECT, "P8 Select", input_seq() ) + + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START1, "1 Player Start", input_seq(KEYCODE_1, input_seq::or_code, JOYCODE_START_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START2, "2 Players Start", input_seq(KEYCODE_2, input_seq::or_code, JOYCODE_START_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START3, "3 Players Start", input_seq(KEYCODE_3, input_seq::or_code, JOYCODE_START_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START4, "4 Players Start", input_seq(KEYCODE_4, input_seq::or_code, JOYCODE_START_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START5, "5 Players Start", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START6, "6 Players Start", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START7, "7 Players Start", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, START8, "8 Players Start", input_seq() ) + + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN1, "Coin 1", input_seq(KEYCODE_5, input_seq::or_code, JOYCODE_SELECT_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN2, "Coin 2", input_seq(KEYCODE_6, input_seq::or_code, JOYCODE_SELECT_INDEXED(1)) ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN3, "Coin 3", input_seq(KEYCODE_7, input_seq::or_code, JOYCODE_SELECT_INDEXED(2)) ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN4, "Coin 4", input_seq(KEYCODE_8, input_seq::or_code, JOYCODE_SELECT_INDEXED(3)) ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN5, "Coin 5", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN6, "Coin 6", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN7, "Coin 7", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN8, "Coin 8", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN9, "Coin 9", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN10, "Coin 10", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN11, "Coin 11", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, COIN12, "Coin 12", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, BILL1, "Bill 1", input_seq(KEYCODE_BACKSPACE) ) + + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, SERVICE1, "Service 1", input_seq(KEYCODE_9) ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, SERVICE2, "Service 2", input_seq(KEYCODE_0) ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, SERVICE3, "Service 3", input_seq(KEYCODE_MINUS) ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, SERVICE4, "Service 4", input_seq(KEYCODE_EQUALS) ) + + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, TILT1, "Tilt 1", input_seq(KEYCODE_T) ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, TILT2, "Tilt 2", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, TILT3, "Tilt 3", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, TILT4, "Tilt 4", input_seq() ) + + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, SERVICE, "Service", input_seq(KEYCODE_F2) ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, TILT, "Tilt", input_seq(KEYCODE_T) ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, INTERLOCK, "Door Interlock", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, VOLUME_DOWN, "Volume Down", input_seq(KEYCODE_MINUS) ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, VOLUME_UP, "Volume Up", input_seq(KEYCODE_EQUALS) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, PEDAL, "P1 Pedal 1", input_seq(JOYCODE_Y_NEG_ABSOLUTE_INDEXED(0)), input_seq(), input_seq(KEYCODE_LCONTROL, input_seq::or_code, JOYCODE_BUTTON1_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, PEDAL, "P2 Pedal 1", input_seq(JOYCODE_Y_NEG_ABSOLUTE_INDEXED(1)), input_seq(), input_seq(KEYCODE_A, input_seq::or_code, JOYCODE_BUTTON1_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, PEDAL, "P3 Pedal 1", input_seq(JOYCODE_Y_NEG_ABSOLUTE_INDEXED(2)), input_seq(), input_seq(KEYCODE_RCONTROL, input_seq::or_code, JOYCODE_BUTTON1_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, PEDAL, "P4 Pedal 1", input_seq(JOYCODE_Y_NEG_ABSOLUTE_INDEXED(3)), input_seq(), input_seq(KEYCODE_0_PAD, input_seq::or_code, JOYCODE_BUTTON1_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, PEDAL, "P5 Pedal 1", input_seq(JOYCODE_Y_NEG_ABSOLUTE_INDEXED(4)), input_seq(), input_seq(JOYCODE_BUTTON1_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, PEDAL, "P6 Pedal 1", input_seq(JOYCODE_Y_NEG_ABSOLUTE_INDEXED(5)), input_seq(), input_seq(JOYCODE_BUTTON1_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, PEDAL, "P7 Pedal 1", input_seq(JOYCODE_Y_NEG_ABSOLUTE_INDEXED(6)), input_seq(), input_seq(JOYCODE_BUTTON1_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, PEDAL, "P8 Pedal 1", input_seq(JOYCODE_Y_NEG_ABSOLUTE_INDEXED(7)), input_seq(), input_seq(JOYCODE_BUTTON1_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, PEDAL2, "P1 Pedal 2", input_seq(JOYCODE_Y_POS_ABSOLUTE_INDEXED(0)), input_seq(), input_seq(KEYCODE_LALT, input_seq::or_code, JOYCODE_BUTTON2_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, PEDAL2, "P2 Pedal 2", input_seq(JOYCODE_Y_POS_ABSOLUTE_INDEXED(1)), input_seq(), input_seq(KEYCODE_S, input_seq::or_code, JOYCODE_BUTTON2_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, PEDAL2, "P3 Pedal 2", input_seq(JOYCODE_Y_POS_ABSOLUTE_INDEXED(2)), input_seq(), input_seq(KEYCODE_RSHIFT, input_seq::or_code, JOYCODE_BUTTON2_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, PEDAL2, "P4 Pedal 2", input_seq(JOYCODE_Y_POS_ABSOLUTE_INDEXED(3)), input_seq(), input_seq(KEYCODE_DEL_PAD, input_seq::or_code, JOYCODE_BUTTON2_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, PEDAL2, "P5 Pedal 2", input_seq(JOYCODE_Y_POS_ABSOLUTE_INDEXED(4)), input_seq(), input_seq(JOYCODE_BUTTON2_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, PEDAL2, "P6 Pedal 2", input_seq(JOYCODE_Y_POS_ABSOLUTE_INDEXED(5)), input_seq(), input_seq(JOYCODE_BUTTON2_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, PEDAL2, "P7 Pedal 2", input_seq(JOYCODE_Y_POS_ABSOLUTE_INDEXED(6)), input_seq(), input_seq(JOYCODE_BUTTON2_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, PEDAL2, "P8 Pedal 2", input_seq(JOYCODE_Y_POS_ABSOLUTE_INDEXED(7)), input_seq(), input_seq(JOYCODE_BUTTON2_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, PEDAL3, "P1 Pedal 3", input_seq(), input_seq(), input_seq(KEYCODE_SPACE, input_seq::or_code, JOYCODE_BUTTON3_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, PEDAL3, "P2 Pedal 3", input_seq(), input_seq(), input_seq(KEYCODE_Q, input_seq::or_code, JOYCODE_BUTTON3_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, PEDAL3, "P3 Pedal 3", input_seq(), input_seq(), input_seq(KEYCODE_ENTER, input_seq::or_code, JOYCODE_BUTTON3_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, PEDAL3, "P4 Pedal 3", input_seq(), input_seq(), input_seq(KEYCODE_ENTER_PAD, input_seq::or_code, JOYCODE_BUTTON3_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, PEDAL3, "P5 Pedal 3", input_seq(), input_seq(), input_seq(JOYCODE_BUTTON3_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, PEDAL3, "P6 Pedal 3", input_seq(), input_seq(), input_seq(JOYCODE_BUTTON3_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, PEDAL3, "P7 Pedal 3", input_seq(), input_seq(), input_seq(JOYCODE_BUTTON3_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, PEDAL3, "P8 Pedal 3", input_seq(), input_seq(), input_seq(JOYCODE_BUTTON3_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, PADDLE, "Paddle", input_seq(MOUSECODE_X_INDEXED(0), input_seq::or_code, JOYCODE_X_INDEXED(0)), input_seq(KEYCODE_LEFT, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(0)), input_seq(KEYCODE_RIGHT, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, PADDLE, "Paddle 2", input_seq(MOUSECODE_X_INDEXED(1), input_seq::or_code, JOYCODE_X_INDEXED(1)), input_seq(KEYCODE_D, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(1)), input_seq(KEYCODE_G, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, PADDLE, "Paddle 3", input_seq(MOUSECODE_X_INDEXED(2), input_seq::or_code, JOYCODE_X_INDEXED(2)), input_seq(KEYCODE_J, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(2)), input_seq(KEYCODE_L, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, PADDLE, "Paddle 4", input_seq(MOUSECODE_X_INDEXED(3), input_seq::or_code, JOYCODE_X_INDEXED(3)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(3)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, PADDLE, "Paddle 5", input_seq(MOUSECODE_X_INDEXED(4), input_seq::or_code, JOYCODE_X_INDEXED(4)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(4)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, PADDLE, "Paddle 6", input_seq(MOUSECODE_X_INDEXED(5), input_seq::or_code, JOYCODE_X_INDEXED(5)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(5)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, PADDLE, "Paddle 7", input_seq(MOUSECODE_X_INDEXED(6), input_seq::or_code, JOYCODE_X_INDEXED(6)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(6)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, PADDLE, "Paddle 8", input_seq(MOUSECODE_X_INDEXED(7), input_seq::or_code, JOYCODE_X_INDEXED(7)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(7)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, PADDLE_V, "Paddle V", input_seq(MOUSECODE_Y_INDEXED(0), input_seq::or_code, JOYCODE_Y_INDEXED(0)), input_seq(KEYCODE_UP, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(0)), input_seq(KEYCODE_DOWN, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, PADDLE_V, "Paddle V 2", input_seq(MOUSECODE_Y_INDEXED(1), input_seq::or_code, JOYCODE_Y_INDEXED(1)), input_seq(KEYCODE_R, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(1)), input_seq(KEYCODE_F, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, PADDLE_V, "Paddle V 3", input_seq(MOUSECODE_Y_INDEXED(2), input_seq::or_code, JOYCODE_Y_INDEXED(2)), input_seq(KEYCODE_I, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(2)), input_seq(KEYCODE_K, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, PADDLE_V, "Paddle V 4", input_seq(MOUSECODE_Y_INDEXED(3), input_seq::or_code, JOYCODE_Y_INDEXED(3)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(3)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, PADDLE_V, "Paddle V 5", input_seq(MOUSECODE_Y_INDEXED(4), input_seq::or_code, JOYCODE_Y_INDEXED(4)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(4)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, PADDLE_V, "Paddle V 6", input_seq(MOUSECODE_Y_INDEXED(5), input_seq::or_code, JOYCODE_Y_INDEXED(5)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(5)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, PADDLE_V, "Paddle V 7", input_seq(MOUSECODE_Y_INDEXED(6), input_seq::or_code, JOYCODE_Y_INDEXED(6)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(6)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, PADDLE_V, "Paddle V 8", input_seq(MOUSECODE_Y_INDEXED(7), input_seq::or_code, JOYCODE_Y_INDEXED(7)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(7)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, POSITIONAL, "Positional", input_seq(MOUSECODE_X_INDEXED(0), input_seq::or_code, JOYCODE_X_INDEXED(0)), input_seq(KEYCODE_LEFT, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(0)), input_seq(KEYCODE_RIGHT, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, POSITIONAL, "Positional 2", input_seq(MOUSECODE_X_INDEXED(1), input_seq::or_code, JOYCODE_X_INDEXED(1)), input_seq(KEYCODE_D, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(1)), input_seq(KEYCODE_G, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, POSITIONAL, "Positional 3", input_seq(MOUSECODE_X_INDEXED(2), input_seq::or_code, JOYCODE_X_INDEXED(2)), input_seq(KEYCODE_J, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(2)), input_seq(KEYCODE_L, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, POSITIONAL, "Positional 4", input_seq(MOUSECODE_X_INDEXED(3), input_seq::or_code, JOYCODE_X_INDEXED(3)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(3)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, POSITIONAL, "Positional 5", input_seq(MOUSECODE_X_INDEXED(4), input_seq::or_code, JOYCODE_X_INDEXED(4)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(4)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, POSITIONAL, "Positional 6", input_seq(MOUSECODE_X_INDEXED(5), input_seq::or_code, JOYCODE_X_INDEXED(5)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(5)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, POSITIONAL, "Positional 7", input_seq(MOUSECODE_X_INDEXED(6), input_seq::or_code, JOYCODE_X_INDEXED(6)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(6)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, POSITIONAL, "Positional 8", input_seq(MOUSECODE_X_INDEXED(7), input_seq::or_code, JOYCODE_X_INDEXED(7)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(7)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, POSITIONAL_V, "Positional V", input_seq(MOUSECODE_Y_INDEXED(0), input_seq::or_code, JOYCODE_Y_INDEXED(0)), input_seq(KEYCODE_UP, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(0)), input_seq(KEYCODE_DOWN, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, POSITIONAL_V, "Positional V 2", input_seq(MOUSECODE_Y_INDEXED(1), input_seq::or_code, JOYCODE_Y_INDEXED(1)), input_seq(KEYCODE_R, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(1)), input_seq(KEYCODE_F, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, POSITIONAL_V, "Positional V 3", input_seq(MOUSECODE_Y_INDEXED(2), input_seq::or_code, JOYCODE_Y_INDEXED(2)), input_seq(KEYCODE_I, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(2)), input_seq(KEYCODE_K, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, POSITIONAL_V, "Positional V 4", input_seq(MOUSECODE_Y_INDEXED(3), input_seq::or_code, JOYCODE_Y_INDEXED(3)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(3)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, POSITIONAL_V, "Positional V 5", input_seq(MOUSECODE_Y_INDEXED(4), input_seq::or_code, JOYCODE_Y_INDEXED(4)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(4)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, POSITIONAL_V, "Positional V 6", input_seq(MOUSECODE_Y_INDEXED(5), input_seq::or_code, JOYCODE_Y_INDEXED(5)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(5)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, POSITIONAL_V, "Positional V 7", input_seq(MOUSECODE_Y_INDEXED(6), input_seq::or_code, JOYCODE_Y_INDEXED(6)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(6)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, POSITIONAL_V, "Positional V 8", input_seq(MOUSECODE_Y_INDEXED(7), input_seq::or_code, JOYCODE_Y_INDEXED(7)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(7)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, DIAL, "Dial", input_seq(MOUSECODE_X_INDEXED(0), input_seq::or_code, JOYCODE_X_INDEXED(0)), input_seq(KEYCODE_LEFT, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(0)), input_seq(KEYCODE_RIGHT, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, DIAL, "Dial 2", input_seq(MOUSECODE_X_INDEXED(1), input_seq::or_code, JOYCODE_X_INDEXED(1)), input_seq(KEYCODE_D, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(1)), input_seq(KEYCODE_G, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, DIAL, "Dial 3", input_seq(MOUSECODE_X_INDEXED(2), input_seq::or_code, JOYCODE_X_INDEXED(2)), input_seq(KEYCODE_J, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(2)), input_seq(KEYCODE_L, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, DIAL, "Dial 4", input_seq(MOUSECODE_X_INDEXED(3), input_seq::or_code, JOYCODE_X_INDEXED(3)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(3)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, DIAL, "Dial 5", input_seq(MOUSECODE_X_INDEXED(4), input_seq::or_code, JOYCODE_X_INDEXED(4)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(4)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, DIAL, "Dial 6", input_seq(MOUSECODE_X_INDEXED(5), input_seq::or_code, JOYCODE_X_INDEXED(5)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(5)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, DIAL, "Dial 7", input_seq(MOUSECODE_X_INDEXED(6), input_seq::or_code, JOYCODE_X_INDEXED(6)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(6)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, DIAL, "Dial 8", input_seq(MOUSECODE_X_INDEXED(7), input_seq::or_code, JOYCODE_X_INDEXED(7)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(7)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, DIAL_V, "Dial V", input_seq(MOUSECODE_Y_INDEXED(0), input_seq::or_code, JOYCODE_Y_INDEXED(0)), input_seq(KEYCODE_UP, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(0)), input_seq(KEYCODE_DOWN, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, DIAL_V, "Dial V 2", input_seq(MOUSECODE_Y_INDEXED(1), input_seq::or_code, JOYCODE_Y_INDEXED(1)), input_seq(KEYCODE_R, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(1)), input_seq(KEYCODE_F, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, DIAL_V, "Dial V 3", input_seq(MOUSECODE_Y_INDEXED(2), input_seq::or_code, JOYCODE_Y_INDEXED(2)), input_seq(KEYCODE_I, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(2)), input_seq(KEYCODE_K, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, DIAL_V, "Dial V 4", input_seq(MOUSECODE_Y_INDEXED(3), input_seq::or_code, JOYCODE_Y_INDEXED(3)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(3)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, DIAL_V, "Dial V 5", input_seq(MOUSECODE_Y_INDEXED(4), input_seq::or_code, JOYCODE_Y_INDEXED(4)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(4)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, DIAL_V, "Dial V 6", input_seq(MOUSECODE_Y_INDEXED(5), input_seq::or_code, JOYCODE_Y_INDEXED(5)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(5)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, DIAL_V, "Dial V 7", input_seq(MOUSECODE_Y_INDEXED(6), input_seq::or_code, JOYCODE_Y_INDEXED(6)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(6)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, DIAL_V, "Dial V 8", input_seq(MOUSECODE_Y_INDEXED(7), input_seq::or_code, JOYCODE_Y_INDEXED(7)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(7)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, TRACKBALL_X, "Track X", input_seq(MOUSECODE_X_INDEXED(0), input_seq::or_code, JOYCODE_X_INDEXED(0)), input_seq(KEYCODE_LEFT, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(0)), input_seq(KEYCODE_RIGHT, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, TRACKBALL_X, "Track X 2", input_seq(MOUSECODE_X_INDEXED(1), input_seq::or_code, JOYCODE_X_INDEXED(1)), input_seq(KEYCODE_D, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(1)), input_seq(KEYCODE_G, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, TRACKBALL_X, "Track X 3", input_seq(MOUSECODE_X_INDEXED(2), input_seq::or_code, JOYCODE_X_INDEXED(2)), input_seq(KEYCODE_J, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(2)), input_seq(KEYCODE_L, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, TRACKBALL_X, "Track X 4", input_seq(MOUSECODE_X_INDEXED(3), input_seq::or_code, JOYCODE_X_INDEXED(3)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(3)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, TRACKBALL_X, "Track X 5", input_seq(MOUSECODE_X_INDEXED(4), input_seq::or_code, JOYCODE_X_INDEXED(4)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(4)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, TRACKBALL_X, "Track X 6", input_seq(MOUSECODE_X_INDEXED(5), input_seq::or_code, JOYCODE_X_INDEXED(5)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(5)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, TRACKBALL_X, "Track X 7", input_seq(MOUSECODE_X_INDEXED(6), input_seq::or_code, JOYCODE_X_INDEXED(6)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(6)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, TRACKBALL_X, "Track X 8", input_seq(MOUSECODE_X_INDEXED(7), input_seq::or_code, JOYCODE_X_INDEXED(7)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(7)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, TRACKBALL_Y, "Track Y", input_seq(MOUSECODE_Y_INDEXED(0), input_seq::or_code, JOYCODE_Y_INDEXED(0)), input_seq(KEYCODE_UP, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(0)), input_seq(KEYCODE_DOWN, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, TRACKBALL_Y, "Track Y 2", input_seq(MOUSECODE_Y_INDEXED(1), input_seq::or_code, JOYCODE_Y_INDEXED(1)), input_seq(KEYCODE_R, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(1)), input_seq(KEYCODE_F, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, TRACKBALL_Y, "Track Y 3", input_seq(MOUSECODE_Y_INDEXED(2), input_seq::or_code, JOYCODE_Y_INDEXED(2)), input_seq(KEYCODE_I, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(2)), input_seq(KEYCODE_K, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, TRACKBALL_Y, "Track Y 4", input_seq(MOUSECODE_Y_INDEXED(3), input_seq::or_code, JOYCODE_Y_INDEXED(3)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(3)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, TRACKBALL_Y, "Track Y 5", input_seq(MOUSECODE_Y_INDEXED(4), input_seq::or_code, JOYCODE_Y_INDEXED(4)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(4)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, TRACKBALL_Y, "Track Y 6", input_seq(MOUSECODE_Y_INDEXED(5), input_seq::or_code, JOYCODE_Y_INDEXED(5)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(5)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, TRACKBALL_Y, "Track Y 7", input_seq(MOUSECODE_Y_INDEXED(6), input_seq::or_code, JOYCODE_Y_INDEXED(6)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(6)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, TRACKBALL_Y, "Track Y 8", input_seq(MOUSECODE_Y_INDEXED(7), input_seq::or_code, JOYCODE_Y_INDEXED(7)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(7)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, AD_STICK_X, "AD Stick X", input_seq(JOYCODE_X_INDEXED(0), input_seq::or_code, MOUSECODE_X_INDEXED(0)), input_seq(KEYCODE_LEFT, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(0)), input_seq(KEYCODE_RIGHT, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, AD_STICK_X, "AD Stick X 2", input_seq(JOYCODE_X_INDEXED(1), input_seq::or_code, MOUSECODE_X_INDEXED(1)), input_seq(KEYCODE_D, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(1)), input_seq(KEYCODE_G, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, AD_STICK_X, "AD Stick X 3", input_seq(JOYCODE_X_INDEXED(2), input_seq::or_code, MOUSECODE_X_INDEXED(2)), input_seq(KEYCODE_J, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(2)), input_seq(KEYCODE_L, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, AD_STICK_X, "AD Stick X 4", input_seq(JOYCODE_X_INDEXED(3), input_seq::or_code, MOUSECODE_X_INDEXED(3)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(3)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, AD_STICK_X, "AD Stick X 5", input_seq(JOYCODE_X_INDEXED(4), input_seq::or_code, MOUSECODE_X_INDEXED(4)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(4)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, AD_STICK_X, "AD Stick X 6", input_seq(JOYCODE_X_INDEXED(5), input_seq::or_code, MOUSECODE_X_INDEXED(5)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(5)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, AD_STICK_X, "AD Stick X 7", input_seq(JOYCODE_X_INDEXED(6), input_seq::or_code, MOUSECODE_X_INDEXED(6)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(6)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, AD_STICK_X, "AD Stick X 8", input_seq(JOYCODE_X_INDEXED(7), input_seq::or_code, MOUSECODE_X_INDEXED(7)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(7)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, AD_STICK_Y, "AD Stick Y", input_seq(JOYCODE_Y_INDEXED(0), input_seq::or_code, MOUSECODE_Y_INDEXED(0)), input_seq(KEYCODE_UP, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(0)), input_seq(KEYCODE_DOWN, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, AD_STICK_Y, "AD Stick Y 2", input_seq(JOYCODE_Y_INDEXED(1), input_seq::or_code, MOUSECODE_Y_INDEXED(1)), input_seq(KEYCODE_R, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(1)), input_seq(KEYCODE_F, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, AD_STICK_Y, "AD Stick Y 3", input_seq(JOYCODE_Y_INDEXED(2), input_seq::or_code, MOUSECODE_Y_INDEXED(2)), input_seq(KEYCODE_I, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(2)), input_seq(KEYCODE_K, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, AD_STICK_Y, "AD Stick Y 4", input_seq(JOYCODE_Y_INDEXED(3), input_seq::or_code, MOUSECODE_Y_INDEXED(3)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(3)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, AD_STICK_Y, "AD Stick Y 5", input_seq(JOYCODE_Y_INDEXED(4), input_seq::or_code, MOUSECODE_Y_INDEXED(4)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(4)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, AD_STICK_Y, "AD Stick Y 6", input_seq(JOYCODE_Y_INDEXED(5), input_seq::or_code, MOUSECODE_Y_INDEXED(5)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(5)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, AD_STICK_Y, "AD Stick Y 7", input_seq(JOYCODE_Y_INDEXED(6), input_seq::or_code, MOUSECODE_Y_INDEXED(6)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(6)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, AD_STICK_Y, "AD Stick Y 8", input_seq(JOYCODE_Y_INDEXED(7), input_seq::or_code, MOUSECODE_Y_INDEXED(7)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(7)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, AD_STICK_Z, "AD Stick Z", input_seq(JOYCODE_Z_INDEXED(0)), input_seq(), input_seq() ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, AD_STICK_Z, "AD Stick Z 2", input_seq(JOYCODE_Z_INDEXED(1)), input_seq(), input_seq() ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, AD_STICK_Z, "AD Stick Z 3", input_seq(JOYCODE_Z_INDEXED(2)), input_seq(), input_seq() ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, AD_STICK_Z, "AD Stick Z 4", input_seq(JOYCODE_Z_INDEXED(3)), input_seq(), input_seq() ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, AD_STICK_Z, "AD Stick Z 5", input_seq(JOYCODE_Z_INDEXED(4)), input_seq(), input_seq() ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, AD_STICK_Z, "AD Stick Z 6", input_seq(JOYCODE_Z_INDEXED(5)), input_seq(), input_seq() ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, AD_STICK_Z, "AD Stick Z 7", input_seq(JOYCODE_Z_INDEXED(6)), input_seq(), input_seq() ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, AD_STICK_Z, "AD Stick Z 8", input_seq(JOYCODE_Z_INDEXED(7)), input_seq(), input_seq() ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, LIGHTGUN_X, "Lightgun X", input_seq(GUNCODE_X_INDEXED(0), input_seq::or_code, MOUSECODE_X_INDEXED(0), input_seq::or_code, JOYCODE_X_INDEXED(0)), input_seq(KEYCODE_LEFT, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(0)), input_seq(KEYCODE_RIGHT, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, LIGHTGUN_X, "Lightgun X 2", input_seq(GUNCODE_X_INDEXED(1), input_seq::or_code, MOUSECODE_X_INDEXED(1), input_seq::or_code, JOYCODE_X_INDEXED(1)), input_seq(KEYCODE_D, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(1)), input_seq(KEYCODE_G, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, LIGHTGUN_X, "Lightgun X 3", input_seq(GUNCODE_X_INDEXED(2), input_seq::or_code, MOUSECODE_X_INDEXED(2), input_seq::or_code, JOYCODE_X_INDEXED(2)), input_seq(KEYCODE_J, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(2)), input_seq(KEYCODE_L, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, LIGHTGUN_X, "Lightgun X 4", input_seq(GUNCODE_X_INDEXED(3), input_seq::or_code, MOUSECODE_X_INDEXED(3), input_seq::or_code, JOYCODE_X_INDEXED(3)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(3)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, LIGHTGUN_X, "Lightgun X 5", input_seq(GUNCODE_X_INDEXED(4), input_seq::or_code, MOUSECODE_X_INDEXED(4), input_seq::or_code, JOYCODE_X_INDEXED(4)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(4)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, LIGHTGUN_X, "Lightgun X 6", input_seq(GUNCODE_X_INDEXED(5), input_seq::or_code, MOUSECODE_X_INDEXED(5), input_seq::or_code, JOYCODE_X_INDEXED(5)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(5)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, LIGHTGUN_X, "Lightgun X 7", input_seq(GUNCODE_X_INDEXED(6), input_seq::or_code, MOUSECODE_X_INDEXED(6), input_seq::or_code, JOYCODE_X_INDEXED(6)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(6)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, LIGHTGUN_X, "Lightgun X 8", input_seq(GUNCODE_X_INDEXED(7), input_seq::or_code, MOUSECODE_X_INDEXED(7), input_seq::or_code, JOYCODE_X_INDEXED(7)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(7)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, LIGHTGUN_Y, "Lightgun Y", input_seq(GUNCODE_Y_INDEXED(0), input_seq::or_code, MOUSECODE_Y_INDEXED(0), input_seq::or_code, JOYCODE_Y_INDEXED(0)), input_seq(KEYCODE_UP, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(0)), input_seq(KEYCODE_DOWN, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, LIGHTGUN_Y, "Lightgun Y 2", input_seq(GUNCODE_Y_INDEXED(1), input_seq::or_code, MOUSECODE_Y_INDEXED(1), input_seq::or_code, JOYCODE_Y_INDEXED(1)), input_seq(KEYCODE_R, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(1)), input_seq(KEYCODE_F, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, LIGHTGUN_Y, "Lightgun Y 3", input_seq(GUNCODE_Y_INDEXED(2), input_seq::or_code, MOUSECODE_Y_INDEXED(2), input_seq::or_code, JOYCODE_Y_INDEXED(2)), input_seq(KEYCODE_I, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(2)), input_seq(KEYCODE_K, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, LIGHTGUN_Y, "Lightgun Y 4", input_seq(GUNCODE_Y_INDEXED(3), input_seq::or_code, MOUSECODE_Y_INDEXED(3), input_seq::or_code, JOYCODE_Y_INDEXED(3)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(3)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, LIGHTGUN_Y, "Lightgun Y 5", input_seq(GUNCODE_Y_INDEXED(4), input_seq::or_code, MOUSECODE_Y_INDEXED(4), input_seq::or_code, JOYCODE_Y_INDEXED(4)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(4)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, LIGHTGUN_Y, "Lightgun Y 6", input_seq(GUNCODE_Y_INDEXED(5), input_seq::or_code, MOUSECODE_Y_INDEXED(5), input_seq::or_code, JOYCODE_Y_INDEXED(5)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(5)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, LIGHTGUN_Y, "Lightgun Y 7", input_seq(GUNCODE_Y_INDEXED(6), input_seq::or_code, MOUSECODE_Y_INDEXED(6), input_seq::or_code, JOYCODE_Y_INDEXED(6)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(6)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, LIGHTGUN_Y, "Lightgun Y 8", input_seq(GUNCODE_Y_INDEXED(7), input_seq::or_code, MOUSECODE_Y_INDEXED(7), input_seq::or_code, JOYCODE_Y_INDEXED(7)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(7)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, MOUSE_X, "Mouse X", input_seq(MOUSECODE_X_INDEXED(0)), input_seq(KEYCODE_LEFT, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(0)), input_seq(KEYCODE_RIGHT, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, MOUSE_X, "Mouse X 2", input_seq(MOUSECODE_X_INDEXED(1)), input_seq(KEYCODE_D, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(1)), input_seq(KEYCODE_G, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, MOUSE_X, "Mouse X 3", input_seq(MOUSECODE_X_INDEXED(2)), input_seq(KEYCODE_J, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(2)), input_seq(KEYCODE_L, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, MOUSE_X, "Mouse X 4", input_seq(MOUSECODE_X_INDEXED(3)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(3)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, MOUSE_X, "Mouse X 5", input_seq(MOUSECODE_X_INDEXED(4)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(4)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, MOUSE_X, "Mouse X 6", input_seq(MOUSECODE_X_INDEXED(5)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(5)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, MOUSE_X, "Mouse X 7", input_seq(MOUSECODE_X_INDEXED(6)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(6)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, MOUSE_X, "Mouse X 8", input_seq(MOUSECODE_X_INDEXED(7)), input_seq(JOYCODE_X_LEFT_SWITCH_INDEXED(7)), input_seq(JOYCODE_X_RIGHT_SWITCH_INDEXED(7)) ) + + INPUT_PORT_ANALOG_TYPE( 1, PLAYER1, MOUSE_Y, "Mouse Y", input_seq(MOUSECODE_Y_INDEXED(0)), input_seq(KEYCODE_UP, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(0)), input_seq(KEYCODE_DOWN, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(0)) ) + INPUT_PORT_ANALOG_TYPE( 2, PLAYER2, MOUSE_Y, "Mouse Y 2", input_seq(MOUSECODE_Y_INDEXED(1)), input_seq(KEYCODE_R, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(1)), input_seq(KEYCODE_F, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(1)) ) + INPUT_PORT_ANALOG_TYPE( 3, PLAYER3, MOUSE_Y, "Mouse Y 3", input_seq(MOUSECODE_Y_INDEXED(2)), input_seq(KEYCODE_I, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(2)), input_seq(KEYCODE_K, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(2)) ) + INPUT_PORT_ANALOG_TYPE( 4, PLAYER4, MOUSE_Y, "Mouse Y 4", input_seq(MOUSECODE_Y_INDEXED(3)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(3)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(3)) ) + INPUT_PORT_ANALOG_TYPE( 5, PLAYER5, MOUSE_Y, "Mouse Y 5", input_seq(MOUSECODE_Y_INDEXED(4)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(4)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(4)) ) + INPUT_PORT_ANALOG_TYPE( 6, PLAYER6, MOUSE_Y, "Mouse Y 6", input_seq(MOUSECODE_Y_INDEXED(5)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(5)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(5)) ) + INPUT_PORT_ANALOG_TYPE( 7, PLAYER7, MOUSE_Y, "Mouse Y 7", input_seq(MOUSECODE_Y_INDEXED(6)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(6)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(6)) ) + INPUT_PORT_ANALOG_TYPE( 8, PLAYER8, MOUSE_Y, "Mouse Y 8", input_seq(MOUSECODE_Y_INDEXED(7)), input_seq(JOYCODE_Y_UP_SWITCH_INDEXED(7)), input_seq(JOYCODE_Y_DOWN_SWITCH_INDEXED(7)) ) + + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, KEYPAD, "Keypad", input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, OTHER, KEYBOARD, "Keyboard", input_seq() ) + + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_ON_SCREEN_DISPLAY,"On Screen Display", input_seq(KEYCODE_TILDE) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_DEBUG_BREAK, "Break in Debugger", input_seq(KEYCODE_TILDE) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_CONFIGURE, "Config Menu", input_seq(KEYCODE_TAB) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_PAUSE, "Pause", input_seq(KEYCODE_P) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_RESET_MACHINE, "Reset Game", input_seq(KEYCODE_F3, KEYCODE_LSHIFT) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_SOFT_RESET, "Soft Reset", input_seq(KEYCODE_F3, input_seq::not_code, KEYCODE_LSHIFT) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_SHOW_GFX, "Show Gfx", input_seq(KEYCODE_F4) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_FRAMESKIP_DEC, "Frameskip Dec", input_seq(KEYCODE_F8) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_FRAMESKIP_INC, "Frameskip Inc", input_seq(KEYCODE_F9) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_THROTTLE, "Throttle", input_seq(KEYCODE_F10) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_FAST_FORWARD, "Fast Forward", input_seq(KEYCODE_INSERT) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_SHOW_FPS, "Show FPS", input_seq(KEYCODE_F11, input_seq::not_code, KEYCODE_LCONTROL, input_seq::not_code, KEYCODE_LSHIFT) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_SNAPSHOT, "Save Snapshot", input_seq(KEYCODE_F12, input_seq::not_code, KEYCODE_LSHIFT) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_RECORD_MOVIE, "Record Movie", input_seq(KEYCODE_F12, KEYCODE_LSHIFT) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_TOGGLE_CHEAT, "Toggle Cheat", input_seq(KEYCODE_F6) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_UP, "UI Up", input_seq(KEYCODE_UP, input_seq::or_code, JOYCODE_Y_UP_SWITCH_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_DOWN, "UI Down", input_seq(KEYCODE_DOWN, input_seq::or_code, JOYCODE_Y_DOWN_SWITCH_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_LEFT, "UI Left", input_seq(KEYCODE_LEFT, input_seq::or_code, JOYCODE_X_LEFT_SWITCH_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_RIGHT, "UI Right", input_seq(KEYCODE_RIGHT, input_seq::or_code, JOYCODE_X_RIGHT_SWITCH_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_HOME, "UI Home", input_seq(KEYCODE_HOME) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_END, "UI End", input_seq(KEYCODE_END) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_PAGE_UP, "UI Page Up", input_seq(KEYCODE_PGUP) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_PAGE_DOWN, "UI Page Down", input_seq(KEYCODE_PGDN) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_SELECT, "UI Select", input_seq(KEYCODE_ENTER, input_seq::or_code, JOYCODE_BUTTON1_INDEXED(0)) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_CANCEL, "UI Cancel", input_seq(KEYCODE_ESC) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_DISPLAY_COMMENT, "UI Display Comment", input_seq(KEYCODE_SPACE) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_CLEAR, "UI Clear", input_seq(KEYCODE_DEL) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_ZOOM_IN, "UI Zoom In", input_seq(KEYCODE_EQUALS) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_ZOOM_OUT, "UI Zoom Out", input_seq(KEYCODE_MINUS) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_PREV_GROUP, "UI Previous Group", input_seq(KEYCODE_OPENBRACE) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_NEXT_GROUP, "UI Next Group", input_seq(KEYCODE_CLOSEBRACE) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_ROTATE, "UI Rotate", input_seq(KEYCODE_R) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_SHOW_PROFILER, "Show Profiler", input_seq(KEYCODE_F11, KEYCODE_LSHIFT) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_TOGGLE_UI, "UI Toggle", input_seq(KEYCODE_SCRLOCK, input_seq::not_code, KEYCODE_LSHIFT) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_PASTE, "UI Paste Text", input_seq(KEYCODE_SCRLOCK, KEYCODE_LSHIFT) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_TOGGLE_DEBUG, "Toggle Debugger", input_seq(KEYCODE_F5) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_SAVE_STATE, "Save State", input_seq(KEYCODE_F7, KEYCODE_LSHIFT) ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, UI_LOAD_STATE, "Load State", input_seq(KEYCODE_F7, input_seq::not_code, KEYCODE_LSHIFT) ) + + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_1, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_2, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_3, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_4, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_5, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_6, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_7, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_8, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_9, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_10, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_11, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_12, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_13, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_14, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_15, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, UI, OSD_16, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, INVALID, UNKNOWN, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, INVALID, UNUSED, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, INVALID, SPECIAL, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, INVALID, OTHER, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, INVALID, ADJUSTER, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, INVALID, DIPSWITCH, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, INVALID, CONFIG, NULL, input_seq() ) + INPUT_PORT_DIGITAL_TYPE( 0, INVALID, CATEGORY, NULL, input_seq() ) +} diff --git a/src/emu/input.c b/src/emu/input.c index 6570134b4c3..993c4542547 100644 --- a/src/emu/input.c +++ b/src/emu/input.c @@ -4,8 +4,36 @@ Handle input from the user. - Copyright Nicola Salmoria and the MAME Team. - Visit http://mamedev.org for licensing and usage restrictions. +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. **************************************************************************** @@ -24,125 +52,166 @@ -/*************************************************************************** - CONSTANTS -***************************************************************************/ +//************************************************************************** +// CONSTANTS +//************************************************************************** -/* joystick mapping codes */ -#define JOYSTICK_MAP_NEUTRAL 0x00 -#define JOYSTICK_MAP_LEFT 0x01 -#define JOYSTICK_MAP_RIGHT 0x02 -#define JOYSTICK_MAP_UP 0x04 -#define JOYSTICK_MAP_DOWN 0x08 -#define JOYSTICK_MAP_STICKY 0x0f +// invalid memory value for axis polling +const INT32 INVALID_AXIS_VALUE = 0x7fffffff; -/* the largest number of tracked pressed switches for memory */ -#define MAX_PRESSED_SWITCHES 64 +// constant sequences +const input_seq input_seq::empty_seq; +const input_seq input_seq::default_seq(input_seq::default_code); -/* invalid memory value for axis polling */ -#define INVALID_AXIS_VALUE 0x7fffffff +// additional expanded input codes for sequences +const input_code input_seq::end_code(DEVICE_CLASS_INTERNAL, 0, ITEM_CLASS_INVALID, ITEM_MODIFIER_NONE, ITEM_ID_SEQ_END); +const input_code input_seq::default_code(DEVICE_CLASS_INTERNAL, 0, ITEM_CLASS_INVALID, ITEM_MODIFIER_NONE, ITEM_ID_SEQ_DEFAULT); +const input_code input_seq::not_code(DEVICE_CLASS_INTERNAL, 0, ITEM_CLASS_INVALID, ITEM_MODIFIER_NONE, ITEM_ID_SEQ_NOT); +const input_code input_seq::or_code(DEVICE_CLASS_INTERNAL, 0, ITEM_CLASS_INVALID, ITEM_MODIFIER_NONE, ITEM_ID_SEQ_OR); -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ -/* single device item */ -typedef struct _input_device_item input_device_item; -struct _input_device_item -{ - input_device_class devclass; /* device class of parent item */ - int devindex; /* device index of parent item */ - astring name; /* string name of item */ - astring token; /* tokenized name for non-standard items */ - void * internal; /* internal callback pointer */ - input_item_class itemclass; /* class of the item */ - input_item_id itemid; /* originally specified item id */ - item_get_state_func getstate; /* get state callback */ - INT32 current; /* current raw value */ - INT32 memory; /* "memory" value, to remember where we started during polling */ - INT32 oncelatch; /* latched "once" value, cleared after each read */ - - /* keyboard information */ - INT32 steadykey; /* the live steadykey state */ - INT32 oldkey; /* old live state */ -}; +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** +// ======================> input_device_item -/* a 9x9 joystick map */ -typedef struct _joystick_map joystick_map; -struct _joystick_map +// a single item on an input device +class input_device_item { - UINT8 map[9][9]; /* 9x9 grid */ -}; - +protected: + // construction/destruction + input_device_item(input_device &device, const char *name, void *internal, input_item_id itemid, item_get_state_func getstate, input_item_class itemclass); + virtual ~input_device_item() { } -/* a single input device */ -class input_device -{ public: - input_device(running_machine &machine) - : m_machine(machine) { } + // getters + input_device &device() const { return m_device; } + input_manager &manager() const { return m_device.manager(); } + running_machine &machine() const { return m_device.machine(); } + const char *name() const { return m_name; } + void *internal() const { return m_internal; } + input_item_id itemid() const { return m_itemid; } + input_item_class itemclass() const { return m_itemclass; } + const char *token() const { return m_token; } + INT32 current() const { return m_current; } + INT32 memory() const { return m_memory; } + + // helpers + INT32 update_value() { return m_current = (*m_getstate)(m_device.internal(), m_internal); } + void set_memory(INT32 value) { m_memory = value; } + + // readers + virtual INT32 read_as_switch(input_item_modifier modifier) = 0; + virtual INT32 read_as_relative(input_item_modifier modifier) = 0; + virtual INT32 read_as_absolute(input_item_modifier modifier) = 0; + +protected: + // internal state + input_device & m_device; // reference to our owning device + astring m_name; // string name of item + void * m_internal; // internal callback pointer + input_item_id m_itemid; // originally specified item id + input_item_class m_itemclass; // class of the item + item_get_state_func m_getstate; // get state callback + astring m_token; // tokenized name for non-standard items + + // live state + INT32 m_current; // current raw value + INT32 m_memory; // "memory" value, to remember where we started during polling +}; - running_machine &machine() const { return m_machine; } - astring name; /* string name of device */ - input_device_class devclass; /* class of this device */ - int devindex; /* device index of this device */ - input_device_item * item[ITEM_ID_ABSOLUTE_MAXIMUM]; /* array of pointers to items */ - input_item_id maxitem; /* maximum item index */ - void * internal; /* internal callback pointer */ +// ======================> input_device_switch_item - /* joystick information */ - joystick_map joymap; /* joystick map for this device */ - UINT8 lastmap; /* last joystick map value for this device */ +// derived input item representing a switch input +class input_device_switch_item : public input_device_item +{ +public: + // construction/destruction + input_device_switch_item(input_device &device, const char *name, void *internal, input_item_id itemid, item_get_state_func getstate); + + // readers + virtual INT32 read_as_switch(input_item_modifier modifier); + virtual INT32 read_as_relative(input_item_modifier modifier); + virtual INT32 read_as_absolute(input_item_modifier modifier); + + // steadykey helper + bool steadykey_changed(); + void steadykey_update_to_current() { m_steadykey = m_current; } private: - running_machine & m_machine; /* machine we are attached to */ + // internal state + INT32 m_steadykey; // the live steadykey state + INT32 m_oldkey; // old live state }; -/* a list of devices as an array */ -typedef struct _input_device_list input_device_list; -struct _input_device_list +// ======================> input_device_switch_item + +// derived input item representing a relative axis input +class input_device_relative_item : public input_device_item { - input_device ** list; /* the array */ - int count; /* elements in the array */ - UINT8 enabled; /* is this class enabled? */ - UINT8 multi; /* are multiple instances of this class allowed? */ +public: + // construction/destruction + input_device_relative_item(input_device &device, const char *name, void *internal, input_item_id itemid, item_get_state_func getstate); + + // readers + virtual INT32 read_as_switch(input_item_modifier modifier); + virtual INT32 read_as_relative(input_item_modifier modifier); + virtual INT32 read_as_absolute(input_item_modifier modifier); }; -/* code <-> string matching */ -typedef struct _code_string_table code_string_table; -struct _code_string_table +// ======================> input_device_switch_item + +// derived input item representing an absolute axis input +class input_device_absolute_item : public input_device_item { - UINT32 code; - const char * string; +public: + // construction/destruction + input_device_absolute_item(input_device &device, const char *name, void *internal, input_item_id itemid, item_get_state_func getstate); + + // readers + virtual INT32 read_as_switch(input_item_modifier modifier); + virtual INT32 read_as_relative(input_item_modifier modifier); + virtual INT32 read_as_absolute(input_item_modifier modifier); }; -struct _input_private +// ======================> code_string_table + +// simple class to match codes to strings +struct code_string_table { - /* array of devices for each class */ - input_device_list device_list[DEVICE_CLASS_MAXIMUM]; - input_code code_pressed_memory[MAX_PRESSED_SWITCHES]; + UINT32 operator[](const char *string) const + { + for (const code_string_table *current = this; current->m_code != ~0; current++) + if (strcmp(current->m_string, string) == 0) + return current->m_code; + return ~0; + } + + const char *operator[](UINT32 code) const + { + for (const code_string_table *current = this; current->m_code != ~0; current++) + if (current->m_code == code) + return current->m_string; + return NULL; + } - /* device configuration */ - UINT8 steadykey_enabled; - UINT8 lightgun_reload_button; - const char * joystick_map_default; - INT32 joystick_deadzone; - INT32 joystick_saturation; + UINT32 m_code; + const char * m_string; }; -/*************************************************************************** - TOKEN/STRING TABLES -***************************************************************************/ +//************************************************************************** +// TOKEN/STRING TABLES +//************************************************************************** -/* token strings for device classes */ +// token strings for device classes static const code_string_table devclass_token_table[] = { { DEVICE_CLASS_KEYBOARD, "KEYCODE" }, @@ -152,7 +221,7 @@ static const code_string_table devclass_token_table[] = { ~0, "UNKCODE" } }; -/* friendly strings for device classes */ +// friendly strings for device classes static const code_string_table devclass_string_table[] = { { DEVICE_CLASS_KEYBOARD, "Kbd" }, @@ -162,7 +231,7 @@ static const code_string_table devclass_string_table[] = { ~0, "Unk" } }; -/* token strings for item modifiers */ +// token strings for item modifiers static const code_string_table modifier_token_table[] = { { ITEM_MODIFIER_POS, "POS" }, @@ -174,7 +243,7 @@ static const code_string_table modifier_token_table[] = { ~0, "" } }; -/* friendly strings for item modifiers */ +// friendly strings for item modifiers static const code_string_table modifier_string_table[] = { { ITEM_MODIFIER_POS, "+" }, @@ -186,7 +255,7 @@ static const code_string_table modifier_string_table[] = { ~0, "" } }; -/* token strings for item classes */ +// token strings for item classes static const code_string_table itemclass_token_table[] = { { ITEM_CLASS_SWITCH, "SWITCH" }, @@ -195,10 +264,10 @@ static const code_string_table itemclass_token_table[] = { ~0, "" } }; -/* token strings for standard item ids */ +// token strings for standard item ids static const code_string_table itemid_token_table[] = { - /* standard keyboard codes */ + // standard keyboard codes { ITEM_ID_A, "A" }, { ITEM_ID_B, "B" }, { ITEM_ID_C, "C" }, @@ -309,7 +378,7 @@ static const code_string_table itemid_token_table[] = { ITEM_ID_MENU, "MENU" }, { ITEM_ID_CANCEL, "CANCEL" }, - /* standard mouse/joystick/gun codes */ + // standard mouse/joystick/gun codes { ITEM_ID_XAXIS, "XAXIS" }, { ITEM_ID_YAXIS, "YAXIS" }, { ITEM_ID_ZAXIS, "ZAXIS" }, @@ -337,7 +406,7 @@ static const code_string_table itemid_token_table[] = { ITEM_ID_START, "START" }, { ITEM_ID_SELECT, "SELECT" }, - /* Hats */ + // Hats { ITEM_ID_HAT1UP, "HAT1UP" }, { ITEM_ID_HAT1DOWN, "HAT1DOWN" }, { ITEM_ID_HAT1LEFT, "HAT1LEFT" }, @@ -355,7 +424,7 @@ static const code_string_table itemid_token_table[] = { ITEM_ID_HAT4LEFT, "HAT4LEFT" }, { ITEM_ID_HAT4RIGHT, "HAT4RIGHT" }, - /* Additional IDs */ + // Additional IDs { ITEM_ID_ADD_SWITCH1, "ADDSW1" }, { ITEM_ID_ADD_SWITCH2, "ADDSW2" }, { ITEM_ID_ADD_SWITCH3, "ADDSW3" }, @@ -410,981 +479,1144 @@ static const code_string_table itemid_token_table[] = -/*************************************************************************** - GLOBAL VARIABLES -***************************************************************************/ +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** -/* stashed copy of the most recently initialized machine for the debugging hack */ -static running_machine *stashed_machine; - -/* standard joystick mappings */ +// standard joystick mappings const char joystick_map_8way[] = "7778...4445"; const char joystick_map_4way_sticky[] = "s8.4s8.44s8.4445"; const char joystick_map_4way_diagonal[] = "4444s8888..444458888.444555888.ss5.222555666.222256666.2222s6666.2222s6666"; -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ - -static void input_frame(running_machine &machine); -static input_device_item *input_code_item(running_machine &machine, input_code code); -static INT32 convert_absolute_value(running_machine &machine, input_code code, input_device_item *item); -static INT32 convert_relative_value(input_code code, input_device_item *item); -static INT32 convert_switch_value(running_machine &machine, input_code code, input_device_item *item); -static INT32 apply_deadzone_and_saturation(running_machine &machine, input_code code, INT32 result); -static int joystick_map_parse(const char *mapstring, joystick_map *map); -static void joystick_map_print(const char *header, const char *origstring, const joystick_map *map); -static void input_code_reset_axes(running_machine &machine); -static int input_code_check_axis(running_machine &machine, input_device_item *item, input_code code); +//************************************************************************** +// JOYSTICK MAP +//************************************************************************** +//------------------------------------------------- +// joystick_map - constructor +//------------------------------------------------- +joystick_map::joystick_map() + : m_lastmap(JOYSTICK_MAP_NEUTRAL) +{ + // parse the standard 8-way map as default + parse(joystick_map_8way); +} -/*************************************************************************** - INLINE FUNCTIONS -***************************************************************************/ -/*------------------------------------------------- - input_code_device - given an input_code return - a pointer to the associated device --------------------------------------------------*/ +//------------------------------------------------- +// parse - parse a string into a joystick map +//------------------------------------------------- -INLINE input_device *input_code_device(running_machine &machine, input_code code) +bool joystick_map::parse(const char *mapstring) { - /* if the class is valid... */ - input_device_class devclass = INPUT_CODE_DEVCLASS(code); - if (devclass > DEVICE_CLASS_INVALID && devclass < DEVICE_CLASS_MAXIMUM) + // save a copy of the original string + m_origstring = mapstring; + + // iterate over rows + for (int rownum = 0; rownum < 9; rownum++) { - input_device_list *device_list = machine.input_data->device_list; + // if we're done, copy from another row + if (*mapstring == 0 || *mapstring == '.') + { + bool symmetric = (rownum >= 5 && *mapstring == 0); + const UINT8 *srcrow = &m_map[symmetric ? (8 - rownum) : (rownum - 1)][0]; + + // if this is row 0, we don't have a source row -- invalid + if (rownum == 0) + return false; + + // copy from the srcrow, applying up/down symmetry if in the bottom half + for (int colnum = 0; colnum < 9; colnum++) + { + UINT8 val = srcrow[colnum]; + if (symmetric) + val = (val & (JOYSTICK_MAP_LEFT | JOYSTICK_MAP_RIGHT)) | ((val & JOYSTICK_MAP_UP) << 1) | ((val & JOYSTICK_MAP_DOWN) >> 1); + m_map[rownum][colnum] = val; + } + } - /* ...and the index is valid for that class, return a pointer to the device */ - int devindex = INPUT_CODE_DEVINDEX(code); - if (devindex < device_list[devclass].count) - return device_list[devclass].list[devindex]; + // otherwise, parse this column + else + { + for (int colnum = 0; colnum < 9; colnum++) + { + // if we're at the end of row, copy previous to the middle, then apply left/right symmetry + if (colnum > 0 && (*mapstring == 0 || *mapstring == '.')) + { + bool symmetric = (colnum >= 5); + UINT8 val = m_map[rownum][symmetric ? (8 - colnum) : (colnum - 1)]; + if (symmetric) + val = (val & (JOYSTICK_MAP_UP | JOYSTICK_MAP_DOWN)) | ((val & JOYSTICK_MAP_LEFT) << 1) | ((val & JOYSTICK_MAP_RIGHT) >> 1); + m_map[rownum][colnum] = val; + } + + // otherwise, convert the character to its value + else + { + static const UINT8 charmap[] = + { + JOYSTICK_MAP_UP | JOYSTICK_MAP_LEFT, + JOYSTICK_MAP_UP, + JOYSTICK_MAP_UP | JOYSTICK_MAP_RIGHT, + JOYSTICK_MAP_LEFT, + JOYSTICK_MAP_NEUTRAL, + JOYSTICK_MAP_RIGHT, + JOYSTICK_MAP_DOWN | JOYSTICK_MAP_LEFT, + JOYSTICK_MAP_DOWN, + JOYSTICK_MAP_DOWN | JOYSTICK_MAP_RIGHT, + JOYSTICK_MAP_STICKY + }; + static const char validchars[] = "789456123s"; + const char *ptr = strchr(validchars, *mapstring++); + + // invalid characters exit immediately + if (ptr == NULL) + return false; + m_map[rownum][colnum] = charmap[ptr - validchars]; + } + } + } + + // if we ended with a period, advance to the next row + if (*mapstring == '.') + mapstring++; } + return true; +} - /* otherwise, return NULL */ - return NULL; + +//------------------------------------------------- +// to_string - output the map as a string for +// friendly display +//------------------------------------------------- + +const char *joystick_map::to_string(astring &string) const +{ + string.printf("%s\n", m_origstring.cstr()); + for (int rownum = 0; rownum < 9; rownum++) + { + string.catprintf(" "); + for (int colnum = 0; colnum < 9; colnum++) + switch (m_map[rownum][colnum]) + { + case JOYSTICK_MAP_UP | JOYSTICK_MAP_LEFT: string.catprintf("7"); break; + case JOYSTICK_MAP_UP: string.catprintf("8"); break; + case JOYSTICK_MAP_UP | JOYSTICK_MAP_RIGHT: string.catprintf("9"); break; + case JOYSTICK_MAP_LEFT: string.catprintf("4"); break; + case JOYSTICK_MAP_NEUTRAL: string.catprintf("5"); break; + case JOYSTICK_MAP_RIGHT: string.catprintf("6"); break; + case JOYSTICK_MAP_DOWN | JOYSTICK_MAP_LEFT: string.catprintf("1"); break; + case JOYSTICK_MAP_DOWN: string.catprintf("2"); break; + case JOYSTICK_MAP_DOWN | JOYSTICK_MAP_RIGHT:string.catprintf("3"); break; + case JOYSTICK_MAP_STICKY: string.catprintf("s"); break; + default: string.catprintf("?"); break; + } + + string.catprintf("\n"); + } + return string; } -/*------------------------------------------------- - device_item_to_code - convert a device/item - pair to a standard code --------------------------------------------------*/ +//------------------------------------------------- +// update - update the state of the joystick +// map based on the given X/Y axis values +//------------------------------------------------- -INLINE input_code device_item_to_code(input_device *device, input_item_id itemid) +UINT8 joystick_map::update(INT32 xaxisval, INT32 yaxisval) { - int devindex = device->devindex; + // now map the X and Y axes to a 9x9 grid using the raw values + xaxisval = ((xaxisval - INPUT_ABSOLUTE_MIN) * 9) / (INPUT_ABSOLUTE_MAX - INPUT_ABSOLUTE_MIN + 1); + yaxisval = ((yaxisval - INPUT_ABSOLUTE_MIN) * 9) / (INPUT_ABSOLUTE_MAX - INPUT_ABSOLUTE_MIN + 1); + UINT8 mapval = m_map[yaxisval][xaxisval]; + + // handle stickiness + if (mapval == JOYSTICK_MAP_STICKY) + mapval = m_lastmap; + else + m_lastmap = mapval; + + // return based on whether the appropriate bit is set + return mapval; +} + - assert(devindex < device->machine().input_data->device_list[device->devclass].count); - assert(itemid < ITEM_ID_ABSOLUTE_MAXIMUM); - assert(device->item[itemid] != NULL); - return INPUT_CODE(device->devclass, devindex, device->item[itemid]->itemclass, ITEM_MODIFIER_NONE, itemid); +//************************************************************************** +// INPUT CODE +//************************************************************************** + +//------------------------------------------------- +// input_code - construct an input code from a +// device/item pair +//------------------------------------------------- + +input_code::input_code(input_device &device, input_item_id itemid) +{ + assert(itemid < ITEM_ID_ABSOLUTE_MAXIMUM); + input_device_item *item = device.item(itemid); + assert(item != NULL); + m_internal = ((device.devclass() & 0xf) << 28) | ((device.devindex() & 0xff) << 20) | ((item->itemclass() & 0xf) << 16) | (ITEM_MODIFIER_NONE << 12) | (item->itemid() & 0xfff); } -/*------------------------------------------------- - input_item_standard_class - return the class - of a standard item --------------------------------------------------*/ -INLINE input_item_class input_item_standard_class(input_device_class devclass, input_item_id itemid) +//************************************************************************** +// INPUT SEQ +//************************************************************************** + +//------------------------------------------------- +// operator+= - append a code to the end of an +// input sequence +//------------------------------------------------- + +input_seq &input_seq::operator+=(input_code code) { - /* most everything standard is a switch, apart from the axes */ - if (itemid == ITEM_ID_OTHER_SWITCH || itemid < ITEM_ID_XAXIS || (itemid > ITEM_ID_SLIDER2 && itemid < ITEM_ID_ADD_ABSOLUTE1)) - return ITEM_CLASS_SWITCH; + // if not enough room, return FALSE + int curlength = length(); + if (curlength < ARRAY_LENGTH(m_code) - 1) + { + m_code[curlength++] = code; + m_code[curlength] = end_code; + } + return *this; +} - /* standard mouse axes are relative */ - else if (devclass == DEVICE_CLASS_MOUSE || itemid == ITEM_ID_OTHER_AXIS_RELATIVE || (itemid >= ITEM_ID_ADD_RELATIVE1 && itemid <= ITEM_ID_ADD_RELATIVE16)) - return ITEM_CLASS_RELATIVE; - /* all other standard axes are absolute */ +//------------------------------------------------- +// operator|= - append a code to a sequence; if +// the sequence is non-empty, insert an OR +// before the new code +//------------------------------------------------- + +input_seq &input_seq::operator|=(input_code code) +{ + // overwrite end/default with the new code + if (m_code[0] == end_code || m_code[0] == default_code) + m_code[0] = code; + + // otherwise, append an OR token and then the new code else - return ITEM_CLASS_ABSOLUTE; + { + *this += or_code; + *this += code; + } + return *this; } -/*------------------------------------------------- - input_item_update_value - update the value - of an input item --------------------------------------------------*/ +//------------------------------------------------- +// length - return the length of the sequence +//------------------------------------------------- -INLINE void input_item_update_value(running_machine &machine, input_device_item *item) +int input_seq::length() const { - input_device_list *device_list = machine.input_data->device_list; - - item->current = (*item->getstate)(device_list[item->devclass].list[item->devindex]->internal, item->internal); + // find the end token; error if none found + for (int seqnum = 0; seqnum < ARRAY_LENGTH(m_code); seqnum++) + if (m_code[seqnum] == end_code) + return seqnum; + return ARRAY_LENGTH(m_code); } -/*------------------------------------------------- - code_pressed_memory_reset - reset the array - of memory for pressed switches --------------------------------------------------*/ +//------------------------------------------------- +// is_valid - return true if a given sequence is +// valid +//------------------------------------------------- -INLINE void code_pressed_memory_reset(running_machine &machine) +bool input_seq::is_valid() const { - input_code *code_pressed_memory = machine.input_data->code_pressed_memory; - int memnum; + // "default" can only be of length 1 + if (m_code[0] == default_code) + return (length() == 1); + + // scan the sequence for valid codes + input_item_class lastclass = ITEM_CLASS_INVALID; + input_code lastcode = INPUT_CODE_INVALID; + int positive_code_count = 0; + for (int seqnum = 0; seqnum < ARRAY_LENGTH(m_code); seqnum++) + { + // invalid codes are never permitted + input_code code = m_code[seqnum]; + if (code == INPUT_CODE_INVALID) + return false; - for (memnum = 0; memnum < MAX_PRESSED_SWITCHES; memnum++) - code_pressed_memory[memnum] = INPUT_CODE_INVALID; -} + // if we hit an OR or the end, validate the previous chunk + if (code == or_code || code == end_code) + { + // must be at least one positive code + if (positive_code_count == 0) + return false; + // last code must not have been an internal code + if (lastcode.internal()) + return false; -/*------------------------------------------------- - string_to_code - convert a string to a code - via table lookup --------------------------------------------------*/ + // if this is the end, we're ok + if (code == end_code) + return true; -INLINE UINT32 string_to_code(const code_string_table *table, const char *string) -{ - /* find a matching string */ - for ( ; table->code != ~0; table++) - if (strcmp(string, table->string) == 0) - return table->code; + // reset the state for the next chunk + positive_code_count = 0; + lastclass = ITEM_CLASS_INVALID; + } - /* on failure, return ~0 */ - return ~0; -} + // if we hit a NOT, make sure we don't have a double + else if (code == not_code) + { + if (lastcode == not_code) + return false; + } + // anything else + else + { + // count positive codes + if (lastcode != not_code) + positive_code_count++; -/*------------------------------------------------- - code_to_string - convert a code to a string - via table lookup --------------------------------------------------*/ + // non-switch items can't have a NOT + input_item_class itemclass = code.item_class(); + if (itemclass != ITEM_CLASS_SWITCH && lastcode == not_code) + return FALSE; -INLINE const char *code_to_string(const code_string_table *table, UINT32 code) -{ - /* find a matching code, or */ - for ( ; table->code != ~0; table++) - if (table->code == code) - return table->string; + // absolute/relative items must all be the same class + if ((lastclass == ITEM_CLASS_ABSOLUTE && itemclass != ITEM_CLASS_ABSOLUTE) || + (lastclass == ITEM_CLASS_RELATIVE && itemclass != ITEM_CLASS_RELATIVE)) + return false; + } + + // remember the last code + lastcode = code; + } - /* return the default string */ - return table->string; + // if we got here, we were missing an END token; fail + return false; } +//------------------------------------------------- +// set - directly set up to the first 7 codes +//------------------------------------------------- + +void input_seq::set(input_code code0, input_code code1, input_code code2, input_code code3, input_code code4, input_code code5, input_code code6) +{ + m_code[0] = code0; + m_code[1] = code1; + m_code[2] = code2; + m_code[3] = code3; + m_code[4] = code4; + m_code[5] = code5; + m_code[6] = code6; + for (int codenum = 7; codenum < ARRAY_LENGTH(m_code); codenum++) + m_code[codenum] = end_code; +} -/*************************************************************************** - INITIALIZATION -***************************************************************************/ -/*------------------------------------------------- - input_init - initialize the input lists --------------------------------------------------*/ +//------------------------------------------------- +// backspace - "backspace" over the last entry in +// a sequence +//------------------------------------------------- -void input_init(running_machine &machine) +void input_seq::backspace() { - joystick_map map; - input_private *state; - input_device_list *device_list; - - /* remember this machine */ - stashed_machine = &machine; - - /* allocate private memory */ - machine.input_data = state = auto_alloc_clear(machine, input_private); - device_list = state->device_list; - - /* reset code memory */ - code_pressed_memory_reset(machine); - - /* request a per-frame callback for bookkeeping */ - machine.add_notifier(MACHINE_NOTIFY_FRAME, machine_notify_delegate(FUNC(input_frame), &machine)); - - /* read input enable options */ - device_list[DEVICE_CLASS_KEYBOARD].enabled = TRUE; - device_list[DEVICE_CLASS_MOUSE].enabled = machine.options().mouse(); - device_list[DEVICE_CLASS_LIGHTGUN].enabled = machine.options().lightgun(); - device_list[DEVICE_CLASS_JOYSTICK].enabled = machine.options().joystick(); - - /* read input device multi options */ - device_list[DEVICE_CLASS_KEYBOARD].multi = machine.options().multi_keyboard(); - device_list[DEVICE_CLASS_MOUSE].multi = machine.options().multi_mouse(); - device_list[DEVICE_CLASS_LIGHTGUN].multi = TRUE; - device_list[DEVICE_CLASS_JOYSTICK].multi = TRUE; - - /* read other input options */ - state->steadykey_enabled = machine.options().steadykey(); - state->lightgun_reload_button = machine.options().offscreen_reload(); - state->joystick_deadzone = (INT32)(machine.options().joystick_deadzone() * INPUT_ABSOLUTE_MAX); - state->joystick_saturation = (INT32)(machine.options().joystick_saturation() * INPUT_ABSOLUTE_MAX); - - /* get the default joystick map */ - state->joystick_map_default = machine.options().joystick_map(); - if (state->joystick_map_default[0] == 0 || strcmp(state->joystick_map_default, "auto") == 0) - state->joystick_map_default = joystick_map_8way; - if (!joystick_map_parse(state->joystick_map_default, &map)) - mame_printf_error("Invalid joystick map: %s\n", state->joystick_map_default); - else if (state->joystick_map_default != joystick_map_8way) - joystick_map_print("Input: Default joystick map", state->joystick_map_default, &map); + // if we have at least one entry, remove it + int curlength = length(); + if (curlength > 0) + m_code[curlength - 1] = end_code; } -/*------------------------------------------------- - input_device_class_enable - enable or disable - a device class --------------------------------------------------*/ +//------------------------------------------------- +// replace - replace all instances of oldcode +// with newcode in a sequence +//------------------------------------------------- -void input_device_class_enable(running_machine &machine, input_device_class devclass, UINT8 enable) +void input_seq::replace(input_code oldcode, input_code newcode) { - input_device_list *device_list = machine.input_data->device_list; - - assert(devclass > DEVICE_CLASS_INVALID && devclass < DEVICE_CLASS_MAXIMUM); - device_list[devclass].enabled = enable; + for (int codenum = 0; codenum < ARRAY_LENGTH(m_code); codenum++) + if (m_code[codenum] == oldcode) + m_code[codenum] = newcode; } -/*------------------------------------------------- - input_enable_device_class - is a device class - enabled? --------------------------------------------------*/ -UINT8 input_device_class_enabled(running_machine &machine, input_device_class devclass) +//************************************************************************** +// INPUT DEVICE +//************************************************************************** + +//------------------------------------------------- +// input_device - constructor +//------------------------------------------------- + +input_device::input_device(input_class &_class, int devindex, const char *name, void *internal) + : m_class(_class), + m_name(name), + m_devindex(devindex), + m_maxitem(input_item_id(0)), + m_internal(internal), + m_joystick_deadzone((INT32)(_class.manager().machine().options().joystick_deadzone() * INPUT_ABSOLUTE_MAX)), + m_joystick_saturation((INT32)(_class.manager().machine().options().joystick_saturation() * INPUT_ABSOLUTE_MAX)), + m_steadykey_enabled(_class.manager().machine().options().steadykey()), + m_lightgun_reload_button(_class.manager().machine().options().offscreen_reload()) { - input_device_list *device_list = machine.input_data->device_list; + // reset the items + memset(m_item, 0, sizeof(m_item)); - assert(devclass > DEVICE_CLASS_INVALID && devclass < DEVICE_CLASS_MAXIMUM); - return device_list[devclass].enabled; + // additional work for joysticks + if (devclass() == DEVICE_CLASS_JOYSTICK) + { + // get the default joystick map + const char *mapstring = machine().options().joystick_map(); + if (mapstring[0] == 0 || strcmp(mapstring, "auto") == 0) + mapstring = joystick_map_8way; + + // parse it + astring tempstr; + if (!m_joymap.parse(mapstring)) + { + mame_printf_error("Invalid joystick map: %s\n", mapstring); + m_joymap.parse(joystick_map_8way); + } + else if (mapstring != joystick_map_8way) + mame_printf_verbose("Input: Default joystick map = %s", m_joymap.to_string(tempstr)); + } } -/*------------------------------------------------- - input_device_set_joystick_map - set the - joystick map for a device --------------------------------------------------*/ +//------------------------------------------------- +// add_item - add a new item to an input device +//------------------------------------------------- -int input_device_set_joystick_map(running_machine &machine, int devindex, const char *mapstring) +input_item_id input_device::add_item(const char *name, input_item_id itemid, item_get_state_func getstate, void *internal) { - input_device_list *device_list = machine.input_data->device_list; - int startindex = devindex; - int stopindex = devindex; - joystick_map map; - int joynum; + assert_always(machine().phase() == MACHINE_PHASE_INIT, "Can only call input_device::add_item at init time!"); + assert(name != NULL); + assert(itemid > ITEM_ID_INVALID && itemid < ITEM_ID_MAXIMUM); + assert(getstate != NULL); - /* parse the map */ - if (!joystick_map_parse(mapstring, &map)) - return FALSE; + // if we have a generic ID, pick a new internal one + input_item_id originalid = itemid; + if (itemid >= ITEM_ID_OTHER_SWITCH && itemid <= ITEM_ID_OTHER_AXIS_RELATIVE) + for (itemid = (input_item_id)(ITEM_ID_MAXIMUM + 1); itemid <= ITEM_ID_ABSOLUTE_MAXIMUM; itemid++) + if (m_item[itemid] == NULL) + break; + assert(itemid <= ITEM_ID_ABSOLUTE_MAXIMUM); - /* devindex -1 means set the same for all */ - if (devindex == -1) + // make sure we don't have any overlap + assert(m_item[itemid] == NULL); + + // determine the class and create the appropriate item class + input_device_item *item; + switch (m_class.standard_item_class(originalid)) { - startindex = 0; - stopindex = device_list[DEVICE_CLASS_JOYSTICK].count - 1; - joystick_map_print("Input: Changing default joystick map", mapstring, &map); - } + case ITEM_CLASS_SWITCH: + item = auto_alloc(machine(), input_device_switch_item(*this, name, internal, itemid, getstate)); + break; - /* ignore if out of range */ - else if (devindex >= device_list[DEVICE_CLASS_JOYSTICK].count) - return TRUE; + case ITEM_CLASS_RELATIVE: + item = auto_alloc(machine(), input_device_relative_item(*this, name, internal, itemid, getstate)); + break; - /* iterate over joysticks and set the map */ - for (joynum = startindex; joynum <= stopindex; joynum++) - device_list[DEVICE_CLASS_JOYSTICK].list[joynum]->joymap = map; - return TRUE; + case ITEM_CLASS_ABSOLUTE: + item = auto_alloc(machine(), input_device_absolute_item(*this, name, internal, itemid, getstate)); + break; + + default: + assert(false); + } + + // assign the new slot and update the maximum + m_item[itemid] = item; + m_maxitem = MAX(m_maxitem, itemid); + return itemid; } -/*------------------------------------------------- - input_frame - per-frame callback for various - bookkeeping --------------------------------------------------*/ +//------------------------------------------------- +// apply_deadzone_and_saturation - apply global +// deadzone and saturation parameters to an +// absolute value +//------------------------------------------------- -static void input_frame(running_machine &machine) +INT32 input_device::apply_deadzone_and_saturation(INT32 result) const { - input_private *state = machine.input_data; + // ignore for non-joysticks + if (devclass() != DEVICE_CLASS_JOYSTICK) + return result; - /* if steadykey is enabled, do processing here */ - if (state->steadykey_enabled) + // properties are symmetric + bool negative = false; + if (result < 0) { - input_device_list *device_list = state->device_list; - int devnum; + negative = true; + result = -result; + } - /* iterate over keyboards */ - for (devnum = 0; devnum < device_list[DEVICE_CLASS_KEYBOARD].count; devnum++) - { - input_device *device = device_list[DEVICE_CLASS_KEYBOARD].list[devnum]; - input_item_id itemid; - int changed = FALSE; + // if in the deadzone, return 0 + if (result < m_joystick_deadzone) + result = 0; - /* update the state of all the keys and see if any changed state */ - for (itemid = ITEM_ID_FIRST_VALID; itemid <= device->maxitem; itemid++) - { - input_device_item *item = device->item[itemid]; - if (item != NULL && item->itemclass == ITEM_CLASS_SWITCH) - { - input_item_update_value(machine, item); - if ((item->current ^ item->oldkey) & 1) - { - changed = TRUE; + // if saturated, return the max + else if (result > m_joystick_saturation) + result = INPUT_ABSOLUTE_MAX; - /* if the keypress was missed, turn it on for one frame */ - if (((item->current | item->steadykey) & 1) == 0) - item->steadykey = 1; - } - } - } + // otherwise, scale + else + result = (INT64)(result - m_joystick_deadzone) * (INT64)INPUT_ABSOLUTE_MAX / (INT64)(m_joystick_saturation - m_joystick_deadzone); - /* if the keyboard state is stable, copy it over */ - for (itemid = ITEM_ID_FIRST_VALID; itemid <= device->maxitem; itemid++) - { - input_device_item *item = device->item[itemid]; - if (item != NULL && item->itemclass == ITEM_CLASS_SWITCH) - { - if (!changed) - item->steadykey = item->current; - item->oldkey = item->current; - } - } - } + // re-apply sign and return + return negative ? -result : result; +} + + +//------------------------------------------------- +// apply_steadykey - apply steadykey option if +// enabled +//------------------------------------------------- + +void input_device::apply_steadykey() const +{ + // ignore if not enabled + if (!m_steadykey_enabled) + return; + + // update the state of all the keys and see if any changed state + bool anything_changed = false; + for (input_item_id itemid = ITEM_ID_FIRST_VALID; itemid <= m_maxitem; itemid++) + { + input_device_item *item = m_item[itemid]; + if (item != NULL && item->itemclass() == ITEM_CLASS_SWITCH) + if (downcast<input_device_switch_item *>(item)->steadykey_changed()) + anything_changed = true; } + + // if the keyboard state is stable, flush the current state + if (!anything_changed) + for (input_item_id itemid = ITEM_ID_FIRST_VALID; itemid <= m_maxitem; itemid++) + { + input_device_item *item = m_item[itemid]; + if (item != NULL && item->itemclass() == ITEM_CLASS_SWITCH) + downcast<input_device_switch_item *>(item)->steadykey_update_to_current(); + } } -/*************************************************************************** - OSD CONFIGURATION AND ACCESS -***************************************************************************/ +//************************************************************************** +// INPUT CLASS +//************************************************************************** + +//------------------------------------------------- +// input_class - constructor +//------------------------------------------------- + +input_class::input_class(input_manager &manager, input_device_class devclass, bool enabled, bool multi) + : m_manager(manager), + m_devclass(devclass), + m_maxindex(0), + m_enabled(enabled), + m_multi(multi) +{ + memset(m_device, 0, sizeof(m_device)); + + // request a per-frame callback for the keyboard class + if (devclass == DEVICE_CLASS_KEYBOARD) + machine().add_notifier(MACHINE_NOTIFY_FRAME, machine_notify_delegate(FUNC(input_class::frame_callback), this)); +} -/*------------------------------------------------- - input_device_add - add a new input device --------------------------------------------------*/ -input_device *input_device_add(running_machine &machine, input_device_class devclass, const char *name, void *internal) +//------------------------------------------------- +// add_device - add a new input device +//------------------------------------------------- + +input_device *input_class::add_device(const char *name, void *internal) { - input_private *state = machine.input_data; - input_device_list *devlist = &state->device_list[devclass]; + // find the next empty index + int devindex; + for (devindex = 0; devindex < DEVICE_INDEX_MAXIMUM; devindex++) + if (m_device[devindex] == NULL) + break; + + // call through + return add_device(devindex, name, internal); +} - assert_always(machine.phase() == MACHINE_PHASE_INIT, "Can only call input_device_add at init time!"); +input_device *input_class::add_device(int devindex, const char *name, void *internal) +{ + assert_always(machine().phase() == MACHINE_PHASE_INIT, "Can only call input_class::add_device at init time!"); assert(name != NULL); - assert(devclass != DEVICE_CLASS_INVALID && devclass < DEVICE_CLASS_MAXIMUM); - - /* allocate a new device */ - input_device *device = auto_alloc_clear(machine, input_device(machine)); - input_device **newlist = auto_alloc_array(machine, input_device *, devlist->count + 1); - for (int devnum = 0; devnum < devlist->count; devnum++) - newlist[devnum] = devlist->list[devnum]; - auto_free(machine, devlist->list); - devlist->list = newlist; - devlist->list[devlist->count++] = device; - - /* fill in the data */ - device->name.cpy(name); - device->devclass = devclass; - device->devindex = devlist->count - 1; - device->internal = internal; - - /* default to 8-way map for joysticks */ - if (devclass == DEVICE_CLASS_JOYSTICK) - { - joystick_map_parse(state->joystick_map_default, &device->joymap); - device->lastmap = JOYSTICK_MAP_NEUTRAL; - } + assert(devindex >= 0 && devindex < DEVICE_INDEX_MAXIMUM); + assert(m_device[devindex] == NULL); - mame_printf_verbose("Input: Adding %s #%d: %s\n", code_to_string(devclass_string_table, devclass), devlist->count, device->name.cstr()); + // allocate a new device + input_device *device = m_device[devindex] = auto_alloc(machine(), input_device(*this, devindex, name, internal)); + + // update the maximum index found + m_maxindex = MAX(m_maxindex, devindex); + + mame_printf_verbose("Input: Adding %s #%d: %s\n", (*devclass_string_table)[m_devclass], devindex, name); return device; } -/*------------------------------------------------- - input_device_item_add - add a new item to an - input device --------------------------------------------------*/ +//------------------------------------------------- +// standard_item_class - return the class of a +// standard item +//------------------------------------------------- -void input_device_item_add(input_device *device, const char *name, void *internal, input_item_id itemid, item_get_state_func getstate) +input_item_class input_class::standard_item_class(input_item_id itemid) { - input_device_item *item; - input_item_id itemid_std = itemid; + // most everything standard is a switch, apart from the axes + if (itemid == ITEM_ID_OTHER_SWITCH || itemid < ITEM_ID_XAXIS || (itemid > ITEM_ID_SLIDER2 && itemid < ITEM_ID_ADD_ABSOLUTE1)) + return ITEM_CLASS_SWITCH; - assert_always(device->machine().phase() == MACHINE_PHASE_INIT, "Can only call input_device_item_add at init time!"); - assert(name != NULL); - assert(itemid > ITEM_ID_INVALID && itemid < ITEM_ID_MAXIMUM); - assert(getstate != NULL); + // standard mouse axes are relative + else if (m_devclass == DEVICE_CLASS_MOUSE || itemid == ITEM_ID_OTHER_AXIS_RELATIVE || (itemid >= ITEM_ID_ADD_RELATIVE1 && itemid <= ITEM_ID_ADD_RELATIVE16)) + return ITEM_CLASS_RELATIVE; - /* if we have a generic ID, pick a new internal one */ - if (itemid >= ITEM_ID_OTHER_SWITCH && itemid <= ITEM_ID_OTHER_AXIS_RELATIVE) - for (itemid = (input_item_id)(ITEM_ID_MAXIMUM + 1); itemid <= ITEM_ID_ABSOLUTE_MAXIMUM; itemid++) - if (device->item[itemid] == NULL) - break; - assert(itemid <= ITEM_ID_ABSOLUTE_MAXIMUM); + // all other standard axes are absolute + else + return ITEM_CLASS_ABSOLUTE; +} - /* make sure we don't have any overlap */ - assert(device->item[itemid] == NULL); - - /* allocate a new item and copy data into it */ - item = auto_alloc_clear(device->machine(), input_device_item); - device->item[itemid] = item; - device->maxitem = MAX(device->maxitem, itemid); - - /* copy in the data passed in from the item list */ - item->devclass = device->devclass; - item->devindex = device->devindex; - item->name.cpy(name); - item->internal = internal; - item->itemclass = input_item_standard_class(device->devclass, itemid_std); - item->itemid = itemid; - item->getstate = getstate; - - /* if we're custom, create a tokenized name */ - if (itemid > ITEM_ID_MAXIMUM) - { - /* copy the item name, removing spaces/underscores and making all caps */ - item->token.cpy(name).toupper().delchr(' ').delchr('_'); - } - /* otherwise, make sure we have a valid standard token */ - else - { - assert(code_to_string(itemid_token_table, itemid) != NULL); - } +//------------------------------------------------- +// frame_callback - per-frame callback for various +// bookkeeping +//------------------------------------------------- + +void input_class::frame_callback() +{ + // iterate over all devices in our class + for (int devnum = 0; devnum <= m_maxindex; devnum++) + if (m_device[devnum] != NULL) + m_device[devnum]->apply_steadykey(); } -/*************************************************************************** - STATE QUERIES -***************************************************************************/ +//************************************************************************** +// INPUT MANAGER +//************************************************************************** -/*------------------------------------------------- - input_code_value - return the value of a - given input code --------------------------------------------------*/ +//------------------------------------------------- +// input_manager - constructor +//------------------------------------------------- -INT32 input_code_value(running_machine &machine, input_code code) +input_manager::input_manager(running_machine &machine) + : m_machine(machine), + m_keyboard_class(*this, DEVICE_CLASS_KEYBOARD, true, machine.options().multi_keyboard()), + m_mouse_class(*this, DEVICE_CLASS_MOUSE, machine.options().mouse(), machine.options().multi_mouse()), + m_joystick_class(*this, DEVICE_CLASS_JOYSTICK, machine.options().joystick(), true), + m_lightgun_class(*this, DEVICE_CLASS_LIGHTGUN, machine.options().lightgun(), true), + m_poll_seq_last_ticks(0), + m_poll_seq_class(ITEM_CLASS_SWITCH) { - input_device_list *device_list = machine.input_data->device_list; - input_device_class devclass = INPUT_CODE_DEVCLASS(code); - int startindex = INPUT_CODE_DEVINDEX(code); - int stopindex = startindex; - INT32 result = 0; - int curindex; + // reset code memory + reset_memory(); + + // create pointers for the classes + memset(m_class, 0, sizeof(m_class)); + m_class[DEVICE_CLASS_KEYBOARD] = &m_keyboard_class; + m_class[DEVICE_CLASS_MOUSE] = &m_mouse_class; + m_class[DEVICE_CLASS_JOYSTICK] = &m_joystick_class; + m_class[DEVICE_CLASS_LIGHTGUN] = &m_lightgun_class; +} - g_profiler.start(PROFILER_INPUT); - /* return 0 for any disabled or invalid device classes */ - if (devclass <= DEVICE_CLASS_INVALID || devclass >= DEVICE_CLASS_MAXIMUM || !device_list[devclass].enabled) - goto exit; - if (startindex >= device_list[devclass].count) - goto exit; +//------------------------------------------------- +// code_value - return the value of a given +// input code +//------------------------------------------------- - /* if this is not a multi device, only return data for item 0 */ - if (!device_list[devclass].multi) - { - if (startindex != 0) - goto exit; - - /* otherwise, iterate over all */ - startindex = 0; - stopindex = device_list[devclass].count - 1; - } +INT32 input_manager::code_value(input_code code) +{ + g_profiler.start(PROFILER_INPUT); + INT32 result = 0; - /* iterate over all indices */ - for (curindex = startindex; curindex <= stopindex; curindex++) + // dummy loop to allow clean early exits + do { - /* lookup the item for the appropriate index */ - input_device_item *item = input_code_item(machine, INPUT_CODE_SET_DEVINDEX(code, curindex)); - if (item == NULL) - continue; - - /* update the value of this item */ - input_item_update_value(machine, item); + // return 0 for any invalid devices + input_device *device = device_from_code(code); + if (device == NULL) + break; + + // also return 0 if the device class is disabled + input_class &devclass = *m_class[code.device_class()]; + if (!devclass.enabled()) + break; - /* process items according to their native type */ - switch (item->itemclass) + // if this is not a multi device, only return data for item 0 and iterate over all + int startindex = code.device_index(); + int stopindex = startindex; + if (!devclass.multi()) { - case ITEM_CLASS_ABSOLUTE: - result = convert_absolute_value(machine, code, item); + if (startindex != 0) break; + stopindex = devclass.maxindex(); + } - case ITEM_CLASS_RELATIVE: - result += convert_relative_value(code, item); - break; + // iterate over all device indices + input_item_class targetclass = code.item_class(); + for (int curindex = startindex; curindex <= stopindex; curindex++) + { + // lookup the item for the appropriate index + code.set_device_index(curindex); + input_device_item *item = item_from_code(code); + if (item == NULL) + continue; + + // process items according to their native type + switch (targetclass) + { + case ITEM_CLASS_ABSOLUTE: + if (result == 0) + result = item->read_as_absolute(code.item_modifier()); + break; - case ITEM_CLASS_SWITCH: - result |= convert_switch_value(machine, code, item); - break; + case ITEM_CLASS_RELATIVE: + result += item->read_as_relative(code.item_modifier()); + break; - default: - break; + case ITEM_CLASS_SWITCH: + result |= item->read_as_switch(code.item_modifier()); + break; + + default: + break; + } } - } + } while (0); -exit: + // stop the profiler before exiting g_profiler.stop(); return result; } -/*------------------------------------------------- - input_code_pressed - return non-zero if a - given input code has been pressed --------------------------------------------------*/ - -int input_code_pressed(running_machine &machine, input_code code) -{ - return (input_code_value(machine, code) != 0); -} - - -/*------------------------------------------------- - input_code_pressed_once - return non-zero if a - given input code has transitioned from off to - on since the last call --------------------------------------------------*/ +//------------------------------------------------- +// code_pressed_once - return non-zero if a given +// input code has transitioned from off to on +// since the last call +//------------------------------------------------- -int input_code_pressed_once(running_machine &machine, input_code code) +bool input_manager::code_pressed_once(input_code code) { - input_code *code_pressed_memory = machine.input_data->code_pressed_memory; - int curvalue = input_code_pressed(machine, code); - int memnum, empty = -1; - - /* look for the code in the memory */ - for (memnum = 0; memnum < MAX_PRESSED_SWITCHES; memnum++) + // look for the code in the memory + bool curvalue = code_pressed(code); + int empty = -1; + for (int memnum = 0; memnum < ARRAY_LENGTH(m_switch_memory); memnum++) { - /* were we previous pressed on the last time through here? */ - if (code_pressed_memory[memnum] == code) + // were we previous pressed on the last time through here? + if (m_switch_memory[memnum] == code) { - /* if no longer pressed, clear entry */ - if (curvalue == 0) - code_pressed_memory[memnum] = INPUT_CODE_INVALID; + // if no longer pressed, clear entry + if (curvalue == false) + m_switch_memory[memnum] = INPUT_CODE_INVALID; - /* always return 0 */ - return 0; + // always return false + return false; } - /* remember the first empty entry */ - if (empty == -1 && code_pressed_memory[memnum] == INPUT_CODE_INVALID) + // remember the first empty entry + if (empty == -1 && m_switch_memory[memnum] == INPUT_CODE_INVALID) empty = memnum; } - /* if we get here, we were not previously pressed; if still not pressed, return 0 */ - if (curvalue == 0) - return 0; + // if we get here, we were not previously pressed; if still not pressed, return 0 + if (curvalue == false) + return false; - /* otherwise, add ourself to the memory and return 1 */ + // otherwise, add ourself to the memory and return 1 assert(empty != -1); if (empty != -1) - code_pressed_memory[empty] = code; - return 1; + m_switch_memory[empty] = code; + return true; } -/*------------------------------------------------- - input_code_from_input_item_id - translates - an input_item_id to an input_code --------------------------------------------------*/ +//------------------------------------------------- +// reset_polling - reset memories in preparation +// for polling +//------------------------------------------------- -input_code input_code_from_input_item_id(running_machine &machine, input_item_id itemid) +void input_manager::reset_polling() { - input_device_list *device_list = machine.input_data->device_list; - input_device_class devclass; - - /* iterate over device classes and devices */ - for (devclass = DEVICE_CLASS_FIRST_VALID; devclass < DEVICE_CLASS_MAXIMUM; devclass++) - { - input_device_list *devlist = &device_list[devclass]; - int devnum; + // reset switch memory + reset_memory(); - /* iterate over devices within each class */ - for (devnum = 0; devnum < devlist->count; devnum++) + // iterate over device classes and devices + for (input_device_class devclass = DEVICE_CLASS_FIRST_VALID; devclass <= DEVICE_CLASS_LAST_VALID; devclass++) + for (int devnum = 0; devnum <= m_class[devclass]->maxindex(); devnum++) { - input_device *device = devlist->list[devnum]; - if (device->item[itemid] != NULL) - return device_item_to_code(device, itemid); + // fetch the device; ignore if NULL + input_device *device = m_class[devclass]->device(devnum); + if (device == NULL) + continue; + + // iterate over items within each device + for (input_item_id itemid = ITEM_ID_FIRST_VALID; itemid <= device->maxitem(); itemid++) + { + // for any non-switch items, set memory equal to the current value + input_device_item *item = device->item(itemid); + if (item != NULL && item->itemclass() != ITEM_CLASS_SWITCH) + item->set_memory(code_value(input_code(*device, itemid))); + } } - } - return 0; } -/*------------------------------------------------- - input_code_poll_switches - poll for any input --------------------------------------------------*/ +//------------------------------------------------- +// poll_switches - poll for any input +//------------------------------------------------- -input_code input_code_poll_switches(running_machine &machine, int reset) +input_code input_manager::poll_switches() { - input_device_list *device_list = machine.input_data->device_list; - input_device_class devclass; - - /* if resetting memory, do it now */ - if (reset) - { - code_pressed_memory_reset(machine); - input_code_reset_axes(machine); - } - - /* iterate over device classes and devices */ - for (devclass = DEVICE_CLASS_FIRST_VALID; devclass < DEVICE_CLASS_MAXIMUM; devclass++) - { - input_device_list *devlist = &device_list[devclass]; - int devnum; - - /* iterate over devices within each class */ - for (devnum = 0; devnum < devlist->count; devnum++) + // iterate over device classes and devices + for (input_device_class devclass = DEVICE_CLASS_FIRST_VALID; devclass <= DEVICE_CLASS_LAST_VALID; devclass++) + for (int devnum = 0; devnum <= m_class[devclass]->maxindex(); devnum++) { - input_device *device = devlist->list[devnum]; - input_item_id itemid; + // fetch the device; ignore if NULL + input_device *device = m_class[devclass]->device(devnum); + if (device == NULL) + continue; - /* iterate over items within each device */ - for (itemid = ITEM_ID_FIRST_VALID; itemid <= device->maxitem; itemid++) + // iterate over items within each device + for (input_item_id itemid = ITEM_ID_FIRST_VALID; itemid <= device->maxitem(); itemid++) { - input_device_item *item = device->item[itemid]; + input_device_item *item = device->item(itemid); if (item != NULL) { - input_code code = device_item_to_code(device, itemid); + input_code code(*device, itemid); - /* if the item is natively a switch, poll it */ - if (item->itemclass == ITEM_CLASS_SWITCH) + // if the item is natively a switch, poll it + if (item->itemclass() == ITEM_CLASS_SWITCH) { - if (input_code_pressed_once(machine, code)) + if (code_pressed_once(code)) return code; else continue; } - /* skip if there is not enough axis movement */ - if (!input_code_check_axis(machine, item, code)) + // skip if there is not enough axis movement + if (!code_check_axis(*item, code)) continue; - /* otherwise, poll axes digitally */ - code = INPUT_CODE_SET_ITEMCLASS(code, ITEM_CLASS_SWITCH); + // otherwise, poll axes digitally + code.set_item_class(ITEM_CLASS_SWITCH); - /* if this is a joystick X axis, check with left/right modifiers */ - if (devclass == DEVICE_CLASS_JOYSTICK && INPUT_CODE_ITEMID(code) == ITEM_ID_XAXIS) + // if this is a joystick X axis, check with left/right modifiers + if (devclass == DEVICE_CLASS_JOYSTICK && code.item_id() == ITEM_ID_XAXIS) { - code = INPUT_CODE_SET_MODIFIER(code, ITEM_MODIFIER_LEFT); - if (input_code_pressed_once(machine, code)) + code.set_item_modifier(ITEM_MODIFIER_LEFT); + if (code_pressed_once(code)) return code; - code = INPUT_CODE_SET_MODIFIER(code, ITEM_MODIFIER_RIGHT); - if (input_code_pressed_once(machine, code)) + code.set_item_modifier(ITEM_MODIFIER_RIGHT); + if (code_pressed_once(code)) return code; } - /* if this is a joystick Y axis, check with up/down modifiers */ - else if (devclass == DEVICE_CLASS_JOYSTICK && INPUT_CODE_ITEMID(code) == ITEM_ID_YAXIS) + // if this is a joystick Y axis, check with up/down modifiers + else if (devclass == DEVICE_CLASS_JOYSTICK && code.item_id() == ITEM_ID_YAXIS) { - code = INPUT_CODE_SET_MODIFIER(code, ITEM_MODIFIER_UP); - if (input_code_pressed_once(machine, code)) + code.set_item_modifier(ITEM_MODIFIER_UP); + if (code_pressed_once(code)) return code; - code = INPUT_CODE_SET_MODIFIER(code, ITEM_MODIFIER_DOWN); - if (input_code_pressed_once(machine, code)) + code.set_item_modifier(ITEM_MODIFIER_DOWN); + if (code_pressed_once(code)) return code; } - /* any other axis, check with pos/neg modifiers */ + // any other axis, check with pos/neg modifiers else { - code = INPUT_CODE_SET_MODIFIER(code, ITEM_MODIFIER_POS); - if (input_code_pressed_once(machine, code)) + code.set_item_modifier(ITEM_MODIFIER_POS); + if (code_pressed_once(code)) return code; - code = INPUT_CODE_SET_MODIFIER(code, ITEM_MODIFIER_NEG); - if (input_code_pressed_once(machine, code)) + code.set_item_modifier(ITEM_MODIFIER_NEG); + if (code_pressed_once(code)) return code; } } } } - } - /* if nothing, return an invalid code */ + // if nothing, return an invalid code return INPUT_CODE_INVALID; } -/*------------------------------------------------- - input_code_poll_keyboard_switches - poll for - any keyboard-specific input --------------------------------------------------*/ +//------------------------------------------------- +// poll_keyboard_switches - poll for any +// keyboard-specific input +//------------------------------------------------- -input_code input_code_poll_keyboard_switches(running_machine &machine, int reset) +input_code input_manager::poll_keyboard_switches() { - input_device_list *devlist = &machine.input_data->device_list[DEVICE_CLASS_KEYBOARD]; - int devnum; - - /* if resetting memory, do it now */ - if (reset) - code_pressed_memory_reset(machine); - - /* iterate over devices within each class */ - for (devnum = 0; devnum < devlist->count; devnum++) + // iterate over devices within each class + for (int devnum = 0; devnum < m_keyboard_class.maxindex(); devnum++) { - input_device *device = devlist->list[devnum]; - input_item_id itemid; + // fetch the device; ignore if NULL + input_device *device = m_keyboard_class.device(devnum); + if (device == NULL) + continue; - /* iterate over items within each device */ - for (itemid = ITEM_ID_FIRST_VALID; itemid <= device->maxitem; itemid++) + // iterate over items within each device + for (input_item_id itemid = ITEM_ID_FIRST_VALID; itemid <= device->maxitem(); itemid++) { - input_device_item *item = device->item[itemid]; - if (item != NULL && item->itemclass == ITEM_CLASS_SWITCH) + input_device_item *item = device->item(itemid); + if (item != NULL && item->itemclass() == ITEM_CLASS_SWITCH) { - input_code code = device_item_to_code(device, itemid); - if (input_code_pressed_once(machine, code)) + input_code code(*device, itemid); + if (code_pressed_once(code)) return code; } } } - /* if nothing, return an invalid code */ + // if nothing, return an invalid code return INPUT_CODE_INVALID; } -/*------------------------------------------------- - input_code_check_axis - see if axis has - move far enough --------------------------------------------------*/ +//------------------------------------------------- +// code_check_axis - see if axis has moved far +// enough to trigger a read when polling +//------------------------------------------------- -static int input_code_check_axis(running_machine &machine, input_device_item *item, input_code code) +bool input_manager::code_check_axis(input_device_item &item, input_code code) { - INT32 curval, diff; - - /* poll the current value */ - curval = input_code_value(machine, code); - - /* if we've already reported this one, don't bother */ - if (item->memory == INVALID_AXIS_VALUE) - return FALSE; - - /* ignore min/max for lightguns */ - /* so the selection will not be affected by a gun going out of range */ - if ((INPUT_CODE_DEVCLASS(code) == DEVICE_CLASS_LIGHTGUN) - && (INPUT_CODE_ITEMID(code) == ITEM_ID_XAXIS || INPUT_CODE_ITEMID(code) == ITEM_ID_YAXIS) - && (curval == INPUT_ABSOLUTE_MAX || curval == INPUT_ABSOLUTE_MIN)) - return FALSE; - - /* compute the diff against memory */ - diff = curval - item->memory; + // if we've already reported this one, don't bother + if (item.memory() == INVALID_AXIS_VALUE) + return false; + + // ignore min/max for lightguns + // so the selection will not be affected by a gun going out of range + INT32 curval = code_value(code); + if (code.device_class() == DEVICE_CLASS_LIGHTGUN && + (code.item_id() == ITEM_ID_XAXIS || code.item_id() == ITEM_ID_YAXIS) && + (curval == INPUT_ABSOLUTE_MAX || curval == INPUT_ABSOLUTE_MIN)) + return false; + + // compute the diff against memory + INT32 diff = curval - item.memory(); if (diff < 0) diff = -diff; - /* for absolute axes, look for 25% of maximum */ - if (item->itemclass == ITEM_CLASS_ABSOLUTE && diff > (INPUT_ABSOLUTE_MAX - INPUT_ABSOLUTE_MIN) / 4) + // for absolute axes, look for 25% of maximum + if (item.itemclass() == ITEM_CLASS_ABSOLUTE && diff > (INPUT_ABSOLUTE_MAX - INPUT_ABSOLUTE_MIN) / 4) { - item->memory = INVALID_AXIS_VALUE; - return TRUE; + item.set_memory(INVALID_AXIS_VALUE); + return true; } - /* for relative axes, look for ~20 pixels movement */ - if (item->itemclass == ITEM_CLASS_RELATIVE && diff > 20 * INPUT_RELATIVE_PER_PIXEL) + // for relative axes, look for ~20 pixels movement + if (item.itemclass() == ITEM_CLASS_RELATIVE && diff > 20 * INPUT_RELATIVE_PER_PIXEL) { - item->memory = INVALID_AXIS_VALUE; - return TRUE; + item.set_memory(INVALID_AXIS_VALUE); + return true; } - - return FALSE; + return false; } -/*------------------------------------------------- - input_code_reset_axes - reset axes memory --------------------------------------------------*/ +//------------------------------------------------- +// poll_axes - poll for any input +//------------------------------------------------- -static void input_code_reset_axes(running_machine &machine) +input_code input_manager::poll_axes() { - input_device_list *device_list = machine.input_data->device_list; - input_device_class devclass; - - /* iterate over device classes and devices */ - for (devclass = DEVICE_CLASS_FIRST_VALID; devclass < DEVICE_CLASS_MAXIMUM; devclass++) - { - input_device_list *devlist = &device_list[devclass]; - int devnum; - - /* iterate over devices within each class */ - for (devnum = 0; devnum < devlist->count; devnum++) + // iterate over device classes and devices + for (input_device_class devclass = DEVICE_CLASS_FIRST_VALID; devclass <= DEVICE_CLASS_LAST_VALID; devclass++) + for (int devnum = 0; devnum <= m_class[devclass]->maxindex(); devnum++) { - input_device *device = devlist->list[devnum]; - input_item_id itemid; + // fetch the device; ignore if NULL + input_device *device = m_class[devclass]->device(devnum); + if (device == NULL) + continue; - /* iterate over items within each device */ - for (itemid = ITEM_ID_FIRST_VALID; itemid <= device->maxitem; itemid++) + // iterate over items within each device + for (input_item_id itemid = ITEM_ID_FIRST_VALID; itemid <= device->maxitem(); itemid++) { - input_device_item *item = device->item[itemid]; - if (item != NULL) + input_device_item *item = device->item(itemid); + if (item != NULL && item->itemclass() != ITEM_CLASS_SWITCH) { - input_code code = device_item_to_code(device, itemid); - - /* skip any switches */ - if (item->itemclass == ITEM_CLASS_SWITCH) - continue; - - /* poll the current value and reset the memory */ - item->memory = input_code_value(machine, code); + input_code code(*device, itemid); + if (code_check_axis(*item, code)) + return code; } } } - } + + // if nothing, return an invalid code + return INPUT_CODE_INVALID; } -/*------------------------------------------------- - input_code_poll_axes - poll for any input --------------------------------------------------*/ +//------------------------------------------------- +// device_from_code - given an input_code return +// a pointer to the associated device +//------------------------------------------------- -input_code input_code_poll_axes(running_machine &machine, int reset) +input_device *input_manager::device_from_code(input_code code) const { - input_device_list *device_list = machine.input_data->device_list; - input_device_class devclass; + // if the class is valid, return the appropriate device pointer + input_device_class devclass = code.device_class(); + if (devclass >= DEVICE_CLASS_FIRST_VALID && devclass <= DEVICE_CLASS_LAST_VALID) + return m_class[devclass]->device(code.device_index()); - /* if resetting memory, do it now */ - if (reset) - input_code_reset_axes(machine); + // otherwise, return NULL + return NULL; +} - /* iterate over device classes and devices */ - for (devclass = DEVICE_CLASS_FIRST_VALID; devclass < DEVICE_CLASS_MAXIMUM; devclass++) - { - input_device_list *devlist = &device_list[devclass]; - int devnum; - /* iterate over devices within each class */ - for (devnum = 0; devnum < devlist->count; devnum++) - { - input_device *device = devlist->list[devnum]; - input_item_id itemid; +//------------------------------------------------- +// item_from_code - given an input_code return +// a pointer to the appropriate input_device_item +//------------------------------------------------- - /* iterate over items within each device */ - for (itemid = ITEM_ID_FIRST_VALID; itemid <= device->maxitem; itemid++) - { - input_device_item *item = device->item[itemid]; - if (item != NULL) - { - input_code code = device_item_to_code(device, itemid); +input_device_item *input_manager::item_from_code(input_code code) const +{ + // first get the device; if none, then we don't have an item + input_device *device = device_from_code(code); + if (device == NULL) + return NULL; + + // then return the device's item + return device->item(code.item_id()); +} - /* skip any switches */ - if (item->itemclass == ITEM_CLASS_SWITCH) - continue; - /* check if there is enough axis movement */ - if (input_code_check_axis(machine, item, code)) - return code; - } - } - } - } +//------------------------------------------------- +// reset_memory - reset the array of memory for +// pressed switches +//------------------------------------------------- - /* if nothing, return an invalid code */ - return INPUT_CODE_INVALID; +void input_manager::reset_memory() +{ + // reset all entries in switch memory to invalid + for (int memnum = 0; memnum < ARRAY_LENGTH(m_switch_memory); memnum++) + m_switch_memory[memnum] = INPUT_CODE_INVALID; } +//------------------------------------------------- +// code_from_itemid - translates an input_item_id +// to an input_code +//------------------------------------------------- + +input_code input_manager::code_from_itemid(input_item_id itemid) const +{ + // iterate over device classes and devices + for (input_device_class devclass = DEVICE_CLASS_FIRST_VALID; devclass <= DEVICE_CLASS_LAST_VALID; devclass++) + for (int devnum = 0; devnum <= m_class[devclass]->maxindex(); devnum++) + { + input_device *device = m_class[devclass]->device(devnum); + if (device != NULL && device->item(itemid) != NULL) + return input_code(*device, itemid); + } + + return INPUT_CODE_INVALID; +} -/*************************************************************************** - STRINGS AND TOKENIZATION -***************************************************************************/ -/*------------------------------------------------- - input_code_name - convert an input code into - a friendly name --------------------------------------------------*/ +//------------------------------------------------- +// code_name - convert an input code into a +// friendly name +//------------------------------------------------- -astring &input_code_name(running_machine &machine, astring &string, input_code code) +const char *input_manager::code_name(astring &string, input_code code) const { - input_device_list *device_list = machine.input_data->device_list; - input_device_item *item = input_code_item(machine, code); - const char *devclass; - const char *devcode; - const char *modifier; - char devindex[10]; + string.reset(); - /* if nothing there, return an empty string */ + // if nothing there, return an empty string + input_device_item *item = item_from_code(code); if (item == NULL) - return string.reset(); + return string; - /* determine the devclass part */ - devclass = code_to_string(devclass_string_table, INPUT_CODE_DEVCLASS(code)); + // determine the devclass part + const char *devclass = (*devclass_string_table)[code.device_class()]; - /* determine the devindex part */ - sprintf(devindex, "%d", INPUT_CODE_DEVINDEX(code) + 1); + // determine the devindex part + astring devindex; + devindex.printf("%d", code.device_index() + 1); - /* if we're unifying all devices, don't display a number */ - if (!device_list[INPUT_CODE_DEVCLASS(code)].multi) - devindex[0] = 0; + // if we're unifying all devices, don't display a number + if (!m_class[code.device_class()]->multi()) + devindex.reset(); - /* keyboard 0 doesn't show a class or index if it is the only one */ - if (item->devclass == DEVICE_CLASS_KEYBOARD && device_list[DEVICE_CLASS_KEYBOARD].count == 1) + // keyboard 0 doesn't show a class or index if it is the only one + input_device_class device_class = item->device().devclass(); + if (device_class == DEVICE_CLASS_KEYBOARD && m_keyboard_class.maxindex() == 0) { devclass = ""; - devindex[0] = 0; + devindex.reset(); } - /* devcode part comes from the item name */ - devcode = item->name; + // devcode part comes from the item name + const char *devcode = item->name(); - /* determine the modifier part */ - modifier = code_to_string(modifier_string_table, INPUT_CODE_MODIFIER(code)); + // determine the modifier part + const char *modifier = (*modifier_string_table)[code.item_modifier()]; - /* devcode is redundant with joystick switch left/right/up/down */ - if (item->devclass == DEVICE_CLASS_JOYSTICK && INPUT_CODE_ITEMCLASS(code) == ITEM_CLASS_SWITCH) - if (INPUT_CODE_MODIFIER(code) >= ITEM_MODIFIER_LEFT && INPUT_CODE_MODIFIER(code) <= ITEM_MODIFIER_DOWN) + // devcode is redundant with joystick switch left/right/up/down + if (device_class == DEVICE_CLASS_JOYSTICK && code.item_class() == ITEM_CLASS_SWITCH) + if (code.item_modifier() >= ITEM_MODIFIER_LEFT && code.item_modifier() <= ITEM_MODIFIER_DOWN) devcode = ""; - /* concatenate the strings */ + // concatenate the strings string.cpy(devclass); - if (devindex[0] != 0) + if (devindex) string.cat(" ").cat(devindex); if (devcode[0] != 0) string.cat(" ").cat(devcode); - if (modifier[0] != 0) + if (modifier != NULL) string.cat(" ").cat(modifier); - /* delete any leading spaces */ + // delete any leading spaces return string.trimspace(); } -/*------------------------------------------------- - input_code_to_token - create a token for - a given code --------------------------------------------------*/ +//------------------------------------------------- +// code_to_token - create a token for a given code +//------------------------------------------------- -astring &input_code_to_token(running_machine &machine, astring &string, input_code code) +const char *input_manager::code_to_token(astring &string, input_code code) const { - input_device_item *item = input_code_item(machine, code); - const char *devclass; - const char *devcode; - const char *itemclass; - const char *modifier; - char devindex[10]; + // determine the devclass part + const char *devclass = (*devclass_token_table)[code.device_class()]; - /* determine the devclass part */ - devclass = code_to_string(devclass_token_table, INPUT_CODE_DEVCLASS(code)); + // determine the devindex part; keyboard 0 doesn't show an index + astring devindex; + devindex.printf("%d", code.device_index() + 1); + if (code.device_class() == DEVICE_CLASS_KEYBOARD && code.device_index() == 0) + devindex.reset(); - /* determine the devindex part; keyboard 0 doesn't show an index */ - sprintf(devindex, "%d", INPUT_CODE_DEVINDEX(code) + 1); - if (INPUT_CODE_DEVCLASS(code) == DEVICE_CLASS_KEYBOARD && INPUT_CODE_DEVINDEX(code) == 0) - devindex[0] = 0; + // determine the itemid part; look up in the table if we don't have a token + input_device_item *item = item_from_code(code); + const char *devcode = (item != NULL) ? item->token() : "UNKNOWN"; - /* determine the itemid part; look up in the table if we don't have a token */ - if (item != NULL && item->token) - devcode = item->token; - else - { - devcode = code_to_string(itemid_token_table, INPUT_CODE_ITEMID(code)); - if (devcode == NULL) - devcode = "UNKNOWN"; - } - - /* determine the modifier part */ - modifier = code_to_string(modifier_token_table, INPUT_CODE_MODIFIER(code)); + // determine the modifier part + const char *modifier = (*modifier_token_table)[code.item_modifier()]; - /* determine the itemclass part; if we match the native class, we don't include this */ - if (item != NULL && item->itemclass == INPUT_CODE_ITEMCLASS(code)) - itemclass = ""; - else - itemclass = code_to_string(itemclass_token_table, INPUT_CODE_ITEMCLASS(code)); + // determine the itemclass part; if we match the native class, we don't include this + const char *itemclass = ""; + if (item == NULL || item->itemclass() != code.item_class()) + itemclass = (*itemclass_token_table)[code.item_class()]; - /* concatenate the strings */ + // concatenate the strings string.cpy(devclass); - if (devindex[0] != 0) + if (devindex) string.cat("_").cat(devindex); if (devcode[0] != 0) string.cat("_").cat(devcode); - if (modifier[0] != 0) + if (modifier != NULL) string.cat("_").cat(modifier); if (itemclass[0] != 0) string.cat("_").cat(itemclass); @@ -1392,489 +1624,810 @@ astring &input_code_to_token(running_machine &machine, astring &string, input_co } -/*------------------------------------------------- - input_code_from_token - extract an input - code from a token --------------------------------------------------*/ +//------------------------------------------------- +// code_from_token - extract an input code from a +// token +//------------------------------------------------- -input_code input_code_from_token(running_machine &machine, const char *_token) +input_code input_manager::code_from_token(const char *_token) { - UINT32 devclass, itemid, devindex, modifier, standard; - UINT32 itemclass = ITEM_CLASS_INVALID; - input_code code = INPUT_CODE_INVALID; + // copy the token and break it into pieces astring token[6]; - int numtokens, curtok; - - /* copy the token and break it into pieces */ + int numtokens; for (numtokens = 0; numtokens < ARRAY_LENGTH(token); ) { - /* make a token up to the next underscore */ + // make a token up to the next underscore char *score = (char *)strchr(_token, '_'); token[numtokens++].cpy(_token, (score == NULL) ? strlen(_token) : (score - _token)); - /* if we hit the end, we're done, else advance our pointer */ + // if we hit the end, we're done, else advance our pointer if (score == NULL) break; _token = score + 1; } - /* first token should be the devclass */ - curtok = 0; - devclass = string_to_code(devclass_token_table, token[curtok++]); + // first token should be the devclass + int curtok = 0; + input_device_class devclass = input_device_class((*devclass_token_table)[token[curtok++].cstr()]); if (devclass == ~0) - goto exit; + return INPUT_CODE_INVALID; - /* second token might be index; look for number */ - devindex = 0; + // second token might be index; look for number + int devindex = 0; if (numtokens > 2 && sscanf(token[curtok], "%d", &devindex) == 1) { curtok++; devindex--; } if (curtok >= numtokens) - goto exit; + return INPUT_CODE_INVALID; - /* next token is the item ID */ - itemid = string_to_code(itemid_token_table, token[curtok]); - standard = (itemid != ~0); + // next token is the item ID + input_item_id itemid = input_item_id((*itemid_token_table)[token[curtok].cstr()]); + bool standard = (itemid != ~0); - /* if we're a standard code, default the itemclass based on it */ + // if we're a standard code, default the itemclass based on it + input_item_class itemclass = ITEM_CLASS_INVALID; if (standard) - itemclass = input_item_standard_class((input_device_class)devclass, (input_item_id)itemid); + itemclass = m_class[devclass]->standard_item_class(itemid); - /* otherwise, keep parsing */ + // otherwise, keep parsing else { - input_device_list *device_list = machine.input_data->device_list; - input_device *device; + // if this is an invalid device, we have nothing to look up + input_device *device = m_class[devclass]->device(devindex); + if (device == NULL) + return INPUT_CODE_INVALID; - /* if this is an invalid device, we have nothing to look up */ - if (device_list == NULL || devindex >= device_list[devclass].count) - goto exit; - device = device_list[devclass].list[devindex]; - - /* if not a standard code, look it up in the device specific codes */ - for (itemid = ITEM_ID_FIRST_VALID; itemid <= device->maxitem; itemid++) + // if not a standard code, look it up in the device specific codes + for (itemid = ITEM_ID_FIRST_VALID; itemid <= device->maxitem(); itemid++) { - input_device_item *item = device->item[itemid]; - if (item != NULL && token[curtok].cmp(item->token) == 0) + input_device_item *item = device->item(itemid); + if (item != NULL && token[curtok].cmp(item->token()) == 0) { - /* take the itemclass from the item */ - itemclass = item->itemclass; + // take the itemclass from the item + itemclass = item->itemclass(); break; } } - /* bail on fail */ - if (itemid > device->maxitem) - goto exit; + // bail on fail + if (itemid > device->maxitem()) + return INPUT_CODE_INVALID; } curtok++; - /* if we have another token, it is probably a modifier */ - modifier = ITEM_MODIFIER_NONE; + // if we have another token, it is probably a modifier + input_item_modifier modifier = ITEM_MODIFIER_NONE; if (curtok < numtokens) { - modifier = string_to_code(modifier_token_table, token[curtok]); + modifier = input_item_modifier((*modifier_token_table)[token[curtok].cstr()]); if (modifier != ~0) curtok++; else modifier = ITEM_MODIFIER_NONE; } - /* if we have another token, it is the item class */ + // if we have another token, it is the item class if (curtok < numtokens) { - UINT32 temp = string_to_code(itemclass_token_table, token[curtok]); + UINT32 temp = (*itemclass_token_table)[token[curtok].cstr()]; if (temp != ~0) { curtok++; - itemclass = temp; + itemclass = input_item_class(temp); } } - /* we should have consumed all tokens */ + // we should have consumed all tokens if (curtok != numtokens) - goto exit; - - /* assemble the final code */ - code = INPUT_CODE(devclass, devindex, itemclass, modifier, itemid); + return INPUT_CODE_INVALID; -exit: - return code; + // assemble the final code + return input_code(devclass, devindex, itemclass, modifier, itemid); } +//------------------------------------------------- +// seq_pressed - return true if the given sequence +// of switch inputs is "pressed" +//------------------------------------------------- -/*************************************************************************** - DEBUGGIN UTILITIES -***************************************************************************/ +bool input_manager::seq_pressed(const input_seq &seq) +{ + // iterate over all of the codes + bool result = false; + bool invert = false; + bool first = true; + for (int codenum = 0; ; codenum++) + { + // handle NOT + input_code code = seq[codenum]; + if (code == input_seq::not_code) + invert = true; -/*------------------------------------------------- - debug_global_input_code_pressed - return TRUE - if the given input code has been pressed --------------------------------------------------*/ + // handle OR and END + else if (code == input_seq::or_code || code == input_seq::end_code) + { + // if we have a positive result from the previous set, we're done + if (result || code == input_seq::end_code) + break; -INT32 debug_global_input_code_pressed(input_code code) -{ - if (!mame_is_valid_machine(*stashed_machine)) - return 0; - return input_code_pressed(*stashed_machine, code); + // otherwise, reset our state + result = false; + invert = false; + first = true; + } + + // handle everything else as a series of ANDs + else + { + // if this is the first in the sequence, result is set equal + if (first) + result = code_pressed(code) ^ invert; + + // further values are ANDed + else if (result) + result &= code_pressed(code) ^ invert; + + // no longer first, and clear the invert flag + first = invert = false; + } + } + + // return the result if we queried at least one switch + return result; } -INT32 debug_global_input_code_pressed_once(input_code code) + +//------------------------------------------------- +// seq_axis_value - return the value of an axis +// defined in an input sequence +//------------------------------------------------- + +INT32 input_manager::seq_axis_value(const input_seq &seq, input_item_class &itemclass) { - if (!mame_is_valid_machine(*stashed_machine)) - return 0; - return input_code_pressed_once(*stashed_machine, code); + // start with no valid classes + input_item_class itemclasszero = ITEM_CLASS_INVALID; + itemclass = ITEM_CLASS_INVALID; + + // iterate over all of the codes + INT32 result = 0; + bool invert = false; + bool enable = true; + for (int codenum = 0; ; codenum++) + { + // handle NOT + input_code code = seq[codenum]; + if (code == input_seq::not_code) + invert = true; + + // handle OR and END + else if (code == input_seq::or_code || code == input_seq::end_code) + { + // if we have a positive result from the previous set, we're done + if (itemclass != ITEM_CLASS_INVALID || code == input_seq::end_code) + break; + + // otherwise, reset our state + result = 0; + invert = false; + enable = true; + } + + // handle everything else only if we're still enabled + else if (enable) + { + // switch codes serve as enables + if (code.item_class() == ITEM_CLASS_SWITCH) + { + // AND against previous digital codes + if (enable) + enable &= code_pressed(code) ^ invert; + } + + // non-switch codes are analog values + else + { + INT32 value = code_value(code); + + // if we got a 0 value, don't do anything except remember the first type + if (value == 0) + { + if (itemclasszero == ITEM_CLASS_INVALID) + itemclasszero = code.item_class(); + } + + // non-zero absolute values stick + else if (code.item_class() == ITEM_CLASS_ABSOLUTE) + { + itemclass = ITEM_CLASS_ABSOLUTE; + result = value; + } + + // non-zero relative values accumulate + else if (code.item_class() == ITEM_CLASS_RELATIVE) + { + itemclass = ITEM_CLASS_RELATIVE; + result += value; + } + } + + // clear the invert flag + invert = false; + } + } + + // if the caller wants to know the type, provide it + if (result == 0) + itemclass = itemclasszero; + return result; } -/*************************************************************************** - INTERNAL FUNCTIONS -***************************************************************************/ -/*------------------------------------------------- - input_code_item - get a pointer to the item - from the code --------------------------------------------------*/ +//------------------------------------------------- +// seq_poll_start - begin polling for a new +// sequence of the given itemclass +//------------------------------------------------- -static input_device_item *input_code_item(running_machine &machine, input_code code) +void input_manager::seq_poll_start(input_item_class itemclass, const input_seq *startseq) { - input_device *device = input_code_device(machine, code); - input_item_id itemid; + assert(itemclass == ITEM_CLASS_SWITCH || itemclass == ITEM_CLASS_ABSOLUTE || itemclass == ITEM_CLASS_RELATIVE); - /* if no device, we fail */ - if (device == NULL) - return NULL; + // reset the recording count and the clock + m_poll_seq_last_ticks = 0; + m_poll_seq_class = itemclass; + m_poll_seq.reset(); - /* if the devcode is in range, return a pointer to the item */ - itemid = INPUT_CODE_ITEMID(code); - if (itemid < ARRAY_LENGTH(device->item)) - return device->item[itemid]; + // grab the starting sequence to append to, and append an OR + if (startseq != NULL) + { + m_poll_seq = *startseq; + if (m_poll_seq.length() > 0) + m_poll_seq += input_seq::or_code; + } - /* otherwise fail with NULL */ - return NULL; + // flush out any goobers + reset_polling(); + input_code dummycode = KEYCODE_ENTER; + while (dummycode != INPUT_CODE_INVALID) + dummycode = (m_poll_seq_class == ITEM_CLASS_SWITCH) ? poll_switches() : poll_axes(); } -/*------------------------------------------------- - convert_absolute_value - convert an absolute - value into the class specified by code --------------------------------------------------*/ +//------------------------------------------------- +// input_seq_poll - continue polling +//------------------------------------------------- -static INT32 convert_absolute_value(running_machine &machine, input_code code, input_device_item *item) +bool input_manager::seq_poll() { - input_private *state = machine.input_data; + int curlen = m_poll_seq.length(); + input_code lastcode = m_poll_seq[curlen - 1]; - /* make sure values are valid */ - assert(item->current >= INPUT_ABSOLUTE_MIN && item->current <= INPUT_ABSOLUTE_MAX); + // switch case: see if we have a new code to process + input_code newcode; + if (m_poll_seq_class == ITEM_CLASS_SWITCH) + { + newcode = poll_switches(); + if (newcode != INPUT_CODE_INVALID) + { + // if code is duplicate, toggle the NOT state on the code + if (curlen > 0 && newcode == lastcode) + { + // back up over the existing code + m_poll_seq.backspace(); - /* relative value conversion not supported */ - if (INPUT_CODE_ITEMCLASS(code) == ITEM_CLASS_RELATIVE) - return 0; + // if there was a NOT preceding it, delete it as well, otherwise append a fresh one + if (m_poll_seq[curlen - 2] == input_seq::not_code) + m_poll_seq.backspace(); + else + m_poll_seq += input_seq::not_code; + } + } + } - /* if we want the absolute value, process it according to the modifier field */ - else if (INPUT_CODE_ITEMCLASS(code) == ITEM_CLASS_ABSOLUTE) + // absolute/relative case: see if we have an analog change of sufficient amount + else { - input_item_modifier modifier = INPUT_CODE_MODIFIER(code); - INT32 result = apply_deadzone_and_saturation(machine, code, item->current); + bool has_or = false; + if (lastcode == input_seq::or_code) + { + lastcode = m_poll_seq[curlen - 2]; + has_or = true; + } + newcode = poll_axes(); + + // if the last code doesn't match absolute/relative of this code, ignore the new one + if ((lastcode.item_class() == ITEM_CLASS_ABSOLUTE && newcode.item_class() != ITEM_CLASS_ABSOLUTE) || + (lastcode.item_class() == ITEM_CLASS_RELATIVE && newcode.item_class() != ITEM_CLASS_RELATIVE)) + newcode = INPUT_CODE_INVALID; - /* if we're doing a lightgun reload hack, override the value */ - if (state->lightgun_reload_button && item->devclass == DEVICE_CLASS_LIGHTGUN) + // if the new code is valid, check for half-axis toggles on absolute controls + if (newcode != INPUT_CODE_INVALID && curlen > 0 && newcode.item_class() == ITEM_CLASS_ABSOLUTE) { - input_device_item *button2_item = state->device_list[item->devclass].list[item->devindex]->item[ITEM_ID_BUTTON2]; - if (button2_item != NULL) + input_code last_nomodifier = lastcode; + last_nomodifier.set_item_modifier(ITEM_MODIFIER_NONE); + if (newcode == last_nomodifier) { - /* if it is pressed, return (min,max) */ - input_item_update_value(machine, button2_item); - if (button2_item->current) - result = (INPUT_CODE_ITEMID(code) == ITEM_ID_XAXIS) ? INPUT_ABSOLUTE_MIN : INPUT_ABSOLUTE_MAX; + // increment the modifier, wrapping back to none + switch (lastcode.item_modifier()) + { + case ITEM_MODIFIER_NONE: newcode.set_item_modifier(ITEM_MODIFIER_POS); break; + case ITEM_MODIFIER_POS: newcode.set_item_modifier(ITEM_MODIFIER_NEG); break; + default: + case ITEM_MODIFIER_NEG: newcode.set_item_modifier(ITEM_MODIFIER_NONE); break; + } + + // back up over the previous code so we can re-append + if (has_or) + m_poll_seq.backspace(); + m_poll_seq.backspace(); } } + } - /* standard axis: apply deadzone and saturation */ - if (modifier == ITEM_MODIFIER_NONE) - return result; - - /* positive/negative: scale to full axis */ - else if (modifier == ITEM_MODIFIER_POS) - return MAX(result, 0) * 2 + INPUT_ABSOLUTE_MIN; - else if (modifier == ITEM_MODIFIER_NEG) - return MAX(-result, 0) * 2 + INPUT_ABSOLUTE_MIN; + // if we got a new code to append it, append it and reset the timer + if (newcode != INPUT_CODE_INVALID) + { + m_poll_seq += newcode; + m_poll_seq_last_ticks = osd_ticks(); } - /* if we want a switch value, process it according to the modifier field */ - else if (INPUT_CODE_ITEMCLASS(code) == ITEM_CLASS_SWITCH) + // if we're recorded at least one item and 2/3 of a second has passed, we're done + if (m_poll_seq_last_ticks != 0 && osd_ticks() > m_poll_seq_last_ticks + osd_ticks_per_second() * 2 / 3) { - input_item_modifier modifier = INPUT_CODE_MODIFIER(code); + // if the final result is invalid, reset to nothing + if (!m_poll_seq.is_valid()) + m_poll_seq.reset(); - /* left/right/up/down: if this is a joystick, fetch the paired X/Y axis values and convert */ - if (modifier >= ITEM_MODIFIER_LEFT && modifier <= ITEM_MODIFIER_DOWN && item->devclass == DEVICE_CLASS_JOYSTICK) - { - input_device *device = state->device_list[item->devclass].list[item->devindex]; - input_device_item *xaxis_item = device->item[ITEM_ID_XAXIS]; - input_device_item *yaxis_item = device->item[ITEM_ID_YAXIS]; - if (xaxis_item != NULL && yaxis_item != NULL) - { - INT32 xaxisval, yaxisval; - UINT8 mapval; + // return true to indicate that we are finished + return true; + } - /* determine which item we didn't update, and update it */ - assert(item == xaxis_item || item == yaxis_item); - input_item_update_value(machine, (item == xaxis_item) ? yaxis_item : xaxis_item); + // return false to indicate we are still polling + return false; +} - /* now map the X and Y axes to a 9x9 grid */ - xaxisval = ((xaxis_item->current - INPUT_ABSOLUTE_MIN) * 9) / (INPUT_ABSOLUTE_MAX - INPUT_ABSOLUTE_MIN + 1); - yaxisval = ((yaxis_item->current - INPUT_ABSOLUTE_MIN) * 9) / (INPUT_ABSOLUTE_MAX - INPUT_ABSOLUTE_MIN + 1); - mapval = device->joymap.map[yaxisval][xaxisval]; - /* handle stickiness */ - if (mapval == JOYSTICK_MAP_STICKY) - mapval = device->lastmap; - else - device->lastmap = mapval; +//------------------------------------------------- +// seq_name - generate the friendly name of a +// sequence +//------------------------------------------------- - /* return based on whether the appropriate bit is set */ - return (mapval >> (modifier - ITEM_MODIFIER_LEFT)) & 1; - } +const char *input_manager::seq_name(astring &string, const input_seq &seq) const +{ + // make a copy of our sequence, removing any invalid bits + input_code clean_codes[sizeof(seq) / sizeof(input_code)]; + int clean_index = 0; + astring codestr; + for (int codenum = 0; seq[codenum] != input_seq::end_code; codenum++) + { + // if this is a code item which is not valid, don't copy it and remove any preceding ORs/NOTs + input_code code = seq[codenum]; + if (!code.internal() && strlen(code_name(codestr, code)) == 0) + { + while (clean_index > 0 && clean_codes[clean_index - 1].internal()) + clean_index--; } - - /* positive/negative: TRUE if past the deadzone in either direction */ - if (modifier == ITEM_MODIFIER_POS || modifier == ITEM_MODIFIER_RIGHT || modifier == ITEM_MODIFIER_DOWN) - return (apply_deadzone_and_saturation(machine, code, item->current) > 0); - else if (modifier == ITEM_MODIFIER_NEG || modifier == ITEM_MODIFIER_LEFT || modifier == ITEM_MODIFIER_UP) - return (apply_deadzone_and_saturation(machine, code, item->current) < 0); + else if (clean_index > 0 || !code.internal()) + clean_codes[clean_index++] = code; } - return 0; + // special case: empty + if (clean_index == 0) + return string.cpy((seq.length() == 0) ? "None" : "n/a"); + + // start with an empty buffer + string.reset(); + + // loop until we hit the end + for (int codenum = 0; codenum < clean_index; codenum++) + { + // append a space if not the first code + if (codenum != 0) + string.cat(" "); + + // handle OR/NOT codes here + input_code code = clean_codes[codenum]; + if (code == input_seq::or_code) + string.cat("or"); + else if (code == input_seq::not_code) + string.cat("not"); + + // otherwise, assume it is an input code and ask the input system to generate it + else + string.cat(code_name(codestr, code)); + } + return string; } -/*------------------------------------------------- - convert_relative_value - convert a relative - value into the class specified by code --------------------------------------------------*/ +//------------------------------------------------- +// seq_to_tokens - generate the tokenized form of +// a sequence +//------------------------------------------------- -static INT32 convert_relative_value(input_code code, input_device_item *item) +const char *input_manager::seq_to_tokens(astring &string, const input_seq &seq) const { - /* if we want relative values, take it as-is */ - if (INPUT_CODE_ITEMCLASS(code) == ITEM_CLASS_RELATIVE) - return item->current; + // start with an empty buffer + string.reset(); + + // loop until we hit the end + astring codestr; + for (int codenum = 0; seq[codenum] != input_seq::end_code; codenum++) + { + // append a space if not the first code + if (codenum != 0) + string.cat(" "); + + // handle OR/NOT codes here + input_code code = seq[codenum]; + if (code == input_seq::or_code) + string.cat("OR"); + else if (code == input_seq::not_code) + string.cat("NOT"); + else if (code == input_seq::default_code) + string.cat("DEFAULT"); + + // otherwise, assume it is an input code and ask the input system to generate it + else + string.cat(code_to_token(codestr, code)); + } + return string; +} - /* absolute value conversion not supported */ - else if (INPUT_CODE_ITEMCLASS(code) == ITEM_CLASS_ABSOLUTE) - return 0; - /* if we want a switch value, process it according to the modifier field */ - else if (INPUT_CODE_ITEMCLASS(code) == ITEM_CLASS_SWITCH) +//------------------------------------------------- +// seq_from_tokens - generate the tokenized form +// of a sequence +//------------------------------------------------- + +void input_manager::seq_from_tokens(input_seq &seq, const char *string) +{ + // start with a blank sequence + seq.reset(); + + // loop until we're done + astring strcopy = string; + char *str = const_cast<char *>(strcopy.cstr()); + while (1) { - input_item_modifier modifier = INPUT_CODE_MODIFIER(code); + // trim any leading spaces + while (*str != 0 && isspace((UINT8)*str)) + str++; + + // bail if we're done + if (*str == 0) + return; + + // find the end of the token and make it upper-case along the way + char *strtemp; + for (strtemp = str; *strtemp != 0 && !isspace((UINT8)*strtemp); strtemp++) + *strtemp = toupper((UINT8)*strtemp); + char origspace = *strtemp; + *strtemp = 0; + + // look for common stuff + input_code code; + if (strcmp(str, "OR") == 0) + code = input_seq::or_code; + else if (strcmp(str, "NOT") == 0) + code = input_seq::not_code; + else if (strcmp(str, "DEFAULT") == 0) + code = input_seq::default_code; + else + code = code_from_token(str); - /* positive/negative: TRUE if non-zero in either direction */ - if (modifier == ITEM_MODIFIER_POS || modifier == ITEM_MODIFIER_RIGHT || modifier == ITEM_MODIFIER_DOWN) - return (item->current > 0); - else if (modifier == ITEM_MODIFIER_NEG || modifier == ITEM_MODIFIER_LEFT || modifier == ITEM_MODIFIER_UP) - return (item->current < 0); + // translate and add to the sequence + seq += code; + + // advance + if (origspace == 0) + return; + str = strtemp + 1; } +} - return 0; + +//------------------------------------------------- +// set_global_joystick_map - set the joystick map +// for all devices +//------------------------------------------------- + +bool input_manager::set_global_joystick_map(const char *mapstring) +{ + // parse the map + joystick_map map; + if (!map.parse(mapstring)) + return false; + + astring tempstr; + mame_printf_verbose("Input: Changing default joystick map = %s", map.to_string(tempstr)); + + // iterate over joysticks and set the map + for (int joynum = 0; joynum <= m_joystick_class.maxindex(); joynum++) + { + input_device *device = m_joystick_class.device(joynum); + if (device != NULL) + device->set_joystick_map(map); + } + return true; } -/*------------------------------------------------- - convert_switch_value - convert a switch - value into the class specified by code --------------------------------------------------*/ -static INT32 convert_switch_value(running_machine &machine, input_code code, input_device_item *item) +//************************************************************************** +// INPUT DEVICE ITEM +//************************************************************************** + +//------------------------------------------------- +// input_device_item - constructor +//------------------------------------------------- + +input_device_item::input_device_item(input_device &device, const char *name, void *internal, input_item_id itemid, item_get_state_func getstate, input_item_class itemclass) + : m_device(device), + m_name(name), + m_internal(internal), + m_itemid(itemid), + m_itemclass(itemclass), + m_getstate(getstate), + m_current(0), + m_memory(0) { - input_private *state = machine.input_data; + // use a standard token name for know item IDs + if (itemid <= ITEM_ID_MAXIMUM && (*itemid_token_table)[itemid] != NULL) + m_token.cpy((*itemid_token_table)[itemid]); + + // otherwise, create a tokenized name + else + m_token.cpy(name).toupper().delchr(' ').delchr('_'); +} + + + +//************************************************************************** +// INPUT DEVICE SWITCH ITEM +//************************************************************************** + +//------------------------------------------------- +// input_device_switch_item - constructor +//------------------------------------------------- - /* only a switch is supported */ - if (INPUT_CODE_ITEMCLASS(code) == ITEM_CLASS_SWITCH) +input_device_switch_item::input_device_switch_item(input_device &device, const char *name, void *internal, input_item_id itemid, item_get_state_func getstate) + : input_device_item(device, name, internal, itemid, getstate, ITEM_CLASS_SWITCH), + m_steadykey(0), + m_oldkey(0) +{ +} + + +//------------------------------------------------- +// read_as_switch - return the raw switch value, +// modified as necessary +//------------------------------------------------- + +INT32 input_device_switch_item::read_as_switch(input_item_modifier modifier) +{ + // if we're doing a lightgun reload hack, button 1 and 2 operate differently + input_device_class devclass = m_device.devclass(); + if (devclass == DEVICE_CLASS_LIGHTGUN && m_device.lightgun_reload_button()) { - /* if we're doing a lightgun reload hack, button 1 and 2 operate differently */ - if (state->lightgun_reload_button && item->devclass == DEVICE_CLASS_LIGHTGUN) + // button 1 is pressed if either button 1 or 2 are active + if (m_itemid == ITEM_ID_BUTTON1) { - /* button 1 is pressed if either button 1 or 2 are active */ - if (INPUT_CODE_ITEMID(code) == ITEM_ID_BUTTON1) - { - input_device_item *button2_item = state->device_list[item->devclass].list[item->devindex]->item[ITEM_ID_BUTTON2]; - if (button2_item != NULL) - { - input_item_update_value(machine, button2_item); - return item->current | button2_item->current; - } - } - - /* button 2 is never officially pressed */ - if (INPUT_CODE_ITEMID(code) == ITEM_ID_BUTTON2) - return 0; + input_device_item *button2_item = m_device.item(ITEM_ID_BUTTON2); + if (button2_item != NULL) + return button2_item->update_value() | update_value(); } - /* steadykey for keyboards */ - if (state->steadykey_enabled && item->devclass == DEVICE_CLASS_KEYBOARD) - return item->steadykey; - - /* everything else is just the current value as-is */ - return item->current; + // button 2 is never officially pressed + if (m_itemid == ITEM_ID_BUTTON2) + return 0; } + // steadykey for keyboards + if (devclass == DEVICE_CLASS_KEYBOARD && m_device.steadykey_enabled()) + return m_steadykey; + + // everything else is just the current value as-is + return update_value(); +} + + +//------------------------------------------------- +// read_as_relative - return the switch input as +// a relative axis value +//------------------------------------------------- + +INT32 input_device_switch_item::read_as_relative(input_item_modifier modifier) +{ + // no translation to relative return 0; } -/*------------------------------------------------- - apply_deadzone_and_saturation - apply global - deadzone and saturation parameters to an - absolute value --------------------------------------------------*/ +//------------------------------------------------- +// read_as_absolute - return the switch input as +// an absolute axis value +//------------------------------------------------- -static INT32 apply_deadzone_and_saturation(running_machine &machine, input_code code, INT32 result) +INT32 input_device_switch_item::read_as_absolute(input_item_modifier modifier) { - input_private *state = machine.input_data; - int negative = FALSE; + // no translation to absolute + return 0; +} - /* ignore if not a joystick */ - if (INPUT_CODE_DEVCLASS(code) != DEVICE_CLASS_JOYSTICK) - return result; - /* properties are symmetric */ - if (result < 0) - { - negative = TRUE; - result = -result; - } +//------------------------------------------------- +// steadykey_changed - update for steadykey +// behavior, returning true if the current state +// has changed since the last call +//------------------------------------------------- - /* if in the deadzone, return 0 */ - if (result < state->joystick_deadzone) - result = 0; +bool input_device_switch_item::steadykey_changed() +{ + INT32 old = m_oldkey; + m_oldkey = update_value(); + if (((m_current ^ old) & 1) == 0) + return false; + + // if the keypress was missed, turn it on for one frame + if (((m_current | m_steadykey) & 1) == 0) + m_steadykey = 1; + return true; +} - /* if saturated, return the max */ - else if (result > state->joystick_saturation) - result = INPUT_ABSOLUTE_MAX; - /* otherwise, scale */ - else - result = (INT64)(result - state->joystick_deadzone) * (INT64)INPUT_ABSOLUTE_MAX / (INT64)(state->joystick_saturation - state->joystick_deadzone); - /* apply sign and return */ - return negative ? -result : result; +//************************************************************************** +// INPUT DEVICE RELATIVE ITEM +//************************************************************************** + +//------------------------------------------------- +// input_device_relative_item - constructor +//------------------------------------------------- + +input_device_relative_item::input_device_relative_item(input_device &device, const char *name, void *internal, input_item_id itemid, item_get_state_func getstate) + : input_device_item(device, name, internal, itemid, getstate, ITEM_CLASS_RELATIVE) +{ } -/*------------------------------------------------- - joystick_map_parse - parse a string into - a joystick map --------------------------------------------------*/ +//------------------------------------------------- +// read_as_switch - return the relative value as +// a switch result based on the modifier +//------------------------------------------------- -static int joystick_map_parse(const char *mapstring, joystick_map *map) +INT32 input_device_relative_item::read_as_switch(input_item_modifier modifier) { - int rownum, colnum; + // process according to modifiers + if (modifier == ITEM_MODIFIER_POS || modifier == ITEM_MODIFIER_RIGHT || modifier == ITEM_MODIFIER_DOWN) + return (update_value() > 0); + else if (modifier == ITEM_MODIFIER_NEG || modifier == ITEM_MODIFIER_LEFT || modifier == ITEM_MODIFIER_UP) + return (update_value() < 0); - /* iterate over rows */ - for (rownum = 0; rownum < 9; rownum++) - { - /* if we're done, copy from another row */ - if (*mapstring == 0 || *mapstring == '.') - { - int symmetric = (rownum >= 5 && *mapstring == 0); - const UINT8 *srcrow = &map->map[symmetric ? (8 - rownum) : (rownum - 1)][0]; + // all other cases just return 0 + return 0; +} - /* if this is row 0, we don't have a source row -- invalid */ - if (rownum == 0) - return FALSE; - /* copy from the srcrow, applying up/down symmetry if in the bottom half */ - for (colnum = 0; colnum < 9; colnum++) - { - UINT8 val = srcrow[colnum]; - if (symmetric) - val = (val & (JOYSTICK_MAP_LEFT | JOYSTICK_MAP_RIGHT)) | ((val & JOYSTICK_MAP_UP) << 1) | ((val & JOYSTICK_MAP_DOWN) >> 1); - map->map[rownum][colnum] = val; - } - } +//------------------------------------------------- +// read_as_relative - return the relative input +// as a relative axis value +//------------------------------------------------- - /* otherwise, parse this column */ - else - { - for (colnum = 0; colnum < 9; colnum++) - { - /* if we're at the end of row, copy previous to the middle, then apply left/right symmetry */ - if (colnum > 0 && (*mapstring == 0 || *mapstring == '.')) - { - int symmetric = (colnum >= 5); - UINT8 val = map->map[rownum][symmetric ? (8 - colnum) : (colnum - 1)]; - if (symmetric) - val = (val & (JOYSTICK_MAP_UP | JOYSTICK_MAP_DOWN)) | ((val & JOYSTICK_MAP_LEFT) << 1) | ((val & JOYSTICK_MAP_RIGHT) >> 1); - map->map[rownum][colnum] = val; - } +INT32 input_device_relative_item::read_as_relative(input_item_modifier modifier) +{ + // just return directly + return update_value(); +} - /* otherwise, convert the character to its value */ - else - { - static const UINT8 charmap[] = - { - JOYSTICK_MAP_UP | JOYSTICK_MAP_LEFT, - JOYSTICK_MAP_UP, - JOYSTICK_MAP_UP | JOYSTICK_MAP_RIGHT, - JOYSTICK_MAP_LEFT, - JOYSTICK_MAP_NEUTRAL, - JOYSTICK_MAP_RIGHT, - JOYSTICK_MAP_DOWN | JOYSTICK_MAP_LEFT, - JOYSTICK_MAP_DOWN, - JOYSTICK_MAP_DOWN | JOYSTICK_MAP_RIGHT, - JOYSTICK_MAP_STICKY - }; - static const char validchars[] = "789456123s"; - const char *ptr = strchr(validchars, *mapstring++); - /* invalid characters exit immediately */ - if (ptr == NULL) - return FALSE; - map->map[rownum][colnum] = charmap[ptr - validchars]; - } - } - } +//------------------------------------------------- +// read_as_absolute - return the relative input +// as an absolute axis value +//------------------------------------------------- - /* if we ended with a period, advance to the next row */ - if (*mapstring == '.') - mapstring++; +INT32 input_device_relative_item::read_as_absolute(input_item_modifier modifier) +{ + // no translation to absolute + return 0; +} + + + +//************************************************************************** +// INPUT DEVICE ABSOLUTE ITEM +//************************************************************************** + +//------------------------------------------------- +// input_device_absolute_item - constructor +//------------------------------------------------- + +input_device_absolute_item::input_device_absolute_item(input_device &device, const char *name, void *internal, input_item_id itemid, item_get_state_func getstate) + : input_device_item(device, name, internal, itemid, getstate, ITEM_CLASS_ABSOLUTE) +{ +} + + +//------------------------------------------------- +// read_as_switch - return the absolute value as +// a switch result based on the modifier +//------------------------------------------------- + +INT32 input_device_absolute_item::read_as_switch(input_item_modifier modifier) +{ + // start with the current value + INT32 result = m_device.apply_deadzone_and_saturation(update_value()); + assert(result >= INPUT_ABSOLUTE_MIN && result <= INPUT_ABSOLUTE_MAX); + + // left/right/up/down: if this is a joystick, fetch the paired X/Y axis values and convert + if (m_device.devclass() == DEVICE_CLASS_JOYSTICK && modifier >= ITEM_MODIFIER_LEFT && modifier <= ITEM_MODIFIER_DOWN) + { + input_device_item *xaxis_item = m_device.item(ITEM_ID_XAXIS); + input_device_item *yaxis_item = m_device.item(ITEM_ID_YAXIS); + if (xaxis_item != NULL && yaxis_item != NULL) + { + // determine which item we didn't update, and update it + assert(this == xaxis_item || this == yaxis_item); + if (this == xaxis_item) + yaxis_item->update_value(); + else + xaxis_item->update_value(); + + // now map the X and Y axes to a 9x9 grid using the raw values + return (m_device.joymap().update(xaxis_item->current(), yaxis_item->current()) >> (modifier - ITEM_MODIFIER_LEFT)) & 1; + } } - return TRUE; + // positive/negative: TRUE if past the deadzone in either direction + if (modifier == ITEM_MODIFIER_POS || modifier == ITEM_MODIFIER_RIGHT || modifier == ITEM_MODIFIER_DOWN) + return (result > 0); + else if (modifier == ITEM_MODIFIER_NEG || modifier == ITEM_MODIFIER_LEFT || modifier == ITEM_MODIFIER_UP) + return (result < 0); + + // all other cases just return 0 + return 0; } -/*------------------------------------------------- - joystick_map_print - print a joystick map via - the verbose output --------------------------------------------------*/ +//------------------------------------------------- +// read_as_relative - return the absolute input +// as a relative axis value +//------------------------------------------------- -static void joystick_map_print(const char *header, const char *origstring, const joystick_map *map) +INT32 input_device_absolute_item::read_as_relative(input_item_modifier modifier) { - int rownum, colnum; + // no translation to relative + return 0; +} - mame_printf_verbose("%s = %s\n", header, origstring); - for (rownum = 0; rownum < 9; rownum++) - { - mame_printf_verbose(" "); - for (colnum = 0; colnum < 9; colnum++) - switch (map->map[rownum][colnum]) - { - case JOYSTICK_MAP_UP | JOYSTICK_MAP_LEFT: mame_printf_verbose("7"); break; - case JOYSTICK_MAP_UP: mame_printf_verbose("8"); break; - case JOYSTICK_MAP_UP | JOYSTICK_MAP_RIGHT: mame_printf_verbose("9"); break; - case JOYSTICK_MAP_LEFT: mame_printf_verbose("4"); break; - case JOYSTICK_MAP_NEUTRAL: mame_printf_verbose("5"); break; - case JOYSTICK_MAP_RIGHT: mame_printf_verbose("6"); break; - case JOYSTICK_MAP_DOWN | JOYSTICK_MAP_LEFT: mame_printf_verbose("1"); break; - case JOYSTICK_MAP_DOWN: mame_printf_verbose("2"); break; - case JOYSTICK_MAP_DOWN | JOYSTICK_MAP_RIGHT:mame_printf_verbose("3"); break; - case JOYSTICK_MAP_STICKY: mame_printf_verbose("s"); break; - default: mame_printf_verbose("?"); break; - } - mame_printf_verbose("\n"); +//------------------------------------------------- +// read_as_absolute - return the absolute input +// as an absolute axis value, with appropriate +// tweaks +//------------------------------------------------- + +INT32 input_device_absolute_item::read_as_absolute(input_item_modifier modifier) +{ + // start with the current value + INT32 result = m_device.apply_deadzone_and_saturation(update_value()); + assert(result >= INPUT_ABSOLUTE_MIN && result <= INPUT_ABSOLUTE_MAX); + + // if we're doing a lightgun reload hack, override the value + if (m_device.devclass() == DEVICE_CLASS_LIGHTGUN && m_device.lightgun_reload_button()) + { + // if it is pressed, return (min,max) + input_device_item *button2_item = m_device.item(ITEM_ID_BUTTON2); + if (button2_item != NULL && button2_item->update_value()) + result = (m_itemid == ITEM_ID_XAXIS) ? INPUT_ABSOLUTE_MIN : INPUT_ABSOLUTE_MAX; } + + // positive/negative: scale to full axis + if (modifier == ITEM_MODIFIER_POS) + result = MAX(result, 0) * 2 + INPUT_ABSOLUTE_MIN; + if (modifier == ITEM_MODIFIER_NEG) + result = MAX(-result, 0) * 2 + INPUT_ABSOLUTE_MIN; + return result; } diff --git a/src/emu/input.h b/src/emu/input.h index 3ff41938669..26aac63da84 100644 --- a/src/emu/input.h +++ b/src/emu/input.h @@ -4,8 +4,36 @@ Handle input from the user. - Copyright Nicola Salmoria and the MAME Team. - Visit http://mamedev.org for licensing and usage restrictions. +**************************************************************************** + + Copyright Aaron Giles + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name 'MAME' nor the names of its contributors may be + used to endorse or promote products derived from this software + without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY AARON GILES ''AS IS'' AND ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL AARON GILES BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. ***************************************************************************/ @@ -19,60 +47,28 @@ #define __INPUT_H__ -/*************************************************************************** - MACROS -***************************************************************************/ - -/* make sure RELATIVE and ABSOLUTE aren't defined elsewhere; otherwise it fouls up our macros */ -#undef RELATIVE -#undef ABSOLUTE - -/* relative devices return ~512 units per onscreen pixel */ -#define INPUT_RELATIVE_PER_PIXEL 512 - -/* absolute devices return values between -65536 and +65536 */ -#define INPUT_ABSOLUTE_MIN -65536 -#define INPUT_ABSOLUTE_MAX 65536 - -/* flags in the top 4 bits of the input code */ -#define INPUT_CODE_INTERNAL (1 << 31) - -/* extract components of the input code */ -#define INPUT_CODE_IS_INTERNAL(c) (((c) & INPUT_CODE_INTERNAL) != 0) -#define INPUT_CODE_DEVCLASS(c) ((input_device_class)(((c) >> 24) & 0x0f)) -#define INPUT_CODE_DEVINDEX(c) ((UINT8)(((c) >> 20) & 0x0f)) -#define INPUT_CODE_ITEMCLASS(c) ((input_item_class)(((c) >> 16) & 0x0f)) -#define INPUT_CODE_MODIFIER(c) ((input_item_modifier)(((c) >> 12) & 0x0f)) -#define INPUT_CODE_ITEMID(c) ((input_item_id)(int)((c) & 0xfff)) +//************************************************************************** +// CONSTANTS +//************************************************************************** -/* build or modify input codes */ -#define INPUT_CODE(d,x,i,m,o) ((((d) & 0x0f) << 24) | (((x) & 0x0f) << 20) | (((i) & 0x0f) << 16) | (((m) & 0x0f) << 12) | ((o) & 0xfff)) -#define INPUT_CODE_SET_DEVINDEX(c,x) (((c) & ~(0xf << 20)) | (((x) & 0x0f) << 20)) -#define INPUT_CODE_SET_ITEMCLASS(c,i) (((c) & ~(0xf << 16)) | (((i) & 0x0f) << 16)) -#define INPUT_CODE_SET_MODIFIER(c,m) (((c) & ~(0xf << 12)) | (((m) & 0x0f) << 12)) -#define INPUT_CODE_SET_ITEMID(c,d) (((c) & ~0xfff) | ((d) & 0xfff)) +// relative devices return ~512 units per onscreen pixel +const INT32 INPUT_RELATIVE_PER_PIXEL = 512; -/* standard code building */ -#define STANDARD_CODE(d,x,i,m,o) (INPUT_CODE(DEVICE_CLASS_##d, x, ITEM_CLASS_##i, ITEM_MODIFIER_##m, ITEM_ID_##o)) -#define INTERNAL_CODE(x) (INPUT_CODE_INTERNAL | ((x) & 0xfff)) -#define INPUT_CODE_INVALID STANDARD_CODE(INVALID, 0, INVALID, NONE, INVALID) +// absolute devices return values between -65536 and +65536 +const INT32 INPUT_ABSOLUTE_MIN = -65536; +const INT32 INPUT_ABSOLUTE_MAX = 65536; -/* maximum number of axis/buttons/hats with ITEM_IDs for use by osd layer */ -#define INPUT_MAX_AXIS (8) -#define INPUT_MAX_BUTTONS (16) -#define INPUT_MAX_HATS (4) -#define INPUT_MAX_ADD_SWITCH (16) -#define INPUT_MAX_ADD_ABSOLUTE (16) -#define INPUT_MAX_ADD_RELATIVE (16) +// maximum number of axis/buttons/hats with ITEM_IDs for use by osd layer +const int INPUT_MAX_AXIS = 8; +const int INPUT_MAX_BUTTONS = 16; +const int INPUT_MAX_HATS = 4; +const int INPUT_MAX_ADD_SWITCH = 16; +const int INPUT_MAX_ADD_ABSOLUTE = 16; +const int INPUT_MAX_ADD_RELATIVE = 16; - -/*************************************************************************** - CONSTANTS -***************************************************************************/ - -/* input device classes */ -enum _input_device_class +// device classes +enum input_device_class { DEVICE_CLASS_INVALID, DEVICE_CLASS_FIRST_VALID, @@ -80,14 +76,19 @@ enum _input_device_class DEVICE_CLASS_MOUSE, DEVICE_CLASS_LIGHTGUN, DEVICE_CLASS_JOYSTICK, + DEVICE_CLASS_LAST_VALID = DEVICE_CLASS_JOYSTICK, + DEVICE_CLASS_INTERNAL, DEVICE_CLASS_MAXIMUM }; -typedef enum _input_device_class input_device_class; DECLARE_ENUM_OPERATORS(input_device_class) -/* input item classes */ -enum _input_item_class +// device index +const int DEVICE_INDEX_MAXIMUM = 0xff; + + +// input item classes +enum input_item_class { ITEM_CLASS_INVALID, ITEM_CLASS_SWITCH, @@ -95,11 +96,10 @@ enum _input_item_class ITEM_CLASS_RELATIVE, ITEM_CLASS_MAXIMUM }; -typedef enum _input_item_class input_item_class; -/* input item modifiers */ -enum _input_item_modifier +// input item modifiers +enum input_item_modifier { ITEM_MODIFIER_NONE, ITEM_MODIFIER_POS, @@ -110,16 +110,15 @@ enum _input_item_modifier ITEM_MODIFIER_DOWN, ITEM_MODIFIER_MAXIMUM }; -typedef enum _input_item_modifier input_item_modifier; -/* standard item IDs */ -enum _input_item_id +// standard item IDs +enum input_item_id { ITEM_ID_INVALID, ITEM_ID_FIRST_VALID, - /* standard keyboard IDs */ + // standard keyboard IDs ITEM_ID_A = ITEM_ID_FIRST_VALID, ITEM_ID_B, ITEM_ID_C, @@ -230,7 +229,7 @@ enum _input_item_id ITEM_ID_MENU, ITEM_ID_CANCEL, - /* standard mouse/joystick/gun IDs */ + // standard mouse/joystick/gun IDs ITEM_ID_XAXIS, ITEM_ID_YAXIS, ITEM_ID_ZAXIS, @@ -258,7 +257,7 @@ enum _input_item_id ITEM_ID_START, ITEM_ID_SELECT, - /* Hats */ + // Hats ITEM_ID_HAT1UP, ITEM_ID_HAT1DOWN, ITEM_ID_HAT1LEFT, @@ -276,7 +275,7 @@ enum _input_item_id ITEM_ID_HAT4LEFT, ITEM_ID_HAT4RIGHT, - /* Additional IDs */ + // Additional IDs ITEM_ID_ADD_SWITCH1, ITEM_ID_ADD_SWITCH2, ITEM_ID_ADD_SWITCH3, @@ -328,325 +327,762 @@ enum _input_item_id ITEM_ID_ADD_RELATIVE15, ITEM_ID_ADD_RELATIVE16, - /* generic other IDs */ + // generic other IDs ITEM_ID_OTHER_SWITCH, ITEM_ID_OTHER_AXIS_ABSOLUTE, ITEM_ID_OTHER_AXIS_RELATIVE, ITEM_ID_MAXIMUM, - - /* absolute maximum ID */ + + // internal codes for sequences + ITEM_ID_SEQ_END, + ITEM_ID_SEQ_DEFAULT, + ITEM_ID_SEQ_NOT, + ITEM_ID_SEQ_OR, + + // absolute maximum ID ITEM_ID_ABSOLUTE_MAXIMUM = 0xfff }; -typedef enum _input_item_id input_item_id; DECLARE_ENUM_OPERATORS(input_item_id) -/* expanded codes referencing specific devices for input definitions */ -/* note that these all implcitly refer to device 0; to reference additional */ -/* devices, wrap the code in INPUT_CODE_SET_DEVINDEX() */ -enum -{ - /* keyboard codes */ - KEYCODE_A = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, A), - KEYCODE_B = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, B), - KEYCODE_C = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, C), - KEYCODE_D = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, D), - KEYCODE_E = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, E), - KEYCODE_F = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F), - KEYCODE_G = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, G), - KEYCODE_H = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, H), - KEYCODE_I = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, I), - KEYCODE_J = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, J), - KEYCODE_K = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, K), - KEYCODE_L = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, L), - KEYCODE_M = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, M), - KEYCODE_N = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, N), - KEYCODE_O = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, O), - KEYCODE_P = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, P), - KEYCODE_Q = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, Q), - KEYCODE_R = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, R), - KEYCODE_S = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, S), - KEYCODE_T = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, T), - KEYCODE_U = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, U), - KEYCODE_V = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, V), - KEYCODE_W = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, W), - KEYCODE_X = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, X), - KEYCODE_Y = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, Y), - KEYCODE_Z = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, Z), - KEYCODE_0 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 0), - KEYCODE_1 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 1), - KEYCODE_2 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 2), - KEYCODE_3 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 3), - KEYCODE_4 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 4), - KEYCODE_5 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 5), - KEYCODE_6 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 6), - KEYCODE_7 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 7), - KEYCODE_8 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 8), - KEYCODE_9 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 9), - KEYCODE_F1 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F1), - KEYCODE_F2 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F2), - KEYCODE_F3 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F3), - KEYCODE_F4 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F4), - KEYCODE_F5 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F5), - KEYCODE_F6 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F6), - KEYCODE_F7 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F7), - KEYCODE_F8 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F8), - KEYCODE_F9 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F9), - KEYCODE_F10 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F10), - KEYCODE_F11 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F11), - KEYCODE_F12 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F12), - KEYCODE_F13 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F13), - KEYCODE_F14 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F14), - KEYCODE_F15 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, F15), - KEYCODE_ESC = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, ESC), - KEYCODE_TILDE = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, TILDE), - KEYCODE_MINUS = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, MINUS), - KEYCODE_EQUALS = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, EQUALS), - KEYCODE_BACKSPACE = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, BACKSPACE), - KEYCODE_TAB = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, TAB), - KEYCODE_OPENBRACE = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, OPENBRACE), - KEYCODE_CLOSEBRACE = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, CLOSEBRACE), - KEYCODE_ENTER = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, ENTER), - KEYCODE_COLON = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, COLON), - KEYCODE_QUOTE = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, QUOTE), - KEYCODE_BACKSLASH = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, BACKSLASH), - KEYCODE_BACKSLASH2 = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, BACKSLASH2), - KEYCODE_COMMA = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, COMMA), - KEYCODE_STOP = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, STOP), - KEYCODE_SLASH = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, SLASH), - KEYCODE_SPACE = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, SPACE), - KEYCODE_INSERT = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, INSERT), - KEYCODE_DEL = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, DEL), - KEYCODE_HOME = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, HOME), - KEYCODE_END = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, END), - KEYCODE_PGUP = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, PGUP), - KEYCODE_PGDN = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, PGDN), - KEYCODE_LEFT = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, LEFT), - KEYCODE_RIGHT = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, RIGHT), - KEYCODE_UP = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, UP), - KEYCODE_DOWN = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, DOWN), - KEYCODE_0_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 0_PAD), - KEYCODE_1_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 1_PAD), - KEYCODE_2_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 2_PAD), - KEYCODE_3_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 3_PAD), - KEYCODE_4_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 4_PAD), - KEYCODE_5_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 5_PAD), - KEYCODE_6_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 6_PAD), - KEYCODE_7_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 7_PAD), - KEYCODE_8_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 8_PAD), - KEYCODE_9_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, 9_PAD), - KEYCODE_SLASH_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, SLASH_PAD), - KEYCODE_ASTERISK = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, ASTERISK), - KEYCODE_MINUS_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, MINUS_PAD), - KEYCODE_PLUS_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, PLUS_PAD), - KEYCODE_DEL_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, DEL_PAD), - KEYCODE_ENTER_PAD = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, ENTER_PAD), - KEYCODE_PRTSCR = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, PRTSCR), - KEYCODE_PAUSE = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, PAUSE), - KEYCODE_LSHIFT = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, LSHIFT), - KEYCODE_RSHIFT = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, RSHIFT), - KEYCODE_LCONTROL = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, LCONTROL), - KEYCODE_RCONTROL = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, RCONTROL), - KEYCODE_LALT = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, LALT), - KEYCODE_RALT = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, RALT), - KEYCODE_SCRLOCK = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, SCRLOCK), - KEYCODE_NUMLOCK = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, NUMLOCK), - KEYCODE_CAPSLOCK = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, CAPSLOCK), - KEYCODE_LWIN = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, LWIN), - KEYCODE_RWIN = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, RWIN), - KEYCODE_MENU = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, MENU), - KEYCODE_CANCEL = STANDARD_CODE(KEYBOARD, 0, SWITCH, NONE, CANCEL), - - /* mouse axes as relative devices */ - MOUSECODE_X = STANDARD_CODE(MOUSE, 0, RELATIVE, NONE, XAXIS), - MOUSECODE_Y = STANDARD_CODE(MOUSE, 0, RELATIVE, NONE, YAXIS), - MOUSECODE_Z = STANDARD_CODE(MOUSE, 0, RELATIVE, NONE, ZAXIS), - - /* mouse axes as switches in +/- direction */ - MOUSECODE_X_POS_SWITCH = STANDARD_CODE(MOUSE, 0, SWITCH, POS, XAXIS), - MOUSECODE_X_NEG_SWITCH = STANDARD_CODE(MOUSE, 0, SWITCH, NEG, XAXIS), - MOUSECODE_Y_POS_SWITCH = STANDARD_CODE(MOUSE, 0, SWITCH, POS, YAXIS), - MOUSECODE_Y_NEG_SWITCH = STANDARD_CODE(MOUSE, 0, SWITCH, NEG, YAXIS), - MOUSECODE_Z_POS_SWITCH = STANDARD_CODE(MOUSE, 0, SWITCH, POS, ZAXIS), - MOUSECODE_Z_NEG_SWITCH = STANDARD_CODE(MOUSE, 0, SWITCH, NEG, ZAXIS), - - /* mouse buttons */ - MOUSECODE_BUTTON1 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON1), - MOUSECODE_BUTTON2 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON2), - MOUSECODE_BUTTON3 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON3), - MOUSECODE_BUTTON4 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON4), - MOUSECODE_BUTTON5 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON5), - MOUSECODE_BUTTON6 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON6), - MOUSECODE_BUTTON7 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON7), - MOUSECODE_BUTTON8 = STANDARD_CODE(MOUSE, 0, SWITCH, NONE, BUTTON8), - - /* gun axes as absolute devices */ - GUNCODE_X = STANDARD_CODE(LIGHTGUN, 0, ABSOLUTE, NONE, XAXIS), - GUNCODE_Y = STANDARD_CODE(LIGHTGUN, 0, ABSOLUTE, NONE, YAXIS), - - /* gun buttons */ - GUNCODE_BUTTON1 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON1), - GUNCODE_BUTTON2 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON2), - GUNCODE_BUTTON3 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON3), - GUNCODE_BUTTON4 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON4), - GUNCODE_BUTTON5 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON5), - GUNCODE_BUTTON6 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON6), - GUNCODE_BUTTON7 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON7), - GUNCODE_BUTTON8 = STANDARD_CODE(LIGHTGUN, 0, SWITCH, NONE, BUTTON8), - - /* joystick axes as absolute devices */ - JOYCODE_X = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NONE, XAXIS), - JOYCODE_Y = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NONE, YAXIS), - JOYCODE_Z = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NONE, ZAXIS), - JOYCODE_U = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NONE, RXAXIS), - JOYCODE_V = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NONE, RYAXIS), - - /* joystick axes as absolute half-axes */ - JOYCODE_X_POS_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, POS, XAXIS), - JOYCODE_X_NEG_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NEG, XAXIS), - JOYCODE_Y_POS_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, POS, YAXIS), - JOYCODE_Y_NEG_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NEG, YAXIS), - JOYCODE_Z_POS_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, POS, ZAXIS), - JOYCODE_Z_NEG_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NEG, ZAXIS), - JOYCODE_U_POS_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, POS, RXAXIS), - JOYCODE_U_NEG_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NEG, RXAXIS), - JOYCODE_V_POS_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, POS, RYAXIS), - JOYCODE_V_NEG_ABSOLUTE = STANDARD_CODE(JOYSTICK, 0, ABSOLUTE, NEG, RYAXIS), - - /* joystick axes as switches; X/Y are specially handled for left/right/up/down mapping */ - JOYCODE_X_LEFT_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, LEFT, XAXIS), - JOYCODE_X_RIGHT_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, RIGHT, XAXIS), - JOYCODE_Y_UP_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, UP, YAXIS), - JOYCODE_Y_DOWN_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, DOWN, YAXIS), - JOYCODE_Z_POS_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, POS, ZAXIS), - JOYCODE_Z_NEG_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, NEG, ZAXIS), - JOYCODE_U_POS_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, POS, RXAXIS), - JOYCODE_U_NEG_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, NEG, RXAXIS), - JOYCODE_V_POS_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, POS, RYAXIS), - JOYCODE_V_NEG_SWITCH = STANDARD_CODE(JOYSTICK, 0, SWITCH, NEG, RYAXIS), - - /* joystick buttons */ - JOYCODE_BUTTON1 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON1), - JOYCODE_BUTTON2 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON2), - JOYCODE_BUTTON3 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON3), - JOYCODE_BUTTON4 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON4), - JOYCODE_BUTTON5 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON5), - JOYCODE_BUTTON6 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON6), - JOYCODE_BUTTON7 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON7), - JOYCODE_BUTTON8 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON8), - JOYCODE_BUTTON9 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON9), - JOYCODE_BUTTON10 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON10), - JOYCODE_BUTTON11 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON11), - JOYCODE_BUTTON12 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON12), - JOYCODE_BUTTON13 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON13), - JOYCODE_BUTTON14 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON14), - JOYCODE_BUTTON15 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON15), - JOYCODE_BUTTON16 = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, BUTTON16), - JOYCODE_START = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, START), - JOYCODE_SELECT = STANDARD_CODE(JOYSTICK, 0, SWITCH, NONE, SELECT) -}; - - - -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ -/* input codes are UINT32 */ -typedef UINT32 input_code; +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** -/* callback for getting the value of an item on a device */ -typedef INT32 (*item_get_state_func)(void *device_internal, void *item_internal); - -/* (opaque) input device object */ +// forward declarations +class input_device_item; class input_device; +class input_class; +class input_manager; - -/*************************************************************************** - GLOBAL VARIABLES -***************************************************************************/ - -/* joystick maps */ -extern const char joystick_map_8way[]; -extern const char joystick_map_4way_sticky[]; -extern const char joystick_map_4way_diagonal[]; - - - -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ - - -/* ----- initialization and configuration ----- */ - -/* core initialization, prior to calling osd_init() */ -void input_init(running_machine &machine); - -/* enable or disable a device class */ -void input_device_class_enable(running_machine &machine, input_device_class devclass, UINT8 enable); - -/* is a device class enabled? */ -UINT8 input_device_class_enabled(running_machine &machine, input_device_class devclass); - -/* configure default joystick maps */ -int input_device_set_joystick_map(running_machine &machine, int devindex, const char *mapstring); +// callback for getting the value of an item on a device +typedef INT32 (*item_get_state_func)(void *device_internal, void *item_internal); -/* ----- OSD configuration and access ----- */ +// ======================> joystick_map -/* add a new input device */ -input_device *input_device_add(running_machine &machine, input_device_class devclass, const char *name, void *internal); +// a 9x9 joystick map +class joystick_map +{ +public: + // construction/destruction + joystick_map(); + joystick_map(const joystick_map &src) { copy(src); } + + // operators + joystick_map &operator=(const joystick_map &src) { if (this != &src) copy(src); return *this; } + + // parse from a string + bool parse(const char *mapstring); + + // create a friendly string + const char *to_string(astring &string) const; + + // update the state of a live map + UINT8 update(INT32 xaxisval, INT32 yaxisval); + + // joystick mapping codes + static const UINT8 JOYSTICK_MAP_NEUTRAL = 0x00; + static const UINT8 JOYSTICK_MAP_LEFT = 0x01; + static const UINT8 JOYSTICK_MAP_RIGHT = 0x02; + static const UINT8 JOYSTICK_MAP_UP = 0x04; + static const UINT8 JOYSTICK_MAP_DOWN = 0x08; + static const UINT8 JOYSTICK_MAP_STICKY = 0x0f; + +private: + // internal helpers + void copy(const joystick_map &src) + { + memcpy(m_map, src.m_map, sizeof(m_map)); + m_lastmap = JOYSTICK_MAP_NEUTRAL; + m_origstring = src.m_origstring; + } + + // internal state + UINT8 m_map[9][9]; // 9x9 grid + UINT8 m_lastmap; // last value returned (for sticky tracking) + astring m_origstring; // originally parsed string +}; -/* add a new item to an input device */ -void input_device_item_add(input_device *device, const char *name, void *internal, input_item_id itemid, item_get_state_func getstate); +// ======================> input_code +// a combined code that describes a particular input on a particular device +class input_code +{ +public: + // construction/destruction + input_code(input_device_class devclass = DEVICE_CLASS_INVALID, int devindex = 0, input_item_class itemclass = ITEM_CLASS_INVALID, input_item_modifier modifier = ITEM_MODIFIER_NONE, input_item_id itemid = ITEM_ID_INVALID) + : m_internal(((devclass & 0xf) << 28) | ((devindex & 0xff) << 20) | ((itemclass & 0xf) << 16) | ((modifier & 0xf) << 12) | (itemid & 0xfff)) + { + assert(devclass >= 0 && devclass < DEVICE_CLASS_MAXIMUM); + assert(devindex >= 0 && devindex < DEVICE_INDEX_MAXIMUM); + assert(itemclass >= 0 && itemclass < ITEM_CLASS_MAXIMUM); + assert(modifier >= 0 && modifier < ITEM_MODIFIER_MAXIMUM); + assert(itemid >= 0 && itemid < ITEM_ID_ABSOLUTE_MAXIMUM); + } + input_code(const input_code &src) + : m_internal(src.m_internal) { } + input_code(input_device &device, input_item_id itemid); + + // operators + bool operator==(const input_code &rhs) const { return m_internal == rhs.m_internal; } + bool operator!=(const input_code &rhs) const { return m_internal != rhs.m_internal; } + + // getters + bool internal() const { return device_class() == DEVICE_CLASS_INTERNAL; } + input_device_class device_class() const { return input_device_class((m_internal >> 28) & 0xf); } + int device_index() const { return ((m_internal >> 20) & 0xff); } + input_item_class item_class() const { return input_item_class((m_internal >> 16) & 0xf); } + input_item_modifier item_modifier() const { return input_item_modifier((m_internal >> 12) & 0xf); } + input_item_id item_id() const { return input_item_id(m_internal & 0xfff); } + + // setters + void set_device_class(input_device_class devclass) { assert(devclass >= 0 && devclass <= 0xf); m_internal = (m_internal & ~(0xf << 28)) | ((devclass & 0xf) << 28); } + void set_device_index(int devindex) { assert(devindex >= 0 && devindex <= 0xff); m_internal = (m_internal & ~(0xff << 20)) | ((devindex & 0xff) << 20); } + void set_item_class(input_item_class itemclass) { assert(itemclass >= 0 && itemclass <= 0xf); m_internal = (m_internal & ~(0xf << 16)) | ((itemclass & 0xf) << 16); } + void set_item_modifier(input_item_modifier modifier) { assert(modifier >= 0 && modifier <= 0xf); m_internal = (m_internal & ~(0xf << 12)) | ((modifier & 0xf) << 12); } + void set_item_id(input_item_id itemid) { assert(itemid >= 0 && itemid <= 0xfff); m_internal = (m_internal & ~0xfff) | (itemid & 0xfff); } + +private: + // internal state + UINT32 m_internal; +}; -/* ----- state queries ----- */ -/* return the value of a particular input code */ -INT32 input_code_value(running_machine &machine, input_code code); +// ======================> input_seq -/* return TRUE if the given input code has been pressed */ -INT32 input_code_pressed(running_machine &machine, input_code code); +// a sequence of input_codes, supporting AND/OR and inversion +class input_seq +{ +public: + // construction/destruction + input_seq(input_code code0 = input_seq::end_code, input_code code1 = input_seq::end_code, input_code code2 = input_seq::end_code, input_code code3 = input_seq::end_code, input_code code4 = input_seq::end_code, input_code code5 = input_seq::end_code, input_code code6 = input_seq::end_code) + { set(code0, code1, code2, code3, code4, code5, code6); } + input_seq(const input_seq &rhs) { memcpy(m_code, rhs.m_code, sizeof(m_code)); } + + // operators + bool operator==(const input_seq &rhs) const { return (memcmp(m_code, rhs.m_code, sizeof(m_code)) == 0); } + bool operator!=(const input_seq &rhs) const { return (memcmp(m_code, rhs.m_code, sizeof(m_code)) != 0); } + input_code operator[](int index) const { return (index >= 0 && index < ARRAY_LENGTH(m_code)) ? m_code[index] : input_seq::end_code; } + input_seq &operator+=(input_code code); + input_seq &operator|=(input_code code); + + // getters + int length() const; + bool is_valid() const; + bool is_default() const { return m_code[0] == default_code; } + + // setters + void set(input_code code0 = input_seq::end_code, input_code code1 = input_seq::end_code, input_code code2 = input_seq::end_code, input_code code3 = input_seq::end_code, input_code code4 = input_seq::end_code, input_code code5 = input_seq::end_code, input_code code6 = input_seq::end_code); + void reset() { set(); } + void set_default() { set(default_code); } + void backspace(); + void replace(input_code oldcode, input_code newcode); + + // constant codes used in sequences + static const input_code end_code; + static const input_code default_code; + static const input_code not_code; + static const input_code or_code; + + // constant sequences + static const input_seq empty_seq; + static const input_seq default_seq; + +private: + // internal state + input_code m_code[16]; +}; -/* same as above, but returns TRUE only on the first call after an off->on transition */ -INT32 input_code_pressed_once(running_machine &machine, input_code code); -/* translates an input_item_id to an input_code */ -input_code input_code_from_input_item_id(running_machine &machine, input_item_id itemid); +// ======================> input_device + +// a logical device of a given class that can provide input +class input_device +{ + friend class input_class; + + // construction/destruction + input_device(input_class &_class, int _devindex, const char *_name, void *_internal); + +public: + // getters + input_class &device_class() const { return m_class; } + input_manager &manager() const; + running_machine &machine() const; + input_device_class devclass() const; + const char *name() const { return m_name; } + int devindex() const { return m_devindex; } + input_device_item *item(input_item_id index) const { return m_item[index]; } + input_item_id maxitem() const { return m_maxitem; } + void *internal() const { return m_internal; } + joystick_map &joymap() { return m_joymap; } + bool steadykey_enabled() const { return m_steadykey_enabled; } + bool lightgun_reload_button() const { return m_lightgun_reload_button; } + + // item management + input_item_id add_item(const char *name, input_item_id itemid, item_get_state_func getstate, void *internal = NULL); + void set_joystick_map(const joystick_map &map) { m_joymap = map; } + + // helpers + INT32 apply_deadzone_and_saturation(INT32 value) const; + void apply_steadykey() const; + +private: + // internal state + input_class & m_class; // reference to our class + astring m_name; // string name of device + int m_devindex; // device index of this device + input_device_item * m_item[ITEM_ID_ABSOLUTE_MAXIMUM]; // array of pointers to items + input_item_id m_maxitem; // maximum item index + void * m_internal; // internal callback pointer + + // joystick information + joystick_map m_joymap; // joystick map for this device + INT32 m_joystick_deadzone; // deadzone for joystick + INT32 m_joystick_saturation; // saturation position for joystick + bool m_steadykey_enabled; // steadykey enabled for keyboards + bool m_lightgun_reload_button; // lightgun reload hack +}; -/* poll for any switch input, optionally resetting internal memory */ -input_code input_code_poll_switches(running_machine &machine, int reset); -/* poll for any keyboard switch input, optionally resetting internal memory */ -input_code input_code_poll_keyboard_switches(running_machine &machine, int reset); +// ======================> input_class -/* poll for any axis input, optionally resetting internal memory */ -input_code input_code_poll_axes(running_machine &machine, int reset); +// a class of device that provides input +class input_class +{ +public: + // construction/destruction + input_class(input_manager &manager, input_device_class devclass, bool enabled = false, bool multi = false); + + // getters + input_manager &manager() const { return m_manager; } + running_machine &machine() const; + input_device *device(int index) const { return (index <= m_maxindex) ? m_device[index] : NULL; } + input_device_class devclass() const { return m_devclass; } + int maxindex() const { return m_maxindex; } + bool enabled() const { return m_enabled; } + bool multi() const { return m_multi; } + + // setters + void enable(bool state = true) { m_enabled = state; } + void set_multi(bool multi = true) { m_multi = multi; } + + // device management + input_device *add_device(const char *name, void *internal = NULL); + input_device *add_device(int devindex, const char *name, void *internal = NULL); + + // misc helpers + input_item_class standard_item_class(input_item_id itemid); + +private: + // internal helpers + void frame_callback(); + + // internal state + input_manager & m_manager; // reference to our manager + input_device * m_device[DEVICE_INDEX_MAXIMUM]; // array of devices in this class + input_device_class m_devclass; // our device class + int m_maxindex; // maximum populated index + bool m_enabled; // is this class enabled? + bool m_multi; // are multiple instances of this class allowed? +}; +// ======================> input_manager -/* ----- strings and tokenization ----- */ +// global machine-level information about devices +class input_manager +{ +public: + // construction/destruction + input_manager(running_machine &machine); + + // getters + running_machine &machine() const { return m_machine; } + input_class &device_class(input_device_class devclass) { assert(devclass < ARRAY_LENGTH(m_class)); assert(m_class[devclass] != NULL); return *m_class[devclass]; } + + // input code readers + INT32 code_value(input_code code); + bool code_pressed(input_code code) { return code_value(code) != 0; } + bool code_pressed_once(input_code code); + + // input code polling + void reset_polling(); + input_code poll_axes(); + input_code poll_switches(); + input_code poll_keyboard_switches(); + + // input code helpers + input_device *device_from_code(input_code code) const; + input_device_item *item_from_code(input_code code) const; + input_code code_from_itemid(input_item_id itemid) const; + const char *code_name(astring &string, input_code code) const; + const char *code_to_token(astring &string, input_code code) const; + input_code code_from_token(const char *_token); + + // input sequence readers + bool seq_pressed(const input_seq &seq); + INT32 seq_axis_value(const input_seq &seq, input_item_class &itemclass); + + // input sequence polling + void seq_poll_start(input_item_class itemclass, const input_seq *startseq = NULL); + bool seq_poll(); + const input_seq &seq_poll_final() const { return m_poll_seq; } + + // input sequence helpers + const char *seq_name(astring &string, const input_seq &seq) const; + const char *seq_to_tokens(astring &string, const input_seq &seq) const; + void seq_from_tokens(input_seq &seq, const char *_token); + + // misc + bool set_global_joystick_map(const char *mapstring); + +private: + // internal helpers + void reset_memory(); + bool code_check_axis(input_device_item &item, input_code code); + + // internal state + running_machine & m_machine; + input_code m_switch_memory[64]; + + // classes + input_class m_keyboard_class; + input_class m_mouse_class; + input_class m_joystick_class; + input_class m_lightgun_class; + input_class * m_class[DEVICE_CLASS_MAXIMUM]; + + // sequence polling state + input_seq m_poll_seq; + osd_ticks_t m_poll_seq_last_ticks; + input_item_class m_poll_seq_class; +}; -/* generate the friendly name of an input code, returning the length (buffer can be NULL) */ -astring &input_code_name(running_machine &machine, astring &buffer, input_code code); -/* convert an input code to a token, returning the length (buffer can be NULL) */ -astring &input_code_to_token(running_machine &machine, astring &buffer, input_code code); -/* convert a token back to an input code */ -input_code input_code_from_token(running_machine &machine, const char *_token); +//************************************************************************** +// MACROS +//************************************************************************** + +// invalid codes +#define INPUT_CODE_INVALID input_code() + +// keyboard codes +#define KEYCODE_A_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_A) +#define KEYCODE_B_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_B) +#define KEYCODE_C_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_C) +#define KEYCODE_D_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_D) +#define KEYCODE_E_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_E) +#define KEYCODE_F_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F) +#define KEYCODE_G_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_G) +#define KEYCODE_H_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_H) +#define KEYCODE_I_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_I) +#define KEYCODE_J_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_J) +#define KEYCODE_K_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_K) +#define KEYCODE_L_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_L) +#define KEYCODE_M_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_M) +#define KEYCODE_N_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_N) +#define KEYCODE_O_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_O) +#define KEYCODE_P_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_P) +#define KEYCODE_Q_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_Q) +#define KEYCODE_R_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_R) +#define KEYCODE_S_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_S) +#define KEYCODE_T_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_T) +#define KEYCODE_U_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_U) +#define KEYCODE_V_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_V) +#define KEYCODE_W_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_W) +#define KEYCODE_X_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_X) +#define KEYCODE_Y_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_Y) +#define KEYCODE_Z_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_Z) +#define KEYCODE_0_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_0) +#define KEYCODE_1_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_1) +#define KEYCODE_2_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_2) +#define KEYCODE_3_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_3) +#define KEYCODE_4_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_4) +#define KEYCODE_5_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_5) +#define KEYCODE_6_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_6) +#define KEYCODE_7_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_7) +#define KEYCODE_8_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_8) +#define KEYCODE_9_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_9) +#define KEYCODE_F1_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F1) +#define KEYCODE_F2_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F2) +#define KEYCODE_F3_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F3) +#define KEYCODE_F4_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F4) +#define KEYCODE_F5_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F5) +#define KEYCODE_F6_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F6) +#define KEYCODE_F7_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F7) +#define KEYCODE_F8_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F8) +#define KEYCODE_F9_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F9) +#define KEYCODE_F10_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F10) +#define KEYCODE_F11_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F11) +#define KEYCODE_F12_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F12) +#define KEYCODE_F13_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F13) +#define KEYCODE_F14_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F14) +#define KEYCODE_F15_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_F15) +#define KEYCODE_ESC_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_ESC) +#define KEYCODE_TILDE_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_TILDE) +#define KEYCODE_MINUS_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_MINUS) +#define KEYCODE_EQUALS_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_EQUALS) +#define KEYCODE_BACKSPACE_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BACKSPACE) +#define KEYCODE_TAB_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_TAB) +#define KEYCODE_OPENBRACE_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_OPENBRACE) +#define KEYCODE_CLOSEBRACE_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_CLOSEBRACE) +#define KEYCODE_ENTER_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_ENTER) +#define KEYCODE_COLON_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_COLON) +#define KEYCODE_QUOTE_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_QUOTE) +#define KEYCODE_BACKSLASH_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BACKSLASH) +#define KEYCODE_BACKSLASH2_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BACKSLASH2) +#define KEYCODE_COMMA_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_COMMA) +#define KEYCODE_STOP_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_STOP) +#define KEYCODE_SLASH_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_SLASH) +#define KEYCODE_SPACE_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_SPACE) +#define KEYCODE_INSERT_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_INSERT) +#define KEYCODE_DEL_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_DEL) +#define KEYCODE_HOME_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_HOME) +#define KEYCODE_END_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_END) +#define KEYCODE_PGUP_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_PGUP) +#define KEYCODE_PGDN_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_PGDN) +#define KEYCODE_LEFT_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_LEFT) +#define KEYCODE_RIGHT_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_RIGHT) +#define KEYCODE_UP_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_UP) +#define KEYCODE_DOWN_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_DOWN) +#define KEYCODE_0_PAD_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_0_PAD) +#define KEYCODE_1_PAD_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_1_PAD) +#define KEYCODE_2_PAD_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_2_PAD) +#define KEYCODE_3_PAD_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_3_PAD) +#define KEYCODE_4_PAD_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_4_PAD) +#define KEYCODE_5_PAD_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_5_PAD) +#define KEYCODE_6_PAD_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_6_PAD) +#define KEYCODE_7_PAD_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_7_PAD) +#define KEYCODE_8_PAD_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_8_PAD) +#define KEYCODE_9_PAD_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_9_PAD) +#define KEYCODE_SLASH_PAD_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_SLASH_PAD) +#define KEYCODE_ASTERISK_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_ASTERISK) +#define KEYCODE_MINUS_PAD_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_MINUS_PAD) +#define KEYCODE_PLUS_PAD_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_PLUS_PAD) +#define KEYCODE_DEL_PAD_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_DEL_PAD) +#define KEYCODE_ENTER_PAD_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_ENTER_PAD) +#define KEYCODE_PRTSCR_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_PRTSCR) +#define KEYCODE_PAUSE_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_PAUSE) +#define KEYCODE_LSHIFT_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_LSHIFT) +#define KEYCODE_RSHIFT_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_RSHIFT) +#define KEYCODE_LCONTROL_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_LCONTROL) +#define KEYCODE_RCONTROL_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_RCONTROL) +#define KEYCODE_LALT_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_LALT) +#define KEYCODE_RALT_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_RALT) +#define KEYCODE_SCRLOCK_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_SCRLOCK) +#define KEYCODE_NUMLOCK_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_NUMLOCK) +#define KEYCODE_CAPSLOCK_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_CAPSLOCK) +#define KEYCODE_LWIN_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_LWIN) +#define KEYCODE_RWIN_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_RWIN) +#define KEYCODE_MENU_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_MENU) +#define KEYCODE_CANCEL_INDEXED(n) input_code(DEVICE_CLASS_KEYBOARD, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_CANCEL) + +#define KEYCODE_A KEYCODE_A_INDEXED(0) +#define KEYCODE_B KEYCODE_B_INDEXED(0) +#define KEYCODE_C KEYCODE_C_INDEXED(0) +#define KEYCODE_D KEYCODE_D_INDEXED(0) +#define KEYCODE_E KEYCODE_E_INDEXED(0) +#define KEYCODE_F KEYCODE_F_INDEXED(0) +#define KEYCODE_G KEYCODE_G_INDEXED(0) +#define KEYCODE_H KEYCODE_H_INDEXED(0) +#define KEYCODE_I KEYCODE_I_INDEXED(0) +#define KEYCODE_J KEYCODE_J_INDEXED(0) +#define KEYCODE_K KEYCODE_K_INDEXED(0) +#define KEYCODE_L KEYCODE_L_INDEXED(0) +#define KEYCODE_M KEYCODE_M_INDEXED(0) +#define KEYCODE_N KEYCODE_N_INDEXED(0) +#define KEYCODE_O KEYCODE_O_INDEXED(0) +#define KEYCODE_P KEYCODE_P_INDEXED(0) +#define KEYCODE_Q KEYCODE_Q_INDEXED(0) +#define KEYCODE_R KEYCODE_R_INDEXED(0) +#define KEYCODE_S KEYCODE_S_INDEXED(0) +#define KEYCODE_T KEYCODE_T_INDEXED(0) +#define KEYCODE_U KEYCODE_U_INDEXED(0) +#define KEYCODE_V KEYCODE_V_INDEXED(0) +#define KEYCODE_W KEYCODE_W_INDEXED(0) +#define KEYCODE_X KEYCODE_X_INDEXED(0) +#define KEYCODE_Y KEYCODE_Y_INDEXED(0) +#define KEYCODE_Z KEYCODE_Z_INDEXED(0) +#define KEYCODE_0 KEYCODE_0_INDEXED(0) +#define KEYCODE_1 KEYCODE_1_INDEXED(0) +#define KEYCODE_2 KEYCODE_2_INDEXED(0) +#define KEYCODE_3 KEYCODE_3_INDEXED(0) +#define KEYCODE_4 KEYCODE_4_INDEXED(0) +#define KEYCODE_5 KEYCODE_5_INDEXED(0) +#define KEYCODE_6 KEYCODE_6_INDEXED(0) +#define KEYCODE_7 KEYCODE_7_INDEXED(0) +#define KEYCODE_8 KEYCODE_8_INDEXED(0) +#define KEYCODE_9 KEYCODE_9_INDEXED(0) +#define KEYCODE_F1 KEYCODE_F1_INDEXED(0) +#define KEYCODE_F2 KEYCODE_F2_INDEXED(0) +#define KEYCODE_F3 KEYCODE_F3_INDEXED(0) +#define KEYCODE_F4 KEYCODE_F4_INDEXED(0) +#define KEYCODE_F5 KEYCODE_F5_INDEXED(0) +#define KEYCODE_F6 KEYCODE_F6_INDEXED(0) +#define KEYCODE_F7 KEYCODE_F7_INDEXED(0) +#define KEYCODE_F8 KEYCODE_F8_INDEXED(0) +#define KEYCODE_F9 KEYCODE_F9_INDEXED(0) +#define KEYCODE_F10 KEYCODE_F10_INDEXED(0) +#define KEYCODE_F11 KEYCODE_F11_INDEXED(0) +#define KEYCODE_F12 KEYCODE_F12_INDEXED(0) +#define KEYCODE_F13 KEYCODE_F13_INDEXED(0) +#define KEYCODE_F14 KEYCODE_F14_INDEXED(0) +#define KEYCODE_F15 KEYCODE_F15_INDEXED(0) +#define KEYCODE_ESC KEYCODE_ESC_INDEXED(0) +#define KEYCODE_TILDE KEYCODE_TILDE_INDEXED(0) +#define KEYCODE_MINUS KEYCODE_MINUS_INDEXED(0) +#define KEYCODE_EQUALS KEYCODE_EQUALS_INDEXED(0) +#define KEYCODE_BACKSPACE KEYCODE_BACKSPACE_INDEXED(0) +#define KEYCODE_TAB KEYCODE_TAB_INDEXED(0) +#define KEYCODE_OPENBRACE KEYCODE_OPENBRACE_INDEXED(0) +#define KEYCODE_CLOSEBRACE KEYCODE_CLOSEBRACE_INDEXED(0) +#define KEYCODE_ENTER KEYCODE_ENTER_INDEXED(0) +#define KEYCODE_COLON KEYCODE_COLON_INDEXED(0) +#define KEYCODE_QUOTE KEYCODE_QUOTE_INDEXED(0) +#define KEYCODE_BACKSLASH KEYCODE_BACKSLASH_INDEXED(0) +#define KEYCODE_BACKSLASH2 KEYCODE_BACKSLASH2_INDEXED(0) +#define KEYCODE_COMMA KEYCODE_COMMA_INDEXED(0) +#define KEYCODE_STOP KEYCODE_STOP_INDEXED(0) +#define KEYCODE_SLASH KEYCODE_SLASH_INDEXED(0) +#define KEYCODE_SPACE KEYCODE_SPACE_INDEXED(0) +#define KEYCODE_INSERT KEYCODE_INSERT_INDEXED(0) +#define KEYCODE_DEL KEYCODE_DEL_INDEXED(0) +#define KEYCODE_HOME KEYCODE_HOME_INDEXED(0) +#define KEYCODE_END KEYCODE_END_INDEXED(0) +#define KEYCODE_PGUP KEYCODE_PGUP_INDEXED(0) +#define KEYCODE_PGDN KEYCODE_PGDN_INDEXED(0) +#define KEYCODE_LEFT KEYCODE_LEFT_INDEXED(0) +#define KEYCODE_RIGHT KEYCODE_RIGHT_INDEXED(0) +#define KEYCODE_UP KEYCODE_UP_INDEXED(0) +#define KEYCODE_DOWN KEYCODE_DOWN_INDEXED(0) +#define KEYCODE_0_PAD KEYCODE_0_PAD_INDEXED(0) +#define KEYCODE_1_PAD KEYCODE_1_PAD_INDEXED(0) +#define KEYCODE_2_PAD KEYCODE_2_PAD_INDEXED(0) +#define KEYCODE_3_PAD KEYCODE_3_PAD_INDEXED(0) +#define KEYCODE_4_PAD KEYCODE_4_PAD_INDEXED(0) +#define KEYCODE_5_PAD KEYCODE_5_PAD_INDEXED(0) +#define KEYCODE_6_PAD KEYCODE_6_PAD_INDEXED(0) +#define KEYCODE_7_PAD KEYCODE_7_PAD_INDEXED(0) +#define KEYCODE_8_PAD KEYCODE_8_PAD_INDEXED(0) +#define KEYCODE_9_PAD KEYCODE_9_PAD_INDEXED(0) +#define KEYCODE_SLASH_PAD KEYCODE_SLASH_PAD_INDEXED(0) +#define KEYCODE_ASTERISK KEYCODE_ASTERISK_INDEXED(0) +#define KEYCODE_MINUS_PAD KEYCODE_MINUS_PAD_INDEXED(0) +#define KEYCODE_PLUS_PAD KEYCODE_PLUS_PAD_INDEXED(0) +#define KEYCODE_DEL_PAD KEYCODE_DEL_PAD_INDEXED(0) +#define KEYCODE_ENTER_PAD KEYCODE_ENTER_PAD_INDEXED(0) +#define KEYCODE_PRTSCR KEYCODE_PRTSCR_INDEXED(0) +#define KEYCODE_PAUSE KEYCODE_PAUSE_INDEXED(0) +#define KEYCODE_LSHIFT KEYCODE_LSHIFT_INDEXED(0) +#define KEYCODE_RSHIFT KEYCODE_RSHIFT_INDEXED(0) +#define KEYCODE_LCONTROL KEYCODE_LCONTROL_INDEXED(0) +#define KEYCODE_RCONTROL KEYCODE_RCONTROL_INDEXED(0) +#define KEYCODE_LALT KEYCODE_LALT_INDEXED(0) +#define KEYCODE_RALT KEYCODE_RALT_INDEXED(0) +#define KEYCODE_SCRLOCK KEYCODE_SCRLOCK_INDEXED(0) +#define KEYCODE_NUMLOCK KEYCODE_NUMLOCK_INDEXED(0) +#define KEYCODE_CAPSLOCK KEYCODE_CAPSLOCK_INDEXED(0) +#define KEYCODE_LWIN KEYCODE_LWIN_INDEXED(0) +#define KEYCODE_RWIN KEYCODE_RWIN_INDEXED(0) +#define KEYCODE_MENU KEYCODE_MENU_INDEXED(0) +#define KEYCODE_CANCEL KEYCODE_CANCEL_INDEXED(0) + +// mouse axes as relative devices +#define MOUSECODE_X_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_RELATIVE, ITEM_MODIFIER_NONE, ITEM_ID_XAXIS) +#define MOUSECODE_Y_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_RELATIVE, ITEM_MODIFIER_NONE, ITEM_ID_YAXIS) +#define MOUSECODE_Z_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_RELATIVE, ITEM_MODIFIER_NONE, ITEM_ID_ZAXIS) + +#define MOUSECODE_X MOUSECODE_X_INDEXED(0) +#define MOUSECODE_Y MOUSECODE_Y_INDEXED(0) +#define MOUSECODE_Z MOUSECODE_Z_INDEXED(0) + +// mouse axes as switches in +/- direction +#define MOUSECODE_X_POS_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_POS, ITEM_ID_XAXIS) +#define MOUSECODE_X_NEG_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NEG, ITEM_ID_XAXIS) +#define MOUSECODE_Y_POS_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_POS, ITEM_ID_YAXIS) +#define MOUSECODE_Y_NEG_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NEG, ITEM_ID_YAXIS) +#define MOUSECODE_Z_POS_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_POS, ITEM_ID_ZAXIS) +#define MOUSECODE_Z_NEG_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NEG, ITEM_ID_ZAXIS) + +#define MOUSECODE_X_POS_SWITCH MOUSECODE_X_POS_SWITCH_INDEXED(0) +#define MOUSECODE_X_NEG_SWITCH MOUSECODE_X_NEG_SWITCH_INDEXED(0) +#define MOUSECODE_Y_POS_SWITCH MOUSECODE_Y_POS_SWITCH_INDEXED(0) +#define MOUSECODE_Y_NEG_SWITCH MOUSECODE_Y_NEG_SWITCH_INDEXED(0) +#define MOUSECODE_Z_POS_SWITCH MOUSECODE_Z_POS_SWITCH_INDEXED(0) +#define MOUSECODE_Z_NEG_SWITCH MOUSECODE_Z_NEG_SWITCH_INDEXED(0) + +// mouse buttons +#define MOUSECODE_BUTTON1_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON1) +#define MOUSECODE_BUTTON2_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON2) +#define MOUSECODE_BUTTON3_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON3) +#define MOUSECODE_BUTTON4_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON4) +#define MOUSECODE_BUTTON5_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON5) +#define MOUSECODE_BUTTON6_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON6) +#define MOUSECODE_BUTTON7_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON7) +#define MOUSECODE_BUTTON8_INDEXED(n) input_code(DEVICE_CLASS_MOUSE, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON8) + +#define MOUSECODE_BUTTON1 MOUSECODE_BUTTON1_INDEXED(0) +#define MOUSECODE_BUTTON2 MOUSECODE_BUTTON2_INDEXED(0) +#define MOUSECODE_BUTTON3 MOUSECODE_BUTTON3_INDEXED(0) +#define MOUSECODE_BUTTON4 MOUSECODE_BUTTON4_INDEXED(0) +#define MOUSECODE_BUTTON5 MOUSECODE_BUTTON5_INDEXED(0) +#define MOUSECODE_BUTTON6 MOUSECODE_BUTTON6_INDEXED(0) +#define MOUSECODE_BUTTON7 MOUSECODE_BUTTON7_INDEXED(0) +#define MOUSECODE_BUTTON8 MOUSECODE_BUTTON8_INDEXED(0) + +// gun axes as absolute devices +#define GUNCODE_X_INDEXED(n) input_code(DEVICE_CLASS_LIGHTGUN, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_NONE, ITEM_ID_XAXIS) +#define GUNCODE_Y_INDEXED(n) input_code(DEVICE_CLASS_LIGHTGUN, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_NONE, ITEM_ID_YAXIS) + +#define GUNCODE_X GUNCODE_X_INDEXED(0) +#define GUNCODE_Y GUNCODE_Y_INDEXED(0) + +// gun buttons +#define GUNCODE_BUTTON1_INDEXED(n) input_code(DEVICE_CLASS_LIGHTGUN, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON1) +#define GUNCODE_BUTTON2_INDEXED(n) input_code(DEVICE_CLASS_LIGHTGUN, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON2) +#define GUNCODE_BUTTON3_INDEXED(n) input_code(DEVICE_CLASS_LIGHTGUN, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON3) +#define GUNCODE_BUTTON4_INDEXED(n) input_code(DEVICE_CLASS_LIGHTGUN, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON4) +#define GUNCODE_BUTTON5_INDEXED(n) input_code(DEVICE_CLASS_LIGHTGUN, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON5) +#define GUNCODE_BUTTON6_INDEXED(n) input_code(DEVICE_CLASS_LIGHTGUN, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON6) +#define GUNCODE_BUTTON7_INDEXED(n) input_code(DEVICE_CLASS_LIGHTGUN, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON7) +#define GUNCODE_BUTTON8_INDEXED(n) input_code(DEVICE_CLASS_LIGHTGUN, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON8) + +#define GUNCODE_BUTTON1 GUNCODE_BUTTON1_INDEXED(0) +#define GUNCODE_BUTTON2 GUNCODE_BUTTON2_INDEXED(0) +#define GUNCODE_BUTTON3 GUNCODE_BUTTON3_INDEXED(0) +#define GUNCODE_BUTTON4 GUNCODE_BUTTON4_INDEXED(0) +#define GUNCODE_BUTTON5 GUNCODE_BUTTON5_INDEXED(0) +#define GUNCODE_BUTTON6 GUNCODE_BUTTON6_INDEXED(0) +#define GUNCODE_BUTTON7 GUNCODE_BUTTON7_INDEXED(0) +#define GUNCODE_BUTTON8 GUNCODE_BUTTON8_INDEXED(0) + +// joystick axes as absolute devices +#define JOYCODE_X_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_NONE, ITEM_ID_XAXIS) +#define JOYCODE_Y_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_NONE, ITEM_ID_YAXIS) +#define JOYCODE_Z_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_NONE, ITEM_ID_ZAXIS) +#define JOYCODE_U_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_NONE, ITEM_ID_RXAXIS) +#define JOYCODE_V_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_NONE, ITEM_ID_RYAXIS) + +#define JOYCODE_X JOYCODE_X_INDEXED(0) +#define JOYCODE_Y JOYCODE_Y_INDEXED(0) +#define JOYCODE_Z JOYCODE_Z_INDEXED(0) +#define JOYCODE_U JOYCODE_U_INDEXED(0) +#define JOYCODE_V JOYCODE_V_INDEXED(0) + +// joystick axes as absolute half-axes +#define JOYCODE_X_POS_ABSOLUTE_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_POS, ITEM_ID_XAXIS) +#define JOYCODE_X_NEG_ABSOLUTE_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_NEG, ITEM_ID_XAXIS) +#define JOYCODE_Y_POS_ABSOLUTE_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_POS, ITEM_ID_YAXIS) +#define JOYCODE_Y_NEG_ABSOLUTE_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_NEG, ITEM_ID_YAXIS) +#define JOYCODE_Z_POS_ABSOLUTE_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_POS, ITEM_ID_ZAXIS) +#define JOYCODE_Z_NEG_ABSOLUTE_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_NEG, ITEM_ID_ZAXIS) +#define JOYCODE_U_POS_ABSOLUTE_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_POS, ITEM_ID_RXAXIS) +#define JOYCODE_U_NEG_ABSOLUTE_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_NEG, ITEM_ID_RXAXIS) +#define JOYCODE_V_POS_ABSOLUTE_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_POS, ITEM_ID_RYAXIS) +#define JOYCODE_V_NEG_ABSOLUTE_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_ABSOLUTE, ITEM_MODIFIER_NEG, ITEM_ID_RYAXIS) + +#define JOYCODE_X_POS_ABSOLUTE JOYCODE_X_POS_ABSOLUTE_INDEXED(0) +#define JOYCODE_X_NEG_ABSOLUTE JOYCODE_X_NEG_ABSOLUTE_INDEXED(0) +#define JOYCODE_Y_POS_ABSOLUTE JOYCODE_Y_POS_ABSOLUTE_INDEXED(0) +#define JOYCODE_Y_NEG_ABSOLUTE JOYCODE_Y_NEG_ABSOLUTE_INDEXED(0) +#define JOYCODE_Z_POS_ABSOLUTE JOYCODE_Z_POS_ABSOLUTE_INDEXED(0) +#define JOYCODE_Z_NEG_ABSOLUTE JOYCODE_Z_NEG_ABSOLUTE_INDEXED(0) +#define JOYCODE_U_POS_ABSOLUTE JOYCODE_U_POS_ABSOLUTE_INDEXED(0) +#define JOYCODE_U_NEG_ABSOLUTE JOYCODE_U_NEG_ABSOLUTE_INDEXED(0) +#define JOYCODE_V_POS_ABSOLUTE JOYCODE_V_POS_ABSOLUTE_INDEXED(0) +#define JOYCODE_V_NEG_ABSOLUTE JOYCODE_V_NEG_ABSOLUTE_INDEXED(0) + +// joystick axes as switches; X/Y are specially handled for left/right/up/down mapping +#define JOYCODE_X_LEFT_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_LEFT, ITEM_ID_XAXIS) +#define JOYCODE_X_RIGHT_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_RIGHT, ITEM_ID_XAXIS) +#define JOYCODE_Y_UP_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_UP, ITEM_ID_YAXIS) +#define JOYCODE_Y_DOWN_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_DOWN, ITEM_ID_YAXIS) +#define JOYCODE_Z_POS_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_POS, ITEM_ID_ZAXIS) +#define JOYCODE_Z_NEG_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NEG, ITEM_ID_ZAXIS) +#define JOYCODE_U_POS_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_POS, ITEM_ID_RXAXIS) +#define JOYCODE_U_NEG_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NEG, ITEM_ID_RXAXIS) +#define JOYCODE_V_POS_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_POS, ITEM_ID_RYAXIS) +#define JOYCODE_V_NEG_SWITCH_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NEG, ITEM_ID_RYAXIS) + +#define JOYCODE_X_LEFT_SWITCH JOYCODE_X_LEFT_SWITCH_INDEXED(0) +#define JOYCODE_X_RIGHT_SWITCH JOYCODE_X_RIGHT_SWITCH_INDEXED(0) +#define JOYCODE_Y_UP_SWITCH JOYCODE_Y_UP_SWITCH_INDEXED(0) +#define JOYCODE_Y_DOWN_SWITCH JOYCODE_Y_DOWN_SWITCH_INDEXED(0) +#define JOYCODE_Z_POS_SWITCH JOYCODE_Z_POS_SWITCH_INDEXED(0) +#define JOYCODE_Z_NEG_SWITCH JOYCODE_Z_NEG_SWITCH_INDEXED(0) +#define JOYCODE_U_POS_SWITCH JOYCODE_U_POS_SWITCH_INDEXED(0) +#define JOYCODE_U_NEG_SWITCH JOYCODE_U_NEG_SWITCH_INDEXED(0) +#define JOYCODE_V_POS_SWITCH JOYCODE_V_POS_SWITCH_INDEXED(0) +#define JOYCODE_V_NEG_SWITCH JOYCODE_V_NEG_SWITCH_INDEXED(0) + +// joystick buttons +#define JOYCODE_BUTTON1_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON1) +#define JOYCODE_BUTTON2_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON2) +#define JOYCODE_BUTTON3_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON3) +#define JOYCODE_BUTTON4_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON4) +#define JOYCODE_BUTTON5_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON5) +#define JOYCODE_BUTTON6_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON6) +#define JOYCODE_BUTTON7_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON7) +#define JOYCODE_BUTTON8_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON8) +#define JOYCODE_BUTTON9_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON9) +#define JOYCODE_BUTTON10_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON10) +#define JOYCODE_BUTTON11_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON11) +#define JOYCODE_BUTTON12_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON12) +#define JOYCODE_BUTTON13_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON13) +#define JOYCODE_BUTTON14_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON14) +#define JOYCODE_BUTTON15_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON15) +#define JOYCODE_BUTTON16_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_BUTTON16) +#define JOYCODE_START_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_START) +#define JOYCODE_SELECT_INDEXED(n) input_code(DEVICE_CLASS_JOYSTICK, n, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, ITEM_ID_SELECT) + +#define JOYCODE_BUTTON1 JOYCODE_BUTTON1_INDEXED(0) +#define JOYCODE_BUTTON2 JOYCODE_BUTTON2_INDEXED(0) +#define JOYCODE_BUTTON3 JOYCODE_BUTTON3_INDEXED(0) +#define JOYCODE_BUTTON4 JOYCODE_BUTTON4_INDEXED(0) +#define JOYCODE_BUTTON5 JOYCODE_BUTTON5_INDEXED(0) +#define JOYCODE_BUTTON6 JOYCODE_BUTTON6_INDEXED(0) +#define JOYCODE_BUTTON7 JOYCODE_BUTTON7_INDEXED(0) +#define JOYCODE_BUTTON8 JOYCODE_BUTTON8_INDEXED(0) +#define JOYCODE_BUTTON9 JOYCODE_BUTTON9_INDEXED(0) +#define JOYCODE_BUTTON10 JOYCODE_BUTTON10_INDEXED(0) +#define JOYCODE_BUTTON11 JOYCODE_BUTTON11_INDEXED(0) +#define JOYCODE_BUTTON12 JOYCODE_BUTTON12_INDEXED(0) +#define JOYCODE_BUTTON13 JOYCODE_BUTTON13_INDEXED(0) +#define JOYCODE_BUTTON14 JOYCODE_BUTTON14_INDEXED(0) +#define JOYCODE_BUTTON15 JOYCODE_BUTTON15_INDEXED(0) +#define JOYCODE_BUTTON16 JOYCODE_BUTTON16_INDEXED(0) +#define JOYCODE_START JOYCODE_START_INDEXED(0) +#define JOYCODE_SELECT JOYCODE_SELECT_INDEXED(0) + + + +//************************************************************************** +// GLOBAL VARIABLES +//************************************************************************** + +// joystick maps +extern const char joystick_map_8way[]; +extern const char joystick_map_4way_sticky[]; +extern const char joystick_map_4way_diagonal[]; +//************************************************************************** +// INLINE FUNCTIONS +//************************************************************************** -/* ----- debugging utilities ----- */ +// input_device helpers +inline input_manager &input_device::manager() const { return m_class.manager(); } +inline running_machine &input_device::machine() const { return m_class.machine(); } +inline input_device_class input_device::devclass() const { return m_class.devclass(); } -/* return TRUE if the given input code has been pressed */ -INT32 debug_global_input_code_pressed(input_code code); -INT32 debug_global_input_code_pressed_once(input_code code); +// input_class helpers +inline running_machine &input_class::machine() const { return m_manager.machine(); } -#endif /* __INPUT_H__ */ +#endif // __INPUT_H__ diff --git a/src/emu/inputseq.c b/src/emu/inputseq.c deleted file mode 100644 index 6b54596a983..00000000000 --- a/src/emu/inputseq.c +++ /dev/null @@ -1,645 +0,0 @@ -/*************************************************************************** - - inputseq.c - - Input sequence abstractions. - - Copyright Nicola Salmoria and the MAME Team. - Visit http://mamedev.org for licensing and usage restrictions. - -***************************************************************************/ - -#include "emu.h" -#include <ctype.h> - - - -/*************************************************************************** - CONSTANTS -***************************************************************************/ - -/* max time between key presses */ -#define RECORD_TIME (osd_ticks_per_second() * 2 / 3) - - - -/*************************************************************************** - GLOBAL VARIABLES -***************************************************************************/ - -/* information about the current sequence being recorded */ -static input_seq record_seq; -static osd_ticks_t record_last; -static input_item_class record_class; - - - -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ - -/* internal functions */ -static int input_seq_is_valid(const input_seq *seq); - - - -/*************************************************************************** - INLINE FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - input_seq_length - return the length of the - sequence --------------------------------------------------*/ - -INLINE int input_seq_length(const input_seq *seq) -{ - int seqnum; - - /* find the end token; error if none found */ - for (seqnum = 0; seqnum < ARRAY_LENGTH(seq->code); seqnum++) - if (seq->code[seqnum] == SEQCODE_END) - return seqnum; - return ARRAY_LENGTH(seq->code); -} - - -/*------------------------------------------------- - input_seq_append - append a code to the end - of an input sequence --------------------------------------------------*/ - -INLINE int input_seq_append(input_seq *seq, input_code code) -{ - int length = input_seq_length(seq); - - /* if not enough room, return FALSE */ - if (length >= ARRAY_LENGTH(seq->code) - 1) - return FALSE; - - /* otherwise, append the code and add a new end */ - seq->code[length++] = code; - seq->code[length] = SEQCODE_END; - return TRUE; -} - - -/*------------------------------------------------- - input_seq_get_last - return the last code - in a sequence --------------------------------------------------*/ - -INLINE input_code input_seq_get_last(const input_seq *seq) -{ - int length = input_seq_length(seq); - return (length == 0) ? SEQCODE_END : seq->code[length - 1]; -} - -/*------------------------------------------------- - input_seq_get_last_but_one - return the - last_but_one code in a sequence --------------------------------------------------*/ - -INLINE input_code input_seq_get_last_but_one(const input_seq *seq) -{ - int length = input_seq_length(seq); - return (length < 2) ? SEQCODE_END : seq->code[length - 2]; -} - - -/*------------------------------------------------- - input_seq_backspace - "backspace" over the - last entry in a sequence --------------------------------------------------*/ - -INLINE void input_seq_backspace(input_seq *seq) -{ - int length = input_seq_length(seq); - - /* if we have at least one entry, remove it */ - if (length > 0) - seq->code[length - 1] = SEQCODE_END; -} - - - -/*************************************************************************** - STATE QUERIES -***************************************************************************/ - -/*------------------------------------------------- - input_seq_pressed - return true if the given - sequence of switch inputs is "pressed" --------------------------------------------------*/ - -int input_seq_pressed(running_machine &machine, const input_seq *seq) -{ - int result = FALSE; - int invert = FALSE; - int first = TRUE; - int codenum; - - /* iterate over all of the codes */ - for (codenum = 0; codenum < ARRAY_LENGTH(seq->code); codenum++) - { - input_code code = seq->code[codenum]; - - /* handle NOT */ - if (code == SEQCODE_NOT) - invert = TRUE; - - /* handle OR and END */ - else if (code == SEQCODE_OR || code == SEQCODE_END) - { - /* if we have a positive result from the previous set, we're done */ - if (result || code == SEQCODE_END) - break; - - /* otherwise, reset our state */ - result = FALSE; - invert = FALSE; - first = TRUE; - } - - /* handle everything else as a series of ANDs */ - else - { - /* if this is the first in the sequence, result is set equal */ - if (first) - result = input_code_pressed(machine, code) ^ invert; - - /* further values are ANDed */ - else if (result) - result &= input_code_pressed(machine, code) ^ invert; - - /* no longer first, and clear the invert flag */ - first = invert = FALSE; - } - } - - /* return the result if we queried at least one switch */ - return result; -} - - -/*------------------------------------------------- - input_seq_axis_value - return the value of an - axis defined in an input sequence --------------------------------------------------*/ - -INT32 input_seq_axis_value(running_machine &machine, const input_seq *seq, input_item_class *itemclass_ptr) -{ - input_item_class itemclasszero = ITEM_CLASS_ABSOLUTE; - input_item_class itemclass = ITEM_CLASS_INVALID; - int result = 0; - int invert = FALSE; - int enable = TRUE; - int codenum; - - /* iterate over all of the codes */ - for (codenum = 0; codenum < ARRAY_LENGTH(seq->code); codenum++) - { - input_code code = seq->code[codenum]; - - /* handle NOT */ - if (code == SEQCODE_NOT) - invert = TRUE; - - /* handle OR and END */ - else if (code == SEQCODE_OR || code == SEQCODE_END) - { - /* if we have a positive result from the previous set, we're done */ - if (itemclass != ITEM_CLASS_INVALID || code == SEQCODE_END) - break; - - /* otherwise, reset our state */ - result = 0; - invert = FALSE; - enable = TRUE; - } - - /* handle everything else only if we're still enabled */ - else if (enable) - { - /* switch codes serve as enables */ - if (INPUT_CODE_ITEMCLASS(code) == ITEM_CLASS_SWITCH) - { - /* AND against previous digital codes */ - if (enable) - enable &= input_code_pressed(machine, code) ^ invert; - } - - /* non-switch codes are analog values */ - else - { - INT32 value = input_code_value(machine, code); - - /* if we got a 0 value, don't do anything except remember the first type */ - if (value == 0) - { - if (itemclasszero == ITEM_CLASS_INVALID) - itemclasszero = INPUT_CODE_ITEMCLASS(code); - } - - /* non-zero absolute values stick */ - else if (INPUT_CODE_ITEMCLASS(code) == ITEM_CLASS_ABSOLUTE) - { - itemclass = ITEM_CLASS_ABSOLUTE; - result = value; - } - - /* non-zero relative values accumulate */ - else if (INPUT_CODE_ITEMCLASS(code) == ITEM_CLASS_RELATIVE) - { - itemclass = ITEM_CLASS_RELATIVE; - result += value; - } - } - - /* clear the invert flag */ - invert = FALSE; - } - } - - /* if the caller wants to know the type, provide it */ - if (itemclass_ptr != NULL) - *itemclass_ptr = (result == 0) ? itemclasszero : itemclass; - return result; -} - - - -/*************************************************************************** - SEQUENCE POLLING -***************************************************************************/ - -/*------------------------------------------------- - input_seq_poll_start - begin polling for a - new sequence of the given itemclass --------------------------------------------------*/ - -void input_seq_poll_start(running_machine &machine, input_item_class itemclass, const input_seq *startseq) -{ - input_code dummycode; - - assert(itemclass == ITEM_CLASS_SWITCH || itemclass == ITEM_CLASS_ABSOLUTE || itemclass == ITEM_CLASS_RELATIVE); - - /* reset the recording count and the clock */ - record_last = 0; - record_class = itemclass; - - /* grab the starting sequence to append to */ - if (startseq != NULL) - record_seq = *startseq; - else - input_seq_set_0(&record_seq); - - /* append an OR if this is not a NULL sequence */ - if (input_seq_length(&record_seq) > 0) - input_seq_append(&record_seq, SEQCODE_OR); - - /* flush out any goobers */ - dummycode = (record_class == ITEM_CLASS_SWITCH) ? input_code_poll_switches(machine, TRUE) : input_code_poll_axes(machine, TRUE); - while (dummycode != INPUT_CODE_INVALID) - dummycode = (record_class == ITEM_CLASS_SWITCH) ? input_code_poll_switches(machine, FALSE) : input_code_poll_axes(machine, FALSE); -} - - -/*------------------------------------------------- - input_seq_poll - continue polling --------------------------------------------------*/ - -int input_seq_poll(running_machine &machine, input_seq *finalseq) -{ - input_code lastcode = input_seq_get_last(&record_seq); - int has_or = FALSE; - input_code newcode; - - /* switch case: see if we have a new code to process */ - if (record_class == ITEM_CLASS_SWITCH) - { - newcode = input_code_poll_switches(machine, FALSE); - if (newcode != INPUT_CODE_INVALID) - { - /* if code is duplicate, toggle the NOT state on the code */ - if (input_seq_length(&record_seq) > 0 && newcode == lastcode) - { - /* back up over the code */ - input_seq_backspace(&record_seq); - - /* if there was a NOT preceding it, just delete it, otherwise append one */ - if (input_seq_get_last(&record_seq) == SEQCODE_NOT) - input_seq_backspace(&record_seq); - else - input_seq_append(&record_seq, SEQCODE_NOT); - } - } - } - - /* absolute/relative case: see if we have an analog change of sufficient amount */ - else - { - if (lastcode == SEQCODE_OR) - { - lastcode = input_seq_get_last_but_one(&record_seq); - has_or = TRUE; - } - newcode = input_code_poll_axes(machine, FALSE); - - /* if the last code doesn't match absolute/relative of this code, ignore the new one */ - if ((INPUT_CODE_ITEMCLASS(lastcode) == ITEM_CLASS_ABSOLUTE && INPUT_CODE_ITEMCLASS(newcode) != ITEM_CLASS_ABSOLUTE) || - (INPUT_CODE_ITEMCLASS(lastcode) == ITEM_CLASS_RELATIVE && INPUT_CODE_ITEMCLASS(newcode) != ITEM_CLASS_RELATIVE)) - newcode = INPUT_CODE_INVALID; - - if (newcode != INPUT_CODE_INVALID) - { - /* if code is duplicate and an absolute control, toggle to half axis */ - if (input_seq_length(&record_seq) > 0 && INPUT_CODE_ITEMCLASS(newcode) == ITEM_CLASS_ABSOLUTE) - { - if (newcode == INPUT_CODE_SET_MODIFIER(lastcode, ITEM_MODIFIER_NONE)) - { - /* increment the modifier, wrapping back to none */ - input_item_modifier oldmod = INPUT_CODE_MODIFIER(lastcode); - input_item_modifier newmod = (oldmod < ITEM_MODIFIER_NEG) ? (input_item_modifier)(oldmod + 1) : ITEM_MODIFIER_NONE; - newcode = INPUT_CODE_SET_MODIFIER(newcode, newmod); - - /* back up over the previous code so we can re-append */ - if (has_or) - input_seq_backspace(&record_seq); - input_seq_backspace(&record_seq); - } - } - } - } - - /* if we got a new code to append it, append it and reset the timer */ - if (newcode != INPUT_CODE_INVALID) - { - input_seq_append(&record_seq, newcode); - record_last = osd_ticks(); - } - - /* if we're recorded at least one item and the RECORD_TIME has passed, we're done */ - if (record_last != 0 && (osd_ticks() > record_last + RECORD_TIME)) - { - /* if the final result is invalid, reset to nothing */ - if (!input_seq_is_valid(&record_seq)) - input_seq_set_0(&record_seq); - - /* return TRUE to indicate that we are finished */ - *finalseq = record_seq; - return TRUE; - } - - /* return FALSE to indicate we are still polling */ - return FALSE; -} - - - -/*************************************************************************** - STRINGS AND TOKENIZATION -***************************************************************************/ - -/*------------------------------------------------- - input_seq_name - generate the friendly name - of a sequence --------------------------------------------------*/ - -astring &input_seq_name(running_machine &machine, astring &string, const input_seq *seq) -{ - astring codestr; - int codenum, copycodenum; - input_seq seqcopy; - - /* walk the sequence first, removing any pieces that are invalid */ - for (codenum = copycodenum = 0; codenum < ARRAY_LENGTH(seq->code) && seq->code[codenum] != SEQCODE_END; codenum++) - { - input_code code = seq->code[codenum]; - - /* if this is a code item which is not valid, don't copy it and remove any preceding ORs/NOTs */ - if (!INPUT_CODE_IS_INTERNAL(code) && !input_code_name(machine, codestr, code)) - { - while (copycodenum > 0 && INPUT_CODE_IS_INTERNAL(seqcopy.code[copycodenum - 1])) - copycodenum--; - } - else if (copycodenum > 0 || !INPUT_CODE_IS_INTERNAL(code)) - seqcopy.code[copycodenum++] = code; - } - seqcopy.code[copycodenum] = SEQCODE_END; - - /* special case: empty */ - if (copycodenum == 0) - return string.cpy((seq->code[0] == SEQCODE_END) ? "None" : "n/a"); - - /* start with an empty buffer */ - string.reset(); - - /* loop until we hit the end */ - for (codenum = 0; codenum < ARRAY_LENGTH(seqcopy.code) && seqcopy.code[codenum] != SEQCODE_END; codenum++) - { - input_code code = seqcopy.code[codenum]; - - /* append a space if not the first code */ - if (codenum != 0) - string.cat(" "); - - /* handle OR/NOT codes here */ - if (code == SEQCODE_OR) - string.cat("or"); - else if (code == SEQCODE_NOT) - string.cat("not"); - - /* otherwise, assume it is an input code and ask the input system to generate it */ - else - string.cat(input_code_name(machine, codestr, code)); - } - - return string; -} - - -/*------------------------------------------------- - input_seq_to_tokens - generate the tokenized - form of a sequence --------------------------------------------------*/ - -astring &input_seq_to_tokens(running_machine &machine, astring &string, const input_seq *seq) -{ - astring codestr; - int codenum; - - /* start with an empty buffer */ - string.reset(); - - /* loop until we hit the end */ - for (codenum = 0; codenum < ARRAY_LENGTH(seq->code) && seq->code[codenum] != SEQCODE_END; codenum++) - { - input_code code = seq->code[codenum]; - - /* append a space if not the first code */ - if (codenum != 0) - string.cat(" "); - - /* handle OR/NOT codes here */ - if (code == SEQCODE_OR) - string.cat("OR"); - else if (code == SEQCODE_NOT) - string.cat("NOT"); - else if (code == SEQCODE_DEFAULT) - string.cat("DEFAULT"); - - /* otherwise, assume it is an input code and ask the input system to generate it */ - else - string.cat(input_code_to_token(machine, codestr, code)); - } - - return string; -} - - -/*------------------------------------------------- - input_seq_from_tokens - generate the tokenized - form of a sequence --------------------------------------------------*/ - -int input_seq_from_tokens(running_machine &machine, const char *string, input_seq *seq) -{ - char *strcopy = auto_alloc_array(machine, char, strlen(string) + 1); - char *str = strcopy; - int result = FALSE; - - /* start with a blank sequence */ - input_seq_set_0(seq); - - /* loop until we're done */ - strcpy(strcopy, string); - while (1) - { - input_code code; - char origspace; - char *strtemp; - - /* trim any leading spaces */ - while (*str != 0 && isspace((UINT8)*str)) - str++; - - /* bail if we're done */ - if (*str == 0) - { - result = TRUE; - break; - } - - /* find the end of the token and make it upper-case along the way */ - for (strtemp = str; *strtemp != 0 && !isspace((UINT8)*strtemp); strtemp++) - *strtemp = toupper((UINT8)*strtemp); - origspace = *strtemp; - *strtemp = 0; - - /* look for common stuff */ - if (strcmp(str, "OR") == 0) - code = SEQCODE_OR; - else if (strcmp(str, "NOT") == 0) - code = SEQCODE_NOT; - else if (strcmp(str, "DEFAULT") == 0) - code = SEQCODE_DEFAULT; - else - code = input_code_from_token(machine, str); - - /* translate and add to the sequence */ - input_seq_append(seq, code); - - /* advance */ - if (origspace == 0) - { - result = TRUE; - break; - } - str = strtemp + 1; - } - - auto_free(machine, strcopy); - return result; -} - - - -/*************************************************************************** - INTERNAL FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - input_seq_is_valid - return TRUE if a given - sequence is valid --------------------------------------------------*/ - -static int input_seq_is_valid(const input_seq *seq) -{ - input_item_class lastclass = ITEM_CLASS_INVALID; - input_code lastcode = INPUT_CODE_INVALID; - int positive_code_count = 0; - int seqnum; - - /* scan the sequence for valid codes */ - for (seqnum = 0; seqnum < ARRAY_LENGTH(seq->code); seqnum++) - { - input_code code = seq->code[seqnum]; - - /* invalid codes are invalid */ - if (code == INPUT_CODE_INVALID) - return FALSE; - - /* if we hit an OR or the end, validate the previous chunk */ - if (code == SEQCODE_OR || code == SEQCODE_END) - { - /* must be at least one positive code */ - if (positive_code_count == 0) - return FALSE; - - /* last code must not have been an internal code */ - if (INPUT_CODE_IS_INTERNAL(lastcode)) - return FALSE; - - /* if this is the end, we're ok */ - if (code == SEQCODE_END) - return TRUE; - - /* reset the state for the next chunk */ - positive_code_count = 0; - lastclass = ITEM_CLASS_INVALID; - } - - /* if we hit a NOT, make sure we don't have a double */ - else if (code == SEQCODE_NOT) - { - if (lastcode == SEQCODE_NOT) - return FALSE; - } - - /* anything else */ - else - { - input_item_class itemclass = INPUT_CODE_ITEMCLASS(code); - - /* count positive codes */ - if (lastcode != SEQCODE_NOT) - positive_code_count++; - - /* non-switch items can't have a NOT */ - if (itemclass != ITEM_CLASS_SWITCH && lastcode == SEQCODE_NOT) - return FALSE; - - /* absolute/relative items must all be the same class */ - if ((lastclass == ITEM_CLASS_ABSOLUTE && itemclass != ITEM_CLASS_ABSOLUTE) || - (lastclass == ITEM_CLASS_RELATIVE && itemclass != ITEM_CLASS_RELATIVE)) - return FALSE; - } - - /* remember the last code */ - lastcode = code; - } - - /* if we got here, we were missing an END token; fail */ - return FALSE; -} diff --git a/src/emu/inputseq.h b/src/emu/inputseq.h deleted file mode 100644 index d0d344ee12d..00000000000 --- a/src/emu/inputseq.h +++ /dev/null @@ -1,207 +0,0 @@ -/*************************************************************************** - - inputseq.h - - Input sequence abstractions. - - Copyright Nicola Salmoria and the MAME Team. - Visit http://mamedev.org for licensing and usage restrictions. - -***************************************************************************/ - -#pragma once - -#ifndef __EMU_H__ -#error Dont include this file directly; include emu.h instead. -#endif - -#ifndef __INPUTSEQ_H__ -#define __INPUTSEQ_H__ - - -/*************************************************************************** - CONSTANTS -***************************************************************************/ - -/* additional expanded input codes for sequences */ -enum -{ - /* special codes */ - SEQCODE_END = INTERNAL_CODE(0), - SEQCODE_DEFAULT = INTERNAL_CODE(1), - SEQCODE_NOT = INTERNAL_CODE(2), - SEQCODE_OR = INTERNAL_CODE(3) -}; - - - -/*************************************************************************** - TYPE DEFINITIONS -***************************************************************************/ - -/* a sequence of inputs */ -typedef struct _input_seq input_seq; -struct _input_seq -{ - input_code code[16]; -}; - - - -/*************************************************************************** - MACROS -***************************************************************************/ - -#define SEQ_DEF_7(a,b,c,d,e,f,g) {{ a, b, c, d, e, f, g, SEQCODE_END }} -#define SEQ_DEF_6(a,b,c,d,e,f) {{ a, b, c, d, e, f, SEQCODE_END }} -#define SEQ_DEF_5(a,b,c,d,e) {{ a, b, c, d, e, SEQCODE_END }} -#define SEQ_DEF_4(a,b,c,d) {{ a, b, c, d, SEQCODE_END }} -#define SEQ_DEF_3(a,b,c) {{ a, b, c, SEQCODE_END }} -#define SEQ_DEF_2(a,b) {{ a, b, SEQCODE_END }} -#define SEQ_DEF_1(a) {{ a, SEQCODE_END }} -#define SEQ_DEF_0 {{ SEQCODE_END }} - - - -/*************************************************************************** - FUNCTION PROTOTYPES -***************************************************************************/ - - -/* ----- state queries ----- */ - -/* return TRUE if the given switch sequence has been pressed */ -int input_seq_pressed(running_machine &machine, const input_seq *seq); - -/* return the value of an axis sequence */ -INT32 input_seq_axis_value(running_machine &machine, const input_seq *seq, input_item_class *itemclass_ptr); - - - -/* ----- sequence polling ----- */ - -/* begin polling for a new sequence of the given itemclass */ -void input_seq_poll_start(running_machine &machine, input_item_class itemclass, const input_seq *startseq); - -/* continue polling for a sequence */ -int input_seq_poll(running_machine &machine, input_seq *finalseq); - - - -/* ----- strings and tokenization ----- */ - -/* generate the friendly name of an input sequence */ -astring &input_seq_name(running_machine &machine, astring &string, const input_seq *seq); - -/* convert an input sequence to tokens, returning the length */ -astring &input_seq_to_tokens(running_machine &machine, astring &string, const input_seq *seq); - -/* convert a set of tokens back to an input sequence */ -int input_seq_from_tokens(running_machine &machine, const char *string, input_seq *seq); - - - -/*************************************************************************** - INLINE FUNCTIONS -***************************************************************************/ - -/*------------------------------------------------- - input_seq_get_1 - fetch the first item of an - input sequence --------------------------------------------------*/ - -INLINE input_code input_seq_get_1(const input_seq *seq) -{ - return seq->code[0]; -} - - -/*------------------------------------------------- - input_seq_set_n - set a sequence of n codes - as an input sequence --------------------------------------------------*/ - -INLINE void input_seq_set_5(input_seq *seq, input_code code0, input_code code1, input_code code2, input_code code3, input_code code4) -{ - int codenum; - seq->code[0] = code0; - seq->code[1] = code1; - seq->code[2] = code2; - seq->code[3] = code3; - seq->code[4] = code4; - for (codenum = 5; codenum < ARRAY_LENGTH(seq->code); codenum++) - seq->code[codenum] = SEQCODE_END; -} - -INLINE void input_seq_set_4(input_seq *seq, input_code code0, input_code code1, input_code code2, input_code code3) -{ - input_seq_set_5(seq, code0, code1, code2, code3, SEQCODE_END); -} - -INLINE void input_seq_set_3(input_seq *seq, input_code code0, input_code code1, input_code code2) -{ - input_seq_set_5(seq, code0, code1, code2, SEQCODE_END, SEQCODE_END); -} - -INLINE void input_seq_set_2(input_seq *seq, input_code code0, input_code code1) -{ - input_seq_set_5(seq, code0, code1, SEQCODE_END, SEQCODE_END, SEQCODE_END); -} - -INLINE void input_seq_set_1(input_seq *seq, input_code code0) -{ - input_seq_set_5(seq, code0, SEQCODE_END, SEQCODE_END, SEQCODE_END, SEQCODE_END); -} - -INLINE void input_seq_set_0(input_seq *seq) -{ - input_seq_set_5(seq, SEQCODE_END, SEQCODE_END, SEQCODE_END, SEQCODE_END, SEQCODE_END); -} - - -/*------------------------------------------------- - input_seq_cmp - compare two input sequences --------------------------------------------------*/ - -INLINE int input_seq_cmp(const input_seq *seqa, const input_seq *seqb) -{ - int codenum; - for (codenum = 0; codenum < ARRAY_LENGTH(seqa->code); codenum++) - { - if (seqa->code[codenum] != seqb->code[codenum]) - return -1; - if (seqa->code[codenum] == SEQCODE_END) - break; - } - return 0; -} - - -/*------------------------------------------------- - input_seq_append_or - append a code to a - sequence; if the sequence is non-empty, insert - an OR before the new code --------------------------------------------------*/ - -INLINE void input_seq_append_or(input_seq *seq, input_code code) -{ - int codenum; - if (seq->code[0] == SEQCODE_END || seq->code[0] == SEQCODE_DEFAULT) - { - seq->code[0] = code; - seq->code[1] = SEQCODE_END; - } - else - { - for (codenum = 0; codenum < ARRAY_LENGTH(seq->code) - 2; codenum++) - if (seq->code[codenum] == SEQCODE_END) - { - seq->code[codenum++] = SEQCODE_OR; - seq->code[codenum++] = code; - seq->code[codenum++] = SEQCODE_END; - } - } -} - - -#endif /* __INPUTSEQ_H__ */ diff --git a/src/emu/machine.c b/src/emu/machine.c index 7d5c8efa1ce..8c2835e918a 100644 --- a/src/emu/machine.c +++ b/src/emu/machine.c @@ -167,6 +167,7 @@ running_machine::running_machine(const machine_config &_config, osd_interface &o m_scheduler(*this), m_cheat(NULL), m_render(NULL), + m_input(NULL), m_sound(NULL), m_video(NULL), m_debug_view(NULL), @@ -256,7 +257,7 @@ void running_machine::start() { // initialize basic can't-fail systems here config_init(*this); - input_init(*this); + m_input = auto_alloc(*this, input_manager(*this)); output_init(*this); palette_init(*this); m_render = auto_alloc(*this, render_manager(*this)); diff --git a/src/emu/machine.h b/src/emu/machine.h index 9fb7ad26498..01b2c665bd5 100644 --- a/src/emu/machine.h +++ b/src/emu/machine.h @@ -336,6 +336,7 @@ public: save_manager &save() { return m_save; } cheat_manager &cheat() const { assert(m_cheat != NULL); return *m_cheat; } render_manager &render() const { assert(m_render != NULL); return *m_render; } + input_manager &input() const { assert(m_input != NULL); return *m_input; } sound_manager &sound() const { assert(m_sound != NULL); return *m_sound; } video_manager &video() const { assert(m_video != NULL); return *m_video; } debug_view_manager &debug_view() const { assert(m_debug_view != NULL); return *m_debug_view; } @@ -459,6 +460,7 @@ private: // managers cheat_manager * m_cheat; // internal data from cheat.c render_manager * m_render; // internal data from render.c + input_manager * m_input; // internal data from input.c sound_manager * m_sound; // internal data from sound.c video_manager * m_video; // internal data from video.c debug_view_manager * m_debug_view; // internal data from debugvw.c diff --git a/src/emu/machine/68681.c b/src/emu/machine/68681.c index eaf8265458d..fca5530bca8 100644 --- a/src/emu/machine/68681.c +++ b/src/emu/machine/68681.c @@ -541,14 +541,14 @@ READ8_DEVICE_HANDLER(duart68681_r) { r = 0xff; #if 0 - if (input_code_pressed(device->machine(), KEYCODE_1)) r ^= 0x0001; - if (input_code_pressed(device->machine(), KEYCODE_2)) r ^= 0x0002; - if (input_code_pressed(device->machine(), KEYCODE_3)) r ^= 0x0004; - if (input_code_pressed(device->machine(), KEYCODE_4)) r ^= 0x0008; - if (input_code_pressed(device->machine(), KEYCODE_5)) r ^= 0x0010; - if (input_code_pressed(device->machine(), KEYCODE_6)) r ^= 0x0020; - if (input_code_pressed(device->machine(), KEYCODE_7)) r ^= 0x0040; - if (input_code_pressed(device->machine(), KEYCODE_8)) r ^= 0x0080; + if (device->machine().input().code_pressed(KEYCODE_1)) r ^= 0x0001; + if (device->machine().input().code_pressed(KEYCODE_2)) r ^= 0x0002; + if (device->machine().input().code_pressed(KEYCODE_3)) r ^= 0x0004; + if (device->machine().input().code_pressed(KEYCODE_4)) r ^= 0x0008; + if (device->machine().input().code_pressed(KEYCODE_5)) r ^= 0x0010; + if (device->machine().input().code_pressed(KEYCODE_6)) r ^= 0x0020; + if (device->machine().input().code_pressed(KEYCODE_7)) r ^= 0x0040; + if (device->machine().input().code_pressed(KEYCODE_8)) r ^= 0x0080; #endif } break; diff --git a/src/emu/mconfig.c b/src/emu/mconfig.c index 5313ddbee3f..e3e6e971b0f 100644 --- a/src/emu/mconfig.c +++ b/src/emu/mconfig.c @@ -71,19 +71,18 @@ machine_config::machine_config(const game_driver &gamedrv, emu_options &options) device_slot_interface *slot = NULL; for (bool gotone = m_devicelist.first(slot); gotone; gotone = slot->next(slot)) { - device_t &owner = slot->device(); const slot_interface *intf = slot->get_slot_interfaces(); if (intf != NULL) { - const char *selval = options.value(owner.tag()); - if (options.seqid(owner.tag())==0) { + device_t &owner = slot->device(); + const char *selval = options.value(owner.tag()); + if (options.seqid(owner.tag()) == 0) selval = slot->get_default_card(); - } - if (selval) { + + if (selval != NULL) for (int i = 0; intf[i].name != NULL; i++) if (strcmp(selval, intf[i].name) == 0) device_add(&owner, intf[i].name, intf[i].devtype, 0); - } } } diff --git a/src/emu/sound/k054539.c b/src/emu/sound/k054539.c index b8fce4affe6..75acd6caa5b 100644 --- a/src/emu/sound/k054539.c +++ b/src/emu/sound/k054539.c @@ -384,7 +384,7 @@ else double gc_f0; int gc_i, gc_j, gc_k, gc_l; - if (input_code_pressed_once(device->machine(), KEYCODE_DEL_PAD)) + if (device->machine().input().code_pressed_once(KEYCODE_DEL_PAD)) { gc_active ^= 1; if (!gc_active) popmessage(NULL); @@ -392,23 +392,23 @@ else if (gc_active) { - if (input_code_pressed_once(device->machine(), KEYCODE_0_PAD)) gc_chip ^= 1; + if (device->machine().input().code_pressed_once(KEYCODE_0_PAD)) gc_chip ^= 1; gc_i = gc_pos[gc_chip]; gc_j = 0; - if (input_code_pressed_once(device->machine(), KEYCODE_4_PAD)) { gc_i--; gc_j = 1; } - if (input_code_pressed_once(device->machine(), KEYCODE_6_PAD)) { gc_i++; gc_j = 1; } + if (device->machine().input().code_pressed_once(KEYCODE_4_PAD)) { gc_i--; gc_j = 1; } + if (device->machine().input().code_pressed_once(KEYCODE_6_PAD)) { gc_i++; gc_j = 1; } if (gc_j) { gc_i &= 7; gc_pos[gc_chip] = gc_i; } - if (input_code_pressed_once(device->machine(), KEYCODE_5_PAD)) + if (device->machine().input().code_pressed_once(KEYCODE_5_PAD)) info->k054539_gain[gc_i] = 1.0; else { gc_fptr = &info->k054539_gain[gc_i]; gc_f0 = *gc_fptr; gc_j = 0; - if (input_code_pressed_once(device->machine(), KEYCODE_2_PAD)) { gc_f0 -= 0.1; gc_j = 1; } - if (input_code_pressed_once(device->machine(), KEYCODE_8_PAD)) { gc_f0 += 0.1; gc_j = 1; } + if (device->machine().input().code_pressed_once(KEYCODE_2_PAD)) { gc_f0 -= 0.1; gc_j = 1; } + if (device->machine().input().code_pressed_once(KEYCODE_8_PAD)) { gc_f0 += 0.1; gc_j = 1; } if (gc_j) { if (gc_f0 < 0) gc_f0 = 0; *gc_fptr = gc_f0; } } diff --git a/src/emu/sound/sn76477.c b/src/emu/sound/sn76477.c index 1fd82bc3de5..85016d6dfc8 100644 --- a/src/emu/sound/sn76477.c +++ b/src/emu/sound/sn76477.c @@ -1988,7 +1988,7 @@ static STREAM_UPDATE( SN76477_update ) #if TEST_MODE - static int recursing = 0; /* we need to prevent recursion since enable_w calls input_code_pressed_once(device->machine(), KEYCODE_SPACE->update */ + static int recursing = 0; /* we need to prevent recursion since enable_w calls device->machine().input().code_pressed_once(KEYCODE_SPACE->update */ if () && !recursing) { diff --git a/src/emu/ui.c b/src/emu/ui.c index e1f4c47a919..3249973c5d8 100644 --- a/src/emu/ui.c +++ b/src/emu/ui.c @@ -319,8 +319,8 @@ int ui_display_startup_screens(running_machine &machine, int first_time, int sho } /* clear the input memory */ - input_code_poll_switches(machine, TRUE); - while (input_code_poll_switches(machine, FALSE) != INPUT_CODE_INVALID) ; + machine.input().reset_polling(); + while (machine.input().poll_switches() != INPUT_CODE_INVALID) ; /* loop while we have a handler */ while (ui_handler_callback != handler_ingame && !machine.scheduled_event_pending() && !ui_menu_is_force_game_select()) @@ -1135,11 +1135,11 @@ static UINT32 handler_messagebox_ok(running_machine &machine, render_container * ui_draw_text_box(container, messagebox_text, JUSTIFY_LEFT, 0.5f, 0.5f, messagebox_backcolor); /* an 'O' or left joystick kicks us to the next state */ - if (state == 0 && (input_code_pressed_once(machine, KEYCODE_O) || ui_input_pressed(machine, IPT_UI_LEFT))) + if (state == 0 && (machine.input().code_pressed_once(KEYCODE_O) || ui_input_pressed(machine, IPT_UI_LEFT))) state++; /* a 'K' or right joystick exits the state */ - else if (state == 1 && (input_code_pressed_once(machine, KEYCODE_K) || ui_input_pressed(machine, IPT_UI_RIGHT))) + else if (state == 1 && (machine.input().code_pressed_once(KEYCODE_K) || ui_input_pressed(machine, IPT_UI_RIGHT))) state = UI_HANDLER_CANCEL; /* if the user cancels, exit out completely */ @@ -1172,7 +1172,7 @@ static UINT32 handler_messagebox_anykey(running_machine &machine, render_contain } /* if any key is pressed, just exit */ - else if (input_code_poll_switches(machine, FALSE) != INPUT_CODE_INVALID) + else if (machine.input().poll_switches() != INPUT_CODE_INVALID) state = UI_HANDLER_CANCEL; return state; @@ -1205,10 +1205,10 @@ static void process_natural_keyboard(running_machine &machine) { /* identify this keycode */ itemid = non_char_keys[i]; - code = input_code_from_input_item_id(machine, itemid); + code = machine.input().code_from_itemid(itemid); /* ...and determine if it is pressed */ - pressed = input_code_pressed(machine, code); + pressed = machine.input().code_pressed(code); /* figure out whey we are in the key_down map */ key_down_ptr = &non_char_keys_down[i / 8]; @@ -1220,7 +1220,7 @@ static void process_natural_keyboard(running_machine &machine) *key_down_ptr |= key_down_mask; /* post the key */ - inputx_postc(machine, UCHAR_MAMEKEY_BEGIN + code); + inputx_postc(machine, UCHAR_MAMEKEY_BEGIN + code.item_id()); } else if (!pressed && (*key_down_ptr & key_down_mask)) { @@ -1402,7 +1402,7 @@ static UINT32 handler_ingame(running_machine &machine, render_container *contain if (ui_input_pressed(machine, IPT_UI_PAUSE)) { /* with a shift key, it is single step */ - if (is_paused && (input_code_pressed(machine, KEYCODE_LSHIFT) || input_code_pressed(machine, KEYCODE_RSHIFT))) + if (is_paused && (machine.input().code_pressed(KEYCODE_LSHIFT) || machine.input().code_pressed(KEYCODE_RSHIFT))) { single_step = TRUE; machine.resume(); @@ -1519,17 +1519,17 @@ static UINT32 handler_load_save(running_machine &machine, render_container *cont } /* check for A-Z or 0-9 */ - for (code = KEYCODE_A; code <= (input_code)KEYCODE_Z; code++) - if (input_code_pressed_once(machine, code)) - file = code - KEYCODE_A + 'a'; + for (input_item_id id = ITEM_ID_A; id <= ITEM_ID_Z; id++) + if (machine.input().code_pressed_once(input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, id))) + file = id - ITEM_ID_A + 'a'; if (file == 0) - for (code = KEYCODE_0; code <= (input_code)KEYCODE_9; code++) - if (input_code_pressed_once(machine, code)) - file = code - KEYCODE_0 + '0'; + for (input_item_id id = ITEM_ID_0; id <= ITEM_ID_9; id++) + if (machine.input().code_pressed_once(input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, id))) + file = id - ITEM_ID_0 + '0'; if (file == 0) - for (code = KEYCODE_0_PAD; code <= (input_code)KEYCODE_9_PAD; code++) - if (input_code_pressed_once(machine, code)) - file = code - KEYCODE_0_PAD + '0'; + for (input_item_id id = ITEM_ID_0_PAD; id <= ITEM_ID_9_PAD; id++) + if (machine.input().code_pressed_once(input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, id))) + file = id - ITEM_ID_0_PAD + '0'; if (file == 0) return state; diff --git a/src/emu/uigfx.c b/src/emu/uigfx.c index 47bae8c872e..baeaecdd814 100644 --- a/src/emu/uigfx.c +++ b/src/emu/uigfx.c @@ -992,8 +992,8 @@ static void tilemap_handle_keys(running_machine &machine, ui_gfx_state *state, i /* handle navigation (up,down,left,right) */ step = 8; - if (input_code_pressed(machine, KEYCODE_LSHIFT)) step = 1; - if (input_code_pressed(machine, KEYCODE_LCONTROL)) step = 64; + if (machine.input().code_pressed(KEYCODE_LSHIFT)) step = 1; + if (machine.input().code_pressed(KEYCODE_LCONTROL)) step = 64; if (ui_input_pressed_repeat(machine, IPT_UI_UP, 4)) state->tilemap.yoffs -= step; if (ui_input_pressed_repeat(machine, IPT_UI_DOWN, 4)) diff --git a/src/emu/uiinput.c b/src/emu/uiinput.c index 623d9347e2c..f4bc645d8bd 100644 --- a/src/emu/uiinput.c +++ b/src/emu/uiinput.c @@ -103,7 +103,7 @@ void ui_input_frame_update(running_machine &machine) /* update the state of all the UI keys */ for (code = __ipt_ui_start; code <= __ipt_ui_end; code++) { - int pressed = input_seq_pressed(machine, input_type_seq(machine, code, 0, SEQ_TYPE_STANDARD)); + int pressed = machine.input().seq_pressed(input_type_seq(machine, code, 0, SEQ_TYPE_STANDARD)); if (!pressed || uidata->seqpressed[code] != SEQ_PRESSED_RESET) uidata->seqpressed[code] = pressed; } diff --git a/src/emu/uimenu.c b/src/emu/uimenu.c index 2fff505605f..929a385dff8 100644 --- a/src/emu/uimenu.c +++ b/src/emu/uimenu.c @@ -329,12 +329,12 @@ static void menu_settings_custom_render(running_machine &machine, ui_menu *menu, to the default sequence for the given field -------------------------------------------------*/ -INLINE const input_seq *get_field_default_seq(input_field_config *field, input_seq_type seqtype) +INLINE const input_seq &get_field_default_seq(input_field_config *field, input_seq_type seqtype) { - if (input_seq_get_1(&field->seq[seqtype]) == SEQCODE_DEFAULT) + if (field->seq[seqtype].is_default()) return input_type_seq(field->machine(), field->type, field->player, seqtype); else - return &field->seq[seqtype]; + return field->seq[seqtype]; } @@ -343,15 +343,15 @@ INLINE const input_seq *get_field_default_seq(input_field_config *field, input_s and the default item -------------------------------------------------*/ -INLINE void toggle_none_default(input_seq *selected_seq, input_seq *original_seq, const input_seq *selected_defseq) +INLINE void toggle_none_default(input_seq &selected_seq, input_seq &original_seq, const input_seq &selected_defseq) { /* if we used to be "none", toggle to the default value */ - if (input_seq_get_1(original_seq) == SEQCODE_END) - *selected_seq = *selected_defseq; + if (original_seq.length() == 0) + selected_seq = selected_defseq; /* otherwise, toggle to "none" */ else - input_seq_set_1(selected_seq, SEQCODE_END); + selected_seq.reset(); } @@ -1787,7 +1787,6 @@ static void menu_input_general(running_machine &machine, ui_menu *menu, void *pa static void menu_input_general_populate(running_machine &machine, ui_menu *menu, input_menu_state *menustate, int group) { input_item_data *itemlist = NULL; - const input_type_desc *typedesc; int suborder[SEQ_TYPE_TOTAL]; astring tempstring; int sortorder = 1; @@ -1798,10 +1797,10 @@ static void menu_input_general_populate(running_machine &machine, ui_menu *menu, suborder[SEQ_TYPE_INCREMENT] = 2; /* iterate over the input ports and add menu items */ - for (typedesc = input_type_list(machine); typedesc != NULL; typedesc = typedesc->next) + for (input_type_entry *entry = input_type_list(machine).first(); entry != NULL; entry = entry->next()) /* add if we match the group and we have a valid name */ - if (typedesc->group == group && typedesc->name != NULL && typedesc->name[0] != 0) + if (entry->group == group && entry->name != NULL && entry->name[0] != 0) { input_seq_type seqtype; @@ -1812,13 +1811,13 @@ static void menu_input_general_populate(running_machine &machine, ui_menu *menu, /* build an entry for the standard sequence */ input_item_data *item = (input_item_data *)ui_menu_pool_alloc(menu, sizeof(*item)); memset(item, 0, sizeof(*item)); - item->ref = typedesc; + item->ref = entry; item->seqtype = seqtype; - item->seq = *input_type_seq(machine, typedesc->type, typedesc->player, seqtype); - item->defseq = &typedesc->seq[seqtype]; + item->seq = input_type_seq(machine, entry->type, entry->player, seqtype); + item->defseq = &entry->defseq[seqtype]; item->sortorder = sortorder * 4 + suborder[seqtype]; - item->type = input_type_is_analog(typedesc->type) ? (INPUT_TYPE_ANALOG + seqtype) : INPUT_TYPE_DIGITAL; - item->name = typedesc->name; + item->type = input_type_is_analog(entry->type) ? (INPUT_TYPE_ANALOG + seqtype) : INPUT_TYPE_DIGITAL; + item->name = entry->name; item->next = itemlist; itemlist = item; @@ -1890,8 +1889,8 @@ static void menu_input_specific_populate(running_machine &machine, ui_menu *menu memset(item, 0, sizeof(*item)); item->ref = field; item->seqtype = seqtype; - item->seq = *input_field_seq(field, seqtype); - item->defseq = get_field_default_seq(field, seqtype); + item->seq = input_field_seq(field, seqtype); + item->defseq = &get_field_default_seq(field, seqtype); item->sortorder = sortorder + suborder[seqtype]; item->type = input_type_is_analog(field->type) ? (INPUT_TYPE_ANALOG + seqtype) : INPUT_TYPE_DIGITAL; item->name = name; @@ -1949,16 +1948,16 @@ static void menu_input_common(running_machine &machine, ui_menu *menu, void *par { menustate->pollingitem = NULL; menustate->record_next = FALSE; - toggle_none_default(&item->seq, &menustate->starting_seq, item->defseq); + toggle_none_default(item->seq, menustate->starting_seq, *item->defseq); seqchangeditem = item; } /* poll again; if finished, update the sequence */ - if (input_seq_poll(machine, &newseq)) + if (machine.input().seq_poll()) { menustate->pollingitem = NULL; menustate->record_next = TRUE; - item->seq = newseq; + item->seq = machine.input().seq_poll_final(); seqchangeditem = item; } } @@ -1974,13 +1973,13 @@ static void menu_input_common(running_machine &machine, ui_menu *menu, void *par menustate->pollingitem = item; menustate->last_sortorder = item->sortorder; menustate->starting_seq = item->seq; - input_seq_poll_start(machine, (item->type == INPUT_TYPE_ANALOG) ? ITEM_CLASS_ABSOLUTE : ITEM_CLASS_SWITCH, menustate->record_next ? &item->seq : NULL); + machine.input().seq_poll_start((item->type == INPUT_TYPE_ANALOG) ? ITEM_CLASS_ABSOLUTE : ITEM_CLASS_SWITCH, menustate->record_next ? &item->seq : NULL); invalidate = TRUE; break; /* if the clear key was pressed, reset the selected item */ case IPT_UI_CLEAR: - toggle_none_default(&item->seq, &item->seq, item->defseq); + toggle_none_default(item->seq, item->seq, *item->defseq); menustate->record_next = FALSE; seqchangeditem = item; break; @@ -1998,8 +1997,8 @@ static void menu_input_common(running_machine &machine, ui_menu *menu, void *par /* update a general input */ if (parameter != NULL) { - const input_type_desc *typedesc = (const input_type_desc *)seqchangeditem->ref; - input_type_set_seq(machine, typedesc->type, typedesc->player, seqchangeditem->seqtype, &seqchangeditem->seq); + const input_type_entry *entry = (const input_type_entry *)seqchangeditem->ref; + input_type_set_seq(machine, entry->type, entry->player, seqchangeditem->seqtype, &seqchangeditem->seq); } /* update a game-specific input */ @@ -2096,8 +2095,8 @@ static void menu_input_populate_and_sort(running_machine &machine, ui_menu *menu /* otherwise, generate the sequence name and invert it if different from the default */ else { - input_seq_name(machine, subtext, &item->seq); - flags |= input_seq_cmp(&item->seq, item->defseq) ? MENU_FLAG_INVERT : 0; + machine.input().seq_name(subtext, item->seq); + flags |= (item->seq != *item->defseq) ? MENU_FLAG_INVERT : 0; } /* add the item */ @@ -2418,12 +2417,12 @@ static void menu_analog(running_machine &machine, ui_menu *menu, void *parameter /* left decrements */ case IPT_UI_LEFT: - newval -= input_code_pressed(machine, KEYCODE_LSHIFT) ? 10 : 1; + newval -= machine.input().code_pressed(KEYCODE_LSHIFT) ? 10 : 1; break; /* right increments */ case IPT_UI_RIGHT: - newval += input_code_pressed(machine, KEYCODE_LSHIFT) ? 10 : 1; + newval += machine.input().code_pressed(KEYCODE_LSHIFT) ? 10 : 1; break; } @@ -2925,11 +2924,11 @@ static void menu_sliders(running_machine &machine, ui_menu *menu, void *paramete /* decrease value */ case IPT_UI_LEFT: - if (input_code_pressed(machine, KEYCODE_LALT) || input_code_pressed(machine, KEYCODE_RALT)) + if (machine.input().code_pressed(KEYCODE_LALT) || machine.input().code_pressed(KEYCODE_RALT)) increment = -1; - else if (input_code_pressed(machine, KEYCODE_LSHIFT) || input_code_pressed(machine, KEYCODE_RSHIFT)) + else if (machine.input().code_pressed(KEYCODE_LSHIFT) || machine.input().code_pressed(KEYCODE_RSHIFT)) increment = (slider->incval > 10) ? -(slider->incval / 10) : -1; - else if (input_code_pressed(machine, KEYCODE_LCONTROL) || input_code_pressed(machine, KEYCODE_RCONTROL)) + else if (machine.input().code_pressed(KEYCODE_LCONTROL) || machine.input().code_pressed(KEYCODE_RCONTROL)) increment = -slider->incval * 10; else increment = -slider->incval; @@ -2937,11 +2936,11 @@ static void menu_sliders(running_machine &machine, ui_menu *menu, void *paramete /* increase value */ case IPT_UI_RIGHT: - if (input_code_pressed(machine, KEYCODE_LALT) || input_code_pressed(machine, KEYCODE_RALT)) + if (machine.input().code_pressed(KEYCODE_LALT) || machine.input().code_pressed(KEYCODE_RALT)) increment = 1; - else if (input_code_pressed(machine, KEYCODE_LSHIFT) || input_code_pressed(machine, KEYCODE_RSHIFT)) + else if (machine.input().code_pressed(KEYCODE_LSHIFT) || machine.input().code_pressed(KEYCODE_RSHIFT)) increment = (slider->incval > 10) ? (slider->incval / 10) : 1; - else if (input_code_pressed(machine, KEYCODE_LCONTROL) || input_code_pressed(machine, KEYCODE_RCONTROL)) + else if (machine.input().code_pressed(KEYCODE_LCONTROL) || machine.input().code_pressed(KEYCODE_RCONTROL)) increment = slider->incval * 10; else increment = slider->incval; @@ -3354,12 +3353,12 @@ static void menu_crosshair(running_machine &machine, ui_menu *menu, void *parame /* left decrements */ case IPT_UI_LEFT: - newval -= input_code_pressed(machine, KEYCODE_LSHIFT) ? 10 : 1; + newval -= machine.input().code_pressed(KEYCODE_LSHIFT) ? 10 : 1; break; /* right increments */ case IPT_UI_RIGHT: - newval += input_code_pressed(machine, KEYCODE_LSHIFT) ? 10 : 1; + newval += machine.input().code_pressed(KEYCODE_LSHIFT) ? 10 : 1; break; } diff --git a/src/emu/video/psx.c b/src/emu/video/psx.c index ed0bff4f189..d4479889f90 100644 --- a/src/emu/video/psx.c +++ b/src/emu/video/psx.c @@ -249,10 +249,10 @@ void psxgpu_device::DebugMeshEnd( void ) void psxgpu_device::DebugCheckKeys( void ) { - if( input_code_pressed_once( machine(), KEYCODE_M ) ) + if( machine().input().code_pressed_once( KEYCODE_M ) ) m_debug.b_mesh = !m_debug.b_mesh; - if( input_code_pressed_once( machine(), KEYCODE_V ) ) + if( machine().input().code_pressed_once( KEYCODE_V ) ) m_debug.b_texture = !m_debug.b_texture; if( m_debug.b_mesh || m_debug.b_texture ) @@ -265,7 +265,7 @@ void psxgpu_device::DebugCheckKeys( void ) else machine().primary_screen->set_visible_area( 0, n_screenwidth - 1, 0, n_screenheight - 1 ); - if( input_code_pressed_once( machine(), KEYCODE_I ) ) + if( machine().input().code_pressed_once( KEYCODE_I ) ) { if( m_debug.b_texture ) { @@ -293,7 +293,7 @@ void psxgpu_device::DebugCheckKeys( void ) } #if 0 - if( input_code_pressed_once( machine(), KEYCODE_D ) ) + if( machine().input().code_pressed_once( KEYCODE_D ) ) { FILE *f; int n_x; @@ -303,7 +303,7 @@ void psxgpu_device::DebugCheckKeys( void ) fprintf( f, "%04u,%04u = %04x\n", n_y, n_x, p_p_vram[ n_y ][ n_x ] ); fclose( f ); } - if( input_code_pressed_once( machine(), KEYCODE_S ) ) + if( machine().input().code_pressed_once( KEYCODE_S ) ) { FILE *f; popmessage( "saving..." ); @@ -312,7 +312,7 @@ void psxgpu_device::DebugCheckKeys( void ) fwrite( p_p_vram[ n_y ], 1024 * 2, 1, f ); fclose( f ); } - if( input_code_pressed_once( machine(), KEYCODE_L ) ) + if( machine().input().code_pressed_once( KEYCODE_L ) ) { FILE *f; popmessage( "loading..." ); diff --git a/src/emu/video/v9938.c b/src/emu/video/v9938.c index 292467e512e..f192cd846a7 100644 --- a/src/emu/video/v9938.c +++ b/src/emu/video/v9938.c @@ -1412,7 +1412,7 @@ have to test. static void v9938_interrupt_start_vblank (running_machine &machine) { #if 0 - if (input_code_pressed (machine, KEYCODE_D) ) + if (machine.input().code_pressed (KEYCODE_D) ) { FILE *fp; int i; diff --git a/src/emu/video/voodoo.c b/src/emu/video/voodoo.c index 7228d9e034a..e60be2ad450 100644 --- a/src/emu/video/voodoo.c +++ b/src/emu/video/voodoo.c @@ -416,7 +416,7 @@ int voodoo_update(device_t *device, bitmap_t *bitmap, const rectangle *cliprect) } /* debugging! */ - if (input_code_pressed(device->machine(), KEYCODE_L)) + if (device->machine().input().code_pressed(KEYCODE_L)) drawbuf = v->fbi.backbuf; /* copy from the current front buffer */ @@ -430,7 +430,7 @@ int voodoo_update(device_t *device, bitmap_t *bitmap, const rectangle *cliprect) } /* update stats display */ - statskey = (input_code_pressed(device->machine(), KEYCODE_BACKSLASH) != 0); + statskey = (device->machine().input().code_pressed(KEYCODE_BACKSLASH) != 0); if (statskey && statskey != v->stats.lastkey) v->stats.display = !v->stats.display; v->stats.lastkey = statskey; @@ -440,7 +440,7 @@ int voodoo_update(device_t *device, bitmap_t *bitmap, const rectangle *cliprect) popmessage(v->stats.buffer, 0, 0); /* update render override */ - v->stats.render_override = input_code_pressed(device->machine(), KEYCODE_ENTER); + v->stats.render_override = device->machine().input().code_pressed(KEYCODE_ENTER); if (DEBUG_DEPTH && v->stats.render_override) { for (y = cliprect->min_y; y <= cliprect->max_y; y++) diff --git a/src/mame/drivers/adp.c b/src/mame/drivers/adp.c index 92782b7f7c8..e6c0109d433 100644 --- a/src/mame/drivers/adp.c +++ b/src/mame/drivers/adp.c @@ -296,29 +296,29 @@ static SCREEN_UPDATE( adp ) b = ((hd63484_regs_r(state->m_hd63484, 0xcc/2, 0xffff) & 0x000f) << 16) + hd63484_regs_r(state->m_hd63484, 0xce/2, 0xffff); #if 1 - if (input_code_pressed(screen->machine(), KEYCODE_M)) b = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) b += 0x2000 * 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) b += 0x2000 * 2; - if (input_code_pressed(screen->machine(), KEYCODE_E)) b += 0x2000 * 3; - if (input_code_pressed(screen->machine(), KEYCODE_R)) b += 0x2000 * 4; - if (input_code_pressed(screen->machine(), KEYCODE_T)) b += 0x2000 * 5; - if (input_code_pressed(screen->machine(), KEYCODE_Y)) b += 0x2000 * 6; - if (input_code_pressed(screen->machine(), KEYCODE_U)) b += 0x2000 * 7; - if (input_code_pressed(screen->machine(), KEYCODE_I)) b += 0x2000 * 8; - if (input_code_pressed(screen->machine(), KEYCODE_A)) b += 0x2000 * 9; - if (input_code_pressed(screen->machine(), KEYCODE_S)) b += 0x2000 * 10; - if (input_code_pressed(screen->machine(), KEYCODE_D)) b += 0x2000 * 11; - if (input_code_pressed(screen->machine(), KEYCODE_F)) b += 0x2000 * 12; - if (input_code_pressed(screen->machine(), KEYCODE_G)) b += 0x2000 * 13; - if (input_code_pressed(screen->machine(), KEYCODE_H)) b += 0x2000 * 14; - if (input_code_pressed(screen->machine(), KEYCODE_J)) b += 0x2000 * 15; - if (input_code_pressed(screen->machine(), KEYCODE_K)) b += 0x2000 * 16; - if (input_code_pressed(screen->machine(), KEYCODE_Z)) b += 0x2000 * 17; - if (input_code_pressed(screen->machine(), KEYCODE_X)) b += 0x2000 * 18; - if (input_code_pressed(screen->machine(), KEYCODE_C)) b += 0x2000 * 19; - if (input_code_pressed(screen->machine(), KEYCODE_V)) b += 0x2000 * 20; - if (input_code_pressed(screen->machine(), KEYCODE_B)) b += 0x2000 * 21; - if (input_code_pressed(screen->machine(), KEYCODE_N)) b += 0x2000 * 22; + if (screen->machine().input().code_pressed(KEYCODE_M)) b = 0; + if (screen->machine().input().code_pressed(KEYCODE_Q)) b += 0x2000 * 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) b += 0x2000 * 2; + if (screen->machine().input().code_pressed(KEYCODE_E)) b += 0x2000 * 3; + if (screen->machine().input().code_pressed(KEYCODE_R)) b += 0x2000 * 4; + if (screen->machine().input().code_pressed(KEYCODE_T)) b += 0x2000 * 5; + if (screen->machine().input().code_pressed(KEYCODE_Y)) b += 0x2000 * 6; + if (screen->machine().input().code_pressed(KEYCODE_U)) b += 0x2000 * 7; + if (screen->machine().input().code_pressed(KEYCODE_I)) b += 0x2000 * 8; + if (screen->machine().input().code_pressed(KEYCODE_A)) b += 0x2000 * 9; + if (screen->machine().input().code_pressed(KEYCODE_S)) b += 0x2000 * 10; + if (screen->machine().input().code_pressed(KEYCODE_D)) b += 0x2000 * 11; + if (screen->machine().input().code_pressed(KEYCODE_F)) b += 0x2000 * 12; + if (screen->machine().input().code_pressed(KEYCODE_G)) b += 0x2000 * 13; + if (screen->machine().input().code_pressed(KEYCODE_H)) b += 0x2000 * 14; + if (screen->machine().input().code_pressed(KEYCODE_J)) b += 0x2000 * 15; + if (screen->machine().input().code_pressed(KEYCODE_K)) b += 0x2000 * 16; + if (screen->machine().input().code_pressed(KEYCODE_Z)) b += 0x2000 * 17; + if (screen->machine().input().code_pressed(KEYCODE_X)) b += 0x2000 * 18; + if (screen->machine().input().code_pressed(KEYCODE_C)) b += 0x2000 * 19; + if (screen->machine().input().code_pressed(KEYCODE_V)) b += 0x2000 * 20; + if (screen->machine().input().code_pressed(KEYCODE_B)) b += 0x2000 * 21; + if (screen->machine().input().code_pressed(KEYCODE_N)) b += 0x2000 * 22; #endif for (y = 0;y < 280;y++) { @@ -333,7 +333,7 @@ static SCREEN_UPDATE( adp ) b++; } } -if (!input_code_pressed(screen->machine(), KEYCODE_O)) // debug: toggle window +if (!screen->machine().input().code_pressed(KEYCODE_O)) // debug: toggle window if ((hd63484_regs_r(state->m_hd63484, 0x06/2, 0xffff) & 0x0300) == 0x0300) { int sy = (hd63484_regs_r(state->m_hd63484, 0x94/2, 0xffff) & 0x0fff) - (hd63484_regs_r(state->m_hd63484, 0x88/2, 0xffff) >> 8); diff --git a/src/mame/drivers/bingoc.c b/src/mame/drivers/bingoc.c index 6f0874cb610..f4fd15e960a 100644 --- a/src/mame/drivers/bingoc.c +++ b/src/mame/drivers/bingoc.c @@ -72,13 +72,13 @@ static READ8_HANDLER( sound_test_r ) { bingoc_state *state = space->machine().driver_data<bingoc_state>(); - if(input_code_pressed_once(space->machine(), KEYCODE_Z)) + if(space->machine().input().code_pressed_once(KEYCODE_Z)) state->m_x++; - if(input_code_pressed_once(space->machine(), KEYCODE_X)) + if(space->machine().input().code_pressed_once(KEYCODE_X)) state->m_x--; - if(input_code_pressed_once(space->machine(), KEYCODE_A)) + if(space->machine().input().code_pressed_once(KEYCODE_A)) return 0xff; popmessage("%02x",state->m_x); diff --git a/src/mame/drivers/cmmb.c b/src/mame/drivers/cmmb.c index 3e660dc9efc..c3de1828b2a 100644 --- a/src/mame/drivers/cmmb.c +++ b/src/mame/drivers/cmmb.c @@ -288,7 +288,7 @@ GFXDECODE_END static INTERRUPT_GEN( cmmb_irq ) { - //if(input_code_pressed_once(device->machine(), KEYCODE_Z)) + //if(device->machine().input().code_pressed_once(KEYCODE_Z)) // device_set_input_line(device, 0, HOLD_LINE); } diff --git a/src/mame/drivers/coolridr.c b/src/mame/drivers/coolridr.c index dd1206609b4..7c878188e12 100644 --- a/src/mame/drivers/coolridr.c +++ b/src/mame/drivers/coolridr.c @@ -301,28 +301,28 @@ static SCREEN_UPDATE(coolridr) int y,x; - if(input_code_pressed(screen->machine(),KEYCODE_Z)) + if(screen->machine().input().code_pressed(KEYCODE_Z)) state->m_test_offs+=4; - if(input_code_pressed(screen->machine(),KEYCODE_X)) + if(screen->machine().input().code_pressed(KEYCODE_X)) state->m_test_offs-=4; - if(input_code_pressed(screen->machine(),KEYCODE_C)) + if(screen->machine().input().code_pressed(KEYCODE_C)) state->m_test_offs+=0x40; - if(input_code_pressed(screen->machine(),KEYCODE_V)) + if(screen->machine().input().code_pressed(KEYCODE_V)) state->m_test_offs-=0x40; - if(input_code_pressed(screen->machine(),KEYCODE_B)) + if(screen->machine().input().code_pressed(KEYCODE_B)) state->m_test_offs+=0x400; - if(input_code_pressed(screen->machine(),KEYCODE_N)) + if(screen->machine().input().code_pressed(KEYCODE_N)) state->m_test_offs-=0x400; - if(input_code_pressed_once(screen->machine(),KEYCODE_A)) + if(screen->machine().input().code_pressed_once(KEYCODE_A)) state->m_color++; - if(input_code_pressed_once(screen->machine(),KEYCODE_S)) + if(screen->machine().input().code_pressed_once(KEYCODE_S)) state->m_color--; if(state->m_test_offs > 0x100000*4) diff --git a/src/mame/drivers/cybertnk.c b/src/mame/drivers/cybertnk.c index eecb1025881..00a8651c7b9 100644 --- a/src/mame/drivers/cybertnk.c +++ b/src/mame/drivers/cybertnk.c @@ -435,40 +435,40 @@ static SCREEN_UPDATE( cybertnk ) int x,y,count; const UINT8 *blit_ram = screen->machine().region("spr_gfx")->base(); - if(input_code_pressed(screen->machine(), KEYCODE_Z)) + if(screen->machine().input().code_pressed(KEYCODE_Z)) state->m_test_x++; - if(input_code_pressed(screen->machine(), KEYCODE_X)) + if(screen->machine().input().code_pressed(KEYCODE_X)) state->m_test_x--; - if(input_code_pressed(screen->machine(), KEYCODE_A)) + if(screen->machine().input().code_pressed(KEYCODE_A)) state->m_test_y++; - if(input_code_pressed(screen->machine(), KEYCODE_S)) + if(screen->machine().input().code_pressed(KEYCODE_S)) state->m_test_y--; - if(input_code_pressed(screen->machine(), KEYCODE_Q)) + if(screen->machine().input().code_pressed(KEYCODE_Q)) state->m_start_offs+=0x200; - if(input_code_pressed(screen->machine(), KEYCODE_W)) + if(screen->machine().input().code_pressed(KEYCODE_W)) state->m_start_offs-=0x200; - if(input_code_pressed_once(screen->machine(), KEYCODE_T)) + if(screen->machine().input().code_pressed_once(KEYCODE_T)) state->m_start_offs+=0x20000; - if(input_code_pressed_once(screen->machine(), KEYCODE_Y)) + if(screen->machine().input().code_pressed_once(KEYCODE_Y)) state->m_start_offs-=0x20000; - if(input_code_pressed(screen->machine(), KEYCODE_E)) + if(screen->machine().input().code_pressed(KEYCODE_E)) state->m_start_offs+=4; - if(input_code_pressed(screen->machine(), KEYCODE_R)) + if(screen->machine().input().code_pressed(KEYCODE_R)) state->m_start_offs-=4; - if(input_code_pressed(screen->machine(), KEYCODE_D)) + if(screen->machine().input().code_pressed(KEYCODE_D)) state->m_color_pen++; - if(input_code_pressed(screen->machine(), KEYCODE_F)) + if(screen->machine().input().code_pressed(KEYCODE_F)) state->m_color_pen--; popmessage("%02x %02x %04x %02x",state->m_test_x,state->m_test_y,state->m_start_offs,state->m_color_pen); diff --git a/src/mame/drivers/darkhors.c b/src/mame/drivers/darkhors.c index 5949f097e8c..ced02aa5bc2 100644 --- a/src/mame/drivers/darkhors.c +++ b/src/mame/drivers/darkhors.c @@ -182,12 +182,12 @@ static SCREEN_UPDATE( darkhors ) int layers_ctrl = -1; #if DARKHORS_DEBUG - if (input_code_pressed(screen->machine(), KEYCODE_Z)) + if (screen->machine().input().code_pressed(KEYCODE_Z)) { int mask = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) mask |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) mask |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_A)) mask |= 4; + if (screen->machine().input().code_pressed(KEYCODE_Q)) mask |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) mask |= 2; + if (screen->machine().input().code_pressed(KEYCODE_A)) mask |= 4; if (mask != 0) layers_ctrl &= mask; } #endif diff --git a/src/mame/drivers/ddenlovr.c b/src/mame/drivers/ddenlovr.c index ccfcd419bea..43ca9f6e690 100644 --- a/src/mame/drivers/ddenlovr.c +++ b/src/mame/drivers/ddenlovr.c @@ -1332,36 +1332,36 @@ SCREEN_UPDATE(ddenlovr) state->m_ddenlovr_clip_ctrl = 0x0f; next = blit_draw(screen->machine(), base, 0); popmessage("GFX %06x", base); - if (input_code_pressed(screen->machine(), KEYCODE_S)) base = next; - if (input_code_pressed_once(screen->machine(), KEYCODE_X)) base = next; - if (input_code_pressed(screen->machine(), KEYCODE_C)) { base--; while ((gfx[base] & 0xf0) != 0x30) base--; } - if (input_code_pressed(screen->machine(), KEYCODE_V)) { base++; while ((gfx[base] & 0xf0) != 0x30) base++; } - if (input_code_pressed_once(screen->machine(), KEYCODE_D)) { base--; while ((gfx[base] & 0xf0) != 0x30) base--; } - if (input_code_pressed_once(screen->machine(), KEYCODE_F)) { base++; while ((gfx[base] & 0xf0) != 0x30) base++; } + if (screen->machine().input().code_pressed(KEYCODE_S)) base = next; + if (screen->machine().input().code_pressed_once(KEYCODE_X)) base = next; + if (screen->machine().input().code_pressed(KEYCODE_C)) { base--; while ((gfx[base] & 0xf0) != 0x30) base--; } + if (screen->machine().input().code_pressed(KEYCODE_V)) { base++; while ((gfx[base] & 0xf0) != 0x30) base++; } + if (screen->machine().input().code_pressed_once(KEYCODE_D)) { base--; while ((gfx[base] & 0xf0) != 0x30) base--; } + if (screen->machine().input().code_pressed_once(KEYCODE_F)) { base++; while ((gfx[base] & 0xf0) != 0x30) base++; } #endif bitmap_fill(bitmap, cliprect, state->m_ddenlovr_bgcolor); #ifdef MAME_DEBUG - if (input_code_pressed(screen->machine(), KEYCODE_Z)) + if (screen->machine().input().code_pressed(KEYCODE_Z)) { int mask, mask2; mask = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) mask |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) mask |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_E)) mask |= 4; - if (input_code_pressed(screen->machine(), KEYCODE_R)) mask |= 8; + if (screen->machine().input().code_pressed(KEYCODE_Q)) mask |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) mask |= 2; + if (screen->machine().input().code_pressed(KEYCODE_E)) mask |= 4; + if (screen->machine().input().code_pressed(KEYCODE_R)) mask |= 8; mask2 = 0; if (state->m_extra_layers) { - if (input_code_pressed(screen->machine(), KEYCODE_A)) mask2 |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_S)) mask2 |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_D)) mask2 |= 4; - if (input_code_pressed(screen->machine(), KEYCODE_F)) mask2 |= 8; + if (screen->machine().input().code_pressed(KEYCODE_A)) mask2 |= 1; + if (screen->machine().input().code_pressed(KEYCODE_S)) mask2 |= 2; + if (screen->machine().input().code_pressed(KEYCODE_D)) mask2 |= 4; + if (screen->machine().input().code_pressed(KEYCODE_F)) mask2 |= 8; } if (mask || mask2) diff --git a/src/mame/drivers/dunhuang.c b/src/mame/drivers/dunhuang.c index a4c48a1fe4e..c913dba451f 100644 --- a/src/mame/drivers/dunhuang.c +++ b/src/mame/drivers/dunhuang.c @@ -138,11 +138,11 @@ static SCREEN_UPDATE( dunhuang ) int layers_ctrl = -1; #if DUNHUANG_DEBUG -if (input_code_pressed(screen->machine(), KEYCODE_Z)) +if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; if (msk != 0) layers_ctrl &= msk; } #endif diff --git a/src/mame/drivers/firebeat.c b/src/mame/drivers/firebeat.c index 420322a46a5..dfeb0f945cc 100644 --- a/src/mame/drivers/firebeat.c +++ b/src/mame/drivers/firebeat.c @@ -555,7 +555,7 @@ static SCREEN_UPDATE(firebeat) if (state->m_tick >= 5) { state->m_tick = 0; - if (input_code_pressed(screen->machine(), KEYCODE_0)) + if (screen->machine().input().code_pressed(KEYCODE_0)) { state->m_layer++; if (state->m_layer > 2) @@ -565,7 +565,7 @@ static SCREEN_UPDATE(firebeat) } /* - if (input_code_pressed_once(screen->machine(), KEYCODE_9)) + if (screen->machine().input().code_pressed_once(KEYCODE_9)) { FILE *file = fopen("vram0.bin", "wb"); int i; diff --git a/src/mame/drivers/gal3.c b/src/mame/drivers/gal3.c index c6ae9f1f945..83a6d2a439c 100644 --- a/src/mame/drivers/gal3.c +++ b/src/mame/drivers/gal3.c @@ -188,8 +188,8 @@ static SCREEN_UPDATE(gal3) update_palette(screen->machine()); - if( input_code_pressed_once(screen->machine(), KEYCODE_H)&&(pivot<15) ) pivot+=1; - if( input_code_pressed_once(screen->machine(), KEYCODE_J)&&(pivot>0) ) pivot-=1; + if( screen->machine().input().code_pressed_once(KEYCODE_H)&&(pivot<15) ) pivot+=1; + if( screen->machine().input().code_pressed_once(KEYCODE_J)&&(pivot>0) ) pivot-=1; for( pri=0; pri<pivot; pri++ ) { diff --git a/src/mame/drivers/galaxi.c b/src/mame/drivers/galaxi.c index 4e4616e3ffa..8d565ff2542 100644 --- a/src/mame/drivers/galaxi.c +++ b/src/mame/drivers/galaxi.c @@ -175,14 +175,14 @@ static SCREEN_UPDATE(galaxi) int layers_ctrl = -1; #ifdef MAME_DEBUG - if (input_code_pressed(screen->machine(), KEYCODE_R)) // remapped due to inputs changes. + if (screen->machine().input().code_pressed(KEYCODE_R)) // remapped due to inputs changes. { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_T)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_Y)) msk |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_U)) msk |= 4; - if (input_code_pressed(screen->machine(), KEYCODE_I)) msk |= 8; - if (input_code_pressed(screen->machine(), KEYCODE_O)) msk |= 16; + if (screen->machine().input().code_pressed(KEYCODE_T)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_Y)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_U)) msk |= 4; + if (screen->machine().input().code_pressed(KEYCODE_I)) msk |= 8; + if (screen->machine().input().code_pressed(KEYCODE_O)) msk |= 16; if (msk != 0) layers_ctrl &= msk; } #endif diff --git a/src/mame/drivers/gottlieb.c b/src/mame/drivers/gottlieb.c index 9179c7e255b..3820e335551 100644 --- a/src/mame/drivers/gottlieb.c +++ b/src/mame/drivers/gottlieb.c @@ -599,7 +599,7 @@ static void audio_handle_zero_crossing(gottlieb_state *state, attotime zerotime, static void laserdisc_audio_process(device_t *device, int samplerate, int samples, const INT16 *ch0, const INT16 *ch1) { gottlieb_state *state = device->machine().driver_data<gottlieb_state>(); - int logit = LOG_AUDIO_DECODE && input_code_pressed(device->machine(), KEYCODE_L); + int logit = LOG_AUDIO_DECODE && device->machine().input().code_pressed(KEYCODE_L); attotime time_per_sample = attotime::from_hz(samplerate); attotime curtime = state->m_laserdisc_last_time; int cursamp; diff --git a/src/mame/drivers/igs009.c b/src/mame/drivers/igs009.c index 3760b955827..70a575e61ed 100644 --- a/src/mame/drivers/igs009.c +++ b/src/mame/drivers/igs009.c @@ -264,12 +264,12 @@ static SCREEN_UPDATE(jingbell) int layers_ctrl = state->m_video_enable ? -1 : 0; #ifdef MAME_DEBUG - if (input_code_pressed(screen->machine(), KEYCODE_Z)) + if (screen->machine().input().code_pressed(KEYCODE_Z)) { int mask = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) mask |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) mask |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_A)) mask |= 4; + if (screen->machine().input().code_pressed(KEYCODE_Q)) mask |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) mask |= 2; + if (screen->machine().input().code_pressed(KEYCODE_A)) mask |= 4; if (mask != 0) layers_ctrl &= mask; } #endif diff --git a/src/mame/drivers/igs011.c b/src/mame/drivers/igs011.c index 22ac255eba2..8d4272215fd 100644 --- a/src/mame/drivers/igs011.c +++ b/src/mame/drivers/igs011.c @@ -165,17 +165,17 @@ static SCREEN_UPDATE( igs011 ) UINT16 *pri_ram; #ifdef MAME_DEBUG - if (input_code_pressed(screen->machine(), KEYCODE_Z)) + if (screen->machine().input().code_pressed(KEYCODE_Z)) { int mask = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) mask |= 0x01; - if (input_code_pressed(screen->machine(), KEYCODE_W)) mask |= 0x02; - if (input_code_pressed(screen->machine(), KEYCODE_E)) mask |= 0x04; - if (input_code_pressed(screen->machine(), KEYCODE_R)) mask |= 0x08; - if (input_code_pressed(screen->machine(), KEYCODE_A)) mask |= 0x10; - if (input_code_pressed(screen->machine(), KEYCODE_S)) mask |= 0x20; - if (input_code_pressed(screen->machine(), KEYCODE_D)) mask |= 0x40; - if (input_code_pressed(screen->machine(), KEYCODE_F)) mask |= 0x80; + if (screen->machine().input().code_pressed(KEYCODE_Q)) mask |= 0x01; + if (screen->machine().input().code_pressed(KEYCODE_W)) mask |= 0x02; + if (screen->machine().input().code_pressed(KEYCODE_E)) mask |= 0x04; + if (screen->machine().input().code_pressed(KEYCODE_R)) mask |= 0x08; + if (screen->machine().input().code_pressed(KEYCODE_A)) mask |= 0x10; + if (screen->machine().input().code_pressed(KEYCODE_S)) mask |= 0x20; + if (screen->machine().input().code_pressed(KEYCODE_D)) mask |= 0x40; + if (screen->machine().input().code_pressed(KEYCODE_F)) mask |= 0x80; if (mask) layer_enable &= mask; } #endif @@ -446,7 +446,7 @@ static WRITE16_HANDLER( igs011_blit_flags_w ) #ifdef MAME_DEBUG #if 1 - if (input_code_pressed(space->machine(), KEYCODE_Z)) + if (space->machine().input().code_pressed(KEYCODE_Z)) { char buf[20]; sprintf(buf, "%02X%02X",blitter.depth,blitter.flags&0xff); // ui_draw_text(buf, blitter.x, blitter.y); // crashes mame! diff --git a/src/mame/drivers/igs017.c b/src/mame/drivers/igs017.c index e7365615f68..29dc08b6267 100644 --- a/src/mame/drivers/igs017.c +++ b/src/mame/drivers/igs017.c @@ -303,24 +303,24 @@ static int debug_viewer(running_machine &machine, bitmap_t *bitmap,const rectang { #ifdef MAME_DEBUG igs017_state *state = machine.driver_data<igs017_state>(); - if (input_code_pressed_once(machine, KEYCODE_T)) state->m_toggle = 1-state->m_toggle; + if (machine.input().code_pressed_once(KEYCODE_T)) state->m_toggle = 1-state->m_toggle; if (state->m_toggle) { int h = 256, w = state->m_debug_width, a = state->m_debug_addr; - if (input_code_pressed(machine, KEYCODE_O)) w += 1; - if (input_code_pressed(machine, KEYCODE_I)) w -= 1; + if (machine.input().code_pressed(KEYCODE_O)) w += 1; + if (machine.input().code_pressed(KEYCODE_I)) w -= 1; - if (input_code_pressed(machine, KEYCODE_U)) w += 8; - if (input_code_pressed(machine, KEYCODE_Y)) w -= 8; + if (machine.input().code_pressed(KEYCODE_U)) w += 8; + if (machine.input().code_pressed(KEYCODE_Y)) w -= 8; - if (input_code_pressed(machine, KEYCODE_RIGHT)) a += 1; - if (input_code_pressed(machine, KEYCODE_LEFT)) a -= 1; + if (machine.input().code_pressed(KEYCODE_RIGHT)) a += 1; + if (machine.input().code_pressed(KEYCODE_LEFT)) a -= 1; - if (input_code_pressed(machine, KEYCODE_DOWN)) a += w; - if (input_code_pressed(machine, KEYCODE_UP)) a -= w; + if (machine.input().code_pressed(KEYCODE_DOWN)) a += w; + if (machine.input().code_pressed(KEYCODE_UP)) a -= w; - if (input_code_pressed(machine, KEYCODE_PGDN)) a += w * h; - if (input_code_pressed(machine, KEYCODE_PGUP)) a -= w * h; + if (machine.input().code_pressed(KEYCODE_PGDN)) a += w * h; + if (machine.input().code_pressed(KEYCODE_PGUP)) a -= w * h; if (a < 0) a = 0; if (a > state->m_sprites_gfx_size) a = state->m_sprites_gfx_size; @@ -348,12 +348,12 @@ static SCREEN_UPDATE( igs017 ) int layers_ctrl = -1; #ifdef MAME_DEBUG - if (input_code_pressed(screen->machine(), KEYCODE_Z)) + if (screen->machine().input().code_pressed(KEYCODE_Z)) { int mask = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) mask |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) mask |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_A)) mask |= 4; + if (screen->machine().input().code_pressed(KEYCODE_Q)) mask |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) mask |= 2; + if (screen->machine().input().code_pressed(KEYCODE_A)) mask |= 4; if (mask != 0) layers_ctrl &= mask; } #endif diff --git a/src/mame/drivers/igspoker.c b/src/mame/drivers/igspoker.c index ac083fa99c8..36abb084ea7 100644 --- a/src/mame/drivers/igspoker.c +++ b/src/mame/drivers/igspoker.c @@ -322,7 +322,7 @@ static CUSTOM_INPUT( hopper_r ) { igspoker_state *state = field.machine().driver_data<igspoker_state>(); if (state->m_hopper) return !(field.machine().primary_screen->frame_number()%10); - return input_code_pressed(field.machine(), KEYCODE_H); + return field.machine().input().code_pressed(KEYCODE_H); } static READ8_HANDLER( exp_rom_r ) diff --git a/src/mame/drivers/itgambl2.c b/src/mame/drivers/itgambl2.c index ad07c1e4edb..27f20064d6b 100644 --- a/src/mame/drivers/itgambl2.c +++ b/src/mame/drivers/itgambl2.c @@ -88,28 +88,28 @@ static SCREEN_UPDATE( itgambl2 ) int x,y,count; const UINT8 *blit_ram = screen->machine().region("gfx1")->base(); - if(input_code_pressed(screen->machine(), KEYCODE_Z)) + if(screen->machine().input().code_pressed(KEYCODE_Z)) state->m_test_x++; - if(input_code_pressed(screen->machine(), KEYCODE_X)) + if(screen->machine().input().code_pressed(KEYCODE_X)) state->m_test_x--; - if(input_code_pressed(screen->machine(), KEYCODE_A)) + if(screen->machine().input().code_pressed(KEYCODE_A)) state->m_test_y++; - if(input_code_pressed(screen->machine(), KEYCODE_S)) + if(screen->machine().input().code_pressed(KEYCODE_S)) state->m_test_y--; - if(input_code_pressed(screen->machine(), KEYCODE_Q)) + if(screen->machine().input().code_pressed(KEYCODE_Q)) state->m_start_offs+=0x200; - if(input_code_pressed(screen->machine(), KEYCODE_W)) + if(screen->machine().input().code_pressed(KEYCODE_W)) state->m_start_offs-=0x200; - if(input_code_pressed(screen->machine(), KEYCODE_E)) + if(screen->machine().input().code_pressed(KEYCODE_E)) state->m_start_offs++; - if(input_code_pressed(screen->machine(), KEYCODE_R)) + if(screen->machine().input().code_pressed(KEYCODE_R)) state->m_start_offs--; popmessage("%d %d %04x",state->m_test_x,state->m_test_y,state->m_start_offs); diff --git a/src/mame/drivers/itgambl3.c b/src/mame/drivers/itgambl3.c index a6ec26a75f0..994789fb706 100644 --- a/src/mame/drivers/itgambl3.c +++ b/src/mame/drivers/itgambl3.c @@ -76,28 +76,28 @@ static SCREEN_UPDATE( itgambl3 ) int x,y,count; const UINT8 *blit_ram = screen->machine().region("gfx1")->base(); - if(input_code_pressed(screen->machine(), KEYCODE_Z)) + if(screen->machine().input().code_pressed(KEYCODE_Z)) state->m_test_x++; - if(input_code_pressed(screen->machine(), KEYCODE_X)) + if(screen->machine().input().code_pressed(KEYCODE_X)) state->m_test_x--; - if(input_code_pressed(screen->machine(), KEYCODE_A)) + if(screen->machine().input().code_pressed(KEYCODE_A)) state->m_test_y++; - if(input_code_pressed(screen->machine(), KEYCODE_S)) + if(screen->machine().input().code_pressed(KEYCODE_S)) state->m_test_y--; - if(input_code_pressed(screen->machine(), KEYCODE_Q)) + if(screen->machine().input().code_pressed(KEYCODE_Q)) state->m_start_offs+=0x200; - if(input_code_pressed(screen->machine(), KEYCODE_W)) + if(screen->machine().input().code_pressed(KEYCODE_W)) state->m_start_offs-=0x200; - if(input_code_pressed(screen->machine(), KEYCODE_E)) + if(screen->machine().input().code_pressed(KEYCODE_E)) state->m_start_offs++; - if(input_code_pressed(screen->machine(), KEYCODE_R)) + if(screen->machine().input().code_pressed(KEYCODE_R)) state->m_start_offs--; popmessage("%d %d %04x",state->m_test_x,state->m_test_y,state->m_start_offs); diff --git a/src/mame/drivers/jackie.c b/src/mame/drivers/jackie.c index d078c5ee667..22cbd035e03 100644 --- a/src/mame/drivers/jackie.c +++ b/src/mame/drivers/jackie.c @@ -393,7 +393,7 @@ static CUSTOM_INPUT( hopper_r ) { jackie_state *state = field.machine().driver_data<jackie_state>(); if (state->m_hopper) return !(field.machine().primary_screen->frame_number()%10); - return input_code_pressed(field.machine(), KEYCODE_H); + return field.machine().input().code_pressed(KEYCODE_H); } static INPUT_PORTS_START( jackie ) diff --git a/src/mame/drivers/kickgoal.c b/src/mame/drivers/kickgoal.c index f71cbae7f3a..720e325c019 100644 --- a/src/mame/drivers/kickgoal.c +++ b/src/mame/drivers/kickgoal.c @@ -329,7 +329,7 @@ static INTERRUPT_GEN( kickgoal_interrupt ) state->m_adpcm->write_command(0x81); } } - if (input_code_pressed_once(device->machine(), KEYCODE_PGUP)) + if (device->machine().input().code_pressed_once(KEYCODE_PGUP)) { if (state->m_m6295_key_delay >= (0x60 * oki_time_base)) { @@ -348,7 +348,7 @@ static INTERRUPT_GEN( kickgoal_interrupt ) else state->m_m6295_key_delay += (0x01 * oki_time_base); } - else if (input_code_pressed_once(device->machine(), KEYCODE_PGDN)) + else if (device->machine().input().code_pressed_once(KEYCODE_PGDN)) { if (state->m_m6295_key_delay >= (0x60 * oki_time_base)) { @@ -367,7 +367,7 @@ static INTERRUPT_GEN( kickgoal_interrupt ) else state->m_m6295_key_delay += (0x01 * oki_time_base); } - else if (input_code_pressed_once(device->machine(), KEYCODE_INSERT)) + else if (device->machine().input().code_pressed_once(KEYCODE_INSERT)) { if (state->m_m6295_key_delay >= (0x60 * oki_time_base)) { @@ -388,7 +388,7 @@ static INTERRUPT_GEN( kickgoal_interrupt ) else state->m_m6295_key_delay += (0x01 * oki_time_base); } - else if (input_code_pressed_once(device->machine(), KEYCODE_DEL)) + else if (device->machine().input().code_pressed_once(KEYCODE_DEL)) { if (state->m_m6295_key_delay >= (0x60 * oki_time_base)) { @@ -409,7 +409,7 @@ static INTERRUPT_GEN( kickgoal_interrupt ) else state->m_m6295_key_delay += (0x01 * oki_time_base); } - else if (input_code_pressed_once(device->machine(), KEYCODE_Z)) + else if (device->machine().input().code_pressed_once(KEYCODE_Z)) { if (state->m_m6295_key_delay >= (0x80 * oki_time_base)) { diff --git a/src/mame/drivers/lastfght.c b/src/mame/drivers/lastfght.c index e81aae8afc0..76dfb40f51d 100644 --- a/src/mame/drivers/lastfght.c +++ b/src/mame/drivers/lastfght.c @@ -132,11 +132,11 @@ static SCREEN_UPDATE( lastfght ) UINT8 *gfxdata = screen->machine().region("gfx1")->base(); UINT8 data; - if (input_code_pressed_once(screen->machine(), KEYCODE_ENTER)) state->m_view_roms ^= 1; + if (screen->machine().input().code_pressed_once(KEYCODE_ENTER)) state->m_view_roms ^= 1; if (state->m_view_roms) { - if (input_code_pressed_once(screen->machine(), KEYCODE_PGDN)) state->m_base += 512 * 256; - if (input_code_pressed_once(screen->machine(), KEYCODE_PGUP)) state->m_base -= 512 * 256; + if (screen->machine().input().code_pressed_once(KEYCODE_PGDN)) state->m_base += 512 * 256; + if (screen->machine().input().code_pressed_once(KEYCODE_PGUP)) state->m_base -= 512 * 256; state->m_base %= screen->machine().region("gfx1")->bytes(); count = state->m_base; diff --git a/src/mame/drivers/magicard.c b/src/mame/drivers/magicard.c index f2d32682dc7..e459325f689 100644 --- a/src/mame/drivers/magicard.c +++ b/src/mame/drivers/magicard.c @@ -695,9 +695,9 @@ static MACHINE_RESET( magicard ) /*Probably there's a mask somewhere if it REALLY uses irqs at all...irq vectors dynamically changes after some time.*/ static INTERRUPT_GEN( magicard_irq ) { - if(input_code_pressed(device->machine(), KEYCODE_Z)) //vblank? + if(device->machine().input().code_pressed(KEYCODE_Z)) //vblank? device_set_input_line_and_vector(device, 1, HOLD_LINE,0xe4/4); - if(input_code_pressed(device->machine(), KEYCODE_X)) //uart irq + if(device->machine().input().code_pressed(KEYCODE_X)) //uart irq device_set_input_line_and_vector(device, 1, HOLD_LINE,0xf0/4); } diff --git a/src/mame/drivers/mazerbla.c b/src/mame/drivers/mazerbla.c index 868b38467bd..ab5b255aa0c 100644 --- a/src/mame/drivers/mazerbla.c +++ b/src/mame/drivers/mazerbla.c @@ -206,31 +206,31 @@ SCREEN_UPDATE( test_vcu ) bitmap_fill(state->m_tmpbitmaps[0], NULL, color_base); - if (input_code_pressed_once(screen->machine(), KEYCODE_1)) /* plane 1 */ + if (screen->machine().input().code_pressed_once(KEYCODE_1)) /* plane 1 */ planes_enabled[0] ^= 1; - if (input_code_pressed_once(screen->machine(), KEYCODE_2)) /* plane 2 */ + if (screen->machine().input().code_pressed_once(KEYCODE_2)) /* plane 2 */ planes_enabled[1] ^= 1; - if (input_code_pressed_once(screen->machine(), KEYCODE_3)) /* plane 3 */ + if (screen->machine().input().code_pressed_once(KEYCODE_3)) /* plane 3 */ planes_enabled[2] ^= 1; - if (input_code_pressed_once(screen->machine(), KEYCODE_4)) /* plane 4 */ + if (screen->machine().input().code_pressed_once(KEYCODE_4)) /* plane 4 */ planes_enabled[3] ^= 1; - if (input_code_pressed_once(screen->machine(), KEYCODE_I)) /* show/hide debug info */ + if (screen->machine().input().code_pressed_once(KEYCODE_I)) /* show/hide debug info */ state->m_dbg_info = !state->m_dbg_info; - if (input_code_pressed_once(screen->machine(), KEYCODE_G)) /* enable gfx area handling */ + if (screen->machine().input().code_pressed_once(KEYCODE_G)) /* enable gfx area handling */ state->m_dbg_gfx_e = !state->m_dbg_gfx_e; - if (input_code_pressed_once(screen->machine(), KEYCODE_C)) /* enable color area handling */ + if (screen->machine().input().code_pressed_once(KEYCODE_C)) /* enable color area handling */ state->m_dbg_clr_e = !state->m_dbg_clr_e; - if (input_code_pressed_once(screen->machine(), KEYCODE_V)) /* draw only when vbank==dbg_vbank */ + if (screen->machine().input().code_pressed_once(KEYCODE_V)) /* draw only when vbank==dbg_vbank */ state->m_dbg_vbank ^= 1; - if (input_code_pressed_once(screen->machine(), KEYCODE_L)) /* showlookup ram */ + if (screen->machine().input().code_pressed_once(KEYCODE_L)) /* showlookup ram */ state->m_dbg_lookup = (state->m_dbg_lookup + 1) % 5; //0,1,2,3, 4-off diff --git a/src/mame/drivers/meritm.c b/src/mame/drivers/meritm.c index 2ad960659a8..3e3f067c3e8 100644 --- a/src/mame/drivers/meritm.c +++ b/src/mame/drivers/meritm.c @@ -365,12 +365,12 @@ static VIDEO_START( meritm ) static SCREEN_UPDATE( meritm ) { meritm_state *state = screen->machine().driver_data<meritm_state>(); - if(input_code_pressed_once(screen->machine(), KEYCODE_Q)) + if(screen->machine().input().code_pressed_once(KEYCODE_Q)) { state->m_layer0_enabled^=1; popmessage("Layer 0 %sabled",state->m_layer0_enabled ? "en" : "dis"); } - if(input_code_pressed_once(screen->machine(), KEYCODE_W)) + if(screen->machine().input().code_pressed_once(KEYCODE_W)) { state->m_layer1_enabled^=1; popmessage("Layer 1 %sabled",state->m_layer1_enabled ? "en" : "dis"); diff --git a/src/mame/drivers/midas.c b/src/mame/drivers/midas.c index 8bee7277385..6812ee9493b 100644 --- a/src/mame/drivers/midas.c +++ b/src/mame/drivers/midas.c @@ -181,11 +181,11 @@ static SCREEN_UPDATE( midas ) int layers_ctrl = -1; #ifdef MAME_DEBUG - if ( input_code_pressed(screen->machine(), KEYCODE_Z) ) + if ( screen->machine().input().code_pressed(KEYCODE_Z) ) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1 << 0; // for state->m_tmap - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= 1 << 1; // for sprites + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1 << 0; // for state->m_tmap + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= 1 << 1; // for sprites if (msk != 0) layers_ctrl &= msk; } #endif diff --git a/src/mame/drivers/monzagp.c b/src/mame/drivers/monzagp.c index 25225ba1043..22c06feb350 100644 --- a/src/mame/drivers/monzagp.c +++ b/src/mame/drivers/monzagp.c @@ -67,25 +67,25 @@ static SCREEN_UPDATE(monzagp) monzagp_state *state = screen->machine().driver_data<monzagp_state>(); int x,y; - if(input_code_pressed_once(screen->machine(),KEYCODE_Z)) + if(screen->machine().input().code_pressed_once(KEYCODE_Z)) state->m_bank--; - if(input_code_pressed_once(screen->machine(),KEYCODE_X)) + if(screen->machine().input().code_pressed_once(KEYCODE_X)) state->m_bank++; - if(input_code_pressed_once(screen->machine(),KEYCODE_Q)) + if(screen->machine().input().code_pressed_once(KEYCODE_Q)) { state->m_screenw--; printf("%x\n",state->m_screenw); } - if(input_code_pressed_once(screen->machine(),KEYCODE_W)) + if(screen->machine().input().code_pressed_once(KEYCODE_W)) { state->m_screenw++; printf("%x\n",state->m_screenw); } - if(input_code_pressed_once(screen->machine(),KEYCODE_A)) + if(screen->machine().input().code_pressed_once(KEYCODE_A)) { FILE * p=fopen("vram.bin","wb"); fwrite(&state->m_vram[0],1,0x10000,p); diff --git a/src/mame/drivers/namcos2.c b/src/mame/drivers/namcos2.c index 6afe0da656e..2f223418f4d 100644 --- a/src/mame/drivers/namcos2.c +++ b/src/mame/drivers/namcos2.c @@ -1329,7 +1329,7 @@ static INPUT_PORTS_START( luckywld ) PORT_START("AN4") PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(8) PORT_START("AN5") /* Steering Wheel */ - PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_CODE(0) PORT_CODE_DEC(KEYCODE_Z) PORT_CODE_INC(KEYCODE_X) + PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(20) PORT_CODE(INPUT_CODE_INVALID) PORT_CODE_DEC(KEYCODE_Z) PORT_CODE_INC(KEYCODE_X) PORT_START("AN6") /* Brake pedal */ PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_MINMAX(0x00,0x7f) PORT_SENSITIVITY(100) PORT_KEYDELTA(30) PORT_START("AN7") /* Accelerator pedal */ diff --git a/src/mame/drivers/pinkiri8.c b/src/mame/drivers/pinkiri8.c index 7804a93dc64..4868cc475d8 100644 --- a/src/mame/drivers/pinkiri8.c +++ b/src/mame/drivers/pinkiri8.c @@ -183,7 +183,7 @@ static SCREEN_UPDATE( pinkiri8 ) if (!strcmp(screen->machine().system().name,"janshi")) game_type_hack = 1; - if ( input_code_pressed_once(screen->machine(), KEYCODE_W) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_W) ) { int i; int count2; diff --git a/src/mame/drivers/pntnpuzl.c b/src/mame/drivers/pntnpuzl.c index 7c1bedbd731..9d91c42bda0 100644 --- a/src/mame/drivers/pntnpuzl.c +++ b/src/mame/drivers/pntnpuzl.c @@ -200,37 +200,37 @@ static SCREEN_UPDATE( pntnpuzl ) static int yyy=512; static int sss=0xa8; - if ( input_code_pressed_once(screen->machine(), KEYCODE_Q) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_Q) ) { xxx--; mame_printf_debug("xxx %04x\n",xxx); } - if ( input_code_pressed_once(screen->machine(), KEYCODE_W) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_W) ) { xxx++; mame_printf_debug("xxx %04x\n",xxx); } - if ( input_code_pressed_once(screen->machine(), KEYCODE_A) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_A) ) { yyy--; mame_printf_debug("yyy %04x\n",yyy); } - if ( input_code_pressed_once(screen->machine(), KEYCODE_S) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_S) ) { yyy++; mame_printf_debug("yyy %04x\n",yyy); } - if ( input_code_pressed_once(screen->machine(), KEYCODE_Z) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_Z) ) { sss--; mame_printf_debug("sss %04x\n",sss); } - if ( input_code_pressed_once(screen->machine(), KEYCODE_X) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_X) ) { sss++; mame_printf_debug("sss %04x\n",sss); diff --git a/src/mame/drivers/quizpun2.c b/src/mame/drivers/quizpun2.c index 222e6c337aa..dbcb9efe4ad 100644 --- a/src/mame/drivers/quizpun2.c +++ b/src/mame/drivers/quizpun2.c @@ -117,11 +117,11 @@ static SCREEN_UPDATE(quizpun2) int layers_ctrl = -1; #ifdef MAME_DEBUG - if (input_code_pressed(screen->machine(), KEYCODE_Z)) + if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; if (msk != 0) layers_ctrl &= msk; } #endif diff --git a/src/mame/drivers/r2dx_v33.c b/src/mame/drivers/r2dx_v33.c index bb6e3295383..28569b6a2bc 100644 --- a/src/mame/drivers/r2dx_v33.c +++ b/src/mame/drivers/r2dx_v33.c @@ -198,17 +198,17 @@ static SCREEN_UPDATE( rdx_v33 ) static int frame; address_space *space = screen->machine().device("maincpu")->memory().space(AS_PROGRAM); - //if(input_code_pressed_once(screen->machine(),KEYCODE_A)) + //if(screen->machine().input().code_pressed_once(KEYCODE_A)) // src_addr+=0x800; - //if(input_code_pressed_once(screen->machine(),KEYCODE_S)) + //if(screen->machine().input().code_pressed_once(KEYCODE_S)) // src_addr-=0x800; frame++; popmessage("%08x 0",src_addr); - //if(input_code_pressed_once(screen->machine(),KEYCODE_Z)) + //if(screen->machine().input().code_pressed_once(KEYCODE_Z)) if(frame == 5) { int i,data; diff --git a/src/mame/drivers/raiden2.c b/src/mame/drivers/raiden2.c index 0a6e4cb35bf..82308b958fa 100644 --- a/src/mame/drivers/raiden2.c +++ b/src/mame/drivers/raiden2.c @@ -633,11 +633,11 @@ void raiden2_state::draw_sprites(running_machine &machine, bitmap_t *bitmap, con // static int ytlim = 1; // static int xtlim = 1; -// if ( input_code_pressed_once(machine, KEYCODE_Q) ) ytlim--; -// if ( input_code_pressed_once(machine, KEYCODE_W) ) ytlim++; +// if ( machine.input().code_pressed_once(KEYCODE_Q) ) ytlim--; +// if ( machine.input().code_pressed_once(KEYCODE_W) ) ytlim++; -// if ( input_code_pressed_once(machine, KEYCODE_A) ) xtlim--; -// if ( input_code_pressed_once(machine, KEYCODE_S) ) xtlim++; +// if ( machine.input().code_pressed_once(KEYCODE_A) ) xtlim--; +// if ( machine.input().code_pressed_once(KEYCODE_S) ) xtlim++; /*00 ???? ???? (colour / priority?) @@ -886,31 +886,31 @@ static SCREEN_UPDATE( raiden2 ) raiden2_state *state = screen->machine().driver_data<raiden2_state>(); bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine())); - //if (!input_code_pressed(screen->machine(), KEYCODE_Q)) + //if (!screen->machine().input().code_pressed(KEYCODE_Q)) { if (!(state->raiden2_tilemap_enable & 1)) tilemap_draw(bitmap, cliprect, state->background_layer, 0, 0); } - //if (!input_code_pressed(screen->machine(), KEYCODE_W)) + //if (!screen->machine().input().code_pressed(KEYCODE_W)) { if (!(state->raiden2_tilemap_enable & 2)) tilemap_draw(bitmap, cliprect, state->midground_layer, 0, 0); } - //if (!input_code_pressed(screen->machine(), KEYCODE_E)) + //if (!screen->machine().input().code_pressed(KEYCODE_E)) { if (!(state->raiden2_tilemap_enable & 4)) tilemap_draw(bitmap, cliprect, state->foreground_layer, 0, 0); } - //if (!input_code_pressed(screen->machine(), KEYCODE_S)) + //if (!screen->machine().input().code_pressed(KEYCODE_S)) { //if (!(raiden2_tilemap_enable & 0x10)) state->draw_sprites(screen->machine(), bitmap, cliprect, 0); } - //if (!input_code_pressed(screen->machine(), KEYCODE_A)) + //if (!screen->machine().input().code_pressed(KEYCODE_A)) { if (!(state->raiden2_tilemap_enable & 8)) tilemap_draw(bitmap, cliprect, state->text_layer, 0, 0); diff --git a/src/mame/drivers/segaybd.c b/src/mame/drivers/segaybd.c index 4d93a12d048..0b67f089dea 100644 --- a/src/mame/drivers/segaybd.c +++ b/src/mame/drivers/segaybd.c @@ -179,10 +179,10 @@ static TIMER_DEVICE_CALLBACK( scanline_callback ) int old = state->m_irq2_scanline; /* Q = -10 scanlines, W = -1 scanline, E = +1 scanline, R = +10 scanlines */ - if (input_code_pressed(timer->machine(), KEYCODE_Q)) { while (input_code_pressed(timer->machine(), KEYCODE_Q)) ; state->m_irq2_scanline -= 10; } - if (input_code_pressed(timer->machine(), KEYCODE_W)) { while (input_code_pressed(timer->machine(), KEYCODE_W)) ; state->m_irq2_scanline -= 1; } - if (input_code_pressed(timer->machine(), KEYCODE_E)) { while (input_code_pressed(timer->machine(), KEYCODE_E)) ; state->m_irq2_scanline += 1; } - if (input_code_pressed(timer->machine(), KEYCODE_R)) { while (input_code_pressed(timer->machine(), KEYCODE_R)) ; state->m_irq2_scanline += 10; } + if (timer->machine().input().code_pressed(KEYCODE_Q)) { while (timer->machine().input().code_pressed(KEYCODE_Q)) ; state->m_irq2_scanline -= 10; } + if (timer->machine().input().code_pressed(KEYCODE_W)) { while (timer->machine().input().code_pressed(KEYCODE_W)) ; state->m_irq2_scanline -= 1; } + if (timer->machine().input().code_pressed(KEYCODE_E)) { while (timer->machine().input().code_pressed(KEYCODE_E)) ; state->m_irq2_scanline += 1; } + if (timer->machine().input().code_pressed(KEYCODE_R)) { while (timer->machine().input().code_pressed(KEYCODE_R)) ; state->m_irq2_scanline += 10; } if (old != state->m_irq2_scanline) popmessage("scanline = %d", state->m_irq2_scanline); } diff --git a/src/mame/drivers/sigmab52.c b/src/mame/drivers/sigmab52.c index 3e458ffb711..9f41e140d3b 100644 --- a/src/mame/drivers/sigmab52.c +++ b/src/mame/drivers/sigmab52.c @@ -166,7 +166,7 @@ static SCREEN_UPDATE( jwildb52 ) //save vram to file #if 0 - if (input_code_pressed_once(screen->machine(), KEYCODE_Q)) + if (screen->machine().input().code_pressed_once(KEYCODE_Q)) { FILE *p = fopen("vram.bin", "wb"); fwrite(&HD63484_ram[0], 1, 0x40000 * 4, p); @@ -190,7 +190,7 @@ static SCREEN_UPDATE( jwildb52 ) } } -if (!input_code_pressed(screen->machine(), KEYCODE_O)) +if (!screen->machine().input().code_pressed(KEYCODE_O)) if ((hd63484_regs_r(hd63484, 0x06/2, 0xffff) & 0x0300) == 0x0300) { int sy = (hd63484_regs_r(hd63484, 0x94/2, 0xffff) & 0x0fff) - (hd63484_regs_r(hd63484, 0x88/2, 0xffff) >> 8); diff --git a/src/mame/drivers/sigmab98.c b/src/mame/drivers/sigmab98.c index 611c0d0313d..b81abb38387 100644 --- a/src/mame/drivers/sigmab98.c +++ b/src/mame/drivers/sigmab98.c @@ -248,13 +248,13 @@ static SCREEN_UPDATE(sigmab98) int layers_ctrl = -1; #ifdef MAME_DEBUG - if (input_code_pressed(screen->machine(), KEYCODE_Z)) + if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_E)) msk |= 4; - if (input_code_pressed(screen->machine(), KEYCODE_R)) msk |= 8; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_E)) msk |= 4; + if (screen->machine().input().code_pressed(KEYCODE_R)) msk |= 8; if (msk != 0) layers_ctrl &= msk; } #endif diff --git a/src/mame/drivers/spoker.c b/src/mame/drivers/spoker.c index 58751a2dc70..97fbcabaa19 100644 --- a/src/mame/drivers/spoker.c +++ b/src/mame/drivers/spoker.c @@ -109,7 +109,7 @@ static CUSTOM_INPUT( hopper_r ) spoker_state *state = machine.driver_data<spoker_state>(); if (state->m_hopper) return !(machine.primary_screen->frame_number()%10); - return input_code_pressed(machine, KEYCODE_H); + return machine.input().code_pressed(KEYCODE_H); } static void show_out(UINT8 *out) diff --git a/src/mame/drivers/srmp6.c b/src/mame/drivers/srmp6.c index 4b406089f73..6a478a7882f 100644 --- a/src/mame/drivers/srmp6.c +++ b/src/mame/drivers/srmp6.c @@ -176,13 +176,13 @@ static SCREEN_UPDATE(srmp6) #if 0 /* debug */ - if(input_code_pressed_once(screen->machine(), KEYCODE_Q)) + if(screen->machine().input().code_pressed_once(KEYCODE_Q)) { ++xixi; printf("%x\n",xixi); } - if(input_code_pressed_once(screen->machine(), KEYCODE_W)) + if(screen->machine().input().code_pressed_once(KEYCODE_W)) { --xixi; printf("%x\n",xixi); @@ -273,7 +273,7 @@ static SCREEN_UPDATE(srmp6) memcpy(state->m_sprram_old, state->m_sprram, 0x80000); - if(input_code_pressed_once(screen->machine(), KEYCODE_Q)) + if(screen->machine().input().code_pressed_once(KEYCODE_Q)) { FILE *p=fopen("tileram.bin","wb"); fwrite(state->m_tileram, 1, 0x100000*16, p); diff --git a/src/mame/drivers/subsino2.c b/src/mame/drivers/subsino2.c index 42f818992c7..a4cc253f781 100644 --- a/src/mame/drivers/subsino2.c +++ b/src/mame/drivers/subsino2.c @@ -610,11 +610,11 @@ static SCREEN_UPDATE( subsino2 ) int y; #ifdef MAME_DEBUG - if (input_code_pressed(screen->machine(), KEYCODE_Z)) + if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; if (msk != 0) layers_ctrl &= msk; } #endif diff --git a/src/mame/drivers/tmaster.c b/src/mame/drivers/tmaster.c index 839808a5c71..57c779214e4 100644 --- a/src/mame/drivers/tmaster.c +++ b/src/mame/drivers/tmaster.c @@ -317,11 +317,11 @@ static SCREEN_UPDATE( tmaster ) int layers_ctrl = -1; #ifdef MAME_DEBUG - if (input_code_pressed(screen->machine(), KEYCODE_Z)) + if (screen->machine().input().code_pressed(KEYCODE_Z)) { int mask = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) mask |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) mask |= 2; + if (screen->machine().input().code_pressed(KEYCODE_Q)) mask |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) mask |= 2; if (mask != 0) layers_ctrl &= mask; } #endif diff --git a/src/mame/machine/atarigen.c b/src/mame/machine/atarigen.c index 9070dce80e5..cea2dbfef0d 100644 --- a/src/mame/machine/atarigen.c +++ b/src/mame/machine/atarigen.c @@ -965,7 +965,7 @@ static TIMER_CALLBACK( atarivc_eof_update ) /* use this for debugging the video controller values */ #if 0 - if (input_code_pressed(machine, KEYCODE_8)) + if (machine.input().code_pressed(KEYCODE_8)) { static FILE *out; if (!out) out = fopen("scroll.log", "w"); diff --git a/src/mame/machine/harddriv.c b/src/mame/machine/harddriv.c index 7e67481123f..aa67f9c3826 100644 --- a/src/mame/machine/harddriv.c +++ b/src/mame/machine/harddriv.c @@ -295,7 +295,7 @@ READ16_HANDLER( hdc68k_wheel_r ) UINT16 new_wheel = input_port_read(space->machine(), "12BADC0") << 4; /* hack to display the wheel position */ - if (input_code_pressed(space->machine(), KEYCODE_LSHIFT)) + if (space->machine().input().code_pressed(KEYCODE_LSHIFT)) popmessage("%04X", new_wheel); /* if we crossed the center line, latch the edge bit */ @@ -830,7 +830,7 @@ WRITE16_HANDLER( hd68k_adsp_buffer_w ) static TIMER_CALLBACK( deferred_adsp_bank_switch ) { harddriv_state *state = machine.driver_data<harddriv_state>(); - if (LOG_COMMANDS && state->m_m68k_adsp_buffer_bank != param && input_code_pressed(machine, KEYCODE_L)) + if (LOG_COMMANDS && state->m_m68k_adsp_buffer_bank != param && machine.input().code_pressed(KEYCODE_L)) { static FILE *commands; if (!commands) commands = fopen("commands.log", "w"); diff --git a/src/mame/video/amiga.c b/src/mame/video/amiga.c index 9d670b87cb5..4fd339c7580 100644 --- a/src/mame/video/amiga.c +++ b/src/mame/video/amiga.c @@ -983,9 +983,9 @@ void amiga_render_scanline(running_machine &machine, bitmap_t *bitmap, int scanl #if GUESS_COPPER_OFFSET if (machine.primary_screen->frame_number() % 64 == 0 && scanline == 0) { - if (input_code_pressed(machine, KEYCODE_Q)) + if (machine.input().code_pressed(KEYCODE_Q)) popmessage("%d", state->m_wait_offset -= 1); - if (input_code_pressed(machine, KEYCODE_W)) + if (machine.input().code_pressed(KEYCODE_W)) popmessage("%d", state->m_wait_offset += 1); } #endif diff --git a/src/mame/video/amigaaga.c b/src/mame/video/amigaaga.c index 8296290f07c..fe57c7baf35 100644 --- a/src/mame/video/amigaaga.c +++ b/src/mame/video/amigaaga.c @@ -844,9 +844,9 @@ void amiga_aga_render_scanline(running_machine &machine, bitmap_t *bitmap, int s #if GUESS_COPPER_OFFSET if (machine.primary_screen->frame_number() % 64 == 0 && scanline == 0) { - if (input_code_pressed(machine, KEYCODE_Q)) + if (machine.input().code_pressed(KEYCODE_Q)) popmessage("%d", wait_offset -= 1); - if (input_code_pressed(machine, KEYCODE_W)) + if (machine.input().code_pressed(KEYCODE_W)) popmessage("%d", wait_offset += 1); } #endif diff --git a/src/mame/video/argus.c b/src/mame/video/argus.c index 3be62f844d2..29943232e0d 100644 --- a/src/mame/video/argus.c +++ b/src/mame/video/argus.c @@ -1138,7 +1138,7 @@ static void butasan_log_vram(running_machine &machine) argus_state *state = machine.driver_data<argus_state>(); int offs; - if (input_code_pressed(machine, KEYCODE_M)) + if (machine.input().code_pressed(KEYCODE_M)) { UINT8 *spriteram = state->m_spriteram; int i; diff --git a/src/mame/video/blmbycar.c b/src/mame/video/blmbycar.c index d1a87137b41..a9aa5817430 100644 --- a/src/mame/video/blmbycar.c +++ b/src/mame/video/blmbycar.c @@ -231,14 +231,14 @@ SCREEN_UPDATE( blmbycar ) tilemap_set_scrollx(state->m_tilemap_1, 0, state->m_scroll_1[1] + 5); #ifdef MAME_DEBUG -if (input_code_pressed(screen->machine(), KEYCODE_Z)) +if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; -// if (input_code_pressed(screen->machine(), KEYCODE_E)) msk |= 4; - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= 8; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; +// if (screen->machine().input().code_pressed(KEYCODE_E)) msk |= 4; + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= 8; if (msk != 0) layers_ctrl &= msk; } #endif diff --git a/src/mame/video/btoads.c b/src/mame/video/btoads.c index db5f26aa44a..626caf9b00a 100644 --- a/src/mame/video/btoads.c +++ b/src/mame/video/btoads.c @@ -497,13 +497,13 @@ void btoads_state::scanline_update(screen_device &screen, bitmap_t *bitmap, int #if BT_DEBUG popmessage("screen_control = %02X", m_screen_control & 0x7f); - if (input_code_pressed(machine(), KEYCODE_X)) + if (machine().input().code_pressed(KEYCODE_X)) { char name[10]; FILE *f; int i; - while (input_code_pressed(machine(), KEYCODE_X)) ; + while (machine().input().code_pressed(KEYCODE_X)) ; sprintf(name, "disp%d.log", m_xcount++); f = fopen(name, "w"); diff --git a/src/mame/video/cave.c b/src/mame/video/cave.c index 8a51d949e56..1c9edcd400c 100644 --- a/src/mame/video/cave.c +++ b/src/mame/video/cave.c @@ -1565,22 +1565,22 @@ SCREEN_UPDATE( cave ) #ifdef MAME_DEBUG { - if ( input_code_pressed(screen->machine(), KEYCODE_Z) || input_code_pressed(screen->machine(), KEYCODE_X) || input_code_pressed(screen->machine(), KEYCODE_C) || - input_code_pressed(screen->machine(), KEYCODE_V) || input_code_pressed(screen->machine(), KEYCODE_B) ) + if ( screen->machine().input().code_pressed(KEYCODE_Z) || screen->machine().input().code_pressed(KEYCODE_X) || screen->machine().input().code_pressed(KEYCODE_C) || + screen->machine().input().code_pressed(KEYCODE_V) || screen->machine().input().code_pressed(KEYCODE_B) ) { int msk = 0, val = 0; - if (input_code_pressed(screen->machine(), KEYCODE_X)) val = 1; // priority 0 only - if (input_code_pressed(screen->machine(), KEYCODE_C)) val = 2; // "" 1 - if (input_code_pressed(screen->machine(), KEYCODE_V)) val = 4; // "" 2 - if (input_code_pressed(screen->machine(), KEYCODE_B)) val = 8; // "" 3 - if (input_code_pressed(screen->machine(), KEYCODE_Z)) val = 1|2|4|8; // All of the above priorities - - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= val << 0; // for layer 0 - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= val << 4; // for layer 1 - if (input_code_pressed(screen->machine(), KEYCODE_E)) msk |= val << 8; // for layer 2 - if (input_code_pressed(screen->machine(), KEYCODE_R)) msk |= val << 12; // for layer 3 - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= val << 16; // for sprites + if (screen->machine().input().code_pressed(KEYCODE_X)) val = 1; // priority 0 only + if (screen->machine().input().code_pressed(KEYCODE_C)) val = 2; // "" 1 + if (screen->machine().input().code_pressed(KEYCODE_V)) val = 4; // "" 2 + if (screen->machine().input().code_pressed(KEYCODE_B)) val = 8; // "" 3 + if (screen->machine().input().code_pressed(KEYCODE_Z)) val = 1|2|4|8; // All of the above priorities + + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= val << 0; // for layer 0 + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= val << 4; // for layer 1 + if (screen->machine().input().code_pressed(KEYCODE_E)) msk |= val << 8; // for layer 2 + if (screen->machine().input().code_pressed(KEYCODE_R)) msk |= val << 12; // for layer 3 + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= val << 16; // for sprites if (msk != 0) layers_ctrl &= msk; #if 1 diff --git a/src/mame/video/cischeat.c b/src/mame/video/cischeat.c index 8134b161aa1..be409cb43b0 100644 --- a/src/mame/video/cischeat.c +++ b/src/mame/video/cischeat.c @@ -967,7 +967,7 @@ static void cischeat_draw_sprites(running_machine &machine, bitmap_t *bitmap , c /* dimension of a tile after zoom */ #ifdef MAME_DEBUG - if ( input_code_pressed(machine, KEYCODE_Z) && input_code_pressed(machine, KEYCODE_M) ) + if ( machine.input().code_pressed(KEYCODE_Z) && machine.input().code_pressed(KEYCODE_M) ) { xdim = 16 << 16; ydim = 16 << 16; @@ -1033,7 +1033,7 @@ if ( (state->m_debugsprites) && ( ((attr & 0x0300)>>8) != (state->m_debugsprites } #ifdef MAME_DEBUG #if 0 -if (input_code_pressed(machine, KEYCODE_X)) +if (machine.input().code_pressed(KEYCODE_X)) { /* Display some info on each sprite */ sprintf(buf, "%04x",attr); ui_draw_text(buf, sx>>16, sy>>16); @@ -1124,7 +1124,7 @@ static void bigrun_draw_sprites(running_machine &machine, bitmap_t *bitmap , con /* dimension of a tile after zoom */ #ifdef MAME_DEBUG - if ( input_code_pressed(machine, KEYCODE_Z) && input_code_pressed(machine, KEYCODE_M) ) + if ( machine.input().code_pressed(KEYCODE_Z) && machine.input().code_pressed(KEYCODE_M) ) { xdim = 16 << 16; ydim = 16 << 16; @@ -1188,7 +1188,7 @@ if ( (state->m_debugsprites) && ( ((attr & 0x0300)>>8) != (state->m_debugsprites } #ifdef MAME_DEBUG #if 0 -if (input_code_pressed(machine, KEYCODE_X)) +if (machine.input().code_pressed(KEYCODE_X)) { /* Display some info on each sprite */ sprintf(buf, "%04x",attr); ui_draw_text(buf, sx>>16, sy>>16); @@ -1210,24 +1210,24 @@ if (input_code_pressed(machine, KEYCODE_X)) #ifdef MAME_DEBUG #define CISCHEAT_LAYERSCTRL \ state->m_debugsprites = 0; \ -if ( input_code_pressed(screen->machine(), KEYCODE_Z) || input_code_pressed(screen->machine(), KEYCODE_X) ) \ +if ( screen->machine().input().code_pressed(KEYCODE_Z) || screen->machine().input().code_pressed(KEYCODE_X) ) \ { \ int msk = 0; \ - if (input_code_pressed(screen->machine(), KEYCODE_Q)) { msk |= 0x01;} \ - if (input_code_pressed(screen->machine(), KEYCODE_W)) { msk |= 0x02;} \ - if (input_code_pressed(screen->machine(), KEYCODE_E)) { msk |= 0x04;} \ - if (input_code_pressed(screen->machine(), KEYCODE_A)) { msk |= 0x08; state->m_debugsprites = 1;} \ - if (input_code_pressed(screen->machine(), KEYCODE_S)) { msk |= 0x08; state->m_debugsprites = 2;} \ - if (input_code_pressed(screen->machine(), KEYCODE_D)) { msk |= 0x08; state->m_debugsprites = 3;} \ - if (input_code_pressed(screen->machine(), KEYCODE_F)) { msk |= 0x08; state->m_debugsprites = 4;} \ - if (input_code_pressed(screen->machine(), KEYCODE_R)) { msk |= 0x10;} \ - if (input_code_pressed(screen->machine(), KEYCODE_T)) { msk |= 0x20;} \ + if (screen->machine().input().code_pressed(KEYCODE_Q)) { msk |= 0x01;} \ + if (screen->machine().input().code_pressed(KEYCODE_W)) { msk |= 0x02;} \ + if (screen->machine().input().code_pressed(KEYCODE_E)) { msk |= 0x04;} \ + if (screen->machine().input().code_pressed(KEYCODE_A)) { msk |= 0x08; state->m_debugsprites = 1;} \ + if (screen->machine().input().code_pressed(KEYCODE_S)) { msk |= 0x08; state->m_debugsprites = 2;} \ + if (screen->machine().input().code_pressed(KEYCODE_D)) { msk |= 0x08; state->m_debugsprites = 3;} \ + if (screen->machine().input().code_pressed(KEYCODE_F)) { msk |= 0x08; state->m_debugsprites = 4;} \ + if (screen->machine().input().code_pressed(KEYCODE_R)) { msk |= 0x10;} \ + if (screen->machine().input().code_pressed(KEYCODE_T)) { msk |= 0x20;} \ \ if (msk != 0) state->m_active_layers &= msk; \ } \ \ { \ - if ( input_code_pressed(screen->machine(), KEYCODE_Z) && input_code_pressed_once(screen->machine(), KEYCODE_U) ) \ + if ( screen->machine().input().code_pressed(KEYCODE_Z) && screen->machine().input().code_pressed_once(KEYCODE_U) ) \ state->m_show_unknown ^= 1; \ if (state->m_show_unknown) \ popmessage("0:%04X 2:%04X 4:%04X 6:%04X c:%04X", \ @@ -1423,16 +1423,16 @@ SCREEN_UPDATE( scudhamm ) #ifdef MAME_DEBUG state->m_debugsprites = 0; -if ( input_code_pressed(screen->machine(), KEYCODE_Z) || input_code_pressed(screen->machine(), KEYCODE_X) ) +if ( screen->machine().input().code_pressed(KEYCODE_Z) || screen->machine().input().code_pressed(KEYCODE_X) ) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) { msk |= 0x1;} - if (input_code_pressed(screen->machine(), KEYCODE_W)) { msk |= 0x2;} - if (input_code_pressed(screen->machine(), KEYCODE_E)) { msk |= 0x4;} - if (input_code_pressed(screen->machine(), KEYCODE_A)) { msk |= 0x8; state->m_debugsprites = 1;} - if (input_code_pressed(screen->machine(), KEYCODE_S)) { msk |= 0x8; state->m_debugsprites = 2;} - if (input_code_pressed(screen->machine(), KEYCODE_D)) { msk |= 0x8; state->m_debugsprites = 3;} - if (input_code_pressed(screen->machine(), KEYCODE_F)) { msk |= 0x8; state->m_debugsprites = 4;} + if (screen->machine().input().code_pressed(KEYCODE_Q)) { msk |= 0x1;} + if (screen->machine().input().code_pressed(KEYCODE_W)) { msk |= 0x2;} + if (screen->machine().input().code_pressed(KEYCODE_E)) { msk |= 0x4;} + if (screen->machine().input().code_pressed(KEYCODE_A)) { msk |= 0x8; state->m_debugsprites = 1;} + if (screen->machine().input().code_pressed(KEYCODE_S)) { msk |= 0x8; state->m_debugsprites = 2;} + if (screen->machine().input().code_pressed(KEYCODE_D)) { msk |= 0x8; state->m_debugsprites = 3;} + if (screen->machine().input().code_pressed(KEYCODE_F)) { msk |= 0x8; state->m_debugsprites = 4;} if (msk != 0) state->m_active_layers &= msk; #if 1 diff --git a/src/mame/video/cps1.c b/src/mame/video/cps1.c index 356ef9f3bfa..ad107633bbb 100644 --- a/src/mame/video/cps1.c +++ b/src/mame/video/cps1.c @@ -2565,7 +2565,7 @@ static void cps2_render_sprites( running_machine &machine, bitmap_t *bitmap, con int yoffs = 16 - cps2_port(machine, CPS2_OBJ_YOFFS); #ifdef MAME_DEBUG - if (input_code_pressed(machine, KEYCODE_Z) && input_code_pressed(machine, KEYCODE_R)) + if (machine.input().code_pressed(KEYCODE_Z) && machine.input().code_pressed(KEYCODE_R)) { return; } @@ -2905,7 +2905,7 @@ if ( (cps2_port(screen->machine(), CPS2_OBJ_BASE) != 0x7080 && cps2_port(screen- cps2_port(screen->machine(), CPS2_OBJ_UK1), cps2_port(screen->machine(), CPS2_OBJ_UK2)); -if (0 && input_code_pressed(screen->machine(), KEYCODE_Z)) +if (0 && screen->machine().input().code_pressed(KEYCODE_Z)) popmessage("order: %d (%d) %d (%d) %d (%d) %d (%d)",l0,l0pri,l1,l1pri,l2,l2pri,l3,l3pri); #endif diff --git a/src/mame/video/deco16ic.c b/src/mame/video/deco16ic.c index 83ccaf05912..6314abcc009 100644 --- a/src/mame/video/deco16ic.c +++ b/src/mame/video/deco16ic.c @@ -836,7 +836,7 @@ void deco16ic_print_debug_info(device_t *device, bitmap_t *bitmap) deco16ic_state *deco16ic = get_safe_token(device); char buf[64*5]; - if (input_code_pressed(device->machine(), KEYCODE_O)) + if (device->machine().input().code_pressed(KEYCODE_O)) return; if (deco16ic->pf12_control) diff --git a/src/mame/video/deco_mlc.c b/src/mame/video/deco_mlc.c index 553864abdfa..a3f450db85b 100644 --- a/src/mame/video/deco_mlc.c +++ b/src/mame/video/deco_mlc.c @@ -42,7 +42,7 @@ static void blitRaster(running_machine &machine, bitmap_t *bitmap, int rasterMod UINT32* dst=BITMAP_ADDR32(bitmap, y, 0); UINT32 xptr=(state->m_mlc_raster_table[0][y]<<13); - if (input_code_pressed(machine, KEYCODE_X)) + if (machine.input().code_pressed(KEYCODE_X)) xptr=0; for (x=0; x<320; x++) @@ -50,7 +50,7 @@ static void blitRaster(running_machine &machine, bitmap_t *bitmap, int rasterMod if (src[x]) dst[x]=src[(xptr>>16)&0x1ff]; - //if (input_code_pressed(machine, KEYCODE_X)) + //if (machine.input().code_pressed(KEYCODE_X)) // xptr+=0x10000; //else if(rasterHackTest[0][y]<0) xptr+=0x10000 - ((state->m_mlc_raster_table[2][y]&0x3ff)<<5); diff --git a/src/mame/video/decocass.c b/src/mame/video/decocass.c index 41590919ad1..b58a8a17280 100644 --- a/src/mame/video/decocass.c +++ b/src/mame/video/decocass.c @@ -535,7 +535,7 @@ SCREEN_UPDATE( decocass ) #ifdef MAME_DEBUG { - if (input_code_pressed_once(screen->machine(), KEYCODE_I)) + if (screen->machine().input().code_pressed_once(KEYCODE_I)) state->m_showmsg ^= 1; if (state->m_showmsg) popmessage("mode:$%02x cm:$%02x ccb:$%02x h:$%02x vl:$%02x vr:$%02x ph:$%02x pv:$%02x ch:$%02x cv:$%02x", diff --git a/src/mame/video/dynax.c b/src/mame/video/dynax.c index 3cf20a38d63..7d2cae7851e 100644 --- a/src/mame/video/dynax.c +++ b/src/mame/video/dynax.c @@ -1205,16 +1205,16 @@ static int debug_mask( running_machine &machine ) { #ifdef MAME_DEBUG int msk = 0; - if (input_code_pressed(machine, KEYCODE_Z)) + if (machine.input().code_pressed(KEYCODE_Z)) { - if (input_code_pressed(machine, KEYCODE_Q)) msk |= 0x01; // layer 0 - if (input_code_pressed(machine, KEYCODE_W)) msk |= 0x02; // layer 1 - if (input_code_pressed(machine, KEYCODE_E)) msk |= 0x04; // layer 2 - if (input_code_pressed(machine, KEYCODE_R)) msk |= 0x08; // layer 3 - if (input_code_pressed(machine, KEYCODE_A)) msk |= 0x10; // layer 4 - if (input_code_pressed(machine, KEYCODE_S)) msk |= 0x20; // layer 5 - if (input_code_pressed(machine, KEYCODE_D)) msk |= 0x40; // layer 6 - if (input_code_pressed(machine, KEYCODE_F)) msk |= 0x80; // layer 7 + if (machine.input().code_pressed(KEYCODE_Q)) msk |= 0x01; // layer 0 + if (machine.input().code_pressed(KEYCODE_W)) msk |= 0x02; // layer 1 + if (machine.input().code_pressed(KEYCODE_E)) msk |= 0x04; // layer 2 + if (machine.input().code_pressed(KEYCODE_R)) msk |= 0x08; // layer 3 + if (machine.input().code_pressed(KEYCODE_A)) msk |= 0x10; // layer 4 + if (machine.input().code_pressed(KEYCODE_S)) msk |= 0x20; // layer 5 + if (machine.input().code_pressed(KEYCODE_D)) msk |= 0x40; // layer 6 + if (machine.input().code_pressed(KEYCODE_F)) msk |= 0x80; // layer 7 if (msk != 0) return msk; } #endif @@ -1232,7 +1232,7 @@ static int debug_viewer( running_machine &machine, bitmap_t *bitmap, const recta #ifdef MAME_DEBUG static int toggle; - if (input_code_pressed_once(machine, KEYCODE_T)) toggle = 1 - toggle; + if (machine.input().code_pressed_once(KEYCODE_T)) toggle = 1 - toggle; if (toggle) { dynax_state *state = machine.driver_data<dynax_state>(); @@ -1240,14 +1240,14 @@ static int debug_viewer( running_machine &machine, bitmap_t *bitmap, const recta size_t size = machine.region( "gfx1" )->bytes(); static int i = 0, c = 0, r = 0; - if (input_code_pressed_once(machine, KEYCODE_I)) c = (c - 1) & 0x1f; - if (input_code_pressed_once(machine, KEYCODE_O)) c = (c + 1) & 0x1f; - if (input_code_pressed_once(machine, KEYCODE_R)) { r = (r + 1) & 0x7; i = size / 8 * r; } - if (input_code_pressed(machine, KEYCODE_M) | input_code_pressed_once(machine, KEYCODE_K)) + if (machine.input().code_pressed_once(KEYCODE_I)) c = (c - 1) & 0x1f; + if (machine.input().code_pressed_once(KEYCODE_O)) c = (c + 1) & 0x1f; + if (machine.input().code_pressed_once(KEYCODE_R)) { r = (r + 1) & 0x7; i = size / 8 * r; } + if (machine.input().code_pressed(KEYCODE_M) | machine.input().code_pressed_once(KEYCODE_K)) { while (i < size && RAM[i]) i++; while (i < size && !RAM[i]) i++; } - if (input_code_pressed(machine, KEYCODE_N) | input_code_pressed_once(machine, KEYCODE_J)) + if (machine.input().code_pressed(KEYCODE_N) | machine.input().code_pressed_once(KEYCODE_J)) { if (i >= 2) i -= 2; while (i > 0 && RAM[i]) i--; i++; } diff --git a/src/mame/video/esd16.c b/src/mame/video/esd16.c index b4de5327233..1d40849ced1 100644 --- a/src/mame/video/esd16.c +++ b/src/mame/video/esd16.c @@ -337,12 +337,12 @@ SCREEN_UPDATE( esd16 ) tilemap_set_scrolly(state->m_tilemap_1, 0, state->m_scroll_1[1]); #ifdef MAME_DEBUG -if (input_code_pressed(screen->machine(), KEYCODE_Z)) +if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= 4; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= 4; if (msk != 0) layers_ctrl &= msk; } #endif @@ -365,12 +365,12 @@ SCREEN_UPDATE( hedpanic ) bitmap_fill(screen->machine().priority_bitmap, cliprect, 0); #ifdef MAME_DEBUG -if (input_code_pressed(screen->machine(), KEYCODE_Z)) +if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= 4; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= 4; if (msk != 0) layers_ctrl &= msk; } #endif @@ -428,12 +428,12 @@ SCREEN_UPDATE( hedpanio ) bitmap_fill(screen->machine().priority_bitmap,cliprect,0); #ifdef MAME_DEBUG -if ( input_code_pressed(screen->machine(), KEYCODE_Z) ) +if ( screen->machine().input().code_pressed(KEYCODE_Z) ) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= 4; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= 4; if (msk != 0) layers_ctrl &= msk; } #endif diff --git a/src/mame/video/fitfight.c b/src/mame/video/fitfight.c index 4e97cfdb674..31211f8f27c 100644 --- a/src/mame/video/fitfight.c +++ b/src/mame/video/fitfight.c @@ -128,13 +128,13 @@ SCREEN_UPDATE(fitfight) if (vblank > 0) bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine())); else { -// if (input_code_pressed(screen->machine(), KEYCODE_Q)) +// if (screen->machine().input().code_pressed(KEYCODE_Q)) // scrollbak = ((state->m_fof_a00000[0] & 0xff00) >> 5) - ((state->m_fof_700000[0] & 0x0038) >> 3); -// else if (input_code_pressed(screen->machine(), KEYCODE_W)) +// else if (screen->machine().input().code_pressed(KEYCODE_W)) // scrollbak = ((state->m_fof_a00000[0] & 0xff00) >> 5) + ((state->m_fof_700000[0] & 0x01c0) >> 6); -// else if (input_code_pressed(screen->machine(), KEYCODE_E)) +// else if (screen->machine().input().code_pressed(KEYCODE_E)) // scrollbak = ((state->m_fof_a00000[0] & 0xff00) >> 5) - ((state->m_fof_700000[0] & 0x01c0) >> 6); -// else if (input_code_pressed(screen->machine(), KEYCODE_R)) +// else if (screen->machine().input().code_pressed(KEYCODE_R)) // scrollbak = ((state->m_fof_a00000[0] & 0xff00) >> 5) + ((state->m_fof_700000[0] & 0x0038) >> 3); // else scrollbak = ((state->m_fof_a00000[0] & 0xff00) >> 5); @@ -144,19 +144,19 @@ SCREEN_UPDATE(fitfight) draw_sprites(screen->machine(), bitmap, cliprect, 0); -// if (input_code_pressed(screen->machine(), KEYCODE_A)) +// if (screen->machine().input().code_pressed(KEYCODE_A)) // scrollmid = ((state->m_fof_900000[0] & 0xff00) >> 5) - ((state->m_fof_700000[0] & 0x01c0) >> 6); -// else if (input_code_pressed(screen->machine(), KEYCODE_S)) +// else if (screen->machine().input().code_pressed(KEYCODE_S)) // scrollmid = ((state->m_fof_900000[0] & 0xff00) >> 5) + ((state->m_fof_700000[0] & 0x0038) >> 3); -// else if (input_code_pressed(screen->machine(), KEYCODE_D)) +// else if (screen->machine().input().code_pressed(KEYCODE_D)) // scrollmid = ((state->m_fof_900000[0] & 0xff00) >> 5) - ((state->m_fof_700000[0] & 0x0038) >> 3); -// else if (input_code_pressed(screen->machine(), KEYCODE_F)) +// else if (screen->machine().input().code_pressed(KEYCODE_F)) // scrollmid = ((state->m_fof_900000[0] & 0xff00) >> 5) + ((state->m_fof_700000[0] & 0x01c0) >> 6); // else scrollmid = ((state->m_fof_900000[0] & 0xff00) >> 5); tilemap_set_scrollx(state->m_fof_mid_tilemap, 0, scrollmid ); tilemap_set_scrolly(state->m_fof_mid_tilemap, 0, state->m_fof_900000[0] & 0xff); -// if (!input_code_pressed(screen->machine(), KEYCODE_F)) +// if (!screen->machine().input().code_pressed(KEYCODE_F)) tilemap_draw(bitmap, cliprect, state->m_fof_mid_tilemap, 0, 0); draw_sprites(screen->machine(), bitmap, cliprect, 1); diff --git a/src/mame/video/funybubl.c b/src/mame/video/funybubl.c index e028b73296e..5027e3f13c1 100644 --- a/src/mame/video/funybubl.c +++ b/src/mame/video/funybubl.c @@ -97,7 +97,7 @@ SCREEN_UPDATE(funybubl) draw_sprites(screen->machine(), bitmap, cliprect); #if 0 - if ( input_code_pressed_once(screen->machine(), KEYCODE_W) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_W) ) { FILE *fp; diff --git a/src/mame/video/fuukifg2.c b/src/mame/video/fuukifg2.c index eea7f8f3580..25e116c4002 100644 --- a/src/mame/video/fuukifg2.c +++ b/src/mame/video/fuukifg2.c @@ -219,7 +219,7 @@ static void draw_sprites( screen_device &screen, bitmap_t *bitmap, const rectang #ifdef MAME_DEBUG #if 0 -if (input_code_pressed(screen.machine(), KEYCODE_X)) +if (screen.machine().input().code_pressed(KEYCODE_X)) { /* Display some info on each sprite */ char buf[40]; sprintf(buf, "%Xx%X %X",xnum,ynum,(attr>>6)&3); diff --git a/src/mame/video/fuukifg3.c b/src/mame/video/fuukifg3.c index 02006acdc33..e1552bb8d65 100644 --- a/src/mame/video/fuukifg3.c +++ b/src/mame/video/fuukifg3.c @@ -211,10 +211,10 @@ static void draw_sprites( screen_device &screen, bitmap_t *bitmap, const rectang else { ystart = 0; yend = ynum; yinc = +1; } #if 0 - if(!( (input_code_pressed(screen.machine(), KEYCODE_V) && (((attr >> 6)&3) == 0)) - || (input_code_pressed(screen.machine(), KEYCODE_B) && (((attr >> 6)&3) == 1)) - || (input_code_pressed(screen.machine(), KEYCODE_N) && (((attr >> 6)&3) == 2)) - || (input_code_pressed(screen.machine(), KEYCODE_M) && (((attr >> 6)&3) == 3)) + if(!( (screen.machine().input().code_pressed(KEYCODE_V) && (((attr >> 6)&3) == 0)) + || (screen.machine().input().code_pressed(KEYCODE_B) && (((attr >> 6)&3) == 1)) + || (screen.machine().input().code_pressed(KEYCODE_N) && (((attr >> 6)&3) == 2)) + || (screen.machine().input().code_pressed(KEYCODE_M) && (((attr >> 6)&3) == 3)) )) #endif @@ -243,7 +243,7 @@ static void draw_sprites( screen_device &screen, bitmap_t *bitmap, const rectang #ifdef MAME_DEBUG #if 0 -if (input_code_pressed(screen.machine(), KEYCODE_X)) +if (screen.machine().input().code_pressed(KEYCODE_X)) { /* Display some info on each sprite */ char buf[40]; sprintf(buf, "%Xx%X %X",xnum,ynum,(attr>>6)&3); diff --git a/src/mame/video/gaelco3d.c b/src/mame/video/gaelco3d.c index d1286e84c7d..aa596bde006 100644 --- a/src/mame/video/gaelco3d.c +++ b/src/mame/video/gaelco3d.c @@ -451,26 +451,26 @@ SCREEN_UPDATE( gaelco3d ) gaelco3d_state *state = screen->machine().driver_data<gaelco3d_state>(); int x, y, ret; - if (DISPLAY_TEXTURE && (input_code_pressed(screen->machine(), KEYCODE_Z) || input_code_pressed(screen->machine(), KEYCODE_X))) + if (DISPLAY_TEXTURE && (screen->machine().input().code_pressed(KEYCODE_Z) || screen->machine().input().code_pressed(KEYCODE_X))) { static int xv = 0, yv = 0x1000; UINT8 *base = state->m_texture; int length = state->m_texture_size; - if (input_code_pressed(screen->machine(), KEYCODE_X)) + if (screen->machine().input().code_pressed(KEYCODE_X)) { base = state->m_texmask; length = state->m_texmask_size; } - if (input_code_pressed(screen->machine(), KEYCODE_LEFT) && xv >= 4) + if (screen->machine().input().code_pressed(KEYCODE_LEFT) && xv >= 4) xv -= 4; - if (input_code_pressed(screen->machine(), KEYCODE_RIGHT) && xv < 4096 - 4) + if (screen->machine().input().code_pressed(KEYCODE_RIGHT) && xv < 4096 - 4) xv += 4; - if (input_code_pressed(screen->machine(), KEYCODE_UP) && yv >= 4) + if (screen->machine().input().code_pressed(KEYCODE_UP) && yv >= 4) yv -= 4; - if (input_code_pressed(screen->machine(), KEYCODE_DOWN) && yv < 0x40000) + if (screen->machine().input().code_pressed(KEYCODE_DOWN) && yv < 0x40000) yv += 4; for (y = cliprect->min_y; y <= cliprect->max_y; y++) diff --git a/src/mame/video/galastrm.c b/src/mame/video/galastrm.c index 69e3a5377a3..00bb77e05aa 100644 --- a/src/mame/video/galastrm.c +++ b/src/mame/video/galastrm.c @@ -476,17 +476,17 @@ SCREEN_UPDATE( galastrm ) #if 0 if (layer[0]==0 && layer[1]==3 && layer[2]==2 && layer[3]==1) { - if (!input_code_pressed(screen->machine(), KEYCODE_Z)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[0], 0, 1); - if (!input_code_pressed(screen->machine(), KEYCODE_X)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[1], 0, 4); - if (!input_code_pressed(screen->machine(), KEYCODE_C)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[2], 0, 4); - if (!input_code_pressed(screen->machine(), KEYCODE_V)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[3], 0, 4); + if (!screen->machine().input().code_pressed(KEYCODE_Z)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[0], 0, 1); + if (!screen->machine().input().code_pressed(KEYCODE_X)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[1], 0, 4); + if (!screen->machine().input().code_pressed(KEYCODE_C)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[2], 0, 4); + if (!screen->machine().input().code_pressed(KEYCODE_V)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[3], 0, 4); } else { - if (!input_code_pressed(screen->machine(), KEYCODE_Z)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[0], 0, 1); - if (!input_code_pressed(screen->machine(), KEYCODE_X)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[1], 0, 2); - if (!input_code_pressed(screen->machine(), KEYCODE_C)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[2], 0, 4); - if (!input_code_pressed(screen->machine(), KEYCODE_V)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[3], 0, 8); + if (!screen->machine().input().code_pressed(KEYCODE_Z)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[0], 0, 1); + if (!screen->machine().input().code_pressed(KEYCODE_X)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[1], 0, 2); + if (!screen->machine().input().code_pressed(KEYCODE_C)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[2], 0, 4); + if (!screen->machine().input().code_pressed(KEYCODE_V)) tc0480scp_tilemap_draw(tc0480scp, state->m_tmpbitmaps, &clip, layer[3], 0, 8); } if (layer[0]==3 && layer[1]==0 && layer[2]==1 && layer[3]==2) @@ -515,8 +515,8 @@ SCREEN_UPDATE( galastrm ) bitmap_fill(priority_bitmap, cliprect, 0); draw_sprites(screen->machine(),bitmap,cliprect,primasks,0); - if (!input_code_pressed(screen->machine(), KEYCODE_B)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[4], 0, 0); - if (!input_code_pressed(screen->machine(), KEYCODE_M)) tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, pivlayer[2], 0, 0); + if (!screen->machine().input().code_pressed(KEYCODE_B)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[4], 0, 0); + if (!screen->machine().input().code_pressed(KEYCODE_M)) tc0100scn_tilemap_draw(tc0100scn, bitmap, cliprect, pivlayer[2], 0, 0); diff --git a/src/mame/video/galpani2.c b/src/mame/video/galpani2.c index cd90857e7a1..4cac46443dc 100644 --- a/src/mame/video/galpani2.c +++ b/src/mame/video/galpani2.c @@ -147,13 +147,13 @@ SCREEN_UPDATE( galpani2 ) int layers_ctrl = -1; #ifdef MAME_DEBUG -if (input_code_pressed(screen->machine(), KEYCODE_Z)) +if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_E)) msk |= 4; - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= 8; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_E)) msk |= 4; + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= 8; if (msk != 0) layers_ctrl &= msk; } #endif diff --git a/src/mame/video/gcpinbal.c b/src/mame/video/gcpinbal.c index 0a3a7c89164..6c7e791413c 100644 --- a/src/mame/video/gcpinbal.c +++ b/src/mame/video/gcpinbal.c @@ -256,19 +256,19 @@ SCREEN_UPDATE( gcpinbal ) UINT8 layer[3]; #ifdef MAME_DEBUG - if (input_code_pressed_once(screen->machine(), KEYCODE_V)) + if (screen->machine().input().code_pressed_once(KEYCODE_V)) { state->m_dislayer[0] ^= 1; popmessage("bg0: %01x", state->m_dislayer[0]); } - if (input_code_pressed_once(screen->machine(), KEYCODE_B)) + if (screen->machine().input().code_pressed_once(KEYCODE_B)) { state->m_dislayer[1] ^= 1; popmessage("bg1: %01x", state->m_dislayer[1]); } - if (input_code_pressed_once(screen->machine(), KEYCODE_N)) + if (screen->machine().input().code_pressed_once(KEYCODE_N)) { state->m_dislayer[2] ^= 1; popmessage("fg: %01x", state->m_dislayer[2]); diff --git a/src/mame/video/ginganin.c b/src/mame/video/ginganin.c index 162a5e3df10..9b9e6ab2aca 100644 --- a/src/mame/video/ginganin.c +++ b/src/mame/video/ginganin.c @@ -251,14 +251,14 @@ SCREEN_UPDATE( ginganin ) int layers_ctrl1 = state->m_layers_ctrl; #ifdef MAME_DEBUG -if (input_code_pressed(screen->machine(), KEYCODE_Z)) +if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) { msk |= 0xfff1;} - if (input_code_pressed(screen->machine(), KEYCODE_W)) { msk |= 0xfff2;} - if (input_code_pressed(screen->machine(), KEYCODE_E)) { msk |= 0xfff4;} - if (input_code_pressed(screen->machine(), KEYCODE_A)) { msk |= 0xfff8;} + if (screen->machine().input().code_pressed(KEYCODE_Q)) { msk |= 0xfff1;} + if (screen->machine().input().code_pressed(KEYCODE_W)) { msk |= 0xfff2;} + if (screen->machine().input().code_pressed(KEYCODE_E)) { msk |= 0xfff4;} + if (screen->machine().input().code_pressed(KEYCODE_A)) { msk |= 0xfff8;} if (msk != 0) layers_ctrl1 &= msk; #define SETSCROLL \ @@ -268,11 +268,11 @@ if (input_code_pressed(screen->machine(), KEYCODE_Z)) tilemap_set_scrolly(state->m_fg_tilemap, 0, state->m_posy); \ popmessage("B>%04X:%04X F>%04X:%04X",state->m_posx%(BG_NX*16),state->m_posy%(BG_NY*16),state->m_posx%(FG_NX*16),state->m_posy%(FG_NY*16)); - if (input_code_pressed(screen->machine(), KEYCODE_L)) { state->m_posx +=8; SETSCROLL } - if (input_code_pressed(screen->machine(), KEYCODE_J)) { state->m_posx -=8; SETSCROLL } - if (input_code_pressed(screen->machine(), KEYCODE_K)) { state->m_posy +=8; SETSCROLL } - if (input_code_pressed(screen->machine(), KEYCODE_I)) { state->m_posy -=8; SETSCROLL } - if (input_code_pressed(screen->machine(), KEYCODE_H)) { state->m_posx = state->m_posy = 0; SETSCROLL } + if (screen->machine().input().code_pressed(KEYCODE_L)) { state->m_posx +=8; SETSCROLL } + if (screen->machine().input().code_pressed(KEYCODE_J)) { state->m_posx -=8; SETSCROLL } + if (screen->machine().input().code_pressed(KEYCODE_K)) { state->m_posy +=8; SETSCROLL } + if (screen->machine().input().code_pressed(KEYCODE_I)) { state->m_posy -=8; SETSCROLL } + if (screen->machine().input().code_pressed(KEYCODE_H)) { state->m_posx = state->m_posy = 0; SETSCROLL } } #endif diff --git a/src/mame/video/gticlub.c b/src/mame/video/gticlub.c index df7517d178e..2212f99c53f 100644 --- a/src/mame/video/gticlub.c +++ b/src/mame/video/gticlub.c @@ -995,15 +995,15 @@ SCREEN_UPDATE( gticlub ) if( tick >= 5 ) { tick = 0; - if( input_code_pressed(screen->machine(), KEYCODE_O) ) + if( screen->machine().input().code_pressed(KEYCODE_O) ) debug_tex_page++; - if( input_code_pressed(screen->machine(), KEYCODE_I) ) + if( screen->machine().input().code_pressed(KEYCODE_I) ) debug_tex_page--; - if (input_code_pressed(screen->machine(), KEYCODE_U)) + if (screen->machine().input().code_pressed(KEYCODE_U)) debug_tex_palette++; - if (input_code_pressed(screen->machine(), KEYCODE_Y)) + if (screen->machine().input().code_pressed(KEYCODE_Y)) debug_tex_palette--; if (debug_tex_page < 0) diff --git a/src/mame/video/gunbustr.c b/src/mame/video/gunbustr.c index 7b2ed64446a..cd8d05558e9 100644 --- a/src/mame/video/gunbustr.c +++ b/src/mame/video/gunbustr.c @@ -224,12 +224,12 @@ SCREEN_UPDATE( gunbustr ) sprites as pdrawgfx cannot yet cope with more than 4 layers */ #ifdef MAME_DEBUG - if (!input_code_pressed (screen->machine(), KEYCODE_Z)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[0],TILEMAP_DRAW_OPAQUE, 0); - if (!input_code_pressed (screen->machine(), KEYCODE_X)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[1], 0, 1); - if (!input_code_pressed (screen->machine(), KEYCODE_C)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[2], 0, 2); - if (!input_code_pressed (screen->machine(), KEYCODE_V)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[3], 0, 4); - if (!input_code_pressed (screen->machine(), KEYCODE_B)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[4], 0, 8); - if (!input_code_pressed (screen->machine(), KEYCODE_N)) draw_sprites(screen->machine(), bitmap, cliprect, primasks, 48, -116); + if (!screen->machine().input().code_pressed (KEYCODE_Z)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[0],TILEMAP_DRAW_OPAQUE, 0); + if (!screen->machine().input().code_pressed (KEYCODE_X)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[1], 0, 1); + if (!screen->machine().input().code_pressed (KEYCODE_C)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[2], 0, 2); + if (!screen->machine().input().code_pressed (KEYCODE_V)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[3], 0, 4); + if (!screen->machine().input().code_pressed (KEYCODE_B)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[4], 0, 8); + if (!screen->machine().input().code_pressed (KEYCODE_N)) draw_sprites(screen->machine(), bitmap, cliprect, primasks, 48, -116); #else tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 0); tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[1], 0, 1); diff --git a/src/mame/video/hng64.c b/src/mame/video/hng64.c index 8ea598b13c1..e90ec78fe9a 100644 --- a/src/mame/video/hng64.c +++ b/src/mame/video/hng64.c @@ -1461,7 +1461,7 @@ SCREEN_UPDATE( hng64 ) // press in sams64_2 attract mode for a nice debug screen from the game // not sure how functional it is, and it doesn't appear to test everything (rowscroll modes etc.) // but it could be useful - if ( input_code_pressed_once(screen->machine(), KEYCODE_L) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_L) ) { address_space *space = screen->machine().device("maincpu")->memory().space(AS_PROGRAM); space->write_byte(0x2f27c8, 0x2); @@ -1630,22 +1630,22 @@ SCREEN_UPDATE( hng64 ) hng64_tcram[0x58/4], hng64_tcram[0x5c/4]); - if ( input_code_pressed_once(screen->machine(), KEYCODE_T) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_T) ) { state->m_additive_tilemap_debug ^= 1; popmessage("blend changed %02x", state->m_additive_tilemap_debug); } - if ( input_code_pressed_once(screen->machine(), KEYCODE_Y) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_Y) ) { state->m_additive_tilemap_debug ^= 2; popmessage("blend changed %02x", state->m_additive_tilemap_debug); } - if ( input_code_pressed_once(screen->machine(), KEYCODE_U) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_U) ) { state->m_additive_tilemap_debug ^= 4; popmessage("blend changed %02x", state->m_additive_tilemap_debug); } - if ( input_code_pressed_once(screen->machine(), KEYCODE_I) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_I) ) { state->m_additive_tilemap_debug ^= 8; popmessage("blend changed %02x", state->m_additive_tilemap_debug); diff --git a/src/mame/video/holeland.c b/src/mame/video/holeland.c index 1f9d1bd113e..4d49073f8c6 100644 --- a/src/mame/video/holeland.c +++ b/src/mame/video/holeland.c @@ -22,10 +22,10 @@ static TILE_GET_INFO( holeland_get_tile_info ) int attr = state->m_colorram[tile_index]; int tile_number = state->m_videoram[tile_index] | ((attr & 0x03) << 8); -/*if (input_code_pressed(machine, KEYCODE_Q) && (attr & 0x10)) tile_number = rand(); */ -/*if (input_code_pressed(machine, KEYCODE_W) && (attr & 0x20)) tile_number = rand(); */ -/*if (input_code_pressed(machine, KEYCODE_E) && (attr & 0x40)) tile_number = rand(); */ -/*if (input_code_pressed(machine, KEYCODE_R) && (attr & 0x80)) tile_number = rand(); */ +/*if (machine.input().code_pressed(KEYCODE_Q) && (attr & 0x10)) tile_number = rand(); */ +/*if (machine.input().code_pressed(KEYCODE_W) && (attr & 0x20)) tile_number = rand(); */ +/*if (machine.input().code_pressed(KEYCODE_E) && (attr & 0x40)) tile_number = rand(); */ +/*if (machine.input().code_pressed(KEYCODE_R) && (attr & 0x80)) tile_number = rand(); */ SET_TILE_INFO( 0, tile_number, diff --git a/src/mame/video/hyprduel.c b/src/mame/video/hyprduel.c index 82225d92a20..7893132518e 100644 --- a/src/mame/video/hyprduel.c +++ b/src/mame/video/hyprduel.c @@ -725,12 +725,12 @@ SCREEN_UPDATE( hyprduel ) flip_screen_set(screen->machine(), screenctrl & 1); #if 0 -if (input_code_pressed(screen->machine(), KEYCODE_Z)) +if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 0x01; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 0x02; - if (input_code_pressed(screen->machine(), KEYCODE_E)) msk |= 0x04; - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= 0x08; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 0x01; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 0x02; + if (screen->machine().input().code_pressed(KEYCODE_E)) msk |= 0x04; + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= 0x08; if (msk != 0) { bitmap_fill(bitmap, cliprect,0); diff --git a/src/mame/video/itech32.c b/src/mame/video/itech32.c index 227c8787d0d..8e2fb1ddb18 100644 --- a/src/mame/video/itech32.c +++ b/src/mame/video/itech32.c @@ -383,7 +383,7 @@ WRITE32_HANDLER( itech020_paletteram_w ) static void logblit(running_machine &machine, const char *tag) { itech32_state *state = machine.driver_data<itech32_state>(); - if (!input_code_pressed(machine, KEYCODE_L)) + if (!machine.input().code_pressed(KEYCODE_L)) return; if (state->m_is_drivedge && VIDEO_TRANSFER_FLAGS == 0x5490) { diff --git a/src/mame/video/konamigx.c b/src/mame/video/konamigx.c index 41fa95480f9..91d5c9b092a 100644 --- a/src/mame/video/konamigx.c +++ b/src/mame/video/konamigx.c @@ -2567,7 +2567,7 @@ SCREEN_UPDATE(konamigx) { const pen_t *paldata = screen->machine().pens; - if ( input_code_pressed(screen->machine(), KEYCODE_W) ) + if ( screen->machine().input().code_pressed(KEYCODE_W) ) { int y,x; diff --git a/src/mame/video/konamiic.c b/src/mame/video/konamiic.c index b9179e4d2ef..d6959a78864 100644 --- a/src/mame/video/konamiic.c +++ b/src/mame/video/konamiic.c @@ -1617,7 +1617,7 @@ static void K053936_zoom_draw(int chip,UINT16 *ctrl,UINT16 *linectrl, bitmap_t * } #if 0 -if (input_code_pressed(machine, KEYCODE_D)) +if (machine.input().code_pressed(KEYCODE_D)) popmessage("%04x %04x %04x %04x\n%04x %04x %04x %04x\n%04x %04x %04x %04x\n%04x %04x %04x %04x", ctrl[0x00], ctrl[0x01], diff --git a/src/mame/video/konicdev.c b/src/mame/video/konicdev.c index 6f2ea960953..b70168dd0ee 100644 --- a/src/mame/video/konicdev.c +++ b/src/mame/video/konicdev.c @@ -1737,7 +1737,7 @@ void k007342_tilemap_update( device_t *device ) { static int current_layer = 0; - if (input_code_pressed_once(machine, KEYCODE_Z)) current_layer = !current_layer; + if (machine.input().code_pressed_once(KEYCODE_Z)) current_layer = !current_layer; tilemap_set_enable(k007342->tilemap[current_layer], 1); tilemap_set_enable(k007342->tilemap[!current_layer], 0); @@ -2086,8 +2086,8 @@ void k007420_sprites_draw( device_t *device, bitmap_t *bitmap, const rectangle * { static int current_sprite = 0; - if (input_code_pressed_once(machine, KEYCODE_Z)) current_sprite = (current_sprite+1) & ((K007420_SPRITERAM_SIZE/8)-1); - if (input_code_pressed_once(machine, KEYCODE_X)) current_sprite = (current_sprite-1) & ((K007420_SPRITERAM_SIZE/8)-1); + if (machine.input().code_pressed_once(KEYCODE_Z)) current_sprite = (current_sprite+1) & ((K007420_SPRITERAM_SIZE/8)-1); + if (machine.input().code_pressed_once(KEYCODE_X)) current_sprite = (current_sprite-1) & ((K007420_SPRITERAM_SIZE/8)-1); popmessage("%02x:%02x %02x %02x %02x %02x %02x %02x %02x", current_sprite, k007420->ram[(current_sprite*8)+0], k007420->ram[(current_sprite*8)+1], @@ -2547,7 +2547,7 @@ if ((k052109->scrollctrl & 0x03) == 0x01 || (k052109->scrollctrl & 0xc0) != 0) popmessage("scrollcontrol = %02x", k052109->scrollctrl); -if (input_code_pressed(machine, KEYCODE_F)) +if (machine.input().code_pressed(KEYCODE_F)) { FILE *fp; fp=fopen("TILE.DMP", "w+b"); @@ -3182,7 +3182,7 @@ void k051960_sprites_draw( device_t *device, bitmap_t *bitmap, const rectangle * } } #if 0 -if (input_code_pressed(machine, KEYCODE_D)) +if (machine.input().code_pressed(KEYCODE_D)) { FILE *fp; fp=fopen("SPRITE.DMP", "w+b"); @@ -3766,7 +3766,7 @@ void k053245_sprites_draw( device_t *device, bitmap_t *bitmap, const rectangle * } } #if 0 -if (input_code_pressed(machine, KEYCODE_D)) +if (machine.input().code_pressed(KEYCODE_D)) { FILE *fp; fp=fopen("SPRITE.DMP", "w+b"); @@ -4016,7 +4016,7 @@ void k053245_sprites_draw_lethal( device_t *device, bitmap_t *bitmap, const rect } } #if 0 -if (input_code_pressed(machine, KEYCODE_D)) +if (machine.input().code_pressed(KEYCODE_D)) { FILE *fp; fp=fopen("SPRITE.DMP", "w+b"); @@ -5570,7 +5570,7 @@ void k053936_zoom_draw( device_t *device, bitmap_t *bitmap, const rectangle *cli } #if 0 -if (input_code_pressed(machine, KEYCODE_D)) +if (machine.input().code_pressed(KEYCODE_D)) popmessage("%04x %04x %04x %04x\n%04x %04x %04x %04x\n%04x %04x %04x %04x\n%04x %04x %04x %04x", k053936->ctrl[0x00], k053936->ctrl[0x01], diff --git a/src/mame/video/lordgun.c b/src/mame/video/lordgun.c index bc939271d1e..d07c541c20b 100644 --- a/src/mame/video/lordgun.c +++ b/src/mame/video/lordgun.c @@ -331,15 +331,15 @@ SCREEN_UPDATE( lordgun ) int layers_ctrl = -1; #ifdef MAME_DEBUG - if (input_code_pressed(screen->machine(), KEYCODE_Z)) + if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_E)) msk |= 4; - if (input_code_pressed(screen->machine(), KEYCODE_R)) msk |= 8; - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= 16; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_E)) msk |= 4; + if (screen->machine().input().code_pressed(KEYCODE_R)) msk |= 8; + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= 16; if (msk != 0) layers_ctrl &= msk; } #endif diff --git a/src/mame/video/mcatadv.c b/src/mame/video/mcatadv.c index 32582c76907..997489961bd 100644 --- a/src/mame/video/mcatadv.c +++ b/src/mame/video/mcatadv.c @@ -231,19 +231,19 @@ SCREEN_UPDATE( mcatadv ) for (i = 0; i <= 3; i++) { #ifdef MAME_DEBUG - if (!input_code_pressed(screen->machine(), KEYCODE_Q)) + if (!screen->machine().input().code_pressed(KEYCODE_Q)) #endif mcatadv_draw_tilemap_part(state->m_scroll1, state->m_videoram1, i, state->m_tilemap1, bitmap, cliprect); #ifdef MAME_DEBUG - if (!input_code_pressed(screen->machine(), KEYCODE_W)) + if (!screen->machine().input().code_pressed(KEYCODE_W)) #endif mcatadv_draw_tilemap_part(state->m_scroll2, state->m_videoram2, i, state->m_tilemap2, bitmap, cliprect); } g_profiler.start(PROFILER_USER1); #ifdef MAME_DEBUG - if (!input_code_pressed(screen->machine(), KEYCODE_E)) + if (!screen->machine().input().code_pressed(KEYCODE_E)) #endif draw_sprites (screen->machine(), bitmap, cliprect); g_profiler.stop(); diff --git a/src/mame/video/metro.c b/src/mame/video/metro.c index e892fcf4793..161854a667d 100644 --- a/src/mame/video/metro.c +++ b/src/mame/video/metro.c @@ -768,13 +768,13 @@ SCREEN_UPDATE( metro ) #ifdef MAME_DEBUG -if (input_code_pressed(screen->machine(), KEYCODE_Z)) +if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_E)) msk |= 4; - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= 8; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_E)) msk |= 4; + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= 8; if (msk != 0) { bitmap_fill(bitmap, cliprect, 0); diff --git a/src/mame/video/midtunit.c b/src/mame/video/midtunit.c index 704d2d031c0..b354656406b 100644 --- a/src/mame/video/midtunit.c +++ b/src/mame/video/midtunit.c @@ -715,7 +715,7 @@ WRITE16_HANDLER( midtunit_dma_w ) if (LOG_DMA) { - if (input_code_pressed(space->machine(), KEYCODE_L)) + if (space->machine().input().code_pressed(KEYCODE_L)) { logerror("DMA command %04X: (bpp=%d skip=%d xflip=%d yflip=%d preskip=%d postskip=%d)\n", command, (command >> 12) & 7, (command >> 7) & 1, (command >> 4) & 1, (command >> 5) & 1, (command >> 8) & 3, (command >> 10) & 3); diff --git a/src/mame/video/midvunit.c b/src/mame/video/midvunit.c index 2d586b6c7af..2b18876bbb8 100644 --- a/src/mame/video/midvunit.c +++ b/src/mame/video/midvunit.c @@ -370,7 +370,7 @@ static void process_dma_queue(running_machine &machine) WRITE32_HANDLER( midvunit_dma_queue_w ) { midvunit_state *state = space->machine().driver_data<midvunit_state>(); - if (LOG_DMA && input_code_pressed(space->machine(), KEYCODE_L)) + if (LOG_DMA && space->machine().input().code_pressed(KEYCODE_L)) logerror("%06X:queue(%X) = %08X\n", cpu_get_pc(&space->device()), state->m_dma_data_index, data); if (state->m_dma_data_index < 16) state->m_dma_data[state->m_dma_data_index++] = data; @@ -389,7 +389,7 @@ READ32_HANDLER( midvunit_dma_trigger_r ) midvunit_state *state = space->machine().driver_data<midvunit_state>(); if (offset) { - if (LOG_DMA && input_code_pressed(space->machine(), KEYCODE_L)) + if (LOG_DMA && space->machine().input().code_pressed(KEYCODE_L)) logerror("%06X:trigger\n", cpu_get_pc(&space->device())); process_dma_queue(space->machine()); state->m_dma_data_index = 0; @@ -412,7 +412,7 @@ WRITE32_HANDLER( midvunit_page_control_w ) if ((state->m_page_control ^ data) & 1) { state->m_video_changed = TRUE; - if (LOG_DMA && input_code_pressed(space->machine(), KEYCODE_L)) + if (LOG_DMA && space->machine().input().code_pressed(KEYCODE_L)) logerror("##########################################################\n"); space->machine().primary_screen->update_partial(space->machine().primary_screen->vpos() - 1); } diff --git a/src/mame/video/midyunit.c b/src/mame/video/midyunit.c index 974162754ed..c676e407f40 100644 --- a/src/mame/video/midyunit.c +++ b/src/mame/video/midyunit.c @@ -445,7 +445,7 @@ WRITE16_HANDLER( midyunit_dma_w ) if (LOG_DMA) { - if (input_code_pressed(space->machine(), KEYCODE_L)) + if (space->machine().input().code_pressed(KEYCODE_L)) { logerror("----\n"); logerror("DMA command %04X: (xflip=%d yflip=%d)\n", diff --git a/src/mame/video/midzeus.c b/src/mame/video/midzeus.c index 0582f503cfd..dd100af66ff 100644 --- a/src/mame/video/midzeus.c +++ b/src/mame/video/midzeus.c @@ -317,7 +317,7 @@ SCREEN_UPDATE( midzeus ) poly_wait(poly, "VIDEO_UPDATE"); /* normal update case */ - if (!input_code_pressed(screen->machine(), KEYCODE_W)) + if (!screen->machine().input().code_pressed(KEYCODE_W)) { const void *base = waveram1_ptr_from_expanded_addr(zeusbase[0xcc]); int xoffs = screen->visible_area().min_x; @@ -334,10 +334,10 @@ SCREEN_UPDATE( midzeus ) { const void *base; - if (input_code_pressed(screen->machine(), KEYCODE_DOWN)) yoffs += input_code_pressed(screen->machine(), KEYCODE_LSHIFT) ? 0x40 : 1; - if (input_code_pressed(screen->machine(), KEYCODE_UP)) yoffs -= input_code_pressed(screen->machine(), KEYCODE_LSHIFT) ? 0x40 : 1; - if (input_code_pressed(screen->machine(), KEYCODE_LEFT) && texel_width > 4) { texel_width >>= 1; while (input_code_pressed(screen->machine(), KEYCODE_LEFT)) ; } - if (input_code_pressed(screen->machine(), KEYCODE_RIGHT) && texel_width < 512) { texel_width <<= 1; while (input_code_pressed(screen->machine(), KEYCODE_RIGHT)) ; } + if (screen->machine().input().code_pressed(KEYCODE_DOWN)) yoffs += screen->machine().input().code_pressed(KEYCODE_LSHIFT) ? 0x40 : 1; + if (screen->machine().input().code_pressed(KEYCODE_UP)) yoffs -= screen->machine().input().code_pressed(KEYCODE_LSHIFT) ? 0x40 : 1; + if (screen->machine().input().code_pressed(KEYCODE_LEFT) && texel_width > 4) { texel_width >>= 1; while (screen->machine().input().code_pressed(KEYCODE_LEFT)) ; } + if (screen->machine().input().code_pressed(KEYCODE_RIGHT) && texel_width < 512) { texel_width <<= 1; while (screen->machine().input().code_pressed(KEYCODE_RIGHT)) ; } if (yoffs < 0) yoffs = 0; base = waveram0_ptr_from_block_addr(yoffs << 12); @@ -739,7 +739,7 @@ static void zeus_register_update(running_machine &machine, offs_t offset) case 0xcc: machine.primary_screen->update_partial(machine.primary_screen->vpos()); - log_fifo = input_code_pressed(machine, KEYCODE_L); + log_fifo = machine.input().code_pressed(KEYCODE_L); break; case 0xe0: @@ -1099,7 +1099,7 @@ if ( { if (logit) logerror("quad (culled %08X)\n", rotnormal[2]); -// if (input_code_pressed(machine, KEYCODE_COMMA)) +// if (machine.input().code_pressed(KEYCODE_COMMA)) // return; } @@ -1112,13 +1112,13 @@ if ( val2 = (texdata >> 16) & 0x3ff; texwshift = (val2 >> 6) & 7; -//if (input_code_pressed(machine, KEYCODE_Z) && (val2 & 0x01)) return; -//if (input_code_pressed(machine, KEYCODE_X) && (val2 & 0x02)) return; -//if (input_code_pressed(machine, KEYCODE_C) && (val2 & 0x04)) return; -//if (input_code_pressed(machine, KEYCODE_V) && (val2 & 0x08)) return; -//if (input_code_pressed(machine, KEYCODE_B) && (val2 & 0x10)) return; -//if (input_code_pressed(machine, KEYCODE_N) && (val2 & 0x20)) return; -//if (input_code_pressed(machine, KEYCODE_M) && (val2 & 0x200)) return; +//if (machine.input().code_pressed(KEYCODE_Z) && (val2 & 0x01)) return; +//if (machine.input().code_pressed(KEYCODE_X) && (val2 & 0x02)) return; +//if (machine.input().code_pressed(KEYCODE_C) && (val2 & 0x04)) return; +//if (machine.input().code_pressed(KEYCODE_V) && (val2 & 0x08)) return; +//if (machine.input().code_pressed(KEYCODE_B) && (val2 & 0x10)) return; +//if (machine.input().code_pressed(KEYCODE_N) && (val2 & 0x20)) return; +//if (machine.input().code_pressed(KEYCODE_M) && (val2 & 0x200)) return; uscale = (8 >> ((zeusbase[0x04] >> 4) & 3)) * 0.125f * 256.0f; vscale = (8 >> ((zeusbase[0x04] >> 6) & 3)) * 0.125f * 256.0f; diff --git a/src/mame/video/midzeus2.c b/src/mame/video/midzeus2.c index c75e6f9d90f..76d7dbb6e9d 100644 --- a/src/mame/video/midzeus2.c +++ b/src/mame/video/midzeus2.c @@ -364,11 +364,11 @@ SCREEN_UPDATE( midzeus2 ) poly_wait(poly, "VIDEO_UPDATE"); -if (input_code_pressed(screen->machine(), KEYCODE_UP)) { zbase += 1.0f; popmessage("Zbase = %f", zbase); } -if (input_code_pressed(screen->machine(), KEYCODE_DOWN)) { zbase -= 1.0f; popmessage("Zbase = %f", zbase); } +if (screen->machine().input().code_pressed(KEYCODE_UP)) { zbase += 1.0f; popmessage("Zbase = %f", zbase); } +if (screen->machine().input().code_pressed(KEYCODE_DOWN)) { zbase -= 1.0f; popmessage("Zbase = %f", zbase); } /* normal update case */ - if (!input_code_pressed(screen->machine(), KEYCODE_W)) + if (!screen->machine().input().code_pressed(KEYCODE_W)) { const void *base = waveram1_ptr_from_expanded_addr(zeusbase[0x38]); int xoffs = screen->visible_area().min_x; @@ -385,10 +385,10 @@ if (input_code_pressed(screen->machine(), KEYCODE_DOWN)) { zbase -= 1.0f; popmes { const UINT64 *base; - if (input_code_pressed(screen->machine(), KEYCODE_DOWN)) yoffs += input_code_pressed(screen->machine(), KEYCODE_LSHIFT) ? 0x40 : 1; - if (input_code_pressed(screen->machine(), KEYCODE_UP)) yoffs -= input_code_pressed(screen->machine(), KEYCODE_LSHIFT) ? 0x40 : 1; - if (input_code_pressed(screen->machine(), KEYCODE_LEFT) && texel_width > 4) { texel_width >>= 1; while (input_code_pressed(screen->machine(), KEYCODE_LEFT)) ; } - if (input_code_pressed(screen->machine(), KEYCODE_RIGHT) && texel_width < 512) { texel_width <<= 1; while (input_code_pressed(screen->machine(), KEYCODE_RIGHT)) ; } + if (screen->machine().input().code_pressed(KEYCODE_DOWN)) yoffs += screen->machine().input().code_pressed(KEYCODE_LSHIFT) ? 0x40 : 1; + if (screen->machine().input().code_pressed(KEYCODE_UP)) yoffs -= screen->machine().input().code_pressed(KEYCODE_LSHIFT) ? 0x40 : 1; + if (screen->machine().input().code_pressed(KEYCODE_LEFT) && texel_width > 4) { texel_width >>= 1; while (screen->machine().input().code_pressed(KEYCODE_LEFT)) ; } + if (screen->machine().input().code_pressed(KEYCODE_RIGHT) && texel_width < 512) { texel_width <<= 1; while (screen->machine().input().code_pressed(KEYCODE_RIGHT)) ; } if (yoffs < 0) yoffs = 0; base = (const UINT64 *)waveram0_ptr_from_expanded_addr(yoffs << 16); @@ -585,7 +585,7 @@ static void zeus_register_update(running_machine &machine, offs_t offset, UINT32 UINT32 temp = zeusbase[0x38]; zeusbase[0x38] = oldval; machine.primary_screen->update_partial(machine.primary_screen->vpos()); - log_fifo = input_code_pressed(machine, KEYCODE_L); + log_fifo = machine.input().code_pressed(KEYCODE_L); zeusbase[0x38] = temp; } break; @@ -1058,15 +1058,15 @@ static void zeus_draw_quad(running_machine &machine, const UINT32 *databuffer, U if (logit) logerror("quad\n"); -if (input_code_pressed(machine, KEYCODE_Q) && (texoffs & 0xffff) == 0x119) return; -if (input_code_pressed(machine, KEYCODE_E) && (texoffs & 0xffff) == 0x01d) return; -if (input_code_pressed(machine, KEYCODE_R) && (texoffs & 0xffff) == 0x11d) return; -if (input_code_pressed(machine, KEYCODE_T) && (texoffs & 0xffff) == 0x05d) return; -if (input_code_pressed(machine, KEYCODE_Y) && (texoffs & 0xffff) == 0x0dd) return; -//if (input_code_pressed(machine, KEYCODE_U) && (texoffs & 0xffff) == 0x119) return; -//if (input_code_pressed(machine, KEYCODE_I) && (texoffs & 0xffff) == 0x119) return; -//if (input_code_pressed(machine, KEYCODE_O) && (texoffs & 0xffff) == 0x119) return; -//if (input_code_pressed(machine, KEYCODE_L) && (texoffs & 0x100)) return; +if (machine.input().code_pressed(KEYCODE_Q) && (texoffs & 0xffff) == 0x119) return; +if (machine.input().code_pressed(KEYCODE_E) && (texoffs & 0xffff) == 0x01d) return; +if (machine.input().code_pressed(KEYCODE_R) && (texoffs & 0xffff) == 0x11d) return; +if (machine.input().code_pressed(KEYCODE_T) && (texoffs & 0xffff) == 0x05d) return; +if (machine.input().code_pressed(KEYCODE_Y) && (texoffs & 0xffff) == 0x0dd) return; +//if (machine.input().code_pressed(KEYCODE_U) && (texoffs & 0xffff) == 0x119) return; +//if (machine.input().code_pressed(KEYCODE_I) && (texoffs & 0xffff) == 0x119) return; +//if (machine.input().code_pressed(KEYCODE_O) && (texoffs & 0xffff) == 0x119) return; +//if (machine.input().code_pressed(KEYCODE_L) && (texoffs & 0x100)) return; callback = render_poly_8bit; diff --git a/src/mame/video/model1.c b/src/mame/video/model1.c index fd1185e9f20..c3e18cb131c 100644 --- a/src/mame/video/model1.c +++ b/src/mame/video/model1.c @@ -1343,7 +1343,7 @@ static void tgp_scan(running_machine &machine) model1_state *state = machine.driver_data<model1_state>(); struct view *view = state->m_view; #if 0 - if (input_code_pressed_once(machine, KEYCODE_F)) + if (machine.input().code_pressed_once(KEYCODE_F)) { FILE *fp; fp=fopen("tgp-ram.bin", "w+b"); @@ -1478,35 +1478,35 @@ SCREEN_UPDATE(model1) double delta; delta = 1; - if(input_code_pressed(screen->machine(), KEYCODE_F)) { + if(screen->machine().input().code_pressed(KEYCODE_F)) { mod = 1; view->vxx -= delta; } - if(input_code_pressed(screen->machine(), KEYCODE_G)) { + if(screen->machine().input().code_pressed(KEYCODE_G)) { mod = 1; view->vxx += delta; } - if(input_code_pressed(screen->machine(), KEYCODE_H)) { + if(screen->machine().input().code_pressed(KEYCODE_H)) { mod = 1; view->vyy -= delta; } - if(input_code_pressed(screen->machine(), KEYCODE_J)) { + if(screen->machine().input().code_pressed(KEYCODE_J)) { mod = 1; view->vyy += delta; } - if(input_code_pressed(screen->machine(), KEYCODE_K)) { + if(screen->machine().input().code_pressed(KEYCODE_K)) { mod = 1; view->vzz -= delta; } - if(input_code_pressed(screen->machine(), KEYCODE_L)) { + if(screen->machine().input().code_pressed(KEYCODE_L)) { mod = 1; view->vzz += delta; } - if(input_code_pressed(screen->machine(), KEYCODE_U)) { + if(screen->machine().input().code_pressed(KEYCODE_U)) { mod = 1; view->ayy -= 0.05; } - if(input_code_pressed(screen->machine(), KEYCODE_I)) { + if(screen->machine().input().code_pressed(KEYCODE_I)) { mod = 1; view->ayy += 0.05; } diff --git a/src/mame/video/model2.c b/src/mame/video/model2.c index 067012cb17c..7b71c0524a5 100644 --- a/src/mame/video/model2.c +++ b/src/mame/video/model2.c @@ -1032,7 +1032,7 @@ static void model2_3d_frame_end( model2_state *state, bitmap_t *bitmap, const re return; #if DEBUG - if (input_code_pressed(machine, KEYCODE_Q)) + if (machine.input().code_pressed(KEYCODE_Q)) { UINT32 i; diff --git a/src/mame/video/model3.c b/src/mame/video/model3.c index 81a88ba2e74..fc17433f479 100644 --- a/src/mame/video/model3.c +++ b/src/mame/video/model3.c @@ -370,15 +370,15 @@ SCREEN_UPDATE( model3 ) if( state->m_tick >= 5 ) { state->m_tick = 0; - if( input_code_pressed(screen->machine(), KEYCODE_Y) ) + if( screen->machine().input().code_pressed(KEYCODE_Y) ) state->m_debug_layer_disable ^= 0x1; - if( input_code_pressed(screen->machine(), KEYCODE_U) ) + if( screen->machine().input().code_pressed(KEYCODE_U) ) state->m_debug_layer_disable ^= 0x2; - if( input_code_pressed(screen->machine(), KEYCODE_I) ) + if( screen->machine().input().code_pressed(KEYCODE_I) ) state->m_debug_layer_disable ^= 0x4; - if( input_code_pressed(screen->machine(), KEYCODE_O) ) + if( screen->machine().input().code_pressed(KEYCODE_O) ) state->m_debug_layer_disable ^= 0x8; - if( input_code_pressed(screen->machine(), KEYCODE_T) ) + if( screen->machine().input().code_pressed(KEYCODE_T) ) state->m_debug_layer_disable ^= 0x10; } diff --git a/src/mame/video/namcos2.c b/src/mame/video/namcos2.c index 36070a2c965..a393f4433c8 100644 --- a/src/mame/video/namcos2.c +++ b/src/mame/video/namcos2.c @@ -314,7 +314,7 @@ WRITE16_HANDLER( namcos2_68k_roz_ram_w ) { COMBINE_DATA(&namcos2_68k_roz_ram[offset]); tilemap_mark_tile_dirty(tilemap_roz,offset); -// if( input_code_pressed(space->machine(), KEYCODE_Q) ) +// if( space->machine().input().code_pressed(KEYCODE_Q) ) // { // debugger_break(space->machine()); // } diff --git a/src/mame/video/namcos22.c b/src/mame/video/namcos22.c index 63f0aaa0dd9..48530c35ddc 100644 --- a/src/mame/video/namcos22.c +++ b/src/mame/video/namcos22.c @@ -2276,7 +2276,7 @@ SCREEN_UPDATE( namcos22s ) ApplyGamma( screen->machine(), bitmap ); #ifdef MAME_DEBUG - if( input_code_pressed(screen->machine(), KEYCODE_D) ) + if( screen->machine().input().code_pressed(KEYCODE_D) ) { namcos22_state *state = screen->machine().driver_data<namcos22_state>(); FILE *f = fopen( "dump.txt", "wb" ); @@ -2309,7 +2309,7 @@ SCREEN_UPDATE( namcos22s ) Dump(space, f,0xc00000, 0xc1ffff, "polygonram"); fclose( f ); } - while( input_code_pressed(screen->machine(), KEYCODE_D) ){} + while( screen->machine().input().code_pressed(KEYCODE_D) ){} } #endif return 0; @@ -2327,7 +2327,7 @@ SCREEN_UPDATE( namcos22 ) ApplyGamma( screen->machine(), bitmap ); #ifdef MAME_DEBUG - if( input_code_pressed(screen->machine(), KEYCODE_D) ) + if( screen->machine().input().code_pressed(KEYCODE_D) ) { FILE *f = fopen( "dump.txt", "wb" ); if( f ) @@ -2341,7 +2341,7 @@ SCREEN_UPDATE( namcos22 ) //Dump(space, f,0x70000000, 0x7001ffff, "polygonram"); fclose( f ); } - while( input_code_pressed(screen->machine(), KEYCODE_D) ){} + while( screen->machine().input().code_pressed(KEYCODE_D) ){} } #endif return 0; diff --git a/src/mame/video/nycaptor.c b/src/mame/video/nycaptor.c index f6c7f4e87db..95f7b437593 100644 --- a/src/mame/video/nycaptor.c +++ b/src/mame/video/nycaptor.c @@ -224,7 +224,7 @@ static void draw_sprites( running_machine &machine, bitmap_t *bitmap, const rect x - no bg/sprite pri. */ -#define mKEY_MASK(x,y) if (input_code_pressed_once(machine, x)) { state->m_mask |= y; tilemap_mark_all_tiles_dirty(state->m_bg_tilemap); } +#define mKEY_MASK(x,y) if (machine.input().code_pressed_once(x)) { state->m_mask |= y; tilemap_mark_all_tiles_dirty(state->m_bg_tilemap); } static void nycaptor_setmask( running_machine &machine ) { @@ -244,8 +244,8 @@ static void nycaptor_setmask( running_machine &machine ) mKEY_MASK(KEYCODE_J, 0x400); mKEY_MASK(KEYCODE_K, 0x800); - if (input_code_pressed_once(machine, KEYCODE_Z)){state->m_mask = 0; tilemap_mark_all_tiles_dirty(state->m_bg_tilemap);} /* disable */ - if (input_code_pressed_once(machine, KEYCODE_X)){state->m_mask |= 0x1000; tilemap_mark_all_tiles_dirty(state->m_bg_tilemap);} /* no layers */ + if (machine.input().code_pressed_once(KEYCODE_Z)){state->m_mask = 0; tilemap_mark_all_tiles_dirty(state->m_bg_tilemap);} /* disable */ + if (machine.input().code_pressed_once(KEYCODE_X)){state->m_mask |= 0x1000; tilemap_mark_all_tiles_dirty(state->m_bg_tilemap);} /* no layers */ } #endif diff --git a/src/mame/video/paradise.c b/src/mame/video/paradise.c index 09bf3ca40d7..44eae58a867 100644 --- a/src/mame/video/paradise.c +++ b/src/mame/video/paradise.c @@ -236,14 +236,14 @@ SCREEN_UPDATE( paradise ) int layers_ctrl = -1; #ifdef MAME_DEBUG -if (input_code_pressed(screen->machine(), KEYCODE_Z)) +if (screen->machine().input().code_pressed(KEYCODE_Z)) { int mask = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) mask |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) mask |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_E)) mask |= 4; - if (input_code_pressed(screen->machine(), KEYCODE_R)) mask |= 8; - if (input_code_pressed(screen->machine(), KEYCODE_A)) mask |= 16; + if (screen->machine().input().code_pressed(KEYCODE_Q)) mask |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) mask |= 2; + if (screen->machine().input().code_pressed(KEYCODE_E)) mask |= 4; + if (screen->machine().input().code_pressed(KEYCODE_R)) mask |= 8; + if (screen->machine().input().code_pressed(KEYCODE_A)) mask |= 16; if (mask != 0) layers_ctrl &= mask; } #endif diff --git a/src/mame/video/pitnrun.c b/src/mame/video/pitnrun.c index 757957f0215..90dff383a24 100644 --- a/src/mame/video/pitnrun.c +++ b/src/mame/video/pitnrun.c @@ -224,19 +224,19 @@ SCREEN_UPDATE( pitnrun ) rectangle myclip=*cliprect; #ifdef MAME_DEBUG - if (input_code_pressed_once(screen->machine(), KEYCODE_Q)) + if (screen->machine().input().code_pressed_once(KEYCODE_Q)) { UINT8 *ROM = screen->machine().region("maincpu")->base(); ROM[0x84f6]=0; /* lap 0 - normal */ } - if (input_code_pressed_once(screen->machine(), KEYCODE_W)) + if (screen->machine().input().code_pressed_once(KEYCODE_W)) { UINT8 *ROM = screen->machine().region("maincpu")->base(); ROM[0x84f6]=6; /* lap 6 = spotlight */ } - if (input_code_pressed_once(screen->machine(), KEYCODE_E)) + if (screen->machine().input().code_pressed_once(KEYCODE_E)) { UINT8 *ROM = screen->machine().region("maincpu")->base(); ROM[0x84f6]=2; /* lap 3 (trial 2)= lightnings */ diff --git a/src/mame/video/powerins.c b/src/mame/video/powerins.c index 852bcdf0eb1..3ea5dea35c1 100644 --- a/src/mame/video/powerins.c +++ b/src/mame/video/powerins.c @@ -355,14 +355,14 @@ SCREEN_UPDATE( powerins ) tilemap_set_scrolly( state->m_tilemap_1, 0, 0x00); #ifdef MAME_DEBUG -if (input_code_pressed(screen->machine(), KEYCODE_Z)) +if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; -// if (input_code_pressed(screen->machine(), KEYCODE_E)) msk |= 4; - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= 8; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; +// if (screen->machine().input().code_pressed(KEYCODE_E)) msk |= 4; + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= 8; if (msk != 0) layers_ctrl &= msk; } #endif diff --git a/src/mame/video/psikyosh.c b/src/mame/video/psikyosh.c index fd001a734b1..8fe69c17088 100644 --- a/src/mame/video/psikyosh.c +++ b/src/mame/video/psikyosh.c @@ -494,7 +494,7 @@ static void draw_background( running_machine &machine, bitmap_t *bitmap, const r bool lay_debug = false; for (i = 0; i <= 3; i++) { - if(input_code_pressed(machine, lay_keys[i])) { + if(machine.input().code_pressed(lay_keys[i])) { lay_debug = true; } } @@ -504,7 +504,7 @@ static void draw_background( running_machine &machine, bitmap_t *bitmap, const r for (i = 0; i <= 3; i++) { #ifdef DEBUG_KEYS - if(lay_debug && !input_code_pressed(machine, lay_keys[i])) + if(lay_debug && !machine.input().code_pressed(lay_keys[i])) continue; #endif @@ -1106,12 +1106,12 @@ static void draw_sprites(running_machine &machine, bitmap_t *bitmap, const recta Could be a sprite-sprite priority, tests seem to back this up **- End Sprite Format -*/ - const int spr_keys[8] = {KEYCODE_Y, KEYCODE_U, KEYCODE_I, KEYCODE_O}; + const input_code spr_keys[8] = {KEYCODE_Y, KEYCODE_U, KEYCODE_I, KEYCODE_O}; bool spr_debug = false; #ifdef DEBUG_KEYS for (int i = 0; i <= 3; i++) { - if(input_code_pressed(machine, spr_keys[i])) { + if(machine.input().code_pressed(spr_keys[i])) { spr_debug = true; } } @@ -1174,7 +1174,7 @@ static void draw_sprites(running_machine &machine, bitmap_t *bitmap, const recta else alpha = pal6bit(0x3f - alpha); /* 0x3f-0x00 maps to 0x00-0xff */ - if(!spr_debug || input_code_pressed(machine, spr_keys[spr_pri])) + if(!spr_debug || machine.input().code_pressed(spr_keys[spr_pri])) { /* start drawing */ if (zoom_table[BYTE_XOR_BE(zoomy)] && zoom_table[BYTE_XOR_BE(zoomx)]) /* Avoid division-by-zero when table contains 0 (Uninitialised/Bug) */ @@ -1301,18 +1301,18 @@ SCREEN_UPDATE( psikyosh ) /* Note the z-buffer on each sprite to get correct pri int pri_debug = false; int sprites = true; int backgrounds = true; - const int pri_keys[8] = {KEYCODE_Z, KEYCODE_X, KEYCODE_C, KEYCODE_V, KEYCODE_B, KEYCODE_N, KEYCODE_M, KEYCODE_K}; + const input_code pri_keys[8] = {KEYCODE_Z, KEYCODE_X, KEYCODE_C, KEYCODE_V, KEYCODE_B, KEYCODE_N, KEYCODE_M, KEYCODE_K}; #ifdef DEBUG_KEYS for (i = 0; i <= 7; i++) { - if(input_code_pressed(screen->machine(), pri_keys[i])) { + if(screen->machine().input().code_pressed(pri_keys[i])) { pri_debug = true; } } - if(input_code_pressed(screen->machine(), KEYCODE_G)) { + if(screen->machine().input().code_pressed(KEYCODE_G)) { sprites = false; } - if(input_code_pressed(screen->machine(), KEYCODE_H)) { + if(screen->machine().input().code_pressed(KEYCODE_H)) { backgrounds = false; } #endif @@ -1330,7 +1330,7 @@ popmessage ("%08x %08x %08x %08x\n%08x %08x %08x %08x", psikyosh_prelineblend(screen->machine(), bitmap, cliprect); // fills screen for (i = 0; i <= 7; i++) { - if(!pri_debug || input_code_pressed(screen->machine(), pri_keys[i])) + if(!pri_debug || screen->machine().input().code_pressed(pri_keys[i])) { if(sprites) { draw_sprites(screen->machine(), bitmap, cliprect, i); // When same priority bg's have higher pri diff --git a/src/mame/video/realbrk.c b/src/mame/video/realbrk.c index a46352831e3..35804c7c39c 100644 --- a/src/mame/video/realbrk.c +++ b/src/mame/video/realbrk.c @@ -509,13 +509,13 @@ SCREEN_UPDATE(realbrk) tilemap_set_scrollx(state->m_tilemap_1, 0, state->m_vregs[0x6/2]); #ifdef MAME_DEBUG -if ( input_code_pressed(screen->machine(), KEYCODE_Z) ) +if ( screen->machine().input().code_pressed(KEYCODE_Z) ) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_E)) msk |= 4; - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= 8; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_E)) msk |= 4; + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= 8; if (msk != 0) layers_ctrl &= msk; } #endif @@ -580,13 +580,13 @@ SCREEN_UPDATE(dai2kaku) tilemap_set_scrolly( state->m_tilemap_1, 0, bgy1 ); #ifdef MAME_DEBUG -if ( input_code_pressed(screen->machine(), KEYCODE_Z) ) +if ( screen->machine().input().code_pressed(KEYCODE_Z) ) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_E)) msk |= 4; - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= 8; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_E)) msk |= 4; + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= 8; if (msk != 0) layers_ctrl &= msk; } #endif diff --git a/src/mame/video/rollerg.c b/src/mame/video/rollerg.c index 5b4cbeaec03..a842a2683dd 100644 --- a/src/mame/video/rollerg.c +++ b/src/mame/video/rollerg.c @@ -12,10 +12,10 @@ void rollerg_sprite_callback( running_machine &machine, int *code, int *color, i { rollerg_state *state = machine.driver_data<rollerg_state>(); #if 0 - if (input_code_pressed(machine, KEYCODE_Q) && (*color & 0x80)) *color = rand(); - if (input_code_pressed(machine, KEYCODE_W) && (*color & 0x40)) *color = rand(); - if (input_code_pressed(machine, KEYCODE_E) && (*color & 0x20)) *color = rand(); - if (input_code_pressed(machine, KEYCODE_R) && (*color & 0x10)) *color = rand(); + if (machine.input().code_pressed(KEYCODE_Q) && (*color & 0x80)) *color = rand(); + if (machine.input().code_pressed(KEYCODE_W) && (*color & 0x40)) *color = rand(); + if (machine.input().code_pressed(KEYCODE_E) && (*color & 0x20)) *color = rand(); + if (machine.input().code_pressed(KEYCODE_R) && (*color & 0x10)) *color = rand(); #endif *priority_mask = (*color & 0x10) ? 0 : 0x02; *color = state->m_sprite_colorbase + (*color & 0x0f); diff --git a/src/mame/video/segas18.c b/src/mame/video/segas18.c index b881753a7ad..ceedc24ec9b 100644 --- a/src/mame/video/segas18.c +++ b/src/mame/video/segas18.c @@ -188,15 +188,15 @@ SCREEN_UPDATE( system18 ) vdppri = (state->m_vdp_mixing & 1) ? (1 << vdplayer) : 0; #if DEBUG_VDP - if (input_code_pressed(screen->machine(), KEYCODE_Q)) vdplayer = 0; - if (input_code_pressed(screen->machine(), KEYCODE_W)) vdplayer = 1; - if (input_code_pressed(screen->machine(), KEYCODE_E)) vdplayer = 2; - if (input_code_pressed(screen->machine(), KEYCODE_R)) vdplayer = 3; - if (input_code_pressed(screen->machine(), KEYCODE_A)) vdppri = 0x00; - if (input_code_pressed(screen->machine(), KEYCODE_S)) vdppri = 0x01; - if (input_code_pressed(screen->machine(), KEYCODE_D)) vdppri = 0x02; - if (input_code_pressed(screen->machine(), KEYCODE_F)) vdppri = 0x04; - if (input_code_pressed(screen->machine(), KEYCODE_G)) vdppri = 0x08; + if (screen->machine().input().code_pressed(KEYCODE_Q)) vdplayer = 0; + if (screen->machine().input().code_pressed(KEYCODE_W)) vdplayer = 1; + if (screen->machine().input().code_pressed(KEYCODE_E)) vdplayer = 2; + if (screen->machine().input().code_pressed(KEYCODE_R)) vdplayer = 3; + if (screen->machine().input().code_pressed(KEYCODE_A)) vdppri = 0x00; + if (screen->machine().input().code_pressed(KEYCODE_S)) vdppri = 0x01; + if (screen->machine().input().code_pressed(KEYCODE_D)) vdppri = 0x02; + if (screen->machine().input().code_pressed(KEYCODE_F)) vdppri = 0x04; + if (screen->machine().input().code_pressed(KEYCODE_G)) vdppri = 0x08; #endif /* if no drawing is happening, fill with black and get out */ @@ -237,12 +237,12 @@ SCREEN_UPDATE( system18 ) segaic16_sprites_draw(screen, bitmap, cliprect, 0); #if DEBUG_VDP - if (state->m_vdp_enable && input_code_pressed(screen->machine(), KEYCODE_V)) + if (state->m_vdp_enable && screen->machine().input().code_pressed(KEYCODE_V)) { bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine())); update_system18_vdp(bitmap, cliprect); } - if (vdp_enable && input_code_pressed(screen->machine(), KEYCODE_B)) + if (vdp_enable && screen->machine().input().code_pressed(KEYCODE_B)) { FILE *f = fopen("vdp.bin", "w"); fwrite(state->m_tmp_bitmap->base, 1, state->m_tmp_bitmap->rowpixels * (state->m_tmp_bitmap->bpp / 8) * state->m_tmp_bitmap->height, f); diff --git a/src/mame/video/segas32.c b/src/mame/video/segas32.c index ff5dfaa430e..5853a2d0d40 100644 --- a/src/mame/video/segas32.c +++ b/src/mame/video/segas32.c @@ -928,8 +928,8 @@ static void update_tilemap_zoom(screen_device &screen, struct layer_info *layer, /* configure the layer */ opaque = 0; //opaque = (state->m_system32_videoram[0x1ff8e/2] >> (8 + bgnum)) & 1; -//if (input_code_pressed(screen.machine(), KEYCODE_Z) && bgnum == 0) opaque = 1; -//if (input_code_pressed(screen.machine(), KEYCODE_X) && bgnum == 1) opaque = 1; +//if (screen.machine().input().code_pressed(KEYCODE_Z) && bgnum == 0) opaque = 1; +//if (screen.machine().input().code_pressed(KEYCODE_X) && bgnum == 1) opaque = 1; /* determine if we're flipped */ flip = ((state->m_system32_videoram[0x1ff00/2] >> 9) ^ (state->m_system32_videoram[0x1ff00/2] >> bgnum)) & 1; @@ -1083,8 +1083,8 @@ static void update_tilemap_rowscroll(screen_device &screen, struct layer_info *l /* configure the layer */ opaque = 0; //opaque = (state->m_system32_videoram[0x1ff8e/2] >> (8 + bgnum)) & 1; -//if (input_code_pressed(screen.machine(), KEYCODE_C) && bgnum == 2) opaque = 1; -//if (input_code_pressed(screen.machine(), KEYCODE_V) && bgnum == 3) opaque = 1; +//if (screen.machine().input().code_pressed(KEYCODE_C) && bgnum == 2) opaque = 1; +//if (screen.machine().input().code_pressed(KEYCODE_V) && bgnum == 3) opaque = 1; /* determine if we're flipped */ flip = ((state->m_system32_videoram[0x1ff00/2] >> 9) ^ (state->m_system32_videoram[0x1ff00/2] >> bgnum)) & 1; @@ -2446,12 +2446,12 @@ SCREEN_UPDATE( system32 ) /* debugging */ #if QWERTY_LAYER_ENABLE - if (input_code_pressed(screen->machine(), KEYCODE_Q)) enablemask = 0x01; - if (input_code_pressed(screen->machine(), KEYCODE_W)) enablemask = 0x02; - if (input_code_pressed(screen->machine(), KEYCODE_E)) enablemask = 0x04; - if (input_code_pressed(screen->machine(), KEYCODE_R)) enablemask = 0x08; - if (input_code_pressed(screen->machine(), KEYCODE_T)) enablemask = 0x10; - if (input_code_pressed(screen->machine(), KEYCODE_Y)) enablemask = 0x20; + if (screen->machine().input().code_pressed(KEYCODE_Q)) enablemask = 0x01; + if (screen->machine().input().code_pressed(KEYCODE_W)) enablemask = 0x02; + if (screen->machine().input().code_pressed(KEYCODE_E)) enablemask = 0x04; + if (screen->machine().input().code_pressed(KEYCODE_R)) enablemask = 0x08; + if (screen->machine().input().code_pressed(KEYCODE_T)) enablemask = 0x10; + if (screen->machine().input().code_pressed(KEYCODE_Y)) enablemask = 0x20; #endif /* do the mixing */ @@ -2459,7 +2459,7 @@ SCREEN_UPDATE( system32 ) mix_all_layers(state, 0, 0, bitmap, cliprect, enablemask); g_profiler.stop(); - if (LOG_SPRITES && input_code_pressed(screen->machine(), KEYCODE_L)) + if (LOG_SPRITES && screen->machine().input().code_pressed(KEYCODE_L)) { const rectangle &visarea = screen->visible_area(); FILE *f = fopen("sprite.txt", "w"); @@ -2537,13 +2537,13 @@ SCREEN_UPDATE( system32 ) { int showclip = -1; -// if (input_code_pressed(screen->machine(), KEYCODE_V)) +// if (screen->machine().input().code_pressed(KEYCODE_V)) // showclip = 0; -// if (input_code_pressed(screen->machine(), KEYCODE_B)) +// if (screen->machine().input().code_pressed(KEYCODE_B)) // showclip = 1; -// if (input_code_pressed(screen->machine(), KEYCODE_N)) +// if (screen->machine().input().code_pressed(KEYCODE_N)) // showclip = 2; -// if (input_code_pressed(screen->machine(), KEYCODE_M)) +// if (screen->machine().input().code_pressed(KEYCODE_M)) // showclip = 3; // if (showclip != -1) for (showclip = 0; showclip < 4; showclip++) @@ -2627,12 +2627,12 @@ SCREEN_UPDATE( multi32 ) /* debugging */ #if QWERTY_LAYER_ENABLE - if (input_code_pressed(screen->machine(), KEYCODE_Q)) enablemask = 0x01; - if (input_code_pressed(screen->machine(), KEYCODE_W)) enablemask = 0x02; - if (input_code_pressed(screen->machine(), KEYCODE_E)) enablemask = 0x04; - if (input_code_pressed(screen->machine(), KEYCODE_R)) enablemask = 0x08; - if (input_code_pressed(screen->machine(), KEYCODE_T)) enablemask = 0x10; - if (input_code_pressed(screen->machine(), KEYCODE_Y)) enablemask = 0x20; + if (screen->machine().input().code_pressed(KEYCODE_Q)) enablemask = 0x01; + if (screen->machine().input().code_pressed(KEYCODE_W)) enablemask = 0x02; + if (screen->machine().input().code_pressed(KEYCODE_E)) enablemask = 0x04; + if (screen->machine().input().code_pressed(KEYCODE_R)) enablemask = 0x08; + if (screen->machine().input().code_pressed(KEYCODE_T)) enablemask = 0x10; + if (screen->machine().input().code_pressed(KEYCODE_Y)) enablemask = 0x20; #endif /* do the mixing */ @@ -2642,10 +2642,10 @@ SCREEN_UPDATE( multi32 ) if (PRINTF_MIXER_DATA) { - if (!input_code_pressed(screen->machine(), KEYCODE_M)) print_mixer_data(state, 0); + if (!screen->machine().input().code_pressed(KEYCODE_M)) print_mixer_data(state, 0); else print_mixer_data(state, 1); } - if (LOG_SPRITES && input_code_pressed(screen->machine(), KEYCODE_L)) + if (LOG_SPRITES && screen->machine().input().code_pressed(KEYCODE_L)) { const rectangle &visarea = screen->visible_area(); FILE *f = fopen("sprite.txt", "w"); diff --git a/src/mame/video/seta.c b/src/mame/video/seta.c index 2b8452b3458..62f39f3011f 100644 --- a/src/mame/video/seta.c +++ b/src/mame/video/seta.c @@ -930,11 +930,11 @@ void seta_layers_update(screen_device* screen, bitmap_t *bitmap, const rectangle #ifdef MAME_DEBUG -if (input_code_pressed(screen->machine(), KEYCODE_Z)) +if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= 8; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= 8; if (msk != 0) layers_ctrl &= msk; if (state->m_tilemap_2) diff --git a/src/mame/video/slapfght.c b/src/mame/video/slapfght.c index c4ebaf24bfa..d732d49bbee 100644 --- a/src/mame/video/slapfght.c +++ b/src/mame/video/slapfght.c @@ -137,7 +137,7 @@ static void slapfght_log_vram(running_machine &machine) { #ifdef MAME_DEBUG slapfght_state *state = machine.driver_data<slapfght_state>(); - if ( input_code_pressed_once(machine, KEYCODE_B) ) + if ( machine.input().code_pressed_once(KEYCODE_B) ) { int i; for (i=0; i<0x800; i++) diff --git a/src/mame/video/slapshot.c b/src/mame/video/slapshot.c index 2269a348737..2899c4899b5 100644 --- a/src/mame/video/slapshot.c +++ b/src/mame/video/slapshot.c @@ -463,31 +463,31 @@ SCREEN_UPDATE( slapshot ) UINT16 priority; #ifdef MAME_DEBUG - if (input_code_pressed_once (screen->machine(), KEYCODE_Z)) + if (screen->machine().input().code_pressed_once (KEYCODE_Z)) { state->m_dislayer[0] ^= 1; popmessage("bg0: %01x",state->m_dislayer[0]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_X)) + if (screen->machine().input().code_pressed_once (KEYCODE_X)) { state->m_dislayer[1] ^= 1; popmessage("bg1: %01x",state->m_dislayer[1]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_C)) + if (screen->machine().input().code_pressed_once (KEYCODE_C)) { state->m_dislayer[2] ^= 1; popmessage("bg2: %01x",state->m_dislayer[2]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_V)) + if (screen->machine().input().code_pressed_once (KEYCODE_V)) { state->m_dislayer[3] ^= 1; popmessage("bg3: %01x",state->m_dislayer[3]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_B)) + if (screen->machine().input().code_pressed_once (KEYCODE_B)) { state->m_dislayer[4] ^= 1; popmessage("text: %01x",state->m_dislayer[4]); diff --git a/src/mame/video/ssv.c b/src/mame/video/ssv.c index 4a763435a58..781f34e1e9b 100644 --- a/src/mame/video/ssv.c +++ b/src/mame/video/ssv.c @@ -961,7 +961,7 @@ static void draw_sprites(running_machine &machine, bitmap_t *bitmap, const recta } #ifdef MAME_DEBUG - if (input_code_pressed(machine, KEYCODE_Z)) /* Display some info on each sprite */ + if (machine.input().code_pressed(KEYCODE_Z)) /* Display some info on each sprite */ { char buf[30]; sprintf(buf, "%02X",/*(s2[2] & ~0x3ff)>>8*/mode>>8); ui_draw_text(&machine.render().ui_container(), buf, sx, sy); @@ -1153,7 +1153,7 @@ static void gdfs_draw_zooming_sprites(running_machine &machine, bitmap_t *bitmap } #ifdef MAME_DEBUG - if (input_code_pressed(machine, KEYCODE_Z)) /* Display some info on each sprite */ + if (machine.input().code_pressed(KEYCODE_Z)) /* Display some info on each sprite */ { char buf[10]; sprintf(buf, "%X",size); diff --git a/src/mame/video/st0016.c b/src/mame/video/st0016.c index 76399e04df9..49015e4b0b1 100644 --- a/src/mame/video/st0016.c +++ b/src/mame/video/st0016.c @@ -595,7 +595,7 @@ SCREEN_UPDATE( st0016 ) { #ifdef MAME_DEBUG - if(input_code_pressed_once(screen->machine(), KEYCODE_Z)) + if(screen->machine().input().code_pressed_once(KEYCODE_Z)) { int h,j; FILE *p=fopen("vram.bin","wb"); diff --git a/src/mame/video/stvvdp1.c b/src/mame/video/stvvdp1.c index 5db5cd25dce..0c5878e5a95 100644 --- a/src/mame/video/stvvdp1.c +++ b/src/mame/video/stvvdp1.c @@ -1993,10 +1993,10 @@ void video_update_vdp1(running_machine &machine) int framebufer_changed = 0; // int enable; -// if (input_code_pressed (machine, KEYCODE_R)) VDP1_LOG = 1; -// if (input_code_pressed (machine, KEYCODE_T)) VDP1_LOG = 0; +// if (machine.input().code_pressed (KEYCODE_R)) VDP1_LOG = 1; +// if (machine.input().code_pressed (KEYCODE_T)) VDP1_LOG = 0; -// if (input_code_pressed (machine, KEYCODE_Y)) VDP1_LOG = 0; +// if (machine.input().code_pressed (KEYCODE_Y)) VDP1_LOG = 0; // { // FILE *fp; // diff --git a/src/mame/video/stvvdp2.c b/src/mame/video/stvvdp2.c index ee74ad8d750..4969c4e2a20 100644 --- a/src/mame/video/stvvdp2.c +++ b/src/mame/video/stvvdp2.c @@ -2209,10 +2209,10 @@ static void stv_vdp2_fill_rotation_parameter_table( running_machine &machine, UI /*Attempt to show on screen the rotation table*/ if(LOG_ROZ == 2) { - if(input_code_pressed_once(machine, JOYCODE_Y_UP_SWITCH)) + if(machine.input().code_pressed_once(JOYCODE_Y_UP_SWITCH)) debug.roz++; - if(input_code_pressed_once(machine, JOYCODE_Y_DOWN_SWITCH)) + if(machine.input().code_pressed_once(JOYCODE_Y_DOWN_SWITCH)) debug.roz--; if(debug.roz > 10) @@ -6312,32 +6312,32 @@ SCREEN_UPDATE( stv_vdp2 ) stv_vdp2_draw_back(screen->machine(), bitmap,cliprect); #if DEBUG_MODE - if(input_code_pressed_once(screen->machine(), KEYCODE_T)) + if(screen->machine().input().code_pressed_once(KEYCODE_T)) { debug.l_en^=1; popmessage("NBG3 %sabled",debug.l_en & 1 ? "en" : "dis"); } - if(input_code_pressed_once(screen->machine(), KEYCODE_Y)) + if(screen->machine().input().code_pressed_once(KEYCODE_Y)) { debug.l_en^=2; popmessage("NBG2 %sabled",debug.l_en & 2 ? "en" : "dis"); } - if(input_code_pressed_once(screen->machine(), KEYCODE_U)) + if(screen->machine().input().code_pressed_once(KEYCODE_U)) { debug.l_en^=4; popmessage("NBG1 %sabled",debug.l_en & 4 ? "en" : "dis"); } - if(input_code_pressed_once(screen->machine(), KEYCODE_I)) + if(screen->machine().input().code_pressed_once(KEYCODE_I)) { debug.l_en^=8; popmessage("NBG0 %sabled",debug.l_en & 8 ? "en" : "dis"); } - if(input_code_pressed_once(screen->machine(), KEYCODE_K)) + if(screen->machine().input().code_pressed_once(KEYCODE_K)) { debug.l_en^=0x10; popmessage("RBG0 %sabled",debug.l_en & 0x10 ? "en" : "dis"); } - if(input_code_pressed_once(screen->machine(), KEYCODE_O)) + if(screen->machine().input().code_pressed_once(KEYCODE_O)) { debug.l_en^=0x20; popmessage("SPRITE %sabled",debug.l_en & 0x20 ? "en" : "dis"); @@ -6380,7 +6380,7 @@ SCREEN_UPDATE( stv_vdp2 ) ,STV_VDP2_N1ZMXI,STV_VDP2_N1ZMXD ,STV_VDP2_N1ZMYI,STV_VDP2_N1ZMYD);*/ - if ( input_code_pressed_once(screen->machine(), KEYCODE_W) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_W) ) { int tilecode; @@ -6424,7 +6424,7 @@ SCREEN_UPDATE( stv_vdp2 ) } } - if ( input_code_pressed_once(screen->machine(), KEYCODE_N) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_N) ) { FILE *fp; @@ -6436,7 +6436,7 @@ SCREEN_UPDATE( stv_vdp2 ) } } - if ( input_code_pressed_once(screen->machine(), KEYCODE_M) ) + if ( screen->machine().input().code_pressed_once(KEYCODE_M) ) { FILE *fp; diff --git a/src/mame/video/suna16.c b/src/mame/video/suna16.c index ac280dbb63c..100e0993c4c 100644 --- a/src/mame/video/suna16.c +++ b/src/mame/video/suna16.c @@ -237,10 +237,10 @@ SCREEN_UPDATE( bestbest ) int layers_ctrl = -1; #ifdef MAME_DEBUG -if (input_code_pressed(screen->machine(), KEYCODE_Z)) +if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; if (msk != 0) layers_ctrl &= msk; } #endif diff --git a/src/mame/video/suna8.c b/src/mame/video/suna8.c index 788a2122561..dd51f1a5591 100644 --- a/src/mame/video/suna8.c +++ b/src/mame/video/suna8.c @@ -81,7 +81,7 @@ static TILE_GET_INFO( get_tile_info ) suna8_state *state = machine.driver_data<suna8_state>(); UINT8 code, attr; - if (input_code_pressed(machine, KEYCODE_X)) + if (machine.input().code_pressed(KEYCODE_X)) { UINT8 *rom = machine.region("maincpu")->base() + 0x10000 + 0x4000 * state->m_trombank; code = rom[ 2 * tile_index + 0 ]; @@ -419,17 +419,17 @@ SCREEN_UPDATE( suna8 ) #ifdef MAME_DEBUG #if TILEMAPS - if (input_code_pressed(screen->machine(), KEYCODE_Z) || input_code_pressed(screen->machine(), KEYCODE_X)) + if (screen->machine().input().code_pressed(KEYCODE_Z) || screen->machine().input().code_pressed(KEYCODE_X)) { suna8_state *state = screen->machine().driver_data<suna8_state>(); int max_tiles = screen->machine().region("gfx1")->bytes() / (0x400 * 0x20); - if (input_code_pressed_once(screen->machine(), KEYCODE_Q)) { state->m_page--; tilemap_mark_all_tiles_dirty_all(screen->machine()); } - if (input_code_pressed_once(screen->machine(), KEYCODE_W)) { state->m_page++; tilemap_mark_all_tiles_dirty_all(screen->machine()); } - if (input_code_pressed_once(screen->machine(), KEYCODE_E)) { state->m_tiles--; tilemap_mark_all_tiles_dirty_all(screen->machine()); } - if (input_code_pressed_once(screen->machine(), KEYCODE_R)) { state->m_tiles++; tilemap_mark_all_tiles_dirty_all(screen->machine()); } - if (input_code_pressed_once(screen->machine(), KEYCODE_A)) { state->m_trombank--; tilemap_mark_all_tiles_dirty_all(screen->machine()); } - if (input_code_pressed_once(screen->machine(), KEYCODE_S)) { state->m_trombank++; tilemap_mark_all_tiles_dirty_all(screen->machine()); } + if (screen->machine().input().code_pressed_once(KEYCODE_Q)) { state->m_page--; tilemap_mark_all_tiles_dirty_all(screen->machine()); } + if (screen->machine().input().code_pressed_once(KEYCODE_W)) { state->m_page++; tilemap_mark_all_tiles_dirty_all(screen->machine()); } + if (screen->machine().input().code_pressed_once(KEYCODE_E)) { state->m_tiles--; tilemap_mark_all_tiles_dirty_all(screen->machine()); } + if (screen->machine().input().code_pressed_once(KEYCODE_R)) { state->m_tiles++; tilemap_mark_all_tiles_dirty_all(screen->machine()); } + if (screen->machine().input().code_pressed_once(KEYCODE_A)) { state->m_trombank--; tilemap_mark_all_tiles_dirty_all(screen->machine()); } + if (screen->machine().input().code_pressed_once(KEYCODE_S)) { state->m_trombank++; tilemap_mark_all_tiles_dirty_all(screen->machine()); } state->m_rombank &= 0xf; state->m_page &= (state->m_text_dim > 0)?3:7; diff --git a/src/mame/video/superchs.c b/src/mame/video/superchs.c index 7dbda90ed6a..9f44c2b86d1 100644 --- a/src/mame/video/superchs.c +++ b/src/mame/video/superchs.c @@ -221,12 +221,12 @@ SCREEN_UPDATE( superchs ) sprites as pdrawgfx cannot yet cope with more than 4 layers */ #ifdef MAME_DEBUG - if (!input_code_pressed (screen->machine(), KEYCODE_Z)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 0); - if (!input_code_pressed (screen->machine(), KEYCODE_X)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[1], 0, 1); - if (!input_code_pressed (screen->machine(), KEYCODE_C)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[2], 0, 2); - if (!input_code_pressed (screen->machine(), KEYCODE_V)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[3], 0, 4); - if (!input_code_pressed (screen->machine(), KEYCODE_B)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[4], 0, 8); - if (!input_code_pressed (screen->machine(), KEYCODE_N)) draw_sprites(screen->machine(), bitmap, cliprect, primasks, 48, -116); + if (!screen->machine().input().code_pressed (KEYCODE_Z)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 0); + if (!screen->machine().input().code_pressed (KEYCODE_X)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[1], 0, 1); + if (!screen->machine().input().code_pressed (KEYCODE_C)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[2], 0, 2); + if (!screen->machine().input().code_pressed (KEYCODE_V)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[3], 0, 4); + if (!screen->machine().input().code_pressed (KEYCODE_B)) tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[4], 0, 8); + if (!screen->machine().input().code_pressed (KEYCODE_N)) draw_sprites(screen->machine(), bitmap, cliprect, primasks, 48, -116); #else tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[0], TILEMAP_DRAW_OPAQUE, 0); tc0480scp_tilemap_draw(tc0480scp, bitmap, cliprect, layer[1], 0, 1); diff --git a/src/mame/video/taito_h.c b/src/mame/video/taito_h.c index f1865a46ff6..4615f3de720 100644 --- a/src/mame/video/taito_h.c +++ b/src/mame/video/taito_h.c @@ -421,13 +421,13 @@ SCREEN_UPDATE( recordbr ) bitmap_fill(bitmap, cliprect, 0); #ifdef MAME_DEBUG - if (!input_code_pressed(screen->machine(), KEYCODE_A)) + if (!screen->machine().input().code_pressed(KEYCODE_A)) tc0080vco_tilemap_draw(state->m_tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0); - if (!input_code_pressed(screen->machine(), KEYCODE_S)) + if (!screen->machine().input().code_pressed(KEYCODE_S)) recordbr_draw_sprites(screen->machine(), bitmap, cliprect, 0); - if (!input_code_pressed(screen->machine(), KEYCODE_D)) + if (!screen->machine().input().code_pressed(KEYCODE_D)) tc0080vco_tilemap_draw(state->m_tc0080vco, bitmap, cliprect, 1, 0, 0); - if (!input_code_pressed(screen->machine(), KEYCODE_F)) + if (!screen->machine().input().code_pressed(KEYCODE_F)) recordbr_draw_sprites(screen->machine(), bitmap, cliprect, 1); #else tc0080vco_tilemap_draw(state->m_tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0); @@ -452,13 +452,13 @@ SCREEN_UPDATE( dleague ) bitmap_fill(bitmap, cliprect, 0); #ifdef MAME_DEBUG - if (!input_code_pressed(screen->machine(), KEYCODE_A)) + if (!screen->machine().input().code_pressed(KEYCODE_A)) tc0080vco_tilemap_draw(state->m_tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0); - if (!input_code_pressed(screen->machine(), KEYCODE_S)) + if (!screen->machine().input().code_pressed(KEYCODE_S)) dleague_draw_sprites(screen->machine(), bitmap, cliprect, 0); - if (!input_code_pressed(screen->machine(), KEYCODE_D)) + if (!screen->machine().input().code_pressed(KEYCODE_D)) tc0080vco_tilemap_draw(state->m_tc0080vco, bitmap, cliprect, 1, 0, 0); - if (!input_code_pressed(screen->machine(), KEYCODE_F)) + if (!screen->machine().input().code_pressed(KEYCODE_F)) dleague_draw_sprites(screen->machine(), bitmap, cliprect, 1); #else tc0080vco_tilemap_draw(state->m_tc0080vco, bitmap, cliprect, 0, TILEMAP_DRAW_OPAQUE, 0); diff --git a/src/mame/video/taitoair.c b/src/mame/video/taitoair.c index 8371a1fa3b2..f1f92fbdd31 100644 --- a/src/mame/video/taitoair.c +++ b/src/mame/video/taitoair.c @@ -350,13 +350,13 @@ SCREEN_UPDATE( taitoair ) bitmap_fill(bitmap, cliprect, 0x41); #ifdef MAME_DEBUG - if (!input_code_pressed(screen->machine(), KEYCODE_A)) + if (!screen->machine().input().code_pressed(KEYCODE_A)) tc0080vco_tilemap_draw(state->m_tc0080vco, bitmap, cliprect, 0, 0, 0); - if (!input_code_pressed(screen->machine(), KEYCODE_S)) + if (!screen->machine().input().code_pressed(KEYCODE_S)) draw_sprites(screen->machine(), bitmap, cliprect, 0); - if (!input_code_pressed(screen->machine(), KEYCODE_D)) + if (!screen->machine().input().code_pressed(KEYCODE_D)) tc0080vco_tilemap_draw(state->m_tc0080vco, bitmap, cliprect, 1, 0, 0); - if (!input_code_pressed(screen->machine(), KEYCODE_F)) + if (!screen->machine().input().code_pressed(KEYCODE_F)) draw_sprites(screen->machine(), bitmap, cliprect, 1); #else tc0080vco_tilemap_draw(state->m_tc0080vco, bitmap, cliprect, 0, 0, 0); diff --git a/src/mame/video/taitoic.c b/src/mame/video/taitoic.c index 0c7e1389ef4..502310b4476 100644 --- a/src/mame/video/taitoic.c +++ b/src/mame/video/taitoic.c @@ -3995,36 +3995,36 @@ void tc0150rod_draw( device_t *device, bitmap_t *bitmap, const rectangle *clipre int priority_switch_line = (road_ctrl & 0x00ff) - y_offs; #ifdef MAME_DEBUG - if (input_code_pressed_once (device->machine(), KEYCODE_X)) + if (device->machine().input().code_pressed_once (KEYCODE_X)) { dislayer[0] ^= 1; popmessage("RoadA body: %01x",dislayer[0]); } - if (input_code_pressed_once (device->machine(), KEYCODE_C)) + if (device->machine().input().code_pressed_once (KEYCODE_C)) { dislayer[1] ^= 1; popmessage("RoadA l-edge: %01x",dislayer[1]); } - if (input_code_pressed_once (device->machine(), KEYCODE_V)) + if (device->machine().input().code_pressed_once (KEYCODE_V)) { dislayer[2] ^= 1; popmessage("RoadA r-edge: %01x",dislayer[2]); } - if (input_code_pressed_once (device->machine(), KEYCODE_B)) + if (device->machine().input().code_pressed_once (KEYCODE_B)) { dislayer[3] ^= 1; popmessage("RoadB body: %01x",dislayer[3]); } - if (input_code_pressed_once (device->machine(), KEYCODE_N)) + if (device->machine().input().code_pressed_once (KEYCODE_N)) { dislayer[4] ^= 1; popmessage("RoadB l-edge: %01x",dislayer[4]); } - if (input_code_pressed_once (device->machine(), KEYCODE_M)) + if (device->machine().input().code_pressed_once (KEYCODE_M)) { dislayer[5] ^= 1; popmessage("RoadB r-edge: %01x",dislayer[5]); diff --git a/src/mame/video/taitojc.c b/src/mame/video/taitojc.c index b0d679f6155..44a9c279c9d 100644 --- a/src/mame/video/taitojc.c +++ b/src/mame/video/taitojc.c @@ -216,10 +216,10 @@ SCREEN_UPDATE( taitojc ) if( tick >= 5 ) { tick = 0; - if( input_code_pressed(screen->machine(), KEYCODE_O) ) + if( screen->machine().input().code_pressed(KEYCODE_O) ) debug_tex_pal++; - if( input_code_pressed(screen->machine(), KEYCODE_I) ) + if( screen->machine().input().code_pressed(KEYCODE_I) ) debug_tex_pal--; debug_tex_pal &= 0x7f; diff --git a/src/mame/video/tmnt.c b/src/mame/video/tmnt.c index 444ca36868c..9db8f8e5be3 100644 --- a/src/mame/video/tmnt.c +++ b/src/mame/video/tmnt.c @@ -178,9 +178,9 @@ void blswhstl_sprite_callback( running_machine &machine, int *code, int *color, { tmnt_state *state = machine.driver_data<tmnt_state>(); #if 0 -if (input_code_pressed(machine, KEYCODE_Q) && (*color & 0x20)) *color = rand(); -if (input_code_pressed(machine, KEYCODE_W) && (*color & 0x40)) *color = rand(); -if (input_code_pressed(machine, KEYCODE_E) && (*color & 0x80)) *color = rand(); +if (machine.input().code_pressed(KEYCODE_Q) && (*color & 0x20)) *color = rand(); +if (machine.input().code_pressed(KEYCODE_W) && (*color & 0x40)) *color = rand(); +if (machine.input().code_pressed(KEYCODE_E) && (*color & 0x80)) *color = rand(); #endif int pri = 0x20 | ((*color & 0x60) >> 2); if (pri <= state->m_layerpri[2]) diff --git a/src/mame/video/toaplan1.c b/src/mame/video/toaplan1.c index 6f488c0140d..3ef14564b87 100644 --- a/src/mame/video/toaplan1.c +++ b/src/mame/video/toaplan1.c @@ -764,12 +764,12 @@ static void toaplan1_log_vram(running_machine &machine) #ifdef MAME_DEBUG toaplan1_state *state = machine.driver_data<toaplan1_state>(); - if ( input_code_pressed(machine, KEYCODE_M) ) + if ( machine.input().code_pressed(KEYCODE_M) ) { UINT16 *spriteram16 = state->m_spriteram; UINT16 *buffered_spriteram16 = state->m_buffered_spriteram; offs_t sprite_voffs; - while (input_code_pressed(machine, KEYCODE_M)) ; + while (machine.input().code_pressed(KEYCODE_M)) ; if (state->m_spritesizeram16) /* FCU controller */ { int schar,sattr,sxpos,sypos,bschar,bsattr,bsxpos,bsypos; @@ -816,12 +816,12 @@ static void toaplan1_log_vram(running_machine &machine) } } - if ( input_code_pressed(machine, KEYCODE_SLASH) ) + if ( machine.input().code_pressed(KEYCODE_SLASH) ) { UINT16 *size = (UINT16 *)(state->m_spritesizeram16); UINT16 *bsize = (UINT16 *)(state->m_buffered_spritesizeram16); offs_t offs; - while (input_code_pressed(machine, KEYCODE_SLASH)) ; + while (machine.input().code_pressed(KEYCODE_SLASH)) ; if (state->m_spritesizeram16) /* FCU controller */ { logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n"); @@ -838,11 +838,11 @@ static void toaplan1_log_vram(running_machine &machine) } } - if ( input_code_pressed(machine, KEYCODE_N) ) + if ( machine.input().code_pressed(KEYCODE_N) ) { offs_t tile_voffs; int tchar[5], tattr[5]; - while (input_code_pressed(machine, KEYCODE_N)) ; /* BCU controller */ + while (machine.input().code_pressed(KEYCODE_N)) ; /* BCU controller */ logerror("Scrolls PF1-X PF1-Y PF2-X PF2-Y PF3-X PF3-Y PF4-X PF4-Y\n"); logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n", state->m_pf1_scrollx, state->m_pf1_scrolly, state->m_pf2_scrollx, state->m_pf2_scrolly, state->m_pf3_scrollx, state->m_pf3_scrolly, state->m_pf4_scrollx, state->m_pf4_scrolly); @@ -863,14 +863,14 @@ static void toaplan1_log_vram(running_machine &machine) } } - if ( input_code_pressed(machine, KEYCODE_W) ) + if ( machine.input().code_pressed(KEYCODE_W) ) { - while (input_code_pressed(machine, KEYCODE_W)) ; + while (machine.input().code_pressed(KEYCODE_W)) ; logerror("Mark here\n"); } - if ( input_code_pressed(machine, KEYCODE_E) ) + if ( machine.input().code_pressed(KEYCODE_E) ) { - while (input_code_pressed(machine, KEYCODE_E)) ; + while (machine.input().code_pressed(KEYCODE_E)) ; state->m_displog += 1; state->m_displog &= 1; } @@ -880,9 +880,9 @@ static void toaplan1_log_vram(running_machine &machine) logerror("------> #%04x #%04x #%04x #%04x #%04x #%04x #%04x #%04x\n", state->m_pf1_scrollx, state->m_pf1_scrolly, state->m_pf2_scrollx, state->m_pf2_scrolly, state->m_pf3_scrollx, state->m_pf3_scrolly, state->m_pf4_scrollx, state->m_pf4_scrolly); } - if ( input_code_pressed(machine, KEYCODE_B) ) + if ( machine.input().code_pressed(KEYCODE_B) ) { -// while (input_code_pressed(machine, KEYCODE_B)) ; +// while (machine.input().code_pressed(KEYCODE_B)) ; state->m_scrollx_offs1 += 0x1; state->m_scrollx_offs2 += 0x1; state->m_scrollx_offs3 += 0x1; state->m_scrollx_offs4 += 0x1; logerror("Scrollx_offs now = %08x\n", state->m_scrollx_offs4); tilemap_set_scrollx(state->m_pf1_tilemap, 0, (state->m_pf1_scrollx >> 7) - (state->m_tiles_offsetx - state->m_scrollx_offs1)); @@ -890,9 +890,9 @@ static void toaplan1_log_vram(running_machine &machine) tilemap_set_scrollx(state->m_pf3_tilemap, 0, (state->m_pf3_scrollx >> 7) - (state->m_tiles_offsetx - state->m_scrollx_offs3)); tilemap_set_scrollx(state->m_pf4_tilemap, 0, (state->m_pf4_scrollx >> 7) - (state->m_tiles_offsetx - state->m_scrollx_offs4)); } - if ( input_code_pressed(machine, KEYCODE_V) ) + if ( machine.input().code_pressed(KEYCODE_V) ) { -// while (input_code_pressed(machine, KEYCODE_V)) ; +// while (machine.input().code_pressed(KEYCODE_V)) ; state->m_scrollx_offs1 -= 0x1; state->m_scrollx_offs2 -= 0x1; state->m_scrollx_offs3 -= 0x1; state->m_scrollx_offs4 -= 0x1; logerror("Scrollx_offs now = %08x\n", state->m_scrollx_offs4); tilemap_set_scrollx(state->m_pf1_tilemap, 0, (state->m_pf1_scrollx >> 7) - (state->m_tiles_offsetx - state->m_scrollx_offs1)); @@ -900,9 +900,9 @@ static void toaplan1_log_vram(running_machine &machine) tilemap_set_scrollx(state->m_pf3_tilemap, 0, (state->m_pf3_scrollx >> 7) - (state->m_tiles_offsetx - state->m_scrollx_offs3)); tilemap_set_scrollx(state->m_pf4_tilemap, 0, (state->m_pf4_scrollx >> 7) - (state->m_tiles_offsetx - state->m_scrollx_offs4)); } - if ( input_code_pressed(machine, KEYCODE_C) ) + if ( machine.input().code_pressed(KEYCODE_C) ) { -// while (input_code_pressed(machine, KEYCODE_C)) ; +// while (machine.input().code_pressed(KEYCODE_C)) ; state->m_scrolly_offs += 0x1; logerror("Scrolly_offs now = %08x\n", state->m_scrolly_offs); tilemap_set_scrolly(state->m_pf1_tilemap, 0, (state->m_pf1_scrolly >> 7) - (state->m_tiles_offsety - state->m_scrolly_offs)); @@ -910,9 +910,9 @@ static void toaplan1_log_vram(running_machine &machine) tilemap_set_scrolly(state->m_pf3_tilemap, 0, (state->m_pf3_scrolly >> 7) - (state->m_tiles_offsety - state->m_scrolly_offs)); tilemap_set_scrolly(state->m_pf4_tilemap, 0, (state->m_pf4_scrolly >> 7) - (state->m_tiles_offsety - state->m_scrolly_offs)); } - if ( input_code_pressed(machine, KEYCODE_X) ) + if ( machine.input().code_pressed(KEYCODE_X) ) { -// while (input_code_pressed(machine, KEYCODE_X)) ; +// while (machine.input().code_pressed(KEYCODE_X)) ; state->m_scrolly_offs -= 0x1; logerror("Scrolly_offs now = %08x\n", state->m_scrolly_offs); tilemap_set_scrolly(state->m_pf1_tilemap, 0, (state->m_pf1_scrolly >> 7) - (state->m_tiles_offsety - state->m_scrolly_offs)); @@ -921,30 +921,30 @@ static void toaplan1_log_vram(running_machine &machine) tilemap_set_scrolly(state->m_pf4_tilemap, 0, (state->m_pf4_scrolly >> 7) - (state->m_tiles_offsety - state->m_scrolly_offs)); } - if ( input_code_pressed(machine, KEYCODE_L) ) /* Turn Playfield 4 on/off */ + if ( machine.input().code_pressed(KEYCODE_L) ) /* Turn Playfield 4 on/off */ { - while (input_code_pressed(machine, KEYCODE_L)) ; + while (machine.input().code_pressed(KEYCODE_L)) ; state->m_display_pf4 += 1; state->m_display_pf4 &= 1; tilemap_set_enable(state->m_pf4_tilemap, state->m_display_pf4); } - if ( input_code_pressed(machine, KEYCODE_K) ) /* Turn Playfield 3 on/off */ + if ( machine.input().code_pressed(KEYCODE_K) ) /* Turn Playfield 3 on/off */ { - while (input_code_pressed(machine, KEYCODE_K)) ; + while (machine.input().code_pressed(KEYCODE_K)) ; state->m_display_pf3 += 1; state->m_display_pf3 &= 1; tilemap_set_enable(state->m_pf3_tilemap, state->m_display_pf3); } - if ( input_code_pressed(machine, KEYCODE_J) ) /* Turn Playfield 2 on/off */ + if ( machine.input().code_pressed(KEYCODE_J) ) /* Turn Playfield 2 on/off */ { - while (input_code_pressed(machine, KEYCODE_J)) ; + while (machine.input().code_pressed(KEYCODE_J)) ; state->m_display_pf2 += 1; state->m_display_pf2 &= 1; tilemap_set_enable(state->m_pf2_tilemap, state->m_display_pf2); } - if ( input_code_pressed(machine, KEYCODE_H) ) /* Turn Playfield 1 on/off */ + if ( machine.input().code_pressed(KEYCODE_H) ) /* Turn Playfield 1 on/off */ { - while (input_code_pressed(machine, KEYCODE_H)) ; + while (machine.input().code_pressed(KEYCODE_H)) ; state->m_display_pf1 += 1; state->m_display_pf1 &= 1; tilemap_set_enable(state->m_pf1_tilemap, state->m_display_pf1); diff --git a/src/mame/video/topspeed.c b/src/mame/video/topspeed.c index 9cc239543a4..d41586e6963 100644 --- a/src/mame/video/topspeed.c +++ b/src/mame/video/topspeed.c @@ -115,31 +115,31 @@ SCREEN_UPDATE( topspeed ) UINT8 layer[4]; #ifdef MAME_DEBUG - if (input_code_pressed_once (screen->machine(), KEYCODE_V)) + if (screen->machine().input().code_pressed_once (KEYCODE_V)) { state->m_dislayer[0] ^= 1; popmessage("bg: %01x", state->m_dislayer[0]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_B)) + if (screen->machine().input().code_pressed_once (KEYCODE_B)) { state->m_dislayer[1] ^= 1; popmessage("fg: %01x", state->m_dislayer[1]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_N)) + if (screen->machine().input().code_pressed_once (KEYCODE_N)) { state->m_dislayer[2] ^= 1; popmessage("bg2: %01x", state->m_dislayer[2]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_M)) + if (screen->machine().input().code_pressed_once (KEYCODE_M)) { state->m_dislayer[3] ^= 1; popmessage("fg2: %01x", state->m_dislayer[3]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_C)) + if (screen->machine().input().code_pressed_once (KEYCODE_C)) { state->m_dislayer[4] ^= 1; popmessage("sprites: %01x", state->m_dislayer[4]); diff --git a/src/mame/video/tsamurai.c b/src/mame/video/tsamurai.c index b37f994d850..3adce52f30f 100644 --- a/src/mame/video/tsamurai.c +++ b/src/mame/video/tsamurai.c @@ -266,8 +266,8 @@ SCREEN_UPDATE( vsgongf ) { tsamurai_state *state = screen->machine().driver_data<tsamurai_state>(); #ifdef MAME_DEBUG - if( input_code_pressed( screen->machine(), KEYCODE_Q ) ){ - while( input_code_pressed( screen->machine(), KEYCODE_Q ) ){ + if( screen->machine().input().code_pressed( KEYCODE_Q ) ){ + while( screen->machine().input().code_pressed( KEYCODE_Q ) ){ state->m_key_count++; state->m_vsgongf_color = state->m_key_count; tilemap_mark_all_tiles_dirty( state->m_foreground ); diff --git a/src/mame/video/twincobr.c b/src/mame/video/twincobr.c index 4e806d6cd8d..9c6ea23229d 100644 --- a/src/mame/video/twincobr.c +++ b/src/mame/video/twincobr.c @@ -418,11 +418,11 @@ static void twincobr_log_vram(running_machine &machine) #ifdef MAME_DEBUG twincobr_state *state = machine.driver_data<twincobr_state>(); - if ( input_code_pressed(machine, KEYCODE_M) ) + if ( machine.input().code_pressed(KEYCODE_M) ) { offs_t tile_voffs; int tcode[4]; - while (input_code_pressed(machine, KEYCODE_M)) ; + while (machine.input().code_pressed(KEYCODE_M)) ; logerror("Scrolls BG-X BG-Y FG-X FG-Y TX-X TX-Y\n"); logerror("------> %04x %04x %04x %04x %04x %04x\n",state->m_bgscrollx,state->m_bgscrolly,state->m_fgscrollx,state->m_fgscrolly,state->m_txscrollx,state->m_txscrolly); for ( tile_voffs = 0; tile_voffs < (state->m_txvideoram_size/2); tile_voffs++ ) diff --git a/src/mame/video/undrfire.c b/src/mame/video/undrfire.c index b8df4bc806f..a8b4d2c6e16 100644 --- a/src/mame/video/undrfire.c +++ b/src/mame/video/undrfire.c @@ -357,36 +357,36 @@ SCREEN_UPDATE( undrfire ) #ifdef MAME_DEBUG undrfire_state *state = screen->machine().driver_data<undrfire_state>(); - if (input_code_pressed_once (screen->machine(), KEYCODE_X)) + if (screen->machine().input().code_pressed_once (KEYCODE_X)) { state->m_dislayer[5] ^= 1; popmessage("piv text: %01x",state->m_dislayer[5]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_C)) + if (screen->machine().input().code_pressed_once (KEYCODE_C)) { state->m_dislayer[0] ^= 1; popmessage("bg0: %01x",state->m_dislayer[0]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_V)) + if (screen->machine().input().code_pressed_once (KEYCODE_V)) { state->m_dislayer[1] ^= 1; popmessage("bg1: %01x",state->m_dislayer[1]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_B)) + if (screen->machine().input().code_pressed_once (KEYCODE_B)) { state->m_dislayer[2] ^= 1; popmessage("bg2: %01x",state->m_dislayer[2]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_N)) + if (screen->machine().input().code_pressed_once (KEYCODE_N)) { state->m_dislayer[3] ^= 1; popmessage("bg3: %01x",state->m_dislayer[3]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_M)) + if (screen->machine().input().code_pressed_once (KEYCODE_M)) { state->m_dislayer[4] ^= 1; popmessage("sprites: %01x",state->m_dislayer[4]); @@ -500,36 +500,36 @@ SCREEN_UPDATE( cbombers ) #ifdef MAME_DEBUG undrfire_state *state = screen->machine().driver_data<undrfire_state>(); - if (input_code_pressed_once (screen->machine(), KEYCODE_X)) + if (screen->machine().input().code_pressed_once (KEYCODE_X)) { state->m_dislayer[5] ^= 1; popmessage("piv text: %01x",state->m_dislayer[5]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_C)) + if (screen->machine().input().code_pressed_once (KEYCODE_C)) { state->m_dislayer[0] ^= 1; popmessage("bg0: %01x",state->m_dislayer[0]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_V)) + if (screen->machine().input().code_pressed_once (KEYCODE_V)) { state->m_dislayer[1] ^= 1; popmessage("bg1: %01x",state->m_dislayer[1]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_B)) + if (screen->machine().input().code_pressed_once (KEYCODE_B)) { state->m_dislayer[2] ^= 1; popmessage("bg2: %01x",state->m_dislayer[2]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_N)) + if (screen->machine().input().code_pressed_once (KEYCODE_N)) { state->m_dislayer[3] ^= 1; popmessage("bg3: %01x",state->m_dislayer[3]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_M)) + if (screen->machine().input().code_pressed_once (KEYCODE_M)) { state->m_dislayer[4] ^= 1; popmessage("sprites: %01x",state->m_dislayer[4]); diff --git a/src/mame/video/unico.c b/src/mame/video/unico.c index b65ee153555..aa28b20f83d 100644 --- a/src/mame/video/unico.c +++ b/src/mame/video/unico.c @@ -356,13 +356,13 @@ SCREEN_UPDATE( unico ) tilemap_set_scrolly(state->m_tilemap[2], 0, state->m_scroll[0x02]); #ifdef MAME_DEBUG -if ( input_code_pressed(screen->machine(), KEYCODE_Z) || input_code_pressed(screen->machine(), KEYCODE_X) ) +if ( screen->machine().input().code_pressed(KEYCODE_Z) || screen->machine().input().code_pressed(KEYCODE_X) ) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_E)) msk |= 4; - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= 8; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_E)) msk |= 4; + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= 8; if (msk != 0) layers_ctrl &= msk; } #endif @@ -396,13 +396,13 @@ SCREEN_UPDATE( zeropnt2 ) tilemap_set_scrolly(state->m_tilemap[2], 0, state->m_scroll32[1] >> 16); #ifdef MAME_DEBUG -if ( input_code_pressed(screen->machine(), KEYCODE_Z) || input_code_pressed(screen->machine(), KEYCODE_X) ) +if ( screen->machine().input().code_pressed(KEYCODE_Z) || screen->machine().input().code_pressed(KEYCODE_X) ) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; - if (input_code_pressed(screen->machine(), KEYCODE_E)) msk |= 4; - if (input_code_pressed(screen->machine(), KEYCODE_A)) msk |= 8; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_E)) msk |= 4; + if (screen->machine().input().code_pressed(KEYCODE_A)) msk |= 8; if (msk != 0) layers_ctrl &= msk; } #endif diff --git a/src/mame/video/wgp.c b/src/mame/video/wgp.c index 7a839723d86..e0c11a55711 100644 --- a/src/mame/video/wgp.c +++ b/src/mame/video/wgp.c @@ -650,25 +650,25 @@ SCREEN_UPDATE( wgp ) UINT8 layer[3]; #ifdef MAME_DEBUG - if (input_code_pressed_once (screen->machine(), KEYCODE_V)) + if (screen->machine().input().code_pressed_once (KEYCODE_V)) { state->m_dislayer[0] ^= 1; popmessage("piv0: %01x",state->m_dislayer[0]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_B)) + if (screen->machine().input().code_pressed_once (KEYCODE_B)) { state->m_dislayer[1] ^= 1; popmessage("piv1: %01x",state->m_dislayer[1]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_N)) + if (screen->machine().input().code_pressed_once (KEYCODE_N)) { state->m_dislayer[2] ^= 1; popmessage("piv2: %01x",state->m_dislayer[2]); } - if (input_code_pressed_once (screen->machine(), KEYCODE_M)) + if (screen->machine().input().code_pressed_once (KEYCODE_M)) { state->m_dislayer[3] ^= 1; popmessage("TC0100SCN top bg layer: %01x",state->m_dislayer[3]); diff --git a/src/mame/video/yunsung8.c b/src/mame/video/yunsung8.c index 5a5858e71a6..375697100be 100644 --- a/src/mame/video/yunsung8.c +++ b/src/mame/video/yunsung8.c @@ -200,11 +200,11 @@ SCREEN_UPDATE( yunsung8 ) int layers_ctrl = (~state->m_layers_ctrl) >> 4; #ifdef MAME_DEBUG -if (input_code_pressed(screen->machine(), KEYCODE_Z)) +if (screen->machine().input().code_pressed(KEYCODE_Z)) { int msk = 0; - if (input_code_pressed(screen->machine(), KEYCODE_Q)) msk |= 1; - if (input_code_pressed(screen->machine(), KEYCODE_W)) msk |= 2; + if (screen->machine().input().code_pressed(KEYCODE_Q)) msk |= 1; + if (screen->machine().input().code_pressed(KEYCODE_W)) msk |= 2; if (msk != 0) layers_ctrl &= msk; } #endif diff --git a/src/osd/osdepend.c b/src/osd/osdepend.c index 115c506a297..00ae01ac45a 100644 --- a/src/osd/osdepend.c +++ b/src/osd/osdepend.c @@ -183,7 +183,7 @@ void osd_interface::set_mastervolume(int attenuation) // additions/modifications to the input list //------------------------------------------------- -void osd_interface::customize_input_type_list(input_type_desc *typelist) +void osd_interface::customize_input_type_list(simple_list<input_type_entry> &typelist) { // // inptport.c defines some general purpose defaults for key and joystick bindings. diff --git a/src/osd/osdepend.h b/src/osd/osdepend.h index 174d2bef488..3a65c8263fd 100644 --- a/src/osd/osdepend.h +++ b/src/osd/osdepend.h @@ -43,6 +43,7 @@ #define __OSDEPEND_H__ #include "emucore.h" +#include "emutempl.h" #include "osdcore.h" #include "unicode.h" @@ -52,7 +53,7 @@ //************************************************************************** // forward references -class input_type_desc; +class input_type_entry; class device_t; typedef void *osd_font; @@ -83,7 +84,7 @@ public: virtual void set_mastervolume(int attenuation); // input overridables - virtual void customize_input_type_list(input_type_desc *typelist); + virtual void customize_input_type_list(simple_list<input_type_entry> &typelist); // font overridables virtual osd_font font_open(const char *name, int &height); diff --git a/src/osd/osdmini/minimain.c b/src/osd/osdmini/minimain.c index 0e43ce3e0a6..3575ada50c5 100644 --- a/src/osd/osdmini/minimain.c +++ b/src/osd/osdmini/minimain.c @@ -137,21 +137,21 @@ void mini_osd_interface::init(running_machine &machine) // initialize the input system by adding devices // let's pretend like we have a keyboard device - keyboard_device = input_device_add(machine, DEVICE_CLASS_KEYBOARD, "Keyboard", NULL); + keyboard_device = machine.input().device_class(DEVICE_CLASS_KEYBOARD).add_device("Keyboard"); if (keyboard_device == NULL) fatalerror("Error creating keyboard device"); // our faux keyboard only has a couple of keys (corresponding to the // common defaults) - input_device_item_add(keyboard_device, "Esc", &keyboard_state[KEY_ESCAPE], ITEM_ID_ESC, keyboard_get_state); - input_device_item_add(keyboard_device, "P1", &keyboard_state[KEY_P1_START], ITEM_ID_1, keyboard_get_state); - input_device_item_add(keyboard_device, "B1", &keyboard_state[KEY_BUTTON_1], ITEM_ID_LCONTROL, keyboard_get_state); - input_device_item_add(keyboard_device, "B2", &keyboard_state[KEY_BUTTON_2], ITEM_ID_LALT, keyboard_get_state); - input_device_item_add(keyboard_device, "B3", &keyboard_state[KEY_BUTTON_3], ITEM_ID_SPACE, keyboard_get_state); - input_device_item_add(keyboard_device, "JoyU", &keyboard_state[KEY_JOYSTICK_U], ITEM_ID_UP, keyboard_get_state); - input_device_item_add(keyboard_device, "JoyD", &keyboard_state[KEY_JOYSTICK_D], ITEM_ID_DOWN, keyboard_get_state); - input_device_item_add(keyboard_device, "JoyL", &keyboard_state[KEY_JOYSTICK_L], ITEM_ID_LEFT, keyboard_get_state); - input_device_item_add(keyboard_device, "JoyR", &keyboard_state[KEY_JOYSTICK_R], ITEM_ID_RIGHT, keyboard_get_state); + keyboard_device->add_item("Esc", ITEM_ID_ESC, keyboard_get_state, &keyboard_state[KEY_ESCAPE]); + keyboard_device->add_item("P1", ITEM_ID_1, keyboard_get_state, &keyboard_state[KEY_P1_START]); + keyboard_device->add_item("B1", ITEM_ID_LCONTROL, keyboard_get_state, &keyboard_state[KEY_BUTTON_1]); + keyboard_device->add_item("B2", ITEM_ID_LALT, keyboard_get_state, &keyboard_state[KEY_BUTTON_2]); + keyboard_device->add_item("B3", ITEM_ID_SPACE, keyboard_get_state, &keyboard_state[KEY_BUTTON_3]); + keyboard_device->add_item("JoyU", ITEM_ID_UP, keyboard_get_state, &keyboard_state[KEY_JOYSTICK_U]); + keyboard_device->add_item("JoyD", ITEM_ID_DOWN, keyboard_get_state, &keyboard_state[KEY_JOYSTICK_D]); + keyboard_device->add_item("JoyL", ITEM_ID_LEFT, keyboard_get_state, &keyboard_state[KEY_JOYSTICK_L]); + keyboard_device->add_item("JoyR", ITEM_ID_RIGHT, keyboard_get_state, &keyboard_state[KEY_JOYSTICK_R]); // hook up the debugger log // add_logerror_callback(machine, output_oslog); @@ -212,7 +212,7 @@ void mini_osd_interface::set_mastervolume(int attenuation) // customize_input_type_list //============================================================ -void mini_osd_interface::customize_input_type_list(input_type_desc *typelist) +void mini_osd_interface::customize_input_type_list(simple_list<input_type_entry> &typelist) { // This function is called on startup, before reading the // configuration from disk. Scan the list, and change the diff --git a/src/osd/osdmini/osdmini.h b/src/osd/osdmini/osdmini.h index d436f747607..a658b6e4bfa 100644 --- a/src/osd/osdmini/osdmini.h +++ b/src/osd/osdmini/osdmini.h @@ -67,7 +67,7 @@ public: virtual void set_mastervolume(int attenuation); // input overridables - virtual void customize_input_type_list(input_type_desc *typelist); + virtual void customize_input_type_list(simple_list<input_type_entry> &typelist); private: static void osd_exit(running_machine &machine); diff --git a/src/osd/sdl/input.c b/src/osd/sdl/input.c index d3c6f112eeb..d823683c433 100644 --- a/src/osd/sdl/input.c +++ b/src/osd/sdl/input.c @@ -198,7 +198,7 @@ static device_info *generic_device_find_index(device_info *devlist_head, int ind // master keyboard translation table typedef struct _kt_table kt_table; struct _kt_table { - INT32 mame_key; + input_item_id mame_key; INT32 sdl_key; //const char * vkey; //const char * ascii; @@ -334,7 +334,7 @@ static kt_table sdl_key_trans_table[] = KTT_ENTRY2( MENU, MENU ), KTT_ENTRY0( TILDE, GRAVE, 0xc0, '`', "TILDE" ), KTT_ENTRY0( BACKSLASH2, NONUSBACKSLASH, 0xdc, '\\', "BACKSLASH2" ), - { -1 } + { ITEM_ID_INVALID } }; #else @@ -459,7 +459,7 @@ static kt_table sdl_key_trans_table[] = KTT_ENTRY2( MENU, MENU ), KTT_ENTRY0( TILDE, BACKQUOTE, 0xc0, '`', "TILDE" ), KTT_ENTRY0( BACKSLASH2, HASH, 0xdc, '\\', "BACKSLASH2" ), - { -1 } + { ITEM_ID_INVALID } }; #endif @@ -661,14 +661,14 @@ static device_info *devmap_class_register(running_machine &machine, device_map_t { sprintf(tempname, "NC%d", index); devinfo = generic_device_alloc(devlist, tempname); - devinfo->device = input_device_add(machine, devclass, devinfo->name, devinfo); + devinfo->device = machine.input().device_class(devclass).add_device(devinfo->name, devinfo); } return NULL; } else { devinfo = generic_device_alloc(devlist, devmap->map[index].name); - devinfo->device = input_device_add(machine, devclass, devinfo->name, devinfo); + devinfo->device = machine.input().device_class(devclass).add_device(devinfo->name, devinfo); } return devinfo; } @@ -725,7 +725,7 @@ static void sdlinput_register_joysticks(running_machine &machine) itemid = ITEM_ID_OTHER_AXIS_ABSOLUTE; sprintf(tempname, "A%d %s", axis, devinfo->name); - input_device_item_add(devinfo->device, tempname, &devinfo->joystick.axes[axis], itemid, generic_axis_get_state); + devinfo->device->add_item(tempname, itemid, generic_axis_get_state, &devinfo->joystick.axes[axis]); } // loop over all buttons @@ -743,7 +743,7 @@ static void sdlinput_register_joysticks(running_machine &machine) itemid = ITEM_ID_OTHER_SWITCH; sprintf(tempname, "button %d", button); - input_device_item_add(devinfo->device, tempname, &devinfo->joystick.buttons[button], itemid, generic_button_get_state); + devinfo->device->add_item(tempname, itemid, generic_button_get_state, &devinfo->joystick.buttons[button]); } // loop over all hats @@ -753,16 +753,16 @@ static void sdlinput_register_joysticks(running_machine &machine) sprintf(tempname, "hat %d Up", hat); itemid = (input_item_id) ((hat < INPUT_MAX_HATS) ? ITEM_ID_HAT1UP + 4 * hat : ITEM_ID_OTHER_SWITCH); - input_device_item_add(devinfo->device, tempname, &devinfo->joystick.hatsU[hat], itemid, generic_button_get_state); + devinfo->device->add_item(tempname, itemid, generic_button_get_state, &devinfo->joystick.hatsU[hat]); sprintf(tempname, "hat %d Down", hat); itemid = (input_item_id) ((hat < INPUT_MAX_HATS) ? ITEM_ID_HAT1DOWN + 4 * hat : ITEM_ID_OTHER_SWITCH); - input_device_item_add(devinfo->device, tempname, &devinfo->joystick.hatsD[hat], itemid, generic_button_get_state); + devinfo->device->add_item(tempname, itemid, generic_button_get_state, &devinfo->joystick.hatsD[hat]); sprintf(tempname, "hat %d Left", hat); itemid = (input_item_id) ((hat < INPUT_MAX_HATS) ? ITEM_ID_HAT1LEFT + 4 * hat : ITEM_ID_OTHER_SWITCH); - input_device_item_add(devinfo->device, tempname, &devinfo->joystick.hatsL[hat], itemid, generic_button_get_state); + devinfo->device->add_item(tempname, itemid, generic_button_get_state, &devinfo->joystick.hatsL[hat]); sprintf(tempname, "hat %d Right", hat); itemid = (input_item_id) ((hat < INPUT_MAX_HATS) ? ITEM_ID_HAT1RIGHT + 4 * hat : ITEM_ID_OTHER_SWITCH); - input_device_item_add(devinfo->device, tempname, &devinfo->joystick.hatsR[hat], itemid, generic_button_get_state); + devinfo->device->add_item(tempname, itemid, generic_button_get_state, &devinfo->joystick.hatsR[hat]); } } mame_printf_verbose("Joystick: End initialization\n"); @@ -820,9 +820,9 @@ static void sdlinput_register_mice(running_machine &machine) // add the axes sprintf(defname, "X %s", devinfo->name); - input_device_item_add(devinfo->device, defname, &devinfo->mouse.lX, ITEM_ID_XAXIS, generic_axis_get_state); + devinfo->device->add_item(defname, ITEM_ID_XAXIS, generic_axis_get_state, &devinfo->mouse.lX); sprintf(defname, "Y %s", devinfo->name); - input_device_item_add(devinfo->device, defname, &devinfo->mouse.lY, ITEM_ID_YAXIS, generic_axis_get_state); + devinfo->device->add_item(defname, ITEM_ID_YAXIS, generic_axis_get_state, &devinfo->mouse.lY); for (button = 0; button < 4; button++) { @@ -831,7 +831,7 @@ static void sdlinput_register_mice(running_machine &machine) sprintf(defname, "B%d", button + 1); itemid = (input_item_id) (ITEM_ID_BUTTON1+button); - input_device_item_add(devinfo->device, defname, &devinfo->mouse.buttons[button], itemid, generic_button_get_state); + devinfo->device->add_item(defname, itemid, generic_button_get_state, &devinfo->mouse.buttons[button]); } if (0 && mouse_enabled) @@ -853,20 +853,20 @@ static void sdlinput_register_mice(running_machine &machine) // SDL 1.2 has only 1 mouse - 1.3+ will also change that, so revisit this then devinfo = generic_device_alloc(&mouse_list, "System mouse"); - devinfo->device = input_device_add(machine, DEVICE_CLASS_MOUSE, devinfo->name, devinfo); + devinfo->device = machine.input().device_class(DEVICE_CLASS_MOUSE).add_device(devinfo->name, devinfo); mouse_enabled = machine.options().mouse(); // add the axes - input_device_item_add(devinfo->device, "X", &devinfo->mouse.lX, ITEM_ID_XAXIS, generic_axis_get_state); - input_device_item_add(devinfo->device, "Y", &devinfo->mouse.lY, ITEM_ID_YAXIS, generic_axis_get_state); + devinfo->device->add_item("X", ITEM_ID_XAXIS, generic_axis_get_state, &devinfo->mouse.lX); + devinfo->device->add_item("Y", ITEM_ID_YAXIS, generic_axis_get_state, &devinfo->mouse.lY); for (button = 0; button < 4; button++) { input_item_id itemid = (input_item_id) (ITEM_ID_BUTTON1+button); sprintf(defname, "B%d", button + 1); - input_device_item_add(devinfo->device, defname, &devinfo->mouse.buttons[button], itemid, generic_button_get_state); + devinfo->device->add_item(defname, itemid, generic_button_get_state, &devinfo->mouse.buttons[button]); } mame_printf_verbose("Mouse: Registered %s\n", devinfo->name); @@ -903,7 +903,7 @@ static int lookup_mame_index(const char *scode) index=-1; i=0; - while (sdl_key_trans_table[i].mame_key >= 0) + while (sdl_key_trans_table[i].mame_key != ITEM_ID_INVALID) { if (!strcmp(scode, sdl_key_trans_table[i].mame_key_name)) { @@ -915,14 +915,14 @@ static int lookup_mame_index(const char *scode) return index; } -static int lookup_mame_code(const char *scode) +static input_item_id lookup_mame_code(const char *scode) { int index; index = lookup_mame_index(scode); if (index >= 0) return sdl_key_trans_table[index].mame_key; else - return -1; + return ITEM_ID_INVALID; } @@ -1035,17 +1035,17 @@ static void sdlinput_register_keyboards(running_machine &machine) continue; // populate it - for (keynum = 0; sdl_key_trans_table[keynum].mame_key >= 0; keynum++) + for (keynum = 0; sdl_key_trans_table[keynum].mame_key!= ITEM_ID_INVALID; keynum++) { input_item_id itemid; - itemid = (input_item_id) key_trans_table[keynum].mame_key; + itemid = key_trans_table[keynum].mame_key; // generate the default / modified name snprintf(defname, sizeof(defname)-1, "%s", key_trans_table[keynum].ui_name); // add the item to the device - input_device_item_add(devinfo->device, defname, &devinfo->keyboard.state[OSD_SDL_INDEX(key_trans_table[keynum].sdl_key)], itemid, generic_button_get_state); + devinfo->device->add_item(defname, itemid, generic_button_get_state, &devinfo->keyboard.state[OSD_SDL_INDEX(key_trans_table[keynum].sdl_key)]); } mame_printf_verbose("Keyboard: Registered %s\n", devinfo->name); @@ -1069,21 +1069,21 @@ static void sdlinput_register_keyboards(running_machine &machine) // SDL 1.2 only has 1 keyboard (1.3+ will have multiple, this must be revisited then) // add it now devinfo = generic_device_alloc(&keyboard_list, "System keyboard"); - devinfo->device = input_device_add(machine, DEVICE_CLASS_KEYBOARD, devinfo->name, devinfo); + devinfo->device = machine.input().device_class(DEVICE_CLASS_KEYBOARD).add_device(devinfo->name, devinfo); // populate it - for (keynum = 0; sdl_key_trans_table[keynum].mame_key >= 0; keynum++) + for (keynum = 0; sdl_key_trans_table[keynum].mame_key != ITEM_ID_INVALID; keynum++) { input_item_id itemid; - itemid = (input_item_id) key_trans_table[keynum].mame_key; + itemid = key_trans_table[keynum].mame_key; // generate the default / modified name snprintf(defname, sizeof(defname)-1, "%s", key_trans_table[keynum].ui_name); // add the item to the device // printf("Keynum %d => sdl key %d\n", keynum, OSD_SDL_INDEX(key_trans_table[keynum].sdl_key)); - input_device_item_add(devinfo->device, defname, &devinfo->keyboard.state[OSD_SDL_INDEX(key_trans_table[keynum].sdl_key)], itemid, generic_button_get_state); + devinfo->device->add_item(defname, itemid, generic_button_get_state, &devinfo->keyboard.state[OSD_SDL_INDEX(key_trans_table[keynum].sdl_key)]); } mame_printf_verbose("Keyboard: Registered %s\n", devinfo->name); @@ -1590,17 +1590,18 @@ int sdlinput_should_hide_mouse(running_machine &machine) // customize_input_type_list //============================================================ -void sdl_osd_interface::customize_input_type_list(input_type_desc *typelist) +void sdl_osd_interface::customize_input_type_list(simple_list<input_type_entry> &typelist) { - int mameid_code ,ui_code; - input_type_desc *typedesc; + input_item_id mameid_code; + input_code ui_code; + input_type_entry *entry; const char* uimode; char fullmode[64]; // loop over the defaults - for (typedesc = typelist; typedesc != NULL; typedesc = typedesc->next) + for (entry = typelist.first(); entry != NULL; entry = entry->next()) { - switch (typedesc->type) + switch (entry->type) { // configurable UI mode switch case IPT_UI_TOGGLE_UI: @@ -1618,27 +1619,27 @@ void sdl_osd_interface::customize_input_type_list(input_type_desc *typelist) snprintf(fullmode, 63, "ITEM_ID_%s", uimode); mameid_code = lookup_mame_code(fullmode); } - ui_code = INPUT_CODE(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, mameid_code); - input_seq_set_1(&typedesc->seq[SEQ_TYPE_STANDARD], ui_code); + ui_code = input_code(DEVICE_CLASS_KEYBOARD, 0, ITEM_CLASS_SWITCH, ITEM_MODIFIER_NONE, input_item_id(mameid_code)); + entry->seq[SEQ_TYPE_STANDARD].set(ui_code); break; // alt-enter for fullscreen case IPT_OSD_1: - typedesc->token = "TOGGLE_FULLSCREEN"; - typedesc->name = "Toggle Fullscreen"; - input_seq_set_2(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_ENTER, KEYCODE_LALT); + entry->token = "TOGGLE_FULLSCREEN"; + entry->name = "Toggle Fullscreen"; + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_ENTER, KEYCODE_LALT); break; // disable UI_SELECT when LALT is down, this stops selecting // things in the menu when toggling fullscreen with LALT+ENTER /* case IPT_UI_SELECT: - input_seq_set_3(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_ENTER, SEQCODE_NOT, KEYCODE_LALT); + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_ENTER, input_seq::not_code, KEYCODE_LALT); break;*/ // page down for fastforward (must be OSD_3 as per src/emu/ui.c) case IPT_UI_FAST_FORWARD: - typedesc->token = "FAST_FORWARD"; - typedesc->name = "Fast Forward"; - input_seq_set_1(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_PGDN); + entry->token = "FAST_FORWARD"; + entry->name = "Fast Forward"; + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_PGDN); break; // OSD hotkeys use LCTRL and start at F3, they start at @@ -1648,68 +1649,68 @@ void sdl_osd_interface::customize_input_type_list(input_type_desc *typelist) // LCTRL-F3 to toggle fullstretch case IPT_OSD_2: - typedesc->token = "TOGGLE_FULLSTRETCH"; - typedesc->name = "Toggle Uneven stretch"; - input_seq_set_2(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_F3, KEYCODE_LCONTROL); + entry->token = "TOGGLE_FULLSTRETCH"; + entry->name = "Toggle Uneven stretch"; + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_F3, KEYCODE_LCONTROL); break; // add a Not lcrtl condition to the reset key case IPT_UI_SOFT_RESET: - input_seq_set_5(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_F3, SEQCODE_NOT, KEYCODE_LCONTROL, SEQCODE_NOT, KEYCODE_LSHIFT); + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_F3, input_seq::not_code, KEYCODE_LCONTROL, input_seq::not_code, KEYCODE_LSHIFT); break; // LCTRL-F4 to toggle keep aspect case IPT_OSD_4: - typedesc->token = "TOGGLE_KEEP_ASPECT"; - typedesc->name = "Toggle Keepaspect"; - input_seq_set_2(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_F4, KEYCODE_LCONTROL); + entry->token = "TOGGLE_KEEP_ASPECT"; + entry->name = "Toggle Keepaspect"; + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_F4, KEYCODE_LCONTROL); break; // add a Not lcrtl condition to the show gfx key case IPT_UI_SHOW_GFX: - input_seq_set_3(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_F4, SEQCODE_NOT, KEYCODE_LCONTROL); + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_F4, input_seq::not_code, KEYCODE_LCONTROL); break; // LCTRL-F5 to toggle OpenGL filtering case IPT_OSD_5: - typedesc->token = "TOGGLE_FILTER"; - typedesc->name = "Toggle Filter"; - input_seq_set_2(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_F5, KEYCODE_LCONTROL); + entry->token = "TOGGLE_FILTER"; + entry->name = "Toggle Filter"; + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_F5, KEYCODE_LCONTROL); break; // add a Not lcrtl condition to the toggle debug key case IPT_UI_TOGGLE_DEBUG: - input_seq_set_3(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_F5, SEQCODE_NOT, KEYCODE_LCONTROL); + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_F5, input_seq::not_code, KEYCODE_LCONTROL); break; // LCTRL-F6 to decrease OpenGL prescaling case IPT_OSD_6: - typedesc->token = "DECREASE_PRESCALE"; - typedesc->name = "Decrease Prescaling"; - input_seq_set_2(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_F6, KEYCODE_LCONTROL); + entry->token = "DECREASE_PRESCALE"; + entry->name = "Decrease Prescaling"; + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_F6, KEYCODE_LCONTROL); break; // add a Not lcrtl condition to the toggle cheat key case IPT_UI_TOGGLE_CHEAT: - input_seq_set_3(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_F6, SEQCODE_NOT, KEYCODE_LCONTROL); + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_F6, input_seq::not_code, KEYCODE_LCONTROL); break; // LCTRL-F7 to increase OpenGL prescaling case IPT_OSD_7: - typedesc->token = "INCREASE_PRESCALE"; - typedesc->name = "Increase Prescaling"; - input_seq_set_2(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_F7, KEYCODE_LCONTROL); + entry->token = "INCREASE_PRESCALE"; + entry->name = "Increase Prescaling"; + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_F7, KEYCODE_LCONTROL); break; // add a Not lcrtl condition to the load state key case IPT_UI_LOAD_STATE: - input_seq_set_5(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_F7, SEQCODE_NOT, KEYCODE_LCONTROL, SEQCODE_NOT, KEYCODE_LSHIFT); + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_F7, input_seq::not_code, KEYCODE_LCONTROL, input_seq::not_code, KEYCODE_LSHIFT); break; // add a Not lcrtl condition to the throttle key case IPT_UI_THROTTLE: - input_seq_set_3(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_F10, SEQCODE_NOT, KEYCODE_LCONTROL); + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_F10, input_seq::not_code, KEYCODE_LCONTROL); break; // disable the config menu if the ALT key is down // (allows ALT-TAB to switch between apps) case IPT_UI_CONFIGURE: - input_seq_set_5(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_TAB, SEQCODE_NOT, KEYCODE_LALT, SEQCODE_NOT, KEYCODE_RALT); + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_TAB, input_seq::not_code, KEYCODE_LALT, input_seq::not_code, KEYCODE_RALT); break; } } diff --git a/src/osd/sdl/osdsdl.h b/src/osd/sdl/osdsdl.h index fd459603d04..ea7588f0c6d 100644 --- a/src/osd/sdl/osdsdl.h +++ b/src/osd/sdl/osdsdl.h @@ -252,7 +252,7 @@ public: virtual void set_mastervolume(int attenuation); // input overridables - virtual void customize_input_type_list(input_type_desc *typelist); + virtual void customize_input_type_list(simple_list<input_type_entry> &typelist); // font overridables virtual osd_font font_open(const char *name, int &height); diff --git a/src/osd/windows/debugwin.c b/src/osd/windows/debugwin.c index 21f09eb386a..ef5f39bc26d 100644 --- a/src/osd/windows/debugwin.c +++ b/src/osd/windows/debugwin.c @@ -331,26 +331,27 @@ void windows_osd_interface::wait_for_debugger(device_t &device, bool firststop) static int debugwin_seq_pressed(running_machine &machine) { - const input_seq *seq = input_type_seq(machine, IPT_UI_DEBUG_BREAK, 0, SEQ_TYPE_STANDARD); + const input_seq &seq = input_type_seq(machine, IPT_UI_DEBUG_BREAK, 0, SEQ_TYPE_STANDARD); int result = FALSE; int invert = FALSE; int first = TRUE; int codenum; // iterate over all of the codes - for (codenum = 0; codenum < ARRAY_LENGTH(seq->code); codenum++) + int length = seq.length(); + for (codenum = 0; codenum < length; codenum++) { - input_code code = seq->code[codenum]; + input_code code = seq[codenum]; // handle NOT - if (code == SEQCODE_NOT) + if (code == input_seq::not_code) invert = TRUE; // handle OR and END - else if (code == SEQCODE_OR || code == SEQCODE_END) + else if (code == input_seq::or_code || code == input_seq::end_code) { // if we have a positive result from the previous set, we're done - if (result || code == SEQCODE_END) + if (result || code == input_seq::end_code) break; // otherwise, reset our state diff --git a/src/osd/windows/input.c b/src/osd/windows/input.c index e5508117327..960b0fb5f52 100644 --- a/src/osd/windows/input.c +++ b/src/osd/windows/input.c @@ -581,8 +581,8 @@ void wininput_poll(running_machine &machine) winwindow_process_events_periodic(machine); // track if mouse/lightgun is enabled, for mouse hiding purposes - mouse_enabled = input_device_class_enabled(machine, DEVICE_CLASS_MOUSE); - lightgun_enabled = input_device_class_enabled(machine, DEVICE_CLASS_LIGHTGUN); + mouse_enabled = machine.input().device_class(DEVICE_CLASS_MOUSE).enabled(); + lightgun_enabled = machine.input().device_class(DEVICE_CLASS_LIGHTGUN).enabled(); } // poll all of the devices @@ -743,9 +743,9 @@ BOOL wininput_handle_raw(HANDLE device) int wininput_vkey_for_mame_code(input_code code) { // only works for keyboard switches - if (INPUT_CODE_DEVCLASS(code) == DEVICE_CLASS_KEYBOARD && INPUT_CODE_ITEMCLASS(code) == ITEM_CLASS_SWITCH) + if (code.device_class() == DEVICE_CLASS_KEYBOARD && code.item_class() == ITEM_CLASS_SWITCH) { - input_item_id id = INPUT_CODE_ITEMID(code); + input_item_id id = code.item_id(); int tablenum; // scan the table for a match @@ -761,25 +761,25 @@ int wininput_vkey_for_mame_code(input_code code) // customize_input_type_list //============================================================ -void windows_osd_interface::customize_input_type_list(input_type_desc *typelist) +void windows_osd_interface::customize_input_type_list(simple_list<input_type_entry> &typelist) { - input_type_desc *typedesc; + input_type_entry *entry; // loop over the defaults - for (typedesc = typelist; typedesc != NULL; typedesc = typedesc->next) - switch (typedesc->type) + for (entry = typelist.first(); entry != NULL; entry = entry->next()) + switch (entry->type) { // disable the config menu if the ALT key is down // (allows ALT-TAB to switch between windows apps) case IPT_UI_CONFIGURE: - input_seq_set_5(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_TAB, SEQCODE_NOT, KEYCODE_LALT, SEQCODE_NOT, KEYCODE_RALT); + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_TAB, input_seq::not_code, KEYCODE_LALT, input_seq::not_code, KEYCODE_RALT); break; // alt-enter for fullscreen case IPT_OSD_1: - typedesc->token = "TOGGLE_FULLSCREEN"; - typedesc->name = "Toggle Fullscreen"; - input_seq_set_2(&typedesc->seq[SEQ_TYPE_STANDARD], KEYCODE_LALT, KEYCODE_ENTER); + entry->token = "TOGGLE_FULLSCREEN"; + entry->name = "Toggle Fullscreen"; + entry->seq[SEQ_TYPE_STANDARD].set(KEYCODE_LALT, KEYCODE_ENTER); break; } } @@ -967,13 +967,13 @@ static void win32_init(running_machine &machine) break; // add the device - devinfo->device = input_device_add(machine, DEVICE_CLASS_LIGHTGUN, devinfo->name, devinfo); + devinfo->device = machine.input().device_class(DEVICE_CLASS_LIGHTGUN).add_device(devinfo->name, devinfo); // populate the axes for (axisnum = 0; axisnum < 2; axisnum++) { char *name = utf8_from_tstring(default_axis_name[axisnum]); - input_device_item_add(devinfo->device, name, &devinfo->mouse.state.lX + axisnum, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state); + devinfo->device->add_item(name, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &devinfo->mouse.state.lX + axisnum); osd_free(name); } @@ -981,7 +981,7 @@ static void win32_init(running_machine &machine) for (butnum = 0; butnum < 2; butnum++) { char *name = utf8_from_tstring(default_button_name(butnum)); - input_device_item_add(devinfo->device, name, &devinfo->mouse.state.rgbButtons[butnum], (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state); + devinfo->device->add_item(name, (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state, &devinfo->mouse.state.rgbButtons[butnum]); osd_free(name); } } @@ -1346,7 +1346,7 @@ static BOOL CALLBACK dinput_keyboard_enum(LPCDIDEVICEINSTANCE instance, LPVOID r goto exit; // add the device - devinfo->device = input_device_add(machine, DEVICE_CLASS_KEYBOARD, devinfo->name, devinfo); + devinfo->device = machine.input().device_class(DEVICE_CLASS_KEYBOARD).add_device(devinfo->name, devinfo); devinfo->poll = dinput_keyboard_poll; // populate it @@ -1361,7 +1361,7 @@ static BOOL CALLBACK dinput_keyboard_enum(LPCDIDEVICEINSTANCE instance, LPVOID r name = dinput_device_item_name(devinfo, keynum, defname, NULL); // add the item to the device - input_device_item_add(devinfo->device, name, &devinfo->keyboard.state[keynum], itemid, generic_button_get_state); + devinfo->device->add_item(name, itemid, generic_button_get_state, &devinfo->keyboard.state[keynum]); osd_free(name); } @@ -1419,11 +1419,11 @@ static BOOL CALLBACK dinput_mouse_enum(LPCDIDEVICEINSTANCE instance, LPVOID ref) } // add the device - devinfo->device = input_device_add(machine, DEVICE_CLASS_MOUSE, devinfo->name, devinfo); + devinfo->device = machine.input().device_class(DEVICE_CLASS_MOUSE).add_device(devinfo->name, devinfo); devinfo->poll = dinput_mouse_poll; if (guninfo != NULL) { - guninfo->device = input_device_add(machine, DEVICE_CLASS_LIGHTGUN, guninfo->name, guninfo); + guninfo->device = machine.input().device_class(DEVICE_CLASS_LIGHTGUN).add_device(guninfo->name, guninfo); guninfo->poll = win32_lightgun_poll; } @@ -1437,9 +1437,9 @@ static BOOL CALLBACK dinput_mouse_enum(LPCDIDEVICEINSTANCE instance, LPVOID ref) char *name = dinput_device_item_name(devinfo, offsetof(DIMOUSESTATE, lX) + axisnum * sizeof(LONG), default_axis_name[axisnum], NULL); // add to the mouse device and optionally to the gun device as well - input_device_item_add(devinfo->device, name, &devinfo->mouse.state.lX + axisnum, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state); + devinfo->device->add_item(name, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &devinfo->mouse.state.lX + axisnum); if (guninfo != NULL && axisnum < 2) - input_device_item_add(guninfo->device, name, &guninfo->mouse.state.lX + axisnum, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state); + guninfo->device->add_item(name, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &guninfo->mouse.state.lX + axisnum); osd_free(name); } @@ -1452,9 +1452,9 @@ static BOOL CALLBACK dinput_mouse_enum(LPCDIDEVICEINSTANCE instance, LPVOID ref) // add to the mouse device and optionally to the gun device as well // note that the gun device points to the mouse buttons rather than its own - input_device_item_add(devinfo->device, name, &devinfo->mouse.state.rgbButtons[butnum], (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state); + devinfo->device->add_item(name, (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state, &devinfo->mouse.state.rgbButtons[butnum]); if (guninfo != NULL) - input_device_item_add(guninfo->device, name, &devinfo->mouse.state.rgbButtons[butnum], (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state); + guninfo->device->add_item(name, (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state, &devinfo->mouse.state.rgbButtons[butnum]); osd_free(name); } @@ -1528,7 +1528,7 @@ static BOOL CALLBACK dinput_joystick_enum(LPCDIDEVICEINSTANCE instance, LPVOID r devinfo->dinput.caps.dwButtons = MIN(devinfo->dinput.caps.dwButtons, 128); // add the device - devinfo->device = input_device_add(machine, DEVICE_CLASS_JOYSTICK, devinfo->name, devinfo); + devinfo->device = machine.input().device_class(DEVICE_CLASS_JOYSTICK).add_device(devinfo->name, devinfo); devinfo->poll = dinput_joystick_poll; // populate the axes @@ -1550,7 +1550,7 @@ static BOOL CALLBACK dinput_joystick_enum(LPCDIDEVICEINSTANCE instance, LPVOID r // populate the item description as well name = dinput_device_item_name(devinfo, offsetof(DIJOYSTATE2, lX) + axisnum * sizeof(LONG), default_axis_name[axisnum], NULL); - input_device_item_add(devinfo->device, name, &devinfo->joystick.state.lX + axisnum, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state); + devinfo->device->add_item(name, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &devinfo->joystick.state.lX + axisnum); osd_free(name); axiscount++; @@ -1563,22 +1563,22 @@ static BOOL CALLBACK dinput_joystick_enum(LPCDIDEVICEINSTANCE instance, LPVOID r // left name = dinput_device_item_name(devinfo, offsetof(DIJOYSTATE2, rgdwPOV) + povnum * sizeof(DWORD), default_pov_name(povnum), TEXT("L")); - input_device_item_add(devinfo->device, name, (void *)(FPTR)(povnum * 4 + POVDIR_LEFT), ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state); + devinfo->device->add_item(name, ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state, (void *)(FPTR)(povnum * 4 + POVDIR_LEFT)); osd_free(name); // right name = dinput_device_item_name(devinfo, offsetof(DIJOYSTATE2, rgdwPOV) + povnum * sizeof(DWORD), default_pov_name(povnum), TEXT("R")); - input_device_item_add(devinfo->device, name, (void *)(FPTR)(povnum * 4 + POVDIR_RIGHT), ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state); + devinfo->device->add_item(name, ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state, (void *)(FPTR)(povnum * 4 + POVDIR_RIGHT)); osd_free(name); // up name = dinput_device_item_name(devinfo, offsetof(DIJOYSTATE2, rgdwPOV) + povnum * sizeof(DWORD), default_pov_name(povnum), TEXT("U")); - input_device_item_add(devinfo->device, name, (void *)(FPTR)(povnum * 4 + POVDIR_UP), ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state); + devinfo->device->add_item(name, ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state, (void *)(FPTR)(povnum * 4 + POVDIR_UP)); osd_free(name); // down name = dinput_device_item_name(devinfo, offsetof(DIJOYSTATE2, rgdwPOV) + povnum * sizeof(DWORD), default_pov_name(povnum), TEXT("D")); - input_device_item_add(devinfo->device, name, (void *)(FPTR)(povnum * 4 + POVDIR_DOWN), ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state); + devinfo->device->add_item(name, ITEM_ID_OTHER_SWITCH, dinput_joystick_pov_get_state, (void *)(FPTR)(povnum * 4 + POVDIR_DOWN)); osd_free(name); } @@ -1587,7 +1587,7 @@ static BOOL CALLBACK dinput_joystick_enum(LPCDIDEVICEINSTANCE instance, LPVOID r { FPTR offset = (FPTR)(&((DIJOYSTATE2 *)NULL)->rgbButtons[butnum]); char *name = dinput_device_item_name(devinfo, offset, default_button_name(butnum), NULL); - input_device_item_add(devinfo->device, name, &devinfo->joystick.state.rgbButtons[butnum], (butnum < 16) ? (input_item_id)(ITEM_ID_BUTTON1 + butnum) : ITEM_ID_OTHER_SWITCH, generic_button_get_state); + devinfo->device->add_item(name, (butnum < 16) ? (input_item_id)(ITEM_ID_BUTTON1 + butnum) : ITEM_ID_OTHER_SWITCH, generic_button_get_state, &devinfo->joystick.state.rgbButtons[butnum]); osd_free(name); } @@ -1967,7 +1967,7 @@ static void rawinput_keyboard_enum(running_machine &machine, PRAWINPUTDEVICELIST return; // add the device - devinfo->device = input_device_add(machine, DEVICE_CLASS_KEYBOARD, devinfo->name, devinfo); + devinfo->device = machine.input().device_class(DEVICE_CLASS_KEYBOARD).add_device(devinfo->name, devinfo); // populate it for (keynum = 0; keynum < MAX_KEYS; keynum++) @@ -1982,7 +1982,7 @@ static void rawinput_keyboard_enum(running_machine &machine, PRAWINPUTDEVICELIST name = utf8_from_tstring(keyname); // add the item to the device - input_device_item_add(devinfo->device, name, &devinfo->keyboard.state[keynum], itemid, generic_button_get_state); + devinfo->device->add_item(name, itemid, generic_button_get_state, &devinfo->keyboard.state[keynum]); osd_free(name); } } @@ -2040,10 +2040,10 @@ static void rawinput_mouse_enum(running_machine &machine, PRAWINPUTDEVICELIST de } // add the device - devinfo->device = input_device_add(machine, DEVICE_CLASS_MOUSE, devinfo->name, devinfo); + devinfo->device = machine.input().device_class(DEVICE_CLASS_MOUSE).add_device(devinfo->name, devinfo); if (guninfo != NULL) { - guninfo->device = input_device_add(machine, DEVICE_CLASS_LIGHTGUN, guninfo->name, guninfo); + guninfo->device = machine.input().device_class(DEVICE_CLASS_LIGHTGUN).add_device(guninfo->name, guninfo); guninfo->poll = NULL; } @@ -2053,9 +2053,9 @@ static void rawinput_mouse_enum(running_machine &machine, PRAWINPUTDEVICELIST de char *name = utf8_from_tstring(default_axis_name[axisnum]); // add to the mouse device and optionally to the gun device as well - input_device_item_add(devinfo->device, name, &devinfo->mouse.state.lX + axisnum, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state); + devinfo->device->add_item(name, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &devinfo->mouse.state.lX + axisnum); if (guninfo != NULL && axisnum < 2) - input_device_item_add(guninfo->device, name, &guninfo->mouse.state.lX + axisnum, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state); + guninfo->device->add_item(name, (input_item_id)(ITEM_ID_XAXIS + axisnum), generic_axis_get_state, &guninfo->mouse.state.lX + axisnum); osd_free(name); } @@ -2066,9 +2066,9 @@ static void rawinput_mouse_enum(running_machine &machine, PRAWINPUTDEVICELIST de char *name = utf8_from_tstring(default_button_name(butnum)); // add to the mouse device and optionally to the gun device as well - input_device_item_add(devinfo->device, name, &devinfo->mouse.state.rgbButtons[butnum], (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state); + devinfo->device->add_item(name, (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state, &devinfo->mouse.state.rgbButtons[butnum]); if (guninfo != NULL) - input_device_item_add(guninfo->device, name, &guninfo->mouse.state.rgbButtons[butnum], (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state); + guninfo->device->add_item(name, (input_item_id)(ITEM_ID_BUTTON1 + butnum), generic_button_get_state, &guninfo->mouse.state.rgbButtons[butnum]); osd_free(name); } diff --git a/src/osd/windows/winmain.h b/src/osd/windows/winmain.h index 6bc2e909c57..456f6e5c3fc 100644 --- a/src/osd/windows/winmain.h +++ b/src/osd/windows/winmain.h @@ -342,7 +342,7 @@ public: virtual void *get_slider_list(); // input overridables - virtual void customize_input_type_list(input_type_desc *typelist); + virtual void customize_input_type_list(simple_list<input_type_entry> &typelist); // font overridables virtual osd_font font_open(const char *name, int &height); |