add a hack for Decap Attack
[picodrive.git] / platform / gp2x / plat.c
index 503e149..4fcf76f 100644 (file)
@@ -24,7 +24,7 @@ void *gp2x_screens[4];
 
 void (*gp2x_video_flip)(void);
 void (*gp2x_video_flip2)(void);
-void (*gp2x_video_changemode_ll)(int bpp);
+void (*gp2x_video_changemode_ll)(int bpp, int is_pal);
 void (*gp2x_video_setpalette)(int *pal, int len);
 void (*gp2x_video_RGB_setscaling)(int ln_offs, int W, int H);
 void (*gp2x_video_wait_vsync)(void);
@@ -71,9 +71,39 @@ static struct in_default_bind in_gp2x_defbinds[] =
        { 0, 0, 0 }
 };
 
-void gp2x_video_changemode(int bpp)
+static const struct menu_keymap key_pbtn_map[] =
 {
-       gp2x_video_changemode_ll(bpp);
+       { KEY_UP,       PBTN_UP },
+       { KEY_DOWN,     PBTN_DOWN },
+       { KEY_LEFT,     PBTN_LEFT },
+       { KEY_RIGHT,    PBTN_RIGHT },
+       /* Caanoo */
+       { BTN_THUMB2,   PBTN_MOK },
+       { BTN_THUMB,    PBTN_MBACK },
+       { BTN_TRIGGER,  PBTN_MA2 },
+       { BTN_TOP,      PBTN_MA3 },
+       { BTN_BASE,     PBTN_MENU },
+       { BTN_TOP2,     PBTN_L },
+       { BTN_PINKIE,   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 gp2x_evdev_pdata = {
+       .defbinds = in_evdev_defbinds,
+       .key_map = key_pbtn_map,
+       .kmap_size = sizeof(key_pbtn_map) / sizeof(key_pbtn_map[0]),
+};
+
+void gp2x_video_changemode(int bpp, int is_pal)
+{
+       gp2x_video_changemode_ll(bpp, is_pal);
 
        gp2x_current_bpp = bpp < 0 ? -bpp : bpp;
 }
@@ -131,9 +161,8 @@ void plat_video_menu_enter(int is_rom_loaded)
                gp2x_video_flip2();
 
        // switch to 16bpp
-       gp2x_video_changemode_ll(16);
+       gp2x_video_changemode_ll(16, 0);
        gp2x_video_RGB_setscaling(0, 320, 240);
-printf("menu_enter\n");
 }
 
 void plat_video_menu_begin(void)
@@ -150,6 +179,11 @@ void plat_video_menu_leave(void)
 {
 }
 
+void *plat_mem_get_for_drc(size_t size)
+{
+       return NULL;
+}
+
 void plat_early_init(void)
 {
        // just use gettimeofday until plat_init()
@@ -174,6 +208,7 @@ void plat_init(void)
 
        g_menuscreen_w = 320;
        g_menuscreen_h = 240;
+       g_menuscreen_pp = g_menuscreen_w;
        gp2x_memset_all_buffers(0, 0, 320*240*2);
 
        gp2x_make_fb_bufferable(1);
@@ -184,7 +219,7 @@ void plat_init(void)
        flip_after_sync = 1;
        gp2x_menu_init();
 
-       in_evdev_init(in_evdev_defbinds);
+       in_evdev_init(&gp2x_evdev_pdata);
        in_gp2x_init(in_gp2x_defbinds);
        in_probe();
        plat_target_setup_input();