/***************************************************************************
Atari Jaguar blitter
****************************************************************************
------------------------------------------------------------
BLITTER REGISTERS
------------------------------------------------------------
F02200-F022FF R/W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx Blitter registers
F02200 W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx A1_BASE - A1 base register
F02204 W -------- ---xxxxx -xxxxxxx xxxxx-xx A1_FLAGS - A1 flags register
W -------- ---x---- -------- -------- (YSIGNSUB - invert sign of Y delta)
W -------- ----x--- -------- -------- (XSIGNSUB - invert sign of X delta)
W -------- -----x-- -------- -------- (Y add control)
W -------- ------xx -------- -------- (X add control)
W -------- -------- -xxxxxx- -------- (width in 6-bit floating point)
W -------- -------- -------x xx------ (ZOFFS1-6 - Z data offset)
W -------- -------- -------- --xxx--- (PIXEL - pixel size)
W -------- -------- -------- ------xx (PITCH1-4 - data phrase pitch)
F02208 W -xxxxxxx xxxxxxxx -xxxxxxx xxxxxxxx A1_CLIP - A1 clipping size
W -xxxxxxx xxxxxxxx -------- -------- (height)
W -------- -------- -xxxxxxx xxxxxxxx (width)
F0220C R/W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx A1_PIXEL - A1 pixel pointer
R/W xxxxxxxx xxxxxxxx -------- -------- (Y pixel value)
R/W -------- -------- xxxxxxxx xxxxxxxx (X pixel value)
F02210 W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx A1_STEP - A1 step value
W xxxxxxxx xxxxxxxx -------- -------- (Y step value)
W -------- -------- xxxxxxxx xxxxxxxx (X step value)
F02214 W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx A1_FSTEP - A1 step fraction value
W xxxxxxxx xxxxxxxx -------- -------- (Y step fraction value)
W -------- -------- xxxxxxxx xxxxxxxx (X step fraction value)
F02218 R/W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx A1_FPIXEL - A1 pixel pointer fraction
R/W xxxxxxxx xxxxxxxx -------- -------- (Y pixel fraction value)
R/W -------- -------- xxxxxxxx xxxxxxxx (X pixel fraction value)
F0221C W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx A1_INC - A1 increment
W xxxxxxxx xxxxxxxx -------- -------- (Y increment)
W -------- -------- xxxxxxxx xxxxxxxx (X increment)
F02220 W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx A1_FINC - A1 increment fraction
W xxxxxxxx xxxxxxxx -------- -------- (Y increment fraction)
W -------- -------- xxxxxxxx xxxxxxxx (X increment fraction)
F02224 W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx A2_BASE - A2 base register
F02228 W -------- ---xxxxx -xxxxxxx xxxxx-xx A2_FLAGS - A2 flags register
W -------- ---x---- -------- -------- (YSIGNSUB - invert sign of Y delta)
W -------- ----x--- -------- -------- (XSIGNSUB - invert sign of X delta)
W -------- -----x-- -------- -------- (Y add control)
W -------- ------xx -------- -------- (X add control)
W -------- -------- -xxxxxx- -------- (width in 6-bit floating point)
W -------- -------- -------x xx------ (ZOFFS1-6 - Z data offset)
W -------- -------- -------- --xxx--- (PIXEL - pixel size)
W -------- -------- -------- ------xx (PITCH1-4 - data phrase pitch)
F0222C W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx A2_MASK - A2 window mask
F02230 R/W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx A2_PIXEL - A2 pixel pointer
R/W xxxxxxxx xxxxxxxx -------- -------- (Y pixel value)
R/W -------- -------- xxxxxxxx xxxxxxxx (X pixel value)
F02234 W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx A2_STEP - A2 step value
W xxxxxxxx xxxxxxxx -------- -------- (Y step value)
W -------- -------- xxxxxxxx xxxxxxxx (X step value)
F02238 W -xxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx B_CMD - command register
W -x------ -------- -------- -------- (SRCSHADE - modify source intensity)
W --x----- -------- -------- -------- (BUSHI - hi priority bus)
W ---x---- -------- -------- -------- (BKGWREN - writeback destination)
W ----x--- -------- -------- -------- (DCOMPEN - write inhibit from data comparator)
W -----x-- -------- -------- -------- (BCOMPEN - write inhibit from bit coparator)
W ------x- -------- -------- -------- (CMPDST - compare dest instead of src)
W -------x xxx----- -------- -------- (logical operation)
W -------- ---xxx-- -------- -------- (ZMODE - Z comparator mode)
W -------- ------x- -------- -------- (ADDDSEL - select sum of src & dst)
W -------- -------x -------- -------- (PATDSEL - select pattern data)
W -------- -------- x------- -------- (TOPNEN - enable carry into top intensity nibble)
W -------- -------- -x------ -------- (TOPBEN - enable carry into top intensity byte)
W -------- -------- --x----- -------- (ZBUFF - enable Z updates in inner loop)
W -------- -------- ---x---- -------- (GOURD - enable gouraud shading in inner loop)
W -------- -------- ----x--- -------- (DSTA2 - reverses A2/A1 roles)
W -------- -------- -----x-- -------- (UPDA2 - add A2 step to A2 in outer loop)
W -------- -------- ------x- -------- (UPDA1 - add A1 step to A1 in outer loop)
W -------- -------- -------x -------- (UPDA1F - add A1 fraction step to A1 in outer loop)
W -------- -------- -------- x------- (diagnostic use)
W -------- -------- -------- -x------ (CLIP_A1 - clip A1 to window)
W -------- -------- -------- --x----- (DSTWRZ - enable dest Z write in inner loop)
W -------- -------- -------- ---x---- (DSTENZ - enable dest Z read in inner loop)
W -------- -------- -------- ----x--- (DSTEN - enables dest data read in inner loop)
W -------- -------- -------- -----x-- (SRCENX - enable extra src read at start of inner)
W -------- -------- -------- ------x- (SRCENZ - enables source Z read in inner loop)
W -------- -------- -------- -------x (SRCEN - enables source data read in inner loop)
F02238 R xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx B_CMD - status register
R xxxxxxxx xxxxxxxx -------- -------- (inner count)
R -------- -------- xxxxxxxx xxxxxx-- (diagnostics)
R -------- -------- -------- ------x- (STOPPED - when stopped in collision detect)
R -------- -------- -------- -------x (IDLE - when idle)
F0223C W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx B_COUNT - counters register
W xxxxxxxx xxxxxxxx -------- -------- (outer loop count)
W -------- -------- xxxxxxxx xxxxxxxx (inner loop count)
F02240-F02247 W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx B_SRCD - source data register
F02248-F0224F W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx B_DSTD - destination data register
F02250-F02257 W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx B_DSTZ - destination Z register
F02258-F0225F W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx B_SRCZ1 - source Z register 1
F02260-F02267 W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx B_SRCZ2 - source Z register 2
F02268-F0226F W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx B_PATD - pattern data register
F02270 W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx B_IINC - intensity increment
F02274 W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx B_ZINC - Z increment
F02278 W -------- -------- -------- -----xxx B_STOP - collision control
W -------- -------- -------- -----x-- (STOPEN - enable blitter collision stops)
W -------- -------- -------- ------x- (ABORT - abort after stop)
W -------- -------- -------- -------x (RESUME - resume after stop)
F0227C W -------- xxxxxxxx xxxxxxxx xxxxxxxx B_I3 - intensity 3
F02280 W -------- xxxxxxxx xxxxxxxx xxxxxxxx B_I2 - intensity 2
F02284 W -------- xxxxxxxx xxxxxxxx xxxxxxxx B_I1 - intensity 1
F02288 W -------- xxxxxxxx xxxxxxxx xxxxxxxx B_I0 - intensity 0
F0228C W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx B_Z3 - Z3
F02290 W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx B_Z2 - Z2
F02294 W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx B_Z1 - Z1
F02298 W xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx B_Z0 - Z0
****************************************************************************/
/* mask for flags that are always handled dynamically or ignored */
#define DYNAMIC_COMMAND_MASK 0x00000704
#define DYNAMIC_FLAGS_MASK 0xffe0fe04
#define STATIC_COMMAND_MASK (~DYNAMIC_COMMAND_MASK)
#define STATIC_FLAGS_MASK (~DYNAMIC_FLAGS_MASK)
/* blitter registers */
enum
{
A1_BASE, A1_FLAGS, A1_CLIP, A1_PIXEL,
A1_STEP, A1_FSTEP, A1_FPIXEL, A1_INC,
A1_FINC, A2_BASE, A2_FLAGS, A2_MASK,
A2_PIXEL, A2_STEP, B_CMD, B_COUNT,
B_SRCD_H, B_SRCD_L, B_DSTD_H, B_DSTD_L,
B_DSTZ_H, B_DSTZ_L, B_SRCZ1_H, B_SRCZ1_L,
B_SRCZ2_H, B_SRCZ2_L, B_PATD_H, B_PATD_L,
B_IINC, B_ZINC, B_STOP, B_I3,
B_I2, B_I1, B_I0, B_Z3,
B_Z2, B_Z1, B_Z0,
BLITTER_REGS
};