neogeo updates:

* move start buttons to controllers, clean up FTC1B a little
* SIT and FTC1B are only compatible with MV-1B/MV-1C cost-reduced boards
This commit is contained in:
Vas Crabb 2018-04-28 21:11:02 +10:00
parent f2568bb918
commit 69ab2c544b
11 changed files with 127 additions and 124 deletions

View File

@ -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

View File

@ -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
//-------------------------------------------------

View File

@ -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

View File

@ -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();
}

View File

@ -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;
};

View File

@ -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();
}

View File

@ -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;
};

View File

@ -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
//-------------------------------------------------

View File

@ -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;
};

View File

@ -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

View File

@ -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)