iodevice.h revision 1.2 1 /* $NetBSD: iodevice.h,v 1.2 1997/01/18 21:04:34 oki Exp $ */
2
3 /*
4 * Copyright (c) 1993, 1994, 1995 Masaru Oki
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. All advertising materials mentioning features or use of this software
16 * must display the following acknowledgement:
17 * This product includes software developed by Masaru Oki.
18 * 4. The name of the author may not be used to endorse or promote products
19 * derived from this software without specific prior written permission
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 */
32
33 /*
34 * custom CRTC
35 */
36 struct crtc {
37 unsigned short r00, r01, r02, r03, r04, r05, r06, r07;
38 unsigned short r08, r09, r10, r11, r12, r13, r14, r15;
39 unsigned short r16, r17, r18, r19, r20, r21, r22, r23;
40 char pad0[0x0450];
41 unsigned short crtctrl;
42 char pad1[0x1b7e];
43 };
44
45 /*
46 * custom VIDEO Controller
47 */
48 struct videoc {
49 unsigned short r0;
50 char pad1[0x00fe]; unsigned short r1;
51 char pad2[0x00fe]; unsigned short r2;
52 char pad3[0x19fe];
53 };
54
55 /*
56 * Hitachi HD63450 DMA chip
57 */
58 struct dmac {
59 unsigned char csr;
60 unsigned char cer;
61 char pad0[2]; unsigned char dcr;
62 unsigned char ocr;
63 unsigned char scr;
64 unsigned char ccr;
65 char pad1[2]; unsigned short mtc;
66 unsigned long mar;
67 char pad2[4]; unsigned long dar;
68 char pad3[2]; unsigned short btc;
69 unsigned long bar;
70 char pad4[5]; unsigned char niv;
71 char pad5[1]; unsigned char eiv;
72 char pad6[1]; unsigned char mfc;
73 char pad7[3]; unsigned char cpr;
74 char pad8[3]; unsigned char dfc;
75 char pad9[7]; unsigned char bfc;
76 char pada[5]; unsigned char gcr;
77 };
78
79 /*
80 * MC68901 Multi Function Periferal
81 */
82 struct mfp {
83 char pad00; unsigned char gpip;
84 #define MFP_GPIP_HSYNC 0x80
85 #define MFP_GPIP_VDISP 0x10
86 char pad01; unsigned char aer;
87 char pad02; unsigned char ddr;
88 char pad03; unsigned char iera;
89 #define MFP_TIMERA_STOP 0
90 #define MFP_TIMERA_RESET 0x10
91 char pad04; unsigned char ierb;
92 #define MFP_TIMERB_STOP 0
93 #define MFP_TIMERB_RESET 0x10
94 char pad05; unsigned char ipra;
95 char pad06; unsigned char iprb;
96 char pad07; unsigned char isra;
97 char pad08; unsigned char isrb;
98 char pad09; unsigned char imra;
99 char pad0a; unsigned char imrb;
100 char pad0b; unsigned char vr;
101 char pad0c; unsigned char tacr;
102 char pad0d; unsigned char tbcr;
103 char pad0e; unsigned char tcdcr;
104 char pad0f; unsigned char tadr;
105 char pad10; unsigned char tbdr;
106 char pad11; unsigned char tcdr;
107 char pad12; unsigned char tddr;
108 char pad13; unsigned char scr;
109 char pad14; unsigned char ucr;
110 #define MFP_UCR_EVENP 0x02
111 #define MFP_UCR_PARENB 0x04
112 #define MFP_UCR_SYNCMODE 0x00
113 #define MFP_UCR_ONESB 0x08
114 #define MFP_UCR_1P5SB 0x10
115 #define MFP_UCR_TWOSB 0x18
116 #define MFP_UCR_RW_5 0x60
117 #define MFP_UCR_RW_6 0x40
118 #define MFP_UCR_RW_7 0x20
119 #define MFP_UCR_RW_8 0x00
120 #define MFP_UCR_CLKX16 0x80
121 char pad15; unsigned char rsr;
122 #define MFP_RSR_BF 0x80
123 #define MFP_RSR_OE 0x40
124 #define MFP_RSR_PE 0x20
125 #define MFP_RSR_FE 0x10
126 #define MFP_RSR_SS 0x02
127 #define MFP_RSR_RE 0x01
128 char pad16; unsigned char tsr;
129 #define MFP_TSR_BE 0x80
130 #define MFP_TSR_TE 0x01
131 char pad17; unsigned char udr;
132 char pad[0x1fd0];
133 };
134
135 /*
136 * RICOH Real Time Clock RP5C15
137 */
138 union rtc {
139 struct {
140 char pad0; unsigned char sec;
141 char pad1; unsigned char sec10;
142 char pad2; unsigned char min;
143 char pad3; unsigned char min10;
144 char pad4; unsigned char hour;
145 char pad5; unsigned char hour10;
146 char pad6; unsigned char week;
147 char pad7; unsigned char day;
148 char pad8; unsigned char day10;
149 char pad9; unsigned char mon;
150 char pada; unsigned char mon10;
151 char padb; unsigned char year;
152 char padc; unsigned char year10;
153 char padd; unsigned char mode;
154 char pade; unsigned char test;
155 char padf; unsigned char reset;
156 char pad[0x1fe0];
157 } bank0;
158 struct {
159 char pad0; unsigned char clkout;
160 char pad1; unsigned char adjust;
161 char pad2; unsigned char al_min;
162 char pad3; unsigned char al_min10;
163 char pad4; unsigned char al_hour;
164 char pad5; unsigned char al_hour10;
165 char pad6; unsigned char al_week;
166 char pad7; unsigned char al_day;
167 char pad8; unsigned char al_day10;
168 char pad9; unsigned char unused;
169 char pada; unsigned char ampm;
170 char padb; unsigned char leep;
171 char padc; unsigned char unused2;
172 char padd; unsigned char mode;
173 char pade; unsigned char test;
174 char padf; unsigned char reset;
175 char pad[0x1fe0];
176 } bank1;
177 };
178
179 /*
180 * Centronics printer port (output only)
181 */
182 struct centro {
183 char pad0; unsigned char data;
184 char pad1; unsigned char strobe;
185 char pad[0x1ffc];
186 };
187
188 /*
189 * system control port
190 */
191 struct sysport {
192 char pad0; unsigned char contrast;
193 char pad1; unsigned char tvctrl;
194 char pad2; unsigned char imageunit;
195 char pad3; unsigned char keyctrl;
196 char pad4; unsigned char waitctrl; /* XXX: X68030 only */
197 char pad5; unsigned char mpustat;
198 char pad6; unsigned char sramwp;
199 char pad7; unsigned char powoff;
200 char pad[0x1ff0];
201 };
202
203 /*
204 * YAMAHA (Operator type-M) chip.
205 */
206 struct opm {
207 char pad0; unsigned char reg;
208 char pad1; unsigned char data;
209 char pad[0x1ffc];
210 };
211
212 /*
213 * OKI MSM6258V ADPCM chip.
214 */
215 struct adpcm {
216 char pad0; unsigned char stat;
217 char pad1; unsigned char data;
218 char pad[0x1ffc];
219 };
220
221 /*
222 * NEC 72065 Floppy Disk Controller
223 */
224 struct fdc {
225 char pad0; unsigned char stat;
226 char pad1; unsigned char data;
227 char pad2; unsigned char drvstat;
228 char pad3; unsigned char select;
229 char pad[0x1ff8];
230 };
231
232 /*
233 * FUJITSU SCSI Protocol Controller MB89352
234 */
235 struct spc {
236 char pad00; unsigned char bdid;
237 char pad02; unsigned char sctl;
238 char pad04; unsigned char scmd;
239 char pad06; unsigned char tmod;
240 char pad08; unsigned char ints;
241 char pad0a; unsigned char psns;
242 char pad0c; unsigned char ssts;
243 char pad0e; unsigned char serr;
244 char pad10; unsigned char pctl;
245 char pad12; unsigned char mbc;
246 char pad14; unsigned char dreg;
247 char pad16; unsigned char temp;
248 char pad18; unsigned char tch;
249 char pad1a; unsigned char tcm;
250 char pad1c; unsigned char tcl;
251 char pad1e;
252 char pad1f;
253 };
254
255 /*
256 * Zilog scc.
257 */
258 struct zschan {
259 unsigned char zc_xxx0;
260 unsigned char zc_csr; /* control and status, and indirect access */
261 unsigned char zc_xxx1;
262 unsigned char zc_data; /* data */
263 };
264
265 struct zsdevice {
266 struct zschan zs_chan[2]; /* channel A = 1, B = 0 : 8 bytes */
267 char pad4; unsigned char bstat; /* external only : 2 bytes */
268 char pad[6]; /* --- : 6 bytes */
269 };
270
271 struct ppi8255 {
272 char pad0; unsigned char porta;
273 char pad1; unsigned char portb;
274 char pad2; unsigned char portc;
275 char pad3; unsigned char ctrl;
276 char pad[0x1ff8];
277 };
278
279 struct ioctlr {
280 char pad0; unsigned char intr;
281 char pad1; unsigned char vect;
282 char pad[0x1ffc];
283 };
284
285 /*
286 * YAMAHA YM3802 MIDI chip.
287 */
288 struct midi {
289 char pad0; unsigned char r00;
290 char pad1; unsigned char r01;
291 char pad2; unsigned char r02;
292 char pad3; unsigned char r03;
293 char pad4; unsigned char rn4;
294 char pad5; unsigned char rn5;
295 char pad6; unsigned char rn6;
296 char pad7; unsigned char rn7;
297 };
298
299 #define PHYS_IODEV 0x00C00000
300
301 struct IODEVICE
302 {
303 unsigned short gvram[0x100000]; /* 0x00c00000 */
304 unsigned char tvram[0x080000]; /* 0x00e00000 */
305 struct crtc io_crtc; /* 0x00e80000 */
306 unsigned short gpalet[0x00100]; /* 0x00e82000 */
307 unsigned short tpalet[0x00100]; /* 0x00e82200 */
308 struct videoc io_videoc; /* 0x00e82400 */
309 struct dmac io_dma[4]; /* 0x00e84000 */
310 char dmapad[0x1f00];
311 char areapad[0x2000]; /* 0x00e86000 */
312 struct mfp io_mfp; /* 0x00e88000 */
313 union rtc io_rtc; /* 0x00e8a000 */
314 struct centro io_printer; /* 0x00e8c000 */
315 struct sysport io_sysport; /* 0x00e8e000 */
316 struct opm io_opm; /* 0x00e90000 */
317 struct adpcm io_adpcm;
318 struct fdc io_fdc;
319 char spcpad1[0x20]; /* 0x00e96000 */
320 struct spc io_inspc; /* 0x00e96020 */
321 char spcpad2[0x1fc0];
322 struct zsdevice io_inscc;
323 char sccpad[0x1ff0];
324 struct ppi8255 io_joyport;
325 struct ioctlr io_ctlr; /* 0x00e9c000 */
326 char fpcprsv[0x2000]; /* 0x00e9e000 */
327 struct spc io_exspc; /* 0x00ea0000 */
328 char exscsirom[0x1fe0]; /* */
329 char sysiorsv1[0xda00]; /* 0x00ea2000 */
330 struct midi io_midi[2]; /* 0x00eafa00 */
331 char sysiorsv2[0x1e0]; /* 0x00eafa20 */
332 struct zsdevice io_exscc[4]; /* 0x00eafc00 */
333 char sysiorsv3[0x3c0]; /* 0x00eafc40 */
334 char sprite[0x10000]; /* 0x00eb0000 */
335 char usriorsv1[0xe000]; /* 0x00ec0000 */
336 char neptune[0x400]; /* 0x00ece000 */
337 char usriorsv2[0x1c00]; /* 0x00ece400 */
338 char io_sram[0x10000]; /* 0x00ed0000 */
339 char rsv[0x1ff00]; /* 0x00ee0000 */
340 char psx16550[0x00020]; /* 0x00efff00 */
341 char rsv2[0x000e0]; /* 0x00efff20 */
342 char cgrom0_16x16[0x05e00]; /* 0x00f00000 */
343 char cgrom1_16x16[0x17800]; /* 0x00f05e00 */
344 char cgrom2_16x16[0x1b2c0]; /* 0x00f1d600 */
345 char cgrom__rsv1 [0x01740]; /* 0x00f388c0 */
346 char cgrom0_8x8 [0x00800]; /* 0x00f3a000 */
347 char cgrom0_8x16 [0x01000]; /* 0x00f3a800 */
348 char cgrom0_12x12[0x01800]; /* 0x00f3b800 */
349 char cgrom0_12x24[0x03000]; /* 0x00f3d000 */
350 char cgrom0_24x24[0x0d380]; /* 0x00f40000 */
351 char cgrom1_24x24[0x34e00]; /* 0x00f4d380 */
352 char cgrom2_24x24[0x3d230]; /* 0x00f82180 */
353 char cgrom__rsv2 [0x00c50]; /* 0x00fbf3b0 */
354 char inscsirom[0x2000]; /* 0x00fc0000 */
355 };
356
357 #ifdef _KERNEL
358 #ifndef LOCORE
359 volatile struct IODEVICE *IODEVbase;
360 #endif
361
362 #define mfp (IODEVbase->io_mfp)
363 #define printer (IODEVbase->io_printer)
364 #define sysport (IODEVbase->io_sysport)
365 #define OPM (IODEVbase->io_opm)
366 #define adpcm (IODEVbase->io_adpcm)
367 #define PPI (IODEVbase->io_joyport)
368 #define ioctlr (IODEVbase->io_ctlr)
369 #endif
370