+++ /dev/null
-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