sprite32.c 622 B

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