ff0b11190e22b24a1ad9e6e81f2f4c7c0b9dfd94
[cyclone68000.git] / Pico / Utils.cpp
1 \r
2 // This file is part of the PicoDrive Megadrive Emulator\r
3 \r
4 // This code is licensed under the GNU General Public License version 2.0 and the MAME License.\r
5 // You can choose the license that has the most advantages for you.\r
6 \r
7 // SVN repository can be found at http://code.google.com/p/cyclone68000/\r
8 \r
9 #include "PicoInt.h"\r
10 \r
11 int PicuAnd=0xf7de;\r
12 \r
13 // Quick low-quality conversion of 320 to 176:\r
14 int PicuQuick(unsigned short *dest,unsigned short *src)\r
15 {\r
16   unsigned short *end=NULL;\r
17 \r
18   src+=13; end=src+290;\r
19   dest++;\r
20 \r
21   do\r
22   {\r
23     *dest++=*src++;\r
24     *dest++=*src; src+=2;\r
25     *dest++=*src; src+=2;\r
26     *dest++=*src++;\r
27     *dest++=*src; src+=2;\r
28     *dest++=*src; src+=2;\r
29   }\r
30   while (src<end);\r
31 \r
32   return 0;\r
33 }\r
34 \r
35 // Shrink the pixels in src/srcLen, to the screen line pointed to by dest/destLen\r
36 int PicuShrink(unsigned short *dest,int destLen,unsigned short *src,int srcLen)\r
37 {\r
38   unsigned short *end=NULL;\r
39   int bias=0,pa=0,sub=0;\r
40 \r
41   end=dest+destLen;\r
42   sub=srcLen-destLen;\r
43 \r
44   do\r
45   {\r
46     pa=*src++; bias-=sub;\r
47     if (bias<0) { pa+=*src++; pa>>=1; bias+=destLen; }\r
48     *dest++=(unsigned short)pa;\r
49 \r
50     pa=*src++; bias-=sub;\r
51     if (bias<0) { pa+=*src++; pa>>=1; bias+=destLen; }\r
52     *dest++=(unsigned short)pa;\r
53   }\r
54   while (dest<end);\r
55   \r
56   return 0;\r
57 }\r
58 \r
59 int PicuMerge(unsigned short *dest,int destLen,unsigned short *src,int srcLen)\r
60 {\r
61   unsigned short *end=NULL;\r
62   int bias=0,pa=0,mask=PicuAnd,sub=0;\r
63 \r
64   end=dest+destLen;\r
65   sub=srcLen-destLen;\r
66 \r
67   do\r
68   {\r
69     pa=*src++; bias-=sub;\r
70     if (bias<0) { pa+=*src++; pa>>=1; bias+=destLen; }\r
71     pa&=mask; pa+=(*dest)&mask; pa>>=1;\r
72     *dest++=(unsigned short)pa;\r
73 \r
74     pa=*src++; bias-=sub;\r
75     if (bias<0) { pa+=*src++; pa>>=1; bias+=destLen; }\r
76     pa&=mask; pa+=(*dest)&mask; pa>>=1;\r
77     *dest++=(unsigned short)pa;\r
78   }\r
79   while (dest<end);\r
80   \r
81   return 0;\r
82 }\r
83 \r