fix some issues with menu bg
[picodrive.git] / platform / common / menu_pico.c
index bd2b915..7b0cd78 100644 (file)
@@ -73,6 +73,7 @@ static void make_bg(int no_scale)
 {
        unsigned short *src = (void *)g_menubg_src_ptr;
        int w = g_screen_width, h = g_screen_height;
+       int pp = g_screen_ppitch;
        short *dst;
        int x, y;
 
@@ -87,7 +88,7 @@ static void make_bg(int no_scale)
                d += (g_menuscreen_h / 2 - h * 2 / 2)
                        * g_menuscreen_w / 2;
                d += (g_menuscreen_w / 2 - w * 2 / 2) / 2;
-               for (y = 0; y < h; y++, src += w, d += g_menuscreen_w*2/2) {
+               for (y = 0; y < h; y++, src += pp, d += g_menuscreen_w*2/2) {
                        for (x = 0; x < w; x++) {
                                t = src[x];
                                t = ((t & 0xf79e)>>1) - ((t & 0xc618)>>3);
@@ -107,7 +108,7 @@ static void make_bg(int no_scale)
                (g_menuscreen_w / 2 - w / 2);
 
        // darken the active framebuffer
-       for (; h > 0; dst += g_menuscreen_w, src += g_screen_width, h--)
+       for (; h > 0; dst += g_menuscreen_w, src += pp, h--)
                menu_darken_bg(dst, src, w, 1);
 }
 
@@ -167,8 +168,8 @@ static void load_progress_cb(int percent)
                len = g_menuscreen_w;
 
        menu_draw_begin(0, 1);
-       dst = (unsigned short *)g_menuscreen_ptr + g_menuscreen_w * me_sfont_h * 2;
-       for (ln = me_sfont_h - 2; ln > 0; ln--, dst += g_menuscreen_w)
+       dst = (unsigned short *)g_menuscreen_ptr + g_menuscreen_pp * me_sfont_h * 2;
+       for (ln = me_sfont_h - 2; ln > 0; ln--, dst += g_menuscreen_pp)
                memset(dst, 0xff, len * 2);
        menu_draw_end();
 }
@@ -179,17 +180,18 @@ static void cdload_progress_cb(const char *fname, int percent)
        unsigned short *dst;
 
        menu_draw_begin(0, 1);
-       dst = (unsigned short *)g_menuscreen_ptr + g_menuscreen_w * me_sfont_h * 2;
-       memset(dst, 0xff, g_menuscreen_w * (me_sfont_h - 2) * 2);
+       dst = (unsigned short *)g_menuscreen_ptr + g_menuscreen_pp * me_sfont_h * 2;
+
+       menuscreen_memset_lines(dst, 0xff, me_sfont_h - 2);
 
        smalltext_out16(1, 3 * me_sfont_h, "Processing CD image / MP3s", 0xffff);
        smalltext_out16(1, 4 * me_sfont_h, fname, 0xffff);
-       dst += g_menuscreen_w * me_sfont_h * 3;
+       dst += g_menuscreen_pp * me_sfont_h * 3;
 
        if (len > g_menuscreen_w)
                len = g_menuscreen_w;
 
-       for (ln = (me_sfont_h - 2); ln > 0; ln--, dst += g_menuscreen_w)
+       for (ln = (me_sfont_h - 2); ln > 0; ln--, dst += g_menuscreen_pp)
                memset(dst, 0xff, len * 2);
        menu_draw_end();
 
@@ -488,10 +490,13 @@ static int menu_loop_32x_options(int id, int keys)
 
 // ------------ adv options menu ------------
 
+static const char h_ovrclk[] = "Will break some games, keep at 0";
+
 static menu_entry e_menu_adv_options[] =
 {
        mee_onoff     ("SRAM/BRAM saves",          MA_OPT_SRAM_STATES,    currentConfig.EmuOpt, EOPT_EN_SRAM),
        mee_onoff     ("Disable sprite limit",     MA_OPT2_NO_SPRITE_LIM, PicoIn.opt, POPT_DIS_SPRITE_LIM),
+       mee_range_h   ("Overclock M68k (%)",       MA_OPT2_OVERCLOCK_M68K,currentConfig.overclock_68k, 0, 1000, h_ovrclk),
        mee_onoff     ("Emulate Z80",              MA_OPT2_ENABLE_Z80,    PicoIn.opt, POPT_EN_Z80),
        mee_onoff     ("Emulate YM2612 (FM)",      MA_OPT2_ENABLE_YM2612, PicoIn.opt, POPT_EN_FM),
        mee_onoff     ("Emulate SN76496 (PSG)",    MA_OPT2_ENABLE_SN76496,PicoIn.opt, POPT_EN_PSG),
@@ -508,7 +513,10 @@ static menu_entry e_menu_adv_options[] =
 static int menu_loop_adv_options(int id, int keys)
 {
        static int sel = 0;
+
        me_loop(e_menu_adv_options, &sel);
+       PicoIn.overclockM68k = currentConfig.overclock_68k; // int vs short
+
        return 0;
 }
 
@@ -604,7 +612,7 @@ static int mh_opt_misc(int id, int keys)
 {
        switch (id) {
        case MA_OPT_SOUND_QUALITY:
-               PsndRate = sndrate_prevnext(PsndRate, keys & PBTN_RIGHT);
+               PicoIn.sndRate = sndrate_prevnext(PicoIn.sndRate, keys & PBTN_RIGHT);
                break;
        case MA_OPT_REGION:
                region_prevnext(keys & PBTN_RIGHT);
@@ -668,7 +676,7 @@ static const char *mgn_opt_sound(int id, int *offs)
        const char *str2;
        *offs = -8;
        str2 = (PicoIn.opt & POPT_EN_STEREO) ? "stereo" : "mono";
-       sprintf(static_buff, "%5iHz %s", PsndRate, str2);
+       sprintf(static_buff, "%5iHz %s", PicoIn.sndRate, str2);
        return static_buff;
 }
 
@@ -842,13 +850,15 @@ static void debug_menu_loop(void)
                                break;
                        case 2: pemu_forced_frame(1, 0);
                                make_bg(1);
-                               PDebugShowSpriteStats((unsigned short *)g_menuscreen_ptr + (g_menuscreen_h/2 - 240/2)*g_menuscreen_w +
-                                       g_menuscreen_w/2 - 320/2, g_menuscreen_w);
+                               PDebugShowSpriteStats((unsigned short *)g_menuscreen_ptr
+                                       + (g_menuscreen_h/2 - 240/2) * g_menuscreen_pp
+                                       + g_menuscreen_w/2 - 320/2, g_menuscreen_pp);
                                break;
-                       case 3: memset(g_menuscreen_ptr, 0, g_menuscreen_w * g_menuscreen_h * 2);
-                               PDebugShowPalette(g_menuscreen_ptr, g_menuscreen_w);
-                               PDebugShowSprite((unsigned short *)g_menuscreen_ptr + g_menuscreen_w*120 + g_menuscreen_w/2 + 16,
-                                       g_menuscreen_w, spr_offs);
+                       case 3: menuscreen_memset_lines(g_menuscreen_ptr, 0, g_menuscreen_h);
+                               PDebugShowPalette(g_menuscreen_ptr, g_menuscreen_pp);
+                               PDebugShowSprite((unsigned short *)g_menuscreen_ptr
+                                       + g_menuscreen_pp * 120 + g_menuscreen_w / 2 + 16,
+                                       g_menuscreen_pp, spr_offs);
                                draw_text_debug(PDebugSpriteList(), spr_offs, 6);
                                break;
                        case 4: tmp = PDebug32x();
@@ -886,7 +896,7 @@ static void debug_menu_loop(void)
                                if (inp & PBTN_UP)    pv->debug_p ^= PVD_KILL_S_HI;
                                if (inp & PBTN_MA2)   pv->debug_p ^= PVD_KILL_32X;
                                if (inp & PBTN_MOK) {
-                                       PsndOut = NULL; // just in case
+                                       PicoIn.sndOut = NULL; // just in case
                                        PicoIn.skipFrame = 1;
                                        PicoFrame();
                                        PicoIn.skipFrame = 0;
@@ -968,23 +978,23 @@ static void menu_main_draw_status(void)
                return;
 
        /* battery info */
-       bp += (me_mfont_h * 2 + 2) * g_screen_width + g_screen_width - me_mfont_w * 3 - 3;
+       bp += (me_mfont_h * 2 + 2) * g_screen_ppitch + g_screen_width - me_mfont_w * 3 - 3;
        for (i = 0; i < me_mfont_w * 2; i++)
                bp[i] = menu_text_color;
        for (i = 0; i < me_mfont_w * 2; i++)
-               bp[i + g_screen_width * bat_h] = menu_text_color;
+               bp[i + g_screen_ppitch * bat_h] = menu_text_color;
        for (i = 0; i <= bat_h; i++)
-               bp[i * g_screen_width] =
-               bp[i * g_screen_width + me_mfont_w * 2] = menu_text_color;
+               bp[i * g_screen_ppitch] =
+               bp[i * g_screen_ppitch + me_mfont_w * 2] = menu_text_color;
        for (i = 2; i < bat_h - 1; i++)
-               bp[i * g_screen_width - 1] =
-               bp[i * g_screen_width - 2] = menu_text_color;
+               bp[i * g_screen_ppitch - 1] =
+               bp[i * g_screen_ppitch - 2] = menu_text_color;
 
        w = me_mfont_w * 2 - 1;
        wfill = batt_val * w / 100;
        for (u = 1; u < bat_h; u++)
                for (i = 0; i < wfill; i++)
-                       bp[(w - i) + g_screen_width * u] = menu_text_color;
+                       bp[(w - i) + g_screen_ppitch * u] = menu_text_color;
 }
 
 static int main_menu_handler(int id, int keys)