1 static int EmulateScanFull16_176(unsigned int scan,unsigned short *data)
\r
3 unsigned short *ps=NULL,*end=NULL;
\r
4 unsigned char *pd=NULL;
\r
8 retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);
\r
9 scan = gLineTable[scan];
\r
11 if ((int)scan< 0) return 0; // Out of range
\r
12 if ((int)scan>=176) return 0; // Out of range
\r
14 pd=Targ.screen+gLineOffsets[scan];//Targ.screen+scan*2+Targ.screen_offset+8;
\r
16 xpitch=-Targ.scanline_length;
\r
17 if(Pico.video.reg[12]&1)
\r
19 ps=data; end=ps+320;
\r
20 // Reduce 14 pixels into 9
\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
38 ps=data+32; end=ps+256;
\r
40 // Reduce 5 pixels into 4
\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
54 static int EmulateScanFullRight16_176(unsigned int scan,unsigned short *data)
\r
56 unsigned short *ps=NULL,*end=NULL;
\r
57 unsigned char *pd=NULL;
\r
61 retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);
\r
62 scan = gLineTable[scan];
\r
64 if ((int)scan< 0) return 0; // Out of range
\r
65 if ((int)scan>=176) return 0; // Out of range
\r
67 pd=Targ.screen+gLineOffsets[scan];//Targ.screen+Targ.scanline_length-scan*2-8;
\r
69 xpitch=+Targ.scanline_length;
\r
70 if(Pico.video.reg[12]&1)
\r
72 ps=data; end=ps+320;
\r
73 // Reduce 14 pixels into 9
\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
91 ps=data+32; end=ps+256;
\r
92 // Reduce 5 pixels into 4
\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
109 static int EmulateScan16_176(unsigned int scan,unsigned short *data)
\r
112 unsigned short *ps=NULL,*end=NULL;
\r
113 unsigned char *pd=NULL;
\r
117 retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);
\r
118 scan = gLineTable[scan];
\r
120 if ((int)scan< 0) return 0; // Out of range
\r
121 if ((int)scan>=176) return 0; // Out of range
\r
123 pd=Targ.screen+gLineOffsets[scan];//Targ.screen+scan*Targ.scanline_length;
\r
126 if(Pico.video.reg[12]&1)
\r
128 ps=data; end=ps+320;
\r
129 // Reduce 9 pixels into 5
\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
143 ps=data+32; end=ps+256;
\r
144 // Reduce 10 pixels into 7
\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
162 static int EmulateStretchScan16_176(unsigned int scan,unsigned short *data)
\r
164 unsigned short *ps=NULL,*end=NULL;
\r
165 unsigned char *pd=NULL;
\r
169 retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);
\r
170 scan = gLineTable[scan];
\r
173 return 0; // Out of range
\r
174 if ((int)scan>=208)
\r
175 return 0; // Out of range
\r
177 pd=Targ.screen+gLineOffsets[scan];//Targ.screen+scan*Targ.scanline_length;
\r
180 if(Pico.video.reg[12]&1)
\r
182 ps=data; end=ps+320;
\r
183 // Reduce 9 pixels into 5
\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
197 ps=data+32; end=ps+256;
\r
198 // Reduce 10 pixels into 7
\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
218 static int EmulateStretchScan16_320(unsigned int scan,unsigned short *data)
\r
220 unsigned short *ps=NULL,*end=NULL;
\r
221 unsigned char *pd=NULL;
\r
225 retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);
\r
226 scan = gLineTable[scan];
\r
229 return 0; // Out of range
\r
230 if ((int)scan>=208)
\r
231 return 0; // Out of range
\r
233 pd=Targ.screen+gLineOffsets[scan];//Targ.screen+scan*Targ.scanline_length;
\r
236 ps=data+gFullOffset; end=ps+176;
\r
237 /* if(!(Pico.video.reg[12]&1))
\r
239 ps=data+gFullOffset; end=ps+176;
\r
243 ps=data+32+gFullOffset; end=ps+176;
\r
246 // Draw 8 pixels in a row
\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