You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
3.0 KiB
135 lines
3.0 KiB
static inline void asm_cel_light_edge(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); |
|
static inline void asm_cel_light_square(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); |
|
static inline void asm_trans_light_cel_0_2(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); |
|
static inline void asm_trans_light_edge_0_2(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); |
|
static inline void asm_trans_light_square_0_2(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); |
|
static inline void asm_trans_light_cel_1_3(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); |
|
static inline void asm_trans_light_edge_1_3(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); |
|
static inline void asm_trans_light_square_1_3(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src); |
|
static inline void asm_trans_light_mask(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src, unsigned int mask); |
|
|
|
static inline void asm_cel_light_edge(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) |
|
{ |
|
unsigned char l = w >> 1; |
|
|
|
if ( w & 1 ) |
|
{ |
|
dst[0] = tbl[src[0]]; |
|
src++; |
|
dst++; |
|
} |
|
if ( l & 1 ) |
|
{ |
|
dst[0] = tbl[src[0]]; |
|
dst[1] = tbl[src[1]]; |
|
src += 2; |
|
dst += 2; |
|
} |
|
|
|
asm_cel_light_square(l >> 1, tbl, dst, src); |
|
} |
|
|
|
static inline void asm_cel_light_square(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) |
|
{ |
|
for ( ; w; --w ) |
|
{ |
|
dst[0] = tbl[src[0]]; |
|
dst[1] = tbl[src[1]]; |
|
dst[2] = tbl[src[2]]; |
|
dst[3] = tbl[src[3]]; |
|
src += 4; |
|
dst += 4; |
|
} |
|
} |
|
|
|
static inline void asm_trans_light_cel_0_2(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) |
|
{ |
|
if ( !(w & 1) ) |
|
{ |
|
asm_trans_light_edge_1_3(w >> 1, tbl, dst, src); |
|
} |
|
else |
|
{ |
|
src++; |
|
dst++; |
|
asm_trans_light_edge_0_2(w >> 1, tbl, dst, src); |
|
} |
|
} |
|
|
|
static inline void asm_trans_light_edge_0_2(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) |
|
{ |
|
unsigned char l = w >> 1; |
|
|
|
if ( w & 1 ) |
|
{ |
|
dst[0] = tbl[src[0]]; |
|
src += 2; |
|
dst += 2; |
|
} |
|
if ( l ) |
|
{ |
|
asm_trans_light_square_0_2(l, tbl, dst, src); |
|
} |
|
} |
|
|
|
static inline void asm_trans_light_square_0_2(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) |
|
{ |
|
for ( ; w; --w ) |
|
{ |
|
dst[0] = tbl[src[0]]; |
|
dst[2] = tbl[src[2]]; |
|
src += 4; |
|
dst += 4; |
|
} |
|
} |
|
|
|
static inline void asm_trans_light_cel_1_3(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) |
|
{ |
|
if ( !(w & 1) ) |
|
{ |
|
asm_trans_light_edge_0_2(w >> 1, tbl, dst, src); |
|
} |
|
else |
|
{ |
|
dst[0] = tbl[src[0]]; |
|
src++; |
|
dst++; |
|
asm_trans_light_edge_1_3(w >> 1, tbl, dst, src); |
|
} |
|
} |
|
|
|
static inline void asm_trans_light_edge_1_3(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) |
|
{ |
|
unsigned char l = w >> 1; |
|
|
|
if ( w & 1 ) |
|
{ |
|
dst[1] = tbl[src[1]]; |
|
src += 2; |
|
dst += 2; |
|
} |
|
if ( l ) |
|
{ |
|
asm_trans_light_square_1_3(l, tbl, dst, src); |
|
} |
|
} |
|
|
|
static inline void asm_trans_light_square_1_3(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src) |
|
{ |
|
for ( ; w; --w ) |
|
{ |
|
dst[1] = tbl[src[1]]; |
|
dst[3] = tbl[src[3]]; |
|
src += 4; |
|
dst += 4; |
|
} |
|
} |
|
|
|
static inline void asm_trans_light_mask(unsigned char w, BYTE *tbl, BYTE *&dst, BYTE *&src, unsigned int mask) |
|
{ |
|
for ( ; w; --w, src++, dst++, mask *= 2 ) |
|
{ |
|
if ( mask & 0x80000000 ) |
|
dst[0] = tbl[src[0]]; |
|
} |
|
}
|
|
|