* added NES->Emulation Speed->Set Custom Speed

* added NES->Emulation Speed->Set FrameAdvance Delay
* added NES->Emulation Speed->Set custom speed for FrameAdvance
* Debugger: fixed mouse wheel scrolling
This commit is contained in:
ansstuff 2012-12-13 15:59:45 +00:00
parent 880c9deb62
commit b8c1d1e29b
13 changed files with 168 additions and 57 deletions

View File

@ -1,10 +1,14 @@
13-Dec-2012 - AnS - win32: added Emulation Speed->Set custom speed for FrameAdvance
13-Dec-2012 - AnS - win32: added NES->Emulation Speed->Set FrameAdvance Delay
13-Dec-2012 - AnS - win32: added NES->Emulation Speed->Set Custom Speed
12-Dec-2012 - CaH4e3 - finish with mapper to boards conversion
07-Dec-2012 - CaH4e3 - Tracer: fixed RAM-located code logging when CDLogger options are enabled
05-Dec-2012 - AnS - fixed zapper and mouse positioning in fullscreen and bestfit mode 05-Dec-2012 - AnS - fixed zapper and mouse positioning in fullscreen and bestfit mode
04-Dec-2012 - AnS - speed up HUD text drawing 04-Dec-2012 - AnS - speed up HUD text drawing
04-Dec-2012 - AnS - Taseditor: speed up consecutive Recordings (when combining) 04-Dec-2012 - AnS - Taseditor: speed up consecutive Recordings (when combining)
03-Dec-2012 - AnS - Taseditor: fixed accelerators when editing Notes 03-Dec-2012 - AnS - Taseditor: fixed accelerators when editing Notes
03-Dec-2012 - AnS - fixed "X" button in the "Enter New Input" dialog (Hotkey Mapping); changed "Cancel" button to "OK" 03-Dec-2012 - AnS - fixed "X" button in the "Enter New Input" dialog (Hotkey Mapping); changed "Cancel" button to "OK"
03-Dec-2012 - CaH4e3 - fixed mapper 99 03-Dec-2012 - CaH4e3 - fixed mapper 99
30-Nov-2012 - CaH4e3 - more mappers to boards conversion
29-Nov-2012 - zeromus - fix "you ling xing dong" by assigning to mapper 192 29-Nov-2012 - zeromus - fix "you ling xing dong" by assigning to mapper 192
---r2768 - FCEUX 2.2.0 Released--- ---r2768 - FCEUX 2.2.0 Released---

View File

@ -492,7 +492,7 @@ void BreakHit(int bp_num, bool force = false)
} }
} }
FCEUI_SetEmulationPaused(1); //mbg merge 7/19/06 changed to use EmulationPaused() FCEUI_SetEmulationPaused(EMULATIONPAUSED_PAUSED); //mbg merge 7/19/06 changed to use EmulationPaused()
#ifdef WIN32 #ifdef WIN32
FCEUD_DebugBreakpoint(bp_num); FCEUD_DebugBreakpoint(bp_num);

View File

