blob: 4c7e52ded1ec9088dce0f18bbf838b0c0dfe9dae (
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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
// license:BSD-3-Clause
// copyright-holders:Curt Coder
/***************************************************************************
Motorola MC2661/MC68661 Enhanced Programmable Communications Interface
****************************************************************************
_____ _____
D2 1 |* \_/ | 28 D1
D3 2 | | 27 D0
RxD 3 | | 26 Vcc
GND 4 | | 25 _RxC/BKDET
D4 5 | | 24 _DTR
D5 6 | | 23 _RTS
D6 7 | MC2661 | 22 _DSR
D7 8 | MC68661 | 21 RESET
_TxC/XSYNC 9 | | 20 BRCLK
A1 10 | | 19 TxD
_CE 11 | | 18 _TxEMT/DSCHG
A0 12 | | 17 _CTS
_R/W 13 | | 16 _DCD
_RxRDY 14 |_____________| 15 _TxRDY
***************************************************************************/
#ifndef MAME_MACHINE_MC2661_H
#define MAME_MACHINE_MC2661_H
#pragma once
#include "diserial.h"
class mc2661_device : public device_t,
public device_serial_interface
{
public:
// construction/destruction
mc2661_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
void set_rxc(int clock) { m_rxc = clock; }
void set_txc(int clock) { m_txc = clock; }
auto txd_handler() { return m_write_txd.bind(); }
auto rxrdy_handler() { return m_write_rxrdy.bind(); }
auto txrdy_handler() { return m_write_txrdy.bind(); }
auto rts_handler() { return m_write_rts.bind(); }
auto dtr_handler() { return m_write_dtr.bind(); }
auto txemt_dschg_handler() { return m_write_txemt_dschg.bind(); }
auto bkdet_handler() { return m_write_bkdet.bind(); }
auto xsync_handler() { return m_write_xsync.bind(); }
uint8_t read(offs_t offset);
void write(offs_t offset, uint8_t data);
DECLARE_WRITE_LINE_MEMBER( dsr_w );
DECLARE_WRITE_LINE_MEMBER( dcd_w );
DECLARE_WRITE_LINE_MEMBER( cts_w );
DECLARE_READ_LINE_MEMBER( rxrdy_r );
DECLARE_READ_LINE_MEMBER( txemt_r );
DECLARE_WRITE_LINE_MEMBER( rx_w ) { device_serial_interface::rx_w(state); }
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
// device_serial_interface overrides
virtual void tra_callback() override;
virtual void tra_complete() override;
virtual void rcv_complete() override;
private:
devcb_write_line m_write_txd;
devcb_write_line m_write_rxrdy;
devcb_write_line m_write_txrdy;
devcb_write_line m_write_rts;
devcb_write_line m_write_dtr;
devcb_write_line m_write_txemt_dschg;
devcb_write_line m_write_bkdet;
devcb_write_line m_write_xsync;
int m_rxc;
int m_txc;
uint8_t m_rhr;
uint8_t m_thr;
uint8_t m_cr;
uint8_t m_sr;
uint8_t m_mr[2];
uint8_t m_sync[3];
int m_mode_index;
int m_sync_index;
};
DECLARE_DEVICE_TYPE(MC2661, mc2661_device)
#endif // MAME_MACHINE_MC2661_H
|