#pragma once class Bus; #include #include #include #include "CPU.h" class Userspace { public: Userspace(); ~Userspace() = default; void Upload2Memory(uint8_t bytes[], size_t len); uint8_t* RetrieveMemory(); void Run(); void Start(); void Stop(); void Step(); void Reset(); void Exit(); bool IsRunning(); CPUStatus GetCPUStatus(); private: std::shared_ptr m_RAM; std::shared_ptr m_Bus; CPU m_CPU; std::atomic m_Running = false; std::atomic m_ApplicationRunning = false; std::shared_ptr m_ProgramMemory; size_t m_ProgramMemoryLen; private: void EmulatorLoop(); };