Added 0.030 of PicoDrive and moved license files into root
[cyclone68000.git] / Pico / Utils.cpp
diff --git a/Pico/Utils.cpp b/Pico/Utils.cpp
new file mode 100644 (file)
index 0000000..a07e9c6
--- /dev/null
@@ -0,0 +1,76 @@
+\r
+#include "PicoInt.h"\r
+\r
+int PicuAnd=0xf7de;\r
+\r
+// Quick low-quality conversion of 320 to 176:\r
+int PicuQuick(unsigned short *dest,unsigned short *src)\r
+{\r
+  unsigned short *end=NULL;\r
+\r
+  src+=13; end=src+290;\r
+  dest++;\r
+\r
+  do\r
+  {\r
+    *dest++=*src++;\r
+    *dest++=*src; src+=2;\r
+    *dest++=*src; src+=2;\r
+    *dest++=*src++;\r
+    *dest++=*src; src+=2;\r
+    *dest++=*src; src+=2;\r
+  }\r
+  while (src<end);\r
+\r
+  return 0;\r
+}\r
+\r
+// Shrink the pixels in src/srcLen, to the screen line pointed to by dest/destLen\r
+int PicuShrink(unsigned short *dest,int destLen,unsigned short *src,int srcLen)\r
+{\r
+  unsigned short *end=NULL;\r
+  int bias=0,pa=0,sub=0;\r
+\r
+  end=dest+destLen;\r
+  sub=srcLen-destLen;\r
+\r
+  do\r
+  {\r
+    pa=*src++; bias-=sub;\r
+    if (bias<0) { pa+=*src++; pa>>=1; bias+=destLen; }\r
+    *dest++=(unsigned short)pa;\r
+\r
+    pa=*src++; bias-=sub;\r
+    if (bias<0) { pa+=*src++; pa>>=1; bias+=destLen; }\r
+    *dest++=(unsigned short)pa;\r
+  }\r
+  while (dest<end);\r
+  \r
+  return 0;\r
+}\r
+\r
+int PicuMerge(unsigned short *dest,int destLen,unsigned short *src,int srcLen)\r
+{\r
+  unsigned short *end=NULL;\r
+  int bias=0,pa=0,mask=PicuAnd,sub=0;\r
+\r
+  end=dest+destLen;\r
+  sub=srcLen-destLen;\r
+\r
+  do\r
+  {\r
+    pa=*src++; bias-=sub;\r
+    if (bias<0) { pa+=*src++; pa>>=1; bias+=destLen; }\r
+    pa&=mask; pa+=(*dest)&mask; pa>>=1;\r
+    *dest++=(unsigned short)pa;\r
+\r
+    pa=*src++; bias-=sub;\r
+    if (bias<0) { pa+=*src++; pa>>=1; bias+=destLen; }\r
+    pa&=mask; pa+=(*dest)&mask; pa>>=1;\r
+    *dest++=(unsigned short)pa;\r
+  }\r
+  while (dest<end);\r
+  \r
+  return 0;\r
+}\r
+\r