@ -98,7 +98,7 @@ void IncreaseEmulationSpeed(void)
RefreshThrottleFPS(); RefreshThrottleFPS();
FCEU_DispMessage("emulation speed %.1f%%",0, g_fpsScale*100.0); FCEU_DispMessage("Emulation speed %.1f%%",0, g_fpsScale*100.0);
} }
/** /**
@ -112,7 +112,7 @@ void DecreaseEmulationSpeed(void)
RefreshThrottleFPS(); RefreshThrottleFPS();
FCEU_DispMessage("emulation speed %.1f%%",0, g_fpsScale*100.0); FCEU_DispMessage("Emulation speed %.1f%%",0, g_fpsScale*100.0);
} }
/** /**
@ -146,5 +146,5 @@ FCEUD_SetEmulationSpeed(int cmd)
RefreshThrottleFPS(); RefreshThrottleFPS();
FCEU_DispMessage("emulation speed %.1f%%",0, g_fpsScale*100.0); FCEU_DispMessage("Emulation speed %.1f%%",0, g_fpsScale*100.0);
} }

View File

@ -46,6 +46,7 @@ extern CFGSTRUCT NetplayConfig[];
extern CFGSTRUCT InputConfig[]; extern CFGSTRUCT InputConfig[];
extern CFGSTRUCT HotkeyConfig[]; extern CFGSTRUCT HotkeyConfig[];
extern int autoHoldKey, autoHoldClearKey; extern int autoHoldKey, autoHoldClearKey;
extern int frameAdvance_Delay;
extern int EnableAutosave, AutosaveQty, AutosaveFrequency; extern int EnableAutosave, AutosaveQty, AutosaveFrequency;
extern int AFon, AFoff, AutoFireOffset; extern int AFon, AFoff, AutoFireOffset;
extern int DesynchAutoFire; extern int DesynchAutoFire;
@ -71,6 +72,7 @@ extern bool Show_FPS;
extern bool oldInputDisplay; extern bool oldInputDisplay;
extern bool fullSaveStateLoads; extern bool fullSaveStateLoads;
extern int frameSkipAmt; extern int frameSkipAmt;
extern int32 fps_scale_frameadvance;
extern TASEDITOR_CONFIG taseditor_config; extern TASEDITOR_CONFIG taseditor_config;
extern char* recent_projects[]; extern char* recent_projects[];
@ -251,6 +253,7 @@ static CFGSTRUCT fceuconfig[] = {
AC(MemWatchLoadFileOnStart), AC(MemWatchLoadFileOnStart),
AC(MemWCollapsed), AC(MemWCollapsed),
AC(BindToMain), AC(BindToMain),
AC(frameAdvance_Delay),
AC(EnableAutosave), AC(EnableAutosave),
AC(AutosaveQty), AC(AutosaveQty),
AC(AutosaveFrequency), AC(AutosaveFrequency),
@ -261,6 +264,7 @@ static CFGSTRUCT fceuconfig[] = {
AC(debuggerDisplayROMoffsets), AC(debuggerDisplayROMoffsets),
AC(fullSaveStateLoads), AC(fullSaveStateLoads),
AC(frameSkipAmt), AC(frameSkipAmt),
AC(fps_scale_frameadvance),
//window positions //window positions
AC(ChtPosX), AC(ChtPosX),

View File

@ -1350,6 +1350,11 @@ BOOL CALLBACK IDC_DEBUGGER_DISASSEMBLY_WndProc(HWND hwndDlg, UINT uMsg, WPARAM w
} }
break; break;
} }
case WM_MOUSEWHEEL:
{
SendMessage(GetDlgItem(hDebug,IDC_DEBUGGER_DISASSEMBLY_VSCR), uMsg, wParam, lParam);
return 0;
}
} }
return CallWindowProc(IDC_DEBUGGER_DISASSEMBLY_oldWndProc, hwndDlg, uMsg, wParam, lParam); return CallWindowProc(IDC_DEBUGGER_DISASSEMBLY_oldWndProc, hwndDlg, uMsg, wParam, lParam);
} }

View File

@ -896,13 +896,13 @@ void win_debuggerLoop()
_updateWindow(); _updateWindow();
// HACK: break when Frame Advance is pressed // HACK: break when Frame Advance is pressed
extern bool frameAdvanceRequested; extern bool frameAdvanceRequested;
extern int frameAdvanceDelay; extern int frameAdvance_Delay_count, frameAdvance_Delay;
if (frameAdvanceRequested) if (frameAdvanceRequested)
{ {
if (frameAdvanceDelay==0 || frameAdvanceDelay >= 10) if (frameAdvance_Delay_count == 0 || frameAdvance_Delay_count >= frameAdvance_Delay)
FCEUI_SetEmulationPaused(2); FCEUI_SetEmulationPaused(EMULATIONPAUSED_FA);
if (frameAdvanceDelay < 10) if (frameAdvance_Delay_count < frameAdvance_Delay)
frameAdvanceDelay++; frameAdvance_Delay_count++;
} }
} }
int zzz=9; int zzz=9;

View File

@ -103,6 +103,10 @@ BEGIN
MENUITEM "&Slowest Speed", ID_NES_SLOWESTSPEED MENUITEM "&Slowest Speed", ID_NES_SLOWESTSPEED
MENUITEM "&Normal Speed", ID_NES_NORMALSPEED MENUITEM "&Normal Speed", ID_NES_NORMALSPEED
MENUITEM "&Turbo", ID_NES_TURBO MENUITEM "&Turbo", ID_NES_TURBO
MENUITEM "Set &Custom Speed", ID_EMULATIONSPEED_CUSTOMSPEED
MENUITEM SEPARATOR
MENUITEM "Set FrameAdvance Delay", ID_EMULATIONSPEED_SETFRAMEADVANCEDELAY
MENUITEM "Set custom speed for FrameAdvance", ID_EMULATIONSPEED_SETCUSTOMSPEEDFORFRAMEADVANCE
END END
END END
POPUP "&Config" POPUP "&Config"

View File

@ -240,7 +240,6 @@
#define IDC_NTVIEW_REFRESH_TRACKBAR 201 #define IDC_NTVIEW_REFRESH_TRACKBAR 201
#define IDC_ASSEMBLER_APPLY 201 #define IDC_ASSEMBLER_APPLY 201
#define IDI_ICON4 201 #define IDI_ICON4 201
#define BTN_CLEAR2 201
#define BTN_OK 201 #define BTN_OK 201
#define MENU_EJECT_DISK 202 #define MENU_EJECT_DISK 202
#define TXT_FAM 202 #define TXT_FAM 202
@ -1146,6 +1145,10 @@
#define ID_SELECTED_UNGREENZONE 40571 #define ID_SELECTED_UNGREENZONE 40571
#define ID_SELECTED_F 40572 #define ID_SELECTED_F 40572
#define ID_CONFIG_ENABLEGREENZONING 40573 #define ID_CONFIG_ENABLEGREENZONING 40573
#define ID_EMULATIONSPEED_SETFRAMEADVANCEDELAY 40574
#define ID_Menu40575 40575
#define ID_EMULATIONSPEED_SETCUSTOMSPEEDFORFRAMEADVANCE 40576
#define ID_EMULATIONSPEED_CUSTOMSPEED 40577
#define IDC_DEBUGGER_ICONTRAY 55535 #define IDC_DEBUGGER_ICONTRAY 55535
#define MW_ValueLabel2 65423 #define MW_ValueLabel2 65423
#define MW_ValueLabel1 65426 #define MW_ValueLabel1 65426
@ -1156,7 +1159,7 @@
#ifdef APSTUDIO_INVOKED #ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS #ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 289 #define _APS_NEXT_RESOURCE_VALUE 289
#define _APS_NEXT_COMMAND_VALUE 40574 #define _APS_NEXT_COMMAND_VALUE 40578
#define _APS_NEXT_CONTROL_VALUE 1282 #define _APS_NEXT_CONTROL_VALUE 1282
#define _APS_NEXT_SYMED_VALUE 101 #define _APS_NEXT_SYMED_VALUE 101
#endif #endif

View File

@ -22,6 +22,7 @@ Playback - Player of emulation states
#include "taseditor_project.h" #include "taseditor_project.h"
#include "../taseditor.h" #include "../taseditor.h"
#include "../../../fceu.h"
#ifdef _S9XLUA_H #ifdef _S9XLUA_H
extern void ForceExecuteLuaFrameFunctions(); extern void ForceExecuteLuaFrameFunctions();
@ -266,7 +267,7 @@ void PLAYBACK::ToggleEmulationPause()
} }
void PLAYBACK::PauseEmulation() void PLAYBACK::PauseEmulation()
{ {
FCEUI_SetEmulationPaused(1); FCEUI_SetEmulationPaused(EMULATIONPAUSED_PAUSED);
} }
void PLAYBACK::UnpauseEmulation() void PLAYBACK::UnpauseEmulation()
{ {

View File

@ -25,10 +25,12 @@
static uint64 tmethod,tfreq; static uint64 tmethod,tfreq;
static uint64 desiredfps; static uint64 desiredfps;
static int32 fps_scale_table[]=
{ 3, 3, 4, 8, 16, 32, 64, 128, 192, 256, 384, 512, 768, 1024, 2048, 4096, 8192, 16384, 16384};
int32 fps_scale = 256; int32 fps_scale = 256;
int32 fps_scale_unpaused = 256;
int32 fps_scale_frameadvance = 0;
static int32 fps_scale_table[] = { 3, 3, 4, 8, 16, 32, 64, 128, 192, 256, 384, 512, 768, 1024, 2048, 4096, 8192, 16384, 16384};
#define fps_table_size (sizeof(fps_scale_table) / sizeof(fps_scale_table[0]))
void RefreshThrottleFPS(void) void RefreshThrottleFPS(void)
{ {
@ -118,35 +120,32 @@ uint64 FCEUD_GetTimeFreq(void)
static void IncreaseEmulationSpeed(void) static void IncreaseEmulationSpeed(void)
{ {
int i; int i;
for(i=1; fps_scale_table[i]<fps_scale; i++) for(i = 1; fps_scale_table[i] < fps_scale_unpaused; i++)
; ;
fps_scale = fps_scale_table[i+1]; fps_scale = fps_scale_unpaused = fps_scale_table[i+1];
} }
static void DecreaseEmulationSpeed(void) static void DecreaseEmulationSpeed(void)
{ {
int i; int i;
for(i=1; fps_scale_table[i]<fps_scale; i++) for(i = 1; fps_scale_table[i] < fps_scale_unpaused; i++)
; ;
fps_scale = fps_scale_table[i-1]; fps_scale = fps_scale_unpaused = fps_scale_table[i-1];
} }
#define fps_table_size (sizeof(fps_scale_table)/sizeof(fps_scale_table[0]))
void FCEUD_SetEmulationSpeed(int cmd) void FCEUD_SetEmulationSpeed(int cmd)
{ {
switch(cmd) switch(cmd)
{ {
case EMUSPEED_SLOWEST: fps_scale=fps_scale_table[0]; break; case EMUSPEED_SLOWEST: fps_scale = fps_scale_unpaused = fps_scale_table[0]; break;
case EMUSPEED_SLOWER: DecreaseEmulationSpeed(); break; case EMUSPEED_SLOWER: DecreaseEmulationSpeed(); break;
case EMUSPEED_NORMAL: fps_scale=256; break; case EMUSPEED_NORMAL: fps_scale = fps_scale_unpaused = 256; break;
case EMUSPEED_FASTER: IncreaseEmulationSpeed(); break; case EMUSPEED_FASTER: IncreaseEmulationSpeed(); break;
case EMUSPEED_FASTEST: fps_scale=fps_scale_table[fps_table_size-1]; break; case EMUSPEED_FASTEST: fps_scale = fps_scale_unpaused = fps_scale_table[fps_table_size - 1]; break;
default: default:
return; return;
} }
RefreshThrottleFPS(); RefreshThrottleFPS();
FCEU_DispMessage("Emulation speed %d%%", 0, (fps_scale_unpaused * 100) >> 8);
FCEU_DispMessage("emulation speed %d%%",0,(fps_scale*100)>>8);
} }

View File

@ -80,6 +80,9 @@
extern TASEDITOR_WINDOW taseditor_window; extern TASEDITOR_WINDOW taseditor_window;
extern PLAYBACK playback; extern PLAYBACK playback;
#include "Win32InputBox.h"
extern int32 fps_scale_unpaused;
//extern void ToggleFullscreen(); //extern void ToggleFullscreen();
using namespace std; using namespace std;
@ -1793,6 +1796,53 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
case ID_NES_NORMALSPEED: case ID_NES_NORMALSPEED:
FCEUD_SetEmulationSpeed(2); FCEUD_SetEmulationSpeed(2);
break; break;
case ID_EMULATIONSPEED_CUSTOMSPEED:
{
int new_value = fps_scale / 2.56;
if ((CWin32InputBox::GetInteger("Emulation Speed", "Enter a number of percents from 1 to 1000.", new_value, hWnd) == IDOK))
{
fps_scale_unpaused = new_value * 2.56 + 1;
if (fps_scale_unpaused / 2.56 > 1000 || fps_scale_unpaused <= 0)
fps_scale_unpaused = 256;
fps_scale = fps_scale_unpaused;
RefreshThrottleFPS();
FCEU_DispMessage("Emulation speed %d%%", 0, (fps_scale_unpaused * 100) >> 8);
}
break;
}
case ID_EMULATIONSPEED_SETFRAMEADVANCEDELAY:
{
extern int frameAdvance_Delay;
int new_value = frameAdvance_Delay;
if((CWin32InputBox::GetInteger("FrameAdvance Delay", "How much time should elapse before\nholding the Frame Advance\nunpauses emulation?", new_value, hWnd) == IDOK))
{
if (new_value < 0)
new_value = FRAMEADVANCE_DELAY_DEFAULT;
frameAdvance_Delay = new_value;
}
break;
}
case ID_EMULATIONSPEED_SETCUSTOMSPEEDFORFRAMEADVANCE:
{
extern int32 fps_scale_frameadvance;
int new_value = fps_scale_frameadvance / 2.56;
if ((CWin32InputBox::GetInteger("FrameAdvance Custom Speed", "Enter 0 to use the current emulation speed when\nthe Frame Advance is held. Or enter the number\nof percents (1-1000) to use different speed.", new_value, hWnd) == IDOK))
{
if (new_value > 1000)
new_value = 1000;
if (new_value > 0)
{
fps_scale_frameadvance = new_value * 2.56 + 1;
} else
{
fps_scale_frameadvance = 0;
fps_scale = fps_scale_unpaused;
RefreshThrottleFPS();
}
}
break;
}
//Config Menu----------------------------------------------------------- //Config Menu-----------------------------------------------------------
case FCEUX_CONTEXT_UNHIDEMENU: case FCEUX_CONTEXT_UNHIDEMENU:

View File

@ -57,6 +57,11 @@ extern void ResetDebugStatisticsCounters();
extern void SetMainWindowText(); extern void SetMainWindowText();
extern bool TaseditorIsRecording(); extern bool TaseditorIsRecording();
extern int32 fps_scale;
extern int32 fps_scale_unpaused;
extern int32 fps_scale_frameadvance;
extern void RefreshThrottleFPS();
#endif #endif
#include <fstream> #include <fstream>
@ -200,8 +205,9 @@ static int RWWrap = 0;
//bit0 indicates whether emulation is paused //bit0 indicates whether emulation is paused
//bit1 indicates whether emulation is in frame step mode //bit1 indicates whether emulation is in frame step mode
int EmulationPaused = 0; int EmulationPaused = 0;
bool frameAdvanceRequested = false; bool frameAdvanceRequested=false;
int frameAdvanceDelay; int frameAdvance_Delay_count = 0;
int frameAdvance_Delay = FRAMEADVANCE_DELAY_DEFAULT;
//indicates that the emulation core just frame advanced (consumed the frame advance state and paused) //indicates that the emulation core just frame advanced (consumed the frame advance state and paused)
bool JustFrameAdvanced = false; bool JustFrameAdvanced = false;
@ -578,23 +584,47 @@ void FCEUI_Emulate(uint8 **pXBuf, int32 **SoundBuf, int32 *SoundBufSize, int ski
JustFrameAdvanced = false; JustFrameAdvanced = false;
if (frameAdvanceRequested) { if (frameAdvanceRequested)
if (frameAdvanceDelay == 0 || frameAdvanceDelay >= 10) {
EmulationPaused = 3; if (frameAdvance_Delay_count == 0 || frameAdvance_Delay_count >= frameAdvance_Delay)
if (frameAdvanceDelay == 0 || frameAdvanceDelay < 10) EmulationPaused = EMULATIONPAUSED_FA;
frameAdvanceDelay++; if (frameAdvance_Delay_count < frameAdvance_Delay)
frameAdvance_Delay_count++;
} }
if (EmulationPaused & 2) if (EmulationPaused & EMULATIONPAUSED_FA)
EmulationPaused &= ~1; // clear paused flag temporarily (frame advance) {
else if ((EmulationPaused & 1)) { // the user is holding Frame Advance key
memcpy(XBuf, XBackBuf, 256 * 256); // clear paused flag temporarily
FCEU_PutImage(); EmulationPaused &= ~EMULATIONPAUSED_PAUSED;
*pXBuf = XBuf; #ifdef WIN32
*SoundBuf = WaveFinal; // different emulation speed when holding Frame Advance
*SoundBufSize = 0; if (fps_scale_frameadvance > 0)
{
return; fps_scale = fps_scale_frameadvance;
RefreshThrottleFPS();
}
#endif
} else
{
#ifdef WIN32
if (fps_scale_frameadvance > 0)
{
// restore emulation speed when Frame Advance is not held
fps_scale = fps_scale_unpaused;
RefreshThrottleFPS();
}
#endif
if (EmulationPaused & EMULATIONPAUSED_PAUSED)
{
// emulator is paused
memcpy(XBuf, XBackBuf, 256*256);
FCEU_PutImage();
*pXBuf = XBuf;
*SoundBuf = WaveFinal;
*SoundBufSize = 0;
return;
}
} }
AutoFire(); AutoFire();
@ -644,9 +674,11 @@ void FCEUI_Emulate(uint8 **pXBuf, int32 **SoundBuf, int32 *SoundBufSize, int ski
*SoundBufSize = ssize; *SoundBufSize = ssize;
} }
if (EmulationPaused & 2 && (!frameAdvanceLagSkip || !lagFlag)) { if ((EmulationPaused & EMULATIONPAUSED_FA) && (!frameAdvanceLagSkip || !lagFlag))
//Lots of conditions here. EmulationPaused&2 must be true. In addition frameAdvanceLagSkip or lagFlag must be false //Lots of conditions here. EmulationPaused & EMULATIONPAUSED_FA must be true. In addition frameAdvanceLagSkip or lagFlag must be false
EmulationPaused = 1; // restore paused flag // When Frame Advance is held, emulator is automatically paused after emulating one frame (or several lag frames)
{
EmulationPaused = EMULATIONPAUSED_PAUSED; // restore EMULATIONPAUSED_PAUSED flag and clear EMULATIONPAUSED_FA flag
JustFrameAdvanced = true; JustFrameAdvanced = true;
#ifdef WIN32 #ifdef WIN32
if (soundoptions & SO_MUTEFA) //mute the frame advance if the user requested it if (soundoptions & SO_MUTEFA) //mute the frame advance if the user requested it
@ -854,16 +886,19 @@ int32 FCEUI_GetDesiredFPS(void) {
return(1008307711); // ~60.1 return(1008307711); // ~60.1
} }
int FCEUI_EmulationPaused(void) { int FCEUI_EmulationPaused(void)
return(EmulationPaused & 1); {
return (EmulationPaused & EMULATIONPAUSED_PAUSED);
} }
int FCEUI_EmulationFrameStepped() { int FCEUI_EmulationFrameStepped()
return(EmulationPaused & 2); {
return (EmulationPaused & EMULATIONPAUSED_FA);
} }
void FCEUI_ClearEmulationFrameStepped() { void FCEUI_ClearEmulationFrameStepped()
EmulationPaused &= ~2; {
EmulationPaused &= ~EMULATIONPAUSED_FA;
} }
//mbg merge 7/18/06 added //mbg merge 7/18/06 added
@ -872,8 +907,9 @@ void FCEUI_SetEmulationPaused(int val) {
EmulationPaused = val; EmulationPaused = val;
} }
void FCEUI_ToggleEmulationPause(void) { void FCEUI_ToggleEmulationPause(void)
EmulationPaused = (EmulationPaused & 1) ^ 1; {
EmulationPaused = (EmulationPaused & EMULATIONPAUSED_PAUSED) ^ EMULATIONPAUSED_PAUSED;
DebuggerWasUpdated = false; DebuggerWasUpdated = false;
} }
@ -883,7 +919,7 @@ void FCEUI_FrameAdvanceEnd(void) {
void FCEUI_FrameAdvance(void) { void FCEUI_FrameAdvance(void) {
frameAdvanceRequested = true; frameAdvanceRequested = true;
frameAdvanceDelay = 0; frameAdvance_Delay_count = 0;
} }
static int AutosaveCounter = 0; static int AutosaveCounter = 0;

View File

@ -141,3 +141,8 @@ extern uint8 vsdip;
#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
#define EMULATIONPAUSED_PAUSED 1
#define EMULATIONPAUSED_FA 2
#define FRAMEADVANCE_DELAY_DEFAULT 10