(MESS) vcs/ctrl: Cleanup. (nw)

This commit is contained in:
Curt Coder 2014-03-12 06:45:01 +00:00
parent 601b9c4bed
commit 1d3b1717a6
7 changed files with 79 additions and 115 deletions

View File

@ -14,7 +14,7 @@
//**************************************************************************
// GLOBAL VARIABLES
// DEVICE DEFINITION
//**************************************************************************
const device_type VCS_CONTROL_PORT = &device_creator<vcs_control_port_device>;
@ -29,22 +29,13 @@ const device_type VCS_CONTROL_PORT = &device_creator<vcs_control_port_device>;
// device_vcs_control_port_interface - constructor
//-------------------------------------------------
device_vcs_control_port_interface::device_vcs_control_port_interface(const machine_config &mconfig, device_t &device)
: device_slot_card_interface(mconfig,device)
device_vcs_control_port_interface::device_vcs_control_port_interface(const machine_config &mconfig, device_t &device) :
device_slot_card_interface(mconfig, device)
{
m_port = dynamic_cast<vcs_control_port_device *>(device.owner());
}
//-------------------------------------------------
// ~device_vcs_control_port_interface - destructor
//-------------------------------------------------
device_vcs_control_port_interface::~device_vcs_control_port_interface()
{
}
//**************************************************************************
// LIVE DEVICE
@ -57,16 +48,7 @@ device_vcs_control_port_interface::~device_vcs_control_port_interface()
vcs_control_port_device::vcs_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, VCS_CONTROL_PORT, "Atari VCS control port", tag, owner, clock, "vcs_control_port", __FILE__),
device_slot_interface(mconfig, *this),
m_trigger_handler(*this)
{
}
//-------------------------------------------------
// vcs_control_port_device - destructor
//-------------------------------------------------
vcs_control_port_device::~vcs_control_port_device()
m_write_trigger(*this)
{
}
@ -79,31 +61,21 @@ void vcs_control_port_device::device_start()
{
m_device = dynamic_cast<device_vcs_control_port_interface *>(get_card_device());
m_trigger_handler.resolve_safe();
m_write_trigger.resolve_safe();
}
UINT8 vcs_control_port_device::joy_r() { UINT8 data = 0xff; if (exists()) data = m_device->vcs_joy_r(); return data; }
READ8_MEMBER( vcs_control_port_device::joy_r ) { return joy_r(); }
UINT8 vcs_control_port_device::pot_x_r() { UINT8 data = 0xff; if (exists()) data = m_device->vcs_pot_x_r(); return data; }
READ8_MEMBER( vcs_control_port_device::pot_x_r ) { return pot_x_r(); }
UINT8 vcs_control_port_device::pot_y_r() { UINT8 data = 0xff; if (exists()) data = m_device->vcs_pot_y_r(); return data; }
READ8_MEMBER( vcs_control_port_device::pot_y_r ) { return pot_y_r(); }
void vcs_control_port_device::joy_w( UINT8 data ) { if ( exists() ) m_device->vcs_joy_w( data ); }
WRITE8_MEMBER( vcs_control_port_device::joy_w ) { joy_w(data); }
bool vcs_control_port_device::exists() { return m_device != NULL; }
bool vcs_control_port_device::has_pot_x() { return exists() && m_device->has_pot_x(); }
bool vcs_control_port_device::has_pot_y() { return exists() && m_device->has_pot_y(); }
void vcs_control_port_device::trigger_w(int state)
{
m_trigger_handler(state);
}
//-------------------------------------------------
// SLOT_INTERFACE( vcs_control_port_devices )
//-------------------------------------------------
#include "joybooster.h"
#include "joystick.h"
#include "keypad.h"
#include "lightpen.h"
#include "paddles.h"
#include "wheel.h"
SLOT_INTERFACE_START( vcs_control_port_devices )
SLOT_INTERFACE("joy", VCS_JOYSTICK)
SLOT_INTERFACE("pad", VCS_PADDLES)

View File

