summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author tim lindner <tlindner@macmess.org>2021-01-23 21:06:49 -0800
committer GitHub <noreply@github.com>2021-01-24 16:06:49 +1100
commit4214093a924f62b8d99210716e523f34bc108ca6 (patch)
tree142aa061ccc290aaf3b10ef6350caaae303807d1
parentd28aa01821b749e6128244e1f0b0a0bbab6227c9 (diff)
bus/rs232: Add generic Radio Shack printer option (generates break condition when online). (#7652)
-rw-r--r--src/devices/bus/rs232/printer.cpp29
-rw-r--r--src/devices/bus/rs232/printer.h9
-rw-r--r--src/devices/bus/rs232/rs232.cpp7
-rw-r--r--src/mame/drivers/coco12.cpp6
-rw-r--r--src/mame/drivers/coco3.cpp6
5 files changed, 46 insertions, 11 deletions
diff --git a/src/devices/bus/rs232/printer.cpp b/src/devices/bus/rs232/printer.cpp
index 18c29759131..4309463fd17 100644
--- a/src/devices/bus/rs232/printer.cpp
+++ b/src/devices/bus/rs232/printer.cpp
@@ -1,12 +1,30 @@
// license:BSD-3-Clause
// copyright-holders:smf
+
+/**************************************************************************
+
+ Simple printer emulation
+
+ This allows capturing the byte stream to a file.
+
+ Radio Shack printers differ in that the RX line is used as a
+ busy signal.
+
+**************************************************************************/
+
#include "emu.h"
#include "printer.h"
serial_printer_device::serial_printer_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
- : device_t(mconfig, SERIAL_PRINTER, tag, owner, clock),
+ : serial_printer_device(mconfig, SERIAL_PRINTER, tag, owner, clock)
+{
+}
+
+serial_printer_device::serial_printer_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
+ : device_t(mconfig, type, tag, owner, clock),
device_serial_interface(mconfig, *this),
device_rs232_port_interface(mconfig, *this),
+ m_initial_rx_state(1),
m_printer(*this, "printer"),
m_rs232_rxbaud(*this, "RS232_RXBAUD"),
m_rs232_startbits(*this, "RS232_STARTBITS"),
@@ -52,7 +70,7 @@ WRITE_LINE_MEMBER(serial_printer_device::update_serial)
set_rcv_rate(rxbaud);
// TODO: make this configurable
- output_rxd(1);
+ output_rxd(m_initial_rx_state);
output_dcd(0);
output_dsr(0);
output_cts(0);
@@ -74,4 +92,11 @@ void serial_printer_device::rcv_complete()
m_printer->output(get_received_char());
}
+radio_shack_serial_printer_device::radio_shack_serial_printer_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
+ : serial_printer_device(mconfig, RADIO_SHACK_SERIAL_PRINTER, tag, owner, clock)
+{
+ m_initial_rx_state = 0;
+}
+
DEFINE_DEVICE_TYPE(SERIAL_PRINTER, serial_printer_device, "serial_printer", "Serial Printer")
+DEFINE_DEVICE_TYPE(RADIO_SHACK_SERIAL_PRINTER, radio_shack_serial_printer_device, "rs_serial_printer", "Radio Shack Serial Printer")
diff --git a/src/devices/bus/rs232/printer.h b/src/devices/bus/rs232/printer.h
index 8cab55e7344..973e46dc768 100644
--- a/src/devices/bus/rs232/printer.h
+++ b/src/devices/bus/rs232/printer.h
@@ -21,12 +21,14 @@ public:
DECLARE_WRITE_LINE_MEMBER(update_serial);
protected:
+ serial_printer_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_add_mconfig(machine_config &config) override;
virtual ioport_constructor device_input_ports() const override;
virtual void device_start() override;
virtual void device_reset() override;
virtual void rcv_complete() override;
+ int m_initial_rx_state;
private:
DECLARE_WRITE_LINE_MEMBER(printer_online);
@@ -40,6 +42,13 @@ private:
required_ioport m_rs232_stopbits;
};
+class radio_shack_serial_printer_device : public serial_printer_device
+{
+public:
+ radio_shack_serial_printer_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+};
+
DECLARE_DEVICE_TYPE(SERIAL_PRINTER, serial_printer_device)
+DECLARE_DEVICE_TYPE(RADIO_SHACK_SERIAL_PRINTER, radio_shack_serial_printer_device)
#endif // MAME_BUS_RS232_PRINTER_H
diff --git a/src/devices/bus/rs232/rs232.cpp b/src/devices/bus/rs232/rs232.cpp
index 77b79132de0..d55628d64c4 100644
--- a/src/devices/bus/rs232/rs232.cpp
+++ b/src/devices/bus/rs232/rs232.cpp
@@ -174,14 +174,15 @@ device_rs232_port_interface::~device_rs232_port_interface()
void default_rs232_devices(device_slot_interface &device)
{
+ device.option_add("dec_loopback", DEC_RS232_LOOPBACK);
+ device.option_add("ie15", SERIAL_TERMINAL_IE15);
device.option_add("keyboard", SERIAL_KEYBOARD);
device.option_add("loopback", RS232_LOOPBACK);
- device.option_add("dec_loopback", DEC_RS232_LOOPBACK);
device.option_add("null_modem", NULL_MODEM);
device.option_add("printer", SERIAL_PRINTER);
- device.option_add("terminal", SERIAL_TERMINAL);
device.option_add("pty", PSEUDO_TERMINAL);
+ device.option_add("rs_printer", RADIO_SHACK_SERIAL_PRINTER);
device.option_add("sunkbd", SUN_KBD_ADAPTOR);
- device.option_add("ie15", SERIAL_TERMINAL_IE15);
device.option_add("swtpc8212", SERIAL_TERMINAL_SWTPC8212);
+ device.option_add("terminal", SERIAL_TERMINAL);
}
diff --git a/src/mame/drivers/coco12.cpp b/src/mame/drivers/coco12.cpp
index 5233d3e6948..69daabe838a 100644
--- a/src/mame/drivers/coco12.cpp
+++ b/src/mame/drivers/coco12.cpp
@@ -446,7 +446,7 @@ void coco_state::coco_floating(machine_config &config)
// DEVICE_INPUT_DEFAULTS_START( printer )
//-------------------------------------------------
-static DEVICE_INPUT_DEFAULTS_START( printer )
+static DEVICE_INPUT_DEFAULTS_START( rs_printer )
DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_600 )
DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 )
DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_8 )
@@ -509,9 +509,9 @@ void coco12_state::coco(machine_config &config)
m_cassette->set_formats(coco_cassette_formats);
m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED);
- rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, "printer"));
+ rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, "rs_printer"));
rs232.dcd_handler().set(PIA1_TAG, FUNC(pia6821_device::ca1_w));
- rs232.set_option_device_input_defaults("printer", DEVICE_INPUT_DEFAULTS_NAME(printer));
+ rs232.set_option_device_input_defaults("rs_printer", DEVICE_INPUT_DEFAULTS_NAME(rs_printer));
cococart_slot_device &cartslot(COCOCART_SLOT(config, CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), coco_cart, "pak"));
cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded
diff --git a/src/mame/drivers/coco3.cpp b/src/mame/drivers/coco3.cpp
index 44e0facd3dc..c00d40c0968 100644
--- a/src/mame/drivers/coco3.cpp
+++ b/src/mame/drivers/coco3.cpp
@@ -239,7 +239,7 @@ static INPUT_PORTS_START( coco3dw )
PORT_INCLUDE( coco_beckerport_dw )
INPUT_PORTS_END
-static DEVICE_INPUT_DEFAULTS_START( printer )
+static DEVICE_INPUT_DEFAULTS_START( rs_printer )
DEVICE_INPUT_DEFAULTS( "RS232_RXBAUD", 0xff, RS232_BAUD_600 )
DEVICE_INPUT_DEFAULTS( "RS232_STARTBITS", 0xff, RS232_STARTBITS_1 )
DEVICE_INPUT_DEFAULTS( "RS232_DATABITS", 0xff, RS232_DATABITS_8 )
@@ -293,9 +293,9 @@ void coco3_state::coco3(machine_config &config)
m_cassette->set_formats(coco_cassette_formats);
m_cassette->set_default_state(CASSETTE_PLAY | CASSETTE_MOTOR_DISABLED | CASSETTE_SPEAKER_ENABLED);
- rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, "printer"));
+ rs232_port_device &rs232(RS232_PORT(config, RS232_TAG, default_rs232_devices, "rs_printer"));
rs232.dcd_handler().set(PIA1_TAG, FUNC(pia6821_device::ca1_w));
- rs232.set_option_device_input_defaults("printer", DEVICE_INPUT_DEFAULTS_NAME(printer));
+ rs232.set_option_device_input_defaults("rs_printer", DEVICE_INPUT_DEFAULTS_NAME(rs_printer));
cococart_slot_device &cartslot(COCOCART_SLOT(config, CARTRIDGE_TAG, DERIVED_CLOCK(1, 1), coco_cart, "fdcv11"));
cartslot.cart_callback().set([this] (int state) { cart_w(state != 0); }); // lambda because name is overloaded