diff --git a/src/devices/bus/neogeo_ctrl/ctrl.cpp b/src/devices/bus/neogeo_ctrl/ctrl.cpp index 1f36549fe17..745bcc58cf6 100644 --- a/src/devices/bus/neogeo_ctrl/ctrl.cpp +++ b/src/devices/bus/neogeo_ctrl/ctrl.cpp @@ -206,5 +206,5 @@ SLOT_INTERFACE_START( neogeo_arc_edge_fixed ) SLOT_INTERFACE_END SLOT_INTERFACE_START( neogeo_arc_pin15 ) - SLOT_INTERFACE("mahjong", NEOGEO_MJCTRL) + SLOT_INTERFACE("mahjong", NEOGEO_MJCTRL_AC) SLOT_INTERFACE_END diff --git a/src/devices/bus/neogeo_ctrl/irrmaze.cpp b/src/devices/bus/neogeo_ctrl/irrmaze.cpp index 49379d02c47..d6020244ca7 100644 --- a/src/devices/bus/neogeo_ctrl/irrmaze.cpp +++ b/src/devices/bus/neogeo_ctrl/irrmaze.cpp @@ -25,6 +25,10 @@ static INPUT_PORTS_START( neogeo_irrmaze ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) + PORT_START("START") + PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) + PORT_START("TRACK_X") PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(10) PORT_KEYDELTA(20) PORT_REVERSE @@ -47,6 +51,7 @@ neogeo_irrmaze_device::neogeo_irrmaze_device(const machine_config &mconfig, cons m_tx(*this, "TRACK_X"), m_ty(*this, "TRACK_Y"), m_buttons(*this, "BUTTONS"), + m_ss(*this, "START"), m_spi_outputs(*this, "sit%u", 0U), m_spi_sr(0U), m_ctrl_sel(0U) @@ -101,6 +106,15 @@ READ8_MEMBER(neogeo_irrmaze_device::in1_r) return m_buttons->read(); } +//------------------------------------------------- +// read_start_sel +//------------------------------------------------- + +uint8_t neogeo_irrmaze_device::read_start_sel() +{ + return m_ss->read(); +} + //------------------------------------------------- // write_ctrlsel //------------------------------------------------- diff --git a/src/devices/bus/neogeo_ctrl/irrmaze.h b/src/devices/bus/neogeo_ctrl/irrmaze.h index 4980a488098..bc00b4eeb2e 100644 --- a/src/devices/bus/neogeo_ctrl/irrmaze.h +++ b/src/devices/bus/neogeo_ctrl/irrmaze.h @@ -33,12 +33,14 @@ protected: // device_neogeo_control_port_interface overrides virtual DECLARE_READ8_MEMBER( in0_r ) override; virtual DECLARE_READ8_MEMBER( in1_r ) override; + virtual uint8_t read_start_sel() override; virtual void write_ctrlsel(uint8_t data) override; private: required_ioport m_tx; required_ioport m_ty; required_ioport m_buttons; + required_ioport m_ss; output_finder<16> m_spi_outputs; uint16_t m_spi_sr; uint8_t m_ctrl_sel; @@ -48,5 +50,4 @@ private: // device type definition DECLARE_DEVICE_TYPE(NEOGEO_IRRMAZE, neogeo_irrmaze_device) - #endif // MAME_BUS_NEOGEO_CTRL_IRRMAZE_H diff --git a/src/devices/bus/neogeo_ctrl/joystick.cpp b/src/devices/bus/neogeo_ctrl/joystick.cpp index 83c0513be95..045e593895c 100644 --- a/src/devices/bus/neogeo_ctrl/joystick.cpp +++ b/src/devices/bus/neogeo_ctrl/joystick.cpp @@ -144,6 +144,11 @@ static INPUT_PORTS_START( neogeo_joy_ac ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(2) + + PORT_START("START") + PORT_BIT( 0xfa, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) INPUT_PORTS_END @@ -167,8 +172,8 @@ ioport_constructor neogeo_joy_ac_device::device_input_ports() const neogeo_joy_ac_device::neogeo_joy_ac_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, NEOGEO_JOY_AC, tag, owner, clock), device_neogeo_ctrl_edge_interface(mconfig, *this), - m_joy1(*this, "JOY1"), - m_joy2(*this, "JOY2") + m_joy(*this, "JOY%u", 1U), + m_ss(*this, "START") { } @@ -181,22 +186,13 @@ void neogeo_joy_ac_device::device_start() } -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void neogeo_joy_ac_device::device_reset() -{ -} - - //------------------------------------------------- // in0_r //------------------------------------------------- READ8_MEMBER(neogeo_joy_ac_device::in0_r) { - return m_joy1->read(); + return m_joy[0]->read(); } //------------------------------------------------- @@ -205,5 +201,14 @@ READ8_MEMBER(neogeo_joy_ac_device::in0_r) READ8_MEMBER(neogeo_joy_ac_device::in1_r) { - return m_joy2->read(); + return m_joy[1]->read(); +} + +//------------------------------------------------- +// read_start_sel +//------------------------------------------------- + +uint8_t neogeo_joy_ac_device::read_start_sel() +{ + return m_ss->read(); } diff --git a/src/devices/bus/neogeo_ctrl/joystick.h b/src/devices/bus/neogeo_ctrl/joystick.h index 605ea8d8d90..bf07ec90b9b 100644 --- a/src/devices/bus/neogeo_ctrl/joystick.h +++ b/src/devices/bus/neogeo_ctrl/joystick.h @@ -50,21 +50,19 @@ public: // construction/destruction neogeo_joy_ac_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // optional information overrides - virtual ioport_constructor device_input_ports() const override; - protected: // device-level overrides + virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; - virtual void device_reset() override; // device_neogeo_ctrl_edge_interface overrides virtual DECLARE_READ8_MEMBER( in0_r ) override; virtual DECLARE_READ8_MEMBER( in1_r ) override; + virtual uint8_t read_start_sel() override; private: - required_ioport m_joy1; - required_ioport m_joy2; + required_ioport_array<2> m_joy; + required_ioport m_ss; }; diff --git a/src/devices/bus/neogeo_ctrl/kizuna4p.cpp b/src/devices/bus/neogeo_ctrl/kizuna4p.cpp index 0c0420b6f3a..4ef3e3d78fe 100644 --- a/src/devices/bus/neogeo_ctrl/kizuna4p.cpp +++ b/src/devices/bus/neogeo_ctrl/kizuna4p.cpp @@ -4,6 +4,14 @@ SNK Neo Geo Kizuna 4Players Controller emulation + The NEO-FTC1B board is a JAMMA splitter, including input + multiplexing, video buffering, and audio amplification. It + requires an MV-1B or MV-1C system for the output header. + There are unpopulated locations for four 15-pin D connectors, + so it could theoretically be used with AES joysticks. It + won't work with mahjong panels because the outputs aren't + demultiplexed. + **********************************************************************/ #include "emu.h" @@ -13,7 +21,7 @@ // DEVICE DEFINITIONS //************************************************************************** -DEFINE_DEVICE_TYPE(NEOGEO_KIZ4P, neogeo_kizuna4p_device, "neogeo_kiz4p", "SNK Neo Geo Kizuna 4P Controller") +DEFINE_DEVICE_TYPE(NEOGEO_KIZ4P, neogeo_kizuna4p_device, "neogeo_kiz4p", "SNK NEO-FTC1B JAMMA Splitter") static INPUT_PORTS_START( neogeo_kiz4p ) @@ -57,13 +65,15 @@ static INPUT_PORTS_START( neogeo_kiz4p ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4) - PORT_START("START13") + PORT_START("START1") + PORT_BIT( 0xfa, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START3 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START2 ) - PORT_START("START24") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START4 ) + PORT_START("START2") + PORT_BIT( 0xfa, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START3 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START4 ) INPUT_PORTS_END @@ -88,12 +98,8 @@ ioport_constructor neogeo_kizuna4p_device::device_input_ports() const neogeo_kizuna4p_device::neogeo_kizuna4p_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, NEOGEO_KIZ4P, tag, owner, clock), device_neogeo_ctrl_edge_interface(mconfig, *this), - m_joy1(*this, "JOY1"), - m_joy2(*this, "JOY2"), - m_joy3(*this, "JOY3"), - m_joy4(*this, "JOY4"), - m_ss1(*this, "START13"), - m_ss2(*this, "START24") + m_joy(*this, "JOY%u", 1U), + m_ss(*this, "START%u", 1U) { } @@ -103,18 +109,9 @@ neogeo_kizuna4p_device::neogeo_kizuna4p_device(const machine_config &mconfig, co //------------------------------------------------- void neogeo_kizuna4p_device::device_start() -{ - save_item(NAME(m_ctrl_sel)); -} - - -//------------------------------------------------- -// device_reset - device-specific reset -//------------------------------------------------- - -void neogeo_kizuna4p_device::device_reset() { m_ctrl_sel = 0; + save_item(NAME(m_ctrl_sel)); } @@ -124,15 +121,7 @@ void neogeo_kizuna4p_device::device_reset() READ8_MEMBER(neogeo_kizuna4p_device::in0_r) { - uint8_t res = 0; - if (m_ctrl_sel & 0x01) - res = m_joy3->read(); - else - res = m_joy1->read(); - - if (m_ctrl_sel & 0x04) res &= ((m_ctrl_sel & 0x01) ? ~0x20 : ~0x10); - - return res; + return m_joy[BIT(m_ctrl_sel, 0) << 1]->read() & ~(BIT(m_ctrl_sel, 2) << (BIT(m_ctrl_sel, 0) | 4)); } //------------------------------------------------- @@ -141,15 +130,7 @@ READ8_MEMBER(neogeo_kizuna4p_device::in0_r) READ8_MEMBER(neogeo_kizuna4p_device::in1_r) { - uint8_t res = 0; - if (m_ctrl_sel & 0x01) - res = m_joy4->read(); - else - res = m_joy2->read(); - - if (m_ctrl_sel & 0x04) res &= ((m_ctrl_sel & 0x01) ? ~0x20 : ~0x10); - - return res; + return m_joy[(BIT(m_ctrl_sel, 0) << 1) | 1]->read() & ~(BIT(m_ctrl_sel, 2) << (BIT(m_ctrl_sel, 0) | 4)); } //------------------------------------------------- @@ -158,7 +139,7 @@ READ8_MEMBER(neogeo_kizuna4p_device::in1_r) uint8_t neogeo_kizuna4p_device::read_start_sel() { - return (BIT(m_ss1->read(), m_ctrl_sel & 0x01)) | (BIT(m_ss2->read(), m_ctrl_sel & 0x01) << 2); + return m_ss[BIT(m_ctrl_sel, 0)]->read(); } diff --git a/src/devices/bus/neogeo_ctrl/kizuna4p.h b/src/devices/bus/neogeo_ctrl/kizuna4p.h index 6f7fd6fcbb9..c48f0078a81 100644 --- a/src/devices/bus/neogeo_ctrl/kizuna4p.h +++ b/src/devices/bus/neogeo_ctrl/kizuna4p.h @@ -20,20 +20,16 @@ // ======================> neogeo_kizuna4p_device -class neogeo_kizuna4p_device : public device_t, - public device_neogeo_ctrl_edge_interface +class neogeo_kizuna4p_device : public device_t, public device_neogeo_ctrl_edge_interface { public: // construction/destruction neogeo_kizuna4p_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // optional information overrides - virtual ioport_constructor device_input_ports() const override; - protected: // device-level overrides + virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; - virtual void device_reset() override; // device_neogeo_control_port_interface overrides virtual DECLARE_READ8_MEMBER( in0_r ) override; @@ -42,12 +38,8 @@ protected: virtual void write_ctrlsel(uint8_t data) override; private: - required_ioport m_joy1; - required_ioport m_joy2; - required_ioport m_joy3; - required_ioport m_joy4; - required_ioport m_ss1; - required_ioport m_ss2; + required_ioport_array<4> m_joy; + required_ioport_array<2> m_ss; uint8_t m_ctrl_sel; }; diff --git a/src/devices/bus/neogeo_ctrl/mahjong.cpp b/src/devices/bus/neogeo_ctrl/mahjong.cpp index 7bb111f4779..1ac8d1e2d20 100644 --- a/src/devices/bus/neogeo_ctrl/mahjong.cpp +++ b/src/devices/bus/neogeo_ctrl/mahjong.cpp @@ -46,16 +46,18 @@ static INPUT_PORTS_START( neogeo_mj_ac ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_MAHJONG_RON ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_MAHJONG_REACH ) PORT_BIT( 0xe0, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("START_SELECT") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START ) + PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END static INPUT_PORTS_START( neogeo_mj ) PORT_INCLUDE( neogeo_mj_ac ) - PORT_START("START_SELECT") - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START ) + PORT_MODIFY("START_SELECT") PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SELECT ) - PORT_BIT( 0xfc, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END @@ -87,6 +89,7 @@ neogeo_mjctrl_ac_device::neogeo_mjctrl_ac_device(const machine_config &mconfig, : device_t(mconfig, type, tag, owner, clock) , device_neogeo_control_port_interface(mconfig, *this) , m_ctrl_sel(0x00) + , m_ss(*this, "START_SELECT") , m_mjpanel(*this, "MJ.%u", 0) { } @@ -98,7 +101,6 @@ neogeo_mjctrl_ac_device::neogeo_mjctrl_ac_device(const machine_config &mconfig, neogeo_mjctrl_device::neogeo_mjctrl_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : neogeo_mjctrl_ac_device(mconfig, NEOGEO_MJCTRL, tag, owner, clock) - , m_ss(*this, "START_SELECT") { } @@ -131,6 +133,15 @@ uint8_t neogeo_mjctrl_ac_device::read_ctrl() return res; } +//------------------------------------------------- +// read_start_sel +//------------------------------------------------- + +uint8_t neogeo_mjctrl_ac_device::read_start_sel() +{ + return m_ss->read(); +} + //------------------------------------------------- // write_ctrlsel //------------------------------------------------- diff --git a/src/devices/bus/neogeo_ctrl/mahjong.h b/src/devices/bus/neogeo_ctrl/mahjong.h index d8f1c0ca41a..d4fd1646ece 100644 --- a/src/devices/bus/neogeo_ctrl/mahjong.h +++ b/src/devices/bus/neogeo_ctrl/mahjong.h @@ -30,6 +30,7 @@ protected: // device-level overrides virtual ioport_constructor device_input_ports() const override; + virtual uint8_t read_start_sel() override; virtual void device_start() override; // device_neogeo_control_port_interface overrides @@ -37,6 +38,7 @@ protected: virtual void write_ctrlsel(uint8_t data) override; uint8_t m_ctrl_sel; + required_ioport m_ss; private: required_ioport_array<3> m_mjpanel; @@ -56,9 +58,6 @@ protected: // device_neogeo_control_port_interface overrides virtual uint8_t read_start_sel() override; - -private: - required_ioport m_ss; }; diff --git a/src/mame/drivers/neogeo.cpp b/src/mame/drivers/neogeo.cpp index 430e5267071..16a4e50a4af 100644 --- a/src/mame/drivers/neogeo.cpp +++ b/src/mame/drivers/neogeo.cpp @@ -36,7 +36,7 @@ Confirmed non-bugs: * Bad zooming in the Kof2003 bootlegs - this is what happens - if you try and use the normal bios with a pcb set, it + if you try and use the normal bios with a PCB set, it looks like the bootleggers didn't care. * Glitches at the edges of the screen - the real hardware can display 320x224 but most of the games seem designed @@ -48,12 +48,12 @@ ***************************************************************************** The Neo-Geo Multi Video System (MVS), is an arcade system board, being - the first product in the Neo-Geo family, designed by Alpha Denshi(ADK) - and released in 1990 by SNK. It was known to the coin-op industry, and + the first product in the Neo-Geo family, designed by Alpha Denshi (ADK) + and released in 1990 by SNK. It was known to the coin-op industry, and offered arcade operators the ability to put up to 6 different arcade titles into a single cabinet, a key economic consideration for operators with limited floorspace (games for the Neo-Geo are cartridge based and are - easily exchangeable). It comes in many different cabinets but basically + easily exchangeable). It comes in many different cabinets but basically consists of an add on board that can be linked to a standard Jamma system. The system was discontinued in 2004. Source (modified): http://en.wikipedia.org/wiki/Neo_Geo @@ -411,8 +411,8 @@ VCC = 30A | 30B = VCC VCC = 30A | 30B = VCC VCC = 31A | 31B = VCC VCC = 31A | 31B = VCC VCC = 32A | 32B = VCC VCC = 32A | 32B = VCC - CR20 = 33A | 33B = CR21 PORTADRS = 33A | 33B = 4MB - CR22 = 34A | 34B = CR23 NC = 34A | 34B = ROMOE + CR20 = 33A | 33B = CR21 PORTADRS = 33A | 33B = ROMOE + CR22 = 34A | 34B = CR23 NC = 34A | 34B = 4MB CR24 = 35A | 35B = CR25 NC = 35A | 35B = RESET CR26 = 36A | 36B = CR27 NC = 36A | 36B = NC CR28 = 37A | 37B = CR29 NC = 37A | 37B = NC @@ -420,21 +420,21 @@ NC = 39A | 39B = FIX00 NC = 39A | 39B = NC NC = 40A | 40B = FIX01 NC = 40A | 40B = NC NC = 41A | 41B = FIX02 NC = 41A | 41B = SDPAD0 - SYSTEMB = 42A | 42B = FIX03 SYSTEMB = 42A | 42B = SDPAD1 + SLOTCS = 42A | 42B = FIX03 SLOTCS = 42A | 42B = SDPAD1 SDA0 = 43A | 43B = FIX04 SDPA8 = 43A | 43B = SDPAD2 SDA1 = 44A | 44B = FIX05 SDPA9 = 44A | 44B = SDPAD3 SDA2 = 45A | 45B = FIX06 SDPA10 = 45A | 45B = SDPAD4 SDA3 = 46A | 46B = FIX07 SDPA11 = 46A | 46B = SDPAD5 SDA4 = 47A | 47B = SDRD0 SDPMPX = 47A | 47B = SDPAD6 SDA5 = 48A | 48B = SDRD1 SDPOE = 48A | 48B = SDPAD7 - SDA6 = 49A | 49B = SDROM SDRA8 = 49A | 49B = SDRA00 - SDA7 = 50A | 50B = SDMRD SDRA9 = 50A | 50B = SDRA01 - SDA8 = 51A | 51B = SDDO SDRA20 = 51A | 51B = SDRA02 - SDA9 = 52A | 52B = SDD1 SDRA21 = 52A | 52B = SDRA03 - SDA10 = 53A | 53B = SDD2 SDRA22 = 53A | 53B = SDRA04 - SDA11 = 54A | 54B = SDD3 SDRA23 = 54A | 54B = SDRA05 - SDA12 = 55A | 55B = SDD4 SDRMPX = 55A | 55B = SDRA06 - SDA13 = 56A | 56B = SDD5 SDROE = 56A | 56B = SDRA07 + SDA6 = 49A | 49B = SDROM SDRA8 = 49A | 49B = SDRAD0 + SDA7 = 50A | 50B = SDMRD SDRA9 = 50A | 50B = SDRAD1 + SDA8 = 51A | 51B = SDD0 SDRA20 = 51A | 51B = SDRAD2 + SDA9 = 52A | 52B = SDD1 SDRA21 = 52A | 52B = SDRAD3 + SDA10 = 53A | 53B = SDD2 SDRA22 = 53A | 53B = SDRAD4 + SDA11 = 54A | 54B = SDD3 SDRA23 = 54A | 54B = SDRAD5 + SDA12 = 55A | 55B = SDD4 SDRMPX = 55A | 55B = SDRAD6 + SDA13 = 56A | 56B = SDD5 SDROE = 56A | 56B = SDRAD7 SDA14 = 57A | 57B = SDD6 GND = 57A | 57B = GND SDA15 = 58A | 58B = SDD7 GND = 58A | 58B = GND GND = 59A | 59B = GND GND = 59A | 59B = GND @@ -553,11 +553,13 @@ public: { } - DECLARE_CUSTOM_INPUT_MEMBER(kizuna4p_start_r); - // mainboard configurations void mv1fz(machine_config &config); + // fixed software configurations + void kizuna4p(machine_config &config); + void irrmaze(machine_config &config); + protected: virtual void machine_start() override; @@ -589,10 +591,8 @@ public: // fixed software configurations void neobase(machine_config &config); void fatfur2(machine_config &config); - void kizuna4p(machine_config &config); void kof97oro(machine_config &config); void kog(machine_config &config); - void irrmaze(machine_config &config); void kof98(machine_config &config); void mslugx(machine_config &config); void kof99(machine_config &config); @@ -874,9 +874,14 @@ READ16_MEMBER(ngarcade_base_state::in1_edge_joy_r) return ((m_edge->in1_r(space, offset) & m_ctrl2->ctrl_r(space, offset)) << 8) | 0xff; } -CUSTOM_INPUT_MEMBER(mvs_state::kizuna4p_start_r) +CUSTOM_INPUT_MEMBER(ngarcade_base_state::startsel_edge_joy_r) { - return (m_edge->read_start_sel() & 0x05) | ~0x05; + uint32_t ret = m_edge->read_start_sel() | ~0x05; + if (m_ctrl1) + ret &= (m_ctrl1->read_start_sel() << 0) | ~0x01; + if (m_ctrl2) + ret &= (m_ctrl2->read_start_sel() << 0) | ~0x04; + return ret; } WRITE8_MEMBER(neogeo_base_state::io_control_w) @@ -1621,7 +1626,7 @@ void mvs_state::neogeo_postload() void neogeo_base_state::machine_reset() { - // disable audiocpu nmi + // disable audiocpu NMI m_audionmi->in_w<1>(0); m_soundlatch->acknowledge_r(machine().dummy_space(), 0); @@ -1803,13 +1808,10 @@ INPUT_PORTS_START( neogeo ) PORT_DIPSETTING( 0x00, DEF_STR( On ) ) PORT_START("SYSTEM") - PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_START2 ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x0aff, IP_ACTIVE_LOW, IPT_UNUSED ) + PORT_BIT( 0x0500, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, ngarcade_base_state, startsel_edge_joy_r, nullptr) PORT_BIT( 0x7000, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, neogeo_base_state, get_memcard_status, nullptr) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_CUSTOM ) /* Hardware type (AES=0, MVS=1). Some games check this and show a piracy warning screen if the hardware and BIOS don't match */ + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_CUSTOM ) // Hardware type (AES=0, MVS=1). Some games check this and show a piracy warning screen if the hardware and BIOS don't match PORT_START("AUDIO/COIN") PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 ) // coin 1 (combined) or P1 coin 1 (separate) for BIOS that supports it @@ -1903,8 +1905,6 @@ MACHINE_CONFIG_START(neogeo_base_state::neogeo_base) MCFG_ADDRESSABLE_LATCH_Q4_OUT_CB(NOOP) // memory card: register select enable/set to normal (what does it mean?) MCFG_ADDRESSABLE_LATCH_Q7_OUT_CB(WRITELINE(neogeo_base_state, set_palette_bank)) - MCFG_WATCHDOG_ADD("watchdog") - /* video hardware */ MCFG_DEFAULT_LAYOUT(layout_neogeo) @@ -1953,8 +1953,9 @@ MACHINE_CONFIG_START(ngarcade_base_state::neogeo_arcade) MCFG_ADDRESSABLE_LATCH_Q5_OUT_CB(WRITELINE(ngarcade_base_state, set_use_cart_audio)) MCFG_ADDRESSABLE_LATCH_Q6_OUT_CB(WRITELINE(ngarcade_base_state, set_save_ram_unlock)) - MCFG_WATCHDOG_MODIFY("watchdog") + MCFG_WATCHDOG_ADD("watchdog") MCFG_WATCHDOG_TIME_INIT(attotime::from_ticks(3244030, NEOGEO_MASTER_CLOCK)) + MCFG_UPD4990A_ADD("upd4990a", XTAL(32'768), NOOP, NOOP) MCFG_NVRAM_ADD_0FILL("saveram") @@ -2422,9 +2423,10 @@ MACHINE_CONFIG_START(mvs_led_state::fatfur2) NEOGEO_CONFIG_ONE_FIXED_CARTSLOT("rom_fatfur2") MACHINE_CONFIG_END -MACHINE_CONFIG_START(mvs_led_state::kizuna4p) - mv1_fixed(config); - MCFG_DEVICE_REMOVE("edge") +MACHINE_CONFIG_START(mvs_state::kizuna4p) + neogeo_arcade(config); + neogeo_mono(config); + MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD("edge", neogeo_arc_edge_fixed, "kiz4p", true) NEOGEO_CONFIG_ONE_FIXED_CARTSLOT("rom") @@ -2440,10 +2442,10 @@ MACHINE_CONFIG_START(mvs_led_state::kog) NEOGEO_CONFIG_ONE_FIXED_CARTSLOT("boot_kog") MACHINE_CONFIG_END -MACHINE_CONFIG_START(mvs_led_state::irrmaze) - mv1_fixed(config); +MACHINE_CONFIG_START(mvs_state::irrmaze) + neogeo_arcade(config); + neogeo_mono(config); - MCFG_DEVICE_REMOVE("edge") MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD("edge", neogeo_arc_edge_fixed, "irrmaze", true) MCFG_DEFAULT_LAYOUT(layout_irrmaze) @@ -2890,9 +2892,6 @@ static INPUT_PORTS_START( kizuna4p ) PORT_DIPNAME( 0x02, 0x00, DEF_STR( Players ) ) PORT_DIPLOCATION("SW:2") PORT_DIPSETTING( 0x02, "2" ) PORT_DIPSETTING( 0x00, "4" ) - - PORT_MODIFY("SYSTEM") - PORT_BIT( 0x0f00, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(DEVICE_SELF, mvs_led_state, kizuna4p_start_r, nullptr) INPUT_PORTS_END static INPUT_PORTS_START( vliner ) @@ -6948,7 +6947,7 @@ ROM_START( kizuna ) ROM_END -ROM_START( kizuna4p ) /* same cartridge as kizuna - 4-player mode is enabled by an extension board that plugs into a compatible MVS */ +ROM_START( kizuna4p ) /* same cartridge as kizuna - 4-player mode is enabled by FTC1B JAMMA splitter board that plugs into MV-1B/MV-1C */ ROM_REGION( 0x200000, "cslot1:maincpu", ROMREGION_BE|ROMREGION_16BIT ) ROM_LOAD16_WORD_SWAP( "216-p1.p1", 0x100000, 0x100000, CRC(75d2b3de) SHA1(ee778656c26828935ee2a2bfd0ce5a22aa681c10) ) /* mask rom TC5316200 */ ROM_CONTINUE( 0x000000, 0x100000 ) @@ -11490,7 +11489,7 @@ GAME( 1996, kof96, neogeo, neobase, neogeo, mvs_led_state, 0, RO GAME( 1996, kof96h, kof96, neobase, neogeo, mvs_led_state, 0, ROT0, "SNK", "The King of Fighters '96 (NGH-214)", MACHINE_SUPPORTS_SAVE ) GAME( 1996, ssideki4, neogeo, neobase, neogeo, mvs_led_state, 0, ROT0, "SNK", "The Ultimate 11 - The SNK Football Championship / Tokuten Ou - Honoo no Libero", MACHINE_SUPPORTS_SAVE ) GAME( 1996, kizuna, neogeo, neobase, neogeo, mvs_led_state, 0, ROT0, "SNK", "Kizuna Encounter - Super Tag Battle / Fu'un Super Tag Battle", MACHINE_SUPPORTS_SAVE ) -GAME( 1996, kizuna4p, kizuna, kizuna4p, kizuna4p, mvs_led_state, 0, ROT0, "SNK", "Kizuna Encounter - Super Tag Battle 4 Way Battle Version / Fu'un Super Tag Battle Special Version", MACHINE_SUPPORTS_SAVE ) +GAME( 1996, kizuna4p, kizuna, kizuna4p, kizuna4p, mvs_state, 0, ROT0, "SNK", "Kizuna Encounter - Super Tag Battle 4 Way Battle Version / Fu'un Super Tag Battle Special Version", MACHINE_SUPPORTS_SAVE ) GAME( 1996, samsho4, neogeo, neobase, neogeo, mvs_led_state, 0, ROT0, "SNK", "Samurai Shodown IV - Amakusa's Revenge / Samurai Spirits - Amakusa Kourin (NGM-222 ~ NGH-222)", MACHINE_SUPPORTS_SAVE ) GAME( 1996, samsho4k, samsho4, neobase, neogeo, mvs_led_state, 0, ROT0, "SNK", "Pae Wang Jeon Seol / Legend of a Warrior (Korean censored Samurai Shodown IV)", MACHINE_SUPPORTS_SAVE ) GAME( 1996, rbffspec, neogeo, neobase, neogeo, mvs_led_state, 0, ROT0, "SNK", "Real Bout Fatal Fury Special / Real Bout Garou Densetsu Special", MACHINE_SUPPORTS_SAVE ) @@ -11504,7 +11503,7 @@ GAME( 1997, kog, kof97, kog, neogeo, mvs_led_state, 0, RO GAME( 1997, lastblad, neogeo, neobase, neogeo, mvs_led_state, 0, ROT0, "SNK", "The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGM-2340)", MACHINE_SUPPORTS_SAVE ) GAME( 1997, lastbladh, lastblad, neobase, neogeo, mvs_led_state, 0, ROT0, "SNK", "The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGH-2340)", MACHINE_SUPPORTS_SAVE ) GAME( 1997, lastsold, lastblad, neobase, neogeo, mvs_led_state, 0, ROT0, "SNK", "The Last Soldier (Korean release of The Last Blade)", MACHINE_SUPPORTS_SAVE ) -GAME( 1997, irrmaze, neogeo, irrmaze, neogeo, mvs_led_state, 0, ROT0, "SNK / Saurus", "The Irritating Maze / Ultra Denryu Iraira Bou", MACHINE_SUPPORTS_SAVE ) +GAME( 1997, irrmaze, neogeo, irrmaze, neogeo, mvs_state, 0, ROT0, "SNK / Saurus", "The Irritating Maze / Ultra Denryu Iraira Bou", MACHINE_SUPPORTS_SAVE ) GAME( 1998, rbff2, neogeo, neobase, neogeo, mvs_led_state, 0, ROT0, "SNK", "Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - The Newcomers (NGM-2400)", MACHINE_SUPPORTS_SAVE ) GAME( 1998, rbff2h, rbff2, neobase, neogeo, mvs_led_state, 0, ROT0, "SNK", "Real Bout Fatal Fury 2 - The Newcomers / Real Bout Garou Densetsu 2 - The Newcomers (NGH-2400)", MACHINE_SUPPORTS_SAVE ) GAME( 1998, rbff2k, rbff2, neobase, neogeo, mvs_led_state, 0, ROT0, "SNK", "Real Bout Fatal Fury 2 - The Newcomers (Korean release)", MACHINE_SUPPORTS_SAVE ) // no Japanese title / mode diff --git a/src/mame/includes/neogeo.h b/src/mame/includes/neogeo.h index ab3d35d8073..c42a1fdef8b 100644 --- a/src/mame/includes/neogeo.h +++ b/src/mame/includes/neogeo.h @@ -208,6 +208,9 @@ private: class ngarcade_base_state : public neogeo_base_state { +public: + DECLARE_CUSTOM_INPUT_MEMBER(startsel_edge_joy_r); + protected: ngarcade_base_state(const machine_config &mconfig, device_type type, const char *tag) : neogeo_base_state(mconfig, type, tag)