diff --git a/src/mame/drivers/naomi.c b/src/mame/drivers/naomi.c index 253e4665ebf..8b4dc9ad5e0 100644 --- a/src/mame/drivers/naomi.c +++ b/src/mame/drivers/naomi.c @@ -2400,35 +2400,22 @@ static INPUT_PORTS_START( naomi_mp ) PORT_INCLUDE( naomi_mie ) PORT_INCLUDE( naomi_debug ) - PORT_START("P1") /* inputs are all there, it needs a mux write mechanism of some sort ... */ - PORT_DIPNAME( 0x0100, 0x0000, "SYSA" ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0100, DEF_STR( On ) ) - PORT_DIPNAME( 0x0200, 0x0000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0200, DEF_STR( On ) ) - PORT_DIPNAME( 0x0400, 0x0000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0400, DEF_STR( On ) ) - PORT_DIPNAME( 0x0800, 0x0000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0800, DEF_STR( On ) ) - PORT_DIPNAME( 0x1000, 0x0000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x1000, DEF_STR( On ) ) - PORT_DIPNAME( 0x2000, 0x0000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x2000, DEF_STR( On ) ) - PORT_DIPNAME( 0x4000, 0x0000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x4000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x0000, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x8000, DEF_STR( On ) ) + PORT_START("OUTPUT") + PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_OUTPUT) PORT_CHANGED_MEMBER(DEVICE_SELF, naomi_state,naomi_mp_w, NULL) + + PORT_START("P1") + PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, naomi_state,naomi_mp_r, "KEY1\0KEY2\0KEY3\0KEY4\0KEY5") + PORT_BIT( 0x00ff, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_START("KEY1") - PORT_BIT( 0xff, IP_ACTIVE_HIGH, IPT_UNUSED ) //TODO: mahjong panel test & service buttons are presumably here - + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_FLIP_FLOP ) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_MAHJONG_LAST_CHANCE ) PORT_START("KEY2") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START1 ) @@ -2440,7 +2427,7 @@ static INPUT_PORTS_START( naomi_mp ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_MAHJONG_A ) PORT_START("KEY3") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNUSED ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_MAHJONG_BET ) PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_MAHJONG_REACH ) PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_MAHJONG_N ) PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_MAHJONG_J ) @@ -2467,6 +2454,12 @@ static INPUT_PORTS_START( naomi_mp ) PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_MAHJONG_D ) INPUT_PORTS_END +static INPUT_PORTS_START( suchie3 ) + PORT_INCLUDE( naomi_mp ) + PORT_MODIFY("P1") + PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, naomi_state,naomi_mp_r, "KEY5\0KEY2\0KEY3\0KEY4\0KEY1") +INPUT_PORTS_END + // Atomiswave - inputs are read as standard Dreamcast controllers. // Controller bit patterns: // @@ -9055,7 +9048,7 @@ GAME( 2003, puyofevp, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", " /* 841-xxxxx ("Licensed by Sega" Naomi cart games)*/ /* 0001 */ GAME( 1999, pstone, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Capcom", "Power Stone (JPN, USA, EUR, ASI, AUS)", GAME_FLAGS ) -/* 0002 */ GAME( 1999, suchie3, naomi, naomim2, naomi_mp,naomi_state,naomi_mp,ROT0, "Jaleco", "Idol Janshi Suchie-Pai 3 (JPN)", GAME_FLAGS ) +/* 0002 */ GAME( 1999, suchie3, naomi, naomim2, suchie3, naomi_state,naomi_mp,ROT0, "Jaleco", "Idol Janshi Suchie-Pai 3 (JPN)", GAME_FLAGS ) /* 0003 */ GAME( 1999, doa2, naomi, naomim2, naomi, naomi_state, naomi, ROT0, "Tecmo", "Dead or Alive 2 (JPN, USA, EXP, KOR, AUS)", GAME_FLAGS ) /* 0003 */ GAME( 2000, doa2m, doa2, naomim2, naomi, naomi_state, naomi, ROT0, "Tecmo", "Dead or Alive 2 Millennium (JPN, USA, EXP, KOR, AUS)", GAME_FLAGS ) /* 0004 */ GAME( 1999, shangril, naomi, naomim2, naomi_mp,naomi_state,naomi_mp,ROT0, "Marvelous Ent.", "Dengen Tenshi Taisen Janshi Shangri-la (JPN, USA, EXP, KOR, AUS)", GAME_FLAGS ) diff --git a/src/mame/includes/naomi.h b/src/mame/includes/naomi.h index 6a5d1157dc0..13d3800880b 100644 --- a/src/mame/includes/naomi.h +++ b/src/mame/includes/naomi.h @@ -62,9 +62,12 @@ class naomi_state : public dc_state DECLARE_READ64_MEMBER( aw_modem_r ); DECLARE_WRITE64_MEMBER( aw_modem_w ); + UINT8 m_mp_mux; + DECLARE_CUSTOM_INPUT_MEMBER(naomi_mp_r); + DECLARE_INPUT_CHANGED_MEMBER(naomi_mp_w); + inline int decode_reg32_64(UINT32 offset, UINT64 mem_mask, UINT64 *shift); - int jvsboard_type; UINT16 actel_id; UINT8 aw_ctrl_type; diff --git a/src/mame/machine/naomi.c b/src/mame/machine/naomi.c index 369ddefa22e..56e78f28e60 100644 --- a/src/mame/machine/naomi.c +++ b/src/mame/machine/naomi.c @@ -192,7 +192,6 @@ DRIVER_INIT_MEMBER(naomi_state,naomi) { //m_maincpu->space(AS_PROGRAM).install_read_handler(0xc2ad238, 0xc2ad23f, read64_delegate(FUNC(naomi_state::naomi_biose_idle_skip_r),this); // rev e bios m_maincpu->space(AS_PROGRAM).install_read_handler(0xc2b0600, 0xc2b0607, read64_delegate(FUNC(naomi_state::naomi_biosh_idle_skip_r),this)); // rev h bios - jvsboard_type = JVSBD_DEFAULT; actel_id = 0xffff; create_pic_from_retdat(); @@ -201,18 +200,35 @@ DRIVER_INIT_MEMBER(naomi_state,naomi) DRIVER_INIT_MEMBER(naomi_state,naomi2) { m_maincpu->space(AS_PROGRAM).install_read_handler(0xc2b0600, 0xc2b0607, read64_delegate(FUNC(naomi_state::naomi2_biose_idle_skip_r),this)); // rev e bios - jvsboard_type = JVSBD_DEFAULT; actel_id = 0xffff; create_pic_from_retdat(); } +INPUT_CHANGED_MEMBER(naomi_state::naomi_mp_w) +{ + m_mp_mux = newval; +} +CUSTOM_INPUT_MEMBER(naomi_state::naomi_mp_r) +{ + const char *tagptr = (const char *)param; + UINT8 retval = 0; + + for (int i = 0x80; i >= 0x08; i >>= 1) + { + if (m_mp_mux & i) + retval |= ioport(tagptr)->read_safe(0); + tagptr += strlen(tagptr) + 1; + } + return retval; +} + DRIVER_INIT_MEMBER(naomi_state,naomi_mp) { //m_maincpu->space(AS_PROGRAM).install_read_handler(0xc2ad238, 0xc2ad23f, read64_delegate(FUNC(naomi_state::naomi_biose_idle_skip_r),this); // rev e bios m_maincpu->space(AS_PROGRAM).install_read_handler(0xc2b0600, 0xc2b0607, read64_delegate(FUNC(naomi_state::naomi_biosh_idle_skip_r),this)); // rev h bios - jvsboard_type = JVSBD_MAHJONG; actel_id = 0xffff; + m_mp_mux = 0; create_pic_from_retdat(); } @@ -221,7 +237,6 @@ DRIVER_INIT_MEMBER(naomi_state,naomigd) { m_maincpu->space(AS_PROGRAM).install_read_handler(0xc2ad238, 0xc2ad23f, read64_delegate(FUNC(naomi_state::naomi_biose_idle_skip_r),this)); // rev e bios //m_maincpu->space(AS_PROGRAM).install_read_handler(0xc2b0600, 0xc2b0607, read64_delegate(FUNC(naomi_state::naomi_biosh_idle_skip_r),this)); // rev h bios - jvsboard_type = JVSBD_DEFAULT; actel_id = 0xffff; create_pic_from_retdat(); @@ -231,8 +246,8 @@ DRIVER_INIT_MEMBER(naomi_state,naomigd_mp) { m_maincpu->space(AS_PROGRAM).install_read_handler(0xc2ad238, 0xc2ad23f, read64_delegate(FUNC(naomi_state::naomi_biose_idle_skip_r),this)); // rev e bios //m_maincpu->space(AS_PROGRAM).install_read_handler(0xc2b0600, 0xc2b0607, read64_delegate(FUNC(naomi_state::naomi_biosh_idle_skip_r),this)); // rev h bios - jvsboard_type = JVSBD_MAHJONG; actel_id = 0xffff; + m_mp_mux = 0; create_pic_from_retdat(); }