initial import
[picodrive.git] / platform / linux / blit.c
diff --git a/platform/linux/blit.c b/platform/linux/blit.c
new file mode 100644 (file)
index 0000000..a4981d9
--- /dev/null
@@ -0,0 +1,81 @@
+
+// Convert 0000bbb0 ggg0rrr0 0000bbb0 ggg0rrr0
+// to      00000000 rrr00000 ggg00000 bbb00000 ...
+
+void vidConvCpyRGB32  (void *to, void *from, int pixels)
+{
+       unsigned short *ps = from;
+       unsigned int   *pd = to;
+
+       for (; pixels; pixels--, ps++, pd++)
+       {
+               *pd = ((*ps<<20)&0xe00000) | ((*ps<<8)&0xe000) | ((*ps>>4)&0xe0);
+               *pd |= *pd >> 3;
+       }
+}
+
+void vidConvCpyRGB32sh(void *to, void *from, int pixels)
+{
+       unsigned short *ps = from;
+       unsigned int   *pd = to;
+
+       for (; pixels; pixels--, ps++, pd++)
+       {
+               *pd = ((*ps<<20)&0xe00000) | ((*ps<<8)&0xe000) | ((*ps>>4)&0xe0);
+               *pd >>= 1;
+               *pd |= *pd >> 3;
+       }
+}
+
+void vidConvCpyRGB32hi(void *to, void *from, int pixels)
+{
+       unsigned short *ps = from;
+       unsigned int   *pd = to;
+
+       for (; pixels; pixels--, ps++, pd++)
+       {
+               *pd = ((*ps<<20)&0xe00000) | ((*ps<<8)&0xe000) | ((*ps>>4)&0xe0);
+               continue;
+               *pd += 0x00404040;
+               if (*pd & 0x01000000) *pd |= 0x00e00000;
+               if (*pd & 0x00010000) *pd |= 0x0000e000;
+               if (*pd & 0x00000100) *pd |= 0x000000e0;
+               *pd &= 0x00e0e0e0;
+               *pd |= *pd >> 3;
+       }
+}
+
+void vidCpyM2_40col(void *dest, void *src)
+{
+       unsigned char *pd = dest, *ps = src;
+       int i, u;
+
+       for (i = 0; i < 224; i++)
+       {
+               ps += 8;
+               for (u = 0; u < 320; u++)
+                       *pd++ = *ps++;
+       }
+}
+
+void vidCpyM2_32col(void *dest, void *src)
+{
+       unsigned char *pd = dest, *ps = src;
+       int i, u;
+
+       for (i = 0; i < 224; i++)
+       {
+               ps += 8;
+               pd += 32;
+               for (u = 0; u < 256; u++)
+                       *pd++ = *ps++;
+               ps += 64;
+               pd += 32;
+       }
+}
+
+void vidCpyM2_32col_nobord(void *dest, void *src)
+{
+       vidCpyM2_32col(dest, src);
+}
+