* 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
04-Dec-2012 - AnS - speed up HUD text drawing
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 - fixed "X" button in the "Enter New Input" dialog (Hotkey Mapping); changed "Cancel" button to "OK"
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
---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
FCEUD_DebugBreakpoint(bp_num);

View File

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

View File

@ -1350,6 +1350,11 @@ BOOL CALLBACK IDC_DEBUGGER_DISASSEMBLY_WndProc(HWND hwndDlg, UINT uMsg, WPARAM w
}
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);
}

View File

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

View File

@ -103,6 +103,10 @@ BEGIN
MENUITEM "&Slowest Speed", ID_NES_SLOWESTSPEED
MENUITEM "&Normal Speed", ID_NES_NORMALSPEED
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
POPUP "&Config"

View File

@ -240,7 +240,6 @@
#define IDC_NTVIEW_REFRESH_TRACKBAR 201
#define IDC_ASSEMBLER_APPLY 201
#define IDI_ICON4 201
#define BTN_CLEAR2 201
#define BTN_OK 201
#define MENU_EJECT_DISK 202
#define TXT_FAM 202
@ -1146,6 +1145,10 @@
#define ID_SELECTED_UNGREENZONE 40571
#define ID_SELECTED_F 40572
#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 MW_ValueLabel2 65423
#define MW_ValueLabel1 65426
@ -1156,7 +1159,7 @@
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#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_SYMED_VALUE 101
#endif

View File

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

View File

@ -25,10 +25,12 @@
static uint64 tmethod,tfreq;
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_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)
{
@ -118,35 +120,32 @@ uint64 FCEUD_GetTimeFreq(void)
static void IncreaseEmulationSpeed(void)
{
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)
{
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)
{
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_NORMAL: fps_scale=256; break;
case EMUSPEED_NORMAL: fps_scale = fps_scale_unpaused = 256; 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:
return;
}
RefreshThrottleFPS();
FCEU_DispMessage("emulation speed %d%%",0,(fps_scale*100)>>8);
FCEU_DispMessage("Emulation speed %d%%", 0, (fps_scale_unpaused * 100) >> 8);
}

View File

@ -80,6 +80,9 @@
extern TASEDITOR_WINDOW taseditor_window;
extern PLAYBACK playback;
#include "Win32InputBox.h"
extern int32 fps_scale_unpaused;
//extern void ToggleFullscreen();
using namespace std;
@ -1793,7 +1796,54 @@ LRESULT FAR PASCAL AppWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
case ID_NES_NORMALSPEED:
FCEUD_SetEmulationSpeed(2);
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-----------------------------------------------------------
case FCEUX_CONTEXT_UNHIDEMENU:
case MENU_HIDE_MENU:

View File

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

View File

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