summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/devices/bus/sunkbd/sparckbd.cpp (renamed from src/devices/bus/rs232/sparckbd.cpp)8
-rw-r--r--src/devices/bus/sunkbd/sparckbd.h (renamed from src/devices/bus/rs232/sparckbd.h)10
-rw-r--r--src/devices/bus/sunkbd/sunkbd.cpp87
-rw-r--r--src/devices/bus/sunkbd/sunkbd.h79
-rw-r--r--src/mame/drivers/sun4.cpp19
5 files changed, 180 insertions, 23 deletions
diff --git a/src/devices/bus/rs232/sparckbd.cpp b/src/devices/bus/sunkbd/sparckbd.cpp
index 21e570cb189..d9c8c29c732 100644
--- a/src/devices/bus/rs232/sparckbd.cpp
+++ b/src/devices/bus/sunkbd/sparckbd.cpp
@@ -296,7 +296,7 @@ sparc_keyboard_device::sparc_keyboard_device(
char const *source)
: device_t(mconfig, type, name, tag, owner, clock, shortname, source)
, device_serial_interface(mconfig, *this)
- , device_rs232_port_interface(mconfig, *this)
+ , device_sun_keyboard_port_interface(mconfig, *this)
, m_scan_timer(nullptr)
, m_click_timer(nullptr)
, m_dips(*this, "DIP")
@@ -372,12 +372,8 @@ void sparc_keyboard_device::device_reset()
receive_register_reset();
transmit_register_reset();
- // set device_rs232_port_interface lines - note that only RxD is physically present
+ // set device_sun_keyboard_port_interface lines
output_rxd(1);
- output_dcd(0);
- output_dsr(0);
- output_ri(0);
- output_cts(0);
// send reset response
send_byte(0xffU);
diff --git a/src/devices/bus/rs232/sparckbd.h b/src/devices/bus/sunkbd/sparckbd.h
index cbe22d941f0..2247e7b9d18 100644
--- a/src/devices/bus/rs232/sparckbd.h
+++ b/src/devices/bus/sunkbd/sparckbd.h
@@ -1,15 +1,15 @@
// license:BSD-3-Clause
// copyright-holders:Vas Crabb
-#ifndef MAME_DEVICES_RS232_SPARCKBD_H
-#define MAME_DEVICES_RS232_SPARCKBD_H
+#ifndef MAME_DEVICES_SUNKBD_SPARCKBD_H
+#define MAME_DEVICES_SUNKBD_SPARCKBD_H
#pragma once
-#include "rs232.h"
+#include "sunkbd.h"
#include "sound/beep.h"
-class sparc_keyboard_device : public device_t, public device_serial_interface, public device_rs232_port_interface
+class sparc_keyboard_device : public device_t, public device_serial_interface, public device_sun_keyboard_port_interface
{
public:
sparc_keyboard_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock);
@@ -80,4 +80,4 @@ private:
extern const device_type SPARC_KEYBOARD;
-#endif // MAME_DEVICES_RS232_SPARCKBD_H
+#endif // MAME_DEVICES_SUNKBD_SPARCKBD_H
diff --git a/src/devices/bus/sunkbd/sunkbd.cpp b/src/devices/bus/sunkbd/sunkbd.cpp
new file mode 100644
index 00000000000..745a63cacf0
--- /dev/null
+++ b/src/devices/bus/sunkbd/sunkbd.cpp
@@ -0,0 +1,87 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+
+#include "sunkbd.h"
+
+
+device_type const SUNKBD_PORT = &device_creator<sun_keyboard_port_device>;
+
+
+sun_keyboard_port_device::sun_keyboard_port_device(
+ machine_config const &mconfig,
+ char const *tag,
+ device_t *owner,
+ UINT32 clock)
+ : sun_keyboard_port_device(mconfig, SUNKBD_PORT, "Sun Keyboard Port", tag, owner, clock, "sunkbd", __FILE__)
+{
+}
+
+
+sun_keyboard_port_device::sun_keyboard_port_device(
+ machine_config const &mconfig,
+ device_type type,
+ char const *name,
+ char const *tag,
+ device_t *owner,
+ UINT32 clock,
+ char const *shortname,
+ char const *source)
+ : device_t(mconfig, type, name, tag, owner, clock, shortname, source)
+ , device_slot_interface(mconfig, *this)
+ , m_rxd(0)
+ , m_rxd_handler(*this)
+ , m_dev(nullptr)
+{
+}
+
+
+sun_keyboard_port_device::~sun_keyboard_port_device()
+{
+}
+
+
+void sun_keyboard_port_device::device_config_complete()
+{
+ m_dev = dynamic_cast<device_sun_keyboard_port_interface *>(get_card_device());
+}
+
+
+void sun_keyboard_port_device::device_start()
+{
+ m_rxd_handler.resolve_safe();
+
+ save_item(NAME(m_rxd));
+
+ m_rxd = 1;
+
+ m_rxd_handler(m_rxd);
+}
+
+
+WRITE_LINE_MEMBER( sun_keyboard_port_device::write_txd )
+{
+ if(m_dev)
+ m_dev->input_txd(state);
+}
+
+
+
+device_sun_keyboard_port_interface::device_sun_keyboard_port_interface(machine_config const &mconfig, device_t &device)
+ : device_slot_card_interface(mconfig, device)
+ , m_port(dynamic_cast<sun_keyboard_port_device *>(device.owner()))
+{
+}
+
+
+device_sun_keyboard_port_interface::~device_sun_keyboard_port_interface()
+{
+}
+
+
+
+#include "sparckbd.h"
+
+
+SLOT_INTERFACE_START( default_sun_keyboard_devices )
+ SLOT_INTERFACE("sparckbd", SPARC_KEYBOARD)
+SLOT_INTERFACE_END
diff --git a/src/devices/bus/sunkbd/sunkbd.h b/src/devices/bus/sunkbd/sunkbd.h
new file mode 100644
index 00000000000..006d914dff0
--- /dev/null
+++ b/src/devices/bus/sunkbd/sunkbd.h
@@ -0,0 +1,79 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+#ifndef MAME_DEVICES_SUNKBD_SUNKBD_H
+#define MAME_DEVICES_SUNKBD_SUNKBD_H
+
+#pragma once
+
+#include "emu.h"
+
+
+#define MCFG_SUNKBD_PORT_ADD(tag, slot_intf, def_slot) \
+ MCFG_DEVICE_ADD(tag, SUNKBD_PORT, 0) \
+ MCFG_DEVICE_SLOT_INTERFACE(slot_intf, def_slot, false)
+
+#define MCFG_SUNKBD_RXD_HANDLER(cb) \
+ devcb = &sun_keyboard_port_device::set_rxd_handler(*device, DEVCB_##cb);
+
+
+class device_sun_keyboard_port_interface;
+
+
+class sun_keyboard_port_device : public device_t, public device_slot_interface
+{
+ friend class device_sun_keyboard_port_interface;
+
+public:
+ sun_keyboard_port_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock);
+ sun_keyboard_port_device(machine_config const &mconfig, device_type type, char const *name, char const *tag, device_t *owner, UINT32 clock, char const *shortname, char const *source);
+ virtual ~sun_keyboard_port_device();
+
+ // static configuration helpers
+ template <class Object> static devcb_base &set_rxd_handler(device_t &device, Object object) { return downcast<sun_keyboard_port_device &>(device).m_rxd_handler.set_callback(object); }
+
+ DECLARE_WRITE_LINE_MEMBER( write_txd );
+
+ DECLARE_READ_LINE_MEMBER( rxd_r ) { return m_rxd; }
+
+protected:
+ virtual void device_start() override;
+ virtual void device_config_complete() override;
+
+ int m_rxd;
+
+ devcb_write_line m_rxd_handler;
+
+private:
+ device_sun_keyboard_port_interface *m_dev;
+};
+
+
+class device_sun_keyboard_port_interface : public device_slot_card_interface
+{
+ friend class sun_keyboard_port_device;
+
+public:
+ device_sun_keyboard_port_interface(machine_config const &mconfig, device_t &device);
+ virtual ~device_sun_keyboard_port_interface() override;
+
+ virtual DECLARE_WRITE_LINE_MEMBER( input_txd ) { }
+
+ DECLARE_WRITE_LINE_MEMBER( output_rxd ) { m_port->m_rxd = state; m_port->m_rxd_handler(state); }
+
+protected:
+ sun_keyboard_port_device *m_port;
+
+ static constexpr int START_BIT_COUNT = 1;
+ static constexpr int DATA_BIT_COUNT = 8;
+ static constexpr device_serial_interface::parity_t PARITY = device_serial_interface::PARITY_NONE;
+ static constexpr device_serial_interface::stop_bits_t STOP_BITS = device_serial_interface::STOP_BITS_1;
+ static constexpr int BAUD = 1'200;
+};
+
+
+extern device_type const SUNKBD_PORT;
+
+
+SLOT_INTERFACE_EXTERN( default_sun_keyboard_devices );
+
+#endif // MAME_DEVICES_SUNKBD_SUNKBD_H
diff --git a/src/mame/drivers/sun4.cpp b/src/mame/drivers/sun4.cpp
index 1487420fdb1..e46538582af 100644
--- a/src/mame/drivers/sun4.cpp
+++ b/src/mame/drivers/sun4.cpp
@@ -417,7 +417,7 @@
#include "machine/bankdev.h"
#include "machine/nvram.h"
#include "bus/rs232/rs232.h"
-#include "bus/rs232/sparckbd.h"
+#include "bus/sunkbd/sunkbd.h"
#include "machine/timekpr.h"
#include "machine/upd765.h"
#include "formats/pc_dsk.h"
@@ -485,11 +485,6 @@ const sparc_disassembler::asi_desc_map::value_type sun4c_asi_desc[] = {
{ 0x0d, { nullptr, "Flush Cache (Page)" } },
{ 0x0e, { nullptr, "Flush Cache (Context)" } }
};
-
-// TODO: put this somewhere common when sun4m, sun4d, sun4u, etc. are split out
-SLOT_INTERFACE_START(keyboard_devices)
- SLOT_INTERFACE("keyboard", SPARC_KEYBOARD)
-SLOT_INTERFACE_END
}
enum
@@ -1609,10 +1604,10 @@ static MACHINE_CONFIG_START( sun4, sun4_state )
// Keyboard/mouse
MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
MCFG_Z80SCC_OUT_INT_CB(WRITELINE(sun4_state, scc1_int))
- MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, rs232_port_device, write_txd))
+ MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, sun_keyboard_port_device, write_txd))
- MCFG_RS232_PORT_ADD(KEYBOARD_TAG, keyboard_devices, "keyboard")
- MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
+ MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "sparckbd")
+ MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
// RS232 serial ports
MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
@@ -1663,10 +1658,10 @@ static MACHINE_CONFIG_START( sun4c, sun4_state )
// Keyboard/mouse
MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
MCFG_Z80SCC_OUT_INT_CB(WRITELINE(sun4_state, scc1_int))
- MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, rs232_port_device, write_txd))
+ MCFG_Z80SCC_OUT_TXDA_CB(DEVWRITELINE(KEYBOARD_TAG, sun_keyboard_port_device, write_txd))
- MCFG_RS232_PORT_ADD(KEYBOARD_TAG, keyboard_devices, "keyboard")
- MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
+ MCFG_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "sparckbd")
+ MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
// RS232 serial ports
MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)