Added 0.030 of PicoDrive and moved license files into root
[cyclone68000.git] / Pico / Utils.cpp
1 \r
2 #include "PicoInt.h"\r
3 \r
4 int PicuAnd=0xf7de;\r
5 \r
6 // Quick low-quality conversion of 320 to 176:\r
7 int PicuQuick(unsigned short *dest,unsigned short *src)\r
8 {\r
9   unsigned short *end=NULL;\r
10 \r
11   src+=13; end=src+290;\r
12   dest++;\r
13 \r
14   do\r
15   {\r
16     *dest++=*src++;\r
17     *dest++=*src; src+=2;\r
18     *dest++=*src; src+=2;\r
19     *dest++=*src++;\r
20     *dest++=*src; src+=2;\r
21     *dest++=*src; src+=2;\r
22   }\r
23   while (src<end);\r
24 \r
25   return 0;\r
26 }\r
27 \r
28 // Shrink the pixels in src/srcLen, to the screen line pointed to by dest/destLen\r
29 int PicuShrink(unsigned short *dest,int destLen,unsigned short *src,int srcLen)\r
30 {\r
31   unsigned short *end=NULL;\r
32   int bias=0,pa=0,sub=0;\r
33 \r
34   end=dest+destLen;\r
35   sub=srcLen-destLen;\r
36 \r
37   do\r
38   {\r
39     pa=*src++; bias-=sub;\r
40     if (bias<0) { pa+=*src++; pa>>=1; bias+=destLen; }\r
41     *dest++=(unsigned short)pa;\r
42 \r
43     pa=*src++; bias-=sub;\r
44     if (bias<0) { pa+=*src++; pa>>=1; bias+=destLen; }\r
45     *dest++=(unsigned short)pa;\r
46   }\r
47   while (dest<end);\r
48   \r
49   return 0;\r
50 }\r
51 \r
52 int PicuMerge(unsigned short *dest,int destLen,unsigned short *src,int srcLen)\r
53 {\r
54   unsigned short *end=NULL;\r
55   int bias=0,pa=0,mask=PicuAnd,sub=0;\r
56 \r
57   end=dest+destLen;\r
58   sub=srcLen-destLen;\r
59 \r
60   do\r
61   {\r
62     pa=*src++; bias-=sub;\r
63     if (bias<0) { pa+=*src++; pa>>=1; bias+=destLen; }\r
64     pa&=mask; pa+=(*dest)&mask; pa>>=1;\r
65     *dest++=(unsigned short)pa;\r
66 \r
67     pa=*src++; bias-=sub;\r
68     if (bias<0) { pa+=*src++; pa>>=1; bias+=destLen; }\r
69     pa&=mask; pa+=(*dest)&mask; pa>>=1;\r
70     *dest++=(unsigned short)pa;\r
71   }\r
72   while (dest<end);\r
73   \r
74   return 0;\r
75 }\r
76 \r