#pragma once #include #include #include struct Instruction; class Bus; struct CPUContext { Instruction& m_Instruction; uint64_t& m_InstructionPointer; uint64_t& m_Flags; uint64_t* m_Registers; std::shared_ptr m_Bus; CPUContext(Instruction& i, uint64_t& ip, uint64_t& flags, uint64_t* reg, std::shared_ptr& bus); ~CPUContext(); }; enum class ModRMState : uint8_t { INVALID = 0, LR = 1, LR_DISP8 = 2, LR_DISP32 = 3, R = 4 }; struct ModRM{ ModRMState m_State; uint8_t m_Reg; uint8_t m_Rm; }; typedef void (*ExecutorCase)(CPUContext&); const std::array& GetExecutorTable();