mirror of
https://github.com/holub/mame
synced 2025-04-18 22:49:58 +03:00
neogeo.cpp: more accurate implementation of contollers
through slot devices. If you want to launch janshin in the multislot driver (neogeo) you shall now prescribe -edge "" -ctrl1 mahjong and set accordingly the dipswitch. The janshin driver already comes pre-configured in the proper way, instead. [Fabio Priuli]
This commit is contained in:
parent
b1c06acb61
commit
057eefd060
@ -1964,6 +1964,8 @@ if (BUSES["NEOGEO_CTRL"]~=null) then
|
||||
MAME_DIR .. "src/devices/bus/neogeo_ctrl/mahjong.h",
|
||||
MAME_DIR .. "src/devices/bus/neogeo_ctrl/dial.cpp",
|
||||
MAME_DIR .. "src/devices/bus/neogeo_ctrl/dial.h",
|
||||
MAME_DIR .. "src/devices/bus/neogeo_ctrl/irrmaze.cpp",
|
||||
MAME_DIR .. "src/devices/bus/neogeo_ctrl/irrmaze.h",
|
||||
MAME_DIR .. "src/devices/bus/neogeo_ctrl/kizuna4p.cpp",
|
||||
MAME_DIR .. "src/devices/bus/neogeo_ctrl/kizuna4p.h",
|
||||
}
|
||||
|
@ -3,6 +3,16 @@
|
||||
/**********************************************************************
|
||||
|
||||
SNK Neo Geo Controller Port emulation
|
||||
|
||||
This actually covers two separate piece of hardware of Neo Geo system:
|
||||
- The 15-pin controller ports that are used for controllers in the
|
||||
AES home system and for mahjong controllers in the MVS arcade PCB
|
||||
- The controller part of the main edge connector that is used for
|
||||
joystick inputs in the MVS arcade PCB
|
||||
|
||||
Technically, the latter is not a configurable slot, because it's not
|
||||
a component that arcade operators could simply change with a different
|
||||
controller, but this implementation allows for simpler code.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
@ -11,6 +21,7 @@
|
||||
#include "joystick.h"
|
||||
#include "mahjong.h"
|
||||
#include "dial.h"
|
||||
#include "irrmaze.h"
|
||||
#include "kizuna4p.h"
|
||||
|
||||
|
||||
@ -19,6 +30,7 @@
|
||||
//**************************************************************************
|
||||
|
||||
const device_type NEOGEO_CONTROL_PORT = &device_creator<neogeo_control_port_device>;
|
||||
const device_type NEOGEO_CTRL_EDGE_CONNECTOR = &device_creator<neogeo_ctrl_edge_port_device>;
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
@ -44,6 +56,25 @@ device_neogeo_control_port_interface::~device_neogeo_control_port_interface()
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_neogeo_ctrl_edge_interface - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
device_neogeo_ctrl_edge_interface::device_neogeo_ctrl_edge_interface(const machine_config &mconfig, device_t &device)
|
||||
: device_slot_card_interface(mconfig,device)
|
||||
{
|
||||
m_port = dynamic_cast<neogeo_ctrl_edge_port_device *>(device.owner());
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ~device_neogeo_ctrl_edge_interface - destructor
|
||||
//-------------------------------------------------
|
||||
|
||||
device_neogeo_ctrl_edge_interface::~device_neogeo_ctrl_edge_interface()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
@ -81,17 +112,17 @@ void neogeo_control_port_device::device_start()
|
||||
|
||||
UINT8 neogeo_control_port_device::read_ctrl()
|
||||
{
|
||||
UINT8 data = 0;
|
||||
UINT8 data = 0xff;
|
||||
if (m_device)
|
||||
data |= m_device->read_ctrl();
|
||||
data &= m_device->read_ctrl();
|
||||
return data;
|
||||
}
|
||||
|
||||
UINT8 neogeo_control_port_device::read_start_sel()
|
||||
{
|
||||
UINT8 data = 0;
|
||||
UINT8 data = 0xff;
|
||||
if (m_device)
|
||||
data |= m_device->read_start_sel();
|
||||
data &= m_device->read_start_sel();
|
||||
return data;
|
||||
}
|
||||
|
||||
@ -103,6 +134,68 @@ void neogeo_control_port_device::write_ctrlsel(UINT8 data)
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// neogeo_ctrl_edge_port_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
neogeo_ctrl_edge_port_device::neogeo_ctrl_edge_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, NEOGEO_CTRL_EDGE_CONNECTOR, "SNK Neo Geo Edge Connector (Controller)", tag, owner, clock, "neogeo_ctrl_edge", __FILE__),
|
||||
device_slot_interface(mconfig, *this), m_device(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// ~neogeo_ctrl_edge_port_device - destructor
|
||||
//-------------------------------------------------
|
||||
|
||||
neogeo_ctrl_edge_port_device::~neogeo_ctrl_edge_port_device()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void neogeo_ctrl_edge_port_device::device_start()
|
||||
{
|
||||
m_device = dynamic_cast<device_neogeo_ctrl_edge_interface *>(get_card_device());
|
||||
}
|
||||
|
||||
|
||||
READ8_MEMBER(neogeo_ctrl_edge_port_device::in0_r)
|
||||
{
|
||||
UINT8 data = 0xff;
|
||||
if (m_device)
|
||||
data &= m_device->in0_r(space, offset, mem_mask);
|
||||
return data;
|
||||
}
|
||||
|
||||
READ8_MEMBER(neogeo_ctrl_edge_port_device::in1_r)
|
||||
{
|
||||
UINT8 data = 0xff;
|
||||
if (m_device)
|
||||
data &= m_device->in1_r(space, offset, mem_mask);
|
||||
return data;
|
||||
}
|
||||
|
||||
UINT8 neogeo_ctrl_edge_port_device::read_start_sel()
|
||||
{
|
||||
UINT8 data = 0xff;
|
||||
if (m_device)
|
||||
data &= m_device->read_start_sel();
|
||||
return data;
|
||||
}
|
||||
|
||||
void neogeo_ctrl_edge_port_device::write_ctrlsel(UINT8 data)
|
||||
{
|
||||
if (m_device)
|
||||
m_device->write_ctrlsel(data);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// SLOT_INTERFACE( neogeo_control_port_devices )
|
||||
//-------------------------------------------------
|
||||
@ -112,12 +205,18 @@ SLOT_INTERFACE_START( neogeo_controls )
|
||||
SLOT_INTERFACE("mahjong", NEOGEO_MJCTRL)
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
SLOT_INTERFACE_START( neogeo_arc_ctrls )
|
||||
SLOT_INTERFACE_START( neogeo_arc_edge )
|
||||
SLOT_INTERFACE("joy", NEOGEO_JOY_AC)
|
||||
SLOT_INTERFACE("mahjong", NEOGEO_MJCTRL_AC)
|
||||
SLOT_INTERFACE("dial", NEOGEO_DIAL)
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
SLOT_INTERFACE_START( neogeo_kiz4p )
|
||||
SLOT_INTERFACE("kiz4p", NEOGEO_KIZ4P)
|
||||
SLOT_INTERFACE_START( neogeo_arc_edge_fixed )
|
||||
SLOT_INTERFACE("joy", NEOGEO_JOY_AC)
|
||||
SLOT_INTERFACE("dial", NEOGEO_DIAL)
|
||||
SLOT_INTERFACE("irrmaze", NEOGEO_IRRMAZE)
|
||||
SLOT_INTERFACE("kiz4p", NEOGEO_KIZ4P)
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
SLOT_INTERFACE_START( neogeo_arc_pin15 )
|
||||
SLOT_INTERFACE("mahjong", NEOGEO_MJCTRL)
|
||||
SLOT_INTERFACE_END
|
||||
|
||||
|
@ -19,6 +19,7 @@
|
||||
//**************************************************************************
|
||||
|
||||
class neogeo_control_port_device;
|
||||
class neogeo_ctrl_edge_port_device;
|
||||
|
||||
// ======================> device_neogeo_control_port_interface
|
||||
|
||||
@ -60,8 +61,50 @@ protected:
|
||||
};
|
||||
|
||||
|
||||
// ======================> device_neogeo_ctrl_edge_interface
|
||||
|
||||
class device_neogeo_ctrl_edge_interface : public device_slot_card_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
device_neogeo_ctrl_edge_interface(const machine_config &mconfig, device_t &device);
|
||||
virtual ~device_neogeo_ctrl_edge_interface();
|
||||
|
||||
virtual UINT8 read_start_sel() { return 0xff; }
|
||||
virtual DECLARE_READ8_MEMBER( in0_r ) { return 0xff; }
|
||||
virtual DECLARE_READ8_MEMBER( in1_r ) { return 0xff; }
|
||||
virtual void write_ctrlsel(UINT8 data) { }
|
||||
|
||||
protected:
|
||||
neogeo_ctrl_edge_port_device *m_port;
|
||||
};
|
||||
|
||||
// ======================> neogeo_ctrl_edge_port_device
|
||||
|
||||
class neogeo_ctrl_edge_port_device : public device_t,
|
||||
public device_slot_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
neogeo_ctrl_edge_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
virtual ~neogeo_ctrl_edge_port_device();
|
||||
|
||||
UINT8 read_start_sel();
|
||||
DECLARE_READ8_MEMBER( in0_r );
|
||||
DECLARE_READ8_MEMBER( in1_r );
|
||||
void write_ctrlsel(UINT8 data);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
device_neogeo_ctrl_edge_interface *m_device;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type NEOGEO_CONTROL_PORT;
|
||||
extern const device_type NEOGEO_CTRL_EDGE_CONNECTOR;
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
@ -72,11 +115,16 @@ extern const device_type NEOGEO_CONTROL_PORT;
|
||||
MCFG_DEVICE_ADD(_tag, NEOGEO_CONTROL_PORT, 0) \
|
||||
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _fixed)
|
||||
|
||||
#define MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD(_tag, _slot_intf, _def_slot, _fixed) \
|
||||
MCFG_DEVICE_ADD(_tag, NEOGEO_CTRL_EDGE_CONNECTOR, 0) \
|
||||
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _fixed)
|
||||
|
||||
|
||||
|
||||
SLOT_INTERFACE_EXTERN( neogeo_controls );
|
||||
SLOT_INTERFACE_EXTERN( neogeo_arc_ctrls );
|
||||
SLOT_INTERFACE_EXTERN( neogeo_kiz4p );
|
||||
SLOT_INTERFACE_EXTERN( neogeo_arc_edge );
|
||||
SLOT_INTERFACE_EXTERN( neogeo_arc_edge_fixed );
|
||||
SLOT_INTERFACE_EXTERN( neogeo_arc_pin15 );
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -16,17 +16,29 @@ const device_type NEOGEO_DIAL = &device_creator<neogeo_dial_device>;
|
||||
|
||||
|
||||
static INPUT_PORTS_START( neogeo_dial )
|
||||
PORT_START("JOY")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
|
||||
PORT_BIT( 0x90, IP_ACTIVE_LOW, IPT_BUTTON1 ) /* note it needs it from 0x80 when using paddle */
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 )
|
||||
PORT_START("JOY1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x90, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) /* note it needs it from 0x80 when using paddle */
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
|
||||
|
||||
PORT_START("DIAL")
|
||||
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(20)
|
||||
PORT_START("JOY2")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x90, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) /* note it needs it from 0x80 when using paddle */
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
|
||||
|
||||
PORT_START("DIAL1")
|
||||
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(20) PORT_PLAYER(1)
|
||||
|
||||
PORT_START("DIAL2")
|
||||
PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(25) PORT_KEYDELTA(20) PORT_PLAYER(2)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -50,9 +62,11 @@ ioport_constructor neogeo_dial_device::device_input_ports() const
|
||||
|
||||
neogeo_dial_device::neogeo_dial_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, NEOGEO_DIAL, "SNK Neo Geo Dial Controller", tag, owner, clock, "neogeo_dial", __FILE__),
|
||||
device_neogeo_control_port_interface(mconfig, *this),
|
||||
m_joy(*this, "JOY"),
|
||||
m_dial(*this, "DIAL")
|
||||
device_neogeo_ctrl_edge_interface(mconfig, *this),
|
||||
m_joy1(*this, "JOY1"),
|
||||
m_joy2(*this, "JOY2"),
|
||||
m_dial1(*this, "DIAL1"),
|
||||
m_dial2(*this, "DIAL2")
|
||||
{
|
||||
}
|
||||
|
||||
@ -78,16 +92,31 @@ void neogeo_dial_device::device_reset()
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// read_ctrl
|
||||
// in0_r
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT8 neogeo_dial_device::read_ctrl()
|
||||
READ8_MEMBER(neogeo_dial_device::in0_r)
|
||||
{
|
||||
UINT8 res = 0;
|
||||
if (m_ctrl_sel & 0x01)
|
||||
res = m_joy->read();
|
||||
res = m_joy1->read();
|
||||
else
|
||||
res = m_dial->read();
|
||||
res = m_dial1->read();
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// in1_r
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER(neogeo_dial_device::in1_r)
|
||||
{
|
||||
UINT8 res = 0;
|
||||
if (m_ctrl_sel & 0x01)
|
||||
res = m_joy2->read();
|
||||
else
|
||||
res = m_dial2->read();
|
||||
|
||||
return res;
|
||||
}
|
||||
|
@ -22,7 +22,7 @@
|
||||
// ======================> neogeo_dial_device
|
||||
|
||||
class neogeo_dial_device : public device_t,
|
||||
public device_neogeo_control_port_interface
|
||||
public device_neogeo_ctrl_edge_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
@ -37,12 +37,15 @@ protected:
|
||||
virtual void device_reset() override;
|
||||
|
||||
// device_neogeo_control_port_interface overrides
|
||||
virtual UINT8 read_ctrl() override;
|
||||
virtual DECLARE_READ8_MEMBER( in0_r ) override;
|
||||
virtual DECLARE_READ8_MEMBER( in1_r ) override;
|
||||
virtual void write_ctrlsel(UINT8 data) override;
|
||||
|
||||
private:
|
||||
required_ioport m_joy;
|
||||
required_ioport m_dial;
|
||||
required_ioport m_joy1;
|
||||
required_ioport m_joy2;
|
||||
required_ioport m_dial1;
|
||||
required_ioport m_dial2;
|
||||
UINT8 m_ctrl_sel;
|
||||
};
|
||||
|
||||
|
114
src/devices/bus/neogeo_ctrl/irrmaze.cpp
Normal file
114
src/devices/bus/neogeo_ctrl/irrmaze.cpp
Normal file
@ -0,0 +1,114 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Fabio Priuli
|
||||
/**********************************************************************
|
||||
|
||||
SNK Neo Geo Irritation Maze Analog Controller emulation
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "irrmaze.h"
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
const device_type NEOGEO_IRRMAZE = &device_creator<neogeo_irrmaze_device>;
|
||||
|
||||
|
||||
static INPUT_PORTS_START( neogeo_irrmaze )
|
||||
PORT_START("BUTTONS")
|
||||
PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
|
||||
|
||||
PORT_START("TRACK_X")
|
||||
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(10) PORT_KEYDELTA(20) PORT_REVERSE
|
||||
|
||||
PORT_START("TRACK_Y")
|
||||
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(10) PORT_KEYDELTA(20) PORT_REVERSE
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_ports - device-specific input ports
|
||||
//-------------------------------------------------
|
||||
|
||||
ioport_constructor neogeo_irrmaze_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME( neogeo_irrmaze );
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// neogeo_irrmaze_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
neogeo_irrmaze_device::neogeo_irrmaze_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, NEOGEO_IRRMAZE, "SNK Neo Geo Irritating Maze Analog Controller", tag, owner, clock, "neogeo_irrmaze", __FILE__),
|
||||
device_neogeo_ctrl_edge_interface(mconfig, *this),
|
||||
m_tx(*this, "TRACK_X"),
|
||||
m_ty(*this, "TRACK_Y"),
|
||||
m_buttons(*this, "BUTTONS")
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void neogeo_irrmaze_device::device_start()
|
||||
{
|
||||
save_item(NAME(m_ctrl_sel));
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void neogeo_irrmaze_device::device_reset()
|
||||
{
|
||||
m_ctrl_sel = 0;
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// in0_r
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER(neogeo_irrmaze_device::in0_r)
|
||||
{
|
||||
UINT8 res = 0;
|
||||
if (m_ctrl_sel & 0x01)
|
||||
res = m_ty->read();
|
||||
else
|
||||
res = m_tx->read();
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// in1_r
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER(neogeo_irrmaze_device::in1_r)
|
||||
{
|
||||
return m_buttons->read();
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// write_ctrlsel
|
||||
//-------------------------------------------------
|
||||
|
||||
void neogeo_irrmaze_device::write_ctrlsel(UINT8 data)
|
||||
{
|
||||
m_ctrl_sel = data;
|
||||
}
|
||||
|
57
src/devices/bus/neogeo_ctrl/irrmaze.h
Normal file
57
src/devices/bus/neogeo_ctrl/irrmaze.h
Normal file
@ -0,0 +1,57 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Fabio Priuli
|
||||
/**********************************************************************
|
||||
|
||||
SNK Neo Geo Dial controller emulation
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef __NEOGEO_IRRMAZE__
|
||||
#define __NEOGEO_IRRMAZE__
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
#include "ctrl.h"
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> neogeo_dial_device
|
||||
|
||||
class neogeo_irrmaze_device : public device_t,
|
||||
public device_neogeo_ctrl_edge_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
neogeo_irrmaze_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// optional information overrides
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// device_neogeo_control_port_interface overrides
|
||||
virtual DECLARE_READ8_MEMBER( in0_r ) override;
|
||||
virtual DECLARE_READ8_MEMBER( in1_r ) override;
|
||||
virtual void write_ctrlsel(UINT8 data) override;
|
||||
|
||||
private:
|
||||
required_ioport m_tx;
|
||||
required_ioport m_ty;
|
||||
required_ioport m_buttons;
|
||||
UINT8 m_ctrl_sel;
|
||||
};
|
||||
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type NEOGEO_IRRMAZE;
|
||||
|
||||
|
||||
#endif
|
@ -8,15 +8,23 @@
|
||||
|
||||
#include "joystick.h"
|
||||
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
|
||||
Implementation through the 15-pin controller port (used by AES)
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
const device_type NEOGEO_JOY_AC = &device_creator<neogeo_joy_ac_device>;
|
||||
const device_type NEOGEO_JOY = &device_creator<neogeo_joystick_device>;
|
||||
|
||||
|
||||
static INPUT_PORTS_START( neogeo_joy_ac )
|
||||
static INPUT_PORTS_START( neogeo_joy )
|
||||
PORT_START("JOY")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
|
||||
@ -26,11 +34,6 @@ static INPUT_PORTS_START( neogeo_joy_ac )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( neogeo_joy )
|
||||
PORT_INCLUDE( neogeo_joy_ac )
|
||||
|
||||
PORT_START("START_SELECT")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START )
|
||||
@ -42,11 +45,6 @@ INPUT_PORTS_END
|
||||
// input_ports - device-specific input ports
|
||||
//-------------------------------------------------
|
||||
|
||||
ioport_constructor neogeo_joy_ac_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME( neogeo_joy_ac );
|
||||
}
|
||||
|
||||
ioport_constructor neogeo_joystick_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME( neogeo_joy );
|
||||
@ -58,30 +56,118 @@ ioport_constructor neogeo_joystick_device::device_input_ports() const
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// neogeo_joy_ac_device / neogeo_joystick_device - constructor
|
||||
// neogeo_joystick_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
neogeo_joy_ac_device::neogeo_joy_ac_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source):
|
||||
device_t(mconfig, type, name, tag, owner, clock, shortname, source),
|
||||
device_neogeo_control_port_interface(mconfig, *this),
|
||||
m_joy(*this, "JOY")
|
||||
{
|
||||
}
|
||||
|
||||
neogeo_joy_ac_device::neogeo_joy_ac_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, NEOGEO_JOY_AC, "SNK Neo Geo Arcade Joystick", tag, owner, clock, "neogeo_joyac", __FILE__),
|
||||
device_neogeo_control_port_interface(mconfig, *this),
|
||||
m_joy(*this, "JOY")
|
||||
{
|
||||
}
|
||||
|
||||
neogeo_joystick_device::neogeo_joystick_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
neogeo_joy_ac_device(mconfig, NEOGEO_JOY, "SNK Neo Geo Joystick", tag, owner, clock, "neogeo_joy", __FILE__),
|
||||
device_t(mconfig, NEOGEO_JOY, "SNK Neo Geo Joystick", tag, owner, clock, "neogeo_joy", __FILE__),
|
||||
device_neogeo_control_port_interface(mconfig, *this),
|
||||
m_joy(*this, "JOY"),
|
||||
m_ss(*this, "START_SELECT")
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void neogeo_joystick_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific reset
|
||||
//-------------------------------------------------
|
||||
|
||||
void neogeo_joystick_device::device_reset()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// read_ctrl
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT8 neogeo_joystick_device::read_ctrl()
|
||||
{
|
||||
return m_joy->read();
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// read_start_sel
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT8 neogeo_joystick_device::read_start_sel()
|
||||
{
|
||||
return m_ss->read();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
|
||||
Implementation through the edge connector (used by MVS) and
|
||||
connecting two controllers
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
const device_type NEOGEO_JOY_AC = &device_creator<neogeo_joy_ac_device>;
|
||||
|
||||
|
||||
static INPUT_PORTS_START( neogeo_joy_ac )
|
||||
PORT_START("JOY1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
|
||||
|
||||
PORT_START("JOY2")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
|
||||
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)
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// input_ports - device-specific input ports
|
||||
//-------------------------------------------------
|
||||
|
||||
ioport_constructor neogeo_joy_ac_device::device_input_ports() const
|
||||
{
|
||||
return INPUT_PORTS_NAME( neogeo_joy_ac );
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// neogeo_joy_ac_device / neogeo_joystick_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
neogeo_joy_ac_device::neogeo_joy_ac_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
|
||||
device_t(mconfig, NEOGEO_JOY_AC, "SNK Neo Geo Arcade Joystick", tag, owner, clock, "neogeo_joyac", __FILE__),
|
||||
device_neogeo_ctrl_edge_interface(mconfig, *this),
|
||||
m_joy1(*this, "JOY1"),
|
||||
m_joy2(*this, "JOY2")
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
@ -101,20 +187,20 @@ void neogeo_joy_ac_device::device_reset()
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// read_ctrl
|
||||
// in0_r
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT8 neogeo_joy_ac_device::read_ctrl()
|
||||
READ8_MEMBER(neogeo_joy_ac_device::in0_r)
|
||||
{
|
||||
return m_joy->read();
|
||||
return m_joy1->read();
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// read_start_sel
|
||||
// in1_r
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT8 neogeo_joystick_device::read_start_sel()
|
||||
READ8_MEMBER(neogeo_joy_ac_device::in1_r)
|
||||
{
|
||||
return m_ss->read();
|
||||
return m_joy2->read();
|
||||
}
|
||||
|
||||
|
@ -19,14 +19,40 @@
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> neogeo_joy_ac_device
|
||||
// ======================> neogeo_joystick_device
|
||||
|
||||
class neogeo_joy_ac_device : public device_t,
|
||||
public device_neogeo_control_port_interface
|
||||
class neogeo_joystick_device : public device_t,
|
||||
public device_neogeo_control_port_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
neogeo_joystick_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// optional information overrides
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// device_neogeo_control_port_interface overrides
|
||||
virtual UINT8 read_ctrl() override;
|
||||
virtual UINT8 read_start_sel() override;
|
||||
|
||||
private:
|
||||
required_ioport m_joy;
|
||||
required_ioport m_ss;
|
||||
};
|
||||
|
||||
|
||||
// ======================> neogeo_joy_ac_device
|
||||
|
||||
class neogeo_joy_ac_device : public device_t,
|
||||
public device_neogeo_ctrl_edge_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
neogeo_joy_ac_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
|
||||
neogeo_joy_ac_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// optional information overrides
|
||||
@ -37,37 +63,19 @@ protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
// device_neogeo_control_port_interface overrides
|
||||
virtual UINT8 read_ctrl() override;
|
||||
|
||||
private:
|
||||
required_ioport m_joy;
|
||||
};
|
||||
|
||||
// ======================> neogeo_joystick_device
|
||||
|
||||
class neogeo_joystick_device : public neogeo_joy_ac_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
neogeo_joystick_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
// optional information overrides
|
||||
virtual ioport_constructor device_input_ports() const override;
|
||||
|
||||
protected:
|
||||
// device_neogeo_control_port_interface overrides
|
||||
virtual UINT8 read_start_sel() override;
|
||||
// device_neogeo_ctrl_edge_interface overrides
|
||||
virtual DECLARE_READ8_MEMBER( in0_r ) override;
|
||||
virtual DECLARE_READ8_MEMBER( in1_r ) override;
|
||||
|
||||
private:
|
||||
required_ioport m_ss;
|
||||
required_ioport m_joy1;
|
||||
required_ioport m_joy2;
|
||||
};
|
||||
|
||||
|
||||
|
||||
// device type definition
|
||||
extern const device_type NEOGEO_JOY_AC;
|
||||
extern const device_type NEOGEO_JOY;
|
||||
extern const device_type NEOGEO_JOY_AC;
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -17,28 +17,52 @@ const device_type NEOGEO_KIZ4P = &device_creator<neogeo_kizuna4p_device>;
|
||||
|
||||
static INPUT_PORTS_START( neogeo_kiz4p )
|
||||
PORT_START("JOY1")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Joy A - Up") PORT_PLAYER(1)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Joy A - Down") PORT_PLAYER(1)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_NAME("Joy A - Left") PORT_PLAYER(1)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_NAME("Joy A - Right") PORT_PLAYER(1)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Joy A - Button A") PORT_PLAYER(1)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Joy A - Button B") PORT_PLAYER(1)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Joy A - Button C") PORT_PLAYER(1)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Joy A - Button D") PORT_PLAYER(1)
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1)
|
||||
|
||||
PORT_START("JOY2")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Joy B - Up") PORT_PLAYER(2)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Joy B - Down") PORT_PLAYER(2)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_NAME("Joy B - Left") PORT_PLAYER(2)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_NAME("Joy B - Right") PORT_PLAYER(2)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Joy B - Button A") PORT_PLAYER(2)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Joy B - Button B") PORT_PLAYER(2)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Joy B - Button C") PORT_PLAYER(2)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Joy B - Button D") PORT_PLAYER(2)
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
|
||||
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_START("JOY3")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(3)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(3)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(3)
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(3)
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(3)
|
||||
|
||||
PORT_START("JOY4")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(4)
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4)
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4)
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4)
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4)
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4)
|
||||
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_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START3 )
|
||||
|
||||
PORT_START("START24")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START4 )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
@ -62,10 +86,13 @@ 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 clock) :
|
||||
device_t(mconfig, NEOGEO_KIZ4P, "SNK Neo Geo Kizuna 4P Controller", tag, owner, clock, "neogeo_kiz4p", __FILE__),
|
||||
device_neogeo_control_port_interface(mconfig, *this),
|
||||
device_neogeo_ctrl_edge_interface(mconfig, *this),
|
||||
m_joy1(*this, "JOY1"),
|
||||
m_joy2(*this, "JOY2"),
|
||||
m_ss(*this, "START")
|
||||
m_joy3(*this, "JOY3"),
|
||||
m_joy4(*this, "JOY4"),
|
||||
m_ss1(*this, "START13"),
|
||||
m_ss2(*this, "START24")
|
||||
{
|
||||
}
|
||||
|
||||
@ -91,23 +118,38 @@ void neogeo_kizuna4p_device::device_reset()
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// read_ctrl
|
||||
// in0_r
|
||||
//-------------------------------------------------
|
||||
|
||||
UINT8 neogeo_kizuna4p_device::read_ctrl()
|
||||
READ8_MEMBER(neogeo_kizuna4p_device::in0_r)
|
||||
{
|
||||
UINT8 res = 0;
|
||||
|
||||
if (m_ctrl_sel & 0x01)
|
||||
res = m_joy2->read();
|
||||
res = m_joy3->read();
|
||||
else
|
||||
res = m_joy1->read();
|
||||
|
||||
if (m_ctrl_sel & 0x04) res &= ((m_ctrl_sel & 0x01) ? ~0x20 : ~0x10);
|
||||
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// in1_r
|
||||
//-------------------------------------------------
|
||||
|
||||
READ8_MEMBER(neogeo_kizuna4p_device::in1_r)
|
||||
{
|
||||
UINT8 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;
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// read_start_sel
|
||||
@ -115,7 +157,7 @@ UINT8 neogeo_kizuna4p_device::read_ctrl()
|
||||
|
||||
UINT8 neogeo_kizuna4p_device::read_start_sel()
|
||||
{
|
||||
return BIT(m_ss->read(), m_ctrl_sel & 0x01);
|
||||
return (BIT(m_ss1->read(), m_ctrl_sel & 0x01)) | (BIT(m_ss2->read(), m_ctrl_sel & 0x01) << 2);
|
||||
}
|
||||
|
||||
|
||||
|
@ -22,7 +22,7 @@
|
||||
// ======================> neogeo_kizuna4p_device
|
||||
|
||||
class neogeo_kizuna4p_device : public device_t,
|
||||
public device_neogeo_control_port_interface
|
||||
public device_neogeo_ctrl_edge_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
@ -37,14 +37,18 @@ protected:
|
||||
virtual void device_reset() override;
|
||||
|
||||
// device_neogeo_control_port_interface overrides
|
||||
virtual UINT8 read_ctrl() override;
|
||||
virtual DECLARE_READ8_MEMBER( in0_r ) override;
|
||||
virtual DECLARE_READ8_MEMBER( in1_r ) override;
|
||||
virtual UINT8 read_start_sel() override;
|
||||
virtual void write_ctrlsel(UINT8 data) override;
|
||||
|
||||
private:
|
||||
required_ioport m_joy1;
|
||||
required_ioport m_joy2;
|
||||
required_ioport m_ss;
|
||||
required_ioport m_joy3;
|
||||
required_ioport m_joy4;
|
||||
required_ioport m_ss1;
|
||||
required_ioport m_ss2;
|
||||
UINT8 m_ctrl_sel;
|
||||
};
|
||||
|
||||
|
@ -633,18 +633,17 @@ WRITE8_MEMBER(neogeo_state::audio_cpu_enable_nmi_w)
|
||||
|
||||
READ16_MEMBER(neogeo_state::in0_r)
|
||||
{
|
||||
return (m_ctrl1->ctrl_r(space, offset) << 8) | m_dsw->read();
|
||||
return ((m_edge->in0_r(space, offset) & m_ctrl1->ctrl_r(space, offset)) << 8) | m_dsw->read();
|
||||
}
|
||||
|
||||
READ16_MEMBER(neogeo_state::irrmaze_in0_r)
|
||||
READ16_MEMBER(neogeo_state::in1_r)
|
||||
{
|
||||
UINT8 track_ipt = (m_controller_select & 0x01) ? m_tracky->read() : m_trackx->read();
|
||||
return (track_ipt << 8) | m_dsw->read();
|
||||
return ((m_edge->in1_r(space, offset) & m_ctrl2->ctrl_r(space, offset)) << 8) | 0xff;
|
||||
}
|
||||
|
||||
CUSTOM_INPUT_MEMBER(neogeo_state::kizuna4p_start_r)
|
||||
{
|
||||
return (m_ctrl1->read_start_sel()) | (m_ctrl2->read_start_sel() << 2) | ~0x05;
|
||||
return (m_edge->read_start_sel() & 0x05) | ~0x05;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(neogeo_state::io_control_w)
|
||||
@ -652,9 +651,9 @@ WRITE8_MEMBER(neogeo_state::io_control_w)
|
||||
switch (offset)
|
||||
{
|
||||
case 0x00:
|
||||
m_controller_select = data;
|
||||
if (m_ctrl1) m_ctrl1->write_ctrlsel(data);
|
||||
if (m_ctrl2) m_ctrl2->write_ctrlsel(data);
|
||||
if (m_edge) m_edge->write_ctrlsel(data);
|
||||
break;
|
||||
|
||||
case 0x10:
|
||||
@ -1025,7 +1024,7 @@ DRIVER_INIT_MEMBER(neogeo_state,neogeo)
|
||||
|
||||
// install controllers
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x300000, 0x300001, 0, 0x01ff7e, read16_delegate(FUNC(neogeo_state::in0_r), this));
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x340000, 0x340001, 0, 0x01fffe, read8_delegate(FUNC(neogeo_control_port_device::ctrl_r),(neogeo_control_port_device*)m_ctrl2), 0xff00);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x340000, 0x340001, 0, 0x01fffe, read16_delegate(FUNC(neogeo_state::in1_r), this));
|
||||
}
|
||||
|
||||
|
||||
@ -1072,7 +1071,6 @@ void neogeo_state::machine_start()
|
||||
save_item(NAME(m_irq3_pending));
|
||||
save_item(NAME(m_audio_cpu_nmi_enabled));
|
||||
save_item(NAME(m_audio_cpu_nmi_pending));
|
||||
save_item(NAME(m_controller_select));
|
||||
save_item(NAME(m_save_ram_unlocked));
|
||||
save_item(NAME(m_output_data));
|
||||
save_item(NAME(m_output_latch));
|
||||
@ -1423,8 +1421,10 @@ static MACHINE_CONFIG_DERIVED( mvs, neogeo_arcade )
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(main_map_slot)
|
||||
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl1", neogeo_arc_ctrls, "joy", false)
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl2", neogeo_arc_ctrls, "joy", false)
|
||||
MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD("edge", neogeo_arc_edge, "joy", false)
|
||||
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl1", neogeo_arc_pin15, "", false)
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl2", neogeo_arc_pin15, "", false)
|
||||
|
||||
MCFG_NEOGEO_CARTRIDGE_ADD("cartslot1", neogeo_cart, nullptr)
|
||||
MCFG_NEOGEO_CARTRIDGE_ADD("cartslot2", neogeo_cart, nullptr)
|
||||
|
@ -23,8 +23,12 @@ static MACHINE_CONFIG_DERIVED_CLASS( neogeo_noslot, neogeo_arcade, neogeo_noslot
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(main_map_noslot)
|
||||
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl1", neogeo_arc_ctrls, "joy", true)
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl2", neogeo_arc_ctrls, "joy", true)
|
||||
//joystick controller
|
||||
MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD("edge", neogeo_arc_edge_fixed, "joy", true)
|
||||
|
||||
//no mahjong controller
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl1", neogeo_arc_pin15, "", true)
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl2", neogeo_arc_pin15, "", true)
|
||||
|
||||
MCFG_MSLUGX_PROT_ADD("mslugx_prot")
|
||||
MCFG_SMA_PROT_ADD("sma_prot")
|
||||
@ -42,8 +46,12 @@ static MACHINE_CONFIG_DERIVED_CLASS( neogeo_kog, neogeo_arcade, neogeo_noslot_ko
|
||||
MCFG_CPU_MODIFY("maincpu")
|
||||
MCFG_CPU_PROGRAM_MAP(main_map_noslot)
|
||||
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl1", neogeo_arc_ctrls, "joy", true)
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl2", neogeo_arc_ctrls, "joy", true)
|
||||
//joystick controller
|
||||
MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD("edge", neogeo_arc_edge_fixed, "joy", true)
|
||||
|
||||
//no mahjong controller
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl1", neogeo_arc_pin15, "", true)
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl2", neogeo_arc_pin15, "", true)
|
||||
|
||||
MCFG_NGBOOTLEG_PROT_ADD("bootleg_prot")
|
||||
MCFG_KOG_PROT_ADD("kog_prot")
|
||||
@ -52,27 +60,34 @@ MACHINE_CONFIG_END
|
||||
// these basically correspond to the cabinets which were available in arcades:
|
||||
// with mahjong panel, with dial for Pop'n Bounce and with 4 controls for Kizuna...
|
||||
static MACHINE_CONFIG_DERIVED( neogeo_mj, neogeo_noslot )
|
||||
|
||||
//no joystick panel
|
||||
MCFG_DEVICE_REMOVE("edge")
|
||||
MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD("edge", neogeo_arc_edge_fixed, "", true)
|
||||
|
||||
//P1 mahjong controller
|
||||
MCFG_DEVICE_REMOVE("ctrl1")
|
||||
MCFG_DEVICE_REMOVE("ctrl2")
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl1", neogeo_arc_ctrls, "mahjong", true)
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl2", neogeo_arc_ctrls, "", true)
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl1", neogeo_arc_pin15, "mahjong", true)
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl2", neogeo_arc_pin15, "", true)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( neogeo_dial, neogeo_noslot )
|
||||
MCFG_DEVICE_REMOVE("ctrl1")
|
||||
MCFG_DEVICE_REMOVE("ctrl2")
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl1", neogeo_arc_ctrls, "dial", true)
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl2", neogeo_arc_ctrls, "dial", true)
|
||||
MCFG_DEVICE_REMOVE("edge")
|
||||
MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD("edge", neogeo_arc_edge_fixed, "dial", true)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( neogeo_imaze, neogeo_noslot )
|
||||
MCFG_DEVICE_REMOVE("edge")
|
||||
MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD("edge", neogeo_arc_edge_fixed, "irrmaze", true)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( neogeo_kiz4p, neogeo_noslot )
|
||||
MCFG_DEVICE_REMOVE("ctrl1")
|
||||
MCFG_DEVICE_REMOVE("ctrl2")
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl1", neogeo_kiz4p, "kiz4p", true)
|
||||
MCFG_NEOGEO_CONTROL_PORT_ADD("ctrl2", neogeo_kiz4p, "kiz4p", true)
|
||||
MCFG_DEVICE_REMOVE("edge")
|
||||
MCFG_NEOGEO_CONTROL_EDGE_CONNECTOR_ADD("edge", neogeo_arc_edge_fixed, "kiz4p", true)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
// this is used by V-Liner and Irritating Maze, which handle differently inputs...
|
||||
// this is used by V-Liner, which handles differently inputs...
|
||||
static MACHINE_CONFIG_DERIVED( neogeo_noctrl, neogeo_noslot )
|
||||
MCFG_DEVICE_REMOVE("ctrl1")
|
||||
MCFG_DEVICE_REMOVE("ctrl2")
|
||||
@ -224,19 +239,6 @@ static INPUT_PORTS_START( irrmaze )
|
||||
PORT_MODIFY("SYSTEM")
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("BUTTONS")
|
||||
PORT_BIT( 0x0fff, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
|
||||
|
||||
PORT_START("TRACK_X")
|
||||
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_X ) PORT_SENSITIVITY(10) PORT_KEYDELTA(20) PORT_REVERSE
|
||||
|
||||
PORT_START("TRACK_Y")
|
||||
PORT_BIT( 0xff, 0x00, IPT_TRACKBALL_Y ) PORT_SENSITIVITY(10) PORT_KEYDELTA(20) PORT_REVERSE
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( vliner )
|
||||
@ -8861,17 +8863,6 @@ DRIVER_INIT_MEMBER(neogeo_noslot_state,jockeygp)
|
||||
// m_maincpu->space(AS_PROGRAM).install_read_port(0x2c0000, 0x2c0001, "IN6");
|
||||
}
|
||||
|
||||
|
||||
DRIVER_INIT_MEMBER(neogeo_noslot_state,irrmaze)
|
||||
{
|
||||
if (!m_cartslots[0]) m_banked_cart->install_banks(machine(), m_maincpu, m_region_maincpu->base(), m_region_maincpu->bytes());
|
||||
|
||||
m_sprgen->m_fixed_layer_bank_type = 0;
|
||||
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x300000, 0x300001, 0, 0x01ff7e, read16_delegate(FUNC(neogeo_state::irrmaze_in0_r), this));
|
||||
m_maincpu->space(AS_PROGRAM).install_read_port(0x340000, 0x340001, 0, 0x01fffe, "BUTTONS");
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(neogeo_noslot_state,vliner)
|
||||
{
|
||||
if (!m_cartslots[0]) m_banked_cart->install_banks(machine(), m_maincpu, m_region_maincpu->base(), m_region_maincpu->bytes());
|
||||
@ -9676,7 +9667,7 @@ GAME( 1997, kog, kof97, neogeo_kog, neogeo, neogeo_noslot_kog_sta
|
||||
GAME( 1997, lastblad, neogeo, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "SNK", "The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGM-2340)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1997, lastbladh, lastblad, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "SNK", "The Last Blade / Bakumatsu Roman - Gekka no Kenshi (NGH-2340)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1997, lastsold, lastblad, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "SNK", "The Last Soldier (Korean release of The Last Blade)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1997, irrmaze, neogeo, neogeo_noctrl, irrmaze, neogeo_noslot_state, irrmaze, ROT0, "SNK / Saurus", "The Irritating Maze / Ultra Denryu Iraira Bou", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1997, irrmaze, neogeo, neogeo_imaze, irrmaze, neogeo_state, neogeo, ROT0, "SNK / Saurus", "The Irritating Maze / Ultra Denryu Iraira Bou", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1998, rbff2, neogeo, neogeo_noslot, neogeo, neogeo_state, neogeo, 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, neogeo_noslot, neogeo, neogeo_state, neogeo, 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, neogeo_noslot, neogeo, neogeo_state, neogeo, ROT0, "SNK", "Real Bout Fatal Fury 2 - The Newcomers (Korean release)", MACHINE_SUPPORTS_SAVE ) // no Japanese title / mode
|
||||
|
@ -140,7 +140,6 @@ void ng_aes_state::common_machine_start()
|
||||
save_item(NAME(m_irq3_pending));
|
||||
save_item(NAME(m_audio_cpu_nmi_enabled));
|
||||
save_item(NAME(m_audio_cpu_nmi_pending));
|
||||
save_item(NAME(m_controller_select));
|
||||
save_item(NAME(m_use_cart_vectors));
|
||||
save_item(NAME(m_use_cart_audio));
|
||||
//save_item(NAME(m_main_cpu_bank_address));
|
||||
|
@ -52,6 +52,7 @@ public:
|
||||
m_dsw(*this, "DSW"),
|
||||
m_trackx(*this, "TRACK_X"),
|
||||
m_tracky(*this, "TRACK_Y"),
|
||||
m_edge(*this, "edge"),
|
||||
m_ctrl1(*this, "ctrl1"),
|
||||
m_ctrl2(*this, "ctrl2"),
|
||||
m_sprgen(*this, "spritegen"),
|
||||
@ -81,7 +82,7 @@ public:
|
||||
DECLARE_WRITE16_MEMBER(neogeo_video_register_w);
|
||||
READ16_MEMBER(banked_vectors_r);
|
||||
DECLARE_READ16_MEMBER(in0_r);
|
||||
DECLARE_READ16_MEMBER(irrmaze_in0_r);
|
||||
DECLARE_READ16_MEMBER(in1_r);
|
||||
|
||||
void set_slot_number(int slot);
|
||||
|
||||
@ -161,7 +162,6 @@ protected:
|
||||
enum {NEOGEO_MVS, NEOGEO_AES, NEOGEO_CD} m_type;
|
||||
|
||||
// internal state
|
||||
UINT8 m_controller_select;
|
||||
bool m_recurse;
|
||||
bool m_audio_cpu_nmi_enabled;
|
||||
bool m_audio_cpu_nmi_pending;
|
||||
@ -177,6 +177,7 @@ protected:
|
||||
optional_ioport m_dsw;
|
||||
optional_ioport m_trackx;
|
||||
optional_ioport m_tracky;
|
||||
optional_device<neogeo_ctrl_edge_port_device> m_edge;
|
||||
optional_device<neogeo_control_port_device> m_ctrl1;
|
||||
optional_device<neogeo_control_port_device> m_ctrl2;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user