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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
/**********************************************************************
NEC uPD1990AC Serial I/O Calendar & Clock emulation
Copyright MESS Team.
Visit http://mamedev.org for licensing and usage restrictions.
**********************************************************************
_____ _____
C2 1 |* \_/ | 14 Vdd
C1 2 | | 13 XTAL
C0 3 | | 12 _XTAL
STB 4 | uPD1990AC | 11 OUT ENBL
CS 5 | | 10 TP
DATA IN 6 | | 9 DATA OUT
GND 7 |_____________| 8 CLK
**********************************************************************/
#pragma once
#ifndef __UPD1990A__
#define __UPD1990A__
#include "emu.h"
//**************************************************************************
// MACROS / CONSTANTS
//**************************************************************************
//**************************************************************************
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_UPD1990A_ADD(_tag, _clock, _config) \
MCFG_DEVICE_ADD((_tag), UPD1990A, _clock) \
MCFG_DEVICE_CONFIG(_config)
#define UPD1990A_INTERFACE(name) \
const upd1990a_interface (name) =
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// ======================> upd1990a_interface
struct upd1990a_interface
{
devcb_write_line m_out_data_cb;
devcb_write_line m_out_tp_cb;
};
// ======================> upd1990a_device
class upd1990a_rtc_device : public device_t,
public device_rtc_interface,
public upd1990a_interface
{
public:
// construction/destruction
upd1990a_rtc_device(const machine_config &mconfig, device_type type, const char* name, const char *tag, device_t *owner, UINT32 clock);
DECLARE_WRITE_LINE_MEMBER( oe_w );
DECLARE_WRITE_LINE_MEMBER( cs_w );
DECLARE_WRITE_LINE_MEMBER( stb_w );
DECLARE_WRITE_LINE_MEMBER( clk_w );
DECLARE_WRITE_LINE_MEMBER( c0_w );
DECLARE_WRITE_LINE_MEMBER( c1_w );
DECLARE_WRITE_LINE_MEMBER( c2_w );
DECLARE_WRITE_LINE_MEMBER( data_in_w );
DECLARE_READ_LINE_MEMBER( data_out_r );
DECLARE_READ_LINE_MEMBER( tp_r );
protected:
// device-level overrides
virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
// device_rtc_interface overrides
virtual void rtc_clock_updated(int year, int month, int day, int day_of_week, int hour, int minute, int second);
enum {
TYPE_UPD1990A = 0,
TYPE_UPD4990A
};
int m_device_type;
private:
static const device_timer_id TIMER_CLOCK = 0;
static const device_timer_id TIMER_TP = 1;
static const device_timer_id TIMER_DATA_OUT = 2;
static const device_timer_id TIMER_TEST_MODE = 3;
devcb_resolved_write_line m_out_data_func;
devcb_resolved_write_line m_out_tp_func;
UINT8 m_time_counter[5]; // time counter
UINT8 m_shift_reg[5]; // shift register
int m_oe; // output enable
int m_cs; // chip select
int m_stb; // strobe
int m_data_in; // data in
int m_data_out; // data out
int m_c; // command
int m_clk; // shift clock
int m_tp; // time pulse
int m_c_unlatched; // command waiting for STB
// timers
emu_timer *m_timer_clock;
emu_timer *m_timer_tp;
emu_timer *m_timer_data_out;
emu_timer *m_timer_test_mode;
};
class upd1990a_device : public upd1990a_rtc_device
{
public:
upd1990a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
};
class upd4990a_device : public upd1990a_rtc_device
{
public:
upd4990a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
};
// device type definition
extern const device_type UPD1990A;
extern const device_type UPD4990A;
#endif
|