⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emugui.cpp

📁 NES game Emulator in Linux.c and asm codes.
💻 CPP
📖 第 1 页 / 共 4 页
字号:
  {
   case KEY_UP:
    CursorAt--;
    if(CursorAt == -1) // so it wraps
     CursorAt = CONTROLS_NUM_OPTIONS-1;
    break;
   case KEY_DOWN:
    CursorAt++;
    if(CursorAt == CONTROLS_NUM_OPTIONS) // so it wraps
    CursorAt=0;
    break;

   case KEY_ESC:
    return -1;

   case KEY_ENTER:
   case KEY_ENTER_PAD:

    if (CursorAt == CONTROLS_CONTROLLER_1)
    {
     switch(++CONTROLLER_1_TYPE)
     {
      case 1:
       if (mouse_available)
       {
        Controls_Options[CONTROLS_CONTROLLER_1] = "Mouse on player 1";
        break;
       }
      default:
       Controls_Options[CONTROLS_CONTROLLER_1] = "Joypad on player 1";
       CONTROLLER_1_TYPE=0;
     }
    break;
    }

    if (CursorAt == CONTROLS_CONTROLLER_2)
    {
     switch(++CONTROLLER_2_TYPE)
     {
      case 1:
       if (mouse_available)
       {
        Controls_Options[CONTROLS_CONTROLLER_2] = "Mouse on player 2";
        break;
       }
      default:
       Controls_Options[CONTROLS_CONTROLLER_2] = "Joypad on player 2";
       CONTROLLER_2_TYPE=0;
     }
     break;
    }

    if (CursorAt == CONTROLS_MAP_1)
    {
     AskControllerInputs(&input_player1);
     break;
    }

    if (CursorAt == CONTROLS_MAP_2)
    {
     AskControllerInputs(&input_player2);
     break;
    }

  }
 }
 return 1;          // Signify normal exit
}


