2019-09-09 07:01:26 +00:00
|
|
|
#pragma once
|
|
|
|
#include "types.h"
|
|
|
|
|
2019-09-12 14:18:13 +00:00
|
|
|
class HostInterface;
|
|
|
|
|
2019-09-12 02:53:04 +00:00
|
|
|
namespace CPU
|
|
|
|
{
|
|
|
|
class Core;
|
|
|
|
}
|
|
|
|
|
|
|
|
class Bus;
|
|
|
|
class DMA;
|
|
|
|
class GPU;
|
|
|
|
|
2019-09-09 07:01:26 +00:00
|
|
|
class System
|
|
|
|
{
|
|
|
|
public:
|
2019-09-12 14:18:13 +00:00
|
|
|
System(HostInterface* host_interface);
|
2019-09-09 07:01:26 +00:00
|
|
|
~System();
|
|
|
|
|
2019-09-12 14:18:13 +00:00
|
|
|
HostInterface* GetHostInterface() const { return m_host_interface; }
|
|
|
|
|
2019-09-13 16:07:31 +00:00
|
|
|
u32 GetFrameNumber() const { return m_frame_number; }
|
|
|
|
void IncrementFrameNumber() { m_frame_number++; }
|
|
|
|
|
2019-09-09 07:01:26 +00:00
|
|
|
bool Initialize();
|
|
|
|
void Reset();
|
|
|
|
|
|
|
|
void RunFrame();
|
|
|
|
|
|
|
|
private:
|
2019-09-12 14:18:13 +00:00
|
|
|
HostInterface* m_host_interface;
|
2019-09-12 02:53:04 +00:00
|
|
|
std::unique_ptr<CPU::Core> m_cpu;
|
|
|
|
std::unique_ptr<Bus> m_bus;
|
|
|
|
std::unique_ptr<DMA> m_dma;
|
|
|
|
std::unique_ptr<GPU> m_gpu;
|
2019-09-13 16:07:31 +00:00
|
|
|
u32 m_frame_number = 1;
|
2019-09-09 07:01:26 +00:00
|
|
|
};
|