/* $NetBSD: custom.h,v 1.12 2002/04/25 09:20:27 aymeric Exp $ */ /* * Mach Operating System * Copyright (c) 1992 Carnegie Mellon University * All Rights Reserved. * * Permission to use, copy, modify and distribute this software and its * documentation is hereby granted, provided that both the copyright * notice and this permission notice appear in all copies of the * software, derivative works or modified versions, and any portions * thereof, and that both notices appear in supporting documentation. * * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. * * Carnegie Mellon requests users of this software to return to * * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU * School of Computer Science * Carnegie Mellon University * Pittsburgh PA 15213-3890 * * any improvements or extensions that they make and grant Carnegie Mellon * the rights to redistribute these changes. */ /* * This is a rewrite (retype) of the Amiga's custom chip register map, based * on the Hardware Reference Manual. It is NOT based on the Amiga's * hardware/custom.h. */ #ifndef _AMIGA_CUSTOM_ #define _AMIGA_CUSTOM_ #ifndef _LOCORE struct Custom { /*** read-only registers ***/ unsigned short zz1; unsigned short dmaconr; unsigned short vposr; unsigned short vhposr; unsigned short zz2; unsigned short joy0dat; unsigned short joy1dat; unsigned short clxdat; unsigned short adkconr; unsigned short pot0dat; unsigned short pot1dat; unsigned short potgor; unsigned short serdatr; unsigned short dskbytr; unsigned short intenar; unsigned short intreqr; /*** write-only registers ***/ /* disk */ void *dskpt; unsigned short dsklen; unsigned short zz3[2]; unsigned short vposw; unsigned short vhposw; unsigned short copcon; unsigned short serdat; unsigned short serper; unsigned short potgo; unsigned short joytest; unsigned short zz4[4]; /* blitter */ unsigned short bltcon0; unsigned short bltcon1; unsigned short bltafwm; unsigned short bltalwm; void *bltcpt; void *bltbpt; void *bltapt; void *bltdpt; unsigned short bltsize; unsigned short zz5[3]; unsigned short bltcmod; unsigned short bltbmod; unsigned short bltamod; unsigned short bltdmod; unsigned short zz6[4]; unsigned short bltcdat; unsigned short bltbdat; unsigned short bltadat; unsigned short zz7[3]; unsigned short deniseid; /* more disk */ unsigned short dsksync; /* copper */ union { void *cp; struct { unsigned short ch, cl; } cs; } _cop1lc; #define cop1lc _cop1lc.cp #define cop1lch _cop1lc.cs.ch #define cop1lcl _cop1lc.cs.cl union { void *cp; struct { unsigned short ch; unsigned short cl; } cs; } _cop2lc; #define cop2lc _cop2lc.cp #define cop2lch _cop2lc.cs.ch #define cop2lcl _cop2lc.cs.cl unsigned short copjmp1; unsigned short copjmp2; unsigned short copins; /* display parameters */ unsigned short diwstrt; unsigned short diwstop; unsigned short ddfstrt; unsigned short ddfstop; /* control registers */ unsigned short dmacon; unsigned short clxcon; unsigned short intena; unsigned short intreq; /* audio */ unsigned short adkcon; struct Audio { void *lc; unsigned short len; unsigned short per; unsigned short vol; unsigned short zz[3]; } aud[4]; /* display */ union { void *bp[6]; struct { unsigned short bph; unsigned short bpl; } bs[6]; } _bplpt; #define bplpt _bplpt.bp #define bplptl(n) _bplpt.bs[n].bpl #define bplpth(n) _bplpt.bs[n].bph unsigned short zz8[4]; unsigned short bplcon0; unsigned short bplcon1; unsigned short bplcon2; unsigned short zz9; unsigned short bpl1mod; unsigned short bpl2mod; unsigned short zz10[2+6+2]; /* sprites */ void *sprpt[8]; struct Sprite { unsigned short pos; unsigned short ctl; unsigned short data; unsigned short datb; } spr[8]; unsigned short color[32]; unsigned short htotal; unsigned short hsstop; unsigned short hbstrt; unsigned short hbstop; unsigned short vtotal; unsigned short vsstop; unsigned short vbstrt; unsigned short vbstop; unsigned short sprhstrt; unsigned short sprhstop; unsigned short bplhstrt; unsigned short bplhstop; unsigned short hhposw; unsigned short hhposr; unsigned short beamcon0; unsigned short hsstrt; unsigned short vsstrt; unsigned short hcenter; unsigned short diwhigh; /* 1e4 */ unsigned short padf3[11]; unsigned short fmode; }; #endif /* Custom chips as seen by the kernel */ #ifdef _KERNEL #ifndef _LOCORE extern vaddr_t CUSTOMADDR, CUSTOMbase; #define CUSTOMBASE (0x00DFF000) /* now just offset rel to zorro2 */ #endif #define custom (*((volatile struct Custom *)CUSTOMbase)) #endif /* This is used for making copper lists. */ #define CUSTOM_OFS(field) ((long)&((struct Custom*)0)->field) /* Bit definitions for dmacon and dmaconr */ #define DMAB_SETCLR 15 #define DMAB_BLTDONE 14 #define DMAB_BLTNZERO 13 #define DMAB_BLITHOG 10 #define DMAB_MASTER 9 #define DMAB_RASTER 8 #define DMAB_COPPER 7 #define DMAB_BLITTER 6 #define DMAB_SPRITE 5 #define DMAB_DISK 4 #define DMAB_AUD3 3 #define DMAB_AUD2 2 #define DMAB_AUD1 1 #define DMAB_AUD0 0 #define DMAF_SETCLR (1<