summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine/ins8250.h
blob: 93eaa4e446b5908c65ee03efd817a0b1bd10f587 (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
/**********************************************************************

    8250 UART interface and emulation

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

#ifndef __INS8250_H_
#define __INS8250_H_

#include "devlegcy.h"

DECLARE_LEGACY_DEVICE(INS8250, ins8250);
DECLARE_LEGACY_DEVICE(INS8250A, ins8250a);
DECLARE_LEGACY_DEVICE(NS16450, ns16450);
DECLARE_LEGACY_DEVICE(NS16550, ns16550);
DECLARE_LEGACY_DEVICE(NS16550A, ns16550a);
DECLARE_LEGACY_DEVICE(PC16550D, pc16550d);

#define UART8250_HANDSHAKE_OUT_DTR				0x01
#define UART8250_HANDSHAKE_OUT_RTS				0x02

#define UART8250_HANDSHAKE_IN_DSR				0x020
#define UART8250_HANDSHAKE_IN_CTS				0x010
#define UART8250_INPUTS_RING_INDICATOR			0x0040
#define UART8250_INPUTS_DATA_CARRIER_DETECT		0x0080


/***************************************************************************
    TYPE DEFINITIONS
***************************************************************************/

typedef void (*ins8250_interrupt_func)(running_device *device, int state);
typedef void (*ins8250_transmit_func)(running_device *device, int data);
typedef void (*ins8250_handshake_out_func)(running_device *device, int data);
typedef void (*ins8250_refresh_connect_func)(running_device *device);

#define INS8250_INTERRUPT(name)			void name(running_device *device, int state)
#define INS8250_TRANSMIT(name)			void name(running_device *device, int data)
#define INS8250_HANDSHAKE_OUT(name)		void name(running_device *device, int data)
#define INS8250_REFRESH_CONNECT(name)	void name(running_device *device)

typedef struct
{
	long clockin;
	ins8250_interrupt_func			interrupt;

	ins8250_transmit_func			transmit;
	ins8250_handshake_out_func		handshake_out;

	// refresh object connected to this port
	ins8250_refresh_connect_func	refresh_connected;
} ins8250_interface;


/***************************************************************************
    DEVICE CONFIGURATION MACROS
***************************************************************************/

#define MCFG_INS8250_ADD(_tag, _intrf) \
	MCFG_DEVICE_ADD(_tag, INS8250, 0) \
	MCFG_DEVICE_CONFIG(_intrf)


#define MCFG_NS16450_ADD(_tag, _intrf) \
	MCFG_DEVICE_ADD(_tag, NS16450, 0) \
	MCFG_DEVICE_CONFIG(_intrf)


#define MCFG_NS16550_ADD(_tag, _intrf) \
	MCFG_DEVICE_ADD(_tag, NS16550, 0) \
	MCFG_DEVICE_CONFIG(_intrf)


/***************************************************************************
    FUNCTION PROTOTYPES
***************************************************************************/

void ins8250_receive(running_device *device, int data);
void ins8250_handshake_in(running_device *device, int new_msr);

READ8_DEVICE_HANDLER( ins8250_r );
WRITE8_DEVICE_HANDLER( ins8250_w );


#endif /* __INS8250_H_ */