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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|
// license:BSD-3-Clause
// copyright-holders:Patrick Mackinlay
#ifndef MAME_MACHINE_INTERPRO_SGA_H
#define MAME_MACHINE_INTERPRO_SGA_H
#pragma once
class interpro_sga_device : public device_t
{
public:
interpro_sga_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
auto berr_callback() { return m_berr_func.bind(); }
virtual void map(address_map &map);
u32 gcsr_r() { return m_gcsr; }
void gcsr_w(u32 data) { m_gcsr = data; }
enum ipoll_mask
{
IPOLL_ATTN = 0x000000ff,
IPOLL_DMAEND = 0x00000700,
IPOLL_NOGRANT = 0x00001000,
IPOLL_SRMMBE = 0x00002000,
IPOLL_SRBERR = 0x00004000,
IPOLL_RETRYABORT = 0x00008000,
IPOLL_INTBERR = 0x00010000,
IPOLL_INTMMBE = 0x00020000
};
u32 ipoll_r() { return m_ipoll; }
void ipoll_w(u32 data) { m_ipoll = data; }
enum imask_mask
{
IMASK_DMAENDCH1 = 0x00000200,
IMASK_NOGRANT = 0x00001000,
IMASK_SRMMBE = 0x00002000,
IMASK_SRBERR = 0x00004000,
IMASK_RETRYABORT = 0x00008000,
IMASK_INTBERR = 0x00010000,
IMASK_INTMMBE = 0x00020000
};
u32 imask_r() { return m_imask; }
void imask_w(u32 data) { m_imask = data; }
u32 range_base_r() { return m_range_base; }
void range_base_w(u32 data) { m_range_base = data; }
u32 range_end_r() { return m_range_end; }
void range_end_w(u32 data) { m_range_end = data; }
enum cttag_mask
{
CTTAG_TAG = 0x00000007,
CTTAG_CYCLE = 0x000001f8,
CTTAG_MAXBCLK = 0x0003fe00,
CTTAG_MAXRETRY = 0x3ffc0000
};
u32 cttag_r() { return m_cttag; }
void cttag_w(u32 data) { m_cttag = data; }
u32 address_r() { return m_address; }
void address_w(u32 data) { m_address = data; }
enum dmacsr_mask
{
DMACSR_CH1ENABLE = 0x00000080
};
u32 dmacsr_r() { return m_dmacsr; }
void dmacsr_w(u32 data) { m_dmacsr = data; }
enum edmacsr_mask
{
EDMACSR_CH1RDONLY = 0x00000010
};
u32 edmacsr_r() { return m_edmacsr; }
void edmacsr_w(u32 data) { m_edmacsr = data; }
u32 reg6_range_r() { return m_reg6_range; }
void reg6_range_w(u32 data) { m_reg6_range = data; }
u32 ddpta0_r() { return m_ddpta0; }
void ddpta0_w(u32 data) { m_ddpta0 = data; }
u32 ddpad0_r() { return m_ddpad0; }
void ddpad0_w(u32 data) { m_ddpad0 = data; }
u32 ddoff0_r() { return m_ddoff0; }
void ddoff0_w(u32 data) { m_ddoff0 = data; }
u32 ddtc0_r() { return m_ddtc0; }
void ddtc0_w(u32 data) { m_ddtc0 = data; }
u32 dspta0_r() { return m_dspta0; }
void dspta0_w(u32 data) { m_dspta0 = data; }
u32 dspad0_r() { return m_dspad0; }
void dspad0_w(u32 data) { m_dspad0 = data; }
u32 dsoff0_r() { return m_dsoff0; }
void dsoff0_w(u32 data) { m_dsoff0 = data; }
u32 dstc0_r() { return m_dstc0; }
void dstc0_w(u32 data) { m_dstc0 = data; }
u32 dspad1_r() { return m_dspad1; }
void dspad1_w(u32 data) { m_dspad1 = data; }
u32 dsoff1_r() { return m_dsoff1; }
void dsoff1_w(u32 data) { m_dsoff1 = data; }
u32 dstc1_r() { return m_dstc1; }
void dstc1_w(u32 data) { m_dstc1 = data; }
u32 ddpad1_r() { return m_ddpad1; }
void ddpad1_w(u32 data) { m_ddpad1 = data; }
u32 ddoff1_r() { return m_ddoff1; }
void ddoff1_w(u32 data) { m_ddoff1 = data; }
u32 ddtc1_r() { return m_ddtc1; }
void ddtc1_w(u32 data);
u32 ddpta2_r() { return m_ddpta2; }
void ddpta2_w(u32 data) { m_ddpta2 = data; }
u32 ddpad2_r() { return m_ddpad2; }
void ddpad2_w(u32 data) { m_ddpad2 = data; }
u32 ddoff2_r() { return m_ddoff2; }
void ddoff2_w(u32 data) { m_ddoff2 = data; }
u32 ddtc2_r() { return m_ddtc2; }
void ddtc2_w(u32 data) { m_ddtc2 = data; }
u32 dspta2_r() { return m_dspta2; }
void dspta2_w(u32 data) { m_dspta2 = data; }
u32 dspad2_r() { return m_dspad2; }
void dspad2_w(u32 data) { m_dspad2 = data; }
u32 dsoff2_r() { return m_dsoff2; }
void dsoff2_w(u32 data) { m_dsoff2 = data; }
u32 dstc2_r() { return m_dstc2; }
void dstc2_w(u32 data) { m_dstc2 = data; }
u32 ddrd2_r() { return m_ddrd2; }
void ddrd2_w(u32 data) { m_ddrd2 = data; }
u32 dsrd2_r() { return m_dsrd2; }
void dsrd2_w(u32 data) { m_dsrd2 = data; }
u32 dcksum0_r() { return m_dcksum0; }
void dcksum0_w(u32 data) { m_dcksum0 = data; }
u32 dcksum1_r() { return m_dcksum1; }
void dcksum1_w(u32 data) { m_dcksum1 = data; }
protected:
virtual void device_start() override;
virtual void device_reset() override;
private:
u32 m_gcsr; // general control/status
u32 m_ipoll; // interrupt poll
u32 m_imask; // interrupt mask
u32 m_range_base;
u32 m_range_end;
u32 m_cttag; // error cycletype/tag, aka diag1
u32 m_address; // aka diag0
u32 m_dmacsr; // dma control/status
u32 m_edmacsr; // extended dma control/status
u32 m_reg6_range; // region 6 range
u32 m_ddpta0; // dma 0 device page table address
u32 m_ddpad0; // dma 0 device page address
u32 m_ddoff0; // dma 0 device page offset
u32 m_ddtc0; // dma 0 device transfer context
u32 m_dspta0; // dma 0 SRX page table address
u32 m_dspad0; // dma 0 SRX page address
u32 m_dsoff0; // dma 0 SRX page offset
u32 m_dstc0; // dma 0 SRX transfer context
u32 m_dspad1; // dma 1 source page address
u32 m_dsoff1; // dma 1 source page offset
u32 m_dstc1; // dma 1 source transfer count
u32 m_ddpad1; // dma 1 destination page address
u32 m_ddoff1; // dma 1 destination page offset
u32 m_ddtc1; // dma 1 destination transfer count
u32 m_ddpta2; // dma 2 device page table address
u32 m_ddpad2; // dma 2 device page address
u32 m_ddoff2; // dma 2 device page offset
u32 m_ddtc2; // dma 2 device transfer context
u32 m_dspta2; // dma 2 SRX page table address
u32 m_dspad2; // dma 2 SRX page address
u32 m_dsoff2; // dma 2 SRX page offset
u32 m_dstc2; // dma 2 SRX transfer context
u32 m_ddrd2; // dma 2 device record descriptor
u32 m_dsrd2; // dma 2 SRX record descriptor
u32 m_dcksum0; // dma 1 device checksum register 0
u32 m_dcksum1; // dma 1 device checksum register 1
devcb_write32 m_berr_func;
};
// device type definition
DECLARE_DEVICE_TYPE(INTERPRO_SGA, interpro_sga_device)
#endif // MAME_MACHINE_INTERPRO_SGA_H
|