X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=gp2x%2Femu.c;h=570b0fcf08f1ad2165ef1082c9f391e8ece3eae8;hb=b846453101c070b93938dd2224f0cca130a55e8c;hp=92a18315fd2cc42dc1333040f866053b696b563d;hpb=84e21f25e41b90d9729088dba5991a84330964ea;p=libpicofe.git diff --git a/gp2x/emu.c b/gp2x/emu.c index 92a1831..570b0fc 100644 --- a/gp2x/emu.c +++ b/gp2x/emu.c @@ -55,7 +55,7 @@ int reset_timing = 0; #define PICO_PEN_ADJUST_X 4 #define PICO_PEN_ADJUST_Y 2 -static int pico_pen_x = 320/2, pico_pen_y = 240/2, pico_inp_mode = 0; +static int pico_pen_x = 320/2, pico_pen_y = 240/2; static void emu_msg_cb(const char *msg); static void emu_msg_tray_open(void); @@ -140,7 +140,7 @@ void emu_Deinit(void) void emu_prepareDefaultConfig(void) { memset(&defaultConfig, 0, sizeof(defaultConfig)); - defaultConfig.EmuOpt = 0x1d | 0x00700; // | <- ram_tmng, confirm_save, cd_leds + defaultConfig.EmuOpt = 0x9d | 0x00700; // | <- ram_tmng, confirm_save, cd_leds defaultConfig.s_PicoOpt = 0x0f | POPT_EXT_FM|POPT_EN_MCD_PCM|POPT_EN_MCD_CDDA|POPT_EN_SVP_DRC|POPT_ACC_SPRITES; defaultConfig.s_PsndRate = 44100; defaultConfig.s_PicoRegion = 0; // auto @@ -436,34 +436,16 @@ static void emu_msg_tray_open(void) static void RunEventsPico(unsigned int events, unsigned int gp2x_keys) { - if (events & (1 << 3)) { - pico_inp_mode++; - if (pico_inp_mode > 2) pico_inp_mode = 0; - switch (pico_inp_mode) { - case 2: strcpy(noticeMsg, "Input: Pen on Pad "); break; - case 1: strcpy(noticeMsg, "Input: Pen on Storyware"); break; - case 0: strcpy(noticeMsg, "Input: Joytick "); - PicoPicohw.pen_pos[0] = PicoPicohw.pen_pos[1] = 0x8000; - break; - } - gettimeofday(¬iceMsgTime, 0); - } - if (events & (1 << 4)) { - PicoPicohw.page--; - if (PicoPicohw.page < 0) PicoPicohw.page = 0; - sprintf(noticeMsg, "Page %i ", PicoPicohw.page); - gettimeofday(¬iceMsgTime, 0); - } - if (events & (1 << 5)) { - PicoPicohw.page++; - if (PicoPicohw.page > 6) PicoPicohw.page = 6; - sprintf(noticeMsg, "Page %i ", PicoPicohw.page); - gettimeofday(¬iceMsgTime, 0); - } - if (pico_inp_mode != 0) { + int ret, px, py; + static int pdown_frames = 0; + + emu_RunEventsPico(events); + + if (pico_inp_mode != 0) + { PicoPad[0] &= ~0x0f; // release UDLR - if (gp2x_keys & GP2X_UP) { pico_pen_y--; if (pico_pen_y < 0) pico_pen_y = 0; } - if (gp2x_keys & GP2X_DOWN) { pico_pen_y++; if (pico_pen_y > 239-PICO_PEN_ADJUST_Y) pico_pen_y = 239-PICO_PEN_ADJUST_Y; } + if (gp2x_keys & GP2X_UP) { pico_pen_y--; if (pico_pen_y < 8) pico_pen_y = 8; } + if (gp2x_keys & GP2X_DOWN) { pico_pen_y++; if (pico_pen_y > 224-PICO_PEN_ADJUST_Y) pico_pen_y = 224-PICO_PEN_ADJUST_Y; } if (gp2x_keys & GP2X_LEFT) { pico_pen_x--; if (pico_pen_x < 0) pico_pen_x = 0; } if (gp2x_keys & GP2X_RIGHT) { int lim = (Pico.video.reg[12]&1) ? 319 : 255; @@ -476,6 +458,29 @@ static void RunEventsPico(unsigned int events, unsigned int gp2x_keys) PicoPicohw.pen_pos[0] += 0x3c; PicoPicohw.pen_pos[1] = pico_inp_mode == 1 ? (0x2f8 + pico_pen_y) : (0x1fc + pico_pen_y); } + + // for F200 + ret = gp2x_touchpad_read(&px, &py); + if (ret >= 0) { + if (ret > 5000) { + if (pdown_frames++ > 5) + PicoPad[0] |= 0x20; + + pico_pen_x = px; + pico_pen_y = py; + if (!(Pico.video.reg[12]&1)) { + pico_pen_x -= 32; + if (pico_pen_x < 0) pico_pen_x = 0; + if (pico_pen_x > 248) pico_pen_x = 248; + } + if (pico_pen_y > 224) pico_pen_y = 224; + } + else + pdown_frames= 0; + + //if (ret == 0) + // PicoPicohw.pen_pos[0] = PicoPicohw.pen_pos[1] = 0x8000; + } } static void update_volume(int has_changed, int is_up) @@ -512,31 +517,6 @@ static void update_volume(int has_changed, int is_up) } } -static void change_fast_forward(int set_on) -{ - static void *set_PsndOut = NULL; - static int set_Frameskip, set_EmuOpt, is_on = 0; - - if (set_on && !is_on) { - set_PsndOut = PsndOut; - set_Frameskip = currentConfig.Frameskip; - set_EmuOpt = currentConfig.EmuOpt; - PsndOut = NULL; - currentConfig.Frameskip = 8; - currentConfig.EmuOpt &= ~4; - is_on = 1; - } - else if (!set_on && is_on) { - PsndOut = set_PsndOut; - currentConfig.Frameskip = set_Frameskip; - currentConfig.EmuOpt = set_EmuOpt; - PsndRerate(1); - update_volume(0, 0); - reset_timing = 1; - is_on = 0; - } -} - static void RunEvents(unsigned int which) { if (which & 0x1800) // save or load (but not both) @@ -668,14 +648,16 @@ static void updateKeys(void) if (events & 0x6000) update_volume(1, events & 0x2000); - if ((events ^ prevEvents) & 0x40) - change_fast_forward(events & 0x40); + if ((events ^ prevEvents) & 0x40) { + emu_changeFastForward(events & 0x40); + update_volume(0, 0); + reset_timing = 1; + } events &= ~prevEvents; if (PicoAHW == PAHW_PICO) RunEventsPico(events, keys); - if (events) RunEvents(events); if (movie_data) emu_updateMovie(); @@ -1044,7 +1026,7 @@ void emu_Loop(void) frames_done++; frames_shown++; } - change_fast_forward(0); + emu_changeFastForward(0); if (PicoAHW & PAHW_MCD) PicoCDBufferFree();