pc_kbdc_device: converted to devcb2 (nw)

This commit is contained in:
Ivan Vangelista 2014-04-16 16:57:56 +00:00
parent 121d5e1907
commit c1fb959dbd
7 changed files with 37 additions and 94 deletions

View File

@ -69,6 +69,8 @@ const device_type PC_KBDC = &device_creator<pc_kbdc_device>;
//-------------------------------------------------
pc_kbdc_device::pc_kbdc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) :
device_t(mconfig, PC_KBDC, "PC_KBDC", tag, owner, clock, "pc_kbdc", __FILE__),
m_out_clock_cb(*this),
m_out_data_cb(*this),
m_clock_state(-1),
m_data_state(-1),
m_kb_clock_state(1),
@ -77,30 +79,6 @@ pc_kbdc_device::pc_kbdc_device(const machine_config &mconfig, const char *tag, d
{
}
//-------------------------------------------------
// device_config_complete - perform any
// operations now that the configuration is
// complete
//-------------------------------------------------
void pc_kbdc_device::device_config_complete()
{
// inherit a copy of the static data
const pc_kbdc_interface *intf = reinterpret_cast<const pc_kbdc_interface *>(static_config());
if (intf != NULL)
{
*static_cast<pc_kbdc_interface *>(this) = *intf;
}
// or initialize to defaults if none provided
else
{
memset(&m_out_clock_cb, 0, sizeof(m_out_clock_cb));
memset(&m_out_data_cb, 0, sizeof(m_out_data_cb));
}
}
void pc_kbdc_device::set_keyboard( device_pc_kbd_interface *keyboard )
{
m_keyboard = keyboard;
@ -113,8 +91,8 @@ void pc_kbdc_device::set_keyboard( device_pc_kbd_interface *keyboard )
void pc_kbdc_device::device_start()
{
// resolve callbacks
m_out_clock_func.resolve(m_out_clock_cb, *this);
m_out_data_func.resolve(m_out_data_cb, *this);
m_out_clock_cb.resolve_safe();
m_out_data_cb.resolve_safe();
}
@ -144,7 +122,7 @@ void pc_kbdc_device::update_clock_state()
m_clock_state = new_clock_state;
// Send state to keyboard interface logic on mainboard
m_out_clock_func( m_clock_state );
m_out_clock_cb( m_clock_state );
// Send state to keyboard
if ( m_keyboard )
@ -165,7 +143,7 @@ void pc_kbdc_device::update_data_state()
m_data_state = new_data_state;
// Send state to keyboard interface logic on mainboard
m_out_data_func( m_data_state );
m_out_data_cb( m_data_state );
// Send state to keyboard
if ( m_keyboard )

View File

@ -19,9 +19,12 @@ set the data line and then set the clock line.
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_PC_KBDC_ADD(_tag, _config) \
MCFG_DEVICE_ADD(_tag, PC_KBDC, 0) \
MCFG_DEVICE_CONFIG(_config)
#define MCFG_PC_KBDC_OUT_CLOCK_CB(_devcb) \
devcb = &pc_kbdc_device::set_out_clock_callback(*device, DEVCB2_##_devcb);
#define MCFG_PC_KBDC_OUT_DATA_CB(_devcb) \
devcb = &pc_kbdc_device::set_out_data_callback(*device, DEVCB2_##_devcb);
#define MCFG_PC_KBDC_SLOT_ADD(_kbdc_tag, _tag, _slot_intf, _def_slot) \
MCFG_DEVICE_ADD(_tag, PC_KBDC_SLOT, 0 ) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \
@ -54,22 +57,17 @@ protected:
extern const device_type PC_KBDC_SLOT;
struct pc_kbdc_interface
{
devcb_write_line m_out_clock_cb;
devcb_write_line m_out_data_cb;
};
class device_pc_kbd_interface;
class pc_kbdc_device : public device_t,
public pc_kbdc_interface
class pc_kbdc_device : public device_t
{
public:
// construction/destruction
pc_kbdc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
template<class _Object> static devcb2_base &set_out_clock_callback(device_t &device, _Object object) { return downcast<pc_kbdc_device &>(device).m_out_clock_cb.set_callback(object); }
template<class _Object> static devcb2_base &set_out_data_callback(device_t &device, _Object object) { return downcast<pc_kbdc_device &>(device).m_out_data_cb.set_callback(object); }
void set_keyboard(device_pc_kbd_interface *keyboard);
int clock_signal() { return m_clock_state; }
@ -84,13 +82,12 @@ protected:
// device-level overrides
virtual void device_start();
virtual void device_reset();
virtual void device_config_complete();
void update_clock_state();
void update_data_state();
devcb_resolved_write_line m_out_clock_func;
devcb_resolved_write_line m_out_data_func;
devcb2_write_line m_out_clock_cb;
devcb2_write_line m_out_data_cb;
int m_clock_state;
int m_data_state;

View File

@ -33,12 +33,6 @@ I8237_INTERFACE( at_dma8237_2_config )
{ DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, southbridge_device, pc_dack4_w), DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, southbridge_device, pc_dack5_w), DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, southbridge_device, pc_dack6_w), DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, southbridge_device, pc_dack7_w) }
};
static const pc_kbdc_interface pc_kbdc_intf =
{
DEVCB_DEVICE_LINE_MEMBER("keybc", at_keyboard_controller_device, keyboard_clock_w),
DEVCB_DEVICE_LINE_MEMBER("keybc", at_keyboard_controller_device, keyboard_data_w)
};
static SLOT_INTERFACE_START(pc_isa_onboard)
SLOT_INTERFACE("comat", ISA8_COM_AT)
SLOT_INTERFACE("lpt", ISA8_LPT)
@ -66,7 +60,9 @@ static MACHINE_CONFIG_FRAGMENT( southbridge )
MCFG_AT_KEYBOARD_CONTROLLER_INPUT_BUFFER_FULL_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir1_w))
MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_CLOCK_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, clock_write_from_mb))
MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_DATA_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, data_write_from_mb))
MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf)
MCFG_DEVICE_ADD("pc_kbdc", PC_KBDC, 0)
MCFG_PC_KBDC_OUT_CLOCK_CB(DEVWRITELINE("keybc", at_keyboard_controller_device, keyboard_clock_w))
MCFG_PC_KBDC_OUT_DATA_CB(DEVWRITELINE("keybc", at_keyboard_controller_device, keyboard_data_w))
MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
MCFG_DS12885_ADD("rtc")

