From eb08cc7e2a4dde8b904cfec69e81a9dcba5de14a Mon Sep 17 00:00:00 2001 From: angelosa Date: Wed, 5 Oct 2016 15:08:51 +0200 Subject: [PATCH] Various input related bug-fixes to Wild Pilot: [Angelo Salese] * Lightgun is actually an ad-stick; * Added player 2 inputs; * Fixed bogus start button starting a play even without a coin inserted; --- src/mame/drivers/cischeat.cpp | 81 +++++++++++++++++++++++++++-------- src/mame/includes/cischeat.h | 3 ++ src/mame/video/cischeat.cpp | 6 --- 3 files changed, 67 insertions(+), 23 deletions(-) diff --git a/src/mame/drivers/cischeat.cpp b/src/mame/drivers/cischeat.cpp index d044f93b70d..367fb104925 100644 --- a/src/mame/drivers/cischeat.cpp +++ b/src/mame/drivers/cischeat.cpp @@ -351,15 +351,47 @@ ADDRESS_MAP_END Wild Pilot **************************************************************************/ +// ad stick read select +READ16_MEMBER(cischeat_state::wildplt_xy_r) +{ + switch(m_ip_select) + { + case 1: return ioport("P2Y")->read() | (ioport("P2X")->read()<<8); + case 2: return ioport("P1Y")->read() | (ioport("P1X")->read()<<8); + } + + return 0xffff; +} + +// buttons & sensors are +READ16_MEMBER(cischeat_state::wildplt_mux_r) +{ + UINT16 split_in = 0xffff; + switch(m_wildplt_output & 0xc) + { +// case 0: return ioport("IN1")->read(); + case 4: split_in = ioport("IN1_1")->read(); break; + case 8: split_in = ioport("IN1_2")->read(); break; + } + + return split_in & ioport("IN1_COMMON")->read(); +} + +WRITE16_MEMBER(cischeat_state::wildplt_mux_w) +{ + m_wildplt_output = data & 0xc; +} + + // Same as f1gpstar, but vregs are slightly different: static ADDRESS_MAP_START( wildplt_map, AS_PROGRAM, 16, cischeat_state ) AM_RANGE(0x000000, 0x07ffff) AM_ROM // ROM AM_RANGE(0x080000, 0x080001) AM_READ_PORT("IN0") AM_WRITE(f1gpstr2_io_w) // DSW 1 & 2 - AM_RANGE(0x080004, 0x080005) AM_READ_PORT("IN1") AM_WRITE(f1gpstar_motor_w) // Buttons + AM_RANGE(0x080004, 0x080005) AM_READ(wildplt_mux_r) AM_WRITE(wildplt_mux_w) // Buttons AM_RANGE(0x080008, 0x080009) AM_DEVREAD("soundlatch2", generic_latch_16_device, read) // From sound cpu AM_RANGE(0x080008, 0x080009) AM_DEVWRITE("soundlatch", generic_latch_16_device, write) // To sound cpu AM_RANGE(0x08000c, 0x08000d) AM_WRITENOP // 1000, 3000 - AM_RANGE(0x080010, 0x080011) AM_READ(wildplt_xy_r) AM_WRITENOP // X, Y + AM_RANGE(0x080010, 0x080011) AM_READ(wildplt_xy_r) AM_WRITE(ip_select_w) // X, Y AM_RANGE(0x080014, 0x080015) AM_WRITENOP AM_RANGE(0x080018, 0x080019) AM_READWRITE(f1gpstr2_ioready_r, f1gpstar_soundint_w) @@ -1451,29 +1483,44 @@ static INPUT_PORTS_START( wildplt ) PORT_DIPSETTING( 0xc000, DEF_STR( Japan ) ) PORT_DIPSETTING( 0x0000, "France?" ) - PORT_START("IN1") + PORT_START("IN1_COMMON") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 ) //service 1 too - PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW ) //start 2 too - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0xfffe, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1_1") + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_SERVICE_NO_TOGGLE( 0x0008, IP_ACTIVE_LOW ) + PORT_BIT( 0xfff3, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1_2") + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("P1 Bomb") + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START2 ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("P2 Shot") + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_NAME("P2 Missile") + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("P1 Shot") + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("P1 Missile") + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_NAME("P2 Bomb") + PORT_BIT( 0xfe01, IP_ACTIVE_LOW, IPT_UNKNOWN ) +#if 0 PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Up Limit SW. PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Dow Limit SW. PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Center SW. PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Senser SW. #1 PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) // Senser SW. #2 PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_SERVICE2 ) PORT_NAME("Emergency Button") //E Stop for motors? ( Senser SW. #3 ) +#endif + PORT_START("P1Y") + PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_REVERSE PORT_PLAYER(1) - PORT_START("IN2") - PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_Y ) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_REVERSE + PORT_START("P1X") + PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_PLAYER(1) - PORT_START("IN3") - PORT_BIT( 0xff, 0x80, IPT_LIGHTGUN_X ) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) + PORT_START("P2Y") + PORT_BIT( 0xff, 0x80, IPT_AD_STICK_Y ) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_REVERSE PORT_PLAYER(2) + + PORT_START("P2X") + PORT_BIT( 0xff, 0x80, IPT_AD_STICK_X ) PORT_SENSITIVITY(35) PORT_KEYDELTA(15) PORT_PLAYER(2) INPUT_PORTS_END @@ -3474,7 +3521,7 @@ GAMEL( 1990, cischeat, 0, cischeat, cischeat, cischeat_state, cischeat, R GAMEL( 1991, f1gpstar, 0, f1gpstar, f1gpstar, cischeat_state, f1gpstar, ROT0, "Jaleco", "Grand Prix Star", MACHINE_IMPERFECT_GRAPHICS, layout_f1gpstar ) GAME ( 1992, armchmp2, 0, armchmp2, armchmp2, driver_device, 0, ROT270, "Jaleco", "Arm Champs II v2.6", MACHINE_IMPERFECT_GRAPHICS ) GAME ( 1992, armchmp2o,armchmp2, armchmp2, armchmp2, driver_device, 0, ROT270, "Jaleco", "Arm Champs II v1.7", MACHINE_IMPERFECT_GRAPHICS ) -GAME ( 1992, wildplt, 0, wildplt, wildplt, cischeat_state, f1gpstar, ROT0, "Jaleco", "Wild Pilot", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // can start a play even without a credit, no p2 start, busted timings +GAME ( 1992, wildplt, 0, wildplt, wildplt, cischeat_state, f1gpstar, ROT0, "Jaleco", "Wild Pilot", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING ) // busted timings GAMEL( 1993, f1gpstr2, 0, f1gpstr2, f1gpstr2, cischeat_state, f1gpstar, ROT0, "Jaleco", "F-1 Grand Prix Star II", MACHINE_IMPERFECT_GRAPHICS, layout_f1gpstar ) GAME ( 1993, captflag, 0, captflag, captflag, cischeat_state, captflag, ROT270, "Jaleco", "Captain Flag (Japan)", MACHINE_IMPERFECT_GRAPHICS ) GAME ( 1994, scudhamm, 0, scudhamm, scudhamm, driver_device, 0, ROT270, "Jaleco", "Scud Hammer", MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/includes/cischeat.h b/src/mame/includes/cischeat.h index 5ea8390fa7d..23017d1d2c1 100644 --- a/src/mame/includes/cischeat.h +++ b/src/mame/includes/cischeat.h @@ -55,6 +55,7 @@ public: int m_armold; UINT16 m_scudhamm_motor_command; int m_ip_select; + UINT16 m_wildplt_output; UINT8 m_drawmode_table[16]; int m_debugsprites; int m_show_unknown; @@ -91,6 +92,8 @@ public: DECLARE_READ16_MEMBER(f1gpstar_wheel_r); DECLARE_READ16_MEMBER(f1gpstr2_ioready_r); DECLARE_READ16_MEMBER(wildplt_xy_r); + DECLARE_READ16_MEMBER(wildplt_mux_r); + DECLARE_WRITE16_MEMBER(wildplt_mux_w); DECLARE_WRITE16_MEMBER(f1gpstar_motor_w); DECLARE_WRITE16_MEMBER(f1gpstar_soundint_w); DECLARE_WRITE16_MEMBER(f1gpstar_comms_w); diff --git a/src/mame/video/cischeat.cpp b/src/mame/video/cischeat.cpp index cf8e2a65ac8..992d777d87c 100644 --- a/src/mame/video/cischeat.cpp +++ b/src/mame/video/cischeat.cpp @@ -270,12 +270,6 @@ READ16_MEMBER(cischeat_state::f1gpstr2_ioready_r) Wild Pilot **************************************************************************/ -READ16_MEMBER(cischeat_state::wildplt_xy_r) -{ - // X, Y - return ioport("IN2")->read() | (ioport("IN3")->read()<<8); -} - WRITE16_MEMBER(cischeat_state::f1gpstar_motor_w) {