+static int EmulateScanFull16_176Interpolate(unsigned int scan,unsigned short *data)\r
+{\r
+ unsigned short *ps=NULL,*end=NULL;\r
+ unsigned char *pd=NULL;\r
+ int xpitch=0;\r
+ TInt retValue = 0;\r
+ if(scan<224)\r
+ retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);\r
+ scan = gLineTable[scan];\r
+ \r
+ if ((int)scan< 0) return 0; // Out of range\r
+ if ((int)scan>=176) return 0; // Out of range\r
+ \r
+ pd=Targ.screen+gLineOffsets[scan];//Targ.screen+scan*2+Targ.screen_offset+8;\r
+ \r
+ xpitch=-Targ.scanline_length;\r
+ if((Pico.video.reg[12]&1))\r
+ {\r
+ ps=data; end=ps+320;\r
+ // Reduce 14 pixels into 9\r
+ do\r
+ {\r
+ *(unsigned short *)pd=gColorMapTab[ps[0]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[1]]+gColorMapTab[ps[2]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[3]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[4]]+gColorMapTab[ps[5]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[6]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[7]]+gColorMapTab[ps[8]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[9]]+gColorMapTab[ps[10]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[11]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[12]]+gColorMapTab[ps[13]])>>1);pd+=xpitch;\r
+ ps+=14;\r
+ }\r
+ while (ps<end);\r
+ }\r
+ else\r
+ {\r
+ ps=data+32; end=ps+256;\r
+ \r
+ // Reduce 5 pixels into 4\r
+ do\r
+ {\r
+ *(unsigned short *)pd=gColorMapTab[ps[0]];pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[1]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[2]]+gColorMapTab[ps[3]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[4]];pd+=xpitch;\r
+ ps+=5;\r
+ }\r
+ while (ps<end);\r
+ }\r
+ return retValue;\r
+}\r
+\r
+static int EmulateScanFullRight16_176Interpolate(unsigned int scan,unsigned short *data)\r
+{\r
+ unsigned short *ps=NULL,*end=NULL;\r
+ unsigned char *pd=NULL;\r
+ int xpitch=0;\r
+ int retValue = 0;\r
+ if(scan<224)\r
+ retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);\r
+ scan = gLineTable[scan];\r
+\r
+ if ((int)scan< 0) return 0; // Out of range\r
+ if ((int)scan>=176) return 0; // Out of range\r
+ \r
+ pd=Targ.screen+gLineOffsets[scan];//Targ.screen+Targ.scanline_length-scan*2-8;\r
+ \r
+ xpitch=+Targ.scanline_length;\r
+ if((Pico.video.reg[12]&1))\r
+ {\r
+ ps=data; end=ps+320;\r
+ // Reduce 14 pixels into 9\r
+ do\r
+ {\r
+ *(unsigned short *)pd=gColorMapTab[ps[0]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[1]]+gColorMapTab[ps[2]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[3]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[4]]+gColorMapTab[ps[5]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[6]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[7]]+gColorMapTab[ps[8]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[9]]+gColorMapTab[ps[10]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[11]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[12]]+gColorMapTab[ps[13]])>>1);pd+=xpitch;\r
+ ps+=14;\r
+ }\r
+ while (ps<end);\r
+ }\r
+ else\r
+ {\r
+ ps=data+32; end=ps+256;\r
+ // Reduce 5 pixels into 4\r
+ do\r
+ {\r
+ *(unsigned short *)pd=gColorMapTab[ps[0]];pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[1]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[2]]+gColorMapTab[ps[3]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[4]];pd+=xpitch;\r
+ ps+=5;\r
+ }\r
+ while (ps<end);\r
+ }\r
+ \r
+ return retValue;\r
+}\r
+\r
+\r
+\r
+static int EmulateScan16_176Interpolate(unsigned int scan,unsigned short *data)\r
+{\r
+ unsigned short *ps=NULL,*end=NULL;\r
+ unsigned char *pd=NULL;\r
+ int xpitch=0;\r
+ int retValue = 0;\r
+ if(scan<224)\r
+ retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);\r
+ scan = gLineTable[scan];\r
+ \r
+ if ((int)scan< 0) return 0; // Out of range\r
+ if ((int)scan>=176) return 0; // Out of range\r
+ \r
+ pd=Targ.screen+gLineOffsets[scan];//Targ.screen+scan*Targ.scanline_length;\r
+ \r
+ xpitch=2;\r
+ if((Pico.video.reg[12]&1))\r
+ {\r
+ ps=data; end=ps+320;\r
+ // Reduce 9 pixels into 5\r
+ do\r
+ {\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[0]]+gColorMapTab[ps[1]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[2]]+gColorMapTab[ps[3]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[4]]+gColorMapTab[ps[5]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[6]]+gColorMapTab[ps[7]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[8]];pd+=xpitch;\r
+ ps+=9;\r
+ }\r
+ while (ps<end);\r
+ } \r
+ else\r
+ {\r
+ ps=data+32; end=ps+256;\r
+ // Reduce 10 pixels into 7\r
+ do\r
+ {\r
+ *(unsigned short *)pd=gColorMapTab[ps[0]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[1]]+gColorMapTab[ps[2]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[3]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[4]]+gColorMapTab[ps[5]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[6]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[7]]+gColorMapTab[ps[8]])>>1);pd+=xpitch; \r
+ *(unsigned short *)pd=gColorMapTab[ps[9]];pd+=xpitch;\r
+ ps+=10;\r
+ }\r
+ while (ps<end); \r
+ }\r
+ \r
+ return retValue;\r
+}\r
+\r
+static int EmulateStretchScan16_176Interpolate(unsigned int scan,unsigned short *data)\r
+{\r
+ unsigned short *ps=NULL,*end=NULL;\r
+ unsigned char *pd=NULL;\r
+ int xpitch=0;\r
+ int retValue = 0;\r
+ if(scan<224)\r
+ retValue = 1-(gLineTable[scan+1]-gLineTable[scan]);\r
+ scan = gLineTable[scan];\r
+\r
+ if ((int)scan<0) \r
+ return 0; // Out of range\r
+ if ((int)scan>=208) \r
+ return 0; // Out of range\r
+ \r
+ pd=Targ.screen+gLineOffsets[scan];//Targ.screen+scan*Targ.scanline_length;\r
+ \r
+ xpitch=2;\r
+ if((Pico.video.reg[12]&1))\r
+ {\r
+ ps=data; end=ps+320;\r
+ // Reduce 9 pixels into 5\r
+ do\r
+ {\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[0]]+gColorMapTab[ps[1]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[2]]+gColorMapTab[ps[3]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[4]]+gColorMapTab[ps[5]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[6]]+gColorMapTab[ps[7]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[8]];pd+=xpitch;\r
+ ps+=9;\r
+ }\r
+ while (ps<end);\r
+ }\r
+ else\r
+ {\r
+ ps=data+32; end=ps+256;\r
+ // Reduce 10 pixels into 7\r
+ do\r
+ {\r
+ *(unsigned short *)pd=gColorMapTab[ps[0]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[1]]+gColorMapTab[ps[2]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[3]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[4]]+gColorMapTab[ps[5]])>>1);pd+=xpitch;\r
+ *(unsigned short *)pd=gColorMapTab[ps[6]];pd+=xpitch;\r
+ *(unsigned short *)pd=(unsigned short)((gColorMapTab[ps[7]]+gColorMapTab[ps[8]])>>1);pd+=xpitch; \r
+ *(unsigned short *)pd=gColorMapTab[ps[9]];pd+=xpitch;\r
+ ps+=10;\r
+ }\r
+ while (ps<end); \r
+ }\r
+ \r
+ return retValue;\r
+}\r