2013-04-25 05:51:31 +00:00
|
|
|
#pragma once
|
2008-03-31 03:37:16 +00:00
|
|
|
|
2013-04-25 05:51:31 +00:00
|
|
|
#include <thread>
|
2009-04-20 23:52:47 +00:00
|
|
|
#include "AppDef.h"
|
2008-03-31 03:37:16 +00:00
|
|
|
#include "Types.h"
|
|
|
|
#include "MIPS.h"
|
|
|
|
#include "MailBox.h"
|
|
|
|
#include "PadHandler.h"
|
|
|
|
#include "iso9660/ISO9660.h"
|
|
|
|
#include "VirtualMachine.h"
|
2014-10-04 23:02:32 -04:00
|
|
|
#include "Ee_SubSystem.h"
|
2008-11-28 02:56:27 +00:00
|
|
|
#include "iop/Iop_SubSystem.h"
|
2012-10-21 02:08:14 +00:00
|
|
|
#include "iop/IopBios.h"
|
2013-06-09 05:47:33 +00:00
|
|
|
#include "FrameDump.h"
|
2008-03-31 03:37:16 +00:00
|
|
|
|
|
|
|
enum PS2VM_MSG
|
|
|
|
{
|
|
|
|
PS2VM_MSG_PAUSE,
|
|
|
|
PS2VM_MSG_RESUME,
|
|
|
|
PS2VM_MSG_DESTROY,
|
|
|
|
PS2VM_MSG_CREATEGS,
|
|
|
|
PS2VM_MSG_DESTROYGS,
|
|
|
|
PS2VM_MSG_CREATEPAD,
|
|
|
|
PS2VM_MSG_DESTROYPAD,
|
|
|
|
PS2VM_MSG_SAVESTATE,
|
|
|
|
PS2VM_MSG_LOADSTATE,
|
|
|
|
PS2VM_MSG_RESET,
|
|
|
|
};
|
|
|
|
|
2012-04-14 06:00:28 +00:00
|
|
|
#define PREF_PS2_HOST_DIRECTORY ("ps2.host.directory")
|
|
|
|
#define PREF_PS2_MC0_DIRECTORY ("ps2.mc0.directory")
|
|
|
|
#define PREF_PS2_MC1_DIRECTORY ("ps2.mc1.directory")
|
2008-07-20 20:57:49 +00:00
|
|
|
|
2008-03-31 03:37:16 +00:00
|
|
|
class CPS2VM : public CVirtualMachine
|
|
|
|
{
|
|
|
|
public:
|
2014-10-04 23:02:32 -04:00
|
|
|
typedef std::unique_ptr<Ee::CSubSystem> EeSubSystemPtr;
|
|
|
|
typedef std::unique_ptr<Iop::CSubSystem> IopSubSystemPtr;
|
2013-06-09 05:47:33 +00:00
|
|
|
typedef std::function<void (const CFrameDump&)> FrameDumpCallback;
|
|
|
|
|
2012-04-14 06:00:28 +00:00
|
|
|
CPS2VM();
|
|
|
|
virtual ~CPS2VM();
|
2008-03-31 03:37:16 +00:00
|
|
|
|
|
|
|
void Initialize();
|
|
|
|
void Destroy();
|
|
|
|
|
2012-04-14 06:00:28 +00:00
|
|
|
void StepEe();
|
|
|
|
void StepIop();
|
2009-08-10 00:56:50 +00:00
|
|
|
void StepVu1();
|
2008-11-28 02:56:27 +00:00
|
|
|
|
2008-03-31 03:37:16 +00:00
|
|
|
void Resume();
|
|
|
|
void Pause();
|
|
|
|
void Reset();
|
|
|
|
|
2012-04-14 06:00:28 +00:00
|
|
|
STATUS GetStatus() const;
|
2008-03-31 03:37:16 +00:00
|
|
|
|
|
|
|
void DumpEEIntcHandlers();
|
|
|
|
void DumpEEDmacHandlers();
|
|
|
|
|
2012-04-14 06:00:28 +00:00
|
|
|
void CreateGSHandler(const CGSHandler::FactoryFunction&);
|
|
|
|
CGSHandler* GetGSHandler();
|
2008-03-31 03:37:16 +00:00
|
|
|
void DestroyGSHandler();
|
|
|
|
|
2012-04-14 06:00:28 +00:00
|
|
|
void CreatePadHandler(const CPadHandler::FactoryFunction&);
|
2008-03-31 03:37:16 +00:00
|
|
|
void DestroyPadHandler();
|
|
|
|
|
|
|
|
unsigned int SaveState(const char*);
|
|
|
|
unsigned int LoadState(const char*);
|
|
|
|
|
2013-06-09 05:47:33 +00:00
|
|
|
void TriggerFrameDump(const FrameDumpCallback&);
|
|
|
|
|
2008-11-28 02:56:27 +00:00
|
|
|
#ifdef DEBUGGER_INCLUDED
|
2012-04-14 06:00:28 +00:00
|
|
|
std::string MakeDebugTagsPackagePath(const char*);
|
|
|
|
void LoadDebugTags(const char*);
|
|
|
|
void SaveDebugTags(const char*);
|
2008-11-28 02:56:27 +00:00
|
|
|
#endif
|
|
|
|
|
2012-09-05 00:08:05 +00:00
|
|
|
CPadHandler* m_pad;
|
2008-03-31 03:37:16 +00:00
|
|
|
|
2014-10-04 23:02:32 -04:00
|
|
|
EeSubSystemPtr m_ee;
|
|
|
|
IopSubSystemPtr m_iop;
|
2008-03-31 03:37:16 +00:00
|
|
|
|
2012-10-21 02:08:14 +00:00
|
|
|
IopBiosPtr m_iopOs;
|
2008-03-31 03:37:16 +00:00
|
|
|
|
2012-09-12 01:03:53 +00:00
|
|
|
int m_vblankTicks;
|
|
|
|
bool m_inVblank;
|
2012-04-14 06:00:28 +00:00
|
|
|
int m_spuUpdateTicks;
|
2012-09-25 03:17:46 +00:00
|
|
|
int m_eeExecutionTicks;
|
|
|
|
int m_iopExecutionTicks;
|
2008-03-31 03:37:16 +00:00
|
|
|
|
2012-04-14 06:00:28 +00:00
|
|
|
CISO9660* m_pCDROM0;
|
2008-03-31 03:37:16 +00:00
|
|
|
|
|
|
|
private:
|
2012-04-14 06:00:28 +00:00
|
|
|
void CreateVM();
|
|
|
|
void ResetVM();
|
|
|
|
void DestroyVM();
|
|
|
|
void SaveVMState(const char*, unsigned int&);
|
|
|
|
void LoadVMState(const char*, unsigned int&);
|
2008-03-31 03:37:16 +00:00
|
|
|
|
2013-03-10 05:11:53 +00:00
|
|
|
void ReadToEeRam(uint32, uint32);
|
2012-04-14 21:08:33 +00:00
|
|
|
void ReloadExecutable(const char*, const CPS2OS::ArgumentList&);
|
2011-12-25 04:50:54 +00:00
|
|
|
|
2012-04-14 06:00:28 +00:00
|
|
|
void ResumeImpl();
|
|
|
|
void PauseImpl();
|
|
|
|
void DestroyImpl();
|
|
|
|
void CreateGsImpl(const CGSHandler::FactoryFunction&);
|
|
|
|
void DestroyGsImpl();
|
2008-03-31 03:37:16 +00:00
|
|
|
|
2012-04-14 06:00:28 +00:00
|
|
|
void CreatePadHandlerImpl(const CPadHandler::FactoryFunction&);
|
|
|
|
void DestroyPadHandlerImpl();
|
2008-03-31 03:37:16 +00:00
|
|
|
|
2012-04-14 06:00:28 +00:00
|
|
|
void UpdateSpu();
|
|
|
|
void OnGsNewFrame();
|
2008-07-20 17:26:08 +00:00
|
|
|
|
2008-03-31 03:37:16 +00:00
|
|
|
void CDROM0_Initialize();
|
|
|
|
void CDROM0_Mount(const char*);
|
|
|
|
void CDROM0_Reset();
|
|
|
|
void CDROM0_Destroy();
|
2012-04-14 06:00:28 +00:00
|
|
|
void SetIopCdImage(CISO9660*);
|
2008-03-31 03:37:16 +00:00
|
|
|
|
|
|
|
void RegisterModulesInPadHandler();
|
2013-03-12 06:38:44 +00:00
|
|
|
|
2008-03-31 03:37:16 +00:00
|
|
|
void EmuThread();
|
2008-11-28 02:56:27 +00:00
|
|
|
|
2013-04-25 05:51:31 +00:00
|
|
|
std::thread m_thread;
|
2012-04-14 06:00:28 +00:00
|
|
|
CMailBox m_mailBox;
|
|
|
|
STATUS m_nStatus;
|
|
|
|
bool m_nEnd;
|
|
|
|
bool m_singleStepEe;
|
|
|
|
bool m_singleStepIop;
|
2011-11-26 21:03:20 +00:00
|
|
|
bool m_singleStepVu0;
|
2009-08-10 00:56:50 +00:00
|
|
|
bool m_singleStepVu1;
|
2013-06-09 05:47:33 +00:00
|
|
|
|
|
|
|
CFrameDump m_frameDump;
|
|
|
|
FrameDumpCallback m_frameDumpCallback;
|
|
|
|
std::mutex m_frameDumpCallbackMutex;
|
2014-10-04 23:02:32 -04:00
|
|
|
bool m_dumpingFrame = false;
|
2008-03-31 03:37:16 +00:00
|
|
|
};
|