From 3dff6ae3addf01cd1baeb48cec67fbb8a76957cb Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Fri, 19 Apr 2013 09:44:55 +0000 Subject: [PATCH] 8042kbdc is now device (nw) --- src/emu/machine/8042kbdc.c | 323 ++++++++++++++++++------------------ src/emu/machine/8042kbdc.h | 92 ++++++++-- src/mame/drivers/calchase.c | 34 ++-- src/mame/drivers/funkball.c | 33 ++-- src/mame/drivers/gamecstl.c | 46 +++-- src/mame/drivers/gammagic.c | 32 ++-- src/mame/drivers/mediagx.c | 49 +++--- src/mame/drivers/midqslvr.c | 33 ++-- src/mame/drivers/pangofun.c | 28 ++-- src/mame/drivers/pcat_dyn.c | 29 ++-- src/mame/drivers/photoply.c | 21 ++- src/mame/drivers/queen.c | 33 ++-- src/mame/drivers/savquest.c | 33 ++-- src/mame/drivers/su2000.c | 33 ++-- src/mame/drivers/taitowlf.c | 45 +++-- src/mame/drivers/voyager.c | 34 ++-- src/mame/drivers/xtom3d.c | 33 ++-- src/mame/machine/pcshare.c | 2 +- src/mess/drivers/bebox.c | 36 +++- src/mess/drivers/ip22.c | 39 +++-- src/mess/includes/bebox.h | 3 + src/mess/includes/pc.h | 3 +- src/mess/machine/amstr_pc.c | 8 +- src/mess/machine/bebox.c | 34 +--- src/mess/machine/europc.c | 2 +- src/mess/machine/pc.c | 18 +- 26 files changed, 553 insertions(+), 523 deletions(-) diff --git a/src/emu/machine/8042kbdc.c b/src/emu/machine/8042kbdc.c index 665facbfb9d..0b891fcf0cd 100644 --- a/src/emu/machine/8042kbdc.c +++ b/src/emu/machine/8042kbdc.c @@ -192,144 +192,137 @@ #define LOG_KEYBOARD 0 #define LOG_ACCESSES 0 +const device_type KBDC8042 = &device_creator; +//------------------------------------------------- +// kbdc8042_device - constructor +//------------------------------------------------- -/*************************************************************************** - - Type definitions - -***************************************************************************/ - -static struct +kbdc8042_device::kbdc8042_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, KBDC8042, "Keyboard Controller 8042", tag, owner, clock, "kbdc8042", __FILE__) { - kbdc8042_type_t type; - void (*set_gate_a20)(running_machine &machine, int a20); - void (*keyboard_interrupt)(running_machine &machine, int state); - void (*set_spkr)(running_machine &machine, int speaker); - int (*get_out2)(running_machine &machine); +} - UINT8 inport, outport, data, command; +//------------------------------------------------- +// device_config_complete - perform any +// operations now that the configuration is +// complete +//------------------------------------------------- - struct { - int received; - int on; - } keyboard; - struct { - int received; - int on; - } mouse; - - int last_write_to_control; - int sending; - int send_to_mouse; - - int operation_write_state; - int status_read_mode; - - int speaker; - - /* temporary hack */ - int offset1; -} kbdc8042; - -static int poll_delay; - -static void at_8042_check_keyboard(running_machine &machine); - - - -/*************************************************************************** - - Code - -***************************************************************************/ - -static void at_8042_set_outport(running_machine &machine, UINT8 data, int initial) +void kbdc8042_device::device_config_complete() { - UINT8 change; - change = initial ? 0xFF : (kbdc8042.outport ^ data); - kbdc8042.outport = data; - if (change & 0x02) + // inherit a copy of the static data + const kbdc8042_interface *intf = reinterpret_cast(static_config()); + + if (intf != NULL) { - if (kbdc8042.set_gate_a20) - kbdc8042.set_gate_a20(machine, data & 0x02 ? 1 : 0); + *static_cast(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_func, 0, sizeof(m_input_buffer_full_func)); + memset(&m_output_buffer_empty_cb, 0, sizeof(m_output_buffer_empty_cb)); + memset(&m_speaker_cb, 0, sizeof(m_speaker_cb)); } } +/*------------------------------------------------- + device_start - device-specific startup +-------------------------------------------------*/ - -static TIMER_CALLBACK( kbdc8042_time ) +void kbdc8042_device::device_start() { - at_keyboard_polling(); - at_8042_check_keyboard(machine); + // 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_speaker_func.resolve(m_speaker_cb, *this); + m_getout2_func.resolve(m_getout2_cb, *this); + machine().scheduler().timer_pulse(attotime::from_hz(60), timer_expired_delegate(FUNC(kbdc8042_device::kbdc8042_time),this)); } -static TIMER_CALLBACK( kbdc8042_clr_int ) +/*------------------------------------------------- + device_reset - device-specific reset +-------------------------------------------------*/ + +void kbdc8042_device::device_reset() +{ + m_poll_delay = 10; + + /* ibmat bios wants 0x20 set! (keyboard locked when not set) 0x80 */ + m_inport = 0xa0; + at_8042_set_outport(0xfe, 1); +} + +void kbdc8042_device::at_8042_set_outport(UINT8 data, int initial) +{ + UINT8 change; + change = initial ? 0xFF : (m_outport ^ data); + m_outport = data; + if (change & 0x02) + { + if (!m_gate_a20_func.isnull()) + m_gate_a20_func(data & 0x02 ? 1 : 0); + } +} + +TIMER_CALLBACK_MEMBER( kbdc8042_device::kbdc8042_time ) +{ + at_keyboard_polling(); + at_8042_check_keyboard(); +} + +TIMER_CALLBACK_MEMBER( kbdc8042_device::kbdc8042_clr_int ) { /* Lets 8952's timers do their job before clear the interrupt line, */ /* else Keyboard interrupt never happens. */ - kbdc8042.keyboard_interrupt(machine, 0); + m_input_buffer_full_func(0); } - -void kbdc8042_init(running_machine &machine, const struct kbdc8042_interface *intf) -{ - poll_delay = 10; - memset(&kbdc8042, 0, sizeof(kbdc8042)); - kbdc8042.type = intf->type; - kbdc8042.set_gate_a20 = intf->set_gate_a20; - kbdc8042.keyboard_interrupt = intf->keyboard_interrupt; - kbdc8042.get_out2 = intf->get_out2; - kbdc8042.set_spkr = intf->set_spkr; - - /* ibmat bios wants 0x20 set! (keyboard locked when not set) 0x80 */ - kbdc8042.inport = 0xa0; - at_8042_set_outport(machine, 0xfe, 1); - - machine.scheduler().timer_pulse(attotime::from_hz(60), FUNC(kbdc8042_time)); -} - -static void at_8042_receive(running_machine &machine, UINT8 data) +void kbdc8042_device::at_8042_receive(UINT8 data) { if (LOG_KEYBOARD) logerror("at_8042_receive Received 0x%02x\n", data); - kbdc8042.data = data; - kbdc8042.keyboard.received = 1; + m_data = data; + m_keyboard.received = 1; - if (kbdc8042.keyboard_interrupt) + if (!m_input_buffer_full_func.isnull()) { - kbdc8042.keyboard_interrupt(machine, 1); + m_input_buffer_full_func(1); /* Lets 8952's timers do their job before clear the interrupt line, */ /* else Keyboard interrupt never happens. */ - machine.scheduler().timer_set( attotime::from_usec(2), FUNC(kbdc8042_clr_int),0,0 ); + machine().scheduler().timer_set(attotime::from_usec(2), timer_expired_delegate(FUNC(kbdc8042_device::kbdc8042_clr_int),this)); } } -static void at_8042_check_keyboard(running_machine &machine) +void kbdc8042_device::at_8042_check_keyboard() { int data; - if (!kbdc8042.keyboard.received - && !kbdc8042.mouse.received) + if (!m_keyboard.received && !m_mouse.received) { if ( (data = at_keyboard_read())!=-1) - at_8042_receive(machine, data); + at_8042_receive(data); } } - -static void at_8042_clear_keyboard_received(void) +void kbdc8042_device::at_8042_clear_keyboard_received() { - if (kbdc8042.keyboard.received) + if (m_keyboard.received) { if (LOG_KEYBOARD) - logerror("kbdc8042_8_r(): Clearing kbdc8042.keyboard.received\n"); + logerror("kbdc8042_8_r(): Clearing m_keyboard.received\n"); } - kbdc8042.keyboard.received = 0; - kbdc8042.mouse.received = 0; + m_keyboard.received = 0; + m_mouse.received = 0; } @@ -357,87 +350,87 @@ static void at_8042_clear_keyboard_received(void) * 0: Keyboard data in */ -READ8_HANDLER(kbdc8042_8_r) +READ8_MEMBER(kbdc8042_device::data_r) { UINT8 data = 0; switch (offset) { case 0: - data = kbdc8042.data; - if ((kbdc8042.status_read_mode != 3) || (data != 0xfa)) + data = m_data; + if ((m_status_read_mode != 3) || (data != 0xfa)) { - if (kbdc8042.type != KBDC8042_AT386 || (data != 0x55)) + if (m_keybtype != KBDC8042_AT386 || (data != 0x55)) { /* at386 self test doesn't like this */ at_8042_clear_keyboard_received(); } - at_8042_check_keyboard(space.machine()); + at_8042_check_keyboard(); } else { - kbdc8042.status_read_mode = 4; + m_status_read_mode = 4; } break; case 1: - data = kbdc8042.speaker; + data = m_speaker; data &= ~0xc0; /* AT BIOS don't likes this being set */ /* needed for AMI BIOS, maybe only some keyboard controller revisions! */ at_8042_clear_keyboard_received(); /* polled for changes in ibmat bios */ - if (--poll_delay < 0) + if (--m_poll_delay < 0) { - if (kbdc8042.type != KBDC8042_PS2) - poll_delay = 4; /* ibmat */ + if (m_keybtype != KBDC8042_PS2) + m_poll_delay = 4; /* ibmat */ else - poll_delay = 8; /* ibm ps2m30 */ - kbdc8042.offset1 ^= 0x10; + m_poll_delay = 8; /* ibm ps2m30 */ + m_offset1 ^= 0x10; } - data = (data & ~0x10) | kbdc8042.offset1; + data = (data & ~0x10) | m_offset1; - if (kbdc8042.speaker & 1) + if (m_speaker & 1) data |= 0x20; else data &= ~0x20; /* ps2m30 wants this */ break; case 2: - if (kbdc8042.get_out2(space.machine())) + if (m_getout2_func(0)) data |= 0x20; else data &= ~0x20; break; case 4: - at_8042_check_keyboard(space.machine()); + at_8042_check_keyboard(); - if (kbdc8042.keyboard.received || kbdc8042.mouse.received) + if (m_keyboard.received || m_mouse.received) data |= 1; - if (kbdc8042.sending) + if (m_sending) data |= 2; - kbdc8042.sending = 0; /* quicker than normal */ + m_sending = 0; /* quicker than normal */ data |= 4; /* selftest ok */ - if (kbdc8042.last_write_to_control) + if (m_last_write_to_control) data |= 8; - switch (kbdc8042.status_read_mode) { + switch (m_status_read_mode) { case 0: - if (!kbdc8042.keyboard.on) data|=0x10; - if (kbdc8042.mouse.received) data|=0x20; + if (!m_keyboard.on) data|=0x10; + if (m_mouse.received) data|=0x20; break; case 1: - data |= kbdc8042.inport&0xf; + data |= m_inport&0xf; break; case 2: - data |= kbdc8042.inport<<4; + data |= m_inport<<4; break; case 4: - at_8042_receive(space.machine(), 0xaa); - kbdc8042.status_read_mode = 0; + at_8042_receive(0xaa); + m_status_read_mode = 0; break; } break; @@ -450,29 +443,29 @@ READ8_HANDLER(kbdc8042_8_r) -WRITE8_HANDLER(kbdc8042_8_w) +WRITE8_MEMBER(kbdc8042_device::data_w) { switch (offset) { case 0: - kbdc8042.last_write_to_control = 0; - kbdc8042.status_read_mode = 0; - switch (kbdc8042.operation_write_state) { + m_last_write_to_control = 0; + m_status_read_mode = 0; + switch (m_operation_write_state) { case 0: if ((data == 0xf4) || (data == 0xff)) /* keyboard enable or keyboard reset */ { - at_8042_receive(space.machine(), 0xfa); /* ACK, delivered a bit differently */ + at_8042_receive(0xfa); /* ACK, delivered a bit differently */ if (data == 0xff) { - kbdc8042.status_read_mode = 3; /* keyboard buffer to be written again after next read */ + m_status_read_mode = 3; /* keyboard buffer to be written again after next read */ } break; } /* normal case */ - kbdc8042.data = data; - kbdc8042.sending=1; + m_data = data; + m_sending=1; at_keyboard_write(space.machine(), data); break; @@ -487,73 +480,73 @@ WRITE8_HANDLER(kbdc8042_8_w) * | `----------- keyboard clock (output) * `------------ keyboard data (output) */ - at_8042_set_outport(space.machine(), data, 0); + at_8042_set_outport(data, 0); break; case 2: /* preceded by writing 0xD2 to port 60h */ - kbdc8042.data = data; - kbdc8042.sending=1; - at_keyboard_write(space.machine(), data); + m_data = data; + m_sending=1; + at_keyboard_write(machine(), data); break; case 3: /* preceded by writing 0xD3 to port 60h */ - kbdc8042.data = data; + m_data = data; break; case 4: /* preceded by writing 0xD4 to port 60h */ - kbdc8042.data = data; + m_data = data; break; case 5: /* preceded by writing 0x60 to port 60h */ - kbdc8042.command = data; + m_command = data; break; } - kbdc8042.operation_write_state = 0; + m_operation_write_state = 0; break; case 1: - kbdc8042.speaker = data; - if (kbdc8042.set_spkr) - kbdc8042.set_spkr(space.machine(), kbdc8042.speaker); + m_speaker = data; + if (!m_speaker_func.isnull()) + m_speaker_func(0, m_speaker); break; case 4: - kbdc8042.last_write_to_control=0; + m_last_write_to_control=0; /* switch based on the command */ switch(data) { case 0x20: /* current 8042 command byte is placed on port 60h */ - kbdc8042.data = kbdc8042.command; + m_data = m_command; break; case 0x60: /* next data byte is placed in 8042 command byte */ - kbdc8042.operation_write_state = 5; - kbdc8042.send_to_mouse = 0; + m_operation_write_state = 5; + m_send_to_mouse = 0; break; case 0xa7: /* disable auxilary interface */ - kbdc8042.mouse.on = 0; + m_mouse.on = 0; break; case 0xa8: /* enable auxilary interface */ - kbdc8042.mouse.on = 1; + m_mouse.on = 1; break; case 0xa9: /* test mouse */ - at_8042_receive(space.machine(), PS2_MOUSE_ON ? 0x00 : 0xff); + at_8042_receive(PS2_MOUSE_ON ? 0x00 : 0xff); break; case 0xaa: /* selftest */ - at_8042_receive(space.machine(), 0x55); + at_8042_receive(0x55); break; case 0xab: /* test keyboard */ - at_8042_receive(space.machine(), KEYBOARD_ON ? 0x00 : 0xff); + at_8042_receive(KEYBOARD_ON ? 0x00 : 0xff); break; case 0xad: /* disable keyboard interface */ - kbdc8042.keyboard.on = 0; + m_keyboard.on = 0; break; case 0xae: /* enable keyboard interface */ - kbdc8042.keyboard.on = 1; + m_keyboard.on = 1; break; case 0xc0: /* read input port */ /* |7|6|5|4|3 2 1 0| 8042 Input Port @@ -565,45 +558,45 @@ WRITE8_HANDLER(kbdc8042_8_w) * | `----------- 1=primary display is MDA, 0=CGA * `------------ 1=keyboard not inhibited; 0=inhibited */ - at_8042_receive(space.machine(), kbdc8042.inport); + at_8042_receive(m_inport); break; case 0xc1: /* read input port 3..0 until write to 0x60 */ - kbdc8042.status_read_mode = 1; + m_status_read_mode = 1; break; case 0xc2: /* read input port 7..4 until write to 0x60 */ - kbdc8042.status_read_mode = 2; + m_status_read_mode = 2; break; case 0xd0: /* read output port */ - at_8042_receive(space.machine(), kbdc8042.outport); + at_8042_receive(m_outport); break; case 0xd1: /* write output port; next byte written to port 60h is placed on * 8042 output port */ - kbdc8042.operation_write_state = 1; + m_operation_write_state = 1; return; /* instant delivery */ case 0xd2: /* write keyboard output register; on PS/2 systems next port 60h * write is written to port 60h output register as if initiated * by a device; invokes interrupt if enabled */ - kbdc8042.operation_write_state = 2; - kbdc8042.send_to_mouse = 0; + m_operation_write_state = 2; + m_send_to_mouse = 0; break; case 0xd3: /* write auxillary output register; on PS/2 systems next port 60h * write is written to port 60h input register as if initiated * by a device; invokes interrupt if enabled */ - kbdc8042.operation_write_state = 3; - kbdc8042.send_to_mouse = 1; + m_operation_write_state = 3; + m_send_to_mouse = 1; break; case 0xd4: /* write auxillary device; on PS/2 systems the next data byte * written to input register a port at 60h is sent to the * auxiliary device */ - kbdc8042.operation_write_state = 4; + m_operation_write_state = 4; break; case 0xe0: /* read test inputs; read T1/T0 test inputs into bit 1/0 */ - at_8042_receive(space.machine(), 0x00); + at_8042_receive(0x00); break; case 0xf0: @@ -619,11 +612,11 @@ WRITE8_HANDLER(kbdc8042_8_w) * the bits low set in the command byte. The only pulse that has * an effect currently is bit 0, which pulses the CPU's reset line */ - space.machine().firstcpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE); - at_8042_set_outport(space.machine(), kbdc8042.outport | 0x02, 0); + m_system_reset_func(PULSE_LINE); + at_8042_set_outport(m_outport | 0x02, 0); break; } - kbdc8042.sending = 1; + m_sending = 1; break; } } diff --git a/src/emu/machine/8042kbdc.h b/src/emu/machine/8042kbdc.h index d69e14fe37a..67b1013104f 100644 --- a/src/emu/machine/8042kbdc.h +++ b/src/emu/machine/8042kbdc.h @@ -17,24 +17,94 @@ enum kbdc8042_type_t KBDC8042_AT386 /* hack for at386 driver */ }; +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_KBDC8042_ADD(_tag, _interface) \ + MCFG_DEVICE_ADD(_tag, KBDC8042, 0) \ + MCFG_DEVICE_CONFIG(_interface) + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> kbdc8042_interface struct kbdc8042_interface { - kbdc8042_type_t type; - void (*set_gate_a20)(running_machine &machine, int a20); - void (*keyboard_interrupt)(running_machine &machine, int state); - void (*set_spkr)(running_machine &machine, int speaker); - int (*get_out2)(running_machine &machine); - - - + kbdc8042_type_t m_keybtype; + // 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; + + devcb_write8 m_speaker_cb; + devcb_read8 m_getout2_cb; }; +// ======================> kbdc8042_device +class kbdc8042_device : public device_t, + public kbdc8042_interface +{ +public: + // construction/destruction + kbdc8042_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + DECLARE_READ8_MEMBER( data_r ); + DECLARE_WRITE8_MEMBER( data_w ); -void kbdc8042_init(running_machine &machine, const struct kbdc8042_interface *intf); + void at_8042_set_outport(UINT8 data, int initial); + TIMER_CALLBACK_MEMBER( kbdc8042_time ); + TIMER_CALLBACK_MEMBER( kbdc8042_clr_int ); + void at_8042_receive(UINT8 data); + void at_8042_check_keyboard(); + void at_8042_clear_keyboard_received(); +protected: + // device-level overrides + virtual void device_start(); + virtual void device_reset(); + virtual void device_config_complete(); + + UINT8 m_inport, m_outport, m_data, m_command; + + struct { + int received; + int on; + } m_keyboard; + struct { + int received; + int on; + } m_mouse; + + int m_last_write_to_control; + int m_sending; + int m_send_to_mouse; + + int m_operation_write_state; + int m_status_read_mode; + + int m_speaker; + + /* temporary hack */ + int m_offset1; + + int m_poll_delay; + + 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_write8 m_speaker_func; + devcb_resolved_read8 m_getout2_func; +}; + +// device type definition +extern const device_type KBDC8042; -DECLARE_READ8_HANDLER(kbdc8042_8_r); -DECLARE_WRITE8_HANDLER(kbdc8042_8_w); #endif /* KBDC8042_H */ diff --git a/src/mame/drivers/calchase.c b/src/mame/drivers/calchase.c index af26b5a8c79..7dd2bfdd6e2 100644 --- a/src/mame/drivers/calchase.c +++ b/src/mame/drivers/calchase.c @@ -181,6 +181,7 @@ public: DECLARE_WRITE_LINE_MEMBER(calchase_pic8259_1_set_int_line); DECLARE_READ8_MEMBER(get_slave_ack); DECLARE_DRIVER_INIT(calchase); + DECLARE_READ8_MEMBER(get_out2); virtual void machine_start(); virtual void machine_reset(); IRQ_CALLBACK_MEMBER(irq_callback); @@ -582,7 +583,7 @@ static ADDRESS_MAP_START( calchase_io, AS_IO, 32, calchase_state ) AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff) - AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff) + AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff) AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) /* todo: nvram (CMOS Setup Save)*/ AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) @@ -891,27 +892,21 @@ void calchase_state::machine_reset() membank("bios_ext")->set_base(memregion("bios")->base() + 0); } -static void set_gate_a20(running_machine &machine, int a20) +READ8_MEMBER(calchase_state::get_out2) { - calchase_state *drvstate = machine.driver_data(); - drvstate->m_maincpu->set_input_line(INPUT_LINE_A20, a20); -} - -static void keyboard_interrupt(running_machine &machine, int state) -{ - calchase_state *drvstate = machine.driver_data(); - pic8259_ir1_w(drvstate->m_pic8259_1, state); -} - -static int calchase_get_out2(running_machine &machine) -{ - calchase_state *state = machine.driver_data(); - return pit8253_get_output(state->m_pit8254, 2 ); + return pit8253_get_output( m_pit8254, 2 ); } static const struct kbdc8042_interface at8042 = { - KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, calchase_get_out2 + KBDC8042_AT386, + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET), + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20), + DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w), + DEVCB_NULL, + + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(calchase_state,get_out2) }; static void calchase_set_keyb_int(running_machine &machine, int state) @@ -937,7 +932,9 @@ static MACHINE_CONFIG_START( calchase, calchase_state ) MCFG_PCI_BUS_LEGACY_ADD("pcibus", 0) MCFG_PCI_BUS_LEGACY_DEVICE(0, NULL, intel82439tx_pci_r, intel82439tx_pci_w) MCFG_PCI_BUS_LEGACY_DEVICE(7, NULL, intel82371ab_pci_r, intel82371ab_pci_w) - + + MCFG_KBDC8042_ADD("kbdc", at8042) + /* video hardware */ MCFG_FRAGMENT_ADD( pcvideo_trident_vga ) @@ -971,7 +968,6 @@ DRIVER_INIT_MEMBER(calchase_state,calchase) intel82439tx_init(); - kbdc8042_init(machine(), &at8042); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x3f0b160, 0x3f0b163, read32_delegate(FUNC(calchase_state::calchase_idle_skip_r),this), write32_delegate(FUNC(calchase_state::calchase_idle_skip_w),this)); } diff --git a/src/mame/drivers/funkball.c b/src/mame/drivers/funkball.c index 5fdb0f90534..0b72698ad8f 100644 --- a/src/mame/drivers/funkball.c +++ b/src/mame/drivers/funkball.c @@ -166,6 +166,7 @@ public: virtual void machine_reset(); UINT32 screen_update_funkball(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); IRQ_CALLBACK_MEMBER(irq_callback); + DECLARE_READ8_MEMBER(get_out2); }; void funkball_state::video_start() @@ -589,7 +590,7 @@ static ADDRESS_MAP_START(funkball_io, AS_IO, 32, funkball_state) AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff) AM_RANGE(0x0020, 0x003f) AM_READWRITE8(io20_r, io20_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff) - AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff) + AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff) AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) /* todo: nvram (CMOS Setup Save)*/ AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r,at_page8_w, 0xffffffff) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) @@ -1059,28 +1060,21 @@ static const struct pic8259_interface funkball_pic8259_2_config = DEVCB_NULL }; -static void set_gate_a20(running_machine &machine, int a20) +READ8_MEMBER(funkball_state::get_out2) { - funkball_state *state = machine.driver_data(); - - state->m_maincpu->set_input_line(INPUT_LINE_A20, a20); -} - -static void keyboard_interrupt(running_machine &machine, int state) -{ - funkball_state *drvstate = machine.driver_data(); - pic8259_ir1_w(drvstate->m_pic8259_1, state); -} - -static int funkball_get_out2(running_machine &machine) -{ - funkball_state *state = machine.driver_data(); - return pit8253_get_output(state->m_pit8254, 2 ); + return pit8253_get_output( m_pit8254, 2 ); } static const struct kbdc8042_interface at8042 = { - KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, funkball_get_out2 + KBDC8042_AT386, + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET), + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20), + DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w), + DEVCB_NULL, + + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(funkball_state,get_out2) }; static void funkball_set_keyb_int(running_machine &machine, int state) @@ -1102,7 +1096,6 @@ void funkball_state::machine_start() m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(funkball_state::irq_callback),this)); - kbdc8042_init(machine(), &at8042); /* defaults, otherwise it won't boot */ m_unk_ram[0x010/4] = 0x2f8d85ff; @@ -1160,6 +1153,8 @@ static MACHINE_CONFIG_START( funkball, funkball_state ) MCFG_IDE_CONTROLLER_ADD("ide", ide_devices, "hdd", NULL, true) MCFG_IDE_CONTROLLER_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w)) + MCFG_KBDC8042_ADD("kbdc", at8042) + /* video hardware */ MCFG_3DFX_VOODOO_1_ADD("voodoo_0", STD_VOODOO_1_CLOCK, voodoo_intf) diff --git a/src/mame/drivers/gamecstl.c b/src/mame/drivers/gamecstl.c index 08536663f87..fdda95c2b9e 100644 --- a/src/mame/drivers/gamecstl.c +++ b/src/mame/drivers/gamecstl.c @@ -117,6 +117,7 @@ public: DECLARE_WRITE_LINE_MEMBER(gamecstl_pic8259_1_set_int_line); DECLARE_READ8_MEMBER(get_slave_ack); DECLARE_DRIVER_INIT(gamecstl); + DECLARE_READ8_MEMBER(get_out2); virtual void machine_start(); virtual void machine_reset(); virtual void video_start(); @@ -530,7 +531,7 @@ static ADDRESS_MAP_START(gamecstl_io, AS_IO, 32, gamecstl_state ) AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff) - AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff) + AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff) AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r,at_page8_w, 0xffffffff) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) @@ -685,6 +686,23 @@ static const struct pit8253_config gamecstl_pit8254_config = } }; +READ8_MEMBER(gamecstl_state::get_out2) +{ + return pit8253_get_output( m_pit8254, 2 ); +} + +static const struct kbdc8042_interface at8042 = +{ + KBDC8042_AT386, + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET), + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20), + DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w), + DEVCB_NULL, + + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(gamecstl_state,get_out2) +}; + static MACHINE_CONFIG_START( gamecstl, gamecstl_state ) /* basic machine hardware */ @@ -712,6 +730,8 @@ static MACHINE_CONFIG_START( gamecstl, gamecstl_state ) MCFG_MC146818_ADD( "rtc", MC146818_STANDARD ) + MCFG_KBDC8042_ADD("kbdc", at8042) + /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) @@ -726,29 +746,6 @@ static MACHINE_CONFIG_START( gamecstl, gamecstl_state ) MACHINE_CONFIG_END -static void set_gate_a20(running_machine &machine, int a20) -{ - gamecstl_state *drvstate = machine.driver_data(); - drvstate->m_maincpu->set_input_line(INPUT_LINE_A20, a20); -} - -static void keyboard_interrupt(running_machine &machine, int state) -{ - gamecstl_state *drvstate = machine.driver_data(); - pic8259_ir1_w(drvstate->m_pic8259_1, state); -} - -static int gamecstl_get_out2(running_machine &machine) -{ - gamecstl_state *state = machine.driver_data(); - return pit8253_get_output( state->m_pit8254, 2 ); -} - -static const struct kbdc8042_interface at8042 = -{ - KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, gamecstl_get_out2 -}; - static void gamecstl_set_keyb_int(running_machine &machine, int state) { gamecstl_state *drvstate = machine.driver_data(); @@ -763,7 +760,6 @@ DRIVER_INIT_MEMBER(gamecstl_state,gamecstl) intel82439tx_init(); - kbdc8042_init(machine(), &at8042); } /*****************************************************************************/ diff --git a/src/mame/drivers/gammagic.c b/src/mame/drivers/gammagic.c index 1cbc754ce6d..0505d0b1c6f 100644 --- a/src/mame/drivers/gammagic.c +++ b/src/mame/drivers/gammagic.c @@ -104,6 +104,7 @@ public: DECLARE_DRIVER_INIT(gammagic); IRQ_CALLBACK_MEMBER(irq_callback); + DECLARE_READ8_MEMBER(get_out2); required_device m_maincpu; }; @@ -559,7 +560,7 @@ static ADDRESS_MAP_START( gammagic_io, AS_IO, 32, gammagic_state) AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff) - AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff) + AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff) AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) AM_RANGE(0x0080, 0x009f) AM_READWRITE8_LEGACY(at_page8_r, at_page8_w, 0xffffffff) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) @@ -747,27 +748,21 @@ static const struct pit8253_config gammagic_pit8254_config = } }; -static void set_gate_a20(running_machine &machine, int a20) +READ8_MEMBER(gammagic_state::get_out2) { - gammagic_state *drvstate = machine.driver_data(); - drvstate->m_maincpu->set_input_line(INPUT_LINE_A20, a20); -} - -static void keyboard_interrupt(running_machine &machine, int state) -{ - gammagic_state *drvstate = machine.driver_data(); - pic8259_ir1_w(drvstate->m_pic8259_1, state); -} - -static int gammagic_get_out2(running_machine &machine) -{ - gammagic_state *state = machine.driver_data(); - return pit8253_get_output(state->m_pit8254, 2 ); + return pit8253_get_output( m_pit8254, 2 ); } static const struct kbdc8042_interface at8042 = { - KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, gammagic_get_out2 + KBDC8042_AT386, + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET), + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20), + DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w), + DEVCB_NULL, + + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(gammagic_state,get_out2) }; static void gammagic_set_keyb_int(running_machine &machine, int state) @@ -795,6 +790,8 @@ static MACHINE_CONFIG_START( gammagic, gammagic_state ) // MCFG_PCI_BUS_DEVICE(1, "i82371sb", i82371sb_pci_read, i82371sb_pci_write) /* video hardware */ MCFG_FRAGMENT_ADD( pcvideo_vga ) + + MCFG_KBDC8042_ADD("kbdc", at8042) MACHINE_CONFIG_END @@ -802,7 +799,6 @@ MACHINE_CONFIG_END DRIVER_INIT_MEMBER(gammagic_state,gammagic) { init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, gammagic_set_keyb_int); - kbdc8042_init(machine(), &at8042); atapi_init(machine()); } diff --git a/src/mame/drivers/mediagx.c b/src/mame/drivers/mediagx.c index 30251419154..cba14908d55 100644 --- a/src/mame/drivers/mediagx.c +++ b/src/mame/drivers/mediagx.c @@ -199,6 +199,7 @@ public: DECLARE_READ32_MEMBER(speedup9_r); DECLARE_READ32_MEMBER(speedup10_r); DECLARE_READ32_MEMBER(speedup11_r); + DECLARE_READ8_MEMBER(get_out2); TIMER_DEVICE_CALLBACK_MEMBER(sound_timer_callback); IRQ_CALLBACK_MEMBER(irq_callback); void draw_char(bitmap_rgb32 &bitmap, const rectangle &cliprect, gfx_element *gfx, int ch, int att, int x, int y); @@ -960,7 +961,7 @@ static ADDRESS_MAP_START(mediagx_io, AS_IO, 32, mediagx_state ) AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff) AM_RANGE(0x0020, 0x003f) AM_READWRITE8(io20_r, io20_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff) - AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff) + AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff) AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_slave", pic8259_r, pic8259_w, 0xffffffff) @@ -1156,6 +1157,23 @@ static RAMDAC_INTERFACE( ramdac_intf ) 0 }; +READ8_MEMBER(mediagx_state::get_out2) +{ + return pit8253_get_output( m_pit8254, 2 ); +} + +static const struct kbdc8042_interface at8042 = +{ + KBDC8042_AT386, + 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_NULL, + DEVCB_DRIVER_MEMBER(mediagx_state,get_out2) +}; + static MACHINE_CONFIG_START( mediagx, mediagx_state ) /* basic machine hardware */ @@ -1196,6 +1214,7 @@ static MACHINE_CONFIG_START( mediagx, mediagx_state ) MCFG_GFXDECODE(CGA) MCFG_PALETTE_LENGTH(256) + MCFG_KBDC8042_ADD("kbdc", at8042) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") @@ -1207,31 +1226,7 @@ static MACHINE_CONFIG_START( mediagx, mediagx_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) MACHINE_CONFIG_END -static void set_gate_a20(running_machine &machine, int a20) -{ - mediagx_state *state = machine.driver_data(); - state->m_maincpu->set_input_line(INPUT_LINE_A20, a20); -} - -static void keyboard_interrupt(running_machine &machine, int _state) -{ - mediagx_state *state = machine.driver_data(); - - pic8259_ir1_w(state->m_pic8259_1, _state); -} - -static int mediagx_get_out2(running_machine &machine) -{ - mediagx_state *state = machine.driver_data(); - - return pit8253_get_output( state->m_pit8254, 2 ); -} - -static const struct kbdc8042_interface at8042 = -{ - KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, mediagx_get_out2 -}; - + static void mediagx_set_keyb_int(running_machine &machine, int _state) { mediagx_state *state = machine.driver_data(); @@ -1244,8 +1239,6 @@ void mediagx_state::init_mediagx() m_frame_width = m_frame_height = 1; init_pc_common(machine(), PCCOMMON_KEYBOARD_AT,mediagx_set_keyb_int); - - kbdc8042_init(machine(), &at8042); } #if SPEEDUP_HACKS diff --git a/src/mame/drivers/midqslvr.c b/src/mame/drivers/midqslvr.c index ae24ac01e6d..ff8cbd7dcca 100644 --- a/src/mame/drivers/midqslvr.c +++ b/src/mame/drivers/midqslvr.c @@ -96,6 +96,7 @@ public: DECLARE_WRITE_LINE_MEMBER(pc_dack2_w); DECLARE_WRITE_LINE_MEMBER(pc_dack3_w); DECLARE_WRITE_LINE_MEMBER(midqslvr_pic8259_1_set_int_line); + DECLARE_READ8_MEMBER(get_out2); virtual void machine_start(); virtual void machine_reset(); IRQ_CALLBACK_MEMBER(irq_callback); @@ -549,7 +550,7 @@ static ADDRESS_MAP_START(midqslvr_io, AS_IO, 32, midqslvr_state) AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff) - AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff) + AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff) AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) /* todo: nvram (CMOS Setup Save)*/ AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r,at_page8_w,0xffffffff) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) @@ -612,28 +613,21 @@ static const struct pic8259_interface midqslvr_pic8259_2_config = DEVCB_NULL }; -static void set_gate_a20(running_machine &machine, int a20) +READ8_MEMBER(midqslvr_state::get_out2) { - midqslvr_state *state = machine.driver_data(); - - state->m_maincpu->set_input_line(INPUT_LINE_A20, a20); -} - -static void keyboard_interrupt(running_machine &machine, int state) -{ - midqslvr_state *drvstate = machine.driver_data(); - pic8259_ir1_w(drvstate->m_pic8259_1, state); -} - -static int midqslvr_get_out2(running_machine &machine) -{ - midqslvr_state *state = machine.driver_data(); - return pit8253_get_output(state->m_pit8254, 2 ); + return pit8253_get_output( m_pit8254, 2 ); } static const struct kbdc8042_interface at8042 = { - KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, midqslvr_get_out2 + KBDC8042_AT386, + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET), + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20), + DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w), + DEVCB_NULL, + + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(midqslvr_state,get_out2) }; static void midqslvr_set_keyb_int(running_machine &machine, int state) @@ -662,7 +656,6 @@ void midqslvr_state::machine_start() m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(midqslvr_state::irq_callback),this)); intel82439tx_init(); - kbdc8042_init(machine(), &at8042); } void midqslvr_state::machine_reset() @@ -697,6 +690,8 @@ static MACHINE_CONFIG_START( midqslvr, midqslvr_state ) MCFG_IDE_CONTROLLER_ADD("ide", ide_devices, "hdd", NULL, true) MCFG_IDE_CONTROLLER_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w)) + MCFG_KBDC8042_ADD("kbdc", at8042) + /* video hardware */ MCFG_FRAGMENT_ADD( pcvideo_vga ) MACHINE_CONFIG_END diff --git a/src/mame/drivers/pangofun.c b/src/mame/drivers/pangofun.c index 419dccb3f27..e7e9bc1a4e4 100644 --- a/src/mame/drivers/pangofun.c +++ b/src/mame/drivers/pangofun.c @@ -109,6 +109,7 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu") { } + DECLARE_READ8_MEMBER(get_out2); DECLARE_DRIVER_INIT(pangofun); virtual void machine_start(); required_device m_maincpu; @@ -176,32 +177,27 @@ static void pangofun_set_keyb_int(running_machine &machine, int state) pic8259_ir1_w(machine.device("pic8259_1"), state); } -static void set_gate_a20(running_machine &machine, int a20) +READ8_MEMBER(pangofun_state::get_out2) { - pangofun_state *state = machine.driver_data(); - state->m_maincpu->set_input_line(INPUT_LINE_A20, a20); + return pit8253_get_output( machine().device("pit8254"), 2 ); } -static void keyboard_interrupt(running_machine &machine, int state) -{ - pic8259_ir1_w(machine.device("pic8259_1"), state); -} - -static int pcat_dyn_get_out2(running_machine &machine) { - return pit8253_get_output(machine.device("pit8254"), 2 ); -} - - static const struct kbdc8042_interface at8042 = { - KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, pcat_dyn_get_out2 + KBDC8042_AT386, + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET), + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20), + DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w), + DEVCB_NULL, + + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(pangofun_state,get_out2) }; void pangofun_state::machine_start() { m_maincpu->set_irq_acknowledge_callback(pcat_irq_callback); init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, pangofun_set_keyb_int); - kbdc8042_init(machine(), &at8042); } @@ -219,6 +215,8 @@ static MACHINE_CONFIG_START( pangofun, pangofun_state ) MCFG_MC146818_ADD( "rtc", MC146818_STANDARD ) MCFG_FRAGMENT_ADD( pcat_common ) + + MCFG_KBDC8042_ADD("kbdc", at8042) MACHINE_CONFIG_END diff --git a/src/mame/drivers/pcat_dyn.c b/src/mame/drivers/pcat_dyn.c index ac35dcad3fc..7c8fd677fcb 100644 --- a/src/mame/drivers/pcat_dyn.c +++ b/src/mame/drivers/pcat_dyn.c @@ -44,6 +44,7 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu") { } + DECLARE_READ8_MEMBER(get_out2); DECLARE_DRIVER_INIT(pcat_dyn); virtual void machine_start(); required_device m_maincpu; @@ -114,32 +115,26 @@ static void pcat_dyn_set_keyb_int(running_machine &machine, int state) pic8259_ir1_w(machine.device("pic8259_1"), state); } -static void set_gate_a20(running_machine &machine, int a20) +READ8_MEMBER(pcat_dyn_state::get_out2) { - pcat_dyn_state *state = machine.driver_data(); - state->m_maincpu->set_input_line(INPUT_LINE_A20, a20); + return pit8253_get_output( machine().device("pit8254"), 2 ); } -static void keyboard_interrupt(running_machine &machine, int state) -{ - pic8259_ir1_w(machine.device("pic8259_1"), state); -} - -static int pcat_dyn_get_out2(running_machine &machine) { - return pit8253_get_output(machine.device("pit8254"), 2 ); -} - - static const struct kbdc8042_interface at8042 = { - KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, pcat_dyn_get_out2 -}; + KBDC8042_AT386, + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET), + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20), + DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w), + DEVCB_NULL, + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(pcat_dyn_state,get_out2) +}; void pcat_dyn_state::machine_start() { m_maincpu->set_irq_acknowledge_callback(pcat_irq_callback); init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, pcat_dyn_set_keyb_int); - kbdc8042_init(machine(), &at8042); } static MACHINE_CONFIG_START( pcat_dyn, pcat_dyn_state ) @@ -156,6 +151,8 @@ static MACHINE_CONFIG_START( pcat_dyn, pcat_dyn_state ) MCFG_MC146818_ADD( "rtc", MC146818_STANDARD ) MCFG_FRAGMENT_ADD( pcat_common ) + + MCFG_KBDC8042_ADD("kbdc", at8042) MACHINE_CONFIG_END /*************************************** diff --git a/src/mame/drivers/photoply.c b/src/mame/drivers/photoply.c index 418ff593393..7111ba5d3e0 100644 --- a/src/mame/drivers/photoply.c +++ b/src/mame/drivers/photoply.c @@ -57,6 +57,7 @@ public: DECLARE_WRITE_LINE_MEMBER(at_pit8254_out0_changed); DECLARE_WRITE_LINE_MEMBER(at_pit8254_out2_changed); DECLARE_DRIVER_INIT(photoply); + DECLARE_READ8_MEMBER(get_out2); virtual void machine_start(); IRQ_CALLBACK_MEMBER(irq_callback); required_device m_maincpu; @@ -284,7 +285,7 @@ static ADDRESS_MAP_START( photoply_io, AS_IO, 32, photoply_state ) AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff) - AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff) + AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff) AM_RANGE(0x0070, 0x007f) AM_RAM//DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) AM_RANGE(0x0080, 0x009f) AM_READWRITE8(dma_page_select_r,dma_page_select_w, 0xffffffff)//TODO AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) @@ -334,6 +335,22 @@ static INPUT_PORTS_START( photoply ) PORT_START("pc_keyboard_7") INPUT_PORTS_END +READ8_MEMBER(photoply_state::get_out2) +{ + return pit8253_get_output( m_pit8253, 2 ); +} + +static const struct kbdc8042_interface at8042 = +{ + KBDC8042_AT386, + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET), + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20), + DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w), + DEVCB_NULL, + + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(photoply_state,get_out2) +}; static void photoply_set_keyb_int(running_machine &machine, int state) { @@ -391,6 +408,8 @@ static MACHINE_CONFIG_START( photoply, photoply_state ) MCFG_IDE_CONTROLLER_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w)) MCFG_FRAGMENT_ADD( pcvideo_vga ) + + MCFG_KBDC8042_ADD("kbdc", at8042) MACHINE_CONFIG_END diff --git a/src/mame/drivers/queen.c b/src/mame/drivers/queen.c index 02d4c7cd867..17acf62282c 100644 --- a/src/mame/drivers/queen.c +++ b/src/mame/drivers/queen.c @@ -88,6 +88,7 @@ public: DECLARE_WRITE_LINE_MEMBER(pc_dack2_w); DECLARE_WRITE_LINE_MEMBER(pc_dack3_w); DECLARE_WRITE_LINE_MEMBER(queen_pic8259_1_set_int_line); + DECLARE_READ8_MEMBER(get_out2); virtual void machine_start(); virtual void machine_reset(); IRQ_CALLBACK_MEMBER(irq_callback); @@ -413,7 +414,7 @@ static ADDRESS_MAP_START( queen_io, AS_IO, 32, queen_state ) AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff) - AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff) + AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff) AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) /* todo: nvram (CMOS Setup Save)*/ AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) @@ -476,28 +477,21 @@ static const struct pic8259_interface queen_pic8259_2_config = DEVCB_NULL }; -static void set_gate_a20(running_machine &machine, int a20) +READ8_MEMBER(queen_state::get_out2) { - queen_state *state = machine.driver_data(); - - state->m_maincpu->set_input_line(INPUT_LINE_A20, a20); -} - -static void keyboard_interrupt(running_machine &machine, int state) -{ - queen_state *drvstate = machine.driver_data(); - pic8259_ir1_w(drvstate->m_pic8259_1, state); -} - -static int queen_get_out2(running_machine &machine) -{ - queen_state *state = machine.driver_data(); - return pit8253_get_output(state->m_pit8254, 2 ); + return pit8253_get_output( m_pit8254, 2 ); } static const struct kbdc8042_interface at8042 = { - KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, queen_get_out2 + KBDC8042_AT386, + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET), + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20), + DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w), + DEVCB_NULL, + + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(queen_state,get_out2) }; static void queen_set_keyb_int(running_machine &machine, int state) @@ -521,7 +515,6 @@ void queen_state::machine_start() m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(queen_state::irq_callback),this)); intel82439tx_init(); - kbdc8042_init(machine(), &at8042); } void queen_state::machine_reset() @@ -555,6 +548,8 @@ static MACHINE_CONFIG_START( queen, queen_state ) /* video hardware */ MCFG_FRAGMENT_ADD( pcvideo_vga ) + + MCFG_KBDC8042_ADD("kbdc", at8042) MACHINE_CONFIG_END diff --git a/src/mame/drivers/savquest.c b/src/mame/drivers/savquest.c index 2015e7b3913..1ae627af422 100644 --- a/src/mame/drivers/savquest.c +++ b/src/mame/drivers/savquest.c @@ -100,6 +100,7 @@ public: DECLARE_WRITE_LINE_MEMBER(pc_dack2_w); DECLARE_WRITE_LINE_MEMBER(pc_dack3_w); DECLARE_WRITE_LINE_MEMBER(savquest_pic8259_1_set_int_line); + DECLARE_READ8_MEMBER(get_out2); virtual void machine_start(); virtual void machine_reset(); IRQ_CALLBACK_MEMBER(irq_callback); @@ -507,7 +508,7 @@ static ADDRESS_MAP_START(savquest_io, AS_IO, 32, savquest_state) AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff) - AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff) + AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff) AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) /* todo: nvram (CMOS Setup Save)*/ AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) @@ -575,28 +576,21 @@ static const struct pic8259_interface savquest_pic8259_2_config = DEVCB_NULL }; -static void set_gate_a20(running_machine &machine, int a20) +READ8_MEMBER(savquest_state::get_out2) { - savquest_state *state = machine.driver_data(); - - state->m_maincpu->set_input_line(INPUT_LINE_A20, a20); -} - -static void keyboard_interrupt(running_machine &machine, int state) -{ - savquest_state *drvstate = machine.driver_data(); - pic8259_ir1_w(drvstate->m_pic8259_1, state); -} - -static int savquest_get_out2(running_machine &machine) -{ - savquest_state *state = machine.driver_data(); - return pit8253_get_output(state->m_pit8254, 2 ); + return pit8253_get_output( m_pit8254, 2 ); } static const struct kbdc8042_interface at8042 = { - KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, savquest_get_out2 + KBDC8042_AT386, + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET), + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20), + DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w), + DEVCB_NULL, + + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(savquest_state,get_out2) }; static void savquest_set_keyb_int(running_machine &machine, int state) @@ -623,7 +617,6 @@ void savquest_state::machine_start() m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(savquest_state::irq_callback),this)); intel82439tx_init(); - kbdc8042_init(machine(), &at8042); } void savquest_state::machine_reset() @@ -658,6 +651,8 @@ static MACHINE_CONFIG_START( savquest, savquest_state ) /* video hardware */ MCFG_FRAGMENT_ADD( pcvideo_vga ) + + MCFG_KBDC8042_ADD("kbdc", at8042) MACHINE_CONFIG_END ROM_START( savquest ) diff --git a/src/mame/drivers/su2000.c b/src/mame/drivers/su2000.c index 99ac76b7d68..1cf62cf40a2 100644 --- a/src/mame/drivers/su2000.c +++ b/src/mame/drivers/su2000.c @@ -79,6 +79,7 @@ public: UINT32 *m_pc_ram; DECLARE_WRITE_LINE_MEMBER(su2000_pic8259_1_set_int_line); + DECLARE_READ8_MEMBER(get_out2); DECLARE_READ8_MEMBER(get_slave_ack); virtual void machine_start(); virtual void machine_reset(); @@ -128,31 +129,21 @@ static void su2000_set_keyb_int(running_machine &machine, int state) pic8259_ir1_w(drv_state->m_pic8259_1, state); } -static void set_gate_a20(running_machine &machine, int a20) +READ8_MEMBER(su2000_state::get_out2) { - su2000_state *state = machine.driver_data(); - state->m_maincpu->set_input_line(INPUT_LINE_A20, a20); -} - -static void keyboard_interrupt(running_machine &machine, int state) -{ - su2000_state *drv_state = machine.driver_data(); - pic8259_ir1_w(drv_state->m_pic8259_1, state); -} - -static int pcat_get_out2(running_machine &machine) -{ - su2000_state *state = machine.driver_data(); - return pit8253_get_output(state->m_pit8254, 2); + return pit8253_get_output( machine().device("pit8254"), 2 ); } static const struct kbdc8042_interface at8042 = { KBDC8042_AT386, - set_gate_a20, - keyboard_interrupt, - NULL, - pcat_get_out2, + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET), + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20), + DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w), + DEVCB_NULL, + + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(su2000_state,get_out2) }; @@ -277,8 +268,6 @@ void su2000_state::machine_start() m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(su2000_state::irq_callback),this)); init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, su2000_set_keyb_int); - - kbdc8042_init(machine(), &at8042); } void su2000_state::machine_reset() @@ -319,6 +308,8 @@ static MACHINE_CONFIG_START( su2000, su2000_state ) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // TODO MCFG_FRAGMENT_ADD(pcat_common) + + MCFG_KBDC8042_ADD("kbdc", at8042) MACHINE_CONFIG_END diff --git a/src/mame/drivers/taitowlf.c b/src/mame/drivers/taitowlf.c index 5bc8218d11b..e0c0b02c1e9 100644 --- a/src/mame/drivers/taitowlf.c +++ b/src/mame/drivers/taitowlf.c @@ -92,6 +92,7 @@ public: DECLARE_WRITE_LINE_MEMBER(taitowlf_pic8259_1_set_int_line); DECLARE_READ8_MEMBER(get_slave_ack); DECLARE_DRIVER_INIT(taitowlf); + DECLARE_READ8_MEMBER(get_out2); virtual void machine_start(); virtual void machine_reset(); #if !ENABLE_VGA @@ -489,7 +490,7 @@ static ADDRESS_MAP_START(taitowlf_io, AS_IO, 32, taitowlf_state ) AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff) - AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff) + AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff) AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) @@ -634,6 +635,23 @@ void taitowlf_state::palette_init() } #endif +READ8_MEMBER(taitowlf_state::get_out2) +{ + return pit8253_get_output( m_pit8254, 2 ); +} + +static const struct kbdc8042_interface at8042 = +{ + KBDC8042_AT386, + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET), + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20), + DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w), + DEVCB_NULL, + + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(taitowlf_state,get_out2) +}; + static MACHINE_CONFIG_START( taitowlf, taitowlf_state ) /* basic machine hardware */ @@ -655,6 +673,8 @@ static MACHINE_CONFIG_START( taitowlf, taitowlf_state ) MCFG_IDE_CONTROLLER_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w)) MCFG_MC146818_ADD( "rtc", MC146818_STANDARD ) + MCFG_KBDC8042_ADD("kbdc", at8042) + /* video hardware */ #if ENABLE_VGA MCFG_FRAGMENT_ADD( pcvideo_vga ) @@ -670,28 +690,6 @@ static MACHINE_CONFIG_START( taitowlf, taitowlf_state ) #endif MACHINE_CONFIG_END -static void set_gate_a20(running_machine &machine, int a20) -{ - taitowlf_state *drvstate = machine.driver_data(); - drvstate->m_maincpu->set_input_line(INPUT_LINE_A20, a20); -} - -static void keyboard_interrupt(running_machine &machine, int state) -{ - taitowlf_state *drvstate = machine.driver_data(); - pic8259_ir1_w(drvstate->m_pic8259_1, state); -} - -static int taitowlf_get_out2(running_machine &machine) -{ - taitowlf_state *state = machine.driver_data(); - return pit8253_get_output(state->m_pit8254, 2 ); -} - -static const struct kbdc8042_interface at8042 = -{ - KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, taitowlf_get_out2 -}; static void taitowlf_set_keyb_int(running_machine &machine, int state) { @@ -707,7 +705,6 @@ DRIVER_INIT_MEMBER(taitowlf_state,taitowlf) intel82439tx_init(); - kbdc8042_init(machine(), &at8042); } /*****************************************************************************/ diff --git a/src/mame/drivers/voyager.c b/src/mame/drivers/voyager.c index 96ddfd4c138..4c937404739 100644 --- a/src/mame/drivers/voyager.c +++ b/src/mame/drivers/voyager.c @@ -66,6 +66,7 @@ public: DECLARE_WRITE32_MEMBER(fdc_w); DECLARE_WRITE_LINE_MEMBER(voyager_pic8259_1_set_int_line); DECLARE_READ8_MEMBER(get_slave_ack); + DECLARE_READ8_MEMBER(get_out2); DECLARE_DRIVER_INIT(voyager); virtual void machine_start(); virtual void machine_reset(); @@ -421,7 +422,7 @@ static ADDRESS_MAP_START( voyager_io, AS_IO, 32, voyager_state ) AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff) - AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff) + AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff) AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) /* todo: nvram (CMOS Setup Save)*/ AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) @@ -726,27 +727,21 @@ void voyager_state::machine_reset() membank("bank1")->set_base(memregion("bios")->base()); } -static void set_gate_a20(running_machine &machine, int a20) +READ8_MEMBER(voyager_state::get_out2) { - voyager_state *state = machine.driver_data(); - state->m_maincpu->set_input_line(INPUT_LINE_A20, a20); -} - -static void keyboard_interrupt(running_machine &machine, int state) -{ - voyager_state *drvstate = machine.driver_data(); - pic8259_ir1_w(drvstate->m_pic8259_1, state); -} - -static int voyager_get_out2(running_machine &machine) -{ - voyager_state *state = machine.driver_data(); - return pit8253_get_output(state->m_pit8254, 2 ); + return pit8253_get_output( m_pit8254, 2 ); } static const struct kbdc8042_interface at8042 = { - KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, voyager_get_out2 + KBDC8042_AT386, + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET), + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20), + DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w), + DEVCB_NULL, + + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(voyager_state,get_out2) }; static void voyager_set_keyb_int(running_machine &machine, int state) @@ -774,9 +769,11 @@ static MACHINE_CONFIG_START( voyager, voyager_state ) MCFG_PCI_BUS_LEGACY_DEVICE(0, NULL, intel82439tx_pci_r, intel82439tx_pci_w) MCFG_PCI_BUS_LEGACY_DEVICE(7, NULL, intel82371ab_pci_r, intel82371ab_pci_w) + MCFG_KBDC8042_ADD("kbdc", at8042) + /* video hardware */ MCFG_FRAGMENT_ADD( pcvideo_trident_vga ) - + /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker","rspeaker") MACHINE_CONFIG_END @@ -789,7 +786,6 @@ DRIVER_INIT_MEMBER(voyager_state,voyager) intel82439tx_init(); - kbdc8042_init(machine(), &at8042); } ROM_START( voyager ) diff --git a/src/mame/drivers/xtom3d.c b/src/mame/drivers/xtom3d.c index 7ce398ec468..eab5a267c18 100644 --- a/src/mame/drivers/xtom3d.c +++ b/src/mame/drivers/xtom3d.c @@ -113,6 +113,7 @@ public: DECLARE_WRITE_LINE_MEMBER(pc_dack2_w); DECLARE_WRITE_LINE_MEMBER(pc_dack3_w); DECLARE_WRITE_LINE_MEMBER(xtom3d_pic8259_1_set_int_line); + DECLARE_READ8_MEMBER(get_out2); virtual void machine_start(); virtual void machine_reset(); IRQ_CALLBACK_MEMBER(irq_callback); @@ -540,7 +541,7 @@ static ADDRESS_MAP_START(xtom3d_io, AS_IO, 32, xtom3d_state) AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff) - AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff) + AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff) AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) /* todo: nvram (CMOS Setup Save)*/ AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff) AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) @@ -604,28 +605,21 @@ static const struct pic8259_interface xtom3d_pic8259_2_config = DEVCB_NULL }; -static void set_gate_a20(running_machine &machine, int a20) +READ8_MEMBER(xtom3d_state::get_out2) { - xtom3d_state *state = machine.driver_data(); - - state->m_maincpu->set_input_line(INPUT_LINE_A20, a20); -} - -static void keyboard_interrupt(running_machine &machine, int state) -{ - xtom3d_state *drvstate = machine.driver_data(); - pic8259_ir1_w(drvstate->m_pic8259_1, state); -} - -static int xtom3d_get_out2(running_machine &machine) -{ - xtom3d_state *state = machine.driver_data(); - return pit8253_get_output(state->m_pit8254, 2 ); + return pit8253_get_output( m_pit8254, 2 ); } static const struct kbdc8042_interface at8042 = { - KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, xtom3d_get_out2 + KBDC8042_AT386, + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET), + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20), + DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w), + DEVCB_NULL, + + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(xtom3d_state,get_out2) }; static void xtom3d_set_keyb_int(running_machine &machine, int state) @@ -654,7 +648,6 @@ void xtom3d_state::machine_start() m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(xtom3d_state::irq_callback),this)); intel82439tx_init(); - kbdc8042_init(machine(), &at8042); } void xtom3d_state::machine_reset() @@ -689,6 +682,8 @@ static MACHINE_CONFIG_START( xtom3d, xtom3d_state ) MCFG_IDE_CONTROLLER_ADD("ide", ide_devices, "hdd", NULL, true) MCFG_IDE_CONTROLLER_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w)) + MCFG_KBDC8042_ADD("kbdc", at8042) + /* video hardware */ MCFG_FRAGMENT_ADD( pcvideo_vga ) MACHINE_CONFIG_END diff --git a/src/mame/machine/pcshare.c b/src/mame/machine/pcshare.c index 6263fbbecba..adc33b1d9ee 100644 --- a/src/mame/machine/pcshare.c +++ b/src/mame/machine/pcshare.c @@ -329,7 +329,7 @@ ADDRESS_MAP_START( pcat32_io_common, AS_IO, 32, driver_device ) AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff) AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff) AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff) - AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff) + AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff) AM_RANGE(0x0070, 0x007f) AM_RAM //AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) AM_RANGE(0x0080, 0x009f) AM_READWRITE8_LEGACY(dma_page_select_r,dma_page_select_w, 0xffffffff)//TODO AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff) diff --git a/src/mess/drivers/bebox.c b/src/mess/drivers/bebox.c index 855bfcbbca8..b961fe61f1a 100644 --- a/src/mess/drivers/bebox.c +++ b/src/mess/drivers/bebox.c @@ -34,6 +34,7 @@ #include "machine/scsihd.h" #include "formats/pc_dsk.h" #include "machine/ram.h" +#include "machine/8042kbdc.h" READ8_MEMBER(bebox_state::at_dma8237_1_r) { return machine().device("dma8237_2")->i8237_r(space, offset / 2); } WRITE8_MEMBER(bebox_state::at_dma8237_1_w) { machine().device("dma8237_2")->i8237_w(space, offset / 2, data); } @@ -48,7 +49,7 @@ static ADDRESS_MAP_START( bebox_mem, AS_PROGRAM, 64, bebox_state ) AM_RANGE(0x80000000, 0x8000001F) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, U64(0xffffffffffffffff) ) AM_RANGE(0x80000020, 0x8000003F) AM_DEVREADWRITE8_LEGACY("pic8259_master", pic8259_r, pic8259_w, U64(0xffffffffffffffff) ) AM_RANGE(0x80000040, 0x8000005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, U64(0xffffffffffffffff) ) - AM_RANGE(0x80000060, 0x8000006F) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, U64(0xffffffffffffffff) ) + AM_RANGE(0x80000060, 0x8000006F) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, U64(0xffffffffffffffff) ) AM_RANGE(0x80000070, 0x8000007F) AM_DEVREADWRITE8("rtc", mc146818_device, read, write , U64(0xffffffffffffffff) ) AM_RANGE(0x80000080, 0x8000009F) AM_READWRITE8(bebox_page_r, bebox_page_w, U64(0xffffffffffffffff) ) AM_RANGE(0x800000A0, 0x800000BF) AM_DEVREADWRITE8_LEGACY("pic8259_slave", pic8259_r, pic8259_w, U64(0xffffffffffffffff) ) @@ -143,6 +144,38 @@ const struct mpc105_interface mpc105_config = 0 }; + +/************************************* + * + * Keyboard + * + *************************************/ + +WRITE_LINE_MEMBER(bebox_state::bebox_keyboard_interrupt) +{ + bebox_set_irq_bit(machine(), 16, state); + if ( m_devices.pic8259_master ) { + pic8259_ir1_w(m_devices.pic8259_master, state); + } +} + +READ8_MEMBER(bebox_state::bebox_get_out2) +{ + return pit8253_get_output(machine().device("pit8254"), 2 ); +} + +static const struct kbdc8042_interface bebox_8042_interface = +{ + KBDC8042_STANDARD, + DEVCB_CPU_INPUT_LINE("ppc1", INPUT_LINE_RESET), + DEVCB_NULL, + DEVCB_DRIVER_LINE_MEMBER(bebox_state,bebox_keyboard_interrupt), + DEVCB_NULL, + + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(bebox_state,bebox_get_out2) +}; + static SLOT_INTERFACE_START( pci_devices ) SLOT_INTERFACE_INTERNAL("mpc105", MPC105) SLOT_INTERFACE("cirrus", CIRRUS) @@ -203,6 +236,7 @@ static MACHINE_CONFIG_START( bebox, bebox_state ) MCFG_MC146818_ADD( "rtc", MC146818_STANDARD ) + MCFG_KBDC8042_ADD("kbdc", bebox_8042_interface) /* internal ram */ MCFG_RAM_ADD(RAM_TAG) MCFG_RAM_DEFAULT_SIZE("32M") diff --git a/src/mess/drivers/ip22.c b/src/mess/drivers/ip22.c index db5ed27bc11..64696f878aa 100644 --- a/src/mess/drivers/ip22.c +++ b/src/mess/drivers/ip22.c @@ -100,7 +100,8 @@ public: m_mainram(*this, "mainram"), m_lpt0(*this, "lpt_0"), m_pit(*this, "pit8254"), - m_dac(*this, "dac") + m_dac(*this, "dac"), + m_kbdc8042(*this, "kbdc") { } RTC_t m_RTC; @@ -130,6 +131,7 @@ public: DECLARE_READ32_MEMBER(hpc3_unkpbus0_r); DECLARE_WRITE32_MEMBER(hpc3_unkpbus0_w); DECLARE_WRITE_LINE_MEMBER(scsi_irq); + DECLARE_READ8_MEMBER(ip22_get_out2); DECLARE_DRIVER_INIT(ip225015); virtual void machine_start(); virtual void machine_reset(); @@ -143,6 +145,7 @@ public: required_device m_lpt0; required_device m_pit; required_device m_dac; + required_device m_kbdc8042; inline void ATTR_PRINTF(3,4) verboselog(int n_level, const char *s_fmt, ... ); void int3_raise_local0_irq(UINT8 source_mask); void int3_lower_local0_irq(UINT8 source_mask); @@ -281,9 +284,9 @@ READ32_MEMBER(ip22_state::hpc3_pbus6_r) //verboselog(2, "Serial 2 Command Transfer Read, 0x1fbd9838: %02x\n", 0x04 ); return 0x00000004; case 0x40/4: - return kbdc8042_8_r(space, 0); + return m_kbdc8042->data_r(space, 0); case 0x44/4: - return kbdc8042_8_r(space, 4); + return m_kbdc8042->data_r(space, 4); case 0x58/4: return 0x20; // chip rev 1, board rev 0, "Guinness" (Indy) => 0x01 for "Full House" (Indigo2) case 0x80/4: @@ -365,10 +368,10 @@ WRITE32_MEMBER(ip22_state::hpc3_pbus6_w) } break; case 0x40/4: - kbdc8042_8_w(space, 0, data); + m_kbdc8042->data_w(space, 0, data); break; case 0x44/4: - kbdc8042_8_w(space, 4, data); + m_kbdc8042->data_w(space, 4, data); break; case 0x80/4: case 0x84/4: @@ -1475,10 +1478,9 @@ static const struct WD33C93interface wd33c93_intf = DEVCB_DRIVER_LINE_MEMBER(ip22_state,scsi_irq) /* command completion IRQ */ }; -static int ip22_get_out2(running_machine &machine) +READ8_MEMBER(ip22_state::ip22_get_out2) { - ip22_state *state = machine.driver_data(); - return pit8253_get_output(state->m_pit, 2 ); + return pit8253_get_output(m_pit, 2 ); } void ip22_state::machine_start() @@ -1490,17 +1492,23 @@ void ip22_state::machine_start() machine().device("nvram")->set_base(m_RTC.nRAM, 0x200); } +static const struct kbdc8042_interface at8042 = +{ + KBDC8042_STANDARD, + DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET), + DEVCB_NULL, + DEVCB_NULL, + DEVCB_NULL, + + DEVCB_NULL, + DEVCB_DRIVER_MEMBER(ip22_state,ip22_get_out2) +}; + DRIVER_INIT_MEMBER(ip22_state,ip225015) { - static const struct kbdc8042_interface at8042 = - { - KBDC8042_STANDARD, NULL, NULL, NULL, ip22_get_out2 - }; - // IP22 uses 2 pieces of PC-compatible hardware: the 8042 PS/2 keyboard/mouse // interface and the 8254 PIT. Both are licensed cores embedded in the IOC custom chip. init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, NULL); - kbdc8042_init(machine(), &at8042); m_nIOC_ParReadCnt = 0; } @@ -1637,7 +1645,8 @@ static MACHINE_CONFIG_START( ip225015, ip22_state ) MCFG_SOUND_MODIFY( "scsi:cdrom:cdda" ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "^^^lspeaker", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "^^^rspeaker", 1.0) - + + MCFG_KBDC8042_ADD("kbdc", at8042) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( ip224613, ip225015 ) diff --git a/src/mess/includes/bebox.h b/src/mess/includes/bebox.h index 572130e97c4..f7b55cdc3e1 100644 --- a/src/mess/includes/bebox.h +++ b/src/mess/includes/bebox.h @@ -90,6 +90,9 @@ public: DECLARE_WRITE_LINE_MEMBER(bebox_ide_interrupt); + DECLARE_WRITE_LINE_MEMBER(bebox_keyboard_interrupt); + DECLARE_READ8_MEMBER(bebox_get_out2); + void fdc_interrupt(bool state); void fdc_dma_drq(bool state); DECLARE_FLOPPY_FORMATS( floppy_formats ); diff --git a/src/mess/includes/pc.h b/src/mess/includes/pc.h index c25ecb1178b..f6c8d85813e 100644 --- a/src/mess/includes/pc.h +++ b/src/mess/includes/pc.h @@ -153,7 +153,7 @@ public: void pc_speaker_set_spkrdata(UINT8 data); void pc_speaker_set_input(UINT8 data); void pcjr_keyb_init(); - void mess_init_pc_common(UINT32 flags, void (*set_keyb_int_func)(running_machine &, int), void (*set_hdc_int_func)(running_machine &,int,int)); + void mess_init_pc_common(UINT32 flags, void (*set_keyb_int_func)(running_machine &, int)); void pc_rtc_init(); TIMER_CALLBACK_MEMBER(pc_turbo_callback); @@ -165,7 +165,6 @@ public: }; -void pc_set_irq_line(running_machine &machine,int irq, int state); void pc_set_keyb_int(running_machine &machine, int state); /*----------- defined in machine/pc.c -----------*/ diff --git a/src/mess/machine/amstr_pc.c b/src/mess/machine/amstr_pc.c index abc73608b09..1070c364ffc 100644 --- a/src/mess/machine/amstr_pc.c +++ b/src/mess/machine/amstr_pc.c @@ -139,7 +139,7 @@ DRIVER_INIT_MEMBER(amstrad_pc_state,pc1640) io_space.install_read_handler(0x278, 0x27b, read8_delegate(FUNC(amstrad_pc_state::pc1640_port278_r),this), 0xffff); io_space.install_read_handler(0x4278, 0x427b, read8_delegate(FUNC(amstrad_pc_state::pc1640_port4278_r),this), 0xffff); - mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int, pc_set_irq_line); + mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int); } @@ -152,7 +152,7 @@ DRIVER_INIT_MEMBER(amstrad_pc_state,pc200) for (i = 0; i < 256; i++) gfx[i] = i; - mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int, pc_set_irq_line); + mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int); } DRIVER_INIT_MEMBER(amstrad_pc_state,ppc512) @@ -164,7 +164,7 @@ DRIVER_INIT_MEMBER(amstrad_pc_state,ppc512) for (i = 0; i < 256; i++) gfx[i] = i; - mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int, pc_set_irq_line); + mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int); } DRIVER_INIT_MEMBER(amstrad_pc_state,pc1512) { @@ -175,7 +175,7 @@ DRIVER_INIT_MEMBER(amstrad_pc_state,pc1512) for (i = 0; i < 256; i++) gfx[i] = i; - mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int, pc_set_irq_line); + mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int); } WRITE8_MEMBER( amstrad_pc_state::pc1640_port60_w ) diff --git a/src/mess/machine/bebox.c b/src/mess/machine/bebox.c index b4a50691228..4a40dca51de 100644 --- a/src/mess/machine/bebox.c +++ b/src/mess/machine/bebox.c @@ -104,7 +104,6 @@ #include "machine/idectrl.h" #include "machine/pci.h" #include "machine/intelfsh.h" -#include "machine/8042kbdc.h" #include "machine/53c810.h" #include "machine/ram.h" @@ -835,35 +834,6 @@ WRITE8_MEMBER(bebox_state::bebox_flash_w ) flash->write(offset, data); } -/************************************* - * - * Keyboard - * - *************************************/ - -static void bebox_keyboard_interrupt(running_machine &machine,int state) -{ - bebox_state *drvstate = machine.driver_data(); - bebox_set_irq_bit(machine, 16, state); - if ( drvstate->m_devices.pic8259_master ) { - pic8259_ir1_w(drvstate->m_devices.pic8259_master, state); - } -} - -static int bebox_get_out2(running_machine &machine) { - return pit8253_get_output(machine.device("pit8254"), 2 ); -} - -static const struct kbdc8042_interface bebox_8042_interface = -{ - KBDC8042_STANDARD, - NULL, - bebox_keyboard_interrupt, - NULL, - bebox_get_out2 -}; - - /************************************* * * SCSI @@ -1046,9 +1016,7 @@ DRIVER_INIT_MEMBER(bebox_state,bebox) space_0.install_readwrite_bank(0, machine().device(RAM_TAG)->size() - 1, 0, 0x02000000, "bank3"); space_1.install_readwrite_bank(0, machine().device(RAM_TAG)->size() - 1, 0, 0x02000000, "bank3"); membank("bank3")->set_base(machine().device(RAM_TAG)->pointer()); - - kbdc8042_init(machine(), &bebox_8042_interface); - + /* The following is a verrrry ugly hack put in to support NetBSD for * NetBSD. When NetBSD/bebox it does most of its work on CPU #0 and then * lets CPU #1 go. However, it seems that CPU #1 jumps into never-never diff --git a/src/mess/machine/europc.c b/src/mess/machine/europc.c index 2e8cfea41bb..781e1652476 100644 --- a/src/mess/machine/europc.c +++ b/src/mess/machine/europc.c @@ -372,7 +372,7 @@ DRIVER_INIT_MEMBER(europc_pc_state,europc) rom[0xfffff]=256-a; } - mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int, pc_set_irq_line); + mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int); europc_rtc_init(); // europc_rtc_set_time(); diff --git a/src/mess/machine/pc.c b/src/mess/machine/pc.c index 15c2895a7b7..d2698c62029 100644 --- a/src/mess/machine/pc.c +++ b/src/mess/machine/pc.c @@ -1156,7 +1156,7 @@ void pc_state::fdc_dma_drq(bool state) m_dma8237->dreq2_w( state ); } -void pc_set_irq_line(running_machine &machine,int irq, int state) +static void pc_set_irq_line(running_machine &machine,int irq, int state) { pc_state *st = machine.driver_data(); @@ -1330,7 +1330,7 @@ READ8_MEMBER(pc_state::mc1502_wd17xx_motor_r) * **********************************************************/ -void pc_state::mess_init_pc_common(UINT32 flags, void (*set_keyb_int_func)(running_machine &, int), void (*set_hdc_int_func)(running_machine &,int,int)) +void pc_state::mess_init_pc_common(UINT32 flags, void (*set_keyb_int_func)(running_machine &, int)) { if ( set_keyb_int_func != NULL ) init_pc_common(machine(), flags, set_keyb_int_func); @@ -1343,43 +1343,43 @@ void pc_state::mess_init_pc_common(UINT32 flags, void (*set_keyb_int_func)(runni DRIVER_INIT_MEMBER(pc_state,ibm5150) { - mess_init_pc_common(PCCOMMON_KEYBOARD_PC, NULL, pc_set_irq_line); + mess_init_pc_common(PCCOMMON_KEYBOARD_PC, NULL); pc_rtc_init(); } DRIVER_INIT_MEMBER(pc_state,pccga) { - mess_init_pc_common(PCCOMMON_KEYBOARD_PC, NULL, pc_set_irq_line); + mess_init_pc_common(PCCOMMON_KEYBOARD_PC, NULL); pc_rtc_init(); } DRIVER_INIT_MEMBER(pc_state,bondwell) { - mess_init_pc_common(PCCOMMON_KEYBOARD_PC, NULL, pc_set_irq_line); + mess_init_pc_common(PCCOMMON_KEYBOARD_PC, NULL); pc_turbo_setup(4.77/12, 1); } DRIVER_INIT_MEMBER(pc_state,pcmda) { - mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int, pc_set_irq_line); + mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int); } DRIVER_INIT_MEMBER(pc_state,t1000hx) { - mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int, pc_set_irq_line); + mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int); pc_turbo_setup(4.77/12, 1); } DRIVER_INIT_MEMBER(pc_state,pcjr) { - mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pcjr_set_keyb_int, pc_set_irq_line); + mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pcjr_set_keyb_int); } DRIVER_INIT_MEMBER(pc_state,mc1502) { - mess_init_pc_common(0, NULL, pc_set_irq_line); + mess_init_pc_common(0, NULL); }