@ -30,8 +30,8 @@
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false)
#define MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(_devcb) \
devcb = &vcs_control_port_device::set_trigger_handler(*device, DEVCB2_##_devcb);
#define MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(_write) \
devcb = &vcs_control_port_device::set_trigger_wr_callback(*device, DEVCB2_##_write);
@ -39,70 +39,17 @@
// TYPE DEFINITIONS
//**************************************************************************
// ======================> vcs_control_port_device
class device_vcs_control_port_interface;
class vcs_control_port_device : public device_t,
public device_slot_interface
{
public:
// construction/destruction
vcs_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual ~vcs_control_port_device();
// static configuration helpers
template<class _Object> static devcb2_base &set_trigger_handler(device_t &device, _Object object) { return downcast<vcs_control_port_device &>(device).m_trigger_handler.set_callback(object); }
// computer interface
// Data returned by the joy_r methods:
// bit 0 - pin 1 - Up
// bit 1 - pin 2 - Down
// bit 2 - pin 3 - Left
// bit 3 - pin 4 - Right
// bit 4 - pin 5 -
// bit 5 - pin 6 - Button
// pin 7 - +5V
// pin 8 - GND
// bit 6 - pin 9 -
//
UINT8 joy_r();
DECLARE_READ8_MEMBER( joy_r );
UINT8 pot_x_r();
DECLARE_READ8_MEMBER( pot_x_r );
UINT8 pot_y_r();
DECLARE_READ8_MEMBER( pot_y_r );
void joy_w( UINT8 data );
DECLARE_WRITE8_MEMBER( joy_w );
bool exists();
bool has_pot_x();
bool has_pot_y();
void trigger_w(int state);
protected:
// device-level overrides
virtual void device_start();
device_vcs_control_port_interface *m_device;
private:
devcb2_write_line m_trigger_handler;
};
class vcs_control_port_device;
// ======================> device_vcs_control_port_interface
// class representing interface-specific live vcs_expansion card
class device_vcs_control_port_interface : public device_slot_card_interface
{
public:
// construction/destruction
device_vcs_control_port_interface(const machine_config &mconfig, device_t &device);
virtual ~device_vcs_control_port_interface();
virtual ~device_vcs_control_port_interface() { }
virtual UINT8 vcs_joy_r() { return 0xff; };
virtual UINT8 vcs_pot_x_r() { return 0xff; };
@ -117,19 +64,64 @@ protected:
};
// ======================> vcs_control_port_device
class vcs_control_port_device : public device_t,
public device_slot_interface
{
public:
// construction/destruction
vcs_control_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
virtual ~vcs_control_port_device() { }
// static configuration helpers
template<class _Object> static devcb2_base &set_trigger_wr_callback(device_t &device, _Object object) { return downcast<vcs_control_port_device &>(device).m_write_trigger.set_callback(object); }
// computer interface
// Data returned by the joy_r methods:
// bit 0 - pin 1 - Up
// bit 1 - pin 2 - Down
// bit 2 - pin 3 - Left
// bit 3 - pin 4 - Right
// bit 4 - pin 5 -
// bit 5 - pin 6 - Button
// pin 7 - +5V
// pin 8 - GND
// bit 6 - pin 9 -
//
UINT8 joy_r() { UINT8 data = 0xff; if (exists()) data = m_device->vcs_joy_r(); return data; }
DECLARE_READ8_MEMBER( joy_r ) { return joy_r(); }
UINT8 pot_x_r() { UINT8 data = 0xff; if (exists()) data = m_device->vcs_pot_x_r(); return data; }
DECLARE_READ8_MEMBER( pot_x_r ) { return pot_x_r(); }
UINT8 pot_y_r() { UINT8 data = 0xff; if (exists()) data = m_device->vcs_pot_y_r(); return data; }
DECLARE_READ8_MEMBER( pot_y_r ) { return pot_y_r(); }
void joy_w( UINT8 data ) { if ( exists() ) m_device->vcs_joy_w( data ); }
DECLARE_WRITE8_MEMBER( joy_w );
bool exists() { return m_device != NULL; }
bool has_pot_x() { return exists() && m_device->has_pot_x(); }
bool has_pot_y() { return exists() && m_device->has_pot_y(); }
void trigger_w(int state) { m_write_trigger(state); }
protected:
// device-level overrides
virtual void device_start();
device_vcs_control_port_interface *m_device;
private:
devcb2_write_line m_write_trigger;
};
// device type definition
extern const device_type VCS_CONTROL_PORT;
// slot devices
#include "joybooster.h"
#include "joystick.h"
#include "keypad.h"
#include "lightpen.h"
#include "paddles.h"
#include "wheel.h"
SLOT_INTERFACE_EXTERN( vcs_control_port_devices );
#endif

View File

@ -1486,7 +1486,7 @@ static MACHINE_CONFIG_START( ntsc, c128_state )
MCFG_MOS6526_PORT_B_CALLBACKS(READ8(c128_state, cia2_pb_r), WRITE8(c128_state, cia2_pb_w), DEVWRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_8))
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", DEVWRITELINE(MOS6526_2_TAG, mos6526_device, flag_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL)
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS8564_TAG, mos8564_device, lp_w))
MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(DEVWRITELINE(MOS8564_TAG, mos8564_device, lp_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy")
MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6567_CLOCK, c64_expansion_cards, NULL)
MCFG_C64_EXPANSION_SLOT_IRQ_CALLBACKS(WRITELINE(c128_state, exp_irq_w), WRITELINE(c128_state, exp_nmi_w), WRITELINE(c128_state, exp_reset_w))
@ -1624,7 +1624,7 @@ static MACHINE_CONFIG_START( pal, c128_state )
MCFG_MOS6526_PORT_B_CALLBACKS(READ8(c128_state, cia2_pb_r), WRITE8(c128_state, cia2_pb_w), DEVWRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_8))
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", DEVWRITELINE(MOS6526_2_TAG, mos6526_device, flag_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL)
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS8566_TAG, mos8566_device, lp_w))
MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(DEVWRITELINE(MOS8566_TAG, mos8566_device, lp_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy")
MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6569_CLOCK, c64_expansion_cards, NULL)
MCFG_C64_EXPANSION_SLOT_IRQ_CALLBACKS(WRITELINE(c128_state, exp_irq_w), WRITELINE(c128_state, exp_nmi_w), WRITELINE(c128_state, exp_reset_w))

View File

@ -1116,7 +1116,7 @@ static MACHINE_CONFIG_START( ntsc, c64_state )
MCFG_CBM_IEC_BUS_SRQ_CALLBACK(DEVWRITELINE(MOS6526_1_TAG, mos6526_device, flag_w))
MCFG_CBM_IEC_BUS_ATN_CALLBACK(DEVWRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_9))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL)
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6567_TAG, mos6567_device, lp_w))
MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(DEVWRITELINE(MOS6567_TAG, mos6567_device, lp_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy")
MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6567_CLOCK, c64_expansion_cards, NULL)
MCFG_C64_EXPANSION_SLOT_IRQ_CALLBACKS(WRITELINE(c64_state, exp_irq_w), WRITELINE(c64_state, exp_nmi_w), WRITELINE(c64_state, exp_reset_w))
@ -1245,7 +1245,7 @@ static MACHINE_CONFIG_START( pal, c64_state )
MCFG_CBM_IEC_BUS_SRQ_CALLBACK(DEVWRITELINE(MOS6526_1_TAG, mos6526_device, flag_w))
MCFG_CBM_IEC_BUS_ATN_CALLBACK(DEVWRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_9))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL)
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w))
MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy")
MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6569_CLOCK, c64_expansion_cards, NULL)
MCFG_C64_EXPANSION_SLOT_IRQ_CALLBACKS(WRITELINE(c64_state, exp_irq_w), WRITELINE(c64_state, exp_nmi_w), WRITELINE(c64_state, exp_reset_w))
@ -1351,7 +1351,7 @@ static MACHINE_CONFIG_START( pal_gs, c64gs_state )
MCFG_CBM_IEC_BUS_SRQ_CALLBACK(DEVWRITELINE(MOS6526_1_TAG, mos6526_device, flag_w))
MCFG_CBM_IEC_BUS_ATN_CALLBACK(DEVWRITELINE(PET_USER_PORT_TAG, pet_user_port_device, write_9))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL)
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w))
MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy")
MCFG_C64_EXPANSION_SLOT_ADD(C64_EXPANSION_SLOT_TAG, VIC6569_CLOCK, c64_expansion_cards, NULL)
MCFG_C64_EXPANSION_SLOT_IRQ_CALLBACKS(WRITELINE(c64_state, exp_irq_w), WRITELINE(c64_state, exp_nmi_w), WRITELINE(c64_state, exp_reset_w))

