sprite16.c 471 B

123456789101112131415161718
  1. #include <sprites.h>
  2. __ATTR_LIB_C__ void Sprite16(short x, short y, short h, unsigned short *sprite, void *buff, short mode)
  3. {
  4. long addr=(long)buff+30*y+((x>>3)&0xfffe),d1;
  5. unsigned short cnt=16-(x&15),data;
  6. for(;h--;addr+=30)
  7. {
  8. data=*sprite++;
  9. if(mode==SPRT_AND) *(long*)addr&=~((long)~data<<cnt);
  10. else
  11. {
  12. d1=(long)data<<cnt;
  13. if(mode==SPRT_XOR) *(long*)addr^=d1;
  14. else *(long*)addr|=d1;
  15. }
  16. }
  17. }