summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/ss50/mps.cpp
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2017-12-01 12:47:10 -0500
committer AJR <ajrhacker@users.noreply.github.com>2017-12-01 12:47:10 -0500
commite3f1973246d549cefbd041fbbd51d0f941ad39a7 (patch)
tree99095a66e372a6d8cb1c79fffeab001c331b1f81 /src/devices/bus/ss50/mps.cpp
parent81cee86b3527449ed7deb6c79d92a38ecdae1652 (diff)
ss50/mps: Add jumpers (nw)
Diffstat (limited to 'src/devices/bus/ss50/mps.cpp')
-rw-r--r--src/devices/bus/ss50/mps.cpp91
1 files changed, 85 insertions, 6 deletions
diff --git a/src/devices/bus/ss50/mps.cpp b/src/devices/bus/ss50/mps.cpp
index 89809166274..11b9051063d 100644
--- a/src/devices/bus/ss50/mps.cpp
+++ b/src/devices/bus/ss50/mps.cpp
@@ -4,8 +4,6 @@
SWTPC MP-S Serial Interface
- TODO: Add baud rate selection switch
-
**********************************************************************/
#include "emu.h"
@@ -28,25 +26,62 @@ public:
ss50_mps_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
: device_t(mconfig, SS50_MPS, tag, owner, clock),
ss50_card_interface(mconfig, *this),
- m_acia(*this, "acia")
+ m_acia(*this, "acia"),
+ m_irq_jumper(*this, "IRQ"),
+ m_rate_jumper(*this, "BAUD")
{
}
protected:
// device-specific overrides
+ virtual ioport_constructor device_input_ports() const override;
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override { }
// interface-specific overrides
virtual DECLARE_READ8_MEMBER(register_read) override;
virtual DECLARE_WRITE8_MEMBER(register_write) override;
+ virtual DECLARE_WRITE_LINE_MEMBER(f110_w) override;
+ virtual DECLARE_WRITE_LINE_MEMBER(f150_9600_w) override;
+ virtual DECLARE_WRITE_LINE_MEMBER(f300_w) override;
+ virtual DECLARE_WRITE_LINE_MEMBER(f600_4800_w) override;
virtual DECLARE_WRITE_LINE_MEMBER(f600_1200_w) override;
private:
+ DECLARE_WRITE_LINE_MEMBER(acia_irq_w);
+
required_device<acia6850_device> m_acia;
+ required_ioport m_irq_jumper;
+ required_ioport m_rate_jumper;
};
+static INPUT_PORTS_START( mps )
+ PORT_START("IRQ")
+ PORT_DIPNAME(1, 0, "IRQ")
+ PORT_DIPSETTING(1, DEF_STR(Off))
+ PORT_DIPSETTING(0, DEF_STR(On))
+
+ PORT_START("BAUD")
+ PORT_DIPNAME(0x1f, 0x0f, "Baud Rate")
+ PORT_DIPSETTING(0x1e, "110")
+ PORT_DIPSETTING(0x1d, "150")
+ PORT_DIPSETTING(0x1b, "300")
+ PORT_DIPSETTING(0x17, "600")
+ PORT_DIPSETTING(0x0f, "1200")
+INPUT_PORTS_END
+
+
+//-------------------------------------------------
+// input_ports - device-specific input ports
+//-------------------------------------------------
+
+ioport_constructor ss50_mps_device::device_input_ports() const
+{
+ return INPUT_PORTS_NAME(mps);
+}
+
+
static DEVICE_INPUT_DEFAULTS_START( terminal )
DEVICE_INPUT_DEFAULTS("RS232_RXBAUD", 0xff, RS232_BAUD_1200)
DEVICE_INPUT_DEFAULTS("RS232_TXBAUD", 0xff, RS232_BAUD_1200)
@@ -66,7 +101,7 @@ MACHINE_CONFIG_MEMBER(ss50_mps_device::device_add_mconfig)
MCFG_DEVICE_ADD("acia", ACIA6850, 0)
MCFG_ACIA6850_TXD_HANDLER(DEVWRITELINE("rs232", rs232_port_device, write_txd))
//MCFG_ACIA6850_RTS_HANDLER(WRITELINE(ss50_mps_device, reader_control_w))
- //MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(ss50_mps_device, write_irq))
+ MCFG_ACIA6850_IRQ_HANDLER(WRITELINE(ss50_mps_device, acia_irq_w))
MCFG_RS232_PORT_ADD("rs232", default_rs232_devices, "terminal")
MCFG_RS232_RXD_HANDLER(DEVWRITELINE("acia", acia6850_device, write_rxd))
@@ -92,11 +127,55 @@ WRITE8_MEMBER(ss50_mps_device::register_write)
m_acia->write(space, offset & 1, data);
}
+WRITE_LINE_MEMBER(ss50_mps_device::f110_w)
+{
+ if (!BIT(m_rate_jumper->read(), 0))
+ {
+ m_acia->write_txc(state);
+ m_acia->write_rxc(state);
+ }
+}
+
+WRITE_LINE_MEMBER(ss50_mps_device::f150_9600_w)
+{
+ if (!BIT(m_rate_jumper->read(), 1))
+ {
+ m_acia->write_txc(state);
+ m_acia->write_rxc(state);
+ }
+}
+
+WRITE_LINE_MEMBER(ss50_mps_device::f300_w)
+{
+ if (!BIT(m_rate_jumper->read(), 2))
+ {
+ m_acia->write_txc(state);
+ m_acia->write_rxc(state);
+ }
+}
+
+WRITE_LINE_MEMBER(ss50_mps_device::f600_4800_w)
+{
+ if (!BIT(m_rate_jumper->read(), 3))
+ {
+ m_acia->write_txc(state);
+ m_acia->write_rxc(state);
+ }
+}
WRITE_LINE_MEMBER(ss50_mps_device::f600_1200_w)
{
- m_acia->write_txc(state);
- m_acia->write_rxc(state);
+ if (!BIT(m_rate_jumper->read(), 4))
+ {
+ m_acia->write_txc(state);
+ m_acia->write_rxc(state);
+ }
+}
+
+WRITE_LINE_MEMBER(ss50_mps_device::acia_irq_w)
+{
+ if (!m_irq_jumper->read())
+ write_irq(state);
}