#ifndef __LG_XAA_H
#define __LG_XAA_H
enum {
STATUS = 0x0400,
OP0_opRDRAM = 0x0520,
OP1_opRDRAM = 0x0540,
OP2_opRDRAM = 0x0560,
OP0_opMRDRAM = 0x0524,
OP1_opMRDRAM = 0x0544,
OP2_opMRDRAM = 0x0564,
OP0_opSRAM = 0x0528,
OP1_opSRAM = 0x0548,
OP2_opSRAM = 0x0568,
OP1_opMSRAM = 0x054A,
OP2_opMSRAM = 0x056A,
DRAWDEF = 0x0584,
BLTDEF = 0x0586,
BLTEXT_EX = 0x0700,
MBLTEXT_EX = 0x0720,
MONOQW = 0x0588,
QFREE = 0x0404,
PATOFF = 0x052A,
HOSTDATA = 0x0800,
OP_opBGCOLOR = 0x05E4,
OP_opFGCOLOR = 0x05E0,
bltCONTROL = 0x0402,
BITMASK = 0x05E8
};
enum { HOSTDATASIZE = 2048 };
enum {
HOST2SCR = 0x1120,
SCR2HOST = 0x2010,
HOST2PAT = 0x1102,
HOST2SRAM2 = 0x6020,
SCR2SCR = 0x1110,
COLORSRC = 0x0000,
MONOSRC = 0x0040,
COLORTRANS = 0x0001,
MONOTRANS = 0x0005,
COLORFILL = 0x0070,
SRAM1SCR2SCR = 0x1180,
PAT2SCR = 0x1109,
COLORPAT = 0x0000,
MONOPAT = 0x0004,
SRAM2PAT2SCR = 0x1108,
PATeqSRC = 0x0800,
BLITUP = 0x8000
};
enum {
TRANSBG = 0x0100,
TRANSFG = 0x0300,
TRANSEQ = 0x0100,
TRANSNE = 0x0300,
TRANSNONE = 0x0000
};
#define LgREADY() ((memrb(STATUS) & 0x07) == 0x00)
#define LgSETROP(rop) memww(DRAWDEF,rop);
#define LgSETTRANSPARENCY(trans) \
memww(DRAWDEF,(trans) | (memrw(DRAWDEF) & 0x00FF));
#define LgSETMODE(mode) memww(BLTDEF,mode);
#define LgSETDSTXY(X, Y) memwl(OP0_opRDRAM, (((Y) << 16) | (X)));
#define LgSETSRCXY(X, Y) memwl(OP1_opRDRAM, (((Y) << 16) | (X)));
#define LgSETPATXY(X, Y) memwl(OP2_opRDRAM, (((Y) << 16) | (X)));
#define LgSETTRANSMASK(X, Y) LgSETPATXY(X, Y)
#define LgSETSRAMDST(offset) memww(OP0_opSRAM, offset);
#define LgSETSRAM1OFFSET(offset) memww(OP1_opSRAM, offset);
#define LgSETSRAM2OFFSET(offset) memww(OP2_opSRAM, offset);
#define LgSETMSRAM1OFFSET(offset) memww(OP1_opMSRAM, offset);
#define LgSETMSRAM2OFFSET(offset) memww(OP2_opMSRAM, offset);
#define LgSETMDSTXY(X, Y) memwl(OP0_opMRDRAM, (((Y) << 16) | (X)));
#define LgSETMSRCXY(X, Y) memwl(OP1_opMRDRAM, (((Y) << 16) | (X)));
#define LgSETMPATXY(X, Y) memwl(OP2_opMRDRAM, (((Y) << 16) | (X)));
#define LgSETMTRANSMASK(X, Y) LgSETMPATXY(X, Y)
#define LgSETPHASE0(phase) memwl( OP0_opRDRAM, phase);
#define LgSETPHASE1(phase) memwl(OP1_opRDRAM, phase);
#define LgSETPHASE2(phase) memwl( OP2_opRDRAM, phase);
#define LgSETMPHASE0(phase) memwl(OP0_opMRDRAM, phase);
#define LgSETMPHASE1(phase) memwl(OP1_opMRDRAM, phase);
#define LgSETEXTENTS(width, height) \
memwl(BLTEXT_EX, (((height) << 16)|(width)));
#if 0
#define LgSETMEXTENTS(width, height) \
memwl(MBLTEXT_EX, (((height) << 16)|(width)));
#else
#define LgSETMEXTENTS(width, height) \
{ \
memww(MONOQW, ((width + 7) >> 3)); \
memwl(MBLTEXT_EX, (((height) << 16)|(width))); \
}
#define LgSETMEXTENTSNOMONOQW(width, height) \
memwl(MBLTEXT_EX, (((height) << 16)|(width)));
#endif
#define LgHOSTDATAWRITE(data) memwl(HOSTDATA, data);
#define LgHOSTDATAREAD() (memrl(HOSTDATA))
#define LgSETBACKGROUND(color) memwl(OP_opBGCOLOR, color);
#define LgSETFOREGROUND(color) memwl(OP_opFGCOLOR, color);
#define LgSETPATOFF(xoff, yoff) memww(PATOFF, (((yoff) << 8) | (xoff)));
#define LgSETSWIZZLE() memww(bltCONTROL, memrw(bltCONTROL | 0x0400));
#define LgCLEARSWIZZLE() memww(bltCONTROL, memrw(bltCONTROL & ~0x0400));
#define LgSETBITMASK(m) memwl(BITMASK, m);
#endif