summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Ivan Vangelista <mesgnet@yahoo.it>2014-04-07 17:38:59 +0000
committer Ivan Vangelista <mesgnet@yahoo.it>2014-04-07 17:38:59 +0000
commit6e996a4c96c9b31a5cc8b74b8f5d05eaddc5d97b (patch)
treebfbced5b2ebf54be22fcf656b10d88d5d629207c /src
parent1e59725e47e180aec9412d15fb632ff859d6727a (diff)
at_keybc.c: converted to devcb2 (nw)
Diffstat (limited to 'src')
-rw-r--r--src/emu/bus/pci/southbridge.c17
-rw-r--r--src/emu/machine/at_keybc.c60
-rw-r--r--src/emu/machine/at_keybc.h61
-rw-r--r--src/mess/drivers/at.c17
-rw-r--r--src/mess/drivers/ct486.c17
5 files changed, 71 insertions, 101 deletions
diff --git a/src/emu/bus/pci/southbridge.c b/src/emu/bus/pci/southbridge.c
index 109a3c34e41..cb27e8d83ee 100644
--- a/src/emu/bus/pci/southbridge.c
+++ b/src/emu/bus/pci/southbridge.c
@@ -33,16 +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 at_keyboard_controller_interface keyboard_controller_intf =
-{
- DEVCB_CPU_INPUT_LINE(":maincpu", INPUT_LINE_RESET),
- DEVCB_CPU_INPUT_LINE(":maincpu", INPUT_LINE_A20),
- DEVCB_DEVICE_LINE_MEMBER("pic8259_master", pic8259_device, ir1_w),
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("pc_kbdc", pc_kbdc_device, clock_write_from_mb),
- DEVCB_DEVICE_LINE_MEMBER("pc_kbdc", pc_kbdc_device, data_write_from_mb)
-};
-
static const pc_kbdc_interface pc_kbdc_intf =
{
DEVCB_DEVICE_LINE_MEMBER("keybc", at_keyboard_controller_device, keyboard_clock_w),
@@ -97,7 +87,12 @@ static MACHINE_CONFIG_FRAGMENT( southbridge )
MCFG_PIC8259_ADD( "pic8259_master", INPUTLINE(":maincpu", 0), VCC, READ8(southbridge_device, get_slave_ack) )
MCFG_PIC8259_ADD( "pic8259_slave", DEVWRITELINE("pic8259_master", pic8259_device, ir2_w), GND, NULL )
- MCFG_AT_KEYBOARD_CONTROLLER_ADD("keybc", XTAL_12MHz, keyboard_controller_intf)
+ MCFG_DEVICE_ADD("keybc", AT_KEYBOARD_CONTROLLER, XTAL_12MHz)
+ MCFG_AT_KEYBOARD_CONTROLLER_SYSTEM_RESET_CB(INPUTLINE(":maincpu", INPUT_LINE_RESET))
+ MCFG_AT_KEYBOARD_CONTROLLER_GATE_A20_CB(INPUTLINE(":maincpu", INPUT_LINE_A20))
+ 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_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
diff --git a/src/emu/machine/at_keybc.c b/src/emu/machine/at_keybc.c
index fa918b079b4..aecbc3f8c36 100644
--- a/src/emu/machine/at_keybc.c
+++ b/src/emu/machine/at_keybc.c
@@ -49,7 +49,13 @@ ROM_END
at_keyboard_controller_device::at_keyboard_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, AT_KEYBOARD_CONTROLLER, "AT Keyboard Controller", tag, owner, clock, "at_keybc", __FILE__),
- m_cpu(NULL)
+ m_cpu(NULL),
+ m_system_reset_cb(*this),
+ m_gate_a20_cb(*this),
+ m_input_buffer_full_cb(*this),
+ m_output_buffer_empty_cb(*this),
+ m_keyboard_clock_cb(*this),
+ m_keyboard_data_cb(*this)
{
}
@@ -73,34 +79,6 @@ machine_config_constructor at_keyboard_controller_device::device_mconfig_additio
return MACHINE_CONFIG_NAME(at_keybc);
}
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void at_keyboard_controller_device::device_config_complete()
-{
- // inherit a copy of the static data
- const at_keyboard_controller_interface *intf = reinterpret_cast<const at_keyboard_controller_interface *>(static_config());
-
- if (intf != NULL)
- {
- *static_cast<at_keyboard_controller_interface *>(this) = *intf;
- }
-
- // or initialize to defaults if none provided
- else
- {
- memset(&m_system_reset_cb, 0, sizeof(m_system_reset_cb));
- memset(&m_gate_a20_cb, 0, sizeof(m_gate_a20_cb));
- memset(&m_input_buffer_full_cb, 0, sizeof(m_input_buffer_full_cb));
- memset(&m_output_buffer_empty_cb, 0, sizeof(m_output_buffer_empty_cb));
- memset(&m_keyboard_clock_cb, 0, sizeof(m_keyboard_clock_cb));
- memset(&m_keyboard_data_cb, 0, sizeof(m_keyboard_data_cb));
- }
-}
-
/*-------------------------------------------------
device_start - device-specific startup
-------------------------------------------------*/
@@ -111,12 +89,12 @@ void at_keyboard_controller_device::device_start()
m_cpu = downcast<upi41_cpu_device *>(subdevice("at_keybc"));
// resolve callbacks
- m_system_reset_func.resolve(m_system_reset_cb, *this);
- m_gate_a20_func.resolve(m_gate_a20_cb, *this);
- m_input_buffer_full_func.resolve(m_input_buffer_full_cb, *this);
- m_output_buffer_empty_func.resolve(m_output_buffer_empty_cb, *this);
- m_keyboard_clock_func.resolve(m_keyboard_clock_cb, *this);
- m_keyboard_data_func.resolve(m_keyboard_data_cb, *this);
+ m_system_reset_cb.resolve_safe();
+ m_gate_a20_cb.resolve_safe();
+ m_input_buffer_full_cb.resolve_safe();
+ m_output_buffer_empty_cb.resolve_safe();
+ m_keyboard_clock_cb.resolve_safe();
+ m_keyboard_data_cb.resolve_safe();
// register for save states
save_item(NAME(m_clock_signal));
@@ -180,16 +158,16 @@ READ8_MEMBER( at_keyboard_controller_device::p2_r )
*/
WRITE8_MEMBER( at_keyboard_controller_device::p2_w )
{
- m_system_reset_func(BIT(data, 0) ? CLEAR_LINE : ASSERT_LINE);
- m_gate_a20_func(BIT(data, 1) ? ASSERT_LINE : CLEAR_LINE);
- m_input_buffer_full_func(BIT(data, 4) ? ASSERT_LINE : CLEAR_LINE);
- m_output_buffer_empty_func(BIT(data, 5) ? ASSERT_LINE : CLEAR_LINE);
+ m_system_reset_cb(BIT(data, 0) ? CLEAR_LINE : ASSERT_LINE);
+ m_gate_a20_cb(BIT(data, 1) ? ASSERT_LINE : CLEAR_LINE);
+ m_input_buffer_full_cb(BIT(data, 4) ? ASSERT_LINE : CLEAR_LINE);
+ m_output_buffer_empty_cb(BIT(data, 5) ? ASSERT_LINE : CLEAR_LINE);
m_clock_signal = !BIT(data, 6);
m_data_signal = BIT(data, 7);
- m_keyboard_data_func(m_data_signal);
- m_keyboard_clock_func(m_clock_signal);
+ m_keyboard_data_cb(m_data_signal);
+ m_keyboard_clock_cb(m_clock_signal);
}
diff --git a/src/emu/machine/at_keybc.h b/src/emu/machine/at_keybc.h
index f773cb632d2..5f5cd1c2cb4 100644
--- a/src/emu/machine/at_keybc.h
+++ b/src/emu/machine/at_keybc.h
@@ -17,39 +17,43 @@
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
-#define MCFG_AT_KEYBOARD_CONTROLLER_ADD(_tag, _clock, _interface) \
- MCFG_DEVICE_ADD(_tag, AT_KEYBOARD_CONTROLLER, _clock) \
- MCFG_DEVICE_CONFIG(_interface)
+#define MCFG_AT_KEYBOARD_CONTROLLER_SYSTEM_RESET_CB(_devcb) \
+ devcb = &at_keyboard_controller_device::set_system_reset_callback(*device, DEVCB2_##_devcb);
+#define MCFG_AT_KEYBOARD_CONTROLLER_GATE_A20_CB(_devcb) \
+ devcb = &at_keyboard_controller_device::set_gate_a20_callback(*device, DEVCB2_##_devcb);
-//**************************************************************************
-// TYPE DEFINITIONS
-//**************************************************************************
+#define MCFG_AT_KEYBOARD_CONTROLLER_INPUT_BUFFER_FULL_CB(_devcb) \
+ devcb = &at_keyboard_controller_device::set_input_buffer_full_callback(*device, DEVCB2_##_devcb);
-// ======================> at_keyboard_controller_interface
+#define MCFG_AT_KEYBOARD_CONTROLLER_OUTPUT_BUFFER_EMPTY_CB(_devcb) \
+ devcb = &at_keyboard_controller_device::set_output_buffer_empty_callback(*device, DEVCB2_##_devcb);
-struct at_keyboard_controller_interface
-{
- // interface to the host pc
- devcb_write_line m_system_reset_cb;
- devcb_write_line m_gate_a20_cb;
- devcb_write_line m_input_buffer_full_cb;
- devcb_write_line m_output_buffer_empty_cb;
+#define MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_CLOCK_CB(_devcb) \
+ devcb = &at_keyboard_controller_device::set_keyboard_clock_callback(*device, DEVCB2_##_devcb);
- // interface to the keyboard
- devcb_write_line m_keyboard_clock_cb;
- devcb_write_line m_keyboard_data_cb;
-};
+#define MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_DATA_CB(_devcb) \
+ devcb = &at_keyboard_controller_device::set_keyboard_data_callback(*device, DEVCB2_##_devcb);
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
// ======================> at_keyboard_controller_device
-class at_keyboard_controller_device : public device_t,
- public at_keyboard_controller_interface
+class at_keyboard_controller_device : public device_t
{
public:
// construction/destruction
at_keyboard_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+ template<class _Object> static devcb2_base &set_system_reset_callback(device_t &device, _Object object) { return downcast<at_keyboard_controller_device &>(device).m_system_reset_cb.set_callback(object); }
+ template<class _Object> static devcb2_base &set_gate_a20_callback(device_t &device, _Object object) { return downcast<at_keyboard_controller_device &>(device).m_gate_a20_cb.set_callback(object); }
+ template<class _Object> static devcb2_base &set_input_buffer_full_callback(device_t &device, _Object object) { return downcast<at_keyboard_controller_device &>(device).m_input_buffer_full_cb.set_callback(object); }
+ template<class _Object> static devcb2_base &set_output_buffer_empty_callback(device_t &device, _Object object) { return downcast<at_keyboard_controller_device &>(device).m_output_buffer_empty_cb.set_callback(object); }
+ template<class _Object> static devcb2_base &set_keyboard_clock_callback(device_t &device, _Object object) { return downcast<at_keyboard_controller_device &>(device).m_keyboard_clock_cb.set_callback(object); }
+ template<class _Object> static devcb2_base &set_keyboard_data_callback(device_t &device, _Object object) { return downcast<at_keyboard_controller_device &>(device).m_keyboard_data_cb.set_callback(object); }
+
// internal 8042 interface
DECLARE_READ8_MEMBER( t0_r );
DECLARE_READ8_MEMBER( t1_r );
@@ -71,20 +75,23 @@ protected:
// device-level overrides
virtual void device_start();
virtual void device_reset();
- virtual void device_config_complete();
virtual const rom_entry *device_rom_region() const;
virtual machine_config_constructor device_mconfig_additions() const;
+
private:
// internal state
upi41_cpu_device *m_cpu;
- devcb_resolved_write_line m_system_reset_func;
- devcb_resolved_write_line m_gate_a20_func;
- devcb_resolved_write_line m_input_buffer_full_func;
- devcb_resolved_write_line m_output_buffer_empty_func;
- devcb_resolved_write_line m_keyboard_clock_func;
- devcb_resolved_write_line m_keyboard_data_func;
+ // interface to the host pc
+ devcb2_write_line m_system_reset_cb;
+ devcb2_write_line m_gate_a20_cb;
+ devcb2_write_line m_input_buffer_full_cb;
+ devcb2_write_line m_output_buffer_empty_cb;
+
+ // interface to the keyboard
+ devcb2_write_line m_keyboard_clock_cb;
+ devcb2_write_line m_keyboard_data_cb;
UINT8 m_clock_signal;
UINT8 m_data_signal;
diff --git a/src/mess/drivers/at.c b/src/mess/drivers/at.c
index 8d0e444abbe..2a55c2be542 100644
--- a/src/mess/drivers/at.c
+++ b/src/mess/drivers/at.c
@@ -273,16 +273,6 @@ static INPUT_PORTS_START( atvga )
PORT_DIPSETTING( 0x01, DEF_STR( Yes ) )
INPUT_PORTS_END
-static const at_keyboard_controller_interface keyboard_controller_intf =
-{
- DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
- DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
- DEVCB_DEVICE_LINE_MEMBER("pic8259_master", pic8259_device, ir1_w),
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("pc_kbdc", pc_kbdc_device, clock_write_from_mb),
- DEVCB_DEVICE_LINE_MEMBER("pc_kbdc", pc_kbdc_device, data_write_from_mb)
-};
-
static const pc_kbdc_interface pc_kbdc_intf =
{
DEVCB_DEVICE_LINE_MEMBER("keybc", at_keyboard_controller_device, keyboard_clock_w),
@@ -349,7 +339,12 @@ static MACHINE_CONFIG_FRAGMENT( at_motherboard )
MCFG_PIC8259_ADD( "pic8259_master", INPUTLINE("maincpu", 0), VCC, READ8(at_state, get_slave_ack) )
MCFG_PIC8259_ADD( "pic8259_slave", DEVWRITELINE("pic8259_master", pic8259_device, ir2_w), GND, NULL )
- MCFG_AT_KEYBOARD_CONTROLLER_ADD("keybc", XTAL_12MHz, keyboard_controller_intf)
+ MCFG_DEVICE_ADD("keybc", AT_KEYBOARD_CONTROLLER, XTAL_12MHz)
+ MCFG_AT_KEYBOARD_CONTROLLER_SYSTEM_RESET_CB(INPUTLINE("maincpu", INPUT_LINE_RESET))
+ MCFG_AT_KEYBOARD_CONTROLLER_GATE_A20_CB(INPUTLINE("maincpu", INPUT_LINE_A20))
+ 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_MC146818_ADD( "rtc", XTAL_32_768kHz )
diff --git a/src/mess/drivers/ct486.c b/src/mess/drivers/ct486.c
index 0859f33ddb1..1f9e7b65156 100644
--- a/src/mess/drivers/ct486.c
+++ b/src/mess/drivers/ct486.c
@@ -102,16 +102,6 @@ ADDRESS_MAP_END
// MACHINE DRIVERS
//**************************************************************************
-static const at_keyboard_controller_interface keybc_intf =
-{
- DEVCB_DEVICE_LINE_MEMBER("cs4031", cs4031_device, kbrst_w),
- DEVCB_DEVICE_LINE_MEMBER("cs4031", cs4031_device, gatea20_w),
- DEVCB_DEVICE_LINE_MEMBER("cs4031", cs4031_device, irq01_w),
- DEVCB_NULL,
- DEVCB_DEVICE_LINE_MEMBER("pc_kbdc", pc_kbdc_device, clock_write_from_mb),
- DEVCB_DEVICE_LINE_MEMBER("pc_kbdc", pc_kbdc_device, data_write_from_mb)
-};
-
static const pc_kbdc_interface pc_kbdc_intf =
{
DEVCB_DEVICE_LINE_MEMBER("keybc", at_keyboard_controller_device, keyboard_clock_w),
@@ -163,7 +153,12 @@ static MACHINE_CONFIG_START( ct486, ct486_state )
MCFG_RAM_DEFAULT_SIZE("4M")
MCFG_RAM_EXTRA_OPTIONS("1M,2M,8M,16M,32M,64M")
- MCFG_AT_KEYBOARD_CONTROLLER_ADD("keybc", XTAL_12MHz, keybc_intf)
+ MCFG_DEVICE_ADD("keybc", AT_KEYBOARD_CONTROLLER, XTAL_12MHz)
+ MCFG_AT_KEYBOARD_CONTROLLER_SYSTEM_RESET_CB(DEVWRITELINE("cs4031", cs4031_device, kbrst_w))
+ MCFG_AT_KEYBOARD_CONTROLLER_GATE_A20_CB(DEVWRITELINE("cs4031", cs4031_device, gatea20_w))
+ 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_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)