const int sisReg32MMIO[] = {
0x8280,0x8284,0x8288,0x828C,0x8290,0x8294,
0x8298,0x829C,0x82A0,0x82A4,0x82A8,0x82AC
};
#define BR(x) sisReg32MMIO[x]
#define sisSRCBG 0x0000
#define sisSRCFG 0x0001
#define sisSRCVIDEO 0x0002
#define sisSRCSYSTEM 0x0003
#define sisPATFG 0x0004
#define sisPATREG 0x0008
#define sisPATBG 0x0000
#define sisLEFT2RIGHT 0x0010
#define sisRIGHT2LEFT 0x0000
#define sisTOP2BOTTOM 0x0020
#define sisBOTTOM2TOP 0x0000
#define sisXINCREASE sisLEFT2RIGHT
#define sisYINCREASE sisTOP2BOTTOM
#define sisCLIPENABL 0x0040
#define sisCLIPINTRN 0x0080
#define sisCLIPEXTRN 0x0000
#define sisCMDBLT 0x0000
#define sisCMDBLTMSK 0x0100
#define sisCMDCOLEXP 0x0200
#define sisCMDLINE 0x0300
#define sisFLGECOLEXP 0x2000
#define sisCMDECOLEXP (sisCMDCOLEXP | sisFLGECOLEXP)
#define sisLASTPIX 0x0800
#define sisXMAJOR 0x0400
#define sisBLTSync \
while(MMIO_IN16(pSiS->IOBase, BR(10) + 2) & 0x4000) {}
#define sisBLTWAIT \
if(!pSiS->TurboQueue) { \
while(MMIO_IN16(pSiS->IOBase, BR(10) + 2) & 0x4000) {} \
} else { \
sisBLTSync \
}
#define sisSETPATREG() \
((unsigned char *)(pSiS->IOBase + BR(11)))
#define sisSETPATREGL() \
((unsigned long *)(pSiS->IOBase + BR(11)))
#define sisSETCMD(op) \
{ \
unsigned long temp; \
MMIO_OUT16(pSiS->IOBase, BR(10) + 2, op); \
temp = MMIO_IN32(pSiS->IOBase, BR(10)); \
(void)temp; \
}
#define sisSETFGROPCOL(rop, color) \
MMIO_OUT32(pSiS->IOBase, BR(4), ((rop << 24) | (color & 0xFFFFFF)));
#define sisSETBGROPCOL(rop, color) \
MMIO_OUT32(pSiS->IOBase, BR(5), ((rop << 24) | (color & 0xFFFFFF)));
#define sisSETBGCOLOR(bgColor) \
MMIO_OUT32(pSiS->IOBase, BR(5), (bgColor));
#define sisSETFGCOLOR(fgColor) \
MMIO_OUT32(pSiS->IOBase, BR(4), (fgcolor));
#define sisSETROPFG(op) \
MMIO_OUT8(pSiS->IOBase, BR(4) + 3, op);
#define sisSETROPBG(op) \
MMIO_OUT8(pSiS->IOBase, BR(5) + 3, op);
#define sisSETROP(op) \
sisSETROPFG(op); sisSETROPBG(op);
#define sisSETSRCADDR(srcAddr) \
MMIO_OUT32(pSiS->IOBase, BR(0), (srcAddr & 0x3FFFFFL));
#define sisSETDSTADDR(dstAddr) \
MMIO_OUT32(pSiS->IOBase, BR(1), (dstAddr & 0x3FFFFFL));
#define sisSETPITCH(srcPitch,dstPitch) \
MMIO_OUT32(pSiS->IOBase, BR(2), ((((dstPitch) & 0xFFFF) << 16) | ((srcPitch) & 0xFFFF)));
#define sisSETSRCPITCH(srcPitch) \
MMIO_OUT16(pSiS->IOBase, BR(2), ((srcPitch) & 0xFFFF));
#define sisSETDSTPITCH(dstPitch) \
MMIO_OUT16(pSiS->IOBase, BR(2) + 2, ((dstPitch) & 0xFFFF));
#define sisSETHEIGHTWIDTH(Height, Width) \
MMIO_OUT32(pSiS->IOBase, BR(3), ((((Height) & 0xFFFF) << 16) | ((Width) & 0xFFFF)));
#define sisSETCLIPTOP(x, y) \
MMIO_OUT32(pSiS->IOBase, BR(8), ((((y) & 0xFFFF) << 16) | ((x) & 0xFFFF)));
#define sisSETCLIPBOTTOM(x, y) \
MMIO_OUT32(pSiS->IOBase, BR(9), ((((y) & 0xFFFF) << 16) | ((x) & 0xFFFF)));
#define sisSETXStart(XStart) \
MMIO_OUT32(pSiS->IOBase, BR(0), ((XStart) & 0xFFFF));
#define sisSETYStart(YStart) \
MMIO_OUT32(pSiS->IOBase, BR(1), ((YStart) & 0xFFFF));
#define sisSETLineMajorCount(MajorAxisCount) \
MMIO_OUT32(pSiS->IOBase, BR(3), ((MajorAxisCount) & 0xFFFF));
#define sisSETLineSteps(K1,K2) \
MMIO_OUT32(pSiS->IOBase, BR(6), ((((K1) & 0xFFFF) << 16) | ((K2) & 0xFFFF)));
#define sisSETLineErrorTerm(ErrorTerm) \
MMIO_OUT16(pSiS->IOBase, BR(7), (ErrorTerm));