summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/uts_kbd/uts_kbd.cpp
blob: 5f1cc77eab5a3c80b3f271042da99551d6449343 (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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// license:BSD-3-Clause
// copyright-holders:AJR
/***************************************************************************

    Sperry Univac UTS series keyboard port

    The UTS 20 System Description presents four types of keyboards that
    may be connected to the terminal as auxiliary input devices:
    - Typewriter Keyboard
    - Expanded Typewriter Keyboard
    - Katakana/English Keyboard
    - UTS 400-Format Keyboard

    A Magnetic Stripe Reader which can read ABA or IATA data is another
    device which can be connected to the keyboard input. This apparently
    includes a pass-through keyboard connector.

    Keyboard input is transmitted serially at 9600 baud, using 8 data bits,
    1 stop bit and odd parity. A two-byte sequence is sent for each key,
    with the (non-ASCII) keycode being contained in the second byte. The
    only other active line appears to be a ready signal (assumed to be
    active high), which the terminal drives to synchronize transmissions.
    This might even be a single line driven bidirectionally. There appear
    to be at most four wires attached to the DE-9 connector.

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

#include "emu.h"
#include "bus/uts_kbd/uts_kbd.h"

#include "bus/uts_kbd/extw.h"
#include "bus/uts_kbd/400kbd.h"

//**************************************************************************
//  UTS KEYBOARD PORT DEVICE
//**************************************************************************

DEFINE_DEVICE_TYPE(UTS_KEYBOARD, uts_keyboard_port_device, "uts_kbd", "UTS Keyboard Port")

uts_keyboard_port_device::uts_keyboard_port_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock)
	: device_t(mconfig, UTS_KEYBOARD, tag, owner, clock)
	, device_single_card_slot_interface<device_uts_keyboard_interface>(mconfig, *this)
	, m_rxd_callback(*this)
	, m_kbd(nullptr)
{
}

void uts_keyboard_port_device::device_config_complete()
{
	m_kbd = get_card_device();
}

void uts_keyboard_port_device::device_start()
{
}

//**************************************************************************
//  UTS KEYBOARD INTERFACE
//**************************************************************************

device_uts_keyboard_interface::device_uts_keyboard_interface(const machine_config &mconfig, device_t &device)
	: device_interface(device, "utskbd")
	, m_port(device, DEVICE_SELF_OWNER)
{
}

device_uts_keyboard_interface::~device_uts_keyboard_interface()
{
}

//**************************************************************************
//  KEYBOARD OPTIONS
//**************************************************************************

void uts10_keyboards(device_slot_interface &slot)
{
	slot.option_add("extw", UTS_EXTW_KEYBOARD);
}

void uts20_keyboards(device_slot_interface &slot)
{
	uts10_keyboards(slot);
	slot.option_add("uts400", UTS_400_KEYBOARD);
}