some support for vdp debug reg
[picodrive.git] / platform / common / menu_pico.c
index 0a5e85a..cc11638 100644 (file)
@@ -14,7 +14,7 @@
 #include "input_pico.h"
 #include "version.h"
 
-#include <pico/pico.h>
+#include <pico/pico_int.h>
 #include <pico/patch.h>
 
 #ifdef PANDORA
@@ -119,11 +119,14 @@ static void menu_enter(int is_rom_loaded)
        }
        else
        {
+               int pos;
                char buff[256];
+               pos = plat_get_skin_dir(buff, 256);
+               strcpy(buff + pos, "background.png");
 
                // should really only happen once, on startup..
-               emu_make_path(buff, "skin/background.png", sizeof(buff));
-               if (readpng(g_menubg_ptr, buff, READPNG_BG, g_menuscreen_w, g_menuscreen_h) < 0)
+               if (readpng(g_menubg_ptr, buff, READPNG_BG,
+                                               g_menuscreen_w, g_menuscreen_h) < 0)
                        memset(g_menubg_ptr, 0, g_menuscreen_w * g_menuscreen_h * 2);
        }
 
@@ -395,31 +398,6 @@ static int menu_loop_keyconfig(int id, int keys)
 
 // ------------ SCD options menu ------------
 
-static const char *mgn_cdopt_ra(int id, int *offs)
-{
-       *offs = -5;
-       if (PicoCDBuffers <= 0)
-               return "     OFF";
-       sprintf(static_buff, "%5iK", PicoCDBuffers * 2);
-       return static_buff;
-}
-
-static int mh_cdopt_ra(int id, int keys)
-{
-       if (keys & PBTN_LEFT) {
-               PicoCDBuffers >>= 1;
-               if (PicoCDBuffers < 2)
-                       PicoCDBuffers = 0;
-       } else {
-               if (PicoCDBuffers <= 0)
-                       PicoCDBuffers = 1;
-               PicoCDBuffers <<= 1;
-               if (PicoCDBuffers > 8*1024)
-                       PicoCDBuffers = 8*1024; // 16M
-       }
-       return 0;
-}
-
 static const char h_cdleds[] = "Show power/CD LEDs of emulated console";
 static const char h_cdda[]   = "Play audio tracks from mp3s/wavs/bins";
 static const char h_cdpcm[]  = "Emulate PCM audio chip for effects/voices/music";
@@ -435,9 +413,8 @@ static menu_entry e_menu_cd_options[] =
        mee_onoff_h("CD LEDs",              MA_CDOPT_LEDS,          currentConfig.EmuOpt, EOPT_EN_CD_LEDS, h_cdleds),
        mee_onoff_h("CDDA audio",           MA_CDOPT_CDDA,          PicoOpt, POPT_EN_MCD_CDDA, h_cdda),
        mee_onoff_h("PCM audio",            MA_CDOPT_PCM,           PicoOpt, POPT_EN_MCD_PCM, h_cdpcm),
-       mee_cust   ("ReadAhead buffer",     MA_CDOPT_READAHEAD,     mh_cdopt_ra, mgn_cdopt_ra),
        mee_onoff_h("SaveRAM cart",         MA_CDOPT_SAVERAM,       PicoOpt, POPT_EN_MCD_RAMCART, h_srcart),
-       mee_onoff_h("Scale/Rot. fx (slow)", MA_CDOPT_SCALEROT_CHIP, PicoOpt, POPT_EN_MCD_GFX, h_scfx),
+       mee_onoff_h("Scale/Rot. fx",        MA_CDOPT_SCALEROT_CHIP, PicoOpt, POPT_EN_MCD_GFX, h_scfx),
        mee_end,
 };
 
