1 // license:BSD-3-Clause
2 // copyright-holders:David Graves, Bryan McPhail, Brad Oliver, Andrew Prime, Brian Troha, Nicola Salmoria,Stephane Humbert
3 /*******************************************************************************
4 
5     Input port macros used by many games in multiple Taito drivers
6 
7 *******************************************************************************/
8 
9 
10 /**************************** Machine Dip Switches ****************************/
11 
12 /* with location */
13 #define TAITO_DSWA_BITS_2_TO_3_LOC(DIPBANK) \
14 	PORT_SERVICE_DIPLOC( 0x04, IP_ACTIVE_LOW, #DIPBANK":3" ) \
15 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION(#DIPBANK":4") \
16 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
17 	PORT_DIPSETTING(    0x08, DEF_STR( On ) )
18 
19 #define TAITO_DSWA_BITS_1_TO_3_LOC(DIPBANK) \
20 	PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION(#DIPBANK":2") \
21 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) ) \
22 	PORT_DIPSETTING(    0x00, DEF_STR( On ) ) \
23 	TAITO_DSWA_BITS_2_TO_3_LOC(DIPBANK)
24 
25 #define TAITO_MACHINE_COCKTAIL_LOC(DIPBANK) \
26 	PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) PORT_DIPLOCATION(#DIPBANK":1") \
27 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) ) \
28 	PORT_DIPSETTING(    0x01, DEF_STR( Cocktail ) ) \
29 	TAITO_DSWA_BITS_1_TO_3_LOC(DIPBANK)
30 
31 #define TAITO_MACHINE_NO_COCKTAIL_LOC(DIPBANK) \
32 	PORT_DIPUNUSED_DIPLOC( 0x01, IP_ACTIVE_LOW, #DIPBANK":1" ) \
33 	TAITO_DSWA_BITS_1_TO_3_LOC(DIPBANK)
34 
35 
36 /* without location */
37 #define TAITO_DSWA_BITS_2_TO_3 \
38 	PORT_SERVICE( 0x04, IP_ACTIVE_LOW ) \
39 	PORT_DIPNAME( 0x08, 0x08, DEF_STR( Demo_Sounds ) ) \
40 	PORT_DIPSETTING(    0x00, DEF_STR( Off ) ) \
41 	PORT_DIPSETTING(    0x08, DEF_STR( On ) )
42 
43 #define TAITO_DSWA_BITS_1_TO_3 \
44 	PORT_DIPNAME( 0x02, 0x02, DEF_STR( Flip_Screen ) ) \
45 	PORT_DIPSETTING(    0x02, DEF_STR( Off ) ) \
46 	PORT_DIPSETTING(    0x00, DEF_STR( On ) ) \
47 	TAITO_DSWA_BITS_2_TO_3
48 
49 #define TAITO_MACHINE_COCKTAIL \
50 	PORT_DIPNAME( 0x01, 0x00, DEF_STR( Cabinet ) ) \
51 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) ) \
52 	PORT_DIPSETTING(    0x01, DEF_STR( Cocktail ) ) \
53 	TAITO_DSWA_BITS_1_TO_3
54 
55 #define TAITO_MACHINE_NO_COCKTAIL \
56 	PORT_DIPUNUSED( 0x01, IP_ACTIVE_LOW ) \
57 	TAITO_DSWA_BITS_1_TO_3
58 
59 
60 /**************************** Coinage Dip Switches ****************************/
61 
62 /* with location */
63 #define TAITO_COINAGE_JAPAN_OLD_COIN_A_LOC(DIPBANK) \
64 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) ) PORT_DIPLOCATION(#DIPBANK":5,6") \
65 	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) ) \
66 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) ) \
67 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_3C ) ) \
68 	PORT_DIPSETTING(    0x20, DEF_STR( 1C_2C ) )
69 
70 #define TAITO_COINAGE_JAPAN_OLD_COIN_B_LOC(DIPBANK) \
71 	PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION(#DIPBANK":7,8") \
72 	PORT_DIPSETTING(    0x40, DEF_STR( 2C_1C ) ) \
73 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_1C ) ) \
74 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_3C ) ) \
75 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_2C ) )
76 
77 #define TAITO_COINAGE_JAPAN_NEW_COIN_A_LOC(DIPBANK) \
78 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) ) PORT_DIPLOCATION(#DIPBANK":5,6") \
79 	PORT_DIPSETTING(    0x00, DEF_STR( 3C_1C ) ) \
80 	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) ) \
81 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) ) \
82 	PORT_DIPSETTING(    0x20, DEF_STR( 1C_2C ) )
83 
84 #define TAITO_COINAGE_JAPAN_NEW_COIN_B_LOC(DIPBANK) \
85 	PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION(#DIPBANK":7,8") \
86 	PORT_DIPSETTING(    0x00, DEF_STR( 3C_1C ) ) \
87 	PORT_DIPSETTING(    0x40, DEF_STR( 2C_1C ) ) \
88 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_1C ) ) \
89 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_2C ) )
90 
91 #define TAITO_COINAGE_WORLD_COIN_A_LOC(DIPBANK) \
92 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) ) PORT_DIPLOCATION(#DIPBANK":5,6") \
93 	PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) ) \
94 	PORT_DIPSETTING(    0x10, DEF_STR( 3C_1C ) ) \
95 	PORT_DIPSETTING(    0x20, DEF_STR( 2C_1C ) ) \
96 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) )
97 
98 #define TAITO_COINAGE_WORLD_COIN_B_LOC(DIPBANK) \
99 	PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION(#DIPBANK":7,8") \
100 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_2C ) ) \
101 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_3C ) ) \
102 	PORT_DIPSETTING(    0x40, DEF_STR( 1C_4C ) ) \
103 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_6C ) )
104 
105 #define TAITO_COINAGE_US_COIN_START_LOC(DIPBANK) \
106 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coinage ) ) PORT_DIPLOCATION(#DIPBANK":5,6") \
107 	PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) ) \
108 	PORT_DIPSETTING(    0x10, DEF_STR( 3C_1C ) ) \
109 	PORT_DIPSETTING(    0x20, DEF_STR( 2C_1C ) ) \
110 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) )
111 
112 #define TAITO_COINAGE_US_COIN_CONT_LOC(DIPBANK) \
113 	PORT_DIPNAME( 0xc0, 0xc0, "Price to Continue" ) PORT_DIPLOCATION(#DIPBANK":7,8") \
114 	PORT_DIPSETTING(    0x00, DEF_STR( 3C_1C ) ) \
115 	PORT_DIPSETTING(    0x40, DEF_STR( 2C_1C ) ) \
116 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_1C ) ) \
117 	PORT_DIPSETTING(    0xc0, "Same as Start" )
118 
119 #define TAITO_COINAGE_JAPAN_OLD_LOC(DIPBANK) \
120 	TAITO_COINAGE_JAPAN_OLD_COIN_A_LOC(DIPBANK) \
121 	TAITO_COINAGE_JAPAN_OLD_COIN_B_LOC(DIPBANK)
122 
123 #define TAITO_COINAGE_JAPAN_NEW_LOC(DIPBANK) \
124 	TAITO_COINAGE_JAPAN_NEW_COIN_A_LOC(DIPBANK) \
125 	TAITO_COINAGE_JAPAN_NEW_COIN_B_LOC(DIPBANK)
126 
127 #define TAITO_COINAGE_WORLD_LOC(DIPBANK) \
128 	TAITO_COINAGE_WORLD_COIN_A_LOC(DIPBANK) \
129 	TAITO_COINAGE_WORLD_COIN_B_LOC(DIPBANK)
130 
131 #define TAITO_COINAGE_US_LOC(DIPBANK) \
132 	TAITO_COINAGE_US_COIN_START_LOC(DIPBANK) \
133 	TAITO_COINAGE_US_COIN_CONT_LOC(DIPBANK)
134 
135 
136 /* without location */
137 #define TAITO_COINAGE_JAPAN_OLD_COIN_A \
138 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) ) \
139 	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) ) \
140 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) ) \
141 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_3C ) ) \
142 	PORT_DIPSETTING(    0x20, DEF_STR( 1C_2C ) )
143 
144 #define TAITO_COINAGE_JAPAN_OLD_COIN_B \
145 	PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) ) \
146 	PORT_DIPSETTING(    0x40, DEF_STR( 2C_1C ) ) \
147 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_1C ) ) \
148 	PORT_DIPSETTING(    0x00, DEF_STR( 2C_3C ) ) \
149 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_2C ) )
150 
151 #define TAITO_COINAGE_JAPAN_NEW_COIN_A \
152 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) ) \
153 	PORT_DIPSETTING(    0x00, DEF_STR( 3C_1C ) ) \
154 	PORT_DIPSETTING(    0x10, DEF_STR( 2C_1C ) ) \
155 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) ) \
156 	PORT_DIPSETTING(    0x20, DEF_STR( 1C_2C ) )
157 
158 #define TAITO_COINAGE_JAPAN_NEW_COIN_B \
159 	PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) ) \
160 	PORT_DIPSETTING(    0x00, DEF_STR( 3C_1C ) ) \
161 	PORT_DIPSETTING(    0x40, DEF_STR( 2C_1C ) ) \
162 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_1C ) ) \
163 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_2C ) )
164 
165 #define TAITO_COINAGE_WORLD_COIN_A \
166 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coin_A ) ) \
167 	PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) ) \
168 	PORT_DIPSETTING(    0x10, DEF_STR( 3C_1C ) ) \
169 	PORT_DIPSETTING(    0x20, DEF_STR( 2C_1C ) ) \
170 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) )
171 
172 #define TAITO_COINAGE_WORLD_COIN_B \
173 	PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Coin_B ) ) \
174 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_2C ) ) \
175 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_3C ) ) \
176 	PORT_DIPSETTING(    0x40, DEF_STR( 1C_4C ) ) \
177 	PORT_DIPSETTING(    0x00, DEF_STR( 1C_6C ) )
178 
179 #define TAITO_COINAGE_US_COIN_START \
180 	PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coinage ) ) \
181 	PORT_DIPSETTING(    0x00, DEF_STR( 4C_1C ) ) \
182 	PORT_DIPSETTING(    0x10, DEF_STR( 3C_1C ) ) \
183 	PORT_DIPSETTING(    0x20, DEF_STR( 2C_1C ) ) \
184 	PORT_DIPSETTING(    0x30, DEF_STR( 1C_1C ) )
185 
186 #define TAITO_COINAGE_US_COIN_CONT \
187 	PORT_DIPNAME( 0xc0, 0xc0, DEF_STR( Continue_Price ) ) \
188 	PORT_DIPSETTING(    0x00, DEF_STR( 3C_1C ) ) \
189 	PORT_DIPSETTING(    0x40, DEF_STR( 2C_1C ) ) \
190 	PORT_DIPSETTING(    0x80, DEF_STR( 1C_1C ) ) \
191 	PORT_DIPSETTING(    0xc0, "Same as Start" )
192 
193 #define TAITO_COINAGE_JAPAN_OLD \
194 	TAITO_COINAGE_JAPAN_OLD_COIN_A \
195 	TAITO_COINAGE_JAPAN_OLD_COIN_B
196 
197 #define TAITO_COINAGE_JAPAN_NEW \
198 	TAITO_COINAGE_JAPAN_NEW_COIN_A \
199 	TAITO_COINAGE_JAPAN_NEW_COIN_B
200 
201 #define TAITO_COINAGE_WORLD \
202 	TAITO_COINAGE_WORLD_COIN_A \
203 	TAITO_COINAGE_WORLD_COIN_B
204 
205 #define TAITO_COINAGE_US \
206 	TAITO_COINAGE_US_COIN_START \
207 	TAITO_COINAGE_US_COIN_CONT
208 
209 
210 /************************** Difficulty Dip Switches ***************************/
211 
212 /* with location */
213 #define TAITO_DIFFICULTY_LOC(DIPBANK) \
214 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) PORT_DIPLOCATION(#DIPBANK":1,2") \
215 	PORT_DIPSETTING(    0x02, DEF_STR( Easy ) ) \
216 	PORT_DIPSETTING(    0x03, DEF_STR( Medium ) ) \
217 	PORT_DIPSETTING(    0x01, DEF_STR( Hard ) ) \
218 	PORT_DIPSETTING(    0x00, DEF_STR( Hardest ) )
219 
220 /* without location */
221 #define TAITO_DIFFICULTY \
222 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Difficulty ) ) \
223 	PORT_DIPSETTING(    0x02, DEF_STR( Easy ) ) \
224 	PORT_DIPSETTING(    0x03, DEF_STR( Medium ) ) \
225 	PORT_DIPSETTING(    0x01, DEF_STR( Hard ) ) \
226 	PORT_DIPSETTING(    0x00, DEF_STR( Hardest ) )
227 
228 
229 /************************** Joysticks and buttons *****************************/
230 
231 /* generic (might be moved elsewhere) */
232 #define INPUT_GENERIC_JOY_LOW_NIBBLE(PL, STATE, WAY, B01, B02, B04, B08) \
233 	PORT_BIT( 0x01, STATE, IPT_JOYSTICK_##B01 ) WAY PORT_PLAYER(PL) \
234 	PORT_BIT( 0x02, STATE, IPT_JOYSTICK_##B02 ) WAY PORT_PLAYER(PL) \
235 	PORT_BIT( 0x04, STATE, IPT_JOYSTICK_##B04 ) WAY PORT_PLAYER(PL) \
236 	PORT_BIT( 0x08, STATE, IPT_JOYSTICK_##B08 ) WAY PORT_PLAYER(PL)
237 
238 #define INPUT_GENERIC_JOY_HIGH_NIBBLE(PL, STATE, WAY, B10, B20, B40, B80) \
239 	PORT_BIT( 0x10, STATE, IPT_JOYSTICK_##B10 ) WAY PORT_PLAYER(PL) \
240 	PORT_BIT( 0x20, STATE, IPT_JOYSTICK_##B20 ) WAY PORT_PLAYER(PL) \
241 	PORT_BIT( 0x40, STATE, IPT_JOYSTICK_##B40 ) WAY PORT_PLAYER(PL) \
242 	PORT_BIT( 0x80, STATE, IPT_JOYSTICK_##B80 ) WAY PORT_PLAYER(PL)
243 
244 
245 /* Taito generic (more might be needed) */
246 #define TAITO_GENERIC_JOY_MONO_UDLR(PL) \
247 	INPUT_GENERIC_JOY_LOW_NIBBLE(PL, IP_ACTIVE_LOW, PORT_8WAY, UP, DOWN, LEFT, RIGHT)
248 
249 #define TAITO_GENERIC_JOY_MONO_UDRL(PL) \
250 	INPUT_GENERIC_JOY_LOW_NIBBLE(PL, IP_ACTIVE_LOW, PORT_8WAY, UP, DOWN, RIGHT, LEFT)
251 
252 #define TAITO_GENERIC_JOY_MONO_LRUD(PL) \
253 	INPUT_GENERIC_JOY_LOW_NIBBLE(PL, IP_ACTIVE_LOW, PORT_8WAY, LEFT, RIGHT, UP, DOWN)
254 
255 #define TAITO_GENERIC_JOY_DUAL_UDLR(PL_L, PL_H) \
256 	INPUT_GENERIC_JOY_LOW_NIBBLE(PL_L, IP_ACTIVE_LOW, PORT_8WAY, UP, DOWN, LEFT, RIGHT) \
257 	INPUT_GENERIC_JOY_HIGH_NIBBLE(PL_H, IP_ACTIVE_LOW, PORT_8WAY, UP, DOWN, LEFT, RIGHT)
258 
259 #define TAITO_GENERIC_JOY_DUAL_UDRL(PL_L, PL_H) \
260 	INPUT_GENERIC_JOY_LOW_NIBBLE(PL_L, IP_ACTIVE_LOW, PORT_8WAY, UP, DOWN, RIGHT, LEFT) \
261 	INPUT_GENERIC_JOY_HIGH_NIBBLE(PL_H, IP_ACTIVE_LOW, PORT_8WAY, UP, DOWN, RIGHT, LEFT)
262 
263 
264 #define TAITO_GENERIC_BUTTONS_LOW_NIBBLE(PL, STATE, BUTTON_A, BUTTON_B, BUTTON_C) \
265 	PORT_BIT( 0x01, STATE, IPT_##BUTTON_A ) PORT_PLAYER(PL) \
266 	PORT_BIT( 0x02, STATE, IPT_##BUTTON_B ) PORT_PLAYER(PL) \
267 	PORT_BIT( 0x04, STATE, IPT_##BUTTON_C ) PORT_PLAYER(PL)
268 	/* DO NOT fill bit 3 as it may be defined as START button ! */
269 
270 #define TAITO_GENERIC_BUTTONS_HIGH_NIBBLE(PL, STATE, BUTTON_A, BUTTON_B, BUTTON_C) \
271 	PORT_BIT( 0x10, STATE, IPT_##BUTTON_A ) PORT_PLAYER(PL) \
272 	PORT_BIT( 0x20, STATE, IPT_##BUTTON_B ) PORT_PLAYER(PL) \
273 	PORT_BIT( 0x40, STATE, IPT_##BUTTON_C ) PORT_PLAYER(PL)
274 	/* DO NOT fill bit 7 as it may be defined as START button ! */
275 
276 #define TAITO_GENERIC_1_BUTTON(PL) \
277 	TAITO_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_LOW, BUTTON1, UNKNOWN, UNKNOWN) \
278 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
279 
280 #define TAITO_GENERIC_2_BUTTONS(PL) \
281 	TAITO_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_LOW, BUTTON1, BUTTON2, UNKNOWN) \
282 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
283 
284 #define TAITO_GENERIC_3_BUTTONS(PL) \
285 	TAITO_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_LOW, BUTTON1, BUTTON2, BUTTON3) \
286 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
287 
288 #define TAITO_GENERIC_1_BUTTON_START(PL) \
289 	TAITO_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_LOW, BUTTON1, UNKNOWN, UNKNOWN) \
290 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START##PL )
291 
292 #define TAITO_GENERIC_2_BUTTONS_START(PL) \
293 	TAITO_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_LOW, BUTTON1, BUTTON2, UNKNOWN) \
294 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START##PL )
295 
296 #define TAITO_GENERIC_3_BUTTONS_START(PL) \
297 	TAITO_GENERIC_BUTTONS_HIGH_NIBBLE(PL, IP_ACTIVE_LOW, BUTTON1, BUTTON2, BUTTON3) \
298 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START##PL )
299 
300 
301 /* Taito games (more might be needed) */
302 #define TAITO_JOY_UDLR_1_BUTTON(PL) \
303 	TAITO_GENERIC_JOY_MONO_UDLR(PL) \
304 	TAITO_GENERIC_1_BUTTON(PL)
305 
306 #define TAITO_JOY_UDLR_2_BUTTONS(PL) \
307 	TAITO_GENERIC_JOY_MONO_UDLR(PL) \
308 	TAITO_GENERIC_2_BUTTONS(PL)
309 
310 #define TAITO_JOY_UDLR_3_BUTTONS(PL) \
311 	TAITO_GENERIC_JOY_MONO_UDLR(PL) \
312 	TAITO_GENERIC_3_BUTTONS(PL)
313 
314 #define TAITO_JOY_UDRL_1_BUTTON(PL) \
315 	TAITO_GENERIC_JOY_MONO_UDRL(PL) \
316 	TAITO_GENERIC_1_BUTTON(PL)
317 
318 #define TAITO_JOY_UDRL_2_BUTTONS(PL) \
319 	TAITO_GENERIC_JOY_MONO_UDRL(PL) \
320 	TAITO_GENERIC_2_BUTTONS(PL)
321 
322 #define TAITO_JOY_UDRL_3_BUTTONS(PL) \
323 	TAITO_GENERIC_JOY_MONO_UDRL(PL) \
324 	TAITO_GENERIC_3_BUTTONS(PL)
325 
326 #define TAITO_JOY_LRUD_1_BUTTON(PL) \
327 	TAITO_GENERIC_JOY_MONO_LRUD(PL) \
328 	TAITO_GENERIC_1_BUTTON(PL)
329 
330 #define TAITO_JOY_LRUD_2_BUTTONS(PL) \
331 	TAITO_GENERIC_JOY_MONO_LRUD(PL) \
332 	TAITO_GENERIC_2_BUTTONS(PL)
333 
334 #define TAITO_JOY_LRUD_3_BUTTONS(PL) \
335 	TAITO_GENERIC_JOY_MONO_LRUD(PL) \
336 	TAITO_GENERIC_3_BUTTONS(PL)
337 
338 
339 #define TAITO_JOY_UDLR_1_BUTTON_START(PL) \
340 	TAITO_GENERIC_JOY_MONO_UDLR(PL) \
341 	TAITO_GENERIC_1_BUTTON_START(PL)
342 
343 #define TAITO_JOY_UDLR_2_BUTTONS_START(PL) \
344 	TAITO_GENERIC_JOY_MONO_UDLR(PL) \
345 	TAITO_GENERIC_2_BUTTONS_START(PL)
346 
347 #define TAITO_JOY_UDLR_3_BUTTONS_START(PL) \
348 	TAITO_GENERIC_JOY_MONO_UDLR(PL) \
349 	TAITO_GENERIC_3_BUTTONS_START(PL)
350 
351 #define TAITO_JOY_UDRL_1_BUTTON_START(PL) \
352 	TAITO_GENERIC_JOY_MONO_UDRL(PL) \
353 	TAITO_GENERIC_1_BUTTONS_START(PL)
354 
355 #define TAITO_JOY_UDRL_2_BUTTONS_START(PL) \
356 	TAITO_GENERIC_JOY_MONO_UDRL(PL) \
357 	TAITO_GENERIC_2_BUTTONS_START(PL)
358 
359 #define TAITO_JOY_UDRL_3_BUTTONS_START(PL) \
360 	TAITO_GENERIC_JOY_MONO_UDRL(PL) \
361 	TAITO_GENERIC_3_BUTTONS_START(PL)
362 
363 #define TAITO_JOY_LRUD_1_BUTTON_START(PL) \
364 	TAITO_GENERIC_JOY_MONO_LRUD(PL) \
365 	TAITO_GENERIC_1_BUTTON_START(PL)
366 
367 #define TAITO_JOY_LRUD_2_BUTTONS_START(PL) \
368 	TAITO_GENERIC_JOY_MONO_LRUD(PL) \
369 	TAITO_GENERIC_2_BUTTONS_START(PL)
370 
371 #define TAITO_JOY_LRUD_3_BUTTONS_START(PL) \
372 	TAITO_GENERIC_JOY_MONO_LRUD(PL) \
373 	TAITO_GENERIC_3_BUTTONS_START(PL)
374 
375 
376 #define TAITO_JOY_DUAL_UDLR(PL_L, PL_H) \
377 	TAITO_GENERIC_JOY_DUAL_UDLR(PL_L, PL_H)
378 
379 #define TAITO_JOY_DUAL_UDRL(PL_L, PL_H) \
380 	TAITO_GENERIC_JOY_DUAL_UDRL(PL_L, PL_H)
381