1 // license:BSD-3-Clause
2 // copyright-holders:Aaron Giles
3 /*******************************************************************************
4 
5     Input port macros used by many games in multiple Sega drivers
6 
7 *******************************************************************************/
8 
9 
10 /**************************** Coinage Dip Switches ****************************/
11 
12 // [standard]
13 //                  |  COIN SWITCH 1  |  COIN SWITCH 2
14 // -----------------+-----------------+-----------------
15 //                  |   1   2   3   4 |   5   6   7   8
16 // -----------------+-----------------+-----------------
17 //  1COIN  1CREDIT  | OFF OFF OFF OFF | OFF OFF OFF OFF
18 //  1COIN  2CREDITS |  ON OFF OFF OFF |  ON OFF OFF OFF
19 //  1COIN  3CREDITS | OFF  ON OFF OFF | OFF  ON OFF OFF
20 //  1COIN  4CREDITS |  ON  ON OFF OFF |  ON  ON OFF OFF
21 //  1COIN  5CREDITS | OFF OFF  ON OFF | OFF OFF  ON OFF
22 //  1COIN  6CREDITS |  ON OFF  ON OFF |  ON OFF  ON OFF
23 //  2COINS 1CREDIT  | OFF  ON  ON OFF | OFF  ON  ON OFF
24 //  3COINS 1CREDIT  |  ON  ON  ON OFF |  ON  ON  ON OFF
25 //  4COINS 1CREDIT  | OFF OFF OFF  ON | OFF OFF OFF  ON
26 //  2COINS 3CREDITS |  ON OFF OFF  ON |  ON OFF OFF  ON
27 // -----------------+-----------------+-----------------
28 //  2COINS 1CREDIT  | OFF  ON OFF  ON | OFF  ON OFF  ON
29 //  4COINS 2CREDITS |                 |
30 //  5COINS 3CREDITS |                 |
31 //  6COINS 4CREDITS |                 |
32 // -----------------+-----------------+-----------------
33 //  2COINS 1CREDIT  |  ON  ON OFF  ON |  ON  ON OFF  ON
34 //  4COINS 3CREDITS |                 |
35 // -----------------+-----------------+-----------------
36 //  1COIN  1CREDIT  | OFF OFF  ON  ON | OFF OFF  ON  ON
37 //  2COINS 2CREDITS |                 |
38 //  3COINS 3CREDITS |                 |
39 //  4COINS 4CREDITS |                 |
40 //  5COINS 6CREDITS |                 |
41 // -----------------+-----------------+-----------------
42 //  1COIN  1CREDIT  |  ON OFF  ON  ON |  ON OFF  ON  ON
43 //  2COINS 2CREDITS |                 |
44 //  3COINS 3CREDITS |                 |
45 //  4COINS 5CREDITS |                 |
46 // -----------------+-----------------+-----------------
47 //  1COIN  1CREDIT  | OFF  ON  ON  ON | OFF  ON  ON  ON
48 //  2COINS 3CREDITS |                 |
49 // -----------------+-----------------+-----------------
50 //  FREE PLAY       |  ON  ON  ON  ON &  ON  ON  ON  ON
51 // -----------------+-----------------+-----------------
52 //  COIN SWITCH 1   |  ON  ON  ON  ON |  (anywhere OFF)
53 //  1COIN  1CREDIT  |                 |
54 // -----------------+-----------------+-----------------
55 //  COIN SWITCH 2   |  (anywhere OFF) |  ON  ON  ON  ON
56 //  1COIN  1CREDIT  |                 |
57 
58 // [exception 1] not have free play
59 // A few games don't have "FREE PLAY"
60 //    example "Hang-On Jr."
61 // -----------------+-----------------+-----------------
62 //  1COIN  1CREDIT  |  ON  ON  ON  ON |  ON  ON  ON  ON
63 
64 // [exception 2] easy to free play
65 // A few games accept "FREE PLAY" with one-side 4bits ON
66 //    example "Riddle of Pythagoras"
67 // -----------------+-----------------+-----------------
68 //  FREE PLAY       |  ON  ON  ON  ON |  ON  ON  ON  ON
69 //                  |  ON  ON  ON  ON |  (anywhere OFF)
70 //                  |  (anywhere OFF) |  ON  ON  ON  ON
71 
72 #define SEGA_COINAGE_A_PART_H \
73 	PORT_DIPSETTING(    0x07, DEF_STR( 4C_1C ) ) \
74 	PORT_DIPSETTING(    0x08, DEF_STR( 3C_1C ) ) \
75 	PORT_DIPSETTING(    0x09, DEF_STR( 2C_1C ) ) \
76 	PORT_DIPSETTING(    0x05, "2 Coins/1 Credit, 5/3, 6/4" ) \
77 	PORT_DIPSETTING(    0x04, "2 Coins/1 Credit, 4/3" ) \
78 	PORT_DIPSETTING(    0x0f, DEF_STR( 1C_1C ) )
79 
80 #define SEGA_COINAGE_A_PART_L \
81 	PORT_DIPSETTING(    0x03, "1 Coin/1 Credit, 5/6" ) \
82 	PORT_DIPSETTING(    0x02, "1 Coin/1 Credit, 4/5" ) \
83 	PORT_DIPSETTING(    0x01, "1 Coin/1 Credit, 2/3" ) \
84 	PORT_DIPSETTING(    0x06, DEF_STR( 2C_3C ) ) \
85 	PORT_DIPSETTING(    0x0e, DEF_STR( 1C_2C ) ) \
86 	PORT_DIPSETTING(    0x0d, DEF_STR( 1C_3C ) ) \
87 	PORT_DIPSETTING(    0x0c, DEF_STR( 1C_4C ) ) \
88 	PORT_DIPSETTING(    0x0b, DEF_STR( 1C_5C ) ) \
89 	PORT_DIPSETTING(    0x0a, DEF_STR( 1C_6C ) )
90 
91 #define SEGA_COINAGE_B_PART_H \
92 	PORT_DIPSETTING(    0x70, DEF_STR( 4C_1C ) ) \
93 	PORT_DIPSETTING(    0x80, DEF_STR( 3C_1C ) ) \
94 	PORT_DIPSETTING(    0x90, DEF_STR( 2C_1C ) ) \
95 	PORT_DIPSETTING(    0x50, "2 Coins/1 Credit, 5/3, 6/4" ) \
96 	PORT_DIPSETTING(    0x40, "2 Coins/1 Credit, 4/3" ) \
97 	PORT_DIPSETTING(    0xf0, DEF_STR( 1C_1C ) )
98 #define SEGA_COINAGE_B_PART_L \
99 	PORT_DIPSETTING(    0x30, "1 Coin/1 Credit, 5/6" ) \
100 	PORT_DIPSETTING(    0x20, "1 Coin/1 Credit, 4/5" ) \
101 	PORT_DIPSETTING(    0x10, "1 Coin/1 Credit, 2/3" ) \
102 	PORT_DIPSETTING(    0x60, DEF_STR( 2C_3C ) ) \
103 	PORT_DIPSETTING(    0xe0, DEF_STR( 1C_2C ) ) \
104 	PORT_DIPSETTING(    0xd0, DEF_STR( 1C_3C ) ) \
105 	PORT_DIPSETTING(    0xc0, DEF_STR( 1C_4C ) ) \
106 	PORT_DIPSETTING(    0xb0, DEF_STR( 1C_5C ) ) \
107 	PORT_DIPSETTING(    0xa0, DEF_STR( 1C_6C ) )
108 
109 // [standard]
110 #define SEGA_COINAGE_LOC(DIPBANK) \
111 	PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION(#DIPBANK":1,2,3,4") \
112 	SEGA_COINAGE_A_PART_H \
113 	SEGA_COINAGE_A_PART_L \
114 	PORT_DIPSETTING(    0x00, "Free Play (if Coin B too) or 1/1" ) \
115 	PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION(#DIPBANK":5,6,7,8") \
116 	SEGA_COINAGE_B_PART_H \
117 	SEGA_COINAGE_B_PART_L \
118 	PORT_DIPSETTING(    0x00, "Free Play (if Coin A too) or 1/1" )
119 
120 // [exception 1] not have free play (allow duplicated settings, show 0x00)
121 #define SEGA_COINAGE_NO_FREE_LOC(DIPBANK) \
122 	PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION(#DIPBANK":1,2,3,4") \
123 	SEGA_COINAGE_A_PART_H \
124 	PORT_DIPSETTING(    0x00, " 1 Coin/1 Credit" ) \
125 	SEGA_COINAGE_A_PART_L \
126 	PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION(#DIPBANK":5,6,7,8") \
127 	SEGA_COINAGE_B_PART_H \
128 	PORT_DIPSETTING(    0x00, " 1 Coin/1 Credit" ) \
129 	SEGA_COINAGE_B_PART_L
130 
131 // [exception 1.1] not have free play (forbid duplicated settings, hide 0x00)
132 #define SEGA_COINAGE_NO_FREE_NO_DUP_LOC(DIPBANK) \
133 	PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION(#DIPBANK":1,2,3,4") \
134 	SEGA_COINAGE_A_PART_H \
135 	SEGA_COINAGE_A_PART_L \
136 	PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION(#DIPBANK":5,6,7,8") \
137 	SEGA_COINAGE_B_PART_H \
138 	SEGA_COINAGE_B_PART_L
139 
140 // [exception 2] easy to free play
141 #define SEGA_COINAGE_EASY_FREE_LOC(DIPBANK) \
142 	PORT_DIPNAME( 0x0f, 0x0f, DEF_STR( Coin_A ) ) PORT_DIPLOCATION(#DIPBANK":1,2,3,4") \
143 	SEGA_COINAGE_A_PART_H \
144 	SEGA_COINAGE_A_PART_L \
145 	PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) ) \
146 	PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_B ) ) PORT_DIPLOCATION(#DIPBANK":5,6,7,8") \
147 	SEGA_COINAGE_B_PART_H \
148 	SEGA_COINAGE_B_PART_L \
149 	PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
150