Previous 199869 Revisions Next

r23710 Friday 14th June, 2013 at 16:11:34 UTC by Fabio Priuli
(MESS) NES input cleanup, part 3 (Moved some FC controllers to the Expansion port, since
they were attached there. This temporarily breaks Lightgun and Multitap in Famicom, but in
reality they were never working in Japanese-exclusive games, only in worldwide games who
supported NES protocol, so just use the NES driver to have previous functionality until I add
support for the FC protocol. Standard pads, keyboards and mj panel work as before). nw.
[src/mess/drivers]nes.c
[src/mess/includes]nes.h
[src/mess/machine]nes.c

trunk/src/mess/drivers/nes.c
r23709r23710
4949   AM_RANGE(0x4000, 0x4013) AM_DEVREADWRITE_LEGACY("nessound", nes_psg_r, nes_psg_w)       /* PSG primary registers */
5050   AM_RANGE(0x4014, 0x4014) AM_WRITE(nes_vh_sprite_dma_w)              /* stupid address space hole */
5151   AM_RANGE(0x4015, 0x4015) AM_READWRITE(psg_4015_r, psg_4015_w)       /* PSG status / first control register */
52   AM_RANGE(0x4016, 0x4016) AM_READWRITE(nes_IN0_r, nes_IN0_w)         /* IN0 - input port 1 */
53   AM_RANGE(0x4017, 0x4017) AM_READ(nes_IN1_r)                         /* IN1 - input port 2 */
52   AM_RANGE(0x4016, 0x4016) AM_READWRITE(nes_in0_r, nes_in0_w)         /* IN0 - input port 1 */
53   AM_RANGE(0x4017, 0x4017) AM_READ(nes_in1_r)                         /* IN1 - input port 2 */
5454   AM_RANGE(0x4017, 0x4017) AM_WRITE(psg_4017_w)       /* PSG second control register */
5555   // 0x4100-0x5fff -> LOW HANDLER defined on a pcb base
5656   // 0x6000-0x7fff -> MID HANDLER defined on a pcb base
r23709r23710
127127   PORT_BIT( 0xff, 0x7f, IPT_PADDLE) PORT_SENSITIVITY(25) PORT_KEYDELTA(3) PORT_MINMAX(0x62,0xf2) PORT_PLAYER(2) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0040)
128128INPUT_PORTS_END
129129
130static INPUT_PORTS_START( nes_cclimb )
130static INPUT_PORTS_START( nes )
131   PORT_INCLUDE( nes_pads12 )
132   PORT_INCLUDE( nes_pads34 )
133   PORT_INCLUDE( nes_zapper1 )
134   PORT_INCLUDE( nes_zapper2 )
135   PORT_INCLUDE( nes_paddle )
136
137   PORT_START("CTRLSEL")  /* Select Controller Type */
138   PORT_CONFNAME( 0x000f, 0x0001, "P1 Controller")
139   PORT_CONFSETTING(  0x0000, "Unconnected" )
140   PORT_CONFSETTING(  0x0001, "Gamepad" )
141   PORT_CONFSETTING(  0x0002, "Zapper" )
142   PORT_CONFNAME( 0x00f0, 0x0010, "P2 Controller")
143   PORT_CONFSETTING(  0x0000, "Unconnected" )
144   PORT_CONFSETTING(  0x0010, "Gamepad" )
145   PORT_CONFSETTING(  0x0020, "Zapper" )
146   PORT_CONFSETTING(  0x0040, "Arkanoid paddle" )
147//  PORT_CONFSETTING(  0x0050, "Family Trainer" )
148   PORT_CONFNAME( 0x0f00, 0x0000, "P3 Controller")
149   PORT_CONFSETTING(  0x0000, "Unconnected" )
150   PORT_CONFSETTING(  0x0100, "Gamepad" )
151   PORT_CONFNAME( 0xf000, 0x0000, "P4 Controller")
152   PORT_CONFSETTING(  0x0000, "Unconnected" )
153   PORT_CONFSETTING(  0x1000, "Gamepad" )
154
155   PORT_START("CONFIG")  /* configuration */
156   PORT_CONFNAME( 0x01, 0x00, "Draw Top/Bottom 8 Lines")
157   PORT_CONFSETTING(    0x01, DEF_STR(No) )
158   PORT_CONFSETTING(    0x00, DEF_STR(Yes) )
159   PORT_CONFNAME( 0x02, 0x00, "Enforce 8 Sprites/line")
160   PORT_CONFSETTING(    0x02, DEF_STR(No) )
161   PORT_CONFSETTING(    0x00, DEF_STR(Yes) )
162INPUT_PORTS_END
163
164
165static INPUT_PORTS_START( fc_pads12 )
166   PORT_START("PAD1")  /* Joypad 1 */
167   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P1 A") PORT_PLAYER(1)  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0001)
168   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P1 B") PORT_PLAYER(1)  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0001)
169   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_PLAYER(1)                     PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0001)
170   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START ) PORT_PLAYER(1)                      PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0001)
171   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1)                PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0001)
172   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)              PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0001)
173   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)              PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0001)
174   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)             PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0001)
175
176   PORT_START("PAD2")  /* Joypad 2 */
177   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P2 A") PORT_PLAYER(2)  PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0010)
178   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P2 B") PORT_PLAYER(2)  PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0010)
179   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_PLAYER(2)                     PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0010)
180   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START ) PORT_PLAYER(2)                      PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0010)
181   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2)                PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0010)
182   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)              PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0010)
183   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)              PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0010)
184   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)             PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0010)
185
186INPUT_PORTS_END
187
188static INPUT_PORTS_START( fc_pads34 )
189   PORT_START("PAD3")  /* Joypad 3 */
190   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P3 A") PORT_PLAYER(3)  PORT_CONDITION("CTRLSEL", 0x0f00, EQUALS, 0x0100)
191   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P3 B") PORT_PLAYER(3)  PORT_CONDITION("CTRLSEL", 0x0f00, EQUALS, 0x0100)
192   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_PLAYER(3)                     PORT_CONDITION("CTRLSEL", 0x0f00, EQUALS, 0x0100)
193   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START ) PORT_PLAYER(3)                      PORT_CONDITION("CTRLSEL", 0x0f00, EQUALS, 0x0100)
194   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(3)                PORT_CONDITION("CTRLSEL", 0x0f00, EQUALS, 0x0100)
195   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3)              PORT_CONDITION("CTRLSEL", 0x0f00, EQUALS, 0x0100)
196   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3)              PORT_CONDITION("CTRLSEL", 0x0f00, EQUALS, 0x0100)
197   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3)             PORT_CONDITION("CTRLSEL", 0x0f00, EQUALS, 0x0100)
198
199   PORT_START("PAD4")  /* Joypad 4 */
200   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("P4 A") PORT_PLAYER(4)  PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x1000)
201   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("P4 B") PORT_PLAYER(4)  PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x1000)
202   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_PLAYER(4)                     PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x1000)
203   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START ) PORT_PLAYER(4)                      PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x1000)
204   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(4)                PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x1000)
205   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4)              PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x1000)
206   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4)              PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x1000)
207   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4)             PORT_CONDITION("CTRLSEL", 0xf000, EQUALS, 0x1000)
208INPUT_PORTS_END
209
210static INPUT_PORTS_START( fc_lightgun )
211   PORT_START("ZAPPER2_X")  /* P2 zapper */
212   PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X) PORT_CROSSHAIR(X, 1.0, 0.0, 0) PORT_SENSITIVITY(70) PORT_KEYDELTA(30) PORT_MINMAX(0,255) PORT_PLAYER(2) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x01)
213   PORT_START("ZAPPER2_Y")  /* P2 zapper */
214   PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_SENSITIVITY(50) PORT_KEYDELTA(30) PORT_MINMAX(0,255) PORT_PLAYER(2) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x01)
215   PORT_START("ZAPPER2_T")  /* P2 zapper trigger */
216   PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("Lightgun Trigger") PORT_PLAYER(2) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x01)
217INPUT_PORTS_END
218
219static INPUT_PORTS_START( fc_paddle )
220   PORT_START("PADDLE")  /* Arkanoid paddle */
221   PORT_BIT( 0xff, 0x7f, IPT_PADDLE) PORT_SENSITIVITY(25) PORT_KEYDELTA(3) PORT_MINMAX(0x62,0xf2) PORT_PLAYER(2) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x04)
222INPUT_PORTS_END
223
224static INPUT_PORTS_START( fc_cclimb )
131225   PORT_START("CC_LEFT")
132   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1)             PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0006)
133   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1)             PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0006)
134   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_PLAYER(1)             PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0006)
135   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START ) PORT_PLAYER(1)              PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0006)
136   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_PLAYER(1)    PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0006)
137   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_PLAYER(1)  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0006)
138   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_LEFT ) PORT_PLAYER(1)  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0006)
139   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_RIGHT ) PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0006)
226   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1)             PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0002)
227   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1)             PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0002)
228   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_PLAYER(1)             PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0002)
229   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START ) PORT_PLAYER(1)              PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0002)
230   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_UP ) PORT_PLAYER(1)    PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0002)
231   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_DOWN ) PORT_PLAYER(1)  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0002)
232   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_LEFT ) PORT_PLAYER(1)  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0002)
233   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICKLEFT_RIGHT ) PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0002)
140234
141235   PORT_START("CC_RIGHT")
142   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1)             PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0060)
143   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1)             PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0060)
144   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1)             PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0060)
145   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1)             PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0060)
146   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_PLAYER(1)   PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0060)
147   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0060)
148   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_LEFT ) PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0060)
149   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_RIGHT ) PORT_PLAYER(1)PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0060)
236   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1)             PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0020)
237   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1)             PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0020)
238   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1)             PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0020)
239   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_PLAYER(1)             PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0020)
240   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_UP ) PORT_PLAYER(1)   PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0020)
241   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_DOWN ) PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0020)
242   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_LEFT ) PORT_PLAYER(1) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0020)
243   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICKRIGHT_RIGHT ) PORT_PLAYER(1)PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0020)
150244INPUT_PORTS_END
151245
152246static INPUT_PORTS_START( fc_keyboard )
153247   PORT_START("FCKEY0")
154   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
155   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)           PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
156   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE)    PORT_CHAR('[')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
157   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(']')      PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
158   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Kana")                                PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
159   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RSHIFT)                        PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
160   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2)    PORT_CHAR('\\') PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
161   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Stop") PORT_CODE(KEYCODE_BACKSPACE)   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
248   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
249   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)           PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
250   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE)    PORT_CHAR('[')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
251   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(']')      PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
252   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Kana")                                PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
253   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RSHIFT)                        PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
254   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH2)    PORT_CHAR('\\') PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
255   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Stop") PORT_CODE(KEYCODE_BACKSPACE)   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
162256
163257   PORT_START("FCKEY1")
164   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
165   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
166   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(':')      PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
167   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(';')      PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
168   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CHAR('_')                               PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
169   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CHAR('/')                               PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
170   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')      PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
171   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS)    PORT_CHAR('^')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
258   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
259   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('@')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
260   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(':')      PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
261   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(';')      PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
262   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CHAR('_')                               PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
263   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CHAR('/')                               PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
264   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')      PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
265   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS)    PORT_CHAR('^')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
172266
173267   PORT_START("FCKEY2")
174   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
175   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('O')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
176   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
177   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('K')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
178   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP)  PORT_CHAR('.')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
179   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
180   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('P')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
181   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
268   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
269   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('O')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
270   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
271   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('K')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
272   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP)  PORT_CHAR('.')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
273   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
274   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('P')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
275   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
182276
183277   PORT_START("FCKEY3")
184   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
185   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('I')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
186   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('U')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
187   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('J')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
188   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('M')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
189   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('N')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
190   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
191   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
278   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
279   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('I')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
280   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('U')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
281   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('J')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
282   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('M')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
283   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('N')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
284   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
285   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
192286
193287   PORT_START("FCKEY4")
194   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
195   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
196   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
197   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('H')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
198   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
199   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
200   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
201   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
288   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
289   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
290   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
291   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('H')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
292   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
293   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
294   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
295   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
202296
203297   PORT_START("FCKEY5")
204   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
205   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('T')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
206   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
207   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
208   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
209   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
210   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
211   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
298   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
299   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('T')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
300   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
301   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
302   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
303   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
304   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
305   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
212306
213307   PORT_START("FCKEY6")
214   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
215   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('W')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
216   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
217   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
218   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
219   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
220   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
221   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
308   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
309   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('W')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
310   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
311   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
312   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
313   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
314   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
315   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
222316
223317   PORT_START("FCKEY7")
224   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))           PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
225   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(ESC))         PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
226   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')                          PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
227   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL)      PORT_CHAR(UCHAR_SHIFT_2)    PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
228   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT)        PORT_CHAR(UCHAR_SHIFT_1)    PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
229   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Grph") PORT_CODE(KEYCODE_LALT)        PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
230   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1')              PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
231   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2')              PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
318   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))           PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
319   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TAB) PORT_CHAR(UCHAR_MAMEKEY(ESC))         PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
320   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')                          PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
321   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL)      PORT_CHAR(UCHAR_SHIFT_2)    PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
322   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT)        PORT_CHAR(UCHAR_SHIFT_1)    PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
323   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Grph") PORT_CODE(KEYCODE_LALT)        PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
324   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1')              PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
325   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2')              PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
232326
233327   PORT_START("FCKEY8")
234   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Clr")                                 PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
235   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP)    PORT_CHAR(UCHAR_MAMEKEY(UP))        PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
236   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))     PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
237   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))       PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
238   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))       PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
239   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE)     PORT_CHAR(' ')      PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
240   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Del") PORT_CODE(KEYCODE_DEL)          PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
241   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ins") PORT_CODE(KEYCODE_INSERT)       PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0008)
328   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Clr")                                 PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
329   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP)    PORT_CHAR(UCHAR_MAMEKEY(UP))        PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
330   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))     PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
331   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))       PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
332   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))       PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
333   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE)     PORT_CHAR(' ')      PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
334   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Del") PORT_CODE(KEYCODE_DEL)          PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
335   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Ins") PORT_CODE(KEYCODE_INSERT)       PORT_CONDITION("EXP", 0x0f, EQUALS, 0x02)
242336
243337INPUT_PORTS_END
244338
245339static INPUT_PORTS_START( subor_keyboard )
246340   PORT_START("SUBKEY0")
247   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
248   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
249   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
250   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
251   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
252   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
253   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
254   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
341   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CHAR('4')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
342   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
343   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
344   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
345   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F2) PORT_CHAR(UCHAR_MAMEKEY(F2))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
346   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
347   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CHAR('5')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
348   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
255349
256350   PORT_START("SUBKEY1")
257   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
258   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
259   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
260   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END)) PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
261   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))       PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
262   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('W')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
263   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
264   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
351   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CHAR('2')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
352   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
353   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
354   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END)) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
355   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))       PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
356   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('W')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
357   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CHAR('3')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
358   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
265359
266360   PORT_START("SUBKEY2")
267   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
268   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)                PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
269   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("NEXT")                                            PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
270   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
271   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))       PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
272   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PRIOR")                                       PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
273   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
274   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
361   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
362   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)                PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
363   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("NEXT")                                            PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
364   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT)) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
365   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F8) PORT_CHAR(UCHAR_MAMEKEY(F8))       PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
366   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PRIOR")                                       PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
367   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DEL) PORT_CHAR(UCHAR_MAMEKEY(DEL)) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
368   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
275369
276370   PORT_START("SUBKEY3")
277   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
278   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('I')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
279   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
280   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',')          PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
281   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
282   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('O')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
283   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
284   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP)  PORT_CHAR('.')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
371   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CHAR('9')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
372   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('I')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
373   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
374   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',')          PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
375   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F5) PORT_CHAR(UCHAR_MAMEKEY(F5))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
376   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('O')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
377   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CHAR('0')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
378   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP)  PORT_CHAR('.')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
285379
286380   PORT_START("SUBKEY4")
287   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE)    PORT_CHAR(']')          PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
288   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)               PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
289   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))       PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
290   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
291   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))       PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
292   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[')          PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
293   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\')         PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
294   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
381   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE)    PORT_CHAR(']')          PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
382   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ENTER) PORT_CHAR(13)               PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
383   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))       PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
384   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
385   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F7) PORT_CHAR(UCHAR_MAMEKEY(F7))       PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
386   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[')          PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
387   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\')         PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
388   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
295389
296390   PORT_START("SUBKEY5")
297   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
298   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
299   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
300   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TAB)   PORT_CHAR('\t') PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
301   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))         PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
302   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
303   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
304   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL)      PORT_CHAR(UCHAR_SHIFT_2)        PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
391   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
392   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
393   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
394   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TAB)   PORT_CHAR('\t') PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
395   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC))         PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
396   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
397   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CHAR('1')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
398   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LCONTROL)      PORT_CHAR(UCHAR_SHIFT_2)        PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
305399
306400   PORT_START("SUBKEY6")
307   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
308   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
309   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('K')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
310   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('M')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
311   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
312   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('U')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
313   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
314   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('J')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
401   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CHAR('7')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
402   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
403   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('K')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
404   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('M')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
405   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F4) PORT_CHAR(UCHAR_MAMEKEY(F4))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
406   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('U')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
407   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CHAR('8')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
408   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('J')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
315409
316410   PORT_START("SUBKEY7")
317   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
318   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(':')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
319   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
320   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
321   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
322   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P)     PORT_CHAR('P')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
323   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS)    PORT_CHAR('=')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
324   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT)    PORT_CHAR(UCHAR_SHIFT_1)    PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
411   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
412   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COLON) PORT_CHAR(':')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
413   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR('\'') PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
414   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
415   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F6) PORT_CHAR(UCHAR_MAMEKEY(F6))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
416   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P)     PORT_CHAR('P')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
417   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS)    PORT_CHAR('=')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
418   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_LSHIFT)    PORT_CHAR(UCHAR_SHIFT_1)    PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
325419
326420   PORT_START("SUBKEY8")
327   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('T')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
328   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('H')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
329   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('N')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
330   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
331   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
332   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
333   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
334   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B')  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
421   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('T')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
422   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('H')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
423   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('N')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
424   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
425   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
426   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
427   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CHAR('6')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
428   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B')  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
335429
336430   PORT_START("SUBKEY9")
337   PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
431   PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
338432
339433   PORT_START("SUBKEY10")
340   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("LMENU")   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
341   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
342   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
343   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F11)       PORT_CHAR(UCHAR_MAMEKEY(F11))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
344   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F12)       PORT_CHAR(UCHAR_MAMEKEY(F12))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
345   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
346   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
347   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
434   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("LMENU")   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
435   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD)) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
436   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD)) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
437   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F11)       PORT_CHAR(UCHAR_MAMEKEY(F11))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
438   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F12)       PORT_CHAR(UCHAR_MAMEKEY(F12))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
439   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR(UCHAR_MAMEKEY(1_PAD)) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
440   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR(UCHAR_MAMEKEY(2_PAD)) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
441   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD)) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
348442
349443   PORT_START("SUBKEY11")
350   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD)PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
351   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD)  PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
352   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK)  PORT_CHAR(UCHAR_MAMEKEY(ASTERISK))  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
353   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))     PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
354   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10))         PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
355   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))     PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
356   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD)PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD))  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
357   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_NUMLOCK)   PORT_CHAR(UCHAR_MAMEKEY(NUMLOCK))   PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
444   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS_PAD)PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD))  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
445   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_PLUS_PAD)  PORT_CHAR(UCHAR_MAMEKEY(PLUS_PAD))  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
446   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_ASTERISK)  PORT_CHAR(UCHAR_MAMEKEY(ASTERISK))  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
447   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR(UCHAR_MAMEKEY(9_PAD))     PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
448   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F10) PORT_CHAR(UCHAR_MAMEKEY(F10))         PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
449   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR(UCHAR_MAMEKEY(5_PAD))     PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
450   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH_PAD)PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD))  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
451   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_NUMLOCK)   PORT_CHAR(UCHAR_MAMEKEY(NUMLOCK))   PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
358452
359453   PORT_START("SUBKEY12")
360   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`')                  PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
361   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
362   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PAUSE")                                           PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
363   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SPACE2")                                          PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
364   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9))           PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
365   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
366   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad .") PORT_CODE(KEYCODE_DEL_PAD)         PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
367   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) PORT_CONDITION("CTRLSEL", 0x000f, EQUALS, 0x0009)
454   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('`')                  PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
455   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR(UCHAR_MAMEKEY(6_PAD)) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
456   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("PAUSE")                                           PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
457   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("SPACE2")                                          PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
458   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F9) PORT_CHAR(UCHAR_MAMEKEY(F9))           PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
459   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR(UCHAR_MAMEKEY(3_PAD)) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
460   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Keypad .") PORT_CODE(KEYCODE_DEL_PAD)         PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
461   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD)) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x03)
368462
369463INPUT_PORTS_END
370464
371465static INPUT_PORTS_START( mahjong_panel )
372466   PORT_START("MAH0")
373   PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED )
467   PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
374468
375469   PORT_START("MAH1")
376   PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED )
377   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_N ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
378   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_M ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
379   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_L ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
380   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_MAHJONG_K ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
381   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_MAHJONG_J ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
382   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_MAHJONG_I ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
470   PORT_BIT( 0x03, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
471   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_N ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
472   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_M ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
473   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_L ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
474   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_MAHJONG_K ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
475   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_MAHJONG_J ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
476   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_MAHJONG_I ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
383477
384478   PORT_START("MAH2")
385   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_H ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
386   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_G ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
387   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_F ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
388   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_E ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
389   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_D ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
390   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_MAHJONG_C ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
391   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_MAHJONG_B ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
392   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_MAHJONG_A ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
479   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_MAHJONG_H ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
480   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_G ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
481   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_F ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
482   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_E ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
483   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_D ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
484   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_MAHJONG_C ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
485   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_MAHJONG_B ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
486   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_MAHJONG_A ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
393487
394488   PORT_START("MAH3")
395   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED )
396   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_RON ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
397   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_REACH ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
398   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_CHI ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
399   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_PON ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
400   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_MAHJONG_KAN ) PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
401   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_NAME("P1 Mahjong Select") PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
402   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START ) PORT_NAME("P1 Mahjong Start") PORT_CONDITION("CTRLSEL", 0x00f0, EQUALS, 0x0070)
489   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
490   PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_RON ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
491   PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_REACH ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
492   PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_CHI ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
493   PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_PON ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
494   PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_MAHJONG_KAN ) PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
495   PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SELECT ) PORT_NAME("P1 Mahjong Select") PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
496   PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_START ) PORT_NAME("P1 Mahjong Start") PORT_CONDITION("EXP", 0x0f, EQUALS, 0x06)
403497INPUT_PORTS_END
404498
405static INPUT_PORTS_START( nes )
406   PORT_INCLUDE( nes_pads12 )
407   PORT_INCLUDE( nes_pads34 )
408   PORT_INCLUDE( nes_zapper1 )
409   PORT_INCLUDE( nes_zapper2 )
410   PORT_INCLUDE( nes_paddle )
411
412   PORT_START("CTRLSEL")  /* Select Controller Type */
413   PORT_CONFNAME( 0x000f, 0x0001, "P1 Controller")
414   PORT_CONFSETTING(  0x0000, "Unconnected" )
415   PORT_CONFSETTING(  0x0001, "Gamepad" )
416   PORT_CONFSETTING(  0x0002, "Zapper" )
417   PORT_CONFNAME( 0x00f0, 0x0010, "P2 Controller")
418   PORT_CONFSETTING(  0x0000, "Unconnected" )
419   PORT_CONFSETTING(  0x0010, "Gamepad" )
420   PORT_CONFSETTING(  0x0020, "Zapper" )
421   PORT_CONFSETTING(  0x0040, "Arkanoid paddle" )
422//  PORT_CONFSETTING(  0x0050, "Family Trainer" )
423   PORT_CONFNAME( 0x0f00, 0x0000, "P3 Controller")
424   PORT_CONFSETTING(  0x0000, "Unconnected" )
425   PORT_CONFSETTING(  0x0100, "Gamepad" )
426   PORT_CONFNAME( 0xf000, 0x0000, "P4 Controller")
427   PORT_CONFSETTING(  0x0000, "Unconnected" )
428   PORT_CONFSETTING(  0x1000, "Gamepad" )
429
430   PORT_START("CONFIG")  /* configuration */
431   PORT_CONFNAME( 0x01, 0x00, "Draw Top/Bottom 8 Lines")
432   PORT_CONFSETTING(    0x01, DEF_STR(No) )
433   PORT_CONFSETTING(    0x00, DEF_STR(Yes) )
434   PORT_CONFNAME( 0x02, 0x00, "Enforce 8 Sprites/line")
435   PORT_CONFSETTING(    0x02, DEF_STR(No) )
436   PORT_CONFSETTING(    0x00, DEF_STR(Yes) )
437INPUT_PORTS_END
438
439499static INPUT_PORTS_START( famicom )
440   PORT_INCLUDE( nes_pads12 )
441   PORT_INCLUDE( nes_pads34 )
442   PORT_INCLUDE( nes_zapper2 )
443   PORT_INCLUDE( nes_paddle )
500   PORT_INCLUDE( fc_pads12 )
501   PORT_INCLUDE( fc_pads34 )
502   PORT_INCLUDE( fc_lightgun )
503   PORT_INCLUDE( fc_paddle )
444504   // Crazy Climber is not really a separate controller, but a couple of small sticks to be
445505   // put on top of d-pads of the regular controllers. Users should then control the game
446506   // by using both controllers, turned 90 degrees, as a couple of dual sticks as in the arcade
447   PORT_INCLUDE( nes_cclimb )
507   PORT_INCLUDE( fc_cclimb )
448508   PORT_INCLUDE( fc_keyboard )
449509   PORT_INCLUDE( subor_keyboard )
450510   PORT_INCLUDE( mahjong_panel )
r23709r23710
453513   PORT_CONFNAME( 0x000f, 0x0001, "P1 Controller")
454514   PORT_CONFSETTING(  0x0000, "Unconnected" )
455515   PORT_CONFSETTING(  0x0001, "Gamepad" )
456   PORT_CONFSETTING(  0x0006, "Crazy Climber pad (Left)" )
457   PORT_CONFSETTING(  0x0008, "FC Keyboard" )
458   PORT_CONFSETTING(  0x0009, "Subor Keyboard" )
516   PORT_CONFSETTING(  0x0002, "Crazy Climber pad (Left)" )
459517   PORT_CONFNAME( 0x00f0, 0x0010, "P2 Controller")
460518   PORT_CONFSETTING(  0x0000, "Unconnected" )
461519   PORT_CONFSETTING(  0x0010, "Gamepad" )
462   PORT_CONFSETTING(  0x0020, "Light Gun" )
463   PORT_CONFSETTING(  0x0040, "Arkanoid paddle" )
464//  PORT_CONFSETTING(  0x0050, "Family Trainer" )
465   PORT_CONFSETTING(  0x0060, "Crazy Climber pad (Right)" )
466   PORT_CONFSETTING(  0x0070, "Mahjong Panel" )
467   PORT_CONFNAME( 0x0f00, 0x0000, "P3 Controller")
520   PORT_CONFSETTING(  0x0020, "Crazy Climber pad (Right)" )
521   PORT_CONFNAME( 0x0f00, 0x0000, "P3 Controller") PORT_CONDITION("EXP", 0x0f, EQUALS, 0x07)
468522   PORT_CONFSETTING(  0x0000, "Unconnected" )
469523   PORT_CONFSETTING(  0x0100, "Gamepad" )
470   PORT_CONFNAME( 0xf000, 0x0000, "P4 Controller")
524   PORT_CONFNAME( 0xf000, 0x0000, "P4 Controller") PORT_CONDITION("EXP", 0x0f, EQUALS, 0x07)
471525   PORT_CONFSETTING(  0x0000, "Unconnected" )
472526   PORT_CONFSETTING(  0x1000, "Gamepad" )
473527
528   PORT_START("EXP")  /* expansion port */
529   PORT_CONFNAME( 0x0f, 0x00, "Expansion Port")
530   PORT_CONFSETTING(  0x00, "(Empty)" )
531   PORT_CONFSETTING(  0x01, "Light Gun" )
532   PORT_CONFSETTING(  0x02, "FC Keyboard" )
533   PORT_CONFSETTING(  0x03, "Subor Keyboard" )
534   PORT_CONFSETTING(  0x04, "Arkanoid paddle" )
535//  PORT_CONFSETTING(  0x05, "Family Trainer" )
536   PORT_CONFSETTING(  0x06, "Mahjong Panel" )
537   PORT_CONFSETTING(  0x07, "Hori Twin Adapter" )
538
474539   PORT_START("CONFIG")  /* configuration */
475540   PORT_CONFNAME( 0x01, 0x00, "Draw Top/Bottom 8 Lines")
476541   PORT_CONFSETTING(    0x01, DEF_STR(No) )
trunk/src/mess/machine/nes.c
r23709r23710
102102   }
103103
104104   m_io_ctrlsel        = ioport("CTRLSEL");
105   m_io_exp            = ioport("EXP");
105106   m_io_paddle         = ioport("PADDLE");
106107   m_io_cc_left        = ioport("CC_LEFT");
107108   m_io_cc_right       = ioport("CC_RIGHT");
r23709r23710
196197//  INPUTS
197198//-------------------------------------------------
198199
199READ8_MEMBER(nes_state::nes_IN0_r)
200READ8_MEMBER(nes_state::nes_in0_r)
200201{
201202   int cfg = m_io_ctrlsel->read();
202203   /* Some games expect bit 6 to be set because the last entry on the data bus shows up */
203204   /* in the unused upper 3 bits, so typically a read from $4016 leaves 0x40 there. */
204205   UINT8 ret = 0x40;
205   
206   if ((cfg & 0x000f) >= 0x08)
207   {
208      // here we should have the tape input
209      ret |= 0;
210   }
211
212206   ret |= ((m_in_0.i0 >> m_in_0.shift) & 0x01);
213207
214208   /* zapper */
r23709r23710
245239   return ret;
246240}
247241
248READ8_MEMBER(nes_state::nes_IN1_r)
242READ8_MEMBER(nes_state::nes_in1_r)
249243{
250244   int cfg = m_io_ctrlsel->read();
251245   /* Some games expect bit 6 to be set because the last entry on the data bus shows up */
252246   /* in the unused upper 3 bits, so typically a read from $4017 leaves 0x40 there. */
253247   UINT8 ret = 0x40;
254   
255   // row of the keyboard matrix are read 4-bits at time, and gets returned as bit1->bit4
256   if ((cfg & 0x000f) == 0x08) // for now we treat the FC keyboard separately from other inputs!
257   {
258      if (m_fck_scan < 9)
259         ret |= ~(((m_io_fckey[m_fck_scan]->read() >> (m_fck_mode * 4)) & 0x0f) << 1) & 0x1e;
260      else
261         ret |= 0x1e;
262   }
263   
264   if ((cfg & 0x000f) == 0x09)    // for now we treat the Subor keyboard separately from other inputs!
265   {
266      if (m_fck_scan < 12)
267         ret |= ~(((m_io_subkey[m_fck_scan]->read() >> (m_fck_mode * 4)) & 0x0f) << 1) & 0x1e;
268      else
269         ret |= 0x1e;
270   }
248   ret |= ((m_in_1.i0 >> m_in_1.shift) & 0x01);
271249
272   /* Handle data line 0's serial output */
273   if ((cfg & 0x00f0) == 0x0070)
274      ret |= (((m_in_1.i0 >> m_in_1.shift) & 0x01) << 1);
275   else
276      ret |= ((m_in_1.i0 >> m_in_1.shift) & 0x01);
277
278250   /* zapper */
279251   if ((cfg & 0x00f0) == 0x0020)
280252   {
r23709r23710
321293   return ret;
322294}
323295
296WRITE8_MEMBER(nes_state::nes_in0_w)
297{
298   int cfg = m_io_ctrlsel->read();
324299
325void nes_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
326{
327   switch (id)
300   /* Check if lightgun has been chosen as input: if so, enable crosshair */
301   timer_set(attotime::zero, TIMER_ZAPPER_TICK);
302
303   // check 'standard' inputs
304   if (data & 0x01)
305      return;
306   
307   if (LOG_JOY)
308      logerror("joy 0 bits read: %d\n", m_in_0.shift);
309   
310   /* Toggling bit 0 high then low resets both controllers */
311   m_in_0.shift = 0;
312   m_in_1.shift = 0;
313   m_in_0.i0 = 0;
314   m_in_0.i1 = 0;
315   m_in_0.i2 = 0;
316   m_in_1.i0 = 0;
317   m_in_1.i1 = 0;
318   m_in_1.i2 = 0;
319   m_in_2.i0 = 0;
320   m_in_2.i1 = 0;
321   m_in_2.i2 = 0;
322   m_in_3.i0 = 0;
323   m_in_3.i1 = 0;
324   m_in_3.i2 = 0;
325   
326   // P1 inputs
327   switch (cfg & 0x000f)
328328   {
329   case TIMER_LIGHTGUN_TICK:
330      lightgun_tick(ptr, param);
331      break;
332   default:
333      assert_always(FALSE, "Unknown id in nes_state::device_timer");
329      case 0x01:  /* gamepad */
330         m_in_0.i0 = m_io_pad[0]->read();
331         break;
332         
333      case 0x02:  /* zapper 1 */
334         m_in_0.i0 = m_io_zapper1_t->read();
335         m_in_0.i1 = m_io_zapper1_x->read();
336         m_in_0.i2 = m_io_zapper1_y->read();
337         break;
334338   }
339   
340   // P2 inputs
341   switch ((cfg & 0x00f0) >> 4)
342   {
343      case 0x01:  /* gamepad */
344         m_in_1.i0 = m_io_pad[1]->read();
345         break;
346         
347      case 0x02:  /* zapper 2 */
348         m_in_1.i0 = m_io_zapper2_t->read();
349         m_in_1.i1 = m_io_zapper2_x->read();
350         m_in_1.i2 = m_io_zapper2_y->read();
351         break;
352         
353      case 0x04:  /* arkanoid paddle */
354         m_in_1.i0 = (UINT8) ((UINT8) m_io_paddle->read() + (UINT8)0x52) ^ 0xff;
355         break;
356   }
357   
358   // P3 inputs
359   if ((cfg & 0x0f00))
360      m_in_2.i0 = m_io_pad[2]->read();
361   
362   // P4 inputs
363   if ((cfg & 0x0f00))
364      m_in_3.i0 = m_io_pad[3]->read();
365   
366   if (cfg & 0x0f00)
367      m_in_0.i0 |= (m_in_2.i0 << 8) | (0x08 << 16);
368   
369   if (cfg & 0xf000)
370      m_in_1.i0 |= (m_in_3.i0 << 8) | (0x04 << 16);
371   
335372}
336373
337374
338TIMER_CALLBACK_MEMBER(nes_state::lightgun_tick)
375WRITE8_MEMBER(nes_state::nes_in1_w)
339376{
340   if ((m_io_ctrlsel->read() & 0x000f) == 0x0002)
377}
378
379
380READ8_MEMBER(nes_state::fc_in0_r)
381{
382   int exp = m_io_exp->read();
383   /* Some games expect bit 6 to be set because the last entry on the data bus shows up */
384   /* in the unused upper 3 bits, so typically a read from $4016 leaves 0x40 there. */
385   UINT8 ret = 0x40;
386   
387   if ((exp & 0x0f) == 0x02)
341388   {
342      /* enable lightpen crosshair */
343      crosshair_set_screen(machine(), 0, CROSSHAIR_SCREEN_ALL);
389      // here we should have the tape input
390      ret |= 0;
344391   }
345   else
392   
393   ret |= ((m_in_0.i0 >> m_in_0.shift) & 0x01);
394   
395   if (LOG_JOY)
396      logerror("joy 0 read, val: %02x, pc: %04x, bits read: %d, chan0: %08x\n", ret, space.device().safe_pc(), m_in_0.shift, m_in_0.i0);
397   
398   m_in_0.shift++;
399   
400   return ret;
401}
402
403READ8_MEMBER(nes_state::fc_in1_r)
404{
405   int exp = m_io_exp->read();
406   /* Some games expect bit 6 to be set because the last entry on the data bus shows up */
407   /* in the unused upper 3 bits, so typically a read from $4017 leaves 0x40 there. */
408   UINT8 ret = 0x40;
409   
410   // row of the keyboard matrix are read 4-bits at time, and gets returned as bit1->bit4
411   if ((exp & 0x0f) == 0x02)
346412   {
347      /* disable lightpen crosshair */
348      crosshair_set_screen(machine(), 0, CROSSHAIR_SCREEN_NONE);
413      if (m_fck_scan < 9)
414         ret |= ~(((m_io_fckey[m_fck_scan]->read() >> (m_fck_mode * 4)) & 0x0f) << 1) & 0x1e;
415      else
416         ret |= 0x1e;
349417   }
350
351   if ((m_io_ctrlsel->read() & 0x00f0) == 0x0020)
418   
419   if ((exp & 0x0f) == 0x03)
352420   {
353      /* enable lightpen crosshair */
354      crosshair_set_screen(machine(), 1, CROSSHAIR_SCREEN_ALL);
421      if (m_fck_scan < 12)
422         ret |= ~(((m_io_subkey[m_fck_scan]->read() >> (m_fck_mode * 4)) & 0x0f) << 1) & 0x1e;
423      else
424         ret |= 0x1e;
355425   }
356   else
426   
427   /* Handle data line 0's serial output */
428   if ((exp & 0x0f) == 0x06)
429      ret |= (((m_in_1.i0 >> m_in_1.shift) & 0x01) << 1);
430   else
431      ret |= ((m_in_1.i0 >> m_in_1.shift) & 0x01);
432   
433   /* zapper */
434   if ((exp & 0x0f) == 0x01)
357435   {
358      /* disable lightpen crosshair */
359      crosshair_set_screen(machine(), 1, CROSSHAIR_SCREEN_NONE);
436      int x = m_in_1.i1;  /* read Zapper x-position */
437      int y = m_in_1.i2;  /* read Zapper y-position */
438      UINT32 pix, color_base;
439     
440      /* get the pixel at the gun position */
441      pix = m_ppu->get_pixel(x, y);
442     
443      /* get the color base from the ppu */
444      color_base = m_ppu->get_colorbase();
445     
446      /* look at the screen and see if the cursor is over a bright pixel */
447      if ((pix == color_base + 0x20) || (pix == color_base + 0x30) ||
448         (pix == color_base + 0x33) || (pix == color_base + 0x34))
449      {
450         ret &= ~0x08; /* sprite hit */
451      }
452      else
453         ret |= 0x08;  /* no sprite hit */
454     
455      /* If button 1 is pressed, indicate the light gun trigger is pressed */
456      ret |= ((m_in_1.i0 & 0x01) << 4);
360457   }
458   
459   /* arkanoid dial */
460   if ((exp & 0x0f) == 0x04)
461   {
462      /* Handle data line 2's serial output */
463      ret |= ((m_in_1.i2 >> m_in_1.shift) & 0x01) << 3;
464     
465      /* Handle data line 3's serial output - bits are reversed */
466      /* NPW 27-Nov-2007 - there is no third subscript! commenting out */
467      /* ret |= ((m_in_1[3] >> m_in_1.shift) & 0x01) << 4; */
468      /* ret |= ((m_in_1[3] << m_in_1.shift) & 0x80) >> 3; */
469   }
470   
471   if (LOG_JOY)
472      logerror("joy 1 read, val: %02x, pc: %04x, bits read: %d, chan0: %08x\n", ret, space.device().safe_pc(), m_in_1.shift, m_in_1.i0);
473   
474   m_in_1.shift++;
475   
476   return ret;
361477}
362478
363WRITE8_MEMBER(nes_state::nes_IN0_w)
479WRITE8_MEMBER(nes_state::fc_in0_w)
364480{
365481   int cfg = m_io_ctrlsel->read();
482   int exp = m_io_exp->read();
366483
367484   /* Check if lightgun has been chosen as input: if so, enable crosshair */
368485   timer_set(attotime::zero, TIMER_LIGHTGUN_TICK);
369486
370   if ((cfg & 0x000f) >= 0x08)
487   if ((exp & 0x0f) == 0x02 || (exp & 0x0f) == 0x03)
371488   {
372489      // here we should also have the tape output
373
490     
374491      if (BIT(data, 2))   // keyboard active
375492      {
376         int lines = ((cfg & 0x000f) == 0x08) ? 9 : 12;
493         int lines = ((exp & 0x0f) == 0x02) ? 9 : 12;
377494         UINT8 out = BIT(data, 1);   // scan
378
495         
379496         if (m_fck_mode && !out && ++m_fck_scan > lines)
380497            m_fck_scan = 0;
381
498         
382499         m_fck_mode = out;   // access lower or upper 4 bits
383
500         
384501         if (BIT(data, 0))   // reset
385502            m_fck_scan = 0;
386503      }
387504   }
388
505   
389506   // check 'standard' inputs
390507   if (data & 0x01)
391508      return;
r23709r23710
410527   m_in_3.i2 = 0;
411528   
412529   // P1 inputs
413   switch (cfg & 0x000f)
530   if ((cfg & 0x000f) == 0x0001)     /* gamepad 1 */
531      m_in_0.i0 = m_io_pad[0]->read();
532   else if ((cfg & 0x000f) == 0x0002)  /* crazy climber controller (left stick) */
533      m_in_0.i0 = m_io_cc_left->read();
534   
535   // P2 inputs
536   if ((cfg & 0x00f0) == 0x0010)     /* gamepad 2 */
537      m_in_1.i0 = m_io_pad[1]->read();
538   else if ((cfg & 0x00f0) == 0x0020)  /* crazy climber controller (right stick) */
539      m_in_1.i0 = m_io_cc_right->read();
540   
541   // P3 inputs
542   if ((exp & 0x0f) == 7 && (cfg & 0x0f00) == 0x0100)
414543   {
415      case 0x01:  /* gamepad */
416         m_in_0.i0 = m_io_pad[0]->read();
417         break;
418         
419      case 0x02:  /* zapper 1 */
420         m_in_0.i0 = m_io_zapper1_t->read();
421         m_in_0.i1 = m_io_zapper1_x->read();
422         m_in_0.i2 = m_io_zapper1_y->read();
423         break;
424         
425      case 0x06:  /* crazy climber controller (left stick) */
426         m_in_0.i0 = m_io_cc_left->read();
427         break;
544      m_in_2.i0 = m_io_pad[2]->read();
545      m_in_0.i0 |= (m_in_2.i0 << 8) | (0x08 << 16);
428546   }
429547   
430   // P2 inputs
431   switch ((cfg & 0x00f0) >> 4)
548   // P4 inputs
549   if ((exp & 0x0f) == 7 && (cfg & 0xf000) == 0x1000)
432550   {
433      case 0x01:  /* gamepad */
434         m_in_1.i0 = m_io_pad[1]->read();
551      m_in_3.i0 = m_io_pad[3]->read();
552      m_in_1.i0 |= (m_in_3.i0 << 8) | (0x04 << 16);
553   }
554
555   
556   // EXP input
557   switch (exp & 0x0f)
558   {
559      case 0x01:   // Lightgun
560         m_in_0.i0 = m_io_zapper2_t->read();
561         m_in_0.i1 = m_io_zapper2_x->read();
562         m_in_0.i2 = m_io_zapper2_y->read();
435563         break;
436         
437      case 0x02:  /* zapper 2 */
438         m_in_1.i0 = m_io_zapper2_t->read();
439         m_in_1.i1 = m_io_zapper2_x->read();
440         m_in_1.i2 = m_io_zapper2_y->read();
564#if 0         
565      case 0x02:   // FC Keyboard
566         // here we should also have the tape output
567         if (BIT(data, 2))   // keyboard active
568         {
569            UINT8 out = BIT(data, 1);   // scan
570           
571            if (m_fck_mode && !out && ++m_fck_scan > 9)
572               m_fck_scan = 0;
573           
574            m_fck_mode = out;   // access lower or upper 4 bits
575           
576            if (BIT(data, 0))   // reset
577               m_fck_scan = 0;
578         }
441579         break;
442580         
443      case 0x04:  /* arkanoid paddle */
444         m_in_1.i0 = (UINT8) ((UINT8) m_io_paddle->read() + (UINT8)0x52) ^ 0xff;
581      case 0x03:   // Subor Keyboard
582         if (BIT(data, 2))   // keyboard active
583         {
584            UINT8 out = BIT(data, 1);   // scan
585           
586            if (m_fck_mode && !out && ++m_fck_scan > 12)
587               m_fck_scan = 0;
588           
589            m_fck_mode = out;   // access lower or upper 4 bits
590           
591            if (BIT(data, 0))   // reset
592               m_fck_scan = 0;
593         }
445594         break;
595#endif         
596      case 0x04:  // Arkanoid paddle
597         m_in_1.i0 |= (UINT8) ((UINT8) m_io_paddle->read() + (UINT8)0x52) ^ 0xff;
598         break;
446599         
447      case 0x06:  /* crazy climber controller (right stick) */
448         m_in_1.i0 = m_io_cc_right->read();
449         break;
450
451      case 0x07: /* Mahjong Panel */
600      case 0x06:  // Mahjong Panel
452601         if (data & 0xf8)
453602            logerror("Error: Mahjong panel read with mux data %02x\n", (data & 0xfe));
454603         else
r23709r23710
456605         break;
457606   }
458607   
459   // P3 inputs
460   if ((cfg & 0x0f00))
461      m_in_2.i0 = m_io_pad[2]->read();
462   
463   // P4 inputs
464   if ((cfg & 0x0f00))
465      m_in_3.i0 = m_io_pad[3]->read();
466   
467   if (cfg & 0x0f00)
468      m_in_0.i0 |= (m_in_2.i0 << 8) | (0x08 << 16);
469   
470   if (cfg & 0xf000)
471      m_in_1.i0 |= (m_in_3.i0 << 8) | (0x04 << 16);
472   
473608}
474609
475610
476WRITE8_MEMBER(nes_state::nes_IN1_w)
611void nes_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
477612{
613   switch (id)
614   {
615      case TIMER_ZAPPER_TICK:
616         if ((m_io_ctrlsel->read() & 0x000f) == 0x0002)
617         {
618            /* enable lightpen crosshair */
619            crosshair_set_screen(machine(), 0, CROSSHAIR_SCREEN_ALL);
620         }
621         else
622         {
623            /* disable lightpen crosshair */
624            crosshair_set_screen(machine(), 0, CROSSHAIR_SCREEN_NONE);
625         }
626         
627         if ((m_io_ctrlsel->read() & 0x00f0) == 0x0020)
628         {
629            /* enable lightpen crosshair */
630            crosshair_set_screen(machine(), 1, CROSSHAIR_SCREEN_ALL);
631         }
632         else
633         {
634            /* disable lightpen crosshair */
635            crosshair_set_screen(machine(), 1, CROSSHAIR_SCREEN_NONE);
636         }
637         break;
638      case TIMER_LIGHTGUN_TICK:
639         if ((m_io_exp->read() & 0x0f) == 0x01)
640         {
641            /* enable lightpen crosshair */
642            crosshair_set_screen(machine(), 0, CROSSHAIR_SCREEN_ALL);
643         }
644         else
645         {
646            /* disable lightpen crosshair */
647            crosshair_set_screen(machine(), 0, CROSSHAIR_SCREEN_NONE);
648         }
649         break;
650      default:
651         assert_always(FALSE, "Unknown id in nes_state::device_timer");
652   }
478653}
479654
480655
r23709r23710
713888
714889   floppy_install_load_proc(floppy_get_device(machine(), 0), nes_load_proc);
715890   floppy_install_unload_proc(floppy_get_device(machine(), 0), nes_unload_proc);
891
892   // setup alt input handlers for additional FC input devices
893   address_space &space = machine().device<cpu_device>("maincpu")->space(AS_PROGRAM);
894   space.install_read_handler(0x4016, 0x4016, read8_delegate(FUNC(nes_state::fc_in0_r), this));
895   space.install_write_handler(0x4016, 0x4016, write8_delegate(FUNC(nes_state::fc_in0_w), this));
896   space.install_read_handler(0x4017, 0x4017, read8_delegate(FUNC(nes_state::fc_in1_r), this));
716897}
trunk/src/mess/includes/nes.h
r23709r23710
447447public:
448448   enum
449449   {
450      TIMER_ZAPPER_TICK,
450451      TIMER_LIGHTGUN_TICK
451452   };
452453
r23709r23710
481482   ioport_port       *m_io_zapper2_x;
482483   ioport_port       *m_io_zapper2_y;
483484   ioport_port       *m_io_paddle;
485   ioport_port       *m_io_exp;
484486
485487   UINT8      *m_vram;
486488   UINT8      *m_ciram; //PPU nametable RAM - external to PPU!
r23709r23710
493495   int nes_ppu_vidaccess(int address, int data);
494496   void ppu_nmi(int *ppu_regs);
495497
496   DECLARE_READ8_MEMBER(nes_IN0_r);
497   DECLARE_READ8_MEMBER(nes_IN1_r);
498   DECLARE_WRITE8_MEMBER(nes_IN0_w);
499   DECLARE_WRITE8_MEMBER(nes_IN1_w);
498   DECLARE_READ8_MEMBER(nes_in0_r);
499   DECLARE_READ8_MEMBER(nes_in1_r);
500   DECLARE_WRITE8_MEMBER(nes_in0_w);
501   DECLARE_WRITE8_MEMBER(nes_in1_w);
502   DECLARE_READ8_MEMBER(fc_in0_r);
503   DECLARE_READ8_MEMBER(fc_in1_r);
504   DECLARE_WRITE8_MEMBER(fc_in0_w);
500505   DECLARE_WRITE8_MEMBER(nes_vh_sprite_dma_w);
501506   virtual void machine_start();
502507   virtual void machine_reset();
r23709r23710
504509   virtual void video_reset();
505510   virtual void palette_init();
506511   UINT32 screen_update_nes(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
507   TIMER_CALLBACK_MEMBER(lightgun_tick);
508512   DECLARE_READ8_MEMBER(psg_4015_r);
509513   DECLARE_WRITE8_MEMBER(psg_4015_w);
510514   DECLARE_WRITE8_MEMBER(psg_4017_w);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team