\r
#include <pico/pico_int.h>\r
\r
+#define LAYER_MEM_SIZE (320*240*2 * 4)\r
+\r
static struct vout_fbdev *main_fb, *layer_fb;\r
// g_layer_* - in use, g_layer_c* - configured custom\r
int g_layer_cx, g_layer_cy, g_layer_cw, g_layer_ch;\r
static int g_layer_w = 320, g_layer_h = 240;\r
static int g_osd_fps_x, g_osd_y, doing_bg_frame;\r
\r
-static const char pnd_script_base[] = "sudo -n /usr/pandora/scripts";\r
static unsigned char __attribute__((aligned(4))) fb_copy[320 * 240 * 2];\r
static void *temp_frame;\r
const char *renderer_names[] = { NULL };\r
{ KEY_S, IN_BINDTYPE_PLAYER12, GBTN_B },\r
{ KEY_D, IN_BINDTYPE_PLAYER12, GBTN_C },\r
{ KEY_ENTER, IN_BINDTYPE_PLAYER12, GBTN_START },\r
- { KEY_BACKSLASH, IN_BINDTYPE_EMU, PEVB_MENU },\r
+ { KEY_F, IN_BINDTYPE_EMU, PEVB_FF },\r
+ { KEY_BACKSPACE,IN_BINDTYPE_EMU, PEVB_FF },\r
+ { KEY_BACKSLASH,IN_BINDTYPE_EMU, PEVB_MENU },\r
{ KEY_SPACE, IN_BINDTYPE_EMU, PEVB_MENU },\r
- /* Pandora */\r
+ { KEY_LEFTCTRL, IN_BINDTYPE_EMU, PEVB_MENU },\r
{ KEY_HOME, IN_BINDTYPE_PLAYER12, GBTN_A },\r
{ KEY_PAGEDOWN, IN_BINDTYPE_PLAYER12, GBTN_B },\r
{ KEY_END, IN_BINDTYPE_PLAYER12, GBTN_C },\r
{ KEY_LEFTALT, IN_BINDTYPE_PLAYER12, GBTN_START },\r
- { KEY_RIGHTSHIFT,IN_BINDTYPE_EMU, PEVB_STATE_SAVE },\r
- { KEY_RIGHTCTRL, IN_BINDTYPE_EMU, PEVB_STATE_LOAD },\r
- { KEY_LEFTCTRL, IN_BINDTYPE_EMU, PEVB_MENU },\r
+ { KEY_1, IN_BINDTYPE_EMU, PEVB_STATE_SAVE },\r
+ { KEY_2, IN_BINDTYPE_EMU, PEVB_STATE_LOAD },\r
+ { KEY_3, IN_BINDTYPE_EMU, PEVB_SSLOT_PREV },\r
+ { KEY_4, IN_BINDTYPE_EMU, PEVB_SSLOT_NEXT },\r
+ { KEY_5, IN_BINDTYPE_EMU, PEVB_PICO_PPREV },\r
+ { KEY_6, IN_BINDTYPE_EMU, PEVB_PICO_PNEXT },\r
+ { KEY_7, IN_BINDTYPE_EMU, PEVB_PICO_SWINP },\r
{ 0, 0, 0 }\r
};\r
\r
void pemu_prep_defconfig(void)\r
{\r
defaultConfig.EmuOpt |= EOPT_VSYNC|EOPT_16BPP;\r
- defaultConfig.s_PicoOpt |= POPT_EN_MCD_GFX|POPT_EN_MCD_PSYNC;\r
+ defaultConfig.s_PicoOpt |= POPT_EN_MCD_GFX;\r
defaultConfig.scaling = SCALE_2x2_3x2;\r
}\r
\r
int i, h;\r
\r
len++;\r
+ if (x + len > g_screen_width)\r
+ len = g_screen_width - x;\r
+\r
for (h = 0; h < 8; h++) {\r
unsigned short *p;\r
p = (unsigned short *)g_screen_ptr + x + g_screen_width*(y + h);\r
- for (i = len; i; i--, p++)\r
+ for (i = len; i > 0; i--, p++)\r
*p = (*p>>2) & 0x39e7;\r
}\r
emu_text_out16(x, y, text);\r
{\r
struct omapfb_plane_info pi;\r
struct omapfb_mem_info mi;\r
+ int is_enabled;\r
+ int retval = 0;\r
int ret;\r
\r
ret = ioctl(fd, OMAPFB_QUERY_PLANE, &pi);\r
}\r
\r
/* must disable when changing stuff */\r
- if (pi.enabled) {\r
+ is_enabled = pi.enabled;\r
+ if (is_enabled) {\r
pi.enabled = 0;\r
ret = ioctl(fd, OMAPFB_SETUP_PLANE, &pi);\r
if (ret != 0)\r
perror("SETUP_PLANE");\r
+ else\r
+ is_enabled = 0;\r
}\r
\r
- mi.size = 320*240*2*4;\r
- ret = ioctl(fd, OMAPFB_SETUP_MEM, &mi);\r
- if (ret != 0) {\r
- perror("SETUP_MEM");\r
- return -1;\r
+ if (mi.size < LAYER_MEM_SIZE) {\r
+ unsigned int size_old = mi.size;\r
+\r
+ mi.size = LAYER_MEM_SIZE;\r
+ ret = ioctl(fd, OMAPFB_SETUP_MEM, &mi);\r
+ if (ret != 0) {\r
+ perror("SETUP_MEM");\r
+ fprintf(stderr, "(requested %u, had %u)\n",\r
+ mi.size, size_old);\r
+ return -1;\r
+ }\r
}\r
\r
pi.pos_x = x;\r
pi.enabled = enabled;\r
\r
ret = ioctl(fd, OMAPFB_SETUP_PLANE, &pi);\r
- if (ret != 0) {\r
+ if (ret == 0) {\r
+ is_enabled = pi.enabled;\r
+ }\r
+ else {\r
perror("SETUP_PLANE");\r
- return -1;\r
+ retval = -1;\r
}\r
\r
- return 0;\r
+ plat_target_switch_layer(1, is_enabled);\r
+\r
+ return retval;\r
}\r
\r
int pnd_setup_layer(int enabled, int x, int y, int w, int h)\r
\r
pnd_setup_layer(1, g_layer_x, g_layer_y, g_layer_w, g_layer_h);\r
vout_fbdev_clear(layer_fb);\r
- vout_fbdev_resize(layer_fb, fb_w, fb_h, 16, fb_left, fb_right, fb_top, fb_bottom, 3);\r
+ vout_fbdev_resize(layer_fb, fb_w, fb_h, 16, fb_left, fb_right, fb_top, fb_bottom, 4);\r
plat_video_flip();\r
\r
PicoDrawSetOutFormat(PDF_RGB555, 0);\r
void pemu_loop_prep(void)\r
{\r
// dirty buffers better go now than during gameplay\r
+ fflush(stdout);\r
+ fflush(stderr);\r
sync();\r
sleep(0);\r
}\r
g_menuscreen_ptr = vout_fbdev_flip(main_fb);\r
\r
w = 320; h = 240;\r
- layer_fb = vout_fbdev_init(layer_fb_name, &w, &h, 16, 3);\r
+ layer_fb = vout_fbdev_init(layer_fb_name, &w, &h, 16, 4);\r
if (layer_fb == NULL) {\r
fprintf(stderr, "couldn't init fb: %s\n", layer_fb_name);\r
goto fail0;\r
\r
pnd_menu_init();\r
\r
+ // default ROM path\r
+ strcpy(rom_fname_loaded, "/media");\r
+\r
in_evdev_init(in_evdev_defbinds);\r
in_probe();\r
plat_target_setup_input();\r