View File

@ -273,12 +273,6 @@ static INPUT_PORTS_START( atvga )
PORT_DIPSETTING( 0x01, DEF_STR( Yes ) )
INPUT_PORTS_END
static const pc_kbdc_interface pc_kbdc_intf =
{
DEVCB_DEVICE_LINE_MEMBER("keybc", at_keyboard_controller_device, keyboard_clock_w),
DEVCB_DEVICE_LINE_MEMBER("keybc", at_keyboard_controller_device, keyboard_data_w)
};
WRITE_LINE_MEMBER( at_state::at_mc146818_irq )
{
m_pic8259_slave->ir0_w((state) ? 0 : 1);
@ -339,7 +333,9 @@ static MACHINE_CONFIG_FRAGMENT( at_motherboard )
MCFG_AT_KEYBOARD_CONTROLLER_INPUT_BUFFER_FULL_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir1_w))
MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_CLOCK_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, clock_write_from_mb))
MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_DATA_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, data_write_from_mb))
MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf)
MCFG_DEVICE_ADD("pc_kbdc", PC_KBDC, 0)
MCFG_PC_KBDC_OUT_CLOCK_CB(DEVWRITELINE("keybc", at_keyboard_controller_device, keyboard_clock_w))
MCFG_PC_KBDC_OUT_DATA_CB(DEVWRITELINE("keybc", at_keyboard_controller_device, keyboard_data_w))
MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz )
MCFG_MC146818_IRQ_HANDLER(WRITELINE(at_state, at_mc146818_irq))

View File

@ -102,12 +102,6 @@ ADDRESS_MAP_END
// MACHINE DRIVERS
//**************************************************************************
static const pc_kbdc_interface pc_kbdc_intf =
{
DEVCB_DEVICE_LINE_MEMBER("keybc", at_keyboard_controller_device, keyboard_clock_w),
DEVCB_DEVICE_LINE_MEMBER("keybc", at_keyboard_controller_device, keyboard_data_w)
};
static MACHINE_CONFIG_START( ct486, ct486_state )
MCFG_CPU_ADD("maincpu", I486, XTAL_25MHz)
MCFG_CPU_PROGRAM_MAP(ct486_map)
@ -137,7 +131,9 @@ static MACHINE_CONFIG_START( ct486, ct486_state )
MCFG_AT_KEYBOARD_CONTROLLER_INPUT_BUFFER_FULL_CB(DEVWRITELINE("cs4031", cs4031_device, irq01_w))
MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_CLOCK_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, clock_write_from_mb))
MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_DATA_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, data_write_from_mb))
MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf)
MCFG_DEVICE_ADD("pc_kbdc", PC_KBDC, 0)
MCFG_PC_KBDC_OUT_CLOCK_CB(DEVWRITELINE("keybc", at_keyboard_controller_device, keyboard_clock_w))
MCFG_PC_KBDC_OUT_DATA_CB(DEVWRITELINE("keybc", at_keyboard_controller_device, keyboard_data_w))
MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
MCFG_DEVICE_ADD("isabus", ISA16, 0)

