-- BitBltDefs.mesa  Edited by: Sandman, June 30, 1980  4:48 PM

DIRECTORY
  Mopcodes USING [zBITBLT, zLI0];

-- Copyright  Xerox Corporation 1979, 1980

BitBltDefs: DEFINITIONS =
  BEGIN

  BBptr: TYPE = POINTER TO BBTable;
  BBoperation: TYPE = {replace, paint, invert, erase};
  BBsourcetype: TYPE = {block, complement, andgray, gray};

  BBTable: TYPE = MACHINE DEPENDENT RECORD [
    ptrs: {short, long} ← short,
    pad: [0..777B] ← 0,
    sourcealt, destalt: BOOLEAN ← FALSE, -- TRUE to use alternate memory bank
    sourcetype: BBsourcetype ← block,
    function: BBoperation ← replace,
    unused: CARDINAL ← 0,
    dbca: POINTER ← NULL, -- destination BaseCoreAddress
    dbmr: CARDINAL ← NULL, -- destination raster width(in words)
    dlx: CARDINAL ← NULL, -- destination left x
    dty: CARDINAL ← NULL, -- destination top y
    dw: CARDINAL ← NULL,
    dh: CARDINAL ← NULL,
    sbca: POINTER ← NULL, -- source BaseCoreAddress
    sbmr: CARDINAL ← NULL, -- source raster width(in words)
    slx: CARDINAL ← NULL, -- source left x
    sty: CARDINAL ← NULL, -- source top y
    gray0: CARDINAL ← NULL, -- four words of "gray"
    gray1: CARDINAL ← NULL,
    gray2: CARDINAL ← NULL,
    gray3: CARDINAL ← NULL, -- Below here is not used by nonXM, nonXMesa Altos
    slbca: LONG POINTER ← NULL, -- source long BaseCoreAddress
    dlbca: LONG POINTER ← NULL]; -- destination long BaseCoreAddress

  BBTableSpace: TYPE = ARRAY [0..SIZE[BBTable]] OF UNSPECIFIED;

  AlignedBBTable: PROCEDURE [p: POINTER TO BBTableSpace] RETURNS [BBptr] = INLINE
    BEGIN RETURN[LOOPHOLE[p + LOOPHOLE[p, CARDINAL] MOD 2]] END;

  BITBLT: PROCEDURE [ptr: BBptr] = MACHINE CODE
    BEGIN Mopcodes.zLI0; Mopcodes.zBITBLT END;


  END.