From a71c44c745d3b895e62794c2eea4e79a4dbf52b6 Mon Sep 17 00:00:00 2001 From: AJR Date: Tue, 22 Dec 2020 11:45:44 -0500 Subject: [PATCH] pc_kbdc: Merge "PC KBDC" device with slot connector --- src/devices/bus/a2bus/pc_xporter.cpp | 5 +- src/devices/bus/lpci/southbridge.cpp | 9 +-- src/devices/bus/pc_kbd/pc_kbdc.cpp | 37 ++------- src/devices/bus/pc_kbd/pc_kbdc.h | 29 +------ src/devices/bus/ti99/internal/genboard.cpp | 9 ++- src/devices/bus/ti99/internal/genboard.h | 7 +- src/devices/machine/genpc.cpp | 34 ++++----- src/devices/machine/genpc.h | 28 +++---- src/devices/machine/sis85c496.cpp | 9 +-- src/mame/drivers/asst128.cpp | 11 ++- src/mame/drivers/at.cpp | 89 +++++++++++++++------- src/mame/drivers/ct486.cpp | 7 +- src/mame/drivers/ec184x.cpp | 25 ++++-- src/mame/drivers/geneve.cpp | 9 ++- src/mame/drivers/genpc.cpp | 9 ++- src/mame/drivers/hp95lx.cpp | 5 +- src/mame/drivers/ibmpc.cpp | 17 ++++- src/mame/drivers/indiana.cpp | 12 ++- src/mame/drivers/iskr103x.cpp | 11 ++- src/mame/drivers/jazz.cpp | 12 +-- src/mame/drivers/jensen.cpp | 6 +- src/mame/drivers/mips.cpp | 32 +++----- src/mame/drivers/mtouchxl.cpp | 6 +- src/mame/drivers/ncd68k.cpp | 8 +- src/mame/drivers/pc.cpp | 80 ++++++++++++++----- src/mame/drivers/ps2.cpp | 19 ++++- src/mame/drivers/pt68k4.cpp | 7 +- src/mame/drivers/riscpc.cpp | 13 +--- src/mame/drivers/tosh1000.cpp | 11 ++- src/mame/drivers/vis.cpp | 3 +- src/mame/machine/at.cpp | 20 ++--- src/mame/machine/at.h | 11 ++- src/mame/machine/ioc2.cpp | 14 +--- 33 files changed, 318 insertions(+), 286 deletions(-) diff --git a/src/devices/bus/a2bus/pc_xporter.cpp b/src/devices/bus/a2bus/pc_xporter.cpp index 34be42c7557..1cfa36797d6 100644 --- a/src/devices/bus/a2bus/pc_xporter.cpp +++ b/src/devices/bus/a2bus/pc_xporter.cpp @@ -164,10 +164,9 @@ void a2bus_pcxporter_device::device_add_mconfig(machine_config &config) m_isabus->drq2_callback().set(m_dma8237, FUNC(am9517a_device::dreq2_w)); m_isabus->drq3_callback().set(m_dma8237, FUNC(am9517a_device::dreq3_w)); - PC_KBDC(config, m_pc_kbdc, 0); + PC_KBDC(config, m_pc_kbdc, pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270); m_pc_kbdc->out_clock_cb().set(FUNC(a2bus_pcxporter_device::keyboard_clock_w)); m_pc_kbdc->out_data_cb().set(FUNC(a2bus_pcxporter_device::keyboard_data_w)); - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270).set_pc_kbdc_slot(m_pc_kbdc); /* sound hardware */ SPEAKER(config, "mono").front_center(); @@ -190,7 +189,7 @@ a2bus_pcxporter_device::a2bus_pcxporter_device(const machine_config &mconfig, de m_pit8253(*this, "pit8253"), m_speaker(*this, "speaker"), m_isabus(*this, "isa"), - m_pc_kbdc(*this, "pc_kbdc") + m_pc_kbdc(*this, "kbd") { } diff --git a/src/devices/bus/lpci/southbridge.cpp b/src/devices/bus/lpci/southbridge.cpp index 247bc9a48db..2f9faa4aab0 100644 --- a/src/devices/bus/lpci/southbridge.cpp +++ b/src/devices/bus/lpci/southbridge.cpp @@ -524,13 +524,12 @@ void southbridge_extended_device::device_add_mconfig(machine_config &config) keybc.hot_res().set_inputline(":maincpu", INPUT_LINE_RESET); keybc.gate_a20().set_inputline(":maincpu", INPUT_LINE_A20); keybc.kbd_irq().set("pic8259_master", FUNC(pic8259_device::ir1_w)); - keybc.kbd_clk().set("pc_kbdc", FUNC(pc_kbdc_device::clock_write_from_mb)); - keybc.kbd_data().set("pc_kbdc", FUNC(pc_kbdc_device::data_write_from_mb)); + keybc.kbd_clk().set(m_pc_kbdc, FUNC(pc_kbdc_device::clock_write_from_mb)); + keybc.kbd_data().set(m_pc_kbdc, FUNC(pc_kbdc_device::data_write_from_mb)); - PC_KBDC(config, m_pc_kbdc, 0); + PC_KBDC(config, m_pc_kbdc, pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL); m_pc_kbdc->out_clock_cb().set(m_keybc, FUNC(at_keyboard_controller_device::kbd_clk_w)); m_pc_kbdc->out_data_cb().set(m_keybc, FUNC(at_keyboard_controller_device::kbd_data_w)); - PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL).set_pc_kbdc_slot(m_pc_kbdc); ds12885_device &rtc(DS12885(config, "rtc")); rtc.irq().set("pic8259_slave", FUNC(pic8259_device::ir0_w)); @@ -546,7 +545,7 @@ southbridge_extended_device::southbridge_extended_device(const machine_config &m : southbridge_device(mconfig, type, tag, owner, clock), m_keybc(*this, "keybc"), m_ds12885(*this, "rtc"), - m_pc_kbdc(*this, "pc_kbdc") + m_pc_kbdc(*this, "kbd") { } diff --git a/src/devices/bus/pc_kbd/pc_kbdc.cpp b/src/devices/bus/pc_kbd/pc_kbdc.cpp index 6bb4c61153e..4461648de7f 100644 --- a/src/devices/bus/pc_kbd/pc_kbdc.cpp +++ b/src/devices/bus/pc_kbd/pc_kbdc.cpp @@ -25,47 +25,18 @@ The following basic program can be useful for identifying scancodes: // GLOBAL VARIABLES //************************************************************************** -DEFINE_DEVICE_TYPE(PC_KBDC_SLOT, pc_kbdc_slot_device, "pc_kbdc_slot", "PC keyboard port") +DEFINE_DEVICE_TYPE(PC_KBDC, pc_kbdc_device, "pc_kbdc", "PC keyboard connector") //************************************************************************** // LIVE DEVICE //************************************************************************** -//------------------------------------------------- -// pc_kbdc_slot_device - constructor -//------------------------------------------------- -pc_kbdc_slot_device::pc_kbdc_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : - device_t(mconfig, PC_KBDC_SLOT, tag, owner, clock), - device_single_card_slot_interface(mconfig, *this), - m_kbdc_device(nullptr) -{ -} - - -//------------------------------------------------- -// device_start - device-specific startup -//------------------------------------------------- - -void pc_kbdc_slot_device::device_start() -{ - device_pc_kbd_interface *const pc_kbd = get_card_device(); - if (pc_kbd) - pc_kbd->set_pc_kbdc(m_kbdc_device); -} - - -//************************************************************************** -// GLOBAL VARIABLES -//************************************************************************** - -DEFINE_DEVICE_TYPE(PC_KBDC, pc_kbdc_device, "pc_kbdc", "PC KBDC") - - //------------------------------------------------- // pc_kbdc_device - constructor //------------------------------------------------- pc_kbdc_device::pc_kbdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, PC_KBDC, tag, owner, clock), + device_single_card_slot_interface(mconfig, *this), m_out_clock_cb(*this), m_out_data_cb(*this), m_clock_state(-1), @@ -87,6 +58,10 @@ void pc_kbdc_device::set_keyboard(device_pc_kbd_interface *keyboard) //------------------------------------------------- void pc_kbdc_device::device_resolve_objects() { + device_pc_kbd_interface *const pc_kbd = get_card_device(); + if (pc_kbd) + pc_kbd->set_pc_kbdc(this); + m_out_clock_cb.resolve_safe(); m_out_data_cb.resolve_safe(); } diff --git a/src/devices/bus/pc_kbd/pc_kbdc.h b/src/devices/bus/pc_kbd/pc_kbdc.h index 1b4ab50dd56..4cbff6fc890 100644 --- a/src/devices/bus/pc_kbd/pc_kbdc.h +++ b/src/devices/bus/pc_kbd/pc_kbdc.h @@ -23,42 +23,19 @@ set the data line and then set the clock line. class device_pc_kbd_interface; -class pc_kbdc_slot_device : public device_t, - public device_single_card_slot_interface +class pc_kbdc_device : public device_t, public device_single_card_slot_interface { public: // construction/destruction template - pc_kbdc_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt) - : pc_kbdc_slot_device(mconfig, tag, owner, (uint32_t)0) + pc_kbdc_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt) + : pc_kbdc_device(mconfig, tag, owner, (uint32_t)0) { option_reset(); opts(*this); set_default_option(dflt); set_fixed(false); } - pc_kbdc_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - // inline configuration - void set_pc_kbdc_slot(device_t *kbdc_device) { m_kbdc_device = kbdc_device; } - -protected: - // device-level overrides - virtual void device_start() override; - - // configuration - device_t *m_kbdc_device; -}; - - -// device type definition -DECLARE_DEVICE_TYPE(PC_KBDC_SLOT, pc_kbdc_slot_device) - - -class pc_kbdc_device : public device_t -{ -public: - // construction/destruction pc_kbdc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); auto out_clock_cb() { return m_out_clock_cb.bind(); } diff --git a/src/devices/bus/ti99/internal/genboard.cpp b/src/devices/bus/ti99/internal/genboard.cpp index f56e931b143..dbe4664e997 100644 --- a/src/devices/bus/ti99/internal/genboard.cpp +++ b/src/devices/bus/ti99/internal/genboard.cpp @@ -459,6 +459,8 @@ geneve_gate_array_device::geneve_gate_array_device(const machine_config &mconfig m_direct_mode(false), m_keyint(*this), + m_keyb_clk(*this), + m_keyb_data(*this), m_keyboard_shift_reg(0), m_keyboard_last_clock(CLEAR_LINE), m_keyboard_data_in(CLEAR_LINE), @@ -466,7 +468,6 @@ geneve_gate_array_device::geneve_gate_array_device(const machine_config &mconfig m_pal(*owner, GENEVE_PAL_TAG), m_peribox(*owner, TI_PERIBOX_TAG), - m_keyb_conn(*owner, GENEVE_KEYBOARD_CONN_TAG), m_debug(false) { @@ -564,7 +565,7 @@ void geneve_gate_array_device::cru_ctrl_write(offs_t offset, uint8_t data) */ WRITE_LINE_MEMBER( geneve_gate_array_device::set_keyboard_clock) { - m_keyb_conn->clock_write_from_mb(state); + m_keyb_clk(state); } /* @@ -594,7 +595,7 @@ void geneve_gate_array_device::shift_reg_changed() // The level of the data line is the inverse of the rightmost bit of // the shift register. This means that once the start bit reaches that // position, it will pull down the data line and stop the transfer. - m_keyb_conn->data_write_from_mb(1 - (m_keyboard_shift_reg & 1)); + m_keyb_data(1 - (m_keyboard_shift_reg & 1)); m_keyint((m_keyboard_shift_reg & 1)? ASSERT_LINE : CLEAR_LINE); if (m_keyboard_shift_reg & 1) LOGMASKED(LOG_KEYBOARD, "Scan code complete; raise interrupt, hold down data line\n"); @@ -1082,6 +1083,8 @@ int geneve_gate_array_device::get_prefix(int lines) void geneve_gate_array_device::device_start() { m_keyint.resolve_safe(); + m_keyb_clk.resolve_safe(); + m_keyb_data.resolve_safe(); m_geneve_mode = false; m_direct_mode = true; diff --git a/src/devices/bus/ti99/internal/genboard.h b/src/devices/bus/ti99/internal/genboard.h index 7e0df8d9892..4b5dd21124e 100644 --- a/src/devices/bus/ti99/internal/genboard.h +++ b/src/devices/bus/ti99/internal/genboard.h @@ -22,7 +22,6 @@ #include "machine/mm58274c.h" #include "machine/at29x.h" #include "machine/ram.h" -#include "bus/pc_kbd/pc_kbdc.h" enum { @@ -43,7 +42,6 @@ enum #define GENEVE_MOUSE_TAG "gmouse" #define GENEVE_PFM512_TAG "pfm512" #define GENEVE_PFM512A_TAG "pfm512a" -#define GENEVE_KEYBOARD_CONN_TAG "keybconn" namespace bus::ti99::internal { @@ -106,6 +104,8 @@ public: DECLARE_WRITE_LINE_MEMBER( kbdclk ); DECLARE_WRITE_LINE_MEMBER( kbddata ); auto kbdint_cb() { return m_keyint.bind(); } + auto kbdclk_cb() { return m_keyb_clk.bind(); } + auto kbddata_cb() { return m_keyb_data.bind(); } // Miscellaneous void set_debug(bool deb) { m_debug = deb; } @@ -224,6 +224,8 @@ private: // Keyboard support devcb_write_line m_keyint; + devcb_write_line m_keyb_clk; + devcb_write_line m_keyb_data; uint16_t m_keyboard_shift_reg; line_state m_keyboard_last_clock; line_state m_keyboard_data_in; @@ -233,7 +235,6 @@ private: // Devices required_device m_pal; required_device m_peribox; - required_device m_keyb_conn; // Emulation-specific: Is the debugger active? bool m_debug; diff --git a/src/devices/machine/genpc.cpp b/src/devices/machine/genpc.cpp index d9706309225..b02cbde4552 100644 --- a/src/devices/machine/genpc.cpp +++ b/src/devices/machine/genpc.cpp @@ -268,7 +268,7 @@ WRITE_LINE_MEMBER( ibm5150_mb_device::keyboard_clock_w ) m_ppi_shift_register |= m_ppi_data_signal << 7; m_pic8259->ir1_w(m_ppi_shift_enable); - m_pc_kbdc->data_write_from_mb(!m_ppi_shift_enable); + m_kbddata_callback(!m_ppi_shift_enable); } } @@ -282,7 +282,7 @@ WRITE_LINE_MEMBER( ec1841_mb_device::keyboard_clock_w ) m_ppi_shift_register |= m_ppi_data_signal << 7; m_pic8259->ir1_w(m_ppi_shift_enable); - m_pc_kbdc->data_write_from_mb(!m_ppi_shift_enable); + m_kbddata_callback(!m_ppi_shift_enable); } } @@ -296,7 +296,7 @@ WRITE_LINE_MEMBER( ibm5160_mb_device::keyboard_clock_w ) m_ppi_shift_register |= m_ppi_data_signal << 7; m_pic8259->ir1_w(m_ppi_shift_enable); - m_pc_kbdc->data_write_from_mb(!m_ppi_shift_enable); + m_kbddata_callback(!m_ppi_shift_enable); } } @@ -380,9 +380,9 @@ void ibm5160_mb_device::pc_ppi_portb_w(uint8_t data) m_pic8259->ir1_w(m_ppi_shift_enable); } - m_pc_kbdc->data_write_from_mb(!m_ppi_shift_enable); + m_kbddata_callback(!m_ppi_shift_enable); m_ppi_clock_signal = ( m_ppi_keyb_clock ) ? 1 : 0; - m_pc_kbdc->clock_write_from_mb(m_ppi_clock_signal); + m_kbdclk_callback(m_ppi_clock_signal); } @@ -450,7 +450,7 @@ void ibm5160_mb_device::device_add_mconfig(machine_config &config) PIC8259(config, m_pic8259); m_pic8259->out_int_callback().set(FUNC(ibm5160_mb_device::pic_int_w)); - I8255A(config, m_ppi8255, 0); + I8255A(config, m_ppi8255); m_ppi8255->in_pa_callback().set(FUNC(ibm5160_mb_device::pc_ppi_porta_r)); m_ppi8255->out_pb_callback().set(FUNC(ibm5160_mb_device::pc_ppi_portb_w)); m_ppi8255->in_pc_callback().set(FUNC(ibm5160_mb_device::pc_ppi_portc_r)); @@ -469,10 +469,6 @@ void ibm5160_mb_device::device_add_mconfig(machine_config &config) m_isabus->drq3_callback().set(m_dma8237, FUNC(am9517a_device::dreq3_w)); m_isabus->iochck_callback().set(FUNC(ibm5160_mb_device::iochck_w)); - PC_KBDC(config, m_pc_kbdc, 0); - m_pc_kbdc->out_clock_cb().set(FUNC(ibm5160_mb_device::keyboard_clock_w)); - m_pc_kbdc->out_data_cb().set(FUNC(ibm5160_mb_device::keyboard_data_w)); - /* sound hardware */ SPEAKER(config, "mono").front_center(); SPEAKER_SOUND(config, m_speaker).add_route(ALL_OUTPUTS, "mono", 1.00); @@ -540,10 +536,11 @@ ibm5160_mb_device::ibm5160_mb_device( , m_ppi8255(*this, "ppi8255") , m_speaker(*this, "speaker") , m_isabus(*this, "isa") - , m_pc_kbdc(*this, "pc_kbdc") , m_ram(*this, ":" RAM_TAG) , m_int_callback(*this) , m_nmi_callback(*this) + , m_kbdclk_callback(*this) + , m_kbddata_callback(*this) { } @@ -568,6 +565,8 @@ void ibm5160_mb_device::device_resolve_objects() { m_int_callback.resolve_safe(); m_nmi_callback.resolve_safe(); + m_kbdclk_callback.resolve_safe(); + m_kbddata_callback.resolve_safe(); } @@ -628,8 +627,6 @@ void ibm5150_mb_device::device_add_mconfig(machine_config &config) { ibm5160_mb_device::device_add_mconfig(config); - subdevice("pc_kbdc")->out_clock_cb().set(FUNC(ibm5150_mb_device::keyboard_clock_w)); - m_ppi8255->out_pb_callback().set(FUNC(ibm5150_mb_device::pc_ppi_portb_w)); m_ppi8255->in_pc_callback().set(FUNC(ibm5150_mb_device::pc_ppi_portc_r)); @@ -787,9 +784,9 @@ void ibm5150_mb_device::pc_ppi_portb_w(uint8_t data) m_pic8259->ir1_w(m_ppi_shift_enable); } - m_pc_kbdc->data_write_from_mb(!m_ppi_shift_enable); + m_kbddata_callback(!m_ppi_shift_enable); m_ppi_clock_signal = ( m_ppi_keyb_clock ) ? 1 : 0; - m_pc_kbdc->clock_write_from_mb(m_ppi_clock_signal); + m_kbdclk_callback(m_ppi_clock_signal); } //************************************************************************** @@ -920,8 +917,6 @@ void ec1841_mb_device::device_add_mconfig(machine_config &config) m_ppi8255->out_pb_callback().set(FUNC(ec1841_mb_device::pc_ppi_portb_w)); m_ppi8255->in_pc_callback().set(FUNC(ec1841_mb_device::pc_ppi_portc_r)); - - subdevice("pc_kbdc")->out_clock_cb().set(FUNC(ec1841_mb_device::keyboard_clock_w)); } static INPUT_PORTS_START( ec1841_mb ) @@ -1005,9 +1000,9 @@ void ec1841_mb_device::pc_ppi_portb_w(uint8_t data) m_pic8259->ir1_w(m_ppi_shift_enable); } - m_pc_kbdc->data_write_from_mb(!m_ppi_shift_enable); + m_kbddata_callback(!m_ppi_shift_enable); m_ppi_clock_signal = ( m_ppi_keyb_clock ) ? 1 : 0; - m_pc_kbdc->clock_write_from_mb(m_ppi_clock_signal); + m_kbdclk_callback(m_ppi_clock_signal); } uint8_t ec1841_mb_device::pc_ppi_portc_r() @@ -1050,7 +1045,6 @@ void pc_noppi_mb_device::device_add_mconfig(machine_config &config) { ibm5160_mb_device::device_add_mconfig(config); - config.device_remove("pc_kbdc"); config.device_remove("ppi8255"); } diff --git a/src/devices/machine/genpc.h b/src/devices/machine/genpc.h index c1bce1c3072..ed38987b6cd 100644 --- a/src/devices/machine/genpc.h +++ b/src/devices/machine/genpc.h @@ -20,7 +20,6 @@ #include "bus/isa/isa.h" #include "bus/isa/isa_cards.h" -#include "bus/pc_kbd/pc_kbdc.h" // ======================> ibm5160_mb_device @@ -28,7 +27,7 @@ class ibm5160_mb_device : public device_t { public: // construction/destruction - ibm5160_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + ibm5160_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); // inline configuration template void set_cputag(T &&tag) @@ -40,6 +39,8 @@ public: auto int_callback() { return m_int_callback.bind(); } auto nmi_callback() { return m_nmi_callback.bind(); } + auto kbdclk_callback() { return m_kbdclk_callback.bind(); } + auto kbddata_callback() { return m_kbddata_callback.bind(); } void map(address_map &map); @@ -55,6 +56,10 @@ public: DECLARE_WRITE_LINE_MEMBER( pic_int_w ); + // interface to the keyboard + DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w ); + DECLARE_WRITE_LINE_MEMBER( keyboard_data_w ); + protected: ibm5160_mb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); @@ -76,11 +81,12 @@ protected: optional_device m_ppi8255; required_device m_speaker; required_device m_isabus; - optional_device m_pc_kbdc; required_device m_ram; devcb_write_line m_int_callback; devcb_write_line m_nmi_callback; + devcb_write_line m_kbdclk_callback; + devcb_write_line m_kbddata_callback; /* U73 is an LS74 - dual flip flop */ /* Q2 is set by OUT1 from the 8253 and goes to DRQ1 on the 8237 */ @@ -103,10 +109,6 @@ protected: uint8_t m_ppi_shift_register; uint8_t m_ppi_shift_enable; - // interface to the keyboard - DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w ); - DECLARE_WRITE_LINE_MEMBER( keyboard_data_w ); - uint8_t pc_ppi_porta_r(); uint8_t pc_ppi_portc_r(); void pc_ppi_portb_w(uint8_t data); @@ -141,7 +143,7 @@ class ibm5150_mb_device : public ibm5160_mb_device { public: // construction/destruction - ibm5150_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + ibm5150_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w ); @@ -170,7 +172,9 @@ class ec1841_mb_device : public ibm5160_mb_device { public: // construction/destruction - ec1841_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + ec1841_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); + + DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w ); protected: ec1841_mb_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); @@ -183,8 +187,6 @@ protected: private: uint8_t pc_ppi_portc_r(); void pc_ppi_portb_w(uint8_t data); - - DECLARE_WRITE_LINE_MEMBER( keyboard_clock_w ); }; DECLARE_DEVICE_TYPE(EC1841_MOTHERBOARD, ec1841_mb_device) @@ -194,7 +196,7 @@ class ec1840_mb_device : public ec1841_mb_device { public: // construction/destruction - ec1840_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + ec1840_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); protected: // optional information overrides @@ -214,7 +216,7 @@ class pc_noppi_mb_device : public ibm5160_mb_device { public: // construction/destruction - pc_noppi_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + pc_noppi_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); uint8_t pit_out2() { return m_pit_out2; } // helper for near-clones with multifunction ics instead of 8255s diff --git a/src/devices/machine/sis85c496.cpp b/src/devices/machine/sis85c496.cpp index 1af083c24d9..66bab2adbda 100644 --- a/src/devices/machine/sis85c496.cpp +++ b/src/devices/machine/sis85c496.cpp @@ -101,13 +101,12 @@ void sis85c496_host_device::device_add_mconfig(machine_config &config) m_keybc->hot_res().set(FUNC(sis85c496_host_device::cpu_reset_w)); m_keybc->gate_a20().set(FUNC(sis85c496_host_device::cpu_a20_w)); m_keybc->kbd_irq().set("pic8259_master", FUNC(pic8259_device::ir1_w)); - m_keybc->kbd_clk().set("pc_kbdc", FUNC(pc_kbdc_device::clock_write_from_mb)); - m_keybc->kbd_data().set("pc_kbdc", FUNC(pc_kbdc_device::data_write_from_mb)); + m_keybc->kbd_clk().set(m_pc_kbdc, FUNC(pc_kbdc_device::clock_write_from_mb)); + m_keybc->kbd_data().set(m_pc_kbdc, FUNC(pc_kbdc_device::data_write_from_mb)); - PC_KBDC(config, m_pc_kbdc, 0); + PC_KBDC(config, m_pc_kbdc, pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL); m_pc_kbdc->out_clock_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_clk_w)); m_pc_kbdc->out_data_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_data_w)); - PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL).set_pc_kbdc_slot(subdevice("pc_kbdc")); DS12885(config, m_ds12885); m_ds12885->irq().set(m_pic8259_slave, FUNC(pic8259_device::ir0_w)); @@ -130,7 +129,7 @@ sis85c496_host_device::sis85c496_host_device(const machine_config &mconfig, cons m_keybc(*this, "keybc"), m_speaker(*this, "speaker"), m_ds12885(*this, "rtc"), - m_pc_kbdc(*this, "pc_kbdc"), + m_pc_kbdc(*this, "kbd"), m_at_spkrdata(0), m_pit_out2(0), m_dma_channel(0), m_cur_eop(false), m_dma_high_byte(0), m_at_speaker(0), m_refresh(false), m_channel_check(0), m_nmi_enabled(0) { } diff --git a/src/mame/drivers/asst128.cpp b/src/mame/drivers/asst128.cpp index 0b5f71ce1ba..3ac61349cda 100644 --- a/src/mame/drivers/asst128.cpp +++ b/src/mame/drivers/asst128.cpp @@ -6,6 +6,7 @@ #include "cpu/i86/i86.h" #include "bus/pc_joy/pc_joy.h" #include "bus/pc_kbd/keyboards.h" +#include "bus/pc_kbd/pc_kbdc.h" #include "imagedev/floppy.h" #include "machine/pc_fdc.h" @@ -18,7 +19,7 @@ class asst128_mb_device : public ibm5150_mb_device { public: // construction/destruction - asst128_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + asst128_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0) : ibm5150_mb_device(mconfig, ASST128_MOTHERBOARD, tag, owner, clock) { } @@ -109,10 +110,12 @@ void asst128_state::asst128(machine_config &config) m_maincpu->set_addrmap(AS_IO, &asst128_state::asst128_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - asst128_mb_device &mb(ASST128_MOTHERBOARD(config, "mb", 0)); + asst128_mb_device &mb(ASST128_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(asst128)); subdevice("mb:cassette")->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED); @@ -121,7 +124,9 @@ void asst128_state::asst128(machine_config &config) ISA8_SLOT(config, "board0", 0, "mb:isa", pc_isa8_cards, "cga_mc1502", true); ISA8_SLOT(config, "board1", 0, "mb:isa", pc_isa8_cards, "lpt", true); - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83)); + kbd.out_clock_cb().set("mb", FUNC(asst128_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(asst128_mb_device::keyboard_data_w)); PC_FDC_XT(config, m_fdc, 0); m_fdc->intrq_wr_callback().set("mb:pic8259", FUNC(pic8259_device::ir6_w)); diff --git a/src/mame/drivers/at.cpp b/src/mame/drivers/at.cpp index 0d970615a64..012921227a5 100644 --- a/src/mame/drivers/at.cpp +++ b/src/mame/drivers/at.cpp @@ -1,4 +1,4 @@ -// license:BSD-3-Clause +// license:BSD-3-Clausekbd // copyright-holders:Wilbert Pol, Miodrag Milanovic /*************************************************************************** @@ -113,6 +113,7 @@ Variants: T denotes an active 8.4" display, C a passive 9.5" color display. 3560 #include "bus/lpci/pci.h" #include "bus/lpci/vt82c505.h" #include "bus/pc_kbd/keyboards.h" +#include "bus/pc_kbd/pc_kbdc.h" #include "cpu/i386/i386.h" #include "cpu/i86/i286.h" #include "machine/at.h" @@ -502,17 +503,21 @@ void at_state::ibm5170(machine_config &config) maincpu.set_irq_acknowledge_callback("mb:pic8259_master", FUNC(pic8259_device::inta_cb)); maincpu.shutdown_callback().set("mb", FUNC(at_mb_device::shutdown)); - AT_MB(config, m_mb, 0); config.set_maximum_quantum(attotime::from_hz(60)); - m_mb->at_softlists(config); + AT_MB(config, m_mb).at_softlists(config); + m_mb->kbd_clk().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + m_mb->kbd_data().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); // FIXME: determine ISA bus clock ISA16_SLOT(config, "isa1", 0, "mb:isabus", pc_isa16_cards, "ega", false); ISA16_SLOT(config, "isa2", 0, "mb:isabus", pc_isa16_cards, "fdc", false); ISA16_SLOT(config, "isa3", 0, "mb:isabus", pc_isa16_cards, "comat", false); ISA16_SLOT(config, "isa4", 0, "mb:isabus", pc_isa16_cards, "ide", false); - PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_84).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + + pc_kbdc_device &pc_kbdc(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_84)); + pc_kbdc.out_clock_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_clk_w)); + pc_kbdc.out_data_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_data_w)); /* internal ram */ RAM(config, m_ram).set_default_size("1664K").set_extra_options("640K,1024K,2M,4M,8M,15M"); @@ -559,7 +564,7 @@ void at_vrom_fix_state::ibmps1(machine_config &config) subdevice("isa1")->set_default_option("vga"); subdevice("isa1")->set_fixed(true); - subdevice("kbd")->set_default_option(STR_KBD_MICROSOFT_NATURAL); + subdevice("kbd")->set_default_option(STR_KBD_MICROSOFT_NATURAL); } void at_state::atturbo(machine_config &config) @@ -567,7 +572,7 @@ void at_state::atturbo(machine_config &config) ibm5170(config); m_maincpu->set_clock(12'000'000); subdevice("isa1")->set_default_option("svga_et4k"); - subdevice("kbd")->set_default_option(STR_KBD_MICROSOFT_NATURAL); + subdevice("kbd")->set_default_option(STR_KBD_MICROSOFT_NATURAL); ISA16_SLOT(config, "isa5", 0, "mb:isabus", pc_isa16_cards, nullptr, false); // FIXME: determine ISA bus clock } @@ -592,7 +597,7 @@ void at_state::xb42639(machine_config &config) void at_state::k286i(machine_config &config) { ibm5162(config); - subdevice("kbd")->set_default_option(STR_KBD_MICROSOFT_NATURAL); + subdevice("kbd")->set_default_option(STR_KBD_MICROSOFT_NATURAL); ISA16_SLOT(config, "isa5", 0, "mb:isabus", pc_isa16_cards, nullptr, false); // FIXME: determine ISA bus clock ISA16_SLOT(config, "isa6", 0, "mb:isabus", pc_isa16_cards, nullptr, false); ISA16_SLOT(config, "isa7", 0, "mb:isabus", pc_isa16_cards, nullptr, false); @@ -606,10 +611,12 @@ void at_state::at386(machine_config &config) maincpu.set_addrmap(AS_IO, &at_state::at32_io); maincpu.set_irq_acknowledge_callback("mb:pic8259_master", FUNC(pic8259_device::inta_cb)); - AT_MB(config, m_mb, 0).at_softlists(config); - config.set_maximum_quantum(attotime::from_hz(60)); + AT_MB(config, m_mb).at_softlists(config); + m_mb->kbd_clk().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + m_mb->kbd_data().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // on-board devices @@ -623,7 +630,10 @@ void at_state::at386(machine_config &config) ISA16_SLOT(config, "isa3", 0, "mb:isabus", pc_isa16_cards, nullptr, false); ISA16_SLOT(config, "isa4", 0, "mb:isabus", pc_isa16_cards, nullptr, false); ISA16_SLOT(config, "isa5", 0, "mb:isabus", pc_isa16_cards, nullptr, false); - PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + + pc_kbdc_device &pc_kbdc(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)); + pc_kbdc.out_clock_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_clk_w)); + pc_kbdc.out_data_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_data_w)); /* internal ram */ RAM(config, m_ram).set_default_size("1664K").set_extra_options("2M,4M,8M,15M,16M,32M,64M"); @@ -642,10 +652,12 @@ void at_state::at486(machine_config &config) maincpu.set_addrmap(AS_IO, &at_state::at32_io); maincpu.set_irq_acknowledge_callback("mb:pic8259_master", FUNC(pic8259_device::inta_cb)); - AT_MB(config, m_mb, 0).at_softlists(config); - config.set_maximum_quantum(attotime::from_hz(60)); + AT_MB(config, m_mb).at_softlists(config); + m_mb->kbd_clk().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + m_mb->kbd_data().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // on-board devices @@ -659,7 +671,10 @@ void at_state::at486(machine_config &config) ISA16_SLOT(config, "isa3", 0, "mb:isabus", pc_isa16_cards, nullptr, false); ISA16_SLOT(config, "isa4", 0, "mb:isabus", pc_isa16_cards, nullptr, false); ISA16_SLOT(config, "isa5", 0, "mb:isabus", pc_isa16_cards, nullptr, false); - PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + + pc_kbdc_device &pc_kbdc(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)); + pc_kbdc.out_clock_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_clk_w)); + pc_kbdc.out_data_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_data_w)); /* internal ram */ RAM(config, m_ram).set_default_size("4M").set_extra_options("1M,2M,8M,16M,20M,32M,64M,128M"); @@ -764,13 +779,12 @@ void megapc_state::megapc(machine_config &config) keybc.hot_res().set("wd7600", FUNC(wd7600_device::kbrst_w)); keybc.gate_a20().set("wd7600", FUNC(wd7600_device::gatea20_w)); keybc.kbd_irq().set("wd7600", FUNC(wd7600_device::irq01_w)); - keybc.kbd_clk().set("pc_kbdc", FUNC(pc_kbdc_device::clock_write_from_mb)); - keybc.kbd_data().set("pc_kbdc", FUNC(pc_kbdc_device::data_write_from_mb)); + keybc.kbd_clk().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + keybc.kbd_data().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); - pc_kbdc_device &pc_kbdc(PC_KBDC(config, "pc_kbdc", 0)); + pc_kbdc_device &pc_kbdc(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)); pc_kbdc.out_clock_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_clk_w)); pc_kbdc.out_data_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_data_w)); - PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL).set_pc_kbdc_slot(subdevice("pc_kbdc")); /* internal ram */ RAM(config, m_ram).set_default_size("4M").set_extra_options("1M,2M,8M,15M,16M"); @@ -802,10 +816,12 @@ void at_vrom_fix_state::megapcpla(machine_config &config) maincpu.set_addrmap(AS_IO, &at_vrom_fix_state::at32_io); maincpu.set_irq_acknowledge_callback("mb:pic8259_master", FUNC(pic8259_device::inta_cb)); - AT_MB(config, m_mb, 0).at_softlists(config); - config.set_maximum_quantum(attotime::from_hz(60)); + AT_MB(config, m_mb).at_softlists(config); + m_mb->kbd_clk().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + m_mb->kbd_data().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // on board devices @@ -819,7 +835,10 @@ void at_vrom_fix_state::megapcpla(machine_config &config) ISA16_SLOT(config, "isa3", 0, "mb:isabus", pc_isa16_cards, nullptr, false); ISA16_SLOT(config, "isa4", 0, "mb:isabus", pc_isa16_cards, nullptr, false); ISA16_SLOT(config, "isa5", 0, "mb:isabus", pc_isa16_cards, nullptr, false); - PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + + pc_kbdc_device &pc_kbdc(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)); + pc_kbdc.out_clock_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_clk_w)); + pc_kbdc.out_data_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_data_w)); /* internal ram */ RAM(config, m_ram).set_default_size("4M").set_extra_options("2M,8M,15M,16M,32M,64M,128M,256M"); @@ -835,9 +854,12 @@ void at_state::ficpio2(machine_config &config) maincpu.set_addrmap(AS_IO, &at_state::ficpio_io); maincpu.set_irq_acknowledge_callback("mb:pic8259_master", FUNC(pic8259_device::inta_cb)); - AT_MB(config, m_mb, 0).at_softlists(config); config.set_maximum_quantum(attotime::from_hz(60)); + AT_MB(config, m_mb).at_softlists(config); + m_mb->kbd_clk().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + m_mb->kbd_data().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); + ds12885_device &rtc(DS12885(config.replace(), "mb:rtc")); rtc.irq().set("mb:pic8259_slave", FUNC(pic8259_device::ir0_w)); // this is in :mb rtc.set_century_index(0x32); @@ -860,7 +882,10 @@ void at_state::ficpio2(machine_config &config) ISA16_SLOT(config, "isa2", 0, "mb:isabus", pc_isa16_cards, nullptr, false); ISA16_SLOT(config, "isa3", 0, "mb:isabus", pc_isa16_cards, nullptr, false); ISA16_SLOT(config, "isa4", 0, "mb:isabus", pc_isa16_cards, nullptr, false); - PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + + pc_kbdc_device &pc_kbdc(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)); + pc_kbdc.out_clock_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_clk_w)); + pc_kbdc.out_data_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_data_w)); vt82c496_device &chipset(VT82C496(config, "chipset")); chipset.set_cputag(m_maincpu); @@ -878,9 +903,12 @@ void at_state::comportiii(machine_config &config) maincpu.set_irq_acknowledge_callback("mb:pic8259_master", FUNC(pic8259_device::inta_cb)); maincpu.shutdown_callback().set("mb", FUNC(at_mb_device::shutdown)); - AT_MB(config, m_mb, 0).at_softlists(config); config.set_maximum_quantum(attotime::from_hz(60)); + AT_MB(config, m_mb).at_softlists(config); + m_mb->kbd_clk().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + m_mb->kbd_data().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); + // FIXME: determine ISA bus clock ISA16_SLOT(config, "board1", 0, "mb:isabus", pc_isa16_cards, "fdc", true).set_option_machine_config("fdc", cfg_single_1200K); ISA16_SLOT(config, "board2", 0, "mb:isabus", pc_isa16_cards, "comat", true); @@ -889,7 +917,9 @@ void at_state::comportiii(machine_config &config) ISA16_SLOT(config, "isa1", 0, "mb:isabus", pc_isa16_cards, nullptr, false); ISA16_SLOT(config, "isa2", 0, "mb:isabus", pc_isa16_cards, nullptr, false); - PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_84).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &pc_kbdc(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_84)); + pc_kbdc.out_clock_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_clk_w)); + pc_kbdc.out_data_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_data_w)); /* internal ram */ RAM(config, m_ram).set_default_size("640K").set_extra_options("1152K,1664K,2176K,2688K,4736K,6784K"); @@ -955,10 +985,12 @@ void at_state::pg750(machine_config &config) maincpu.set_addrmap(AS_IO, &at_state::at32_io); maincpu.set_irq_acknowledge_callback("mb:pic8259_master", FUNC(pic8259_device::inta_cb)); - AT_MB(config, m_mb, 0).at_softlists(config); - config.set_maximum_quantum(attotime::from_hz(60)); + AT_MB(config, m_mb).at_softlists(config); + m_mb->kbd_clk().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + m_mb->kbd_data().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); ds12885_device &rtc(DS12885(config.replace(), "mb:rtc")); // TODO: move this into the cs8221 @@ -975,7 +1007,10 @@ void at_state::pg750(machine_config &config) ISA16_SLOT(config, "isa3", 0, "mb:isabus", pc_isa16_cards, nullptr, false); ISA16_SLOT(config, "isa4", 0, "mb:isabus", pc_isa16_cards, nullptr, false); ISA16_SLOT(config, "isa5", 0, "mb:isabus", pc_isa16_cards, nullptr, false); - PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + + pc_kbdc_device &pc_kbdc(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)); + pc_kbdc.out_clock_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_clk_w)); + pc_kbdc.out_data_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_data_w)); /* internal ram */ RAM(config, m_ram).set_default_size("3712K"); diff --git a/src/mame/drivers/ct486.cpp b/src/mame/drivers/ct486.cpp index c46e43ef6b3..cf963431b63 100644 --- a/src/mame/drivers/ct486.cpp +++ b/src/mame/drivers/ct486.cpp @@ -137,13 +137,12 @@ void ct486_state::ct486(machine_config &config) keybc.hot_res().set("cs4031", FUNC(cs4031_device::kbrst_w)); keybc.gate_a20().set("cs4031", FUNC(cs4031_device::gatea20_w)); keybc.kbd_irq().set("cs4031", FUNC(cs4031_device::irq01_w)); - keybc.kbd_clk().set("pc_kbdc", FUNC(pc_kbdc_device::clock_write_from_mb)); - keybc.kbd_data().set("pc_kbdc", FUNC(pc_kbdc_device::data_write_from_mb)); + keybc.kbd_clk().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + keybc.kbd_data().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); - pc_kbdc_device &pc_kbdc(PC_KBDC(config, "pc_kbdc", 0)); + pc_kbdc_device &pc_kbdc(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)); pc_kbdc.out_clock_cb().set(keybc, FUNC(at_kbc_device_base::kbd_clk_w)); pc_kbdc.out_data_cb().set(keybc, FUNC(at_kbc_device_base::kbd_data_w)); - PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL).set_pc_kbdc_slot(&pc_kbdc); ISA16(config, m_isabus, 0); m_isabus->set_memspace(m_maincpu, AS_PROGRAM); diff --git a/src/mame/drivers/ec184x.cpp b/src/mame/drivers/ec184x.cpp index b79b2b61923..9b105715611 100644 --- a/src/mame/drivers/ec184x.cpp +++ b/src/mame/drivers/ec184x.cpp @@ -14,6 +14,7 @@ #include "machine/genpc.h" #include "bus/isa/xsu_cards.h" #include "bus/pc_kbd/keyboards.h" +#include "bus/pc_kbd/pc_kbdc.h" #include "cpu/i86/i86.h" #include "machine/ram.h" #include "softlist.h" @@ -231,10 +232,12 @@ void ec184x_state::ec1840(machine_config &config) m_maincpu->set_addrmap(AS_IO, &ec184x_state::ec1840_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - ec1840_mb_device &mb(EC1840_MOTHERBOARD(config, "mb", 0)); + ec1840_mb_device &mb(EC1840_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); // FIXME: determine ISA bus clock ISA8_SLOT(config, "isa1", 0, "mb:isa", ec184x_isa8_cards, "ec1840.0002", false); @@ -246,7 +249,9 @@ void ec184x_state::ec1840(machine_config &config) SOFTWARE_LIST(config, "flop_list").set_original("ec1841"); - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_EC_1841).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_EC_1841)); + kbd.out_clock_cb().set("mb", FUNC(ec1840_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ec1840_mb_device::keyboard_data_w)); RAM(config, m_ram).set_default_size("640K").set_extra_options("128K,256K,384K,512K"); } @@ -260,10 +265,12 @@ void ec184x_state::ec1841(machine_config &config) MCFG_MACHINE_RESET_OVERRIDE(ec184x_state, ec1841) - ec1841_mb_device &mb(EC1841_MOTHERBOARD(config, "mb", 0)); + ec1841_mb_device &mb(EC1841_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); // FIXME: determine ISA bus clock ISA8_SLOT(config, "isa1", 0, "mb:isa", ec184x_isa8_cards, "ec1841.0002", false); // cga @@ -275,7 +282,9 @@ void ec184x_state::ec1841(machine_config &config) SOFTWARE_LIST(config, "flop_list").set_original("ec1841"); - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_EC_1841).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_EC_1841)); + kbd.out_clock_cb().set("mb", FUNC(ec1841_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ec1841_mb_device::keyboard_data_w)); RAM(config, m_ram).set_default_size("640K").set_extra_options("512K,1024K,1576K,2048K"); } @@ -288,10 +297,12 @@ void ec184x_state::ec1847(machine_config &config) m_maincpu->set_addrmap(AS_IO, &ec184x_state::ec1847_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); // FIXME: determine ISA bus clock ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "hercules", false); // cga, ega and vga(?) are options too @@ -301,7 +312,9 @@ void ec184x_state::ec1847(machine_config &config) ISA8_SLOT(config, "isa5", 0, "mb:isa", pc_isa8_cards, nullptr, false); ISA8_SLOT(config, "isa6", 0, "mb:isa", pc_isa8_cards, nullptr, false); - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270)); + kbd.out_clock_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_data_w)); RAM(config, m_ram).set_default_size("640K"); } diff --git a/src/mame/drivers/geneve.cpp b/src/mame/drivers/geneve.cpp index cbf3d42584c..f86282a5847 100644 --- a/src/mame/drivers/geneve.cpp +++ b/src/mame/drivers/geneve.cpp @@ -248,7 +248,7 @@ public: m_pal(*this, GENEVE_PAL_TAG), m_joyport(*this, TI_JOYPORT_TAG), m_colorbus(*this, COLORBUS_TAG), - m_kbdconn(*this, GENEVE_KEYBOARD_CONN_TAG), + m_kbdconn(*this, "kbd"), m_peribox(*this, TI_PERIBOX_TAG), m_pfm512(*this, GENEVE_PFM512_TAG), m_pfm512a(*this, GENEVE_PFM512A_TAG), @@ -1132,6 +1132,8 @@ void geneve_state::geneve(machine_config &config) // Gate array GENEVE_GATE_ARRAY(config, m_gatearray, 0); m_gatearray->kbdint_cb().set(FUNC(geneve_state::keyboard_interrupt)); + m_gatearray->kbdclk_cb().set(m_kbdconn, FUNC(pc_kbdc_device::clock_write_from_mb)); + m_gatearray->kbddata_cb().set(m_kbdconn, FUNC(pc_kbdc_device::data_write_from_mb)); // Peripheral expansion box (Geneve composition) TI99_PERIBOX_GEN(config, m_peribox, 0); @@ -1148,6 +1150,8 @@ void geneve_state::genmod(machine_config &config) // Gate Array GENEVE_GATE_ARRAY(config, m_gatearray, 0); m_gatearray->kbdint_cb().set(FUNC(geneve_state::keyboard_interrupt)); + m_gatearray->kbdclk_cb().set(m_kbdconn, FUNC(pc_kbdc_device::clock_write_from_mb)); + m_gatearray->kbddata_cb().set(m_kbdconn, FUNC(pc_kbdc_device::data_write_from_mb)); // Peripheral expansion box (Geneve composition with Genmod and plugged-in Memex) TI99_PERIBOX_GENMOD(config, m_peribox, 0); @@ -1212,8 +1216,7 @@ void geneve_state::geneve_common(machine_config &config) m_sound->ready_cb().set(FUNC(geneve_state::sndready)); // User interface devices: PC-style keyboard, joystick port, mouse connector - PC_KBDC(config, m_kbdconn, 0); - PC_KBDC_SLOT(config, "kbd", geneve_xt_keyboards, STR_KBD_GENEVE_XT_101_HLE).set_pc_kbdc_slot(m_kbdconn); + PC_KBDC(config, m_kbdconn, geneve_xt_keyboards, STR_KBD_GENEVE_XT_101_HLE); m_kbdconn->out_clock_cb().set(GENEVE_GATE_ARRAY_TAG, FUNC(bus::ti99::internal::geneve_gate_array_device::kbdclk)); m_kbdconn->out_data_cb().set(GENEVE_GATE_ARRAY_TAG, FUNC(bus::ti99::internal::geneve_gate_array_device::kbddata)); diff --git a/src/mame/drivers/genpc.cpp b/src/mame/drivers/genpc.cpp index b8cad98773b..3e41e4fe79b 100644 --- a/src/mame/drivers/genpc.cpp +++ b/src/mame/drivers/genpc.cpp @@ -13,6 +13,7 @@ #include "cpu/nec/nec.h" #include "cpu/i86/i86.h" #include "bus/pc_kbd/keyboards.h" +#include "bus/pc_kbd/pc_kbdc.h" #include "softlist.h" class genpc_state : public driver_device @@ -63,10 +64,12 @@ void genpc_state::pcmda(machine_config &config) m_maincpu->set_addrmap(AS_IO, &genpc_state::pc8_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "mda", false); // FIXME: determine ISA bus clock ISA8_SLOT(config, "isa2", 0, "mb:isa", pc_isa8_cards, "com", false); @@ -76,7 +79,9 @@ void genpc_state::pcmda(machine_config &config) ISA8_SLOT(config, "isa6", 0, "mb:isa", pc_isa8_cards, nullptr, false); /* keyboard */ - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83)); + kbd.out_clock_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_data_w)); /* internal ram */ RAM(config, RAM_TAG).set_default_size("640K").set_extra_options("64K, 128K, 256K, 512K"); diff --git a/src/mame/drivers/hp95lx.cpp b/src/mame/drivers/hp95lx.cpp index daf43bacd8f..9c2b1ffe2b3 100644 --- a/src/mame/drivers/hp95lx.cpp +++ b/src/mame/drivers/hp95lx.cpp @@ -84,8 +84,6 @@ #define LOGKBD(...) LOGMASKED(LOG_KEYBOARD, __VA_ARGS__) #define LOGDBG(...) LOGMASKED(LOG_DEBUG, __VA_ARGS__) -#define KBDC_TAG "pc_kbdc" - class hp95lx_state : public driver_device { @@ -741,10 +739,9 @@ void hp95lx_state::hp95lx(machine_config &config) ISA8_SLOT(config, "board0", 0, "isa", pc_isa8_cards, "com", true); - pc_kbdc_device &pc_kbdc(PC_KBDC(config, KBDC_TAG, 0)); + pc_kbdc_device &pc_kbdc(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270)); pc_kbdc.out_clock_cb().set(FUNC(hp95lx_state::keyboard_clock_w)); pc_kbdc.out_data_cb().set(FUNC(hp95lx_state::keyboard_data_w)); - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270).set_pc_kbdc_slot(&pc_kbdc); NVRAM(config, "nvram2", nvram_device::DEFAULT_ALL_0); // RAM NVRAM(config, "nvram3", nvram_device::DEFAULT_ALL_0); // card slot diff --git a/src/mame/drivers/ibmpc.cpp b/src/mame/drivers/ibmpc.cpp index 4f21a21d5c7..cd781eb5305 100644 --- a/src/mame/drivers/ibmpc.cpp +++ b/src/mame/drivers/ibmpc.cpp @@ -259,6 +259,7 @@ XT U44 IBM.bin: IBM 5160 PC/XT Bank-selection decoding ROM (256x4 bit). Not mapp #include "cpu/i86/i86.h" #include "machine/ram.h" #include "bus/pc_kbd/keyboards.h" +#include "bus/pc_kbd/pc_kbdc.h" #include "machine/genpc.h" #include "softlist.h" @@ -303,10 +304,12 @@ void ibmpc_state::ibm5150(machine_config &config) m_maincpu->set_addrmap(AS_IO, &ibmpc_state::pc8_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - ibm5150_mb_device &mb(IBM5150_MOTHERBOARD(config, "mb", 0)); + ibm5150_mb_device &mb(IBM5150_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(cga)); ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "cga", false); // FIXME: determine ISA bus clock @@ -316,7 +319,9 @@ void ibmpc_state::ibm5150(machine_config &config) ISA8_SLOT(config, "isa5", 0, "mb:isa", pc_isa8_cards, nullptr, false); /* keyboard */ - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270)); + kbd.out_clock_cb().set("mb", FUNC(ibm5150_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ibm5150_mb_device::keyboard_data_w)); /* internal ram */ RAM(config, RAM_TAG).set_default_size("640K").set_extra_options("64K, 128K, 256K, 512K"); @@ -344,10 +349,12 @@ void ibmpc_state::ibm5160(machine_config &config) m_maincpu->set_addrmap(AS_IO, &ibmpc_state::pc8_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(cga)); ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "cga", false); // FIXME: determine ISA bus clock @@ -360,7 +367,9 @@ void ibmpc_state::ibm5160(machine_config &config) ISA8_SLOT(config, "isa8", 0, "mb:isa", pc_isa8_cards, nullptr, false); /* keyboard */ - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83)); + kbd.out_clock_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_data_w)); /* internal ram */ RAM(config, RAM_TAG).set_default_size("640K").set_extra_options("64K, 128K, 256K, 512K"); diff --git a/src/mame/drivers/indiana.cpp b/src/mame/drivers/indiana.cpp index 94d1ec854cf..e6347e146b4 100644 --- a/src/mame/drivers/indiana.cpp +++ b/src/mame/drivers/indiana.cpp @@ -117,13 +117,11 @@ void indiana_state::indiana(machine_config &config) ISA16_SLOT(config, "isa3", 0, ISABUS_TAG, indiana_isa_cards, "comat", false); ISA16_SLOT(config, "isa4", 0, ISABUS_TAG, indiana_isa_cards, "ide", false); - pc_kbdc_device &pc_kbdc(PC_KBDC(config, "pc_kbdc", 0)); - pc_kbdc.out_data_cb().set("mfp", FUNC(mc68901_device::i0_w)); - pc_kbdc.out_data_cb().append("mfp", FUNC(mc68901_device::si_w)); - pc_kbdc.out_clock_cb().set("mfp", FUNC(mc68901_device::i1_w)); - pc_kbdc.out_clock_cb().append("mfp", FUNC(mc68901_device::rc_w)); - - PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_84).set_pc_kbdc_slot(subdevice("pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_84)); + kbd.out_data_cb().set("mfp", FUNC(mc68901_device::i0_w)); + kbd.out_data_cb().append("mfp", FUNC(mc68901_device::si_w)); + kbd.out_clock_cb().set("mfp", FUNC(mc68901_device::i1_w)); + kbd.out_clock_cb().append("mfp", FUNC(mc68901_device::rc_w)); mc68901_device &mfp(MC68901(config, "mfp", 16_MHz_XTAL / 4)); mfp.set_timer_clock(16_MHz_XTAL / 16); diff --git a/src/mame/drivers/iskr103x.cpp b/src/mame/drivers/iskr103x.cpp index 285bc622f10..3731516dc3e 100644 --- a/src/mame/drivers/iskr103x.cpp +++ b/src/mame/drivers/iskr103x.cpp @@ -21,6 +21,7 @@ #include "cpu/nec/nec.h" #include "bus/isa/xsu_cards.h" #include "bus/pc_kbd/keyboards.h" +#include "bus/pc_kbd/pc_kbdc.h" #include "machine/pc_lpt.h" #include "machine/ram.h" #include "softlist.h" @@ -75,10 +76,12 @@ void iskr103x_state::iskr1030m(machine_config &config) m_maincpu->set_addrmap(AS_IO, &iskr103x_state::iskr1031_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(iskr1030m)); ISA8_SLOT(config, "isa1", 0, "mb:isa", iskr103x_isa8_cards, "cga_iskr1030m", false); // FIXME: determine IS bus clock @@ -88,8 +91,10 @@ void iskr103x_state::iskr1030m(machine_config &config) ISA8_SLOT(config, "isa5", 0, "mb:isa", iskr103x_isa8_cards, nullptr, false); ISA8_SLOT(config, "isa6", 0, "mb:isa", iskr103x_isa8_cards, nullptr, false); - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_EC_1841).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); -// PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_ISKR_1030).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_EC_1841)); +// pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_ISKR_1030)); + kbd.out_clock_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_data_w)); RAM(config, RAM_TAG).set_default_size("640K").set_extra_options("64K, 128K, 256K, 512K"); } diff --git a/src/mame/drivers/jazz.cpp b/src/mame/drivers/jazz.cpp index 53eb96edd66..d1c40a081ff 100644 --- a/src/mame/drivers/jazz.cpp +++ b/src/mame/drivers/jazz.cpp @@ -348,23 +348,15 @@ void jazz_state::jazz(machine_config &config) AMD_28F020(config, m_flash); // pc keyboard connector - pc_kbdc_device &kbd_con(PC_KBDC(config, "kbd_con", 0)); + pc_kbdc_device &kbd_con(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)); kbd_con.out_clock_cb().set(m_kbdc, FUNC(ps2_keyboard_controller_device::kbd_clk_w)); kbd_con.out_data_cb().set(m_kbdc, FUNC(ps2_keyboard_controller_device::kbd_data_w)); - // keyboard port - pc_kbdc_slot_device &kbd(PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)); - kbd.set_pc_kbdc_slot(&kbd_con); - // auxiliary connector - pc_kbdc_device &aux_con(PC_KBDC(config, "aux_con", 0)); + pc_kbdc_device &aux_con(PC_KBDC(config, "aux", ps2_mice, STR_HLE_PS2_MOUSE)); aux_con.out_clock_cb().set(m_kbdc, FUNC(ps2_keyboard_controller_device::aux_clk_w)); aux_con.out_data_cb().set(m_kbdc, FUNC(ps2_keyboard_controller_device::aux_data_w)); - // auxiliary port - pc_kbdc_slot_device &aux(PC_KBDC_SLOT(config, "aux", ps2_mice, STR_HLE_PS2_MOUSE)); - aux.set_pc_kbdc_slot(&aux_con); - // keyboard controller PS2_KEYBOARD_CONTROLLER(config, m_kbdc, 12_MHz_XTAL); // FIXME: reset is probably routed through the MCT-ADR diff --git a/src/mame/drivers/jensen.cpp b/src/mame/drivers/jensen.cpp index cb90a892268..25af409b8fe 100644 --- a/src/mame/drivers/jensen.cpp +++ b/src/mame/drivers/jensen.cpp @@ -182,14 +182,10 @@ void jensen_state::jensen(machine_config &config) INTEL_E28F008SA(config, m_feprom[1]); // keyboard connector - pc_kbdc_device &kbd_con(PC_KBDC(config, "kbd_con", 0)); + [[maybe_unused]] pc_kbdc_device &kbd_con(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)); //kbd_con.out_clock_cb().set(m_kbdc, FUNC(ps2_keyboard_controller_device::kbd_clk_w)); //kbd_con.out_data_cb().set(m_kbdc, FUNC(ps2_keyboard_controller_device::kbd_data_w)); - // keyboard port - pc_kbdc_slot_device &kbd(PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)); - kbd.set_pc_kbdc_slot(&kbd_con); - // TODO: VL82C106 (rtc, dual serial, parallel, dual ps/2) // TODO: 18.432 MHz crystal #if 0 diff --git a/src/mame/drivers/mips.cpp b/src/mame/drivers/mips.cpp index af8fcd37f1a..ce4f06a7496 100644 --- a/src/mame/drivers/mips.cpp +++ b/src/mame/drivers/mips.cpp @@ -326,7 +326,7 @@ private: required_device m_rtc; required_device m_fio; required_device m_kbdc; - required_device m_kbd; + required_device m_kbd; required_device m_scc; required_device_array m_tty; required_device m_fdc; @@ -410,7 +410,7 @@ private: required_device m_rtc; required_device m_fdc; required_device m_kbdc; - required_device m_kbd; + required_device m_kbd; required_device m_buzzer; // optional colour video board @@ -775,19 +775,15 @@ void rx2030_state::rx2030(machine_config &config) m_fio->out_int_cb<1>().set_inputline(m_iop, INPUT_LINE_IRQ4); // keyboard connector - pc_kbdc_device &kbd_con(PC_KBDC(config, "kbd_con", 0)); - kbd_con.out_clock_cb().set(m_kbdc, FUNC(at_keyboard_controller_device::kbd_clk_w)); - kbd_con.out_data_cb().set(m_kbdc, FUNC(at_keyboard_controller_device::kbd_data_w)); - - // keyboard port - PC_KBDC_SLOT(config, m_kbd, pc_at_keyboards, nullptr); - m_kbd->set_pc_kbdc_slot(&kbd_con); + PC_KBDC(config, m_kbd, pc_at_keyboards, nullptr); + m_kbd->out_clock_cb().set(m_kbdc, FUNC(at_keyboard_controller_device::kbd_clk_w)); + m_kbd->out_data_cb().set(m_kbdc, FUNC(at_keyboard_controller_device::kbd_data_w)); // keyboard controller AT_KEYBOARD_CONTROLLER(config, m_kbdc, 12_MHz_XTAL); //m_kbdc->hot_res().set_inputline(m_maincpu, INPUT_LINE_RESET); - m_kbdc->kbd_clk().set(kbd_con, FUNC(pc_kbdc_device::clock_write_from_mb)); - m_kbdc->kbd_data().set(kbd_con, FUNC(pc_kbdc_device::data_write_from_mb)); + m_kbdc->kbd_clk().set(m_kbd, FUNC(pc_kbdc_device::clock_write_from_mb)); + m_kbdc->kbd_data().set(m_kbd, FUNC(pc_kbdc_device::data_write_from_mb)); m_kbdc->set_default_bios_tag("award15"); SCC85C30(config, m_scc, 1.8432_MHz_XTAL); @@ -1088,18 +1084,14 @@ void rx3230_state::rx3230(machine_config &config) FLOPPY_CONNECTOR(config, "fdc:0", "35hd", FLOPPY_35_HD, true, mips_floppy_formats).enable_sound(false); // keyboard connector - pc_kbdc_device &kbd_con(PC_KBDC(config, "kbd_con", 0)); - kbd_con.out_clock_cb().set(m_kbdc, FUNC(at_keyboard_controller_device::kbd_clk_w)); - kbd_con.out_data_cb().set(m_kbdc, FUNC(at_keyboard_controller_device::kbd_data_w)); - - // keyboard port - PC_KBDC_SLOT(config, m_kbd, pc_at_keyboards, nullptr); - m_kbd->set_pc_kbdc_slot(&kbd_con); + PC_KBDC(config, m_kbd, pc_at_keyboards, nullptr); + m_kbd->out_clock_cb().set(m_kbdc, FUNC(at_keyboard_controller_device::kbd_clk_w)); + m_kbd->out_data_cb().set(m_kbdc, FUNC(at_keyboard_controller_device::kbd_data_w)); // keyboard controller AT_KEYBOARD_CONTROLLER(config, m_kbdc, 12_MHz_XTAL); // TODO: confirm - m_kbdc->kbd_clk().set(kbd_con, FUNC(pc_kbdc_device::clock_write_from_mb)); - m_kbdc->kbd_data().set(kbd_con, FUNC(pc_kbdc_device::data_write_from_mb)); + m_kbdc->kbd_clk().set(m_kbd, FUNC(pc_kbdc_device::clock_write_from_mb)); + m_kbdc->kbd_data().set(m_kbd, FUNC(pc_kbdc_device::data_write_from_mb)); //m_kbdc->kbd_irq().set(FUNC(rx3230_state::irq_w)); // buzzer diff --git a/src/mame/drivers/mtouchxl.cpp b/src/mame/drivers/mtouchxl.cpp index dd1a2d205b4..96fbe2570a2 100644 --- a/src/mame/drivers/mtouchxl.cpp +++ b/src/mame/drivers/mtouchxl.cpp @@ -234,7 +234,7 @@ void mtxl_state::at486(machine_config &config) #ifndef REAL_PCI_CHIPSET m_maincpu->set_irq_acknowledge_callback("mb:pic8259_master", FUNC(pic8259_device::inta_cb)); - AT_MB(config, "mb", 0); + AT_MB(config, "mb"); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // on board devices @@ -255,7 +255,6 @@ void mtxl_state::at486(machine_config &config) // remove the keyboard controller and use the HLE one which allow keys to be unmapped config.device_remove("mb:keybc"); - config.device_remove("mb:pc_kbdc"); kbdc8042_device &kbdc(KBDC8042(config, "kbdc")); kbdc.set_keyboard_type(kbdc8042_device::KBDC8042_STANDARD); kbdc.system_reset_callback().set_inputline(m_maincpu, INPUT_LINE_RESET); @@ -294,7 +293,7 @@ void mtxl_state::at486hd(machine_config &config) #ifndef REAL_PCI_CHIPSET m_maincpu->set_irq_acknowledge_callback("mb:pic8259_master", FUNC(pic8259_device::inta_cb)); - AT_MB(config, "mb", 0); + AT_MB(config, "mb"); NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); // on board devices @@ -315,7 +314,6 @@ void mtxl_state::at486hd(machine_config &config) // remove the keyboard controller and use the HLE one which allow keys to be unmapped config.device_remove("mb:keybc"); - config.device_remove("mb:pc_kbdc"); kbdc8042_device &kbdc(KBDC8042(config, "kbdc")); kbdc.set_keyboard_type(kbdc8042_device::KBDC8042_STANDARD); kbdc.system_reset_callback().set_inputline(m_maincpu, INPUT_LINE_RESET); diff --git a/src/mame/drivers/ncd68k.cpp b/src/mame/drivers/ncd68k.cpp index 566ebcea5d0..62dfe58bfe1 100644 --- a/src/mame/drivers/ncd68k.cpp +++ b/src/mame/drivers/ncd68k.cpp @@ -92,7 +92,7 @@ public: , m_vram(*this, "vram") , m_duart(*this, "duart") , m_lance(*this, "lance") - , m_kbd_con(*this, "kbd_con") + , m_kbd_con(*this, "kbd") , m_serial(*this, "serial%u", 0U) , m_eeprom(*this, "eeprom") , m_screen(*this, "screen") @@ -601,7 +601,7 @@ void ncd68k_state::common(machine_config &config) m_mcu->portb_r().set(FUNC(ncd68k_state::mcu_portb_r)); // keyboard connector - PC_KBDC(config, m_kbd_con, 0); + PC_KBDC(config, m_kbd_con, pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL); m_kbd_con->out_clock_cb().set_inputline(m_mcu, M6805_IRQ_LINE).invert(); m_kbd_con->out_data_cb().set( [this] (int state) @@ -612,10 +612,6 @@ void ncd68k_state::common(machine_config &config) m_porta_in &= ~0x01; }); - // keyboard port - pc_kbdc_slot_device &kbd(PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)); - kbd.set_pc_kbdc_slot(m_kbd_con); - // mouse and auxiliary ports RS232_PORT(config, m_serial[0], [] (device_slot_interface &device) diff --git a/src/mame/drivers/pc.cpp b/src/mame/drivers/pc.cpp index 1c9d4ad33d2..1e974aeb506 100644 --- a/src/mame/drivers/pc.cpp +++ b/src/mame/drivers/pc.cpp @@ -30,6 +30,7 @@ Driver file for IBM PC, IBM PC XT, and related machines. #include "bus/isa/isa.h" #include "bus/isa/isa_cards.h" #include "bus/pc_kbd/keyboards.h" +#include "bus/pc_kbd/pc_kbdc.h" #include "softlist.h" /******************************************************* Generic PC with CGA ***/ @@ -206,10 +207,12 @@ void pc_state::pccga(machine_config &config) maincpu.set_addrmap(AS_IO, &pc_state::pc8_io); maincpu.set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(pccga)); // FIXME: determine ISA bus clock @@ -220,7 +223,9 @@ void pc_state::pccga(machine_config &config) ISA8_SLOT(config, "isa5", 0, "mb:isa", pc_isa8_cards, nullptr, false); /* keyboard */ - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83)); + kbd.out_clock_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_data_w)); /* internal ram */ RAM(config, RAM_TAG).set_default_size("640K").set_extra_options("64K, 128K, 256K, 512K"); @@ -676,10 +681,12 @@ void pc_state::ibm5550(machine_config &config) maincpu.set_addrmap(AS_IO, &pc_state::ibm5550_io); maincpu.set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(pccga)); // FIXME: determine ISA bus clock @@ -689,7 +696,9 @@ void pc_state::ibm5550(machine_config &config) ISA8_SLOT(config, "isa4", 0, "mb:isa", pc_isa8_cards, "com", false); /* keyboard */ - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83)); + kbd.out_clock_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_data_w)); /* internal ram */ RAM(config, RAM_TAG).set_default_size("640K").set_extra_options("64K, 128K, 256K, 512K"); @@ -981,10 +990,12 @@ void pc_state::poisk2(machine_config &config) maincpu.set_addrmap(AS_IO, &pc_state::pc16_io); maincpu.set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(pccga)); ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "cga_poisk2", false); // FIXME: determine ISA bus clock @@ -993,7 +1004,9 @@ void pc_state::poisk2(machine_config &config) ISA8_SLOT(config, "isa4", 0, "mb:isa", pc_isa8_cards, "com", false); /* keyboard */ - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83)); + kbd.out_clock_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_data_w)); /* internal ram */ RAM(config, RAM_TAG).set_default_size("640K").set_extra_options("64K, 128K, 256K, 512K"); @@ -1079,10 +1092,12 @@ void pc_state::iskr3104(machine_config &config) maincpu.set_addrmap(AS_IO, &pc_state::pc16_io); maincpu.set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(iskr3104)); ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "ega", false).set_option_default_bios("ega", "iskr3104"); // FIXME: determine ISA bus clock @@ -1091,7 +1106,9 @@ void pc_state::iskr3104(machine_config &config) ISA8_SLOT(config, "isa4", 0, "mb:isa", pc_isa8_cards, "com", false); /* keyboard */ - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83)); + kbd.out_clock_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_data_w)); /* internal ram */ RAM(config, RAM_TAG).set_default_size("640K").set_extra_options("64K, 128K, 256K, 512K"); @@ -1162,10 +1179,12 @@ void pc_state::siemens(machine_config &config) maincpu.set_addrmap(AS_IO, &pc_state::pc8_io); maincpu.set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - ibm5150_mb_device &mb(IBM5150_MOTHERBOARD(config, "mb", 0)); + ibm5150_mb_device &mb(IBM5150_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(siemens)); // FIXME: determine ISA bus clock @@ -1177,7 +1196,9 @@ void pc_state::siemens(machine_config &config) ISA8_SLOT(config, "isa6", 0, "mb:isa", pc_isa8_cards, nullptr, false); /* keyboard */ - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83)); + kbd.out_clock_cb().set("mb", FUNC(ibm5150_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ibm5150_mb_device::keyboard_data_w)); /* internal ram */ RAM(config, RAM_TAG).set_default_size("640K").set_extra_options("64K, 128K, 256K, 512K"); @@ -1334,10 +1355,12 @@ void pc_state::zenith(machine_config &config) maincpu.set_addrmap(AS_IO, &pc_state::pc8_io); maincpu.set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - ibm5150_mb_device &mb(IBM5150_MOTHERBOARD(config, "mb", 0)); + ibm5150_mb_device &mb(IBM5150_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(pccga)); ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "cga", false); // FIXME: determine ISA bus clock @@ -1346,7 +1369,9 @@ void pc_state::zenith(machine_config &config) ISA8_SLOT(config, "isa4", 0, "mb:isa", pc_isa8_cards, "com", false); /* keyboard */ - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83)); + kbd.out_clock_cb().set("mb", FUNC(ibm5150_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ibm5150_mb_device::keyboard_data_w)); /* internal ram */ RAM(config, RAM_TAG).set_default_size("640K").set_extra_options("128K, 256K, 512K"); @@ -1427,8 +1452,11 @@ SW1 and SW2 DIP switch blocks void pc_state::cadd810(machine_config &config) { pccga(config); - config.device_remove("kbd"); - PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_101).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + + auto &kbd(*subdevice("kbd")); + kbd.option_reset(); + pc_at_keyboards(kbd); + kbd.set_default_option(STR_KBD_IBM_PC_AT_101); } ROM_START( cadd810 ) @@ -1500,10 +1528,12 @@ void pc_state::juko16(machine_config &config) maincpu.set_addrmap(AS_IO, &pc_state::pc16_io); maincpu.set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(pccga)); ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "cga", false); // FIXME: determine ISA bus clock @@ -1512,7 +1542,9 @@ void pc_state::juko16(machine_config &config) ISA8_SLOT(config, "isa4", 0, "mb:isa", pc_isa8_cards, "com", false); /* keyboard */ - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83)); + kbd.out_clock_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_data_w)); /* internal ram */ RAM(config, RAM_TAG).set_default_size("640K").set_extra_options("64K, 128K, 256K, 512K"); @@ -1840,10 +1872,12 @@ void pc_state::alphatp50(machine_config &config) m_maincpu->set_addrmap(AS_IO, &pc_state::pc16_io); downcast(*m_maincpu).set_irmx_irq_ack("mb:pic8259", FUNC(pic8259_device::inta_cb)); - ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set(m_maincpu, FUNC(i80186_cpu_device::int0_w)); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(pccga)); // FIXME: determine ISA bus clock @@ -1854,7 +1888,9 @@ void pc_state::alphatp50(machine_config &config) ISA8_SLOT(config, "isa5", 0, "mb:isa", pc_isa8_cards, nullptr, false); /* keyboard */ - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83)); + kbd.out_clock_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_data_w)); /* internal ram */ RAM(config, RAM_TAG).set_default_size("512K").set_extra_options("128K, 256K, 384K"); @@ -2001,10 +2037,12 @@ void pc_state::modernxt(machine_config &config) // this is just to load the ROMs maincpu.set_addrmap(AS_IO, &pc_state::pc8_io); maincpu.set_irq_acknowledge_callback("mb:pic8259", FUNC(pic8259_device::inta_cb)); - ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); mb.set_input_default(DEVICE_INPUT_DEFAULTS_NAME(pccga)); ISA8_SLOT(config, "isa1", 0, "mb:isa", pc_isa8_cards, "vga", false); // FIXME: determine ISA bus clock @@ -2014,7 +2052,9 @@ void pc_state::modernxt(machine_config &config) // this is just to load the ROMs ISA8_SLOT(config, "isa5", 0, "mb:isa", pc_isa8_cards, "xtide", false); /* keyboard */ - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83)); + kbd.out_clock_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_data_w)); /* internal ram */ RAM(config, RAM_TAG).set_default_size("640K").set_extra_options("512K"); diff --git a/src/mame/drivers/ps2.cpp b/src/mame/drivers/ps2.cpp index 3d2768e0152..70f4bb86060 100644 --- a/src/mame/drivers/ps2.cpp +++ b/src/mame/drivers/ps2.cpp @@ -8,6 +8,7 @@ #include "machine/ram.h" #include "bus/isa/isa_cards.h" #include "bus/pc_kbd/keyboards.h" +#include "bus/pc_kbd/pc_kbdc.h" #include "softlist_dev.h" // According to http://nerdlypleasures.blogspot.com/2014/04/the-original-8-bit-ide-interface.html @@ -99,7 +100,9 @@ void ps2_state::ps2m30286(machine_config &config) maincpu.set_irq_acknowledge_callback("mb:pic8259_master", FUNC(pic8259_device::inta_cb)); maincpu.shutdown_callback().set("mb", FUNC(at_mb_device::shutdown)); - AT_MB(config, m_mb, 0); + AT_MB(config, m_mb); + m_mb->kbd_clk().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + m_mb->kbd_data().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); config.set_maximum_quantum(attotime::from_hz(60)); @@ -110,7 +113,10 @@ void ps2_state::ps2m30286(machine_config &config) ISA16_SLOT(config, "isa2", 0, "mb:isabus", pc_isa16_cards, "fdc", false); ISA16_SLOT(config, "isa3", 0, "mb:isabus", pc_isa16_cards, "ide", false); ISA16_SLOT(config, "isa4", 0, "mb:isabus", pc_isa16_cards, "comat", false); - PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_84).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_84)); + kbd.out_clock_cb().set(m_mb, FUNC(at_mb_device::kbd_clk_w)); + kbd.out_data_cb().set(m_mb, FUNC(at_mb_device::kbd_data_w)); /* internal ram */ RAM(config, RAM_TAG).set_default_size("1664K").set_extra_options("2M,4M,8M,15M"); @@ -123,7 +129,9 @@ void ps2_state::ps2386(machine_config &config) m_maincpu->set_addrmap(AS_IO, &ps2_state::ps2_32_io); m_maincpu->set_irq_acknowledge_callback("mb:pic8259_master", FUNC(pic8259_device::inta_cb)); - AT_MB(config, m_mb, 0); + AT_MB(config, m_mb); + m_mb->kbd_clk().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + m_mb->kbd_data().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); config.set_maximum_quantum(attotime::from_hz(60)); at_softlists(config); @@ -139,7 +147,10 @@ void ps2_state::ps2386(machine_config &config) ISA16_SLOT(config, "isa3", 0, "mb:isabus", pc_isa16_cards, nullptr, false); ISA16_SLOT(config, "isa4", 0, "mb:isabus", pc_isa16_cards, nullptr, false); ISA16_SLOT(config, "isa5", 0, "mb:isabus", pc_isa16_cards, nullptr, false); - PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)); + kbd.out_clock_cb().set(m_mb, FUNC(at_mb_device::kbd_clk_w)); + kbd.out_data_cb().set(m_mb, FUNC(at_mb_device::kbd_data_w)); /* internal ram */ RAM(config, RAM_TAG).set_default_size("1664K").set_extra_options("2M,4M,8M,15M,16M,32M,64M,128M,256M"); diff --git a/src/mame/drivers/pt68k4.cpp b/src/mame/drivers/pt68k4.cpp index 0a46542f712..c29d2c626e1 100644 --- a/src/mame/drivers/pt68k4.cpp +++ b/src/mame/drivers/pt68k4.cpp @@ -85,7 +85,6 @@ TODO: 68230 device #define DUART2_TAG "duart2" #define TIMEKEEPER_TAG "timekpr" #define ISABUS_TAG "isa" -#define KBDC_TAG "pc_kbdc" #define SPEAKER_TAG "speaker" #define WDFDC_TAG "wdfdc" @@ -412,10 +411,9 @@ void pt68k4_state::pt68k2(machine_config &config) MC68681(config, m_duart2, 3.6864_MHz_XTAL); - pc_kbdc_device &pc_kbdc(PC_KBDC(config, KBDC_TAG, 0)); + pc_kbdc_device &pc_kbdc(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83)); pc_kbdc.out_clock_cb().set(FUNC(pt68k4_state::keyboard_clock_w)); pc_kbdc.out_data_cb().set(FUNC(pt68k4_state::keyboard_data_w)); - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(&pc_kbdc); M48T02(config, TIMEKEEPER_TAG, 0); @@ -453,10 +451,9 @@ void pt68k4_state::pt68k4(machine_config &config) MC68681(config, m_duart2, XTAL(16'000'000) / 4); - pc_kbdc_device &pc_kbdc(PC_KBDC(config, KBDC_TAG, 0)); + pc_kbdc_device &pc_kbdc(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83)); pc_kbdc.out_clock_cb().set(FUNC(pt68k4_state::keyboard_clock_w)); pc_kbdc.out_data_cb().set(FUNC(pt68k4_state::keyboard_data_w)); - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_IBM_PC_XT_83).set_pc_kbdc_slot(&pc_kbdc); M48T02(config, TIMEKEEPER_TAG, 0); diff --git a/src/mame/drivers/riscpc.cpp b/src/mame/drivers/riscpc.cpp index 3910ea42127..bb74dc4fd98 100644 --- a/src/mame/drivers/riscpc.cpp +++ b/src/mame/drivers/riscpc.cpp @@ -163,23 +163,16 @@ void riscpc_state::base_config(machine_config &config) { I2C_24C02(config, m_i2cmem); - pc_kbdc_device &kbd_con(PC_KBDC(config, "kbd_con", 0)); + // TODO: verify type + pc_kbdc_device &kbd_con(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_101)); kbd_con.out_clock_cb().set(m_kbdc, FUNC(ps2_keyboard_controller_device::kbd_clk_w)); kbd_con.out_data_cb().set(m_kbdc, FUNC(ps2_keyboard_controller_device::kbd_data_w)); - // TODO: verify type - pc_kbdc_slot_device &kbd(PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_IBM_PC_AT_101)); - kbd.set_pc_kbdc_slot(&kbd_con); - // auxiliary connector -// pc_kbdc_device &aux_con(PC_KBDC(config, "aux_con", 0)); +// pc_kbdc_device &aux_con(PC_KBDC(config, "aux", ps2_mice, STR_HLE_PS2_MOUSE)); // aux_con.out_clock_cb().set(m_kbdc, FUNC(ps2_keyboard_controller_device::aux_clk_w)); // aux_con.out_data_cb().set(m_kbdc, FUNC(ps2_keyboard_controller_device::aux_data_w)); - // auxiliary port -// pc_kbdc_slot_device &aux(PC_KBDC_SLOT(config, "aux", ps2_mice, STR_HLE_PS2_MOUSE)); -// aux.set_pc_kbdc_slot(&aux_con); - PS2_KEYBOARD_CONTROLLER(config, m_kbdc, 12_MHz_XTAL); m_kbdc->hot_res().set(m_iomd, FUNC(arm_iomd_device::keyboard_reset)); m_kbdc->kbd_clk().set(kbd_con, FUNC(pc_kbdc_device::clock_write_from_mb)); diff --git a/src/mame/drivers/tosh1000.cpp b/src/mame/drivers/tosh1000.cpp index 36819410383..40c098eb4d0 100644 --- a/src/mame/drivers/tosh1000.cpp +++ b/src/mame/drivers/tosh1000.cpp @@ -41,6 +41,7 @@ #include "machine/genpc.h" #include "bus/isa/isa_cards.h" #include "bus/pc_kbd/keyboards.h" +#include "bus/pc_kbd/pc_kbdc.h" #include "cpu/i86/i86.h" #include "machine/bankdev.h" #include "machine/ram.h" @@ -265,10 +266,12 @@ void tosh1000_state::tosh1000(machine_config &config) ADDRESS_MAP_BANK(config, "bankdev").set_map(&tosh1000_state::tosh1000_romdos).set_options(ENDIANNESS_LITTLE, 8, 20, 0x10000); - ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb", 0)); + ibm5160_mb_device &mb(IBM5160_MOTHERBOARD(config, "mb")); mb.set_cputag(m_maincpu); mb.int_callback().set_inputline(m_maincpu, 0); mb.nmi_callback().set_inputline(m_maincpu, INPUT_LINE_NMI); + mb.kbdclk_callback().set("kbd", FUNC(pc_kbdc_device::clock_write_from_mb)); + mb.kbddata_callback().set("kbd", FUNC(pc_kbdc_device::data_write_from_mb)); TC8521(config, "rtc", XTAL(32'768)); @@ -282,8 +285,10 @@ void tosh1000_state::tosh1000(machine_config &config) // SOFTWARE_LIST(config, "flop_list").set_original("tosh1000"); - // uses a 80C50 instead of 8042 for KBDC - PC_KBDC_SLOT(config, "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270).set_pc_kbdc_slot(subdevice("mb:pc_kbdc")); + // TODO: uses a 80C50 instead of 8042 for KBDC + pc_kbdc_device &kbd(PC_KBDC(config, "kbd", pc_xt_keyboards, STR_KBD_KEYTRONIC_PC3270)); + kbd.out_clock_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_clock_w)); + kbd.out_data_cb().set("mb", FUNC(ibm5160_mb_device::keyboard_data_w)); RAM(config, RAM_TAG).set_default_size("512K"); diff --git a/src/mame/drivers/vis.cpp b/src/mame/drivers/vis.cpp index 23da74910e0..1258ce54f1c 100644 --- a/src/mame/drivers/vis.cpp +++ b/src/mame/drivers/vis.cpp @@ -903,10 +903,9 @@ void vis_state::vis(machine_config &config) maincpu.shutdown_callback().set("mb", FUNC(at_mb_device::shutdown)); maincpu.set_irq_acknowledge_callback("mb:pic8259_master", FUNC(pic8259_device::inta_cb)); - AT_MB(config, "mb", 0); + AT_MB(config, "mb"); // the vis doesn't have a real keyboard controller config.device_remove("mb:keybc"); - config.device_remove("mb:pc_kbdc"); kbdc8042_device &kbdc(KBDC8042(config, "kbdc")); kbdc.set_keyboard_type(kbdc8042_device::KBDC8042_STANDARD); diff --git a/src/mame/machine/at.cpp b/src/mame/machine/at.cpp index 237f0770d9a..ee21386a666 100644 --- a/src/mame/machine/at.cpp +++ b/src/mame/machine/at.cpp @@ -10,8 +10,6 @@ #include "machine/at.h" #include "cpu/i86/i286.h" #include "cpu/i386/i386.h" -#include "machine/at_keybc.h" -#include "bus/pc_kbd/pc_kbdc.h" #include "softlist_dev.h" #include "speaker.h" @@ -28,7 +26,8 @@ at_mb_device::at_mb_device(const machine_config &mconfig, const char *tag, devic m_dma8237_2(*this, "dma8237_2"), m_pit8254(*this, "pit8254"), m_speaker(*this, "speaker"), - m_mc146818(*this, "rtc") + m_mc146818(*this, "rtc"), + m_keybc(*this, "keybc") { } @@ -58,7 +57,7 @@ void at_mb_device::at_softlists(machine_config &config) void at_mb_device::device_add_mconfig(machine_config &config) { - PIT8254(config, m_pit8254, 0); + PIT8254(config, m_pit8254); m_pit8254->set_clk<0>(4772720/4); /* heartbeat IRQ */ m_pit8254->out_handler<0>().set("pic8259_master", FUNC(pic8259_device::ir0_w)); m_pit8254->set_clk<1>(4772720/4); /* dram refresh */ @@ -99,12 +98,12 @@ void at_mb_device::device_add_mconfig(machine_config &config) m_dma8237_2->out_dack_callback<2>().set(FUNC(at_mb_device::dack6_w)); m_dma8237_2->out_dack_callback<3>().set(FUNC(at_mb_device::dack7_w)); - pic8259_device &pic8259_master(PIC8259(config, "pic8259_master", 0)); + pic8259_device &pic8259_master(PIC8259(config, "pic8259_master")); pic8259_master.out_int_callback().set_inputline(":maincpu", 0); pic8259_master.in_sp_callback().set_constant(1); pic8259_master.read_slave_ack_callback().set(FUNC(at_mb_device::get_slave_ack)); - PIC8259(config, m_pic8259_slave, 0); + PIC8259(config, m_pic8259_slave); m_pic8259_slave->out_int_callback().set("pic8259_master", FUNC(pic8259_device::ir2_w)); m_pic8259_slave->in_sp_callback().set_constant(0); @@ -143,12 +142,6 @@ void at_mb_device::device_add_mconfig(machine_config &config) keybc.hot_res().set_inputline(":maincpu", INPUT_LINE_RESET); keybc.gate_a20().set_inputline(":maincpu", INPUT_LINE_A20); keybc.kbd_irq().set("pic8259_master", FUNC(pic8259_device::ir1_w)); - keybc.kbd_clk().set("pc_kbdc", FUNC(pc_kbdc_device::clock_write_from_mb)); - keybc.kbd_data().set("pc_kbdc", FUNC(pc_kbdc_device::data_write_from_mb)); - - pc_kbdc_device &pc_kbdc(PC_KBDC(config, "pc_kbdc", 0)); - pc_kbdc.out_clock_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_clk_w)); - pc_kbdc.out_data_cb().set("keybc", FUNC(at_keyboard_controller_device::kbd_data_w)); } @@ -397,6 +390,9 @@ WRITE_LINE_MEMBER( at_mb_device::dack5_w ) { set_dma_channel(5, state); } WRITE_LINE_MEMBER( at_mb_device::dack6_w ) { set_dma_channel(6, state); } WRITE_LINE_MEMBER( at_mb_device::dack7_w ) { set_dma_channel(7, state); } +WRITE_LINE_MEMBER( at_mb_device::kbd_clk_w ) { m_keybc->kbd_clk_w(state); } +WRITE_LINE_MEMBER( at_mb_device::kbd_data_w ) { m_keybc->kbd_data_w(state); } + uint8_t at_mb_device::portb_r() { uint8_t data = m_at_speaker; diff --git a/src/mame/machine/at.h b/src/mame/machine/at.h index 3eabccc899d..0aa4aa129b4 100644 --- a/src/mame/machine/at.h +++ b/src/mame/machine/at.h @@ -7,7 +7,7 @@ #include "machine/pic8259.h" #include "machine/pit8253.h" #include "machine/am9517a.h" -#include "bus/pc_kbd/pc_kbdc.h" +#include "machine/at_keybc.h" #include "bus/isa/isa.h" #include "sound/spkrdev.h" #include "softlist.h" @@ -15,12 +15,17 @@ class at_mb_device : public device_t { public: - at_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + at_mb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0); void map(address_map &map); + auto kbd_clk() { return subdevice("keybc")->kbd_clk(); } + auto kbd_data() { return subdevice("keybc")->kbd_data(); } + uint8_t page8_r(offs_t offset); void page8_w(offs_t offset, uint8_t data); + DECLARE_WRITE_LINE_MEMBER(kbd_clk_w); + DECLARE_WRITE_LINE_MEMBER(kbd_data_w); uint8_t portb_r(); void portb_w(uint8_t data); void write_rtc(offs_t offset, uint8_t data); @@ -48,6 +53,8 @@ private: required_device m_pit8254; required_device m_speaker; required_device m_mc146818; + optional_device m_keybc; // removed in mtouchxl.cpp and vis.cpp + uint8_t m_at_spkrdata; uint8_t m_pit_out2; int m_dma_channel; diff --git a/src/mame/machine/ioc2.cpp b/src/mame/machine/ioc2.cpp index eeff60b99d1..bb230e05e58 100644 --- a/src/mame/machine/ioc2.cpp +++ b/src/mame/machine/ioc2.cpp @@ -92,23 +92,15 @@ void ioc2_device::device_add_mconfig(machine_config &config) PC_LPT(config, m_pi1); // keyboard connector - pc_kbdc_device &kbd_con(PC_KBDC(config, "kbd_con", 0)); + pc_kbdc_device &kbd_con(PC_KBDC(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)); kbd_con.out_clock_cb().set(m_kbdc, FUNC(ps2_keyboard_controller_device::kbd_clk_w)); kbd_con.out_data_cb().set(m_kbdc, FUNC(ps2_keyboard_controller_device::kbd_data_w)); - // keyboard port - pc_kbdc_slot_device &kbd(PC_KBDC_SLOT(config, "kbd", pc_at_keyboards, STR_KBD_MICROSOFT_NATURAL)); - kbd.set_pc_kbdc_slot(&kbd_con); - // auxiliary connector - pc_kbdc_device &aux_con(PC_KBDC(config, "aux_con", 0)); + pc_kbdc_device &aux_con(PC_KBDC(config, "aux", ps2_mice, STR_HLE_PS2_MOUSE)); aux_con.out_clock_cb().set(m_kbdc, FUNC(ps2_keyboard_controller_device::aux_clk_w)); aux_con.out_data_cb().set(m_kbdc, FUNC(ps2_keyboard_controller_device::aux_data_w)); - // auxiliary port - pc_kbdc_slot_device &aux(PC_KBDC_SLOT(config, "aux", ps2_mice, STR_HLE_PS2_MOUSE)); - aux.set_pc_kbdc_slot(&aux_con); - // keyboard controller PS2_KEYBOARD_CONTROLLER(config, m_kbdc, 12_MHz_XTAL); m_kbdc->kbd_clk().set(kbd_con, FUNC(pc_kbdc_device::clock_write_from_mb)); @@ -121,7 +113,7 @@ void ioc2_device::device_add_mconfig(machine_config &config) m_kbdc->kbd_irq().set(kbdc_irq, FUNC(input_merger_device::in_w<0>)); m_kbdc->aux_irq().set(kbdc_irq, FUNC(input_merger_device::in_w<1>)); - PIT8254(config, m_pit, 0); + PIT8254(config, m_pit); m_pit->set_clk<0>(0); m_pit->set_clk<1>(0); m_pit->set_clk<2>(1000000);