#include #include #include #include #include namespace Execute { class VirtualMachine { private: State state; void DoArithmatic( InstructionByte const instruction, std::array & arguments); void SetInteger(std::array & arguments); void ExecuteJump(std::array & arguments); void ExecuteInterrupt(std::array & arguments); void ExecuteCall( std::array & arguments, std::size_t const returnByte); void ExecuteReturn(); void DoBooleanLogic( InstructionByte const instruction, std::array & arguments, std::size_t const nextInstruction); void ExecutePop(std::array & arguments); void ExecutePush(std::array & arguments); void Step(); public: void Run(); void SingleStep(); void SetMemorySize(std::size_t const size); void LoadCode( std::vector const & byteCode, bool const printDecodedBytes); State const & GetState() const; Execute::InstructionByte GetCurrentInstruction() const; bool IsTerminated() const; }; }