mirror of
https://github.com/holub/mame
synced 2025-04-26 02:07:14 +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/pty.h",
|
||||||
MAME_DIR .. "src/devices/bus/rs232/ser_mouse.cpp",
|
MAME_DIR .. "src/devices/bus/rs232/ser_mouse.cpp",
|
||||||
MAME_DIR .. "src/devices/bus/rs232/ser_mouse.h",
|
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.cpp",
|
||||||
MAME_DIR .. "src/devices/bus/rs232/terminal.h",
|
MAME_DIR .. "src/devices/bus/rs232/terminal.h",
|
||||||
MAME_DIR .. "src/devices/bus/rs232/xvd701.cpp",
|
MAME_DIR .. "src/devices/bus/rs232/xvd701.cpp",
|
||||||
@ -2575,6 +2573,20 @@ if (BUSES["ZORRO"]~=null) then
|
|||||||
}
|
}
|
||||||
end
|
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
|
--@src/devices/bus/ql/exp.h,BUSES["QL"] = true
|
||||||
|
@ -677,6 +677,7 @@ BUSES["SMS_EXP"] = true
|
|||||||
BUSES["SNES"] = true
|
BUSES["SNES"] = true
|
||||||
BUSES["SNES_CTRL"] = true
|
BUSES["SNES_CTRL"] = true
|
||||||
BUSES["SPC1000"] = true
|
BUSES["SPC1000"] = true
|
||||||
|
BUSES["SUNKBD"] = true
|
||||||
BUSES["SVI_EXPANDER"] = true
|
BUSES["SVI_EXPANDER"] = true
|
||||||
BUSES["SVI_SLOT"] = true
|
BUSES["SVI_SLOT"] = true
|
||||||
BUSES["TI99PEB"] = true
|
BUSES["TI99PEB"] = true
|
||||||
|
@ -296,7 +296,7 @@ sparc_keyboard_device::sparc_keyboard_device(
|
|||||||
char const *source)
|
char const *source)
|
||||||
: device_t(mconfig, type, name, tag, owner, clock, shortname, source)
|
: device_t(mconfig, type, name, tag, owner, clock, shortname, source)
|
||||||
, device_serial_interface(mconfig, *this)
|
, device_serial_interface(mconfig, *this)
|
||||||
, device_rs232_port_interface(mconfig, *this)
|
, device_sun_keyboard_port_interface(mconfig, *this)
|
||||||
, m_scan_timer(nullptr)
|
, m_scan_timer(nullptr)
|
||||||
, m_click_timer(nullptr)
|
, m_click_timer(nullptr)
|
||||||
, m_dips(*this, "DIP")
|
, m_dips(*this, "DIP")
|
||||||
@ -372,12 +372,8 @@ void sparc_keyboard_device::device_reset()
|
|||||||
receive_register_reset();
|
receive_register_reset();
|
||||||
transmit_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_rxd(1);
|
||||||
output_dcd(0);
|
|
||||||
output_dsr(0);
|
|
||||||
output_ri(0);
|
|
||||||
output_cts(0);
|
|
||||||
|
|
||||||
// send reset response
|
// send reset response
|
||||||
send_byte(0xffU);
|
send_byte(0xffU);
|
@ -1,15 +1,15 @@
|
|||||||
// license:BSD-3-Clause
|
// license:BSD-3-Clause
|
||||||
// copyright-holders:Vas Crabb
|
// copyright-holders:Vas Crabb
|
||||||
#ifndef MAME_DEVICES_RS232_SPARCKBD_H
|
#ifndef MAME_DEVICES_SUNKBD_SPARCKBD_H
|
||||||
#define MAME_DEVICES_RS232_SPARCKBD_H
|
#define MAME_DEVICES_SUNKBD_SPARCKBD_H
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "rs232.h"
|
#include "sunkbd.h"
|
||||||
#include "sound/beep.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:
|
public:
|
||||||
sparc_keyboard_device(machine_config const &mconfig, char const *tag, device_t *owner, UINT32 clock);
|
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;
|
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/bankdev.h"
|
||||||
#include "machine/nvram.h"
|
#include "machine/nvram.h"
|
||||||
#include "bus/rs232/rs232.h"
|
#include "bus/rs232/rs232.h"
|
||||||
#include "bus/rs232/sparckbd.h"
|
#include "bus/sunkbd/sunkbd.h"
|
||||||
#include "machine/timekpr.h"
|
#include "machine/timekpr.h"
|
||||||
#include "machine/upd765.h"
|
#include "machine/upd765.h"
|
||||||
#include "formats/pc_dsk.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)" } },
|
{ 0x0d, { nullptr, "Flush Cache (Page)" } },
|
||||||
{ 0x0e, { nullptr, "Flush Cache (Context)" } }
|
{ 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
|
enum
|
||||||
@ -1609,10 +1604,10 @@ static MACHINE_CONFIG_START( sun4, sun4_state )
|
|||||||
// Keyboard/mouse
|
// Keyboard/mouse
|
||||||
MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
|
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_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_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "sparckbd")
|
||||||
MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
|
MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
|
||||||
|
|
||||||
// RS232 serial ports
|
// RS232 serial ports
|
||||||
MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
|
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
|
// Keyboard/mouse
|
||||||
MCFG_SCC8530_ADD(SCC1_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
|
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_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_SUNKBD_PORT_ADD(KEYBOARD_TAG, default_sun_keyboard_devices, "sparckbd")
|
||||||
MCFG_RS232_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
|
MCFG_SUNKBD_RXD_HANDLER(DEVWRITELINE(SCC1_TAG, z80scc_device, rxa_w))
|
||||||
|
|
||||||
// RS232 serial ports
|
// RS232 serial ports
|
||||||
MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
|
MCFG_SCC8530_ADD(SCC2_TAG, XTAL_4_9152MHz, 0, 0, 0, 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user