int ConfigWindow()
{
 int temp;

 Config_Options[CONFIG_SCREEN_MODE] = Screen_Options[SCREEN_MODE];

 if(SPC_ENABLED) Config_Options[CONFIG_ENABLE_SPC] = "Emulate SPC";
 else Config_Options[CONFIG_ENABLE_SPC] = "Skip SPC";

 switch (stretch_x)
 {
  case 0:
   strcpy(stretch_h_str, "H stretch: off");
   break;
  case 1:
   strcpy(stretch_h_str, "H stretch: full");
   break;
  default:
   sprintf(stretch_h_str, "H stretch: %d", stretch_x);
   break;
 }

 switch (stretch_y)
 {
  case 0:
   strcpy(stretch_v_str, "V stretch: off");
   break;
  case 1:
   strcpy(stretch_v_str, "V stretch: full");
   break;
  default:
   sprintf(stretch_v_str, "V stretch: %d", stretch_y);
   break;
 }

 if (FPS_ENABLED) sprintf(fps_counter_str, "FPS counter: on");
 else sprintf(fps_counter_str, "FPS counter: off");

 sprintf(min_frameskip_str, "Min Frameskip: %-2d", FRAME_SKIP_MIN);
 sprintf(max_frameskip_str, "Max Frameskip: %-2d", FRAME_SKIP_MAX);

 int CursorAt=0;
 int keypress, key_asc, key_scan;
 clear_keybuf();

 for(;;)
 {
  UpdateConfigWindow(CursorAt);
  refresh_gui();

  while (!keypressed());
  keypress = readkey();
  key_asc = keypress & 0xFF;
  key_scan = keypress >> 8;

  switch (key_scan)
  {
   case KEY_UP:
    CursorAt--;
    if(CursorAt == -1) // so it wraps
     CursorAt = CONFIG_NUM_OPTIONS-1;
    break;
   case KEY_DOWN:
    CursorAt++;
    if(CursorAt == CONFIG_NUM_OPTIONS) // so it wraps
    CursorAt=0;
    break;

  // For frameskip!
   case KEY_LEFT:
    if (CursorAt == CONFIG_STRETCH_H && stretch_x > 0)
    {
     stretch_x--;

     switch (stretch_x)
     {
      case 0:
       strcpy(stretch_h_str, "H stretch: off");
       break;
      case 1:
       strcpy(stretch_h_str, "H stretch: full");
       break;
      default:
       sprintf(stretch_h_str, "H stretch: %d", stretch_x);
       break;
     }
    }

    if (CursorAt == CONFIG_STRETCH_V && stretch_y > 0)
    {
     stretch_y--;

     switch (stretch_y)
     {
      case 0:
       strcpy(stretch_v_str, "V stretch: off");
       break;
      case 1:
       strcpy(stretch_v_str, "V stretch: full");
       break;
      default:
       sprintf(stretch_v_str, "V stretch: %d", stretch_y);
       break;
     }
    }

    if (CursorAt == CONFIG_FRAMESKIP_MIN && FRAME_SKIP_MIN > 0)
    {
     // 60,30,20,15,10-0
     if(FRAME_SKIP_MIN>30) FRAME_SKIP_MIN-=30;
     else if(FRAME_SKIP_MIN>20) FRAME_SKIP_MIN-=10;
     else if(FRAME_SKIP_MIN>10) FRAME_SKIP_MIN-=5;
     else FRAME_SKIP_MIN--;

     if(FRAME_SKIP_MIN>FRAME_SKIP_MAX)
     {
      FRAME_SKIP_MAX=FRAME_SKIP_MIN;
      sprintf(max_frameskip_str, "Max Frameskip: %-2d", FRAME_SKIP_MAX);
     }
     sprintf(min_frameskip_str, "Min Frameskip: %-2d", FRAME_SKIP_MIN);
     break;
    }

    if (CursorAt == CONFIG_FRAMESKIP_MAX && FRAME_SKIP_MAX > 1)
    {
     // 60,30,20,15,10-0
     if(FRAME_SKIP_MAX>30) FRAME_SKIP_MAX-=30;
     else if(FRAME_SKIP_MAX>20) FRAME_SKIP_MAX-=10;
     else if(FRAME_SKIP_MAX>10) FRAME_SKIP_MAX-=5;
     else FRAME_SKIP_MAX--;

     if(FRAME_SKIP_MAX<FRAME_SKIP_MIN)
     {
      FRAME_SKIP_MIN=FRAME_SKIP_MAX;
      sprintf(min_frameskip_str, "Min Frameskip: %-2d", FRAME_SKIP_MIN);
     }
     sprintf(max_frameskip_str, "Max Frameskip: %-2d", FRAME_SKIP_MAX);
     break;
    }

    break;

   case KEY_RIGHT:
    if (CursorAt == CONFIG_STRETCH_H && stretch_x < 16)
    {
     stretch_x++;

     switch (stretch_x)
     {
      case 0:
       strcpy(stretch_h_str, "H stretch: off");
       break;
      case 1:
       strcpy(stretch_h_str, "H stretch: full");
       break;
      default:
       sprintf(stretch_h_str, "H stretch: %d", stretch_x);
       break;
     }
    }

    if (CursorAt == CONFIG_STRETCH_V && stretch_y < 16)
    {
     stretch_y++;

     switch (stretch_y)
     {
      case 0:
       strcpy(stretch_v_str, "V stretch: off");
       break;
      case 1:
       strcpy(stretch_v_str, "V stretch: full");
       break;
      default:
       sprintf(stretch_v_str, "V stretch: %d", stretch_y);
       break;
     }
    }

    if (CursorAt == CONFIG_FRAMESKIP_MIN && FRAME_SKIP_MIN < 60)
    {
     // 0-10,15,20,30,60
     if(FRAME_SKIP_MIN<10) FRAME_SKIP_MIN++;
     else if(FRAME_SKIP_MIN<20) FRAME_SKIP_MIN+=5;
     else if(FRAME_SKIP_MIN<30) FRAME_SKIP_MIN+=10;
     else FRAME_SKIP_MIN+=30;

     if(FRAME_SKIP_MIN>FRAME_SKIP_MAX)
     {
      FRAME_SKIP_MAX=FRAME_SKIP_MIN;
      sprintf(max_frameskip_str, "Max Frameskip: %-2d", FRAME_SKIP_MAX);
     }
     sprintf(min_frameskip_str, "Min Frameskip: %-2d", FRAME_SKIP_MIN);
     break;
    }

    if (CursorAt == CONFIG_FRAMESKIP_MAX && FRAME_SKIP_MAX < 60)
    {
     // 0-10,15,20,30,60
     if(FRAME_SKIP_MAX<10) FRAME_SKIP_MAX++;
     else if(FRAME_SKIP_MAX<20) FRAME_SKIP_MAX+=5;
     else if(FRAME_SKIP_MAX<30) FRAME_SKIP_MAX+=10;
     else FRAME_SKIP_MAX+=30;

     if(FRAME_SKIP_MAX<FRAME_SKIP_MIN)
     {
      FRAME_SKIP_MIN=FRAME_SKIP_MAX;
      sprintf(min_frameskip_str, "Min Frameskip: %-2d", FRAME_SKIP_MIN);
     }
     sprintf(max_frameskip_str, "Max Frameskip: %-2d", FRAME_SKIP_MAX);
     break;
    }

    break;

   case KEY_ESC:
    return -1;

   case KEY_ENTER:
   case KEY_ENTER_PAD:
    if (CursorAt == CONFIG_SCREEN_MODE)
    {
     while((temp = ScreenWindow()) != -1)
     {
      // Setup screen mode (SCREEN_MODE is set here so following works)
      SetGUIScreen(temp);

      Config_Options[CONFIG_SCREEN_MODE] = Screen_Options[SCREEN_MODE];
#ifndef NO_LOGO
      if (sneese)
      { // Prevent a crash if file not found!
       set_palette(sneesepal);
      }

      set_palette_range(&GUIPal[-240],240,255,1);    // Set the GUI palette up.
#endif
     }
     break;
    }

    if (CursorAt == CONFIG_CONTROLLERS)
    {
     while((temp = ControlsWindow()) != -1);
     break;
    }

    if (CursorAt == CONFIG_ENABLE_SPC)
    {
     if (SPC_ENABLED)
     {
      Config_Options[CONFIG_ENABLE_SPC] = "Skip SPC";
      SPC_ENABLED = 0;
     } else {
      Config_Options[CONFIG_ENABLE_SPC] = "Emulate SPC";
      SPC_ENABLED = 1;
     }
    }

    if (CursorAt == CONFIG_SOUND)
    {
     while((temp = SoundWindow()) != -1);
     break;
    }

    if (CursorAt == CONFIG_ENABLE_FPS_COUNTER)
    {
     sprintf(fps_counter_str, (FPS_ENABLED = !FPS_ENABLED) ?
      "FPS counter: on" : "FPS counter: off");
    }

  }
 }
 return 1;          // Signify normal exit
}

