bugfix, sprites adjustment
[libpicofe.git] / gp2x / menu.c
index 05d0903..76eb73e 100644 (file)
@@ -25,7 +25,7 @@
 #include <zlib/zlib.h>\r
 \r
 #ifndef _DIRENT_HAVE_D_TYPE\r
-#error "need d_type for file browser\r
+#error "need d_type for file browser"\r
 #endif\r
 \r
 extern int  mmuhack_status;\r
@@ -46,7 +46,7 @@ static int inp_prevjoy = 0;
 static unsigned long wait_for_input(unsigned long interesting)\r
 {\r
        unsigned long ret;\r
-       static int repeats = 0, wait = 6;\r
+       static int repeats = 0, wait = 20;\r
        int release = 0, i;\r
 \r
        if      (repeats == 2) wait = 3;\r
@@ -65,8 +65,10 @@ static unsigned long wait_for_input(unsigned long interesting)
 \r
        if (release || ret != inp_prev) {\r
                repeats = 0;\r
-               wait = 6;\r
+               wait = 20;\r
        }\r
+       if (wait > 6 && (ret&(GP2X_UP|GP2X_LEFT|GP2X_DOWN|GP2X_RIGHT|GP2X_L|GP2X_R)))\r
+               wait = 6;\r
        inp_prev = ret;\r
        inp_prevjoy = 0;\r
 \r
@@ -430,8 +432,10 @@ rescan:
 // ------------ debug menu ------------\r
 \r
 char *debugString(void);\r
+void PicoDrawShowSpriteStats(unsigned short *screen);\r
+void PicoDrawShowPalette(unsigned short *screen);\r
 \r
-static void draw_debug(void)\r
+static void draw_main_debug(void)\r
 {\r
        char *p, *str = debugString();\r
        int len, line;\r
@@ -448,13 +452,47 @@ static void draw_debug(void)
                if (*p == 0) break;\r
                p++; str = p;\r
        }\r
-       menu_flip();\r
+}\r
+\r
+static void draw_frame_debug(void)\r
+{\r
+       char layer_str[48] = "layers:             ";\r
+       if (PicoDrawMask & PDRAW_LAYERB_ON)      memcpy(layer_str +  8, "B", 1);\r
+       if (PicoDrawMask & PDRAW_LAYERA_ON)      memcpy(layer_str + 10, "A", 1);\r
+       if (PicoDrawMask & PDRAW_SPRITES_LOW_ON) memcpy(layer_str + 12, "spr_lo", 6);\r
+       if (PicoDrawMask & PDRAW_SPRITES_HI_ON)  memcpy(layer_str + 19, "spr_hi", 6);\r
+\r
+       memset(gp2x_screen, 0, 320*240*2);\r
+       emu_forcedFrame(0);\r
+       smalltext_out16(4, 232, layer_str, 0xffff);\r
 }\r
 \r
 static void debug_menu_loop(void)\r
 {\r
-       draw_debug();\r
-       wait_for_input(GP2X_B|GP2X_X);\r
+       int inp, mode = 0;\r
+\r
+       while (1)\r
+       {\r
+               switch (mode)\r
+               {\r
+                       case 0: draw_main_debug(); break;\r
+                       case 1: draw_frame_debug(); break;\r
+                       case 2: PicoDrawShowSpriteStats(gp2x_screen); break;\r
+                       case 3: PicoDrawShowPalette(gp2x_screen); break;\r
+               }\r
+               menu_flip();\r
+\r
+               inp = wait_for_input(GP2X_B|GP2X_X|GP2X_L|GP2X_R|GP2X_UP|GP2X_DOWN|GP2X_LEFT|GP2X_RIGHT);\r
+               if (inp & (GP2X_B|GP2X_X)) return;\r
+               if (inp & GP2X_L) { mode--; if (mode < 0) mode = 3; }\r
+               if (inp & GP2X_R) { mode++; if (mode > 3) mode = 0; }\r
+               if (mode == 1) {\r
+                       if (inp & GP2X_LEFT)  PicoDrawMask ^= PDRAW_LAYERB_ON;\r
+                       if (inp & GP2X_RIGHT) PicoDrawMask ^= PDRAW_LAYERA_ON;\r
+                       if (inp & GP2X_DOWN)  PicoDrawMask ^= PDRAW_SPRITES_LOW_ON;\r
+                       if (inp & GP2X_UP)    PicoDrawMask ^= PDRAW_SPRITES_HI_ON;\r
+               }\r
+       }\r
 }\r
 \r
 // ------------ patch/gg menu ------------\r
@@ -567,7 +605,7 @@ static void draw_savestate_bg(int slot)
                areaClose(file);\r
        }\r
 \r
