#ifndef GRAPHICS_COPPER_H
#define GRAPHICS_COPPER_H
/*
** $Filename: graphics/copper.h $
** $Release: 2.04 Includes, V37.4 $
** $Revision: 37.0 $
** $Date: 91/01/07 $
**
** graphics copper list intstruction definintions
**
** (C) Copyright 1985-1991 Commodore-Amiga, Inc.
** All Rights Reserved
*/

#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif

#define COPPER_MOVE 0 
#define COPPER_WAIT 1 
#define CPRNXTBUF 2 
#define CPR_NT_LOF 0x8000 
#define CPR_NT_SHT 0x4000 
#define CPR_NT_SYS 0x2000 

struct CopIns
{
 WORD OpCode; 
 union
 {
 struct CopList *nxtlist;
 struct
 {
 union
 {
 WORD VWaitPos; 
 WORD DestAddr; 
 } u1;
 union
 {
 WORD HWaitPos; 
 WORD DestData; 
 } u2;
 } u4;
 } u3;
};

#define NXTLIST u3.nxtlist
#define VWAITPOS u3.u4.u1.VWaitPos
#define DESTADDR u3.u4.u1.DestAddr
#define HWAITPOS u3.u4.u2.HWaitPos
#define DESTDATA u3.u4.u2.DestData



struct cprlist
{
 struct cprlist *Next;
 UWORD *start; 
 WORD MaxCount; 
};

struct CopList
{
 struct CopList *Next; 
 struct CopList *_CopList; 
 struct ViewPort *_ViewPort; 
 struct CopIns *CopIns; 
 struct CopIns *CopPtr; 
 UWORD *CopLStart; 
 UWORD *CopSStart; 
 WORD Count; 
 WORD MaxCount; 
 WORD DyOffset; 
#ifdef V1_3
 UWORD *Cop2Start;
 UWORD *Cop3Start;
 UWORD *Cop4Start;
 UWORD *Cop5Start;
#endif
};

struct UCopList
{
 struct UCopList *Next;
 struct CopList *FirstCopList; 
 struct CopList *CopList; 
};



struct copinit
{
 UWORD vsync_hblank[2];
 UWORD diwstart[4];
 UWORD diagstrt[4]; 
 UWORD sprstrtup[(2*8*2)];
 UWORD wait14[2];
 UWORD norm_hblank[2];
 UWORD genloc[4];
 UWORD jump[(2*2)];
 UWORD wait_forever[2];
 UWORD sprstop[4];
};

#endif 
