+ int gp2x_mode = 16;\r
+ int renderer = get_renderer();\r
+\r
+ PicoIn.opt &= ~(POPT_ALT_RENDERER|POPT_DIS_32C_BORDER|POPT_EN_SOFTSCALE);\r
+ if (currentConfig.scaling == EOPT_SCALE_SW) {\r
+ PicoIn.opt |= POPT_EN_SOFTSCALE;\r
+ PicoIn.filter = EOPT_FILTER_BILINEAR2;\r
+ } else if (currentConfig.scaling == EOPT_SCALE_HW)\r
+ // hw scaling, render without any padding\r
+ PicoIn.opt |= POPT_DIS_32C_BORDER;\r
+\r
+ switch (renderer) {\r
+ case RT_16BIT:\r
+ PicoDrawSetOutFormat(PDF_RGB555, 0);\r
+ PicoDrawSetOutBuf(g_screen_ptr, g_screen_width * 2);\r
+ break;\r
+ case RT_8BIT_ACC:\r
+ PicoDrawSetOutFormat(PDF_8BIT, 0);\r
+ PicoDrawSetOutBuf(g_screen_ptr, g_screen_width);\r
+ gp2x_mode = 8;\r
+ break;\r
+ case RT_8BIT_FAST:\r
+ PicoIn.opt |= POPT_ALT_RENDERER;\r
+ PicoDrawSetOutFormat(PDF_NONE, 0);\r
+ vidcpy8bit = vidcpy_8bit;\r
+ gp2x_mode = 8;\r
+ break;\r
+ default:\r
+ printf("bad renderer\n");\r
+ break;\r
+ }\r
+\r
+ if (PicoIn.AHW & PAHW_32X) {\r
+ // Wiz 16bit is an exception, uses line rendering due to rotation mess\r
+ if (renderer == RT_16BIT && (currentConfig.EmuOpt & EOPT_WIZ_TEAR_FIX)) {\r
+ PicoDrawSetOutFormat(PDF_RGB555, 1);\r
+ }\r
+ PicoDrawSetOutBuf(g_screen_ptr, g_screen_width * 2);\r
+ gp2x_mode = 16;\r
+ }\r
+\r
+ emu_scan_begin = NULL;\r
+ emu_scan_end = NULL;\r
+\r
+ if (currentConfig.EmuOpt & EOPT_WIZ_TEAR_FIX) {\r
+ if ((PicoIn.AHW & PAHW_32X) || renderer == RT_16BIT) {\r
+ emu_scan_begin = EmuScanBegin16_rot;\r
+ emu_scan_end = EmuScanEnd16_rot;\r
+ memset(rot_buff, 0, 320*4*2);\r
+ }\r
+ else if (renderer == RT_8BIT_ACC) {\r
+ emu_scan_begin = EmuScanBegin8_rot;\r
+ emu_scan_end = EmuScanEnd8_rot;\r
+ memset(rot_buff, 0xe0, 320*4);\r
+ }\r
+ else if (renderer == RT_8BIT_FAST)\r
+ vidcpy8bit = vidcpy_8bit_rot;\r
+ }\r
+\r
+ PicoDrawSetCallbacks(emu_scan_begin, emu_scan_end);\r
+\r
+ if (is_16bit_mode())\r
+ osd_text = (currentConfig.EmuOpt & EOPT_WIZ_TEAR_FIX) ? osd_text16_rot : emu_osd_text16;\r
+ else\r
+ osd_text = (currentConfig.EmuOpt & EOPT_WIZ_TEAR_FIX) ? osd_text8_rot : osd_text8;\r
+\r
+ gp2x_video_wait_vsync();\r
+ if (!is_16bit_mode()) {\r
+ // setup pal for 8-bit modes\r
+ localPal[0xc0] = 0x0000c000; // MCD LEDs\r
+ localPal[0xd0] = 0x00c00000;\r
+ localPal[0xe0] = 0x00000000; // reserved pixels for OSD\r
+ localPal[0xf0] = 0x00ffffff;\r
+ gp2x_video_setpalette(localPal, 0x100);\r