summaryrefslogtreecommitdiff
path: root/src/ExecutorCases.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ExecutorCases.h')
-rw-r--r--src/ExecutorCases.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/ExecutorCases.h b/src/ExecutorCases.h
new file mode 100644
index 0000000..bbcd8ae
--- /dev/null
+++ b/src/ExecutorCases.h
@@ -0,0 +1,33 @@
+#pragma once
+
+#include <cstdint>
+#include <memory>
+#include <array>
+
+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<InstructionEntry, 256>& GetInstructionTable();
+
+const std::array<ExecutorCase, 256>& GetExecutorTable();
+
+namespace executor_cases::helpers {
+ uint32_t ResolveModRMAddress(CPUContext& cc);
+}