initial import
[picodrive.git] / platform / s60 / S60v3video.inl
CommitLineData
cc68a136 1static int EmulateScanFull16(unsigned int scan,unsigned short *data)\r
2{\r
3 unsigned short *ps=NULL,*end=NULL;\r
4 unsigned short *pd=NULL;\r
5 unsigned short *pdSrc1 = NULL;\r
6 unsigned short *pdSrc2 = NULL;\r
7 int screenScan;\r
8\r
9 int index = 0;\r
10 int xpitch=0;\r
11 TInt retValue = 0;\r
12 if(scan<224)\r
13 retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);\r
14 screenScan = gLineTable[scan];\r
15 \r
16 if ((int)screenScan< 0) return 0; // Out of range\r
17 if ((int)screenScan>=Targ.view.iBr.iY) return 0; // Out of range\r
18 \r
19 pd=(unsigned short*)(Targ.screen+screenScan*2+Targ.screen_offset);\r
20 pdSrc1 = pd;\r
21 \r
22 xpitch=-(Targ.scanline_length>>1);\r
23 if((Pico.video.reg[12]&1))\r
24 {\r
25 ps=data; end=ps+320;\r
26 do\r
27 {\r
28 if(gColumnStepTable[index]>1)\r
29 {\r
30 *pd = gColorMapTab[*ps];\r
31 pd+=xpitch;\r
32 *pd = ((gColorMapTab[*ps]+gColorMapTab[*(ps+1)])>>1); \r
33 index++;\r
34 ps++;\r
35 }\r
36 else if(gColumnStepTable[index]>0)\r
37 {\r
38 *pd = gColorMapTab[*ps];\r
39 index++;\r
40 ps++; \r
41 }\r
42 else\r
43 {\r
44 *pd = ((gColorMapTab[*ps]+gColorMapTab[*(ps+1)])>>1);\r
45 ps+=2;\r
46 index+=2;\r
47 }\r
48 pd+=xpitch;\r
49 }\r
50 while (ps<end);\r
51 }\r
52 else\r
53 {\r
54 ps=data+32; end=ps+256;\r
55 \r
56 // Reduce 10 pixels into 7\r
57 do\r
58 {\r
59 if(gNarrowColumnStepTable[index]>1)\r
60 {\r
61 *pd = gColorMapTab[*ps];\r
62 pd+=xpitch;\r
63 *pd = ((gColorMapTab[*ps]+gColorMapTab[*(ps+1)])>>1); \r
64 index++;\r
65 }\r
66 else if(gNarrowColumnStepTable[index]>0)\r
67 {\r
68 *pd = gColorMapTab[*ps];\r
69 ps++;\r
70 index++;\r
71 }\r
72 else\r
73 {\r
74 *pd = ((gColorMapTab[*ps]+gColorMapTab[*(ps+1)])>>1);\r
75 ps+=2;\r
76 index+=2;\r
77 }\r
78 pd+=xpitch; \r
79 }\r
80 while (ps<end); \r
81 }\r
82\r
83 if(scan>0 && screenScan != gLineTable[scan-1]+1)\r
84 { \r
85 pdSrc2 = pdSrc1-2;\r
86 pd = pdSrc1-1;\r
87\r
88 for(TInt loop=0;loop<Targ.view.iBr.iY;loop++)\r
89 {\r
90 *pd=((*pdSrc1+*pdSrc2)>>1);\r
91 pd+=xpitch;\r
92 pdSrc1+=xpitch;\r
93 pdSrc2+=xpitch;\r
94 }\r
95 \r
96 }\r
97\r
98 return retValue;\r
99}\r
100\r
101static int EmulateScanFullRight16(unsigned int scan,unsigned short *data)\r
102{\r
103 unsigned short *ps=NULL,*end=NULL;\r
104 unsigned short *pd=NULL;\r
105 unsigned short *pdSrc1 = NULL;\r
106 unsigned short *pdSrc2 = NULL;\r
107 int screenScan;\r
108 int xpitch=0;\r
109 int retValue = 0;\r
110 int index = 0;\r
111 if(scan<224)\r
112 retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);\r
113 screenScan = gLineTable[scan];\r
114\r
115 if ((int)screenScan< 0) return 0; // Out of range\r
116 if ((int)screenScan>=Targ.view.iBr.iY) return 0; // Out of range\r
117 \r
118 pd=(unsigned short*)(Targ.screen+Targ.scanline_length-screenScan*2);\r
119 pdSrc1 = pd;\r
120 \r
121 xpitch=+(Targ.scanline_length>>1);\r
122 if((Pico.video.reg[12]&1))\r
123 {\r
124 ps=data; end=ps+320;\r
125 do\r
126 {\r
127 if(gColumnStepTable[index]>1)\r
128 {\r
129 *pd = gColorMapTab[*ps];\r
130 pd+=xpitch;\r
131 *pd = ((gColorMapTab[*ps]+gColorMapTab[*(ps+1)])>>1); \r
132 index++;\r
133 ps++;\r
134 }\r
135 else if(gColumnStepTable[index]>0)\r
136 {\r
137 *pd = gColorMapTab[*ps];\r
138 index++;\r
139 ps++; \r
140 }\r
141 else\r
142 {\r
143 *pd = ((gColorMapTab[*ps]+gColorMapTab[*(ps+1)])>>1);\r
144 ps+=2;\r
145 index+=2;\r
146 }\r
147 pd+=xpitch;\r
148 }\r
149 while (ps<end);\r
150 }\r
151 else\r
152 {\r
153 ps=data+32; end=ps+256;\r
154 \r
155 // Reduce 10 pixels into 7\r
156 do\r
157 {\r
158 if(gNarrowColumnStepTable[index]>1)\r
159 {\r
160 *pd = gColorMapTab[*ps];\r
161 pd+=xpitch;\r
162 *pd = ((gColorMapTab[*ps]+gColorMapTab[*(ps+1)])>>1); \r
163 index++;\r
164 }\r
165 else if(gNarrowColumnStepTable[index]>0)\r
166 {\r
167 *pd = gColorMapTab[*ps];\r
168 ps++;\r
169 index++;\r
170 }\r
171 else\r
172 {\r
173 *pd = ((gColorMapTab[*ps]+gColorMapTab[*(ps+1)])>>1);\r
174 ps+=2;\r
175 index+=2;\r
176 }\r
177 pd+=xpitch; \r
178 }\r
179 while (ps<end); \r
180 }\r
181\r
182 if(scan>0 && screenScan != gLineTable[scan-1]+1)\r
183 { \r
184 pdSrc2 = pdSrc1+2;\r
185 pd = pdSrc1+1;\r
186\r
187 for(TInt loop=0;loop<Targ.view.iBr.iY;loop++)\r
188 {\r
189 *pd=((*pdSrc1+*pdSrc2)>>1);\r
190 pd+=xpitch;\r
191 pdSrc1+=xpitch;\r
192 pdSrc2+=xpitch;\r
193 }\r
194 \r
195 }\r
196 \r
197 return retValue;\r
198}\r
199\r
200\r
201\r
202static int EmulateScan16(unsigned int scan,unsigned short *data)\r
203{\r
204 // int len=0;\r
205 unsigned short *ps=NULL,*end=NULL;\r
206 unsigned short *pd=NULL;\r
207 int xpitch=0;\r
208 int retValue = 0;\r
209 int index = 0;\r
210\r
211 if(scan<224)\r
212 retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);\r
213 scan = gLineTable[scan];\r
214 \r
215 if ((int)scan< 0) return 0; // Out of range\r
216 if ((int)scan>=Targ.view.iBr.iY) return 0; // Out of range\r
217 \r
218 pd=(unsigned short*)(Targ.screen+scan*Targ.scanline_length);\r
219 \r
220 xpitch=2;\r
221 if((Pico.video.reg[12]&1))\r
222 {\r
223 ps=data; end=ps+320;\r
224 do\r
225 {\r
226 if(gColumnStepTable[index]>0)\r
227 {\r
228 *pd = gColorMapTab[*ps];\r
229 ps++;\r
230 \r
231 index++;\r
232 }\r
233 else\r
234 {\r
235 *pd = ((gColorMapTab[*ps]+gColorMapTab[*(ps+1)])>>1);\r
236 ps+=2;\r
237 index+=2;\r
238 }\r
239 pd++;\r
240 \r
241 }\r
242 while (ps<end);\r
243 } \r
244 else\r
245 {\r
246 ps=data+32; end=ps+256;\r
247 // Reduce 10 pixels into 7\r
248 do\r
249 {\r
250 if(gNarrowColumnStepTable[index]>0)\r
251 {\r
252 *pd = gColorMapTab[*ps];\r
253 ps++;\r
254 index++;\r
255 }\r
256 else\r
257 {\r
258 *pd = ((gColorMapTab[*ps]+gColorMapTab[*(ps+1)])>>1);\r
259 ps+=2;\r
260 index+=2;\r
261 }\r
262 pd++; \r
263 }\r
264 while (ps<end);\r
265 \r
266 }\r
267 \r
268 return retValue;\r
269}\r
270\r
271static int EmulateStretchScan16(unsigned int scan,unsigned short *data)\r
272{\r
273 unsigned short *ps=NULL,*end=NULL;\r
274 unsigned short *pd=NULL;\r
275 unsigned short *pdSrc1 = NULL;\r
276 unsigned short *pdSrc2 = NULL;\r
277\r
278 int retValue = 0;\r
279 int index = 0;\r
280 int screenScan;\r
281 if(scan<224)\r
282 retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);\r
283 screenScan = gLineTable[scan];\r
284\r
285 if ((int)screenScan<0) \r
286 return 0; // Out of range\r
287 if ((int)screenScan>=Targ.view.iBr.iY) \r
288 return 0; // Out of range\r
289 \r
290 pd=(unsigned short*)(Targ.screen+screenScan*Targ.scanline_length);\r
291 pdSrc1 = pd;\r
292\r
293 if((Pico.video.reg[12]&1))\r
294 {\r
295 ps=data; end=ps+320; \r
296 do\r
297 {\r
298 if(gColumnStepTable[index]>1)\r
299 {\r
300 *pd = gColorMapTab[*ps];\r
301 pd++;\r
302 *pd = ((gColorMapTab[*ps]+gColorMapTab[*(ps+1)])>>1); \r
303 index++;\r
304 ps++;\r
305 }\r
306 else if(gColumnStepTable[index]>0)\r
307 {\r
308 *pd = gColorMapTab[*ps];\r
309 index++;\r
310 ps++; \r
311 }\r
312 else\r
313 {\r
314 *pd = ((gColorMapTab[*ps]+gColorMapTab[*(ps+1)])>>1);\r
315 ps+=2;\r
316 index+=2;\r
317 }\r
318 pd++;\r
319 }\r
320 while (ps<end);\r
321\r
322 \r
323 \r
324 }\r
325 else\r
326 {\r
327 ps=data+32; end=ps+256;\r
328 // Reduce 10 pixels into 7\r
329 do\r
330 {\r
331 if(gNarrowColumnStepTable[index]>1)\r
332 {\r
333 *pd = gColorMapTab[*ps];\r
334 pd++;\r
335 *pd = ((gColorMapTab[*ps]+gColorMapTab[*(ps+1)])>>1); \r
336 index++;\r
337 }\r
338 else if(gNarrowColumnStepTable[index]>0)\r
339 {\r
340 *pd = gColorMapTab[*ps];\r
341 ps++;\r
342 index++;\r
343 }\r
344 else\r
345 {\r
346 *pd = ((gColorMapTab[*ps]+gColorMapTab[*(ps+1)])>>1);\r
347 ps+=2;\r
348 index+=2;\r
349 }\r
350 pd++; \r
351 }\r
352 while (ps<end); \r
353 }\r
354\r
355 if(scan>0 && screenScan != gLineTable[scan-1]+1)\r
356 { \r
357 pdSrc2 = pdSrc1-Targ.scanline_length;\r
358 pd = pdSrc1-(Targ.scanline_length>>1);\r
359\r
360 for(TInt loop=0;loop<Targ.view.iBr.iX;loop++)\r
361 {\r
362 *pd=((*pdSrc1+*pdSrc2)>>1);\r
363 pd++;\r
364 pdSrc1++;\r
365 pdSrc2++;\r
366 }\r
367 \r
368 }\r
369 \r
370 return retValue;\r
371}\r