#include "newport.h"
void
NewportRefreshArea8(ScrnInfoPtr pScrn, int num, BoxPtr pbox)
{
int dx, dy, x;
CARD32 *base, *src;
NewportPtr pNewport = NEWPORTPTR(pScrn);
NewportRegsPtr pNewportRegs = pNewport->pNewportRegs;
#define RA8_BYTES 4
#define RA8_BYTE_SHIFT 2
#define RA8_MASK 0xffc
TRACE_ENTER("NewportRefreshArea8");
NewportWait(pNewportRegs);
pNewportRegs->set.drawmode0 = (NPORT_DMODE0_DRAW |
NPORT_DMODE0_BLOCK |
NPORT_DMODE0_CHOST);
while(num--) {
NewportWait(pNewportRegs);
x = pbox->x1 & RA8_MASK;
base = pNewport->ShadowPtr
+ (pbox->y1 * (pNewport->ShadowPitch >> RA8_BYTE_SHIFT) )
+ ( x >> RA8_BYTE_SHIFT);
pNewportRegs->set.xystarti = (x << 16) | pbox->y1;
pNewportRegs->set.xyendi = ((pbox->x2-1) << 16) | (pbox->y2-1);
for ( dy = pbox->y1; dy < pbox->y2; dy++) {
src = base;
for ( dx = x; dx < pbox->x2; dx += RA8_BYTES) {
pNewportRegs->go.hostrw0 = *src;
src++;
}
base += ( pNewport->ShadowPitch >> RA8_BYTE_SHIFT );
}
pbox++;
}
TRACE_EXIT("NewportRefreshArea8");
}
void
NewportRefreshArea24(ScrnInfoPtr pScrn, int num, BoxPtr pbox)
{
int dx, dy;
CARD8 *src, *base;
CARD32 dest;
NewportPtr pNewport = NEWPORTPTR(pScrn);
NewportRegsPtr pNewportRegs = pNewport->pNewportRegs;
TRACE_ENTER("NewportRefreshArea24");
NewportWait(pNewportRegs);
pNewportRegs->set.drawmode0 = (NPORT_DMODE0_DRAW |
NPORT_DMODE0_BLOCK |
NPORT_DMODE0_CHOST);
while(num--) {
base = (CARD8*)pNewport->ShadowPtr + pbox->y1 * pNewport->ShadowPitch + pbox->x1 * 3;
pNewportRegs->set.xystarti = (pbox->x1 << 16) | pbox->y1;
pNewportRegs->set.xyendi = ((pbox->x2-1) << 16) | (pbox->y2-1);
for ( dy = pbox->y1; dy < pbox->y2; dy++) {
src = base;
for ( dx = pbox->x1 ; dx < pbox->x2 ; dx++) {
dest = src[0] | src[1] << 8 | src[2] << 16;
pNewportRegs->go.hostrw0 = dest;
src+=3;
}
base += pNewport->ShadowPitch;
}
pbox++;
}
TRACE_EXIT("NewportRefreshArea24");
}