summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/devices/bus/neogeo_ctrl/ctrl.cpp2
-rw-r--r--src/devices/bus/neogeo_ctrl/irrmaze.cpp14
-rw-r--r--src/devices/bus/neogeo_ctrl/irrmaze.h3
-rw-r--r--src/devices/bus/neogeo_ctrl/joystick.cpp27
-rw-r--r--src/devices/bus/neogeo_ctrl/joystick.h10
-rw-r--r--src/devices/bus/neogeo_ctrl/kizuna4p.cpp63
-rw-r--r--src/devices/bus/neogeo_ctrl/kizuna4p.h16
-rw-r--r--src/devices/bus/neogeo_ctrl/mahjong.cpp19
-rw-r--r--src/devices/bus/neogeo_ctrl/mahjong.h5
-rw-r--r--src/mame/drivers/neogeo.cpp85
-rw-r--r--src/mame/includes/neogeo.h3
11 files changed, 125 insertions, 122 deletions
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)
@@ -102,6 +107,15 @@ READ8_MEMBER(neogeo_irrmaze_device::in1_r)
}
//-------------------------------------------------
+// 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")
{
}
@@ -182,28 +187,28 @@ void neogeo_joy_ac_device::device_start()
//-------------------------------------------------
-// device_reset - device-specific reset
+// in0_r
//-------------------------------------------------
-void neogeo_joy_ac_device::device_reset()
+READ8_MEMBER(neogeo_joy_ac_device::in0_r)
{
+ return m_joy[0]->read();
}
-
//-------------------------------------------------
-// in0_r
+// in1_r
//-------------------------------------------------
-READ8_MEMBER(neogeo_joy_ac_device::in0_r)
+READ8_MEMBER(neogeo_joy_ac_device::in1_r)
{
- return m_joy1->read();
+ return m_joy[1]->read();
}
//-------------------------------------------------
-// in1_r
+// read_start_sel
//-------------------------------------------------
-READ8_MEMBER(neogeo_joy_ac_device::in1_r)
+uint8_t neogeo_joy_ac_device::read_start_sel()
{
- return m_joy2->read();
+ 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)
{
}
@@ -104,17 +110,8 @@ 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")
{
}
@@ -132,6 +134,15 @@ uint8_t neogeo_mjctrl_ac_device::read_ctrl()
}
//-------------------------------------------------
+// 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)