#ifndef _AMIGA_CUSTOM_
#define _AMIGA_CUSTOM_
#ifndef _LOCORE
struct Custom {
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;
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];
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;
unsigned short dsksync;
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;
unsigned short diwstrt;
unsigned short diwstop;
unsigned short ddfstrt;
unsigned short ddfstop;
unsigned short dmacon;
unsigned short clxcon;
unsigned short intena;
unsigned short intreq;
unsigned short adkcon;
struct Audio {
void *lc;
unsigned short len;
unsigned short per;
unsigned short vol;
unsigned short zz[3];
} aud[4];
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];
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;
unsigned short padf3[11];
unsigned short fmode;
};
#endif
#ifdef _KERNEL
#ifndef _LOCORE
extern vaddr_t CUSTOMADDR, CUSTOMbase;
#define CUSTOMBASE (0x00DFF000)
#endif
#define custom (*((volatile struct Custom *)CUSTOMbase))
#endif
#define CUSTOM_OFS(field) ((long)&((struct Custom*)0)->field)
#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<<DMAB_SETCLR)
#define DMAF_BLTDONE (1<<DMAB_BLTDONE)
#define DMAF_BLTNZERO (1<<DMAB_BLTNZERO)
#define DMAF_BLITHOG (1<<DMAB_BLITHOG)
#define DMAF_MASTER (1<<DMAB_MASTER)
#define DMAF_RASTER (1<<DMAB_RASTER)
#define DMAF_COPPER (1<<DMAB_COPPER)
#define DMAF_BLITTER (1<<DMAB_BLITTER)
#define DMAF_SPRITE (1<<DMAB_SPRITE)
#define DMAF_DISK (1<<DMAB_DISK)
#define DMAF_AUD3 (1<<DMAB_AUD3)
#define DMAF_AUD2 (1<<DMAB_AUD2)
#define DMAF_AUD1 (1<<DMAB_AUD1)
#define DMAF_AUD0 (1<<DMAB_AUD0)
#define INTB_SETCLR 15
#define INTB_INTEN 14
#define INTB_EXTER 13
#define INTB_DSKSYNC 12
#define INTB_RBF 11
#define INTB_AUD3 10
#define INTB_AUD2 9
#define INTB_AUD1 8
#define INTB_AUD0 7
#define INTB_BLIT 6
#define INTB_VERTB 5
#define INTB_COPER 4
#define INTB_PORTS 3
#define INTB_SOFTINT 2
#define INTB_DSKBLK 1
#define INTB_TBE 0
#define INTF_SETCLR (1<<INTB_SETCLR)
#define INTF_INTEN (1<<INTB_INTEN)
#define INTF_EXTER (1<<INTB_EXTER)
#define INTF_DSKSYNC (1<<INTB_DSKSYNC)
#define INTF_RBF (1<<INTB_RBF)
#define INTF_AUD3 (1<<INTB_AUD3)
#define INTF_AUD2 (1<<INTB_AUD2)
#define INTF_AUD1 (1<<INTB_AUD1)
#define INTF_AUD0 (1<<INTB_AUD0)
#define INTF_BLIT (1<<INTB_BLIT)
#define INTF_VERTB (1<<INTB_VERTB)
#define INTF_COPER (1<<INTB_COPER)
#define INTF_PORTS (1<<INTB_PORTS)
#define INTF_SOFTINT (1<<INTB_SOFTINT)
#define INTF_DSKBLK (1<<INTB_DSKBLK)
#define INTF_TBE (1<<INTB_TBE)
#define ADKB_SETCLR 15
#define ADKB_PRECOMP1 14
#define ADKB_PRECOMP0 13
#define ADKB_MFMPREC 12
#define ADKB_UARTBRK 11
#define ADKB_WORDSYNC 10
#define ADKB_MSBSYNC 9
#define ADKB_FAST 8
#define ADKF_SETCLR (1<<ADKB_SETCLR)
#define ADKF_PRECOMP1 (1<<ADKB_PRECOMP1)
#define ADKF_PRECOMP0 (1<<ADKB_PRECOMP0)
#define ADKF_MFMPREC (1<<ADKB_MFMPREC)
#define ADKF_UARTBRK (1<<ADKB_UARTBRK)
#define ADKF_WORDSYNC (1<<ADKB_WORDSYNC)
#define ADKF_MSBSYNC (1<<ADKB_MSBSYNC)
#define ADKF_FAST (1<<ADKB_FAST)
#endif