View File

@ -235,12 +235,6 @@ SLOT_INTERFACE_START( pt68k4_isa8_cards )
SLOT_INTERFACE("xtide", ISA8_XTIDE) // Monk only
SLOT_INTERFACE_END
static const pc_kbdc_interface pc_kbdc_intf =
{
DEVCB_DRIVER_LINE_MEMBER(pt68k4_state, keyboard_clock_w),
DEVCB_DRIVER_LINE_MEMBER(pt68k4_state, keyboard_data_w)
};
static MACHINE_CONFIG_START( pt68k4, pt68k4_state )
/* basic machine hardware */
MCFG_CPU_ADD(M68K_TAG, M68000, XTAL_16MHz)
@ -253,7 +247,9 @@ static MACHINE_CONFIG_START( pt68k4, pt68k4_state )
MCFG_MC68681_ADD("duart2", XTAL_16MHz / 4)
MCFG_PC_KBDC_ADD(KBDC_TAG, pc_kbdc_intf)
MCFG_DEVICE_ADD(KBDC_TAG, PC_KBDC, 0)
MCFG_PC_KBDC_OUT_CLOCK_CB(WRITELINE(pt68k4_state, keyboard_clock_w))
MCFG_PC_KBDC_OUT_DATA_CB(WRITELINE(pt68k4_state, keyboard_data_w))
MCFG_PC_KBDC_SLOT_ADD(KBDC_TAG, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83)
MCFG_M48T02_ADD(TIMEKEEPER_TAG)

View File

@ -412,24 +412,6 @@ I8255A_INTERFACE( pc_ppi8255_interface )
DEVCB_NULL
};
static const pc_kbdc_interface pc_kbdc_intf =
{
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, keyboard_clock_w),
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, keyboard_data_w)
};
static const pc_kbdc_interface pc_kbdc_intf_5150 =
{
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5150_mb_device, keyboard_clock_w),
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, keyboard_data_w)
};
static const pc_kbdc_interface pc_kbdc_intf_ec1841 =
{
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ec1841_mb_device, keyboard_clock_w),
DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, ibm5160_mb_device, keyboard_data_w)
};
/**********************************************************
*
* NMI handling
@ -478,7 +460,9 @@ static MACHINE_CONFIG_FRAGMENT( ibm5160_mb_config )
MCFG_ISA_OUT_DRQ2_CB(DEVWRITELINE("dma8237", am9517a_device, dreq2_w))
MCFG_ISA_OUT_DRQ3_CB(DEVWRITELINE("dma8237", am9517a_device, dreq3_w))
MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf)
MCFG_DEVICE_ADD("pc_kbdc", PC_KBDC, 0)
MCFG_PC_KBDC_OUT_CLOCK_CB(WRITELINE(ibm5160_mb_device, keyboard_clock_w))
MCFG_PC_KBDC_OUT_DATA_CB(WRITELINE(ibm5160_mb_device, keyboard_data_w))
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@ -653,8 +637,8 @@ static const cassette_interface ibm5150_cassette_interface =
static MACHINE_CONFIG_FRAGMENT( ibm5150_mb_config )
MCFG_FRAGMENT_ADD(ibm5160_mb_config)
MCFG_DEVICE_REMOVE("pc_kbdc")
MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf_5150)
MCFG_DEVICE_MODIFY("pc_kbdc")
MCFG_PC_KBDC_OUT_CLOCK_CB(WRITELINE(ibm5150_mb_device, keyboard_clock_w))
MCFG_CASSETTE_ADD( "cassette", ibm5150_cassette_interface )
MACHINE_CONFIG_END
@ -836,8 +820,8 @@ const device_type EC1841_MOTHERBOARD = &device_creator<ec1841_mb_device>;
static MACHINE_CONFIG_FRAGMENT( ec1841_mb_config )
MCFG_FRAGMENT_ADD(ibm5160_mb_config)
MCFG_DEVICE_REMOVE("pc_kbdc")
MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf_ec1841)
MCFG_DEVICE_MODIFY("pc_kbdc")
MCFG_PC_KBDC_OUT_CLOCK_CB(WRITELINE(ec1841_mb_device, keyboard_clock_w))
MACHINE_CONFIG_END