mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
pc_kbdc_device: converted to devcb2 (nw)
This commit is contained in:
parent
121d5e1907
commit
c1fb959dbd
@ -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 )
|
||||
|
@ -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;
|
||||
|
@ -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")
|
||||
|
@ -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))
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user