important fix for line scroll effect of super arts background .
it's my mistake that waste cpu time to render whole tiles.
some code i doesn't observed when i port it .
//clip.min_x = cliprect->min_x;
//clip.max_x = cliprect->max_x;
//clip.min_y = drawline;
//clip.max_y = drawline;
now it can be full speed without frameskip on a P4 1.x
static void cps3_drawgfxzoom_1(unsigned int code, unsigned int pal, int flipx, int flipy, int x, int y, int drawline)
{
unsigned int * dst = RamScreen;
unsigned char * src = (unsigned char *) RamCRam;
dst += (drawline * 1024 + x);
#if BE_GFX
if ( flipy ) {
src += code * 256 + 16 * (15 - (drawline - y));
if ( flipx ) {
if ( src[ 0] ) dst[15] = src[ 0] | pal;
if ( src[ 1] ) dst[14] = src[ 1] | pal;
if ( src[ 2] ) dst[13] = src[ 2] | pal;
if ( src[ 3] ) dst[12] = src[ 3] | pal;
if ( src[ 4] ) dst[11] = src[ 4] | pal;
if ( src[ 5] ) dst[10] = src[ 5] | pal;
if ( src[ 6] ) dst[ 9] = src[ 6] | pal;
if ( src[ 7] ) dst[ 8] = src[ 7] | pal;
if ( src[ 8] ) dst[ 7] = src[ 8] | pal;
if ( src[ 9] ) dst[ 6] = src[ 9] | pal;
if ( src[10] ) dst[ 5] = src[10] | pal;
if ( src[11] ) dst[ 4] = src[11] | pal;
if ( src[12] ) dst[ 3] = src[12] | pal;
if ( src[13] ) dst[ 2] = src[13] | pal;
if ( src[14] ) dst[ 1] = src[14] | pal;
if ( src[15] ) dst[ 0] = src[15] | pal;
} else {
if ( src[ 0] ) dst[ 0] = src[ 0] | pal;
if ( src[ 1] ) dst[ 1] = src[ 1] | pal;
if ( src[ 2] ) dst[ 2] = src[ 2] | pal;
if ( src[ 3] ) dst[ 3] = src[ 3] | pal;
if ( src[ 4] ) dst[ 4] = src[ 4] | pal;
if ( src[ 5] ) dst[ 5] = src[ 5] | pal;
if ( src[ 6] ) dst[ 6] = src[ 6] | pal;
if ( src[ 7] ) dst[ 7] = src[ 7] | pal;
if ( src[ 8] ) dst[ 8] = src[ 8] | pal;
if ( src[ 9] ) dst[ 9] = src[ 9] | pal;
if ( src[10] ) dst[10] = src[10] | pal;
if ( src[11] ) dst[11] = src[11] | pal;
if ( src[12] ) dst[12] = src[12] | pal;
if ( src[13] ) dst[13] = src[13] | pal;
if ( src[14] ) dst[14] = src[14] | pal;
if ( src[15] ) dst[15] = src[15] | pal;
}
} else {
src += code * 256 + 16 * (drawline - y);
if ( flipx ) {
if ( src[ 0] ) dst[15] = src[ 0] | pal;
if ( src[ 1] ) dst[14] = src[ 1] | pal;
if ( src[ 2] ) dst[13] = src[ 2] | pal;
if ( src[ 3] ) dst[12] = src[ 3] | pal;
if ( src[ 4] ) dst[11] = src[ 4] | pal;
if ( src[ 5] ) dst[10] = src[ 5] | pal;
if ( src[ 6] ) dst[ 9] = src[ 6] | pal;
if ( src[ 7] ) dst[ 8] = src[ 7] | pal;
if ( src[ 8] ) dst[ 7] = src[ 8] | pal;
if ( src[ 9] ) dst[ 6] = src[ 9] | pal;
if ( src[10] ) dst[ 5] = src[10] | pal;
if ( src[11] ) dst[ 4] = src[11] | pal;
if ( src[12] ) dst[ 3] = src[12] | pal;
if ( src[13] ) dst[ 2] = src[13] | pal;
if ( src[14] ) dst[ 1] = src[14] | pal;
if ( src[15] ) dst[ 0] = src[15] | pal;
} else {
if ( src[ 0] ) dst[ 0] = src[ 0] | pal;
if ( src[ 1] ) dst[ 1] = src[ 1] | pal;
if ( src[ 2] ) dst[ 2] = src[ 2] | pal;
if ( src[ 3] ) dst[ 3] = src[ 3] | pal;
if ( src[ 4] ) dst[ 4] = src[ 4] | pal;
if ( src[ 5] ) dst[ 5] = src[ 5] | pal;
if ( src[ 6] ) dst[ 6] = src[ 6] | pal;
if ( src[ 7] ) dst[ 7] = src[ 7] | pal;
if ( src[ 8] ) dst[ 8] = src[ 8] | pal;
if ( src[ 9] ) dst[ 9] = src[ 9] | pal;
if ( src[10] ) dst[10] = src[10] | pal;
if ( src[11] ) dst[11] = src[11] | pal;
if ( src[12] ) dst[12] = src[12] | pal;
if ( src[13] ) dst[13] = src[13] | pal;
if ( src[14] ) dst[14] = src[14] | pal;
if ( src[15] ) dst[15] = src[15] | pal;
}
}
#else
if ( flipy ) {
src += code * 256 + 16 * (15 - (drawline - y));
if ( flipx ) {
if ( src[ 3] ) dst[15] = src[ 3] | pal;
if ( src[ 2] ) dst[14] = src[ 2] | pal;
if ( src[ 1] ) dst[13] = src[ 1] | pal;
if ( src[ 0] ) dst[12] = src[ 0] | pal;
if ( src[ 7] ) dst[11] = src[ 7] | pal;
if ( src[ 6] ) dst[10] = src[ 6] | pal;
if ( src[ 5] ) dst[ 9] = src[ 5] | pal;
if ( src[ 4] ) dst[ 8] = src[ 4] | pal;
if ( src[11] ) dst[ 7] = src[11] | pal;
if ( src[10] ) dst[ 6] = src[10] | pal;
if ( src[ 9] ) dst[ 5] = src[ 9] | pal;
if ( src[ 8] ) dst[ 4] = src[ 8] | pal;
if ( src[15] ) dst[ 3] = src[15] | pal;
if ( src[14] ) dst[ 2] = src[14] | pal;
if ( src[13] ) dst[ 1] = src[13] | pal;
if ( src[12] ) dst[ 0] = src[12] | pal;
} else {
if ( src[ 3] ) dst[ 0] = src[ 3] | pal;
if ( src[ 2] ) dst[ 1] = src[ 2] | pal;
if ( src[ 1] ) dst[ 2] = src[ 1] | pal;
if ( src[ 0] ) dst[ 3] = src[ 0] | pal;
if ( src[ 7] ) dst[ 4] = src[ 7] | pal;
if ( src[ 6] ) dst[ 5] = src[ 6] | pal;
if ( src[ 5] ) dst[ 6] = src[ 5] | pal;
if ( src[ 4] ) dst[ 7] = src[ 4] | pal;
if ( src[11] ) dst[ 8] = src[11] | pal;
if ( src[10] ) dst[ 9] = src[10] | pal;
if ( src[ 9] ) dst[10] = src[ 9] | pal;
if ( src[ 8] ) dst[11] = src[ 8] | pal;
if ( src[15] ) dst[12] = src[15] | pal;
if ( src[14] ) dst[13] = src[14] | pal;
if ( src[13] ) dst[14] = src[13] | pal;
if ( src[12] ) dst[15] = src[12] | pal;
}
} else {
src += code * 256 + 16 * (drawline - y);
if ( flipx ) {
if ( src[ 3] ) dst[15] = src[ 3] | pal;
if ( src[ 2] ) dst[14] = src[ 2] | pal;
if ( src[ 1] ) dst[13] = src[ 1] | pal;
if ( src[ 0] ) dst[12] = src[ 0] | pal;
if ( src[ 7] ) dst[11] = src[ 7] | pal;
if ( src[ 6] ) dst[10] = src[ 6] | pal;
if ( src[ 5] ) dst[ 9] = src[ 5] | pal;
if ( src[ 4] ) dst[ 8] = src[ 4] | pal;
if ( src[11] ) dst[ 7] = src[11] | pal;
if ( src[10] ) dst[ 6] = src[10] | pal;
if ( src[ 9] ) dst[ 5] = src[ 9] | pal;
if ( src[ 8] ) dst[ 4] = src[ 8] | pal;
if ( src[15] ) dst[ 3] = src[15] | pal;
if ( src[14] ) dst[ 2] = src[14] | pal;
if ( src[13] ) dst[ 1] = src[13] | pal;
if ( src[12] ) dst[ 0] = src[12] | pal;
} else {
if ( src[ 3] ) dst[ 0] = src[ 3] | pal;
if ( src[ 2] ) dst[ 1] = src[ 2] | pal;
if ( src[ 1] ) dst[ 2] = src[ 1] | pal;
if ( src[ 0] ) dst[ 3] = src[ 0] | pal;
if ( src[ 7] ) dst[ 4] = src[ 7] | pal;
if ( src[ 6] ) dst[ 5] = src[ 6] | pal;
if ( src[ 5] ) dst[ 6] = src[ 5] | pal;
if ( src[ 4] ) dst[ 7] = src[ 4] | pal;
if ( src[11] ) dst[ 8] = src[11] | pal;
if ( src[10] ) dst[ 9] = src[10] | pal;
if ( src[ 9] ) dst[10] = src[ 9] | pal;
if ( src[ 8] ) dst[11] = src[ 8] | pal;
if ( src[15] ) dst[12] = src[15] | pal;
if ( src[14] ) dst[13] = src[14] | pal;
if ( src[13] ) dst[14] = src[13] | pal;
if ( src[12] ) dst[15] = src[12] | pal;
}
}
#endif
}
static void cps3_draw_tilemapsprite_line(int drawline, unsigned int * regs )
{
.....
cps3_drawgfxzoom_1(tileno,colour,xflip,yflip,(x*16)-scrollx%16,drawline-tilesubline, drawline);
....
}