initial import
[picodrive.git] / platform / s60 / normalvideo.inl
CommitLineData
cc68a136 1static int EmulateScanFull16_176(unsigned int scan,unsigned short *data)\r
2{\r
3 unsigned short *ps=NULL,*end=NULL;\r
4 unsigned char *pd=NULL;\r
5 int xpitch=0;\r
6 TInt retValue = 0;\r
7 if(scan<224)\r
8 retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);\r
9 scan = gLineTable[scan];\r
10 \r
11 if ((int)scan< 0) return 0; // Out of range\r
12 if ((int)scan>=176) return 0; // Out of range\r
13 \r
14 pd=Targ.screen+gLineOffsets[scan];//Targ.screen+scan*2+Targ.screen_offset+8;\r
15 \r
16 xpitch=-Targ.scanline_length;\r
17 if(Pico.video.reg[12]&1)\r
18 {\r
19 ps=data; end=ps+320;\r
20 // Reduce 14 pixels into 9\r
21 do\r
22 {\r
23 *(unsigned short *)pd=gColorMapTab[ps[0]];pd+=xpitch;\r
24 *(unsigned short *)pd=gColorMapTab[ps[1]];pd+=xpitch;\r
25 *(unsigned short *)pd=gColorMapTab[ps[3]];pd+=xpitch;\r
26 *(unsigned short *)pd=gColorMapTab[ps[4]];pd+=xpitch;\r
27 *(unsigned short *)pd=gColorMapTab[ps[6]];pd+=xpitch;\r
28 *(unsigned short *)pd=gColorMapTab[ps[7]];pd+=xpitch;\r
29 *(unsigned short *)pd=gColorMapTab[ps[9]];pd+=xpitch;\r
30 *(unsigned short *)pd=gColorMapTab[ps[11]];pd+=xpitch;\r
31 *(unsigned short *)pd=gColorMapTab[ps[12]];pd+=xpitch;\r
32 ps+=14;\r
33 }\r
34 while (ps<end);\r
35 }\r
36 else\r
37 {\r
38 ps=data+32; end=ps+256;\r
39 \r
40 // Reduce 5 pixels into 4\r
41 do\r
42 {\r
43 *(unsigned short *)pd=gColorMapTab[ps[0]];pd+=xpitch;\r
44 *(unsigned short *)pd=gColorMapTab[ps[1]];pd+=xpitch;\r
45 *(unsigned short *)pd=gColorMapTab[ps[2]];pd+=xpitch;\r
46 *(unsigned short *)pd=gColorMapTab[ps[4]];pd+=xpitch;\r
47 ps+=5;\r
48 }\r
49 while (ps<end);\r
50 }\r
51 return retValue;\r
52}\r
53\r
54static int EmulateScanFullRight16_176(unsigned int scan,unsigned short *data)\r
55{\r
56 unsigned short *ps=NULL,*end=NULL;\r
57 unsigned char *pd=NULL;\r
58 int xpitch=0;\r
59 int retValue = 0;\r
60 if(scan<224)\r
61 retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);\r
62 scan = gLineTable[scan];\r
63\r
64 if ((int)scan< 0) return 0; // Out of range\r
65 if ((int)scan>=176) return 0; // Out of range\r
66 \r
67 pd=Targ.screen+gLineOffsets[scan];//Targ.screen+Targ.scanline_length-scan*2-8;\r
68 \r
69 xpitch=+Targ.scanline_length;\r
70 if(Pico.video.reg[12]&1)\r
71 {\r
72 ps=data; end=ps+320;\r
73 // Reduce 14 pixels into 9\r
74 do\r
75 {\r
76 *(unsigned short *)pd=gColorMapTab[ps[0]];pd+=xpitch;\r
77 *(unsigned short *)pd=gColorMapTab[ps[1]];pd+=xpitch;\r
78 *(unsigned short *)pd=gColorMapTab[ps[3]];pd+=xpitch;\r
79 *(unsigned short *)pd=gColorMapTab[ps[4]];pd+=xpitch;\r
80 *(unsigned short *)pd=gColorMapTab[ps[6]];pd+=xpitch;\r
81 *(unsigned short *)pd=gColorMapTab[ps[7]];pd+=xpitch;\r
82 *(unsigned short *)pd=gColorMapTab[ps[9]];pd+=xpitch;\r
83 *(unsigned short *)pd=gColorMapTab[ps[11]];pd+=xpitch;\r
84 *(unsigned short *)pd=gColorMapTab[ps[12]];pd+=xpitch;\r
85 ps+=14;\r
86 }\r
87 while (ps<end);\r
88 }\r
89 else\r
90 {\r
91 ps=data+32; end=ps+256;\r
92 // Reduce 5 pixels into 4\r
93 do\r
94 {\r
95 *(unsigned short *)pd=gColorMapTab[ps[0]];pd+=xpitch;\r
96 *(unsigned short *)pd=gColorMapTab[ps[1]];pd+=xpitch;\r
97 *(unsigned short *)pd=gColorMapTab[ps[2]];pd+=xpitch;\r
98 *(unsigned short *)pd=gColorMapTab[ps[4]];pd+=xpitch;\r
99 ps+=5;\r
100 }\r
101 while (ps<end);\r
102 }\r
103 \r
104 return retValue;\r
105}\r
106\r
107\r
108\r
109static int EmulateScan16_176(unsigned int scan,unsigned short *data)\r
110{\r
111 // int len=0;\r
112 unsigned short *ps=NULL,*end=NULL;\r
113 unsigned char *pd=NULL;\r
114 int xpitch=0;\r
115 int retValue = 0;\r
116 if(scan<224)\r
117 retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);\r
118 scan = gLineTable[scan];\r
119 \r
120 if ((int)scan< 0) return 0; // Out of range\r
121 if ((int)scan>=176) return 0; // Out of range\r
122 \r
123 pd=Targ.screen+gLineOffsets[scan];//Targ.screen+scan*Targ.scanline_length;\r
124 \r
125 xpitch=2;\r
126 if(Pico.video.reg[12]&1)\r
127 {\r
128 ps=data; end=ps+320;\r
129 // Reduce 9 pixels into 5\r
130 do\r
131 {\r
132 *(unsigned short *)pd=gColorMapTab[ps[0]];pd+=xpitch;\r
133 *(unsigned short *)pd=gColorMapTab[ps[2]];pd+=xpitch;\r
134 *(unsigned short *)pd=gColorMapTab[ps[4]];pd+=xpitch;\r
135 *(unsigned short *)pd=gColorMapTab[ps[6]];pd+=xpitch;\r
136 *(unsigned short *)pd=gColorMapTab[ps[8]];pd+=xpitch;\r
137 ps+=9;\r
138 }\r
139 while (ps<end);\r
140 } \r
141 else\r
142 {\r
143 ps=data+32; end=ps+256;\r
144 // Reduce 10 pixels into 7\r
145 do\r
146 {\r
147 *(unsigned short *)pd=gColorMapTab[ps[0]];pd+=xpitch;\r
148 *(unsigned short *)pd=gColorMapTab[ps[1]];pd+=xpitch;\r
149 *(unsigned short *)pd=gColorMapTab[ps[3]];pd+=xpitch;\r
150 *(unsigned short *)pd=gColorMapTab[ps[4]];pd+=xpitch;\r
151 *(unsigned short *)pd=gColorMapTab[ps[6]];pd+=xpitch;\r
152 *(unsigned short *)pd=gColorMapTab[ps[7]];pd+=xpitch; \r
153 *(unsigned short *)pd=gColorMapTab[ps[9]];pd+=xpitch;\r
154 ps+=10;\r
155 }\r
156 while (ps<end); \r
157 }\r
158 \r
159 return retValue;\r
160}\r
161\r
162static int EmulateStretchScan16_176(unsigned int scan,unsigned short *data)\r
163{\r
164 unsigned short *ps=NULL,*end=NULL;\r
165 unsigned char *pd=NULL;\r
166 int xpitch=0;\r
167 int retValue = 0;\r
168 if(scan<224)\r
169 retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);\r
170 scan = gLineTable[scan];\r
171\r
172 if ((int)scan<0) \r
173 return 0; // Out of range\r
174 if ((int)scan>=208) \r
175 return 0; // Out of range\r
176 \r
177 pd=Targ.screen+gLineOffsets[scan];//Targ.screen+scan*Targ.scanline_length;\r
178 \r
179 xpitch=2;\r
180 if(Pico.video.reg[12]&1)\r
181 {\r
182 ps=data; end=ps+320;\r
183 // Reduce 9 pixels into 5\r
184 do\r
185 {\r
186 *(unsigned short *)pd=gColorMapTab[ps[0]];pd+=xpitch;\r
187 *(unsigned short *)pd=gColorMapTab[ps[2]];pd+=xpitch;\r
188 *(unsigned short *)pd=gColorMapTab[ps[4]];pd+=xpitch;\r
189 *(unsigned short *)pd=gColorMapTab[ps[6]];pd+=xpitch;\r
190 *(unsigned short *)pd=gColorMapTab[ps[8]];pd+=xpitch;\r
191 ps+=9;\r
192 }\r
193 while (ps<end);\r
194 }\r
195 else\r
196 {\r
197 ps=data+32; end=ps+256;\r
198 // Reduce 10 pixels into 7\r
199 do\r
200 {\r
201 *(unsigned short *)pd=gColorMapTab[ps[0]];pd+=xpitch;\r
202 *(unsigned short *)pd=gColorMapTab[ps[1]];pd+=xpitch;\r
203 *(unsigned short *)pd=gColorMapTab[ps[3]];pd+=xpitch;\r
204 *(unsigned short *)pd=gColorMapTab[ps[4]];pd+=xpitch;\r
205 *(unsigned short *)pd=gColorMapTab[ps[6]];pd+=xpitch;\r
206 *(unsigned short *)pd=gColorMapTab[ps[7]];pd+=xpitch; \r
207 *(unsigned short *)pd=gColorMapTab[ps[9]];pd+=xpitch;\r
208 ps+=10;\r
209 }\r
210 while (ps<end); \r
211 }\r
212 \r
213 return retValue;\r
214}\r
215\r
216\r
217\r
218static int EmulateStretchScan16_320(unsigned int scan,unsigned short *data)\r
219{\r
220 unsigned short *ps=NULL,*end=NULL;\r
221 unsigned char *pd=NULL;\r
222 int xpitch=0;\r
223 int retValue = 0;\r
224 if(scan<224)\r
225 retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);\r
226 scan = gLineTable[scan];\r
227\r
228 if ((int)scan<0) \r
229 return 0; // Out of range\r
230 if ((int)scan>=208) \r
231 return 0; // Out of range\r
232 \r
233 pd=Targ.screen+gLineOffsets[scan];//Targ.screen+scan*Targ.scanline_length;\r
234 \r
235 xpitch=2;\r
236 ps=data+gFullOffset; end=ps+176;\r
237/* if(!(Pico.video.reg[12]&1))\r
238 {\r
239 ps=data+gFullOffset; end=ps+176;\r
240 }\r
241 else\r
242 {\r
243 ps=data+32+gFullOffset; end=ps+176;\r
244 }*/\r
245\r
246 // Draw 8 pixels in a row\r
247 do\r
248 {\r
249 *(unsigned short *)pd=gColorMapTab[ps[0]];pd+=xpitch;\r
250 *(unsigned short *)pd=gColorMapTab[ps[1]];pd+=xpitch;\r
251 *(unsigned short *)pd=gColorMapTab[ps[2]];pd+=xpitch;\r
252 *(unsigned short *)pd=gColorMapTab[ps[3]];pd+=xpitch;\r
253 *(unsigned short *)pd=gColorMapTab[ps[4]];pd+=xpitch;\r
254 *(unsigned short *)pd=gColorMapTab[ps[5]];pd+=xpitch;\r
255 *(unsigned short *)pd=gColorMapTab[ps[6]];pd+=xpitch;\r
256 *(unsigned short *)pd=gColorMapTab[ps[7]];pd+=xpitch;\r
257 ps+=8;\r
258 }\r
259 while (ps<end);\r
260\r
261 return retValue;\r
262}\r
263\r
264\r
265\r