mirror of
https://github.com/holub/mame
synced 2025-04-25 17:56:43 +03:00
Make Sun keyboard port its own bus [Vas Crabb]
This commit is contained in:
parent
9711a68c54
commit
19ce9fd41a
@ -1662,8 +1662,6 @@ if (BUSES["RS232"]~=null) then
|
||||
MAME_DIR .. "src/devices/bus/rs232/pty.h",
|
||||
MAME_DIR .. "src/devices/bus/rs232/ser_mouse.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rs232/ser_mouse.h",
|
||||
MAME_DIR .. "src/devices/bus/rs232/sparckbd.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rs232/sparckbd.h",
|
||||
MAME_DIR .. "src/devices/bus/rs232/terminal.cpp",
|
||||
MAME_DIR .. "src/devices/bus/rs232/terminal.h",
|
||||
MAME_DIR .. "src/devices/bus/rs232/xvd701.cpp",
|
||||
@ -2575,6 +2573,20 @@ if (BUSES["ZORRO"]~=null) then
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/sunkbd/sunkbd.h,BUSES["SUNKBD"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (BUSES["SUNKBD"]~=null) then
|
||||
files {
|
||||
MAME_DIR .. "src/devices/bus/sunkbd/sparckbd.cpp",
|
||||
MAME_DIR .. "src/devices/bus/sunkbd/sparckbd.h",
|
||||
MAME_DIR .. "src/devices/bus/sunkbd/sunkbd.cpp",
|
||||
MAME_DIR .. "src/devices/bus/sunkbd/sunkbd.h",
|
||||
}
|
||||
end
|
||||
|
||||
---------------------------------------------------
|
||||
--
|
||||
--@src/devices/bus/ql/exp.h,BUSES["QL"] = true
|
||||
|
@ -677,6 +677,7 @@ BUSES["SMS_EXP"] = true
|
||||
BUSES["SNES"] = true
|
||||
BUSES["SNES_CTRL"] = true
|
||||
BUSES["SPC1000"] = true
|
||||
BUSES["SUNKBD"] = true
|
||||
BUSES["SVI_EXPANDER"] = true
|
||||
BUSES["SVI_SLOT"] = true
|
||||
BUSES["TI99PEB"] = true
|
||||
|
@ -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);
|
@ -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
|
87
src/devices/bus/sunkbd/sunkbd.cpp
Normal file
87
src/devices/bus/sunkbd/sunkbd.cpp
Normal file
@ -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
|
79
src/devices/bus/sunkbd/sunkbd.h
Normal file
79
src/devices/bus/sunkbd/sunkbd.h
Normal file
@ -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
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user