#pragma once #include #include #include struct CPUContext; typedef void (*ExecutorCase)(CPUContext&); enum OperandEncoding : uint8_t { ZO = 0b00000000, RM = 0b00000001, MR = 0b00000010, MI = 0b00000100, OI = 0b00001000, I32 = 0b00100000, I16 = 0b01000000, I8 = 0b10000000, }; struct InstructionEntry { ExecutorCase m_Executor; OperandEncoding m_Encoding; }; const std::array& GetInstructionTable(); const std::array& GetExecutorTable(); namespace executor_cases::helpers { uint32_t ResolveModRMAddress(CPUContext& cc); }