#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-1999 Amiga, Inc.
** All Rights Reserved
*/
#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif
#define COPPER_MOVE 0 /* pseude opcode for move #XXXX,dir */
#define COPPER_WAIT 1 /* pseudo opcode for wait y,x */
#define CPRNXTBUF 2 /* continue processing with next buffer */
#define CPR_NT_LOF 0x8000 /* copper instruction only for short frames */
#define CPR_NT_SHT 0x4000 /* copper instruction only for long frames */
#define CPR_NT_SYS 0x2000 /* copper user instruction only */
struct CopIns
{
WORD OpCode; /* 0 = move, 1 = wait */
union
{
struct CopList *nxtlist;
struct
{
union
{
WORD VWaitPos; /* vertical beam wait */
WORD DestAddr; /* destination address of copper move */
} u1;
union
{
WORD HWaitPos; /* horizontal beam wait position */
WORD DestData; /* destination immediate data to send */
} u2;
} u4;
} u3;
};
/* shorthand for above */
#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
/* structure of cprlist that points to list that hardware actually executes */
struct cprlist
{
struct cprlist *Next;
UWORD *start; /* start of copper list */
WORD MaxCount; /* number of long instructions */
};
struct CopList
{
struct CopList *Next; /* next block for this copper list */
struct CopList *_CopList; /* system use */
struct ViewPort *_ViewPort; /* system use */
struct CopIns *CopIns; /* start of this block */
struct CopIns *CopPtr; /* intermediate ptr */
UWORD *CopLStart; /* mrgcop fills this in for Long Frame*/
UWORD *CopSStart; /* mrgcop fills this in for Short Frame*/
WORD Count; /* intermediate counter */
WORD MaxCount; /* max # of copins for this block */
WORD DyOffset; /* offset this copper list vertical waits */
#ifdef V1_3
UWORD *Cop2Start;
UWORD *Cop3Start;
UWORD *Cop4Start;
UWORD *Cop5Start;
#endif
};
struct UCopList
{
struct UCopList *Next;
struct CopList *FirstCopList; /* head node of this copper list */
struct CopList *CopList; /* node in use */
};
/* private graphics data structure */
struct copinit
{
UWORD vsync_hblank[2];
UWORD diwstart[4];
UWORD diagstrt[4]; /* copper list for first bitplane */
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 /* GRAPHICS_COPPER_H */