diff options
author | 2014-04-07 17:38:59 +0000 | |
---|---|---|
committer | 2014-04-07 17:38:59 +0000 | |
commit | 6e996a4c96c9b31a5cc8b74b8f5d05eaddc5d97b (patch) | |
tree | bfbced5b2ebf54be22fcf656b10d88d5d629207c /src | |
parent | 1e59725e47e180aec9412d15fb632ff859d6727a (diff) |
at_keybc.c: converted to devcb2 (nw)
Diffstat (limited to 'src')
-rw-r--r-- | src/emu/bus/pci/southbridge.c | 17 | ||||
-rw-r--r-- | src/emu/machine/at_keybc.c | 60 | ||||
-rw-r--r-- | src/emu/machine/at_keybc.h | 61 | ||||
-rw-r--r-- | src/mess/drivers/at.c | 17 | ||||
-rw-r--r-- | src/mess/drivers/ct486.c | 17 |
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) |