2014-06-21 01:48:55 +00:00
|
|
|
#pragma once
|
|
|
|
|
2014-06-14 15:27:55 +00:00
|
|
|
#include "stdafx.h"
|
|
|
|
#include "CPU.h"
|
|
|
|
#include "PPU.h"
|
2014-06-23 02:15:35 +00:00
|
|
|
#include "APU.h"
|
2014-06-14 15:27:55 +00:00
|
|
|
#include "BaseMapper.h"
|
|
|
|
#include "MemoryManager.h"
|
2014-06-21 19:43:41 +00:00
|
|
|
#include "ControlManager.h"
|
2014-07-06 23:54:47 +00:00
|
|
|
#include "../Utilities/SimpleLock.h"
|
|
|
|
#include "IMessageManager.h"
|
2014-07-09 23:05:07 +00:00
|
|
|
#include "INotificationListener.h"
|
2014-06-14 15:27:55 +00:00
|
|
|
|
2014-06-21 23:03:13 +00:00
|
|
|
enum EmulationFlags
|
|
|
|
{
|
|
|
|
LimitFPS = 0x01,
|
2014-07-10 01:48:54 +00:00
|
|
|
Paused = 0x02,
|
2014-06-21 23:03:13 +00:00
|
|
|
};
|
|
|
|
|
2014-06-14 15:27:55 +00:00
|
|
|
class Console
|
|
|
|
{
|
|
|
|
private:
|
2014-07-01 16:44:01 +00:00
|
|
|
static Console* Instance;
|
2014-06-21 23:03:13 +00:00
|
|
|
static uint32_t Flags;
|
2014-06-23 20:38:01 +00:00
|
|
|
static uint32_t CurrentFPS;
|
2014-07-06 23:54:47 +00:00
|
|
|
static SimpleLock PauseLock;
|
|
|
|
static SimpleLock RunningLock;
|
|
|
|
static IMessageManager* MessageManager;
|
2014-07-09 22:29:07 +00:00
|
|
|
static list<INotificationListener*> NotificationListeners;
|
2014-06-21 23:03:13 +00:00
|
|
|
|
2014-06-14 15:27:55 +00:00
|
|
|
unique_ptr<CPU> _cpu;
|
2014-06-16 01:45:36 +00:00
|
|
|
unique_ptr<PPU> _ppu;
|
2014-06-23 02:15:35 +00:00
|
|
|
unique_ptr<APU> _apu;
|
2014-06-24 06:47:32 +00:00
|
|
|
shared_ptr<BaseMapper> _mapper;
|
2014-06-21 19:43:41 +00:00
|
|
|
unique_ptr<ControlManager> _controlManager;
|
2014-06-19 23:58:15 +00:00
|
|
|
unique_ptr<MemoryManager> _memoryManager;
|
2014-06-14 15:27:55 +00:00
|
|
|
|
2014-07-09 22:29:07 +00:00
|
|
|
wstring _romFilepath;
|
2014-06-22 12:38:42 +00:00
|
|
|
|
2014-06-21 01:48:55 +00:00
|
|
|
bool _stop = false;
|
2014-06-23 17:52:53 +00:00
|
|
|
bool _reset = false;
|
2014-06-21 01:48:55 +00:00
|
|
|
|
2014-06-25 17:30:02 +00:00
|
|
|
void ResetComponents(bool softReset);
|
2014-07-09 22:29:07 +00:00
|
|
|
void Initialize(wstring filename);
|
2014-06-24 06:47:32 +00:00
|
|
|
|
2014-06-14 15:27:55 +00:00
|
|
|
public:
|
2014-06-21 01:48:55 +00:00
|
|
|
Console(wstring filename);
|
2014-06-14 15:27:55 +00:00
|
|
|
~Console();
|
|
|
|
void Run();
|
2014-06-21 01:48:55 +00:00
|
|
|
void Stop();
|
2014-07-01 16:44:01 +00:00
|
|
|
static void Reset();
|
|
|
|
|
|
|
|
//Used to pause the emu loop to perform thread-safe operations
|
|
|
|
static void Pause();
|
|
|
|
|
|
|
|
//Used to resume the emu loop after calling Pause()
|
|
|
|
static void Resume();
|
2014-06-21 23:03:13 +00:00
|
|
|
|
2014-06-22 12:38:42 +00:00
|
|
|
bool RunTest(uint8_t* expectedResult);
|
|
|
|
void SaveTestResult();
|
|
|
|
|
2014-07-01 16:44:01 +00:00
|
|
|
static void SaveState(wstring filename);
|
|
|
|
static void SaveState(ostream &saveStream);
|
|
|
|
static bool LoadState(wstring filename);
|
|
|
|
static void LoadState(istream &loadStream);
|
2014-07-06 23:54:47 +00:00
|
|
|
static void LoadState(uint8_t *buffer, uint32_t bufferSize);
|
2014-06-26 01:52:37 +00:00
|
|
|
|
2014-07-09 22:29:07 +00:00
|
|
|
static void LoadROM(wstring filename);
|
|
|
|
static bool AttemptLoadROM(wstring filename, uint32_t crc32Hash);
|
|
|
|
static wstring GetROMPath();
|
|
|
|
|
2014-06-21 23:03:13 +00:00
|
|
|
static bool CheckFlag(int flag);
|
|
|
|
static void SetFlags(int flags);
|
|
|
|
static void ClearFlags(int flags);
|
2014-06-23 20:38:01 +00:00
|
|
|
static uint32_t GetFPS();
|
2014-07-06 23:54:47 +00:00
|
|
|
|
|
|
|
static void RegisterMessageManager(IMessageManager* messageManager);
|
|
|
|
static void DisplayMessage(wstring message);
|
2014-07-09 22:29:07 +00:00
|
|
|
|
|
|
|
static void RegisterNotificationListener(INotificationListener* notificationListener);
|
|
|
|
static void UnregisterNotificationListener(INotificationListener* notificationListener);
|
|
|
|
static void SendNotification(ConsoleNotificationType type);
|
|
|
|
|
|
|
|
static Console* GetInstance();
|
2014-06-14 15:27:55 +00:00
|
|
|
};
|