xref: /netbsd/sys/arch/amiga/amiga/custom.h (revision bf9ec67e)
1 /*	$NetBSD: custom.h,v 1.12 2002/04/25 09:20:27 aymeric Exp $	*/
2 
3 /*
4  * Mach Operating System
5  * Copyright (c) 1992 Carnegie Mellon University
6  * All Rights Reserved.
7  *
8  * Permission to use, copy, modify and distribute this software and its
9  * documentation is hereby granted, provided that both the copyright
10  * notice and this permission notice appear in all copies of the
11  * software, derivative works or modified versions, and any portions
12  * thereof, and that both notices appear in supporting documentation.
13  *
14  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
15  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
16  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
17  *
18  * Carnegie Mellon requests users of this software to return to
19  *
20  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
21  *  School of Computer Science
22  *  Carnegie Mellon University
23  *  Pittsburgh PA 15213-3890
24  *
25  * any improvements or extensions that they make and grant Carnegie Mellon
26  * the rights to redistribute these changes.
27  */
28 
29 /*
30  * This is a rewrite (retype) of the Amiga's custom chip register map, based
31  * on the Hardware Reference Manual.  It is NOT based on the Amiga's
32  * hardware/custom.h.
33  */
34 
35 #ifndef _AMIGA_CUSTOM_
36 #define _AMIGA_CUSTOM_
37 
38 #ifndef _LOCORE
39 struct Custom {
40     /*** read-only registers ***/
41 	unsigned short zz1;
42 	unsigned short dmaconr;
43 	unsigned short vposr;
44 	unsigned short vhposr;
45 	unsigned short zz2;
46 	unsigned short joy0dat;
47 	unsigned short joy1dat;
48 	unsigned short clxdat;
49 	unsigned short adkconr;
50 	unsigned short pot0dat;
51 	unsigned short pot1dat;
52 	unsigned short potgor;
53 	unsigned short serdatr;
54 	unsigned short dskbytr;
55 	unsigned short intenar;
56 	unsigned short intreqr;
57 
58 	/*** write-only registers ***/
59 
60 	/* disk */
61 	void *dskpt;
62 	unsigned short dsklen;
63 
64 	unsigned short zz3[2];
65 	unsigned short vposw;
66 	unsigned short vhposw;
67 	unsigned short copcon;
68 	unsigned short serdat;
69 	unsigned short serper;
70 	unsigned short potgo;
71 	unsigned short joytest;
72 	unsigned short zz4[4];
73 
74 	/* blitter */
75 	unsigned short bltcon0;
76 	unsigned short bltcon1;
77 	unsigned short bltafwm;
78 	unsigned short bltalwm;
79 	void *bltcpt;
80 	void *bltbpt;
81 	void *bltapt;
82 	void *bltdpt;
83 	unsigned short bltsize;
84 	unsigned short zz5[3];
85 	unsigned short bltcmod;
86 	unsigned short bltbmod;
87 	unsigned short bltamod;
88 	unsigned short bltdmod;
89 	unsigned short zz6[4];
90 	unsigned short bltcdat;
91 	unsigned short bltbdat;
92 	unsigned short bltadat;
93 	unsigned short zz7[3];
94 	unsigned short deniseid;
95 
96 	/* more disk */
97 	unsigned short dsksync;
98 
99     /* copper */
100 	union {
101 		void *cp;
102 		struct {
103 			unsigned short ch, cl;
104 		} cs;
105 	} _cop1lc;
106 #define cop1lc	_cop1lc.cp
107 #define cop1lch	_cop1lc.cs.ch
108 #define cop1lcl	_cop1lc.cs.cl
109 	union {
110 		void *cp;
111 		struct {
112 			unsigned short ch;
113 			unsigned short cl;
114 		} cs;
115 	} _cop2lc;
116 #define cop2lc	_cop2lc.cp
117 #define cop2lch	_cop2lc.cs.ch
118 #define cop2lcl	_cop2lc.cs.cl
119 	unsigned short copjmp1;
120 	unsigned short copjmp2;
121 	unsigned short copins;
122 
123 	/* display parameters */
124 	unsigned short diwstrt;
125 	unsigned short diwstop;
126 	unsigned short ddfstrt;
127 	unsigned short ddfstop;
128 
129 	/* control registers */
130 	unsigned short dmacon;
131 	unsigned short clxcon;
132 	unsigned short intena;
133 	unsigned short intreq;
134 
135 	/* audio */
136 	unsigned short adkcon;
137 	struct Audio {
138 		void *lc;
139 		unsigned short len;
140 		unsigned short per;
141 		unsigned short vol;
142 		unsigned short zz[3];
143 	} aud[4];
144 
145 	/* display */
146 	union {
147 		void *bp[6];
148 		struct {
149 			unsigned short bph;
150 			unsigned short bpl;
151 		} bs[6];
152 	} _bplpt;
153 #define bplpt	_bplpt.bp
154 #define bplptl(n)	_bplpt.bs[n].bpl
155 #define bplpth(n)	_bplpt.bs[n].bph
156 
157 	unsigned short zz8[4];
158 	unsigned short bplcon0;
159 	unsigned short bplcon1;
160 	unsigned short bplcon2;
161 	unsigned short zz9;
162 	unsigned short bpl1mod;
163 	unsigned short bpl2mod;
164 	unsigned short zz10[2+6+2];
165 
166 	/* sprites */
167 	void *sprpt[8];
168 	struct Sprite {
169 		unsigned short pos;
170 		unsigned short ctl;
171 		unsigned short data;
172 		unsigned short datb;
173 	} spr[8];
174 
175 	unsigned short color[32];
176 	unsigned short htotal;
177 	unsigned short hsstop;
178 	unsigned short hbstrt;
179 	unsigned short hbstop;
180 	unsigned short vtotal;
181 	unsigned short vsstop;
182 	unsigned short vbstrt;
183 	unsigned short vbstop;
184 	unsigned short sprhstrt;
185 	unsigned short sprhstop;
186 	unsigned short bplhstrt;
187 	unsigned short bplhstop;
188 	unsigned short hhposw;
189 	unsigned short hhposr;
190 	unsigned short beamcon0;
191 	unsigned short hsstrt;
192 	unsigned short vsstrt;
193 	unsigned short hcenter;
194 	unsigned short diwhigh;	/* 1e4 */
195 	unsigned short padf3[11];
196 	unsigned short fmode;
197 };
198 #endif
199 
200 
201 /* Custom chips as seen by the kernel */
202 #ifdef _KERNEL
203 #ifndef _LOCORE
204 extern vaddr_t CUSTOMADDR, CUSTOMbase;
205 #define CUSTOMBASE	(0x00DFF000)	/* now just offset rel to zorro2 */
206 #endif
207 #define custom (*((volatile struct Custom *)CUSTOMbase))
208 #endif
209 
210 /* This is used for making copper lists.  */
211 #define CUSTOM_OFS(field) ((long)&((struct Custom*)0)->field)
212 
213 /* Bit definitions for dmacon and dmaconr */
214 #define DMAB_SETCLR     15
215 #define DMAB_BLTDONE    14
216 #define DMAB_BLTNZERO   13
217 #define DMAB_BLITHOG    10
218 #define DMAB_MASTER     9
219 #define DMAB_RASTER     8
220 #define DMAB_COPPER     7
221 #define DMAB_BLITTER    6
222 #define DMAB_SPRITE     5
223 #define DMAB_DISK       4
224 #define DMAB_AUD3       3
225 #define DMAB_AUD2       2
226 #define DMAB_AUD1       1
227 #define DMAB_AUD0       0
228 
229 #define DMAF_SETCLR     (1<<DMAB_SETCLR)
230 #define DMAF_BLTDONE    (1<<DMAB_BLTDONE)
231 #define DMAF_BLTNZERO   (1<<DMAB_BLTNZERO)
232 #define DMAF_BLITHOG    (1<<DMAB_BLITHOG)
233 #define DMAF_MASTER     (1<<DMAB_MASTER)
234 #define DMAF_RASTER     (1<<DMAB_RASTER)
235 #define DMAF_COPPER     (1<<DMAB_COPPER)
236 #define DMAF_BLITTER    (1<<DMAB_BLITTER)
237 #define DMAF_SPRITE     (1<<DMAB_SPRITE)
238 #define DMAF_DISK       (1<<DMAB_DISK)
239 #define DMAF_AUD3       (1<<DMAB_AUD3)
240 #define DMAF_AUD2       (1<<DMAB_AUD2)
241 #define DMAF_AUD1       (1<<DMAB_AUD1)
242 #define DMAF_AUD0       (1<<DMAB_AUD0)
243 
244 
245 
246 /* Bit definitions for intena, intenar, intreq, and intreqr */
247 #define INTB_SETCLR     15
248 #define INTB_INTEN      14
249 #define INTB_EXTER      13
250 #define INTB_DSKSYNC    12
251 #define INTB_RBF        11
252 #define INTB_AUD3       10
253 #define INTB_AUD2       9
254 #define INTB_AUD1       8
255 #define INTB_AUD0       7
256 #define INTB_BLIT       6
257 #define INTB_VERTB      5
258 #define INTB_COPER      4
259 #define INTB_PORTS      3
260 #define INTB_SOFTINT    2
261 #define INTB_DSKBLK     1
262 #define INTB_TBE        0
263 
264 #define INTF_SETCLR     (1<<INTB_SETCLR)
265 #define INTF_INTEN      (1<<INTB_INTEN)
266 #define INTF_EXTER      (1<<INTB_EXTER)
267 #define INTF_DSKSYNC    (1<<INTB_DSKSYNC)
268 #define INTF_RBF        (1<<INTB_RBF)
269 #define INTF_AUD3       (1<<INTB_AUD3)
270 #define INTF_AUD2       (1<<INTB_AUD2)
271 #define INTF_AUD1       (1<<INTB_AUD1)
272 #define INTF_AUD0       (1<<INTB_AUD0)
273 #define INTF_BLIT       (1<<INTB_BLIT)
274 #define INTF_VERTB      (1<<INTB_VERTB)
275 #define INTF_COPER      (1<<INTB_COPER)
276 #define INTF_PORTS      (1<<INTB_PORTS)
277 #define INTF_SOFTINT    (1<<INTB_SOFTINT)
278 #define INTF_DSKBLK     (1<<INTB_DSKBLK)
279 #define INTF_TBE        (1<<INTB_TBE)
280 
281 /* Bit definitions for adkcon, adkconr */
282 #define ADKB_SETCLR   15
283 #define ADKB_PRECOMP1 14
284 #define ADKB_PRECOMP0 13
285 #define ADKB_MFMPREC  12
286 #define ADKB_UARTBRK  11
287 #define ADKB_WORDSYNC 10
288 #define ADKB_MSBSYNC  9
289 #define ADKB_FAST     8
290 
291 #define ADKF_SETCLR     (1<<ADKB_SETCLR)
292 #define ADKF_PRECOMP1 (1<<ADKB_PRECOMP1)
293 #define ADKF_PRECOMP0 (1<<ADKB_PRECOMP0)
294 #define ADKF_MFMPREC  (1<<ADKB_MFMPREC)
295 #define ADKF_UARTBRK  (1<<ADKB_UARTBRK)
296 #define ADKF_WORDSYNC (1<<ADKB_WORDSYNC)
297 #define ADKF_MSBSYNC  (1<<ADKB_MSBSYNC)
298 #define ADKF_FAST     (1<<ADKB_FAST)
299 
300 #endif /* _AMIGA_CUSTOM_ */
301