Previous 199869 Revisions Next

r29423 Monday 7th April, 2014 at 17:38:59 UTC by Osso
at_keybc.c: converted to devcb2 (nw)
[src/emu/bus/pci]southbridge.c
[src/emu/machine]at_keybc.c at_keybc.h
[src/mess/drivers]at.c ct486.c

trunk/src/emu/bus/pci/southbridge.c
r29422r29423
3333   { 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) }
3434};
3535
36static const at_keyboard_controller_interface keyboard_controller_intf =
37{
38   DEVCB_CPU_INPUT_LINE(":maincpu", INPUT_LINE_RESET),
39   DEVCB_CPU_INPUT_LINE(":maincpu", INPUT_LINE_A20),
40   DEVCB_DEVICE_LINE_MEMBER("pic8259_master", pic8259_device, ir1_w),
41   DEVCB_NULL,
42   DEVCB_DEVICE_LINE_MEMBER("pc_kbdc", pc_kbdc_device, clock_write_from_mb),
43   DEVCB_DEVICE_LINE_MEMBER("pc_kbdc", pc_kbdc_device, data_write_from_mb)
44};
45
4636static const pc_kbdc_interface pc_kbdc_intf =
4737{
4838   DEVCB_DEVICE_LINE_MEMBER("keybc", at_keyboard_controller_device, keyboard_clock_w),
r29422r29423
9787   MCFG_PIC8259_ADD( "pic8259_master", INPUTLINE(":maincpu", 0), VCC, READ8(southbridge_device, get_slave_ack) )
9888   MCFG_PIC8259_ADD( "pic8259_slave", DEVWRITELINE("pic8259_master", pic8259_device, ir2_w), GND, NULL )
9989
100   MCFG_AT_KEYBOARD_CONTROLLER_ADD("keybc", XTAL_12MHz, keyboard_controller_intf)
90   MCFG_DEVICE_ADD("keybc", AT_KEYBOARD_CONTROLLER, XTAL_12MHz)
91   MCFG_AT_KEYBOARD_CONTROLLER_SYSTEM_RESET_CB(INPUTLINE(":maincpu", INPUT_LINE_RESET))
92   MCFG_AT_KEYBOARD_CONTROLLER_GATE_A20_CB(INPUTLINE(":maincpu", INPUT_LINE_A20))
93   MCFG_AT_KEYBOARD_CONTROLLER_INPUT_BUFFER_FULL_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir1_w))
94   MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_CLOCK_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, clock_write_from_mb))
95   MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_DATA_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, data_write_from_mb))
10196   MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf)
10297   MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
10398
trunk/src/emu/machine/at_keybc.c
r29422r29423
4949
5050at_keyboard_controller_device::at_keyboard_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
5151   : device_t(mconfig, AT_KEYBOARD_CONTROLLER, "AT Keyboard Controller", tag, owner, clock, "at_keybc", __FILE__),
52      m_cpu(NULL)
52      m_cpu(NULL),
53      m_system_reset_cb(*this),
54      m_gate_a20_cb(*this),
55      m_input_buffer_full_cb(*this),
56      m_output_buffer_empty_cb(*this),
57      m_keyboard_clock_cb(*this),
58      m_keyboard_data_cb(*this)
5359{
5460}
5561
r29422r29423
7379   return MACHINE_CONFIG_NAME(at_keybc);
7480}
7581
76//-------------------------------------------------
77//  device_config_complete - perform any
78//  operations now that the configuration is
79//  complete
80//-------------------------------------------------
81
82void at_keyboard_controller_device::device_config_complete()
83{
84   // inherit a copy of the static data
85   const at_keyboard_controller_interface *intf = reinterpret_cast<const at_keyboard_controller_interface *>(static_config());
86
87   if (intf != NULL)
88   {
89      *static_cast<at_keyboard_controller_interface *>(this) = *intf;
90   }
91
92   // or initialize to defaults if none provided
93   else
94   {
95      memset(&m_system_reset_cb, 0, sizeof(m_system_reset_cb));
96      memset(&m_gate_a20_cb, 0, sizeof(m_gate_a20_cb));
97      memset(&m_input_buffer_full_cb, 0, sizeof(m_input_buffer_full_cb));
98      memset(&m_output_buffer_empty_cb, 0, sizeof(m_output_buffer_empty_cb));
99      memset(&m_keyboard_clock_cb, 0, sizeof(m_keyboard_clock_cb));
100      memset(&m_keyboard_data_cb, 0, sizeof(m_keyboard_data_cb));
101   }
102}
103
10482/*-------------------------------------------------
10583    device_start - device-specific startup
10684-------------------------------------------------*/
r29422r29423
11189   m_cpu = downcast<upi41_cpu_device *>(subdevice("at_keybc"));
11290
11391   // resolve callbacks
114   m_system_reset_func.resolve(m_system_reset_cb, *this);
115   m_gate_a20_func.resolve(m_gate_a20_cb, *this);
116   m_input_buffer_full_func.resolve(m_input_buffer_full_cb, *this);
117   m_output_buffer_empty_func.resolve(m_output_buffer_empty_cb, *this);
118   m_keyboard_clock_func.resolve(m_keyboard_clock_cb, *this);
119   m_keyboard_data_func.resolve(m_keyboard_data_cb, *this);
92   m_system_reset_cb.resolve_safe();
93   m_gate_a20_cb.resolve_safe();
94   m_input_buffer_full_cb.resolve_safe();
95   m_output_buffer_empty_cb.resolve_safe();
96   m_keyboard_clock_cb.resolve_safe();
97   m_keyboard_data_cb.resolve_safe();
12098
12199   // register for save states
122100   save_item(NAME(m_clock_signal));
r29422r29423
180158*/
181159WRITE8_MEMBER( at_keyboard_controller_device::p2_w )
182160{
183   m_system_reset_func(BIT(data, 0) ? CLEAR_LINE : ASSERT_LINE);
184   m_gate_a20_func(BIT(data, 1) ? ASSERT_LINE : CLEAR_LINE);
185   m_input_buffer_full_func(BIT(data, 4) ? ASSERT_LINE : CLEAR_LINE);
186   m_output_buffer_empty_func(BIT(data, 5) ? ASSERT_LINE : CLEAR_LINE);
161   m_system_reset_cb(BIT(data, 0) ? CLEAR_LINE : ASSERT_LINE);
162   m_gate_a20_cb(BIT(data, 1) ? ASSERT_LINE : CLEAR_LINE);
163   m_input_buffer_full_cb(BIT(data, 4) ? ASSERT_LINE : CLEAR_LINE);
164   m_output_buffer_empty_cb(BIT(data, 5) ? ASSERT_LINE : CLEAR_LINE);
187165
188166   m_clock_signal = !BIT(data, 6);
189167   m_data_signal = BIT(data, 7);
190168
191   m_keyboard_data_func(m_data_signal);
192   m_keyboard_clock_func(m_clock_signal);
169   m_keyboard_data_cb(m_data_signal);
170   m_keyboard_clock_cb(m_clock_signal);
193171}
194172
195173
trunk/src/emu/machine/at_keybc.h
r29422r29423
1717//  INTERFACE CONFIGURATION MACROS
1818//**************************************************************************
1919
20#define MCFG_AT_KEYBOARD_CONTROLLER_ADD(_tag, _clock, _interface) \
21   MCFG_DEVICE_ADD(_tag, AT_KEYBOARD_CONTROLLER, _clock) \
22   MCFG_DEVICE_CONFIG(_interface)
20#define MCFG_AT_KEYBOARD_CONTROLLER_SYSTEM_RESET_CB(_devcb) \
21   devcb = &at_keyboard_controller_device::set_system_reset_callback(*device, DEVCB2_##_devcb);
2322
23#define MCFG_AT_KEYBOARD_CONTROLLER_GATE_A20_CB(_devcb) \
24   devcb = &at_keyboard_controller_device::set_gate_a20_callback(*device, DEVCB2_##_devcb);
2425
26#define MCFG_AT_KEYBOARD_CONTROLLER_INPUT_BUFFER_FULL_CB(_devcb) \
27   devcb = &at_keyboard_controller_device::set_input_buffer_full_callback(*device, DEVCB2_##_devcb);
28
29#define MCFG_AT_KEYBOARD_CONTROLLER_OUTPUT_BUFFER_EMPTY_CB(_devcb) \
30   devcb = &at_keyboard_controller_device::set_output_buffer_empty_callback(*device, DEVCB2_##_devcb);
31
32#define MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_CLOCK_CB(_devcb) \
33   devcb = &at_keyboard_controller_device::set_keyboard_clock_callback(*device, DEVCB2_##_devcb);
34
35#define MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_DATA_CB(_devcb) \
36   devcb = &at_keyboard_controller_device::set_keyboard_data_callback(*device, DEVCB2_##_devcb);
37
2538//**************************************************************************
2639//  TYPE DEFINITIONS
2740//**************************************************************************
2841
29// ======================> at_keyboard_controller_interface
30
31struct at_keyboard_controller_interface
32{
33   // interface to the host pc
34   devcb_write_line    m_system_reset_cb;
35   devcb_write_line    m_gate_a20_cb;
36   devcb_write_line    m_input_buffer_full_cb;
37   devcb_write_line    m_output_buffer_empty_cb;
38
39   // interface to the keyboard
40   devcb_write_line    m_keyboard_clock_cb;
41   devcb_write_line    m_keyboard_data_cb;
42};
43
4442// ======================> at_keyboard_controller_device
4543
46class at_keyboard_controller_device : public device_t,
47                              public at_keyboard_controller_interface
44class at_keyboard_controller_device : public device_t
4845{
4946public:
5047   // construction/destruction
5148   at_keyboard_controller_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
5249
50   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); }
51   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); }
52   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); }
53   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); }
54   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); }
55   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); }
56   
5357   // internal 8042 interface
5458   DECLARE_READ8_MEMBER( t0_r );
5559   DECLARE_READ8_MEMBER( t1_r );
r29422r29423
7175   // device-level overrides
7276   virtual void device_start();
7377   virtual void device_reset();
74   virtual void device_config_complete();
7578
7679   virtual const rom_entry *device_rom_region() const;
7780   virtual machine_config_constructor device_mconfig_additions() const;
81   
7882private:
7983   // internal state
8084   upi41_cpu_device *m_cpu;
8185
82   devcb_resolved_write_line   m_system_reset_func;
83   devcb_resolved_write_line   m_gate_a20_func;
84   devcb_resolved_write_line   m_input_buffer_full_func;
85   devcb_resolved_write_line   m_output_buffer_empty_func;
86   devcb_resolved_write_line   m_keyboard_clock_func;
87   devcb_resolved_write_line   m_keyboard_data_func;
86   // interface to the host pc
87   devcb2_write_line    m_system_reset_cb;
88   devcb2_write_line    m_gate_a20_cb;
89   devcb2_write_line    m_input_buffer_full_cb;
90   devcb2_write_line    m_output_buffer_empty_cb;
8891
92   // interface to the keyboard
93   devcb2_write_line    m_keyboard_clock_cb;
94   devcb2_write_line    m_keyboard_data_cb;
95
8996   UINT8 m_clock_signal;
9097   UINT8 m_data_signal;
9198};
trunk/src/mess/drivers/ct486.c
r29422r29423
102102//  MACHINE DRIVERS
103103//**************************************************************************
104104
105static const at_keyboard_controller_interface keybc_intf =
106{
107   DEVCB_DEVICE_LINE_MEMBER("cs4031", cs4031_device, kbrst_w),
108   DEVCB_DEVICE_LINE_MEMBER("cs4031", cs4031_device, gatea20_w),
109   DEVCB_DEVICE_LINE_MEMBER("cs4031", cs4031_device, irq01_w),
110   DEVCB_NULL,
111   DEVCB_DEVICE_LINE_MEMBER("pc_kbdc", pc_kbdc_device, clock_write_from_mb),
112   DEVCB_DEVICE_LINE_MEMBER("pc_kbdc", pc_kbdc_device, data_write_from_mb)
113};
114
115105static const pc_kbdc_interface pc_kbdc_intf =
116106{
117107   DEVCB_DEVICE_LINE_MEMBER("keybc", at_keyboard_controller_device, keyboard_clock_w),
r29422r29423
163153   MCFG_RAM_DEFAULT_SIZE("4M")
164154   MCFG_RAM_EXTRA_OPTIONS("1M,2M,8M,16M,32M,64M")
165155
166   MCFG_AT_KEYBOARD_CONTROLLER_ADD("keybc", XTAL_12MHz, keybc_intf)
156   MCFG_DEVICE_ADD("keybc", AT_KEYBOARD_CONTROLLER, XTAL_12MHz)
157   MCFG_AT_KEYBOARD_CONTROLLER_SYSTEM_RESET_CB(DEVWRITELINE("cs4031", cs4031_device, kbrst_w))
158   MCFG_AT_KEYBOARD_CONTROLLER_GATE_A20_CB(DEVWRITELINE("cs4031", cs4031_device, gatea20_w))
159   MCFG_AT_KEYBOARD_CONTROLLER_INPUT_BUFFER_FULL_CB(DEVWRITELINE("cs4031", cs4031_device, irq01_w))
160   MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_CLOCK_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, clock_write_from_mb))
161   MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_DATA_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, data_write_from_mb))
167162   MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf)
168163   MCFG_PC_KBDC_SLOT_ADD("pc_kbdc", "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)
169164
trunk/src/mess/drivers/at.c
r29422r29423
273273   PORT_DIPSETTING(    0x01, DEF_STR( Yes ) )
274274INPUT_PORTS_END
275275
276static const at_keyboard_controller_interface keyboard_controller_intf =
277{
278   DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
279   DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
280   DEVCB_DEVICE_LINE_MEMBER("pic8259_master", pic8259_device, ir1_w),
281   DEVCB_NULL,
282   DEVCB_DEVICE_LINE_MEMBER("pc_kbdc", pc_kbdc_device, clock_write_from_mb),
283   DEVCB_DEVICE_LINE_MEMBER("pc_kbdc", pc_kbdc_device, data_write_from_mb)
284};
285
286276static const pc_kbdc_interface pc_kbdc_intf =
287277{
288278   DEVCB_DEVICE_LINE_MEMBER("keybc", at_keyboard_controller_device, keyboard_clock_w),
r29422r29423
349339   MCFG_PIC8259_ADD( "pic8259_master", INPUTLINE("maincpu", 0), VCC, READ8(at_state, get_slave_ack) )
350340   MCFG_PIC8259_ADD( "pic8259_slave", DEVWRITELINE("pic8259_master", pic8259_device, ir2_w), GND, NULL )
351341
352   MCFG_AT_KEYBOARD_CONTROLLER_ADD("keybc", XTAL_12MHz, keyboard_controller_intf)
342   MCFG_DEVICE_ADD("keybc", AT_KEYBOARD_CONTROLLER, XTAL_12MHz)
343   MCFG_AT_KEYBOARD_CONTROLLER_SYSTEM_RESET_CB(INPUTLINE("maincpu", INPUT_LINE_RESET))
344   MCFG_AT_KEYBOARD_CONTROLLER_GATE_A20_CB(INPUTLINE("maincpu", INPUT_LINE_A20))
345   MCFG_AT_KEYBOARD_CONTROLLER_INPUT_BUFFER_FULL_CB(DEVWRITELINE("pic8259_master", pic8259_device, ir1_w))
346   MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_CLOCK_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, clock_write_from_mb))
347   MCFG_AT_KEYBOARD_CONTROLLER_KEYBOARD_DATA_CB(DEVWRITELINE("pc_kbdc", pc_kbdc_device, data_write_from_mb))
353348   MCFG_PC_KBDC_ADD("pc_kbdc", pc_kbdc_intf)
354349
355350   MCFG_MC146818_ADD( "rtc", XTAL_32_768kHz )

Previous 199869 Revisions Next


© 1997-2024 The MAME Team