summaryrefslogtreecommitdiff
path: root/src/ExecutorCases.h
diff options
context:
space:
mode:
author0x221E <0x221E@0xinfinity.dev>2026-04-12 16:59:40 +0200
committer0x221E <0x221E@0xinfinity.dev>2026-04-12 16:59:40 +0200
commita66c7433c2c11b8b6c99142277ed4e16b1a2a465 (patch)
treee54bcfb59c303acf6118fd11f06d5c0bd5f24e5d /src/ExecutorCases.h
initial commitHEADmaster
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);
+}