nestopia/source/win32/NstDialogFrameClock.hpp

169 lines
3.4 KiB
C++

////////////////////////////////////////////////////////////////////////////////////////
//
// Nestopia - NES/Famicom emulator written in C++
//
// Copyright (C) 2003-2008 Martin Freij
//
// This file is part of Nestopia.
//
// Nestopia is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// Nestopia is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Nestopia; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
////////////////////////////////////////////////////////////////////////////////////////
#ifndef NST_DIALOG_FRAMECLOCK_H
#define NST_DIALOG_FRAMECLOCK_H
#pragma once
#include "NstWindowDialog.hpp"
#include "NstManagerEmulator.hpp"
#include "../core/api/NstApiMachine.hpp"
namespace Nestopia
{
namespace Window
{
class FrameClock
{
public:
FrameClock(const Configuration&,bool);
void Save(Configuration&) const;
private:
struct Handlers;
enum
{
MIN_SPEED = 30,
MAX_SPEED = 240,
MIN_FRAME_SKIPS = 1,
MAX_FRAME_SKIPS = 16,
DEFAULT_SPEED = Nes::Machine::CLK_NTSC_DOT / Nes::Machine::CLK_NTSC_VSYNC,
DEFAULT_ALT_SPEED = DEFAULT_SPEED * 2,
DEFAULT_REWIND_SPEED = DEFAULT_SPEED,
DEFAULT_FRAME_SKIPS = 8,
MAX_MHZ_TRIPLE_BUFFERING_ENABLE = 1350,
MAX_MHZ_AUTO_FRAME_SKIP_ENABLE = 950
};
void UpdateRewinderEnable() const;
ibool OnInitDialog (Param&);
ibool OnHScroll (Param&);
ibool OnCmdRefresh (Param&);
ibool OnCmdDefaultSpeed (Param&);
ibool OnCmdRewinder (Param&);
ibool OnCmdDefault (Param&);
ibool OnCmdOk (Param&);
struct
{
bool autoFrameSkip;
bool vsync;
bool tripleBuffering;
bool rewinder;
bool useDefaultSpeed;
bool useDefaultRewindSpeed;
bool noAltSpeedSound;
bool noRewindSound;
bool pfCounter;
uchar speed;
uchar altSpeed;
uchar rewindSpeed;
uchar maxFrameSkips;
} settings;
Dialog dialog;
const bool modernGPU;
public:
void Open()
{
dialog.Open();
}
uint UsePerformanceCounter() const
{
return settings.pfCounter;
}
bool UseAutoFrameSkip() const
{
return settings.autoFrameSkip;
}
bool UseVSync() const
{
return settings.vsync;
}
bool UseTrippleBuffering() const
{
return settings.tripleBuffering;
}
bool UseRewinder() const
{
return settings.rewinder;
}
bool UseDefaultSpeed() const
{
return settings.useDefaultSpeed;
}
bool UseDefaultRewindSpeed() const
{
return settings.useDefaultRewindSpeed;
}
bool NoRewindSound() const
{
return settings.noRewindSound;
}
bool NoAltSpeedSound() const
{
return settings.noAltSpeedSound;
}
uint GetSpeed() const
{
return settings.speed;
}
uint GetAltSpeed() const
{
return settings.altSpeed;
}
uint GetRewindSpeed() const
{
return settings.rewindSpeed;
}
uint GetMaxFrameSkips() const
{
return settings.maxFrameSkips;
}
};
}
}
#endif