mirror of
https://github.com/SourMesen/Mesen2.git
synced 2025-04-02 10:21:44 -04:00
111 lines
2.9 KiB
C++
111 lines
2.9 KiB
C++
#pragma once
|
|
#include "pch.h"
|
|
#include "Utilities/ISerializable.h"
|
|
#include "Core/Debugger/DebugTypes.h"
|
|
#include "Shared/Audio/AudioPlayerTypes.h"
|
|
#include "Shared/Interfaces/INotificationListener.h"
|
|
#include "Shared/RomInfo.h"
|
|
#include "Shared/TimingInfo.h"
|
|
#include "Shared/SaveStateCompatInfo.h"
|
|
|
|
class BaseControlManager;
|
|
class VirtualFile;
|
|
class BaseVideoFilter;
|
|
struct BaseState;
|
|
struct InternalCheatCode;
|
|
enum class ConsoleType;
|
|
enum class ConsoleRegion;
|
|
enum class CpuType : uint8_t;
|
|
enum class EmulatorShortcut;
|
|
enum class HashType;
|
|
|
|
enum class LoadRomResult
|
|
{
|
|
Success,
|
|
Failure,
|
|
UnknownType
|
|
};
|
|
|
|
struct PpuFrameInfo
|
|
{
|
|
uint8_t* FrameBuffer;
|
|
uint32_t Width;
|
|
uint32_t Height;
|
|
uint32_t FrameBufferSize;
|
|
uint32_t FrameCount;
|
|
uint32_t ScanlineCount;
|
|
int32_t FirstScanline;
|
|
uint32_t CycleCount;
|
|
};
|
|
|
|
enum class ShortcutState
|
|
{
|
|
Disabled = 0,
|
|
Enabled = 1,
|
|
Default = 2
|
|
};
|
|
|
|
class IConsole : public ISerializable, public INotificationListener
|
|
{
|
|
public:
|
|
virtual ~IConsole() {}
|
|
|
|
virtual void Reset() = 0;
|
|
|
|
virtual LoadRomResult LoadRom(VirtualFile& romFile) = 0;
|
|
|
|
virtual void RunFrame() = 0;
|
|
|
|
virtual void SaveBattery() = 0;
|
|
|
|
virtual ShortcutState IsShortcutAllowed(EmulatorShortcut shortcut, uint32_t shortcutParam) { return ShortcutState::Default; }
|
|
|
|
virtual BaseControlManager* GetControlManager() = 0;
|
|
|
|
virtual DipSwitchInfo GetDipSwitchInfo() { return {}; }
|
|
virtual ConsoleRegion GetRegion() = 0;
|
|
virtual ConsoleType GetConsoleType() = 0;
|
|
virtual vector<CpuType> GetCpuTypes() = 0;
|
|
|
|
virtual uint64_t GetMasterClock() = 0;
|
|
virtual uint32_t GetMasterClockRate() = 0;
|
|
|
|
virtual double GetFps() = 0;
|
|
|
|
virtual TimingInfo GetTimingInfo(CpuType cpuType)
|
|
{
|
|
TimingInfo info = {};
|
|
info.MasterClock = GetMasterClock();
|
|
info.MasterClockRate = GetMasterClockRate();
|
|
info.Fps = GetFps();
|
|
|
|
PpuFrameInfo frameInfo = GetPpuFrame();
|
|
info.FrameCount = frameInfo.FrameCount;
|
|
info.CycleCount = frameInfo.CycleCount;
|
|
info.ScanlineCount = frameInfo.ScanlineCount;
|
|
info.FirstScanline = frameInfo.FirstScanline;
|
|
return info;
|
|
}
|
|
|
|
virtual BaseVideoFilter* GetVideoFilter(bool getDefaultFilter) = 0;
|
|
virtual void GetScreenRotationOverride(uint32_t& rotation) {}
|
|
|
|
virtual PpuFrameInfo GetPpuFrame() = 0;
|
|
|
|
virtual string GetHash(HashType hashType) { return {}; }
|
|
|
|
virtual RomFormat GetRomFormat() = 0;
|
|
virtual AudioTrackInfo GetAudioTrackInfo() = 0;
|
|
virtual void ProcessAudioPlayerAction(AudioPlayerActionParams p) = 0;
|
|
|
|
virtual AddressInfo GetAbsoluteAddress(AddressInfo& relAddress) = 0;
|
|
virtual AddressInfo GetRelativeAddress(AddressInfo& absAddress, CpuType cpuType) = 0;
|
|
virtual void GetConsoleState(BaseState& state, ConsoleType consoleType) = 0;
|
|
|
|
virtual SaveStateCompatInfo ValidateSaveStateCompatibility(ConsoleType stateConsoleType) { return {}; }
|
|
|
|
virtual void ProcessCheatCode(InternalCheatCode& code, uint32_t addr, uint8_t& value) {}
|
|
|
|
virtual void ProcessNotification(ConsoleNotificationType type, void* parameter) {}
|
|
};
|
|
|