-       emu_forcedFrame();\r
+       emu_forcedFrame(POPT_EN_SOFTSCALE);\r
        menu_prepare_bg(1);\r
 \r
        memcpy(Pico.vram, tmp_vram, sizeof(Pico.vram));\r
@@ -1073,6 +1111,7 @@ menu_entry opt2_entries[] =
        { "craigix's RAM timings",     MB_ONOFF, MA_OPT2_RAMTIMINGS,    &currentConfig.EmuOpt, 0x0100, 0, 0, 1, 1 },\r
        { NULL,                        MB_ONOFF, MA_OPT2_SQUIDGEHACK,   &currentConfig.EmuOpt, 0x0010, 0, 0, 1, 1 },\r
        { "SVP dynarec",               MB_ONOFF, MA_OPT2_SVP_DYNAREC,   &PicoOpt, 0x20000, 0, 0, 1, 1 },\r
+       { "Disable idle loop patching",MB_ONOFF, MA_OPT2_NO_IDLE_LOOPS, &PicoOpt, 0x80000, 0, 0, 1, 1 },\r
        { "done",                      MB_NONE,  MA_OPT2_DONE,          NULL, 0, 0, 0, 1, 0 },\r
 };\r
 \r
@@ -1147,7 +1186,6 @@ menu_entry opt_entries[] =
 {\r
        { NULL,                        MB_NONE,  MA_OPT_RENDERER,      NULL, 0, 0, 0, 1, 1 },\r
        { NULL,                        MB_RANGE, MA_OPT_SCALING,       &currentConfig.scaling, 0, 0, 3, 1, 1 },\r
-       { "Accurate timing (slower)",  MB_ONOFF, MA_OPT_ACC_TIMING,    &PicoOpt, 0x040, 0, 0, 1, 1 },\r
        { "Accurate sprites (slower)", MB_ONOFF, MA_OPT_ACC_SPRITES,   &PicoOpt, 0x080, 0, 0, 1, 1 },\r
        { "Show FPS",                  MB_ONOFF, MA_OPT_SHOW_FPS,      &currentConfig.EmuOpt,  0x002, 0, 0, 1, 1 },\r
        { NULL,                        MB_RANGE, MA_OPT_FRAMESKIP,     &currentConfig.Frameskip, 0, -1, 16, 1, 1 },\r
@@ -1426,7 +1464,7 @@ static int menu_loop_options(void)
 \r
 static void draw_menu_credits(void)\r
 {\r
-       int tl_x = 15, tl_y = 64, y;\r
+       int tl_x = 15, tl_y = 56, y;\r
        gp2x_pd_clone_buffer2();\r
 \r
        text_out16(tl_x, 20, "PicoDrive v" VERSION " (c) notaz, 2006-2008");\r
@@ -1436,17 +1474,19 @@ static void draw_menu_credits(void)
        text_out16(tl_x, (y+=10), "      base code of PicoDrive");\r
        text_out16(tl_x, (y+=10), "Reesy & FluBBa: DrZ80 core");\r
        text_out16(tl_x, (y+=10), "MAME devs: YM2612 and SN76496 cores");\r
-       text_out16(tl_x, (y+=10), "Charles MacDonald: Genesis hw docs");\r
-       text_out16(tl_x, (y+=10), "Stephane Dallongeville:");\r
-       text_out16(tl_x, (y+=10), "      opensource Gens");\r
-       text_out16(tl_x, (y+=10), "Haze: Genesis hw info");\r
        text_out16(tl_x, (y+=10), "rlyeh and others: minimal SDK");\r
        text_out16(tl_x, (y+=10), "Squidge: squidgehack");\r
        text_out16(tl_x, (y+=10), "Dzz: ARM940 sample");\r
-       text_out16(tl_x, (y+=10), "GnoStiC / Puck2099: USB joystick");\r
+       text_out16(tl_x, (y+=10), "GnoStiC / Puck2099: USB joy code");\r
        text_out16(tl_x, (y+=10), "craigix: GP2X hardware");\r
        text_out16(tl_x, (y+=10), "ketchupgun: skin design");\r
 \r
+       text_out16(tl_x, (y+=20), "special thanks (for docs, ideas):");\r
+       text_out16(tl_x, (y+=10), " Charles MacDonald, Haze,");\r
+       text_out16(tl_x, (y+=10), " Stephane Dallongeville,");\r
+       text_out16(tl_x, (y+=10), " Lordus, Exophase, Rokas,");\r
+       text_out16(tl_x, (y+=10), " Nemesis, Tasco Deluxe");\r
+\r
        menu_flip();\r
 }\r
 \r