summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/rs232/heath_h19.cpp
blob: 8dc79de65a5d75912390d300d5a002936f430b6c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// license:BSD-3-Clause
// copyright-holders:Mark Garlanger
/******************************************************************************

    Heath H19 Terminal(Serial interface)

******************************************************************************/

#include "emu.h"
#include "heath_h19.h"

#include "bus/heathzenith/h19/tlb.h"


namespace {

class serial_heath_h19_device : public device_t, public device_rs232_port_interface
{
public:
	serial_heath_h19_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
		: device_t(mconfig, SERIAL_TERMINAL_H19, tag, owner, clock)
		, device_rs232_port_interface(mconfig, *this)
		, m_tlbc(*this, "tlbc")
	{
	}

	virtual void input_txd(int state) override { m_tlbc->serial_in_w(state); }
	virtual void input_rts(int state) override { m_tlbc->cts_in_w(state); }
	virtual void input_dtr(int state) override { m_tlbc->dsr_in_w(state); }

protected:

	virtual void device_start() override ATTR_COLD { }
	virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;

private:
	required_device<heath_tlb_connector> m_tlbc;

	static void tlb_options(device_slot_interface &device);
};

void serial_heath_h19_device::tlb_options(device_slot_interface &device)
{
	device.option_add("heath",      HEATH_TLB);
	device.option_add("gp19",       HEATH_GP19);
	device.option_add("imaginator", HEATH_IMAGINATOR);
	device.option_add("super19",    HEATH_SUPER19);
	device.option_add("superset",   HEATH_SUPERSET);
	device.option_add("ultrarom",   HEATH_ULTRA);
	device.option_add("watzman",    HEATH_WATZ);
}

void serial_heath_h19_device::device_add_mconfig(machine_config &config)
{
	HEATH_TLB_CONNECTOR(config, m_tlbc, tlb_options, "heath");
	m_tlbc->serial_data_callback().set(FUNC(serial_heath_h19_device::output_rxd));
	m_tlbc->rts_callback().set(FUNC(serial_heath_h19_device::output_cts));
	m_tlbc->dtr_callback().set(FUNC(serial_heath_h19_device::input_dtr));
}

} // anonymous namespace


DEFINE_DEVICE_TYPE_PRIVATE(SERIAL_TERMINAL_H19, device_rs232_port_interface, serial_heath_h19_device, "serial_heath_h19", "Heath H19 Terminal (Serial Port)")