+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(¬iceMsgTime, 0);\r
+ }\r
+ if (events & (1 << 4)) {\r
+ PicoPicoPage--;\r
+ if (PicoPicoPage < 0) PicoPicoPage = 0;\r
+ sprintf(noticeMsg, "Page %i ", PicoPicoPage);\r
+ gettimeofday(¬iceMsgTime, 0);\r
+ }\r
+ if (events & (1 << 5)) {\r
+ PicoPicoPage++;\r
+ if (PicoPicoPage > 6) PicoPicoPage = 6;\r
+ sprintf(noticeMsg, "Page %i ", PicoPicoPage);\r
+ gettimeofday(¬iceMsgTime, 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
+ int vol = currentConfig.volume;\r
+\r
+ if (has_changed)\r
+ {\r
+ if (vol < 5 && (PicoOpt&8) && prev_frame == Pico.m.frame_count - 1 && wait_frames < 12)\r
+ wait_frames++;\r
+ else {\r
+ if (is_up) {\r
+ if (vol < 99) vol++;\r
+ } else {\r
+ if (vol > 0) vol--;\r
+ }\r
+ wait_frames = 0;\r
+ gp2x_sound_volume(vol, vol);\r
+ currentConfig.volume = vol;\r
+ }\r
+ sprintf(noticeMsg, "VOL: %02i", vol);\r
+ gettimeofday(¬iceMsgTime, 0);\r
+ prev_frame = Pico.m.frame_count;\r
+ }\r
+\r
+ // set the right mixer func\r
+ if (!(PicoOpt&8)) return; // just use defaults for mono\r
+ if (vol >= 5)\r
+ PsndMix_32_to_16l = mix_32_to_16l_stereo;\r
+ else {\r
+ mix_32_to_16l_level = 5 - vol;\r
+ PsndMix_32_to_16l = mix_32_to_16l_stereo_lvl;\r
+ }\r
+}\r
+\r
+static void change_fast_forward(int set_on)\r
+{\r
+ static void *set_PsndOut = NULL;\r
+ static int set_Frameskip, set_EmuOpt, is_on = 0;\r
+\r
+ if (set_on && !is_on) {\r
+ set_PsndOut = PsndOut;\r
+ set_Frameskip = currentConfig.Frameskip;\r
+ set_EmuOpt = currentConfig.EmuOpt;\r
+ PsndOut = NULL;\r
+ currentConfig.Frameskip = 8;\r
+ currentConfig.EmuOpt &= ~4;\r
+ is_on = 1;\r
+ }\r
+ else if (!set_on && is_on) {\r
+ PsndOut = set_PsndOut;\r
+ currentConfig.Frameskip = set_Frameskip;\r
+ currentConfig.EmuOpt = set_EmuOpt;\r
+ PsndRerate(1);\r
+ update_volume(0, 0);\r
+ reset_timing = 1;\r
+ is_on = 0;\r
+ }\r
+}\r
+\r