@@ -826,11 +803,13 @@ static void draw_text_debug(const char *str, int skip, int from)
 static void draw_frame_debug(void)
 {
        char layer_str[48] = "layers:                   ";
-       if (PicoDrawMask & PDRAW_LAYERB_ON)      memcpy(layer_str +  8, "B", 1);
-       if (PicoDrawMask & PDRAW_LAYERA_ON)      memcpy(layer_str + 10, "A", 1);
-       if (PicoDrawMask & PDRAW_SPRITES_LOW_ON) memcpy(layer_str + 12, "spr_lo", 6);
-       if (PicoDrawMask & PDRAW_SPRITES_HI_ON)  memcpy(layer_str + 19, "spr_hi", 6);
-       if (PicoDrawMask & PDRAW_32X_ON)         memcpy(layer_str + 26, "32x", 4);
+       struct PicoVideo *pv = &Pico.video;
+
+       if (!(pv->debug_p & PVD_KILL_B))    memcpy(layer_str +  8, "B", 1);
+       if (!(pv->debug_p & PVD_KILL_A))    memcpy(layer_str + 10, "A", 1);
+       if (!(pv->debug_p & PVD_KILL_S_LO)) memcpy(layer_str + 12, "spr_lo", 6);
+       if (!(pv->debug_p & PVD_KILL_S_HI)) memcpy(layer_str + 19, "spr_hi", 6);
+       if (!(pv->debug_p & PVD_KILL_32X))  memcpy(layer_str + 26, "32x", 4);
 
        pemu_forced_frame(1, 0);
        make_bg(1);
@@ -841,6 +820,7 @@ static void draw_frame_debug(void)
 
 static void debug_menu_loop(void)
 {
+       struct PicoVideo *pv = &Pico.video;
        int inp, mode = 0;
        int spr_offs = 0, dumped = 0;
        char *tmp;
@@ -901,11 +881,11 @@ static void debug_menu_loop(void)
                                }
                                break;
                        case 1:
-                               if (inp & PBTN_LEFT)  PicoDrawMask ^= PDRAW_LAYERB_ON;
-                               if (inp & PBTN_RIGHT) PicoDrawMask ^= PDRAW_LAYERA_ON;
-                               if (inp & PBTN_DOWN)  PicoDrawMask ^= PDRAW_SPRITES_LOW_ON;
-                               if (inp & PBTN_UP)    PicoDrawMask ^= PDRAW_SPRITES_HI_ON;
-                               if (inp & PBTN_MA2)   PicoDrawMask ^= PDRAW_32X_ON;
+                               if (inp & PBTN_LEFT)  pv->debug_p ^= PVD_KILL_B;
+                               if (inp & PBTN_RIGHT) pv->debug_p ^= PVD_KILL_A;
+                               if (inp & PBTN_DOWN)  pv->debug_p ^= PVD_KILL_S_LO;
+                               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
                                        PicoSkipFrame = 1;
@@ -925,13 +905,27 @@ static void debug_menu_loop(void)
 
 // ------------ main menu ------------
 
+static void draw_frame_credits(void)
+{
+       smalltext_out16(4, 1, "build: " __DATE__ " " __TIME__, 0xe7fc);
+}
+
 static const char credits[] =
        "PicoDrive v" VERSION " (c) notaz, 2006-2013\n\n\n"
        "Credits:\n"
-       "fDave: Cyclone 68000 core,\n"
-       "      base code of PicoDrive\n"
+       "fDave: initial code\n"
+#ifdef EMU_C68K
+       "      Cyclone 68000 core\n"
+#else
+       "Stef, Chui: FAME/C 68k core\n"
+#endif
+#ifdef _USE_DRZ80
        "Reesy & FluBBa: DrZ80 core\n"
-       "MAME devs: YM2612 and SN76496 cores\n"
+#else
+       "Stef, NJ: CZ80 core\n"
+#endif
+       "MAME devs: SH2, YM2612 and SN76496 cores\n"
+       "Eke, Stef: some Sega CD code\n"
        "Inder, ketchupgun: graphics\n"
 #ifdef __GP2X__
        "Squidge: mmuhack\n"
@@ -1029,8 +1023,17 @@ static int main_menu_handler(int id, int keys)
                        return 1;
                }
                break;
+       case MA_MAIN_CHANGE_CD:
+               if (PicoAHW & PAHW_MCD) {
+                       // if cd is loaded, cdd_unload() triggers eject and
+                       // returns 1, else we'll select and load new CD here
+                       if (!cdd_unload())
+                               menu_loop_tray();
+                       return 1;
+               }
+               break;
        case MA_MAIN_CREDITS:
-               draw_menu_message(credits, NULL);
+               draw_menu_message(credits, draw_frame_credits);
                in_menu_wait(PBTN_MOK|PBTN_MBACK, NULL, 70);
                break;
        case MA_MAIN_EXIT:
@@ -1062,6 +1065,7 @@ static menu_entry e_menu_main[] =
        mee_handler_id("Load State",         MA_MAIN_LOAD_STATE,  main_menu_handler),
        mee_handler_id("Reset game",         MA_MAIN_RESET_GAME,  main_menu_handler),
        mee_handler_id("Load new ROM/ISO",   MA_MAIN_LOAD_ROM,    main_menu_handler),
+       mee_handler_id("Change CD/ISO",      MA_MAIN_CHANGE_CD,   main_menu_handler),
        mee_handler   ("Change options",                          menu_loop_options),
        mee_handler   ("Configure controls",                      menu_loop_keyconfig),
        mee_handler_id("Credits",            MA_MAIN_CREDITS,     main_menu_handler),
@@ -1078,6 +1082,7 @@ void menu_loop(void)
        me_enable(e_menu_main, MA_MAIN_SAVE_STATE,  PicoGameLoaded);
        me_enable(e_menu_main, MA_MAIN_LOAD_STATE,  PicoGameLoaded);
        me_enable(e_menu_main, MA_MAIN_RESET_GAME,  PicoGameLoaded);
+       me_enable(e_menu_main, MA_MAIN_CHANGE_CD,   PicoAHW & PAHW_MCD);
        me_enable(e_menu_main, MA_MAIN_PATCHES, PicoPatches != NULL);
 
        menu_enter(PicoGameLoaded);