diff options
Diffstat (limited to 'src/devices/bus/ss50/mps.cpp')
-rw-r--r-- | src/devices/bus/ss50/mps.cpp | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/src/devices/bus/ss50/mps.cpp b/src/devices/bus/ss50/mps.cpp index a7ff13a7555..b7e4157812e 100644 --- a/src/devices/bus/ss50/mps.cpp +++ b/src/devices/bus/ss50/mps.cpp @@ -32,11 +32,13 @@ public: { } + DECLARE_INPUT_CHANGED_MEMBER(cts_route_change); + 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 { } + virtual void device_start() override; // interface-specific overrides virtual u8 register_read(offs_t offset) override; @@ -49,12 +51,13 @@ protected: private: DECLARE_WRITE_LINE_MEMBER(acia_irq_w); - DECLARE_WRITE_LINE_MEMBER(route_cts_r); + DECLARE_WRITE_LINE_MEMBER(route_cts); required_device<acia6850_device> m_acia; required_ioport m_irq_jumper; required_ioport m_rate_jumper; required_ioport m_cts_route; + int m_cts; }; @@ -73,7 +76,7 @@ static INPUT_PORTS_START( mps ) PORT_CONFSETTING(0x0f, "1200") PORT_START("CTS_ROUTE") - PORT_CONFNAME(1, 0, "CTS route") + PORT_CONFNAME(1, 0, "CTS route") PORT_CHANGED_MEMBER(DEVICE_SELF, ss50_mps_device, cts_route_change, 0) PORT_CONFSETTING(0, "Wired low (standard)") PORT_CONFSETTING(1, "Connected through (modified)") @@ -114,10 +117,14 @@ void ss50_mps_device::device_add_mconfig(machine_config &config) rs232_port_device &rs232(RS232_PORT(config, "rs232", default_rs232_devices, "terminal")); rs232.rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd)); - rs232.cts_handler().set(FUNC(ss50_mps_device::route_cts_r)); + rs232.cts_handler().set(FUNC(ss50_mps_device::route_cts)); rs232.set_option_device_input_defaults("terminal", DEVICE_INPUT_DEFAULTS_NAME(terminal)); } +void ss50_mps_device::device_start() +{ + save_item(NAME(m_cts)); +} //------------------------------------------------- // register_read - read from a port register @@ -188,12 +195,21 @@ WRITE_LINE_MEMBER(ss50_mps_device::acia_irq_w) write_irq(state); } -WRITE_LINE_MEMBER(ss50_mps_device::route_cts_r) +WRITE_LINE_MEMBER(ss50_mps_device::route_cts) { if (m_cts_route->read()) - { m_acia->write_cts(state); - } + + // Cache the state, in case the ioport setting changes. + m_cts = state; +} + +INPUT_CHANGED_MEMBER(ss50_mps_device::cts_route_change) +{ + if (newval) + m_acia->write_cts(m_cts); + else + m_acia->write_cts(0); } // device type definition |