X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=platform%2Fpandora%2Fplat.c;h=a2e70eb86a2a4da5512116cad99fb8485df5c8a0;hb=93f9619ed819dee07948416c98ca2f1c70a22666;hp=396e11f2d5f4addf857c7deea804038cdcf22be7;hpb=92dfd9afa6e06a071c2e025ff7e0d4f1824a5e8d;p=picodrive.git diff --git a/platform/pandora/plat.c b/platform/pandora/plat.c index 396e11f..a2e70eb 100644 --- a/platform/pandora/plat.c +++ b/platform/pandora/plat.c @@ -33,6 +33,8 @@ #include +#define LAYER_MEM_SIZE (320*240*2 * 4) + static struct vout_fbdev *main_fb, *layer_fb; // g_layer_* - in use, g_layer_c* - configured custom int g_layer_cx, g_layer_cy, g_layer_cw, g_layer_ch; @@ -40,7 +42,6 @@ static int g_layer_x, g_layer_y; static int g_layer_w = 320, g_layer_h = 240; static int g_osd_fps_x, g_osd_y, doing_bg_frame; -static const char pnd_script_base[] = "sudo -n /usr/pandora/scripts"; static unsigned char __attribute__((aligned(4))) fb_copy[320 * 240 * 2]; static void *temp_frame; const char *renderer_names[] = { NULL }; @@ -73,6 +74,7 @@ static struct in_default_bind in_evdev_defbinds[] = { KEY_S, IN_BINDTYPE_PLAYER12, GBTN_B }, { KEY_D, IN_BINDTYPE_PLAYER12, GBTN_C }, { KEY_ENTER, IN_BINDTYPE_PLAYER12, GBTN_START }, + { KEY_R, IN_BINDTYPE_EMU, PEVB_RESET }, { KEY_F, IN_BINDTYPE_EMU, PEVB_FF }, { KEY_BACKSPACE,IN_BINDTYPE_EMU, PEVB_FF }, { KEY_BACKSLASH,IN_BINDTYPE_EMU, PEVB_MENU }, @@ -92,6 +94,36 @@ static struct in_default_bind in_evdev_defbinds[] = { 0, 0, 0 } }; +static const struct menu_keymap key_pbtn_map[] = +{ + { KEY_UP, PBTN_UP }, + { KEY_DOWN, PBTN_DOWN }, + { KEY_LEFT, PBTN_LEFT }, + { KEY_RIGHT, PBTN_RIGHT }, + /* Pandora */ + { KEY_END, PBTN_MOK }, + { KEY_PAGEDOWN, PBTN_MBACK }, + { KEY_HOME, PBTN_MA2 }, + { KEY_PAGEUP, PBTN_MA3 }, + { KEY_LEFTCTRL, PBTN_MENU }, + { KEY_RIGHTSHIFT, PBTN_L }, + { KEY_RIGHTCTRL, PBTN_R }, + /* "normal" keyboards */ + { KEY_ENTER, PBTN_MOK }, + { KEY_ESC, PBTN_MBACK }, + { KEY_SEMICOLON, PBTN_MA2 }, + { KEY_APOSTROPHE, PBTN_MA3 }, + { KEY_BACKSLASH, PBTN_MENU }, + { KEY_LEFTBRACE, PBTN_L }, + { KEY_RIGHTBRACE, PBTN_R }, +}; + +static const struct in_pdata pandora_evdev_pdata = { + .defbinds = in_evdev_defbinds, + .key_map = key_pbtn_map, + .kmap_size = sizeof(key_pbtn_map) / sizeof(key_pbtn_map[0]), +}; + void pemu_prep_defconfig(void) { defaultConfig.EmuOpt |= EOPT_VSYNC|EOPT_16BPP; @@ -104,24 +136,6 @@ void pemu_validate_config(void) currentConfig.CPUclock = plat_target_cpu_clock_get(); } -static void osd_text(int x, int y, const char *text) -{ - int len = strlen(text)*8; - int i, h; - - len++; - if (x + len > g_screen_width) - len = g_screen_width - x; - - for (h = 0; h < 8; h++) { - unsigned short *p; - p = (unsigned short *)g_screen_ptr + x + g_screen_width*(y + h); - for (i = len; i > 0; i--, p++) - *p = (*p>>2) & 0x39e7; - } - emu_text_out16(x, y, text); -} - static void draw_cd_leds(void) { int old_reg; @@ -151,10 +165,10 @@ static void draw_cd_leds(void) void pemu_finalize_frame(const char *fps, const char *notice) { if (notice && notice[0]) - osd_text(2, g_osd_y, notice); + emu_osd_text16(2, g_osd_y, notice); if (fps && fps[0] && (currentConfig.EmuOpt & EOPT_SHOW_FPS)) - osd_text(g_osd_fps_x, g_osd_y, fps); - if ((PicoAHW & PAHW_MCD) && (currentConfig.EmuOpt & EOPT_EN_CD_LEDS)) + emu_osd_text16(g_osd_fps_x, g_osd_y, fps); + if ((PicoIn.AHW & PAHW_MCD) && (currentConfig.EmuOpt & EOPT_EN_CD_LEDS)) draw_cd_leds(); } @@ -240,6 +254,8 @@ static int pnd_setup_layer_(int fd, int enabled, int x, int y, int w, int h) { struct omapfb_plane_info pi; struct omapfb_mem_info mi; + int is_enabled; + int retval = 0; int ret; ret = ioctl(fd, OMAPFB_QUERY_PLANE, &pi); @@ -255,18 +271,27 @@ static int pnd_setup_layer_(int fd, int enabled, int x, int y, int w, int h) } /* must disable when changing stuff */ - if (pi.enabled) { + is_enabled = pi.enabled; + if (is_enabled) { pi.enabled = 0; ret = ioctl(fd, OMAPFB_SETUP_PLANE, &pi); if (ret != 0) perror("SETUP_PLANE"); + else + is_enabled = 0; } - mi.size = 320*240*2*4; - ret = ioctl(fd, OMAPFB_SETUP_MEM, &mi); - if (ret != 0) { - perror("SETUP_MEM"); - return -1; + if (mi.size < LAYER_MEM_SIZE) { + unsigned int size_old = mi.size; + + mi.size = LAYER_MEM_SIZE; + ret = ioctl(fd, OMAPFB_SETUP_MEM, &mi); + if (ret != 0) { + perror("SETUP_MEM"); + fprintf(stderr, "(requested %u, had %u)\n", + mi.size, size_old); + return -1; + } } pi.pos_x = x; @@ -276,12 +301,17 @@ static int pnd_setup_layer_(int fd, int enabled, int x, int y, int w, int h) pi.enabled = enabled; ret = ioctl(fd, OMAPFB_SETUP_PLANE, &pi); - if (ret != 0) { + if (ret == 0) { + is_enabled = pi.enabled; + } + else { perror("SETUP_PLANE"); - return -1; + retval = -1; } - return 0; + plat_target_switch_layer(1, is_enabled); + + return retval; } int pnd_setup_layer(int enabled, int x, int y, int w, int h) @@ -375,6 +405,8 @@ void plat_video_loop_prepare(void) void pemu_loop_prep(void) { // dirty buffers better go now than during gameplay + fflush(stdout); + fflush(stderr); sync(); sleep(0); } @@ -410,6 +442,11 @@ void plat_wait_till_us(unsigned int us_to) */ } +void *plat_mem_get_for_drc(size_t size) +{ + return NULL; +} + void plat_early_init(void) { } @@ -478,7 +515,10 @@ void plat_init(void) pnd_menu_init(); - in_evdev_init(in_evdev_defbinds); + // default ROM path + strcpy(rom_fname_loaded, "/media"); + + in_evdev_init(&pandora_evdev_pdata); in_probe(); plat_target_setup_input();