View File

@ -2181,7 +2181,7 @@ static MACHINE_CONFIG_START( p500_ntsc, p500_state )
MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i1_w))
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, NULL, DEVWRITELINE(MOS6526_TAG, mos6526_device, flag_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL)
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6567_TAG, mos6567_device, lp_w))
MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(DEVWRITELINE(MOS6567_TAG, mos6567_device, lp_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, NULL)
MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, VIC6567_CLOCK, cbm2_expansion_cards, NULL)
MCFG_CBM2_USER_PORT_ADD(CBM2_USER_PORT_TAG, p500_user_intf, cbm2_user_port_cards, NULL)
@ -2247,7 +2247,7 @@ static MACHINE_CONFIG_START( p500_pal, p500_state )
MCFG_IEEE488_SRQ_CALLBACK(DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i1_w))
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, NULL, DEVWRITELINE(MOS6526_TAG, mos6526_device, flag_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL)
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w))
MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(DEVWRITELINE(MOS6569_TAG, mos6569_device, lp_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, NULL)
MCFG_CBM2_EXPANSION_SLOT_ADD(CBM2_EXPANSION_SLOT_TAG, VIC6569_CLOCK, cbm2_expansion_cards, NULL)
MCFG_CBM2_USER_PORT_ADD(CBM2_USER_PORT_TAG, p500_user_intf, cbm2_user_port_cards, NULL)

View File

@ -626,7 +626,7 @@ static MACHINE_CONFIG_START( vic10, vic10_state )
MCFG_MOS6526_PORT_B_CALLBACKS(READ8(vic10_state, cia_pb_r), WRITE8(vic10_state, cia_pb_w), NULL)
MCFG_PET_DATASSETTE_PORT_ADD(PET_DATASSETTE_PORT_TAG, cbm_datassette_devices, "c1530", DEVWRITELINE(MOS6526_TAG, mos6526_device, flag_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, NULL)
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(DEVWRITELINE(MOS6566_TAG, mos6566_device, lp_w))
MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(DEVWRITELINE(MOS6566_TAG, mos6566_device, lp_w))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL2_TAG, vcs_control_port_devices, "joy")
MCFG_VIC10_EXPANSION_SLOT_ADD(VIC10_EXPANSION_SLOT_TAG, VIC6566_CLOCK, vic10_expansion_cards, NULL)
MCFG_VIC10_EXPANSION_SLOT_IRQ_CALLBACKS(WRITELINE(vic10_state, exp_irq_w), WRITELINE(vic10_state, exp_reset_w))

View File

@ -679,7 +679,7 @@ static MACHINE_CONFIG_START( vic20, vic20_state )
MCFG_CBM_IEC_BUS_SRQ_CALLBACK(DEVWRITELINE(M6522_2_TAG, via6522_device, write_cb1))
MCFG_VCS_CONTROL_PORT_ADD(CONTROL1_TAG, vcs_control_port_devices, "joy")
MCFG_VCS_CONTROL_PORT_TRIGGER_HANDLER(WRITELINE(vic20_state, write_light_pen))
MCFG_VCS_CONTROL_PORT_TRIGGER_CALLBACK(WRITELINE(vic20_state, write_light_pen))
MCFG_PET_USER_PORT_ADD(PET_USER_PORT_TAG, vic20_user_port_cards, NULL)
MCFG_PET_USER_PORT_3_HANDLER(WRITELINE(vic20_state, exp_reset_w))