summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/dmv/k801.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/dmv/k801.cpp')
-rw-r--r--src/devices/bus/dmv/k801.cpp280
1 files changed, 280 insertions, 0 deletions
diff --git a/src/devices/bus/dmv/k801.cpp b/src/devices/bus/dmv/k801.cpp
new file mode 100644
index 00000000000..b091d117088
--- /dev/null
+++ b/src/devices/bus/dmv/k801.cpp
@@ -0,0 +1,280 @@
+// license:BSD-3-Clause
+// copyright-holders:Sandro Ronco
+/***************************************************************************
+
+ K801 RS-232 Switchable Interface
+ K211 RS-232 Communications Interface
+ K212 RS-232 Printer Interface
+ K213 RS-232 Plotter Interface
+
+ K211, K212 and K213 have same board, but different cables.
+ K801 uses a 2661 instead of the 2651 and has 4 switches for
+ select the IFSEL.
+
+***************************************************************************/
+
+#include "emu.h"
+#include "k801.h"
+
+/***************************************************************************
+ IMPLEMENTATION
+***************************************************************************/
+
+
+static MACHINE_CONFIG_FRAGMENT( dmv_k801 )
+ MCFG_DEVICE_ADD("epci", MC2661, XTAL_5_0688MHz)
+ MCFG_MC2661_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd))
+ MCFG_MC2661_RTS_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_rts))
+ MCFG_MC2661_DTR_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_dtr))
+ MCFG_MC2661_RXRDY_HANDLER(WRITELINE(dmv_k801_device, epci_irq_w))
+ MCFG_MC2661_TXRDY_HANDLER(WRITELINE(dmv_k801_device, epci_irq_w))
+
+ MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "printer")
+ MCFG_RS232_RXD_HANDLER(DEVWRITELINE("epci", mc2661_device, rx_w))
+ MCFG_RS232_DCD_HANDLER(DEVWRITELINE("epci", mc2661_device, dcd_w))
+ MCFG_RS232_DSR_HANDLER(DEVWRITELINE("epci", mc2661_device, dsr_w))
+ MCFG_RS232_CTS_HANDLER(DEVWRITELINE("epci", mc2661_device, cts_w))
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_FRAGMENT( dmv_k211 )
+ MCFG_FRAGMENT_ADD( dmv_k801 )
+
+ MCFG_DEVICE_MODIFY("rs232")
+ MCFG_SLOT_DEFAULT_OPTION("null_modem")
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_FRAGMENT( dmv_k212 )
+ MCFG_FRAGMENT_ADD( dmv_k801 )
+
+ MCFG_DEVICE_MODIFY("rs232")
+ MCFG_SLOT_DEFAULT_OPTION("printer")
+MACHINE_CONFIG_END
+
+static MACHINE_CONFIG_FRAGMENT( dmv_k213 )
+ MCFG_FRAGMENT_ADD( dmv_k801 )
+
+ MCFG_DEVICE_MODIFY("rs232")
+ MCFG_SLOT_DEFAULT_OPTION(NULL)
+MACHINE_CONFIG_END
+
+static INPUT_PORTS_START( dmv_k801 )
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x0f, 0x00, "K801 IFSEL" ) PORT_DIPLOCATION("S:!4,S:!3,S:!2,S:!1")
+ PORT_DIPSETTING( 0x00, "0A" )
+ PORT_DIPSETTING( 0x01, "0B" )
+ PORT_DIPSETTING( 0x02, "1A" )
+ PORT_DIPSETTING( 0x03, "1B" )
+ PORT_DIPSETTING( 0x04, "2A" )
+ PORT_DIPSETTING( 0x05, "2B" )
+ PORT_DIPSETTING( 0x06, "3A" )
+ PORT_DIPSETTING( 0x07, "3B" )
+ PORT_DIPSETTING( 0x08, "4A" )
+ PORT_DIPSETTING( 0x09, "4B" )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( dmv_k211 )
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x03, 0x02, "K211 Jumpers" ) PORT_DIPLOCATION("J:1,J:2")
+ PORT_DIPSETTING( 0x01, "IFSEL 0" )
+ PORT_DIPSETTING( 0x02, "IFSEL 1" )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( dmv_k212 )
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x03, 0x01, "K212 Jumpers" ) PORT_DIPLOCATION("J:1,J:2")
+ PORT_DIPSETTING( 0x01, "IFSEL 0" )
+ PORT_DIPSETTING( 0x02, "IFSEL 1" )
+INPUT_PORTS_END
+
+static INPUT_PORTS_START( dmv_k213 )
+ PORT_START("DSW")
+ PORT_DIPNAME( 0x03, 0x01, "K213 Jumpers" ) PORT_DIPLOCATION("J:1,J:2")
+ PORT_DIPSETTING( 0x01, "IFSEL 0" )
+ PORT_DIPSETTING( 0x02, "IFSEL 1" )
+INPUT_PORTS_END
+
+
+//**************************************************************************
+// GLOBAL VARIABLES
+//**************************************************************************
+
+const device_type DMV_K801 = &device_creator<dmv_k801_device>;
+const device_type DMV_K211 = &device_creator<dmv_k211_device>;
+const device_type DMV_K212 = &device_creator<dmv_k212_device>;
+const device_type DMV_K213 = &device_creator<dmv_k213_device>;
+
+//**************************************************************************
+// LIVE DEVICE
+//**************************************************************************
+
+//-------------------------------------------------
+// dmv_k801_device - constructor
+//-------------------------------------------------
+
+dmv_k801_device::dmv_k801_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, DMV_K801, "K801 RS-232 Switchable Interface", tag, owner, clock, "dmv_k801", __FILE__),
+ device_dmvslot_interface( mconfig, *this ),
+ m_epci(*this, "epci"),
+ m_dsw(*this, "DSW")
+{
+}
+
+dmv_k801_device::dmv_k801_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
+ : device_t(mconfig, type, name, tag, owner, clock, shortname, source),
+ device_dmvslot_interface( mconfig, *this ),
+ m_epci(*this, "epci"),
+ m_dsw(*this, "DSW")
+{
+}
+
+//-------------------------------------------------
+// dmv_k211_device - constructor
+//-------------------------------------------------
+
+dmv_k211_device::dmv_k211_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : dmv_k801_device(mconfig, DMV_K211, "K211 RS-232 Communications Interface", tag, owner, clock, "dmv_k211", __FILE__)
+{
+}
+
+
+dmv_k211_device::dmv_k211_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
+ : dmv_k801_device(mconfig, type, name, tag, owner, clock, shortname, source)
+{
+}
+
+//-------------------------------------------------
+// dmv_k212_device - constructor
+//-------------------------------------------------
+
+dmv_k212_device::dmv_k212_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : dmv_k211_device(mconfig, DMV_K212, "K212 RS-232 Printer Interface", tag, owner, clock, "dmv_k212", __FILE__)
+{
+}
+
+//-------------------------------------------------
+// dmv_k213_device - constructor
+//-------------------------------------------------
+
+dmv_k213_device::dmv_k213_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : dmv_k211_device(mconfig, DMV_K213, "K213 RS-232 Plotter Interface", tag, owner, clock, "dmv_k213", __FILE__)
+{
+}
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void dmv_k801_device::device_start()
+{
+ m_bus = static_cast<dmvcart_slot_device*>(owner());
+}
+
+//-------------------------------------------------
+// device_reset - device-specific reset
+//-------------------------------------------------
+
+void dmv_k801_device::device_reset()
+{
+}
+
+//-------------------------------------------------
+// machine_config_additions - device-specific
+// machine configurations
+//-------------------------------------------------
+
+machine_config_constructor dmv_k801_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( dmv_k801 );
+}
+
+machine_config_constructor dmv_k211_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( dmv_k211 );
+}
+
+machine_config_constructor dmv_k212_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( dmv_k212 );
+}
+
+machine_config_constructor dmv_k213_device::device_mconfig_additions() const
+{
+ return MACHINE_CONFIG_NAME( dmv_k213 );
+}
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor dmv_k801_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( dmv_k801 );
+}
+
+ioport_constructor dmv_k211_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( dmv_k211 );
+}
+
+ioport_constructor dmv_k212_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( dmv_k212 );
+}
+
+ioport_constructor dmv_k213_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME( dmv_k213 );
+}
+
+WRITE_LINE_MEMBER(dmv_k801_device::epci_irq_w)
+{
+ m_bus->m_out_irq_cb(state);
+}
+
+void dmv_k801_device::io_read(address_space &space, int ifsel, offs_t offset, UINT8 &data)
+{
+ UINT8 dsw = m_dsw->read() & 0x0f;
+ if ((dsw >> 1) == ifsel && BIT(offset, 3) == BIT(dsw, 0))
+ {
+ if (offset & 0x04)
+ m_epci->write(space, offset & 0x03, data);
+ else
+ data = m_epci->read(space, offset & 0x03);
+ }
+}
+
+void dmv_k801_device::io_write(address_space &space, int ifsel, offs_t offset, UINT8 data)
+{
+ UINT8 dsw = m_dsw->read() & 0x0f;
+ if ((dsw >> 1) == ifsel && BIT(offset, 3) == BIT(dsw, 0))
+ {
+ if (offset & 0x04)
+ m_epci->write(space, offset & 0x03, data);
+ else
+ data = m_epci->read(space, offset & 0x03);
+ }
+}
+
+void dmv_k211_device::io_read(address_space &space, int ifsel, offs_t offset, UINT8 &data)
+{
+ UINT8 jumpers = m_dsw->read() & 0x03;
+ if ((BIT(jumpers, 0) && ifsel == 0) || (BIT(jumpers, 1) && ifsel == 1))
+ {
+ if (offset & 0x04)
+ m_epci->write(space, offset & 0x03, data);
+ else
+ data = m_epci->read(space, offset & 0x03);
+ }
+}
+
+void dmv_k211_device::io_write(address_space &space, int ifsel, offs_t offset, UINT8 data)
+{
+ UINT8 jumpers = m_dsw->read() & 0x03;
+ if ((BIT(jumpers, 0) && ifsel == 0) || (BIT(jumpers, 1) && ifsel == 1))
+ {
+ if (offset & 0x04)
+ m_epci->write(space, offset & 0x03, data);
+ else
+ data = m_epci->read(space, offset & 0x03);
+ }
+}