Цитата(aaarrr @ Dec 19 2006, 14:55)

Напишите, что Вы хотите получить, и что конкретно записываете в регистры акселератора, когда возникает глюк.
Собственно ф-ия коприравиния выглядит так:
void BltFast(LPSURFACE destSurf,unsigned short dsX,unsigned short dsY,LPSURFACE srcSurf,unsigned long srcleft,unsigned long srctop,unsigned long srcright,unsigned long srcbottom,unsigned char dcTrans)
{
if((srcright>srcleft)&&(srcbottom>srctop))
{
while(BLOCKCTRL & 1);
if(dcTrans & BLTFAST_SRCCOLORKEY)TRANSPATTRN=srcSurf->Trans;
SRCPIXELSTRT=((srcleft%4)*8/*PEL*/);
BLKSRCSTRT=srcSurf->StartAddress+4*srcSurf->Lenght*srctop+srcleft;
BLKSRCWIDTH=(srcright-1)/4-srcleft/4;
SRCLINELENGTH=srcSurf->Lenght;
DESTPIXELSTRT=((dsX%4)*8/*SPEL*/)|((((dsX+(srcright-1-srcleft))%4)*8)<<16/*EPEL*/);
BLKDESTSTRT=destSurf->StartAddress+dsY*destSurf->Lenght*4+dsX;
DESTLINELENGTH=destSurf->Lenght;
BLKDESTWIDTH=(dsX+(srcright-1-srcleft))/4-dsX/4;
BLKDESTHEIGHT=srcbottom-srctop-1;
BLOCKCTRL=0;
BLOCKCTRL=(2<<17/*P*/)|(0<<14/*BG*/)|((dcTrans & BLTFAST_SRCCOLORKEY?1:0)<<2/*TRANS*/)|(1/*ENABLE*/);
}
}
где, typedef struct{
unsigned long StartAddress;/*start address align word*/
unsigned short Width;/*width in pixel*/
unsigned short Height;/*height in pixel*/
unsigned short Lenght;/*lenght in words*/
unsigned long Trans;/*tranparency*/
} SURFACE, *LPSURFACE;
глюк возникает при следующих входных параметрах:
srcSurf - поверхность 1376х279 пикселов
srcleft=0,srctop=0,srcright=344(!!!именно такой параметр вызывает глюки),srcbottom=279
dsX, dsY любое значение