WINDOW *ROMInfo_window=0;

void RomInfo(void)
{
 char drive[MAXDRIVE], dir[MAXDIR], file[MAXFILE+MAXEXT], ext[MAXEXT];

 ROMInfo_window->refresh();

 // Don't display the full path to the file, it might not fit in the (small) window
 fnsplit(rom_romfile,drive,dir,file,ext);
 if (strlen(ext))
  strcat(file,ext);

 PlotString(ROMInfo_window,default_font,"File name: ",0,0);
 PlotString(ROMInfo_window,default_font,file,default_font->get_widthspace()*11,0);

 PlotString(ROMInfo_window,default_font,"ROM title: ",0,default_font->get_heightspace());
 PlotString(ROMInfo_window,default_font,rom_romname,default_font->get_widthspace()*11,default_font->get_heightspace());

 PlotString(ROMInfo_window,default_font,"ROM type: ",0,default_font->get_heightspace()*2);
 PlotString(ROMInfo_window,default_font,rom_romtype,default_font->get_widthspace()*10,default_font->get_heightspace()*2);

 PlotString(ROMInfo_window,default_font,rom_romhilo,0,default_font->get_heightspace()*3);

 PlotString(ROMInfo_window,default_font,"ROM size: ",0,default_font->get_heightspace()*4);
 PlotString(ROMInfo_window,default_font,rom_romsize,default_font->get_widthspace()*10,default_font->get_heightspace()*4);

 PlotString(ROMInfo_window,default_font,"SRAM size: ",0,default_font->get_heightspace()*5);
 PlotString(ROMInfo_window,default_font,rom_sram,default_font->get_widthspace()*11,default_font->get_heightspace()*5);

 PlotString(ROMInfo_window,default_font,"Country: ",0,default_font->get_heightspace()*6);
 PlotString(ROMInfo_window,default_font,rom_country,default_font->get_widthspace()*9,default_font->get_heightspace()*6);

 refresh_gui();

 for (;;)
 {
  while (!keypressed());
  if ((readkey() >> 8) == KEY_ESC) break;
 }
}

extern "C" unsigned char BGMODE,VMAIN,OBSEL,HiSprite;
extern "C" unsigned char W12SEL,W34SEL,WOBJSEL,WH0,WH1,WH2,WH3;
extern "C" unsigned char TM,TS,TMW,TSW,WBGLOG,WOBJLOG,CGWSEL,CGADSUB;

WINDOW *HWStatus_window=0;

EXTERN unsigned char Win1_Count_In, Win1_Count_Out;
EXTERN unsigned char Win2_Count_In, Win2_Count_Out;
EXTERN unsigned char Win1_Bands_In[2], Win1_Bands_Out[4];
EXTERN unsigned char Win2_Bands_In[2], Win2_Bands_Out[4];

void HWStatus(void)
{
 char Number[5];

 HWStatus_window->refresh();
 PlotString(HWStatus_window,default_font,"65c816 A:#### X:#### Y:#### DB:##",0,0);
 sprintf(Number, "%04X", cpu_65c816_A);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*9,0);
 sprintf(Number, "%04X", cpu_65c816_X);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*16,0);
 sprintf(Number, "%04X", cpu_65c816_Y);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*23,0);
 sprintf(Number, "%02X", (unsigned) cpu_65c816_DB);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*31,0);
 PlotString(HWStatus_window,default_font,"PB:## PC:#### S:#### D:#### P:###",0,default_font->get_heightspace());
 sprintf(Number, "%02X", (unsigned) cpu_65c816_PB);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*3,default_font->get_heightspace());
 sprintf(Number, "%04X", cpu_65c816_PC);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*9,default_font->get_heightspace());
 sprintf(Number, "%04X", cpu_65c816_S);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*16,default_font->get_heightspace());
 sprintf(Number, "%04X", cpu_65c816_D);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*23,default_font->get_heightspace());
// sprintf(Number, "%03X", cpu_65c816_P&0x1FF);
// PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*30,default_font->get_heightspace());
 PlotString(HWStatus_window,default_font,"OLD_PB:## OLD_PC:#### OBSEL:## ##",0,default_font->get_heightspace()*2);
 sprintf(Number, "%02X", (unsigned) OLD_PB);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*7,default_font->get_heightspace()*2);
 sprintf(Number, "%04X", OLD_PC);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*17,default_font->get_heightspace()*2);
 sprintf(Number, "%02X",(unsigned) OBSEL);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*28,default_font->get_heightspace()*2);
 sprintf(Number, "%02X",(unsigned) HiSprite);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*31,default_font->get_heightspace()*2);

 PlotString(HWStatus_window,default_font,"BGMODE:## VMAIN:## TM:## TS:##",0,default_font->get_heightspace()*3);
 sprintf(Number, "%02X", (unsigned) BGMODE);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*7,default_font->get_heightspace()*3);
 sprintf(Number, "%02X", (unsigned) VMAIN);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*16,default_font->get_heightspace()*3);
 sprintf(Number, "%02X", (unsigned) TM);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*22,default_font->get_heightspace()*3);
 sprintf(Number, "%02X", (unsigned) TS);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*28,default_font->get_heightspace()*3);
 PlotString(HWStatus_window,default_font,"WH0: ## WH1: ## WH2: ## WH3: ##",0,default_font->get_heightspace()*4);
 sprintf(Number, "%02X", (unsigned) WH0);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*5,default_font->get_heightspace()*4);
 sprintf(Number, "%02X", (unsigned) WH1);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*13,default_font->get_heightspace()*4);
 sprintf(Number, "%02X", (unsigned) WH2);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*21,default_font->get_heightspace()*4);
 sprintf(Number, "%02X", (unsigned) WH3);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*29,default_font->get_heightspace()*4);
 PlotString(HWStatus_window,default_font,"TMW: ## TSW: ## WSEL: ## ## ##",0,default_font->get_heightspace()*5);
 sprintf(Number, "%02X", (unsigned) TMW);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*5,default_font->get_heightspace()*5);
 sprintf(Number, "%02X", (unsigned) TSW);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*13,default_font->get_heightspace()*5);
 sprintf(Number, "%02X", (unsigned) W12SEL);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*22,default_font->get_heightspace()*5);
 sprintf(Number, "%02X", (unsigned) W34SEL);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*25,default_font->get_heightspace()*5);
 sprintf(Number, "%02X", (unsigned) WOBJSEL);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*28,default_font->get_heightspace()*5);

 PlotString(HWStatus_window,default_font,"WLOG:## ## CGWSEL:## CGADSUB:##",0,default_font->get_heightspace()*6);
 sprintf(Number, "%02X", (unsigned) WBGLOG);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*5,default_font->get_heightspace()*6);
 sprintf(Number, "%02X", (unsigned) WOBJLOG);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*8,default_font->get_heightspace()*6);
 sprintf(Number, "%02X", (unsigned) CGWSEL);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*18,default_font->get_heightspace()*6);
 sprintf(Number, "%02X", (unsigned) CGADSUB);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*29,default_font->get_heightspace()*6);

 PlotString(HWStatus_window,default_font,"Win1:# ## ## # ## ## ## ##",0,default_font->get_heightspace()*7);
 sprintf(Number, "%1X", (unsigned) Win1_Count_In);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*5,default_font->get_heightspace()*7);
 sprintf(Number, "%02X", (unsigned) Win1_Bands_In[0]);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*7,default_font->get_heightspace()*7);
 sprintf(Number, "%02X", (unsigned) Win1_Bands_In[1]);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*10,default_font->get_heightspace()*7);
 sprintf(Number, "%1X", (unsigned) Win1_Count_Out);
 PlotString(HWStatus_window,default_font,Number,default_font->get_widthspace()*13,default_font->get_heightspace()*7);
 sprintf(Number, "%02X", (unsigned) Win1_Bands_Out[0]);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -