1 // license:BSD-3-Clause 2 // copyright-holders:Quench, Stephane Humbert 3 /******************************************************************************* 4 5 Input port macros used by many games in multiple Toaplan drivers 6 (similar to Taito but bits are ACTIVE_HIGH instead of ACTIVE_LOW) 7 8 *******************************************************************************/ 9 10 11 /**************************** Machine Dip Switches ****************************/ 12 13 /* with location */ 14 #define TOAPLAN_DSWA_BITS_1_TO_3_LOC(DIPBANK) \ 15 PORT_DIPNAME( 0x02, 0x00, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION(#DIPBANK":!2") \ 16 PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) \ 17 PORT_DIPSETTING( 0x02, DEF_STR( On ) ) \ 18 PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_HIGH, #DIPBANK":!3" ) \ 19 PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION(#DIPBANK":!4") \ 20 PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) \ 21 PORT_DIPSETTING( 0x00, DEF_STR( On ) ) 22 23 #define TOAPLAN_MACHINE_COCKTAIL_LOC(DIPBANK) \ 24 PORT_DIPNAME( 0x01, 0x01, DEF_STR( Cabinet ) ) PORT_DIPLOCATION(#DIPBANK":!1") \ 25 PORT_DIPSETTING( 0x01, DEF_STR( Upright ) ) \ 26 PORT_DIPSETTING( 0x00, DEF_STR( Cocktail ) ) \ 27 TOAPLAN_DSWA_BITS_1_TO_3_LOC(DIPBANK) 28 29 #define TOAPLAN_MACHINE_NO_COCKTAIL_LOC(DIPBANK) \ 30 PORT_DIPUNUSED_DIPLOC( 0x01, IP_ACTIVE_HIGH, #DIPBANK":!1" ) \ 31 TOAPLAN_DSWA_BITS_1_TO_3_LOC(DIPBANK) 32 33 34 /**************************** Coinage Dip Switches ****************************/ 35 36 /* with location */ 37 #define TOAPLAN_COINAGE_JAPAN_COIN_A_LOC(DIPBANK) \ 38 PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION(#DIPBANK":!5,!6") \ 39 PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) ) \ 40 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) \ 41 PORT_DIPSETTING( 0x30, DEF_STR( 2C_3C ) ) \ 42 PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) ) 43 44 #define TOAPLAN_COINAGE_JAPAN_COIN_B_LOC(DIPBANK) \ 45 PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION(#DIPBANK":!7,!8") \ 46 PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) ) \ 47 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) \ 48 PORT_DIPSETTING( 0xc0, DEF_STR( 2C_3C ) ) \ 49 PORT_DIPSETTING( 0x40, DEF_STR( 1C_2C ) ) 50 51 #define TOAPLAN_COINAGE_WORLD_COIN_A_LOC(DIPBANK) \ 52 PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION(#DIPBANK":!5,!6") \ 53 PORT_DIPSETTING( 0x30, DEF_STR( 4C_1C ) ) \ 54 PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) \ 55 PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) ) \ 56 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) 57 58 #define TOAPLAN_COINAGE_WORLD_COIN_B_LOC(DIPBANK) \ 59 PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION(#DIPBANK":!7,!8") \ 60 PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) ) \ 61 PORT_DIPSETTING( 0x40, DEF_STR( 1C_3C ) ) \ 62 PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) ) \ 63 PORT_DIPSETTING( 0xc0, DEF_STR( 1C_6C ) ) 64 65 #define TOAPLAN_COINAGE_JAPAN_LOC(DIPBANK) \ 66 TOAPLAN_COINAGE_JAPAN_COIN_A_LOC(DIPBANK) \ 67 TOAPLAN_COINAGE_JAPAN_COIN_B_LOC(DIPBANK) 68 69 #define TOAPLAN_COINAGE_WORLD_LOC(DIPBANK) \ 70 TOAPLAN_COINAGE_WORLD_COIN_A_LOC(DIPBANK) \ 71 TOAPLAN_COINAGE_WORLD_COIN_B_LOC(DIPBANK) 72 73 #define TOAPLAN_COINAGE_DUAL_LOC(DIP, MASK, WORLD, DIPBANK) \ 74 PORT_DIPNAME( 0x30, 0x00, DEF_STR( Coin_A ) ) PORT_DIPLOCATION(#DIPBANK":!5,!6") \ 75 PORT_DIPSETTING( 0x30, DEF_STR( 4C_1C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \ 76 PORT_DIPSETTING( 0x20, DEF_STR( 3C_1C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \ 77 PORT_DIPSETTING( 0x20, DEF_STR( 2C_1C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \ 78 PORT_DIPSETTING( 0x10, DEF_STR( 2C_1C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \ 79 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) \ 80 PORT_DIPSETTING( 0x30, DEF_STR( 2C_3C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \ 81 PORT_DIPSETTING( 0x10, DEF_STR( 1C_2C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \ 82 PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) ) PORT_DIPLOCATION(#DIPBANK":!7,!8") \ 83 PORT_DIPSETTING( 0x80, DEF_STR( 2C_1C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \ 84 PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \ 85 PORT_DIPSETTING( 0xc0, DEF_STR( 2C_3C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \ 86 PORT_DIPSETTING( 0x40, DEF_STR( 1C_2C ) ) PORT_CONDITION(#DIP,MASK,NOTEQUALS,WORLD) \ 87 PORT_DIPSETTING( 0x00, DEF_STR( 1C_2C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \ 88 PORT_DIPSETTING( 0x40, DEF_STR( 1C_3C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \ 89 PORT_DIPSETTING( 0x80, DEF_STR( 1C_4C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) \ 90 PORT_DIPSETTING( 0xc0, DEF_STR( 1C_6C ) ) PORT_CONDITION(#DIP,MASK,EQUALS,WORLD) 91 92 93 /************************** Difficulty Dip Switches ***************************/ 94 95 /* with location */ 96 #define TOAPLAN_DIFFICULTY_LOC(DIPBANK) \ 97 PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) ) PORT_DIPLOCATION(#DIPBANK":!1,!2") \ 98 PORT_DIPSETTING( 0x01, DEF_STR( Easy ) ) \ 99 PORT_DIPSETTING( 0x00, DEF_STR( Normal ) ) \ 100 PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) \ 101 PORT_DIPSETTING( 0x03, DEF_STR( Very_Hard ) ) 102 103 /************************** Joysticks and buttons *****************************/ 104 105 /* generic (might be moved elsewhere) */ 106 #define INPUT_GENERIC_JOY_LOW_NIBBLE(PL, STATE, WAY, B01, B02, B04, B08) \ 107 PORT_BIT( 0x01, STATE, IPT_JOYSTICK_##B01 ) WAY PORT_PLAYER(PL) \ 108 PORT_BIT( 0x02, STATE, IPT_JOYSTICK_##B02 ) WAY PORT_PLAYER(PL) \ 109 PORT_BIT( 0x04, STATE, IPT_JOYSTICK_##B04 ) WAY PORT_PLAYER(PL) \ 110 PORT_BIT( 0x08, STATE, IPT_JOYSTICK_##B08 ) WAY PORT_PLAYER(PL) 111 112 113 /* Toaplan generic (more might be needed) */ 114 #define TOAPLAN_GENERIC_JOY_MONO_UDLR(PL) \ 115 INPUT_GENERIC_JOY_LOW_NIBBLE(PL, IP_ACTIVE_HIGH, PORT_8WAY, UP, DOWN, LEFT, RIGHT) 116 117 118 #define TOAPLAN_GENERIC_BUTTONS_HIGH_NIBBLE(PL, STATE, BUTTON_A, BUTTON_B) \ 119 PORT_BIT( 0x10, STATE, IPT_##BUTTON_A ) PORT_PLAYER(PL) \ 120 PORT_BIT( 0x20, STATE, IPT_##BUTTON_B ) PORT_PLAYER(PL) \ 121 /* DO NOT fill bit 6 as it may be defined as START button ! */ 122 123 #define TOAPLAN_GENERIC_1_BUTTON(PL) \ 124 TOAPLAN_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_HIGH, BUTTON1, UNKNOWN) \ 125 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) 126 127 #define TOAPLAN_GENERIC_2_BUTTONS(PL) \ 128 TOAPLAN_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_HIGH, BUTTON1, BUTTON2) \ 129 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) 130 131 #define TOAPLAN_GENERIC_3_BUTTONS(PL) \ 132 TOAPLAN_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_HIGH, BUTTON1, BUTTON2) \ 133 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_PLAYER(PL) \ 134 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) 135 136 #define TOAPLAN_GENERIC_1_BUTTON_START(PL) \ 137 TOAPLAN_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_HIGH, BUTTON1, UNKNOWN) \ 138 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START##PL ) \ 139 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) 140 141 #define TOAPLAN_GENERIC_2_BUTTONS_START(PL) \ 142 TOAPLAN_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_HIGH, BUTTON1, BUTTON2) \ 143 PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_START##PL ) \ 144 PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) 145 146 147 /* Toaplan games (more might be needed) */ 148 #define TOAPLAN_JOY_UDLR_1_BUTTON(PL) \ 149 TOAPLAN_GENERIC_JOY_MONO_UDLR(PL) \ 150 TOAPLAN_GENERIC_1_BUTTON(PL) 151 152 #define TOAPLAN_JOY_UDLR_2_BUTTONS(PL) \ 153 TOAPLAN_GENERIC_JOY_MONO_UDLR(PL) \ 154 TOAPLAN_GENERIC_2_BUTTONS(PL) 155 156 #define TOAPLAN_JOY_UDLR_3_BUTTONS(PL) \ 157 TOAPLAN_GENERIC_JOY_MONO_UDLR(PL) \ 158 TOAPLAN_GENERIC_3_BUTTONS(PL) 159 160 161 #define TOAPLAN_JOY_UDLR_1_BUTTON_START(PL) \ 162 TOAPLAN_GENERIC_JOY_MONO_UDLR(PL) \ 163 TOAPLAN_GENERIC_1_BUTTON_START(PL) 164 165 #define TOAPLAN_JOY_UDLR_2_BUTTONS_START(PL) \ 166 TOAPLAN_GENERIC_JOY_MONO_UDLR(PL) \ 167 TOAPLAN_GENERIC_2_BUTTONS_START(PL) 168 169 170 /******************************* Test switch **********************************/ 171 172 /* Some Toaplan games enable built-in "cheats" like invulnerability, 173 pause, slow motion, etc. when the Test switch (JAMMA pin 15) 174 is pressed during play. 175 Set to 0 if you want to see the Test switch as a standard input. 176 Set to 1 if you want to see the Test switch as a fake Dip Switch */ 177 178 #define SHOW_TEST_AS_DIP 1 179 180 #if SHOW_TEST_AS_DIP 181 #define TOAPLAN_TEST_SWITCH(MASK, STATE) \ 182 PORT_DIPNAME( MASK, MASK & STATE, "Test Switch" ) PORT_CODE(KEYCODE_F1) PORT_TOGGLE \ 183 PORT_DIPSETTING( MASK & STATE, DEF_STR( Off ) ) \ 184 PORT_DIPSETTING( MASK & ~STATE, DEF_STR( On ) ) 185 #else 186 #define TOAPLAN_TEST_SWITCH(MASK, STATE) \ 187 PORT_BIT( MASK, MASK & STATE, IPT_OTHER ) PORT_NAME("Test Switch") PORT_CODE(KEYCODE_F1) 188 #endif 189