gp2x_test added, cli removed
[fceu.git] / drivers / gp2x / menu.c
index 12d6dc6..25c886f 100644 (file)
 #error "need d_type for file browser\r
 #endif\r
 \r
-static int GP2X_PORT_REV =\r
-#include "rev.h"\r
-;\r
-\r
+extern int GP2X_PORT_REV;\r
 extern char lastLoadedGameName[PATH_MAX];\r
 extern int mmuhack_status;\r
 extern int soundvol;\r
@@ -682,7 +679,7 @@ static void draw_key_config(const bind_action_t *opts, int opt_cnt, int player_i
        // draw cursor\r
        gp2x_text_out15(x - 16, tl_y + sel*10, ">");\r
 \r
-       if (sel < 10) {\r
+       if (sel < opt_cnt) {\r
                gp2x_text_out15(30, 190, "Press a button to bind/unbind");\r
                gp2x_text_out15(30, 200, "Use VOL+ to clear");\r
                gp2x_text_out15(30, 210, "To bind UP/DOWN, hold VOL-");\r
@@ -787,8 +784,13 @@ static bind_action_t ctrl_actions[] =
 \r
 static bind_action_t emuctrl_actions[] =\r
 {\r
-       { "Save State  ", 1<<31 },\r
-       { "Load State  ", 1<<30 },\r
+       { "Save State       ", 1<<31 },\r
+       { "Load State       ", 1<<30 },\r
+       { "Next State Slot  ", 1<<29 },\r
+       { "Prev State Slot  ", 1<<28 },\r
+       { "FDS Insert/Eject ", 1<<27 },\r
+       { "FDS Select Disk  ", 1<<26 },\r
+       { "VSUni Insert Coin", 1<<25 },\r
 };\r
 \r
 static void kc_sel_loop(void)\r
@@ -818,6 +820,19 @@ static void kc_sel_loop(void)
 \r
 // --------- FCEU options ----------\r
 \r
+extern int ntsccol,ntschue,ntsctint;\r
+extern int srendlinev[2];\r
+extern int erendlinev[2];\r
+extern int eoptions;\r
+\r
+\r
+static void int_incdec(int *p, int inc, int min, int max)\r
+{\r
+       *p += inc;\r
+       if      (*p < min) *p = min;\r
+       else if (*p > max) *p = max;\r
+}\r
+\r
 static void draw_fcemenu_options(int menu_sel)\r
 {\r
        int tl_x = 25, tl_y = 60, y;\r
@@ -825,8 +840,16 @@ static void draw_fcemenu_options(int menu_sel)
        y = tl_y;\r
        gp2x_fceu_copy_bg();\r
 \r
-       gp2x_text_out15(tl_x,  y,      "                           %s", "OFF"); // 0\r
-       gp2x_text_out15(tl_x, (y+=10), "Done");\r
+       gp2x_text_out15(tl_x,  y,      "NTSC Color Emulation       %s", ntsccol?"ON":"OFF");    // 0\r
+       gp2x_text_out15(tl_x, (y+=10), "  Tint (default: 56)       %i", ntsctint);\r
+       gp2x_text_out15(tl_x, (y+=10), "  Hue  (default: 72)       %i", ntschue);\r
+       gp2x_text_out15(tl_x, (y+=10), "First visible line (NTSC)  %i", srendlinev[0]);\r
+       gp2x_text_out15(tl_x, (y+=10), "Last visible line (NTSC)   %i", erendlinev[0]);\r
+       gp2x_text_out15(tl_x, (y+=10), "First visible line (PAL)   %i", srendlinev[1]);         // 5\r
+       gp2x_text_out15(tl_x, (y+=10), "Last visible line (PAL)    %i", erendlinev[1]);\r
+       gp2x_text_out15(tl_x, (y+=10), "Clip 8 left/right columns  %s", (eoptions&EO_CLIPSIDES)?"ON":"OFF");\r
+       gp2x_text_out15(tl_x, (y+=10), "Disable 8 sprite limit     %s", "TODO");\r
+       gp2x_text_out15(tl_x, (y+=10), "Done");                                                 // 9\r
 \r
        // draw cursor\r
        gp2x_text_out15(tl_x - 16, tl_y + menu_sel*10, ">");\r
@@ -836,9 +859,11 @@ static void draw_fcemenu_options(int menu_sel)
 \r
 static void fcemenu_loop_options(void)\r
 {\r
-       int menu_sel = 0, menu_sel_max = 1;\r
+       int menu_sel = 0, menu_sel_max = 9, i;\r
        unsigned long inp = 0;\r
 \r
+       FCEUI_GetNTSCTH(&ntsctint, &ntschue);\r
+\r
        for(;;)\r
        {\r
                draw_fcemenu_options(menu_sel);\r
@@ -847,15 +872,29 @@ static void fcemenu_loop_options(void)
                if(inp & GP2X_DOWN) { menu_sel++; if (menu_sel > menu_sel_max) menu_sel = 0; }\r
                if((inp& GP2X_B)||(inp&GP2X_LEFT)||(inp&GP2X_RIGHT)) { // toggleable options\r
                        switch (menu_sel) {\r
-                               case  0: break;\r
-                               case  1: return;\r
+                               case  0: ntsccol = !ntsccol; break;\r
+                               case  7: eoptions^=EO_CLIPSIDES; break;\r
+                               case  9: return;\r
+                       }\r
+               }\r
+               if(inp & (GP2X_X|GP2X_A)) {\r
+                       for(i=0;i<2;i++)\r
+                       {\r
+                               if(srendlinev[i]<0 || srendlinev[i]>239) srendlinev[i]=0;\r
+                               if(erendlinev[i]<srendlinev[i] || erendlinev[i]>239) erendlinev[i]=239;\r
                        }\r
+                       FCEUI_SetNTSCTH(ntsccol, ntsctint, ntschue);\r
+                       FCEUI_SetRenderedLines(srendlinev[0],erendlinev[0],srendlinev[1],erendlinev[1]);\r
+                       return;\r
                }\r
-               if(inp & (GP2X_X|GP2X_A)) return;\r
                if(inp & (GP2X_LEFT|GP2X_RIGHT)) { // multi choise\r
                        switch (menu_sel) {\r
-                               case 0:\r
-                                       break;\r
+                               case  1: int_incdec(&ntsctint,      (inp & GP2X_LEFT) ? -1 : 1, 0, 128); break;\r
+                               case  2: int_incdec(&ntschue,       (inp & GP2X_LEFT) ? -1 : 1, 0, 128); break;\r
+                               case  3: int_incdec(&srendlinev[0], (inp & GP2X_LEFT) ? -1 : 1, 0, 239); break;\r
+                               case  4: int_incdec(&erendlinev[0], (inp & GP2X_LEFT) ? -1 : 1, 0, 239); break;\r
+                               case  5: int_incdec(&srendlinev[1], (inp & GP2X_LEFT) ? -1 : 1, 0, 239); break;\r
+                               case  6: int_incdec(&erendlinev[1], (inp & GP2X_LEFT) ? -1 : 1, 0, 239); break;\r
                        }\r
                }\r
        }\r
@@ -927,13 +966,6 @@ static int sndrate_prevnext(int rate, int dir)
        return rates[i];\r
 }\r
 \r
-static void int_incdec(int *p, int inc, int min, int max)\r
-{\r
-       *p += inc;\r
-       if      (*p < min) *p = min;\r
-       else if (*p > max) *p = max;\r
-}\r
-\r
 static void config_commit(void)\r
 {\r
        gp2x_cpuclock_gamma_update();\r
@@ -1012,10 +1044,26 @@ static int menu_loop_options(void)
 \r
 static void draw_menu_credits(void)\r
 {\r
+       char vstr[16];\r
+\r
        //int tl_x = 15, tl_y = 70;\r
        gp2x_fceu_copy_bg();\r
 \r
-       // TODO\r
+       sprintf(vstr, "GPFCE v" GP2X_PORT_VERSION " rev%i", GP2X_PORT_REV);\r
+       gp2x_text_out15(20,  30, vstr);\r
+       gp2x_text_out15(20,  40, "(c) notaz, 2007");\r
+\r
+       gp2x_text_out15(20,  70, "Based on FCE Ultra versions");\r
+       gp2x_text_out15(20,  80, "0.81 and 0.98.15");\r
+\r
+       gp2x_text_out15(20, 110, "         - Credits - ");\r
+       gp2x_text_out15(20, 130, "Bero: FCE");\r
+       gp2x_text_out15(20, 140, "Xodnizel: FCE Ultra");\r
+       gp2x_text_out15(20, 150, "zzhu8192: original port");\r
+       gp2x_text_out15(20, 160, "rlyeh: minimal lib");\r
+       gp2x_text_out15(20, 170, "Hermes, theoddbot, god_at_hell:");\r
+       gp2x_text_out15(20, 180, "  cpuctrl, gamma libs");\r
+       gp2x_text_out15(20, 190, "Squidge: squidgehack");\r
 \r
        gp2x_video_flip();\r
 }\r
@@ -1114,6 +1162,8 @@ static int menu_loop_root(void)
                                                /*if(savestate_menu_loop(0))\r
                                                        continue;*/\r
                                                FCEUI_SaveState();\r
+                                               Exit = 0;\r
+                                               while (gp2x_joystick_read(1) & GP2X_B) usleep(50*1000);\r
                                                return 0;\r
                                        }\r
                                        break;\r
@@ -1122,6 +1172,8 @@ static int menu_loop_root(void)
                                                /*if(savestate_menu_loop(1))\r
                                                        continue;*/\r
                                                FCEUI_LoadState();\r
+                                               Exit = 0;\r
+                                               while (gp2x_joystick_read(1) & GP2X_B) usleep(50*1000);\r
                                                return 0;\r
                                        }\r
                                        break;\r
@@ -1136,6 +1188,7 @@ static int menu_loop_root(void)
                                        selfname = romsel_loop(curr_path);\r
                                        if (selfname) {\r
                                                printf("selected file: %s\n", selfname);\r
+                                               while (gp2x_joystick_read(1) & GP2X_B) usleep(50*1000);\r
                                                return 2;\r
                                        }\r
                                        break;\r