pc_kbdc: Merge "PC KBDC" device with slot connector

This commit is contained in:
AJR 2020-12-22 11:45:44 -05:00
parent 735e7d5b2a
commit a71c44c745
33 changed files with 318 additions and 286 deletions

View File

@ -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")
{
}

View File

@ -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")
{
}

View File

@ -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<device_pc_kbd_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<device_pc_kbd_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();
}

View File

@ -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<device_pc_kbd_interface>
class pc_kbdc_device : public device_t, public device_single_card_slot_interface<device_pc_kbd_interface>
{
public:
// construction/destruction
template <typename T>
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(); }

View File

@ -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;

View File

@ -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<geneve_pal_device> m_pal;
required_device<bus::ti99::peb::peribox_device> m_peribox;
required_device<pc_kbdc_device> m_keyb_conn;
// Emulation-specific: Is the debugger active?
bool m_debug;

View File

@ -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_device>("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_device>("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");
}

View File

@ -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 <typename T> 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<i8255_device> m_ppi8255;
required_device<speaker_sound_device> m_speaker;
required_device<isa8_device> m_isabus;
optional_device<pc_kbdc_device> m_pc_kbdc;
required_device<ram_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

View File

@ -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)
{
}

View File

@ -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<cassette_image_device>("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));

View File

@ -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<isa16_slot_device>("isa1")->set_default_option("vga");
subdevice<isa16_slot_device>("isa1")->set_fixed(true);
subdevice<pc_kbdc_slot_device>("kbd")->set_default_option(STR_KBD_MICROSOFT_NATURAL);
subdevice<pc_kbdc_device>("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<isa16_slot_device>("isa1")->set_default_option("svga_et4k");
subdevice<pc_kbdc_slot_device>("kbd")->set_default_option(STR_KBD_MICROSOFT_NATURAL);
subdevice<pc_kbdc_device>("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<pc_kbdc_slot_device>("kbd")->set_default_option(STR_KBD_MICROSOFT_NATURAL);
subdevice<pc_kbdc_device>("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");

View File

@ -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);

View File

@ -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");
}

View File

@ -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));

View File

@ -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");

View File

@ -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

View File

@ -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");

View File

@ -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);

View File

@ -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");
}

View File

@ -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

View File

@ -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

View File

@ -326,7 +326,7 @@ private:
required_device<mc146818_device> m_rtc;
required_device<z8038_device> m_fio;
required_device<at_keyboard_controller_device> m_kbdc;
required_device<pc_kbdc_slot_device> m_kbd;
required_device<pc_kbdc_device> m_kbd;
required_device<z80scc_device> m_scc;
required_device_array<rs232_port_device, 2> m_tty;
required_device<wd37c65c_device> m_fdc;
@ -410,7 +410,7 @@ private:
required_device<m48t02_device> m_rtc;
required_device<i82072_device> m_fdc;
required_device<at_keyboard_controller_device> m_kbdc;
required_device<pc_kbdc_slot_device> m_kbd;
required_device<pc_kbdc_device> m_kbd;
required_device<speaker_sound_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<INT_KBD>));
// buzzer

View File

@ -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);

View File

@ -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)

View File

@ -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<pc_kbdc_device>("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<i80186_cpu_device &>(*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");

View File

@ -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");

View File

@ -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);

View File

@ -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));

View File

@ -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");

View File

@ -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);

View File

@ -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;

View File

@ -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<at_keyboard_controller_device>("keybc")->kbd_clk(); }
auto kbd_data() { return subdevice<at_keyboard_controller_device>("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<pit8254_device> m_pit8254;
required_device<speaker_sound_device> m_speaker;
required_device<mc146818_device> m_mc146818;
optional_device<at_keyboard_controller_device> m_keybc; // removed in mtouchxl.cpp and vis.cpp
uint8_t m_at_spkrdata;
uint8_t m_pit_out2;
int m_dma_channel;

View File

@ -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);