some Pico input support
authornotaz <notasas@gmail.com>
Tue, 6 May 2008 20:56:54 +0000 (20:56 +0000)
committernotaz <notasas@gmail.com>
Tue, 6 May 2008 20:56:54 +0000 (20:56 +0000)
git-svn-id: file:///home/notaz/opt/svn/PicoDrive/platform@441 be3aeb3a-fb24-0410-a615-afba39da0efa

gp2x/emu.c
gp2x/menu.c

index b6bf5a4..f5b8ce3 100644 (file)
@@ -53,6 +53,8 @@ char noticeMsg[64];                   // notice msg to draw
 unsigned char *PicoDraw2FB = NULL;  // temporary buffer for alt renderer\r
 int reset_timing = 0;\r
 \r
+static int pico_pen_x = 0, pico_pen_y = 0, pico_inp_mode = 0;\r
+\r
 static void emu_msg_cb(const char *msg);\r
 static void emu_msg_tray_open(void);\r
 \r
@@ -396,6 +398,41 @@ static void emu_msg_tray_open(void)
        gettimeofday(&noticeMsgTime, 0);\r
 }\r
 \r
+static void RunEventsPico(unsigned int events, unsigned int gp2x_keys)\r
+{\r
+       if (events & (1 << 3)) {\r
+               pico_inp_mode++;\r
+               if (pico_inp_mode > 2) pico_inp_mode = 0;\r
+               switch (pico_inp_mode) {\r
+                       case 0: strcpy(noticeMsg, "Input: Joytick         "); break;\r
+                       case 1: strcpy(noticeMsg, "Input: Pen on Storyware"); break;\r
+                       case 2: strcpy(noticeMsg, "Input: Pen on Pad      "); break;\r
+               }\r
+               gettimeofday(&noticeMsgTime, 0);\r
+       }\r
+       if (events & (1 << 4)) {\r
+               PicoPicoPage--;\r
+               if (PicoPicoPage < 0) PicoPicoPage = 0;\r
+               sprintf(noticeMsg, "Page %i                 ", PicoPicoPage);\r
+               gettimeofday(&noticeMsgTime, 0);\r
+       }\r
+       if (events & (1 << 5)) {\r
+               PicoPicoPage++;\r
+               if (PicoPicoPage > 6) PicoPicoPage = 6;\r
+               sprintf(noticeMsg, "Page %i                 ", PicoPicoPage);\r
+               gettimeofday(&noticeMsgTime, 0);\r
+       }\r
+       if (pico_inp_mode != 0) {\r
+               PicoPad[0] &= ~0x0f; // release UDLR\r
+               if (gp2x_keys & GP2X_UP)   { pico_pen_y--; if (pico_pen_y <   0) pico_pen_y =   0; }\r
+               if (gp2x_keys & GP2X_DOWN) { pico_pen_y++; if (pico_pen_y > 251) pico_pen_y = 251; }\r
+               if (gp2x_keys & GP2X_LEFT) { pico_pen_x--; if (pico_pen_x <   0) pico_pen_x =   0; }\r
+               if (gp2x_keys & GP2X_RIGHT){ pico_pen_x++; if (pico_pen_x > 353) pico_pen_x = 353; }\r
+               PicoPicoPenPos[0] = 0x03c + pico_pen_x;\r
+               PicoPicoPenPos[1] = pico_inp_mode == 1 ? (0x2f8 + pico_pen_y) : (0x1fc + pico_pen_y);\r
+       }\r
+}\r
+\r
 static void update_volume(int has_changed, int is_up)\r
 {\r
        static int prev_frame = 0, wait_frames = 0;\r
@@ -520,8 +557,8 @@ static void RunEvents(unsigned int which)
 \r
 static void updateKeys(void)\r
 {\r
-       unsigned long keys, allActions[2] = { 0, 0 }, events;\r
-       static unsigned long prevEvents = 0;\r
+       unsigned int keys, keys2, allActions[2] = { 0, 0 }, events;\r
+       static unsigned int prevEvents = 0;\r
        int joy, i;\r
 \r
        keys = gp2x_joystick_read(0);\r
@@ -532,10 +569,11 @@ static void updateKeys(void)
        }\r
 \r
        keys &= CONFIGURABLE_KEYS;\r
+       keys2 = keys;\r
 \r
        for (i = 0; i < 32; i++)\r
        {\r
-               if (keys & (1 << i))\r
+               if (keys2 & (1 << i))\r
                {\r
                        int pl, acts = currentConfig.KeyBinds[i];\r
                        if (!acts) continue;\r
@@ -546,9 +584,9 @@ static void updateKeys(void)
                                // let's try to find the other one\r
                                if (acts_c) {\r
                                        for (; u < 32; u++)\r
-                                               if ( (keys & (1 << u)) && (currentConfig.KeyBinds[u] & acts_c) ) {\r
+                                               if ( (keys2 & (1 << u)) && (currentConfig.KeyBinds[u] & acts_c) ) {\r
                                                        allActions[pl] |= acts_c & currentConfig.KeyBinds[u];\r
-                                                       keys &= ~((1 << i) | (1 << u));\r
+                                                       keys2 &= ~((1 << i) | (1 << u));\r
                                                        break;\r
                                                }\r
                                }\r
@@ -566,9 +604,9 @@ static void updateKeys(void)
        {\r
                gp2x_usbjoy_update();\r
                for (joy = 0; joy < num_of_joys; joy++) {\r
-                       int keys = gp2x_usbjoy_check2(joy);\r
+                       int btns = gp2x_usbjoy_check2(joy);\r
                        for (i = 0; i < 32; i++) {\r
-                               if (keys & (1 << i)) {\r
+                               if (btns & (1 << i)) {\r
                                        int acts = currentConfig.JoyBinds[joy][i];\r
                                        int pl = (acts >> 16) & 1;\r
                                        allActions[pl] |= acts;\r
@@ -590,6 +628,10 @@ static void updateKeys(void)
                change_fast_forward(events & 0x40);\r
 \r
        events &= ~prevEvents;\r
+\r
+       if (PicoAHW == PAHW_PICO)\r
+               RunEventsPico(events, keys);\r
+\r
        if (events) RunEvents(events);\r
        if (movie_data) emu_updateMovie();\r
 \r
index af7397e..0a4cb73 100644 (file)
@@ -751,7 +751,7 @@ static void draw_key_config(const me_bind_action *opts, int opt_cnt, int player_
                x = 40;\r
        }\r
 \r
-       menu_draw_selection(x - 16, tl_y + sel*10, (player_idx >= 0) ? 66 : 130);\r
+       menu_draw_selection(x - 16, tl_y + sel*10, (player_idx >= 0) ? 66 : 140);\r
 \r
        y = tl_y;\r
        for (i = 0; i < opt_cnt; i++, y+=10)\r
@@ -857,21 +857,25 @@ static void draw_kc_sel(int menu_sel)
 }\r
 \r
 \r
-// player2_flag, ?, ?, ?, ?, ?, ?, menu\r
+// player2_flag, reserved, ?, ?,\r
+// ?, ?, fast forward, menu\r
 // "NEXT SAVE SLOT", "PREV SAVE SLOT", "SWITCH RENDERER", "SAVE STATE",\r
 // "LOAD STATE", "VOLUME UP", "VOLUME DOWN", "DONE"\r
 me_bind_action emuctrl_actions[] =\r
 {\r
-       { "Load State     ", 1<<28 },\r
-       { "Save State     ", 1<<27 },\r
-       { "Prev Save Slot ", 1<<25 },\r
-       { "Next Save Slot ", 1<<24 },\r
-       { "Switch Renderer", 1<<26 },\r
-       { "Volume Down    ", 1<<30 },\r
-       { "Volume Up      ", 1<<29 },\r
-       { "Fast forward   ", 1<<22 },\r
-       { "Enter Menu     ", 1<<23 },\r
-       { NULL,              0     }\r
+       { "Load State       ", 1<<28 },\r
+       { "Save State       ", 1<<27 },\r
+       { "Prev Save Slot   ", 1<<25 },\r
+       { "Next Save Slot   ", 1<<24 },\r
+       { "Switch Renderer  ", 1<<26 },\r
+       { "Volume Down      ", 1<<30 },\r
+       { "Volume Up        ", 1<<29 },\r
+       { "Fast forward     ", 1<<22 },\r
+       { "Enter Menu       ", 1<<23 },\r
+       { "Pico Next page   ", 1<<21 },\r
+       { "Pico Prev page   ", 1<<20 },\r
+       { "Pico Switch input", 1<<19 },\r
+       { NULL,                0     }\r
 };\r
 \r
 static void kc_sel_loop(void)\r