📄 emugui.cpp
字号:
{
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 + -