summaryrefslogtreecommitdiffhomepage
path: root/C++Kit
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-01-03 10:36:40 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-01-03 10:39:59 +0100
commit3ec9c329f4854b1647f166b9d822c2f8f41ba80c (patch)
tree463d3c21e579a1364de031a2d18fe2550ce7f50a /C++Kit
parent0b95d82b74c782ce38cb51f7f4b79c7b815c6403 (diff)
AsmKit: Adding 32x0 support for this toolchain.
Masm: Add support for ';' comments. Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'C++Kit')
-rw-r--r--C++Kit/AsmKit/Arch/32k.hpp92
1 files changed, 92 insertions, 0 deletions
diff --git a/C++Kit/AsmKit/Arch/32k.hpp b/C++Kit/AsmKit/Arch/32k.hpp
new file mode 100644
index 0000000..835cb58
--- /dev/null
+++ b/C++Kit/AsmKit/Arch/32k.hpp
@@ -0,0 +1,92 @@
+/*
+ * ========================================================
+ *
+ * C++Kit
+ * Copyright WestCo, all rights reserved.
+ *
+ * ========================================================
+ */
+
+#pragma once
+
+#include <C++Kit/Defines.hpp>
+
+// @brief 32x0 support.
+// @file Arch/64k.hpp
+
+#define kAsmOpcodeDecl(__NAME, __OPCODE, __FUNCT3, __FUNCT7) \
+ { .fName = __NAME, .fOpcode = __OPCODE, .fFunct3 = __FUNCT3, .fFunct7 = __FUNCT7 },
+
+
+
+// placeholder for funct7/funct7-rs2
+#define kAsmImmediate 0x00
+#define kAsmSyscall 0x02
+#define kAsmJump 0x03
+
+#define kAsmByte 0
+#define kAsmHWord 1
+#define kAsmWord 2
+
+struct NCOpcode
+{
+ const char fName[16];
+ char fOpcode;
+ char fSize;
+ char fFunct3;
+ char fFunct7;
+};
+
+#define kAsmWordStr ".w"
+#define kAsmHWordStr ".h"
+#define kAsmByteStr ".b"
+
+inline std::vector<NCOpcode> kOpcodesStd = {
+ kAsmOpcodeDecl("nop", 0b0100011, 0b0000000, kAsmImmediate) // nothing to do.
+ kAsmOpcodeDecl("jmp", 0b1110011, 0b0000011, kAsmJump) // jump to branch
+ kAsmOpcodeDecl("move", 0b0100011, 0b101, kAsmImmediate)
+ kAsmOpcodeDecl("push", 0b0111011, 0b0, kAsmImmediate) // push to sp
+ kAsmOpcodeDecl("pop", 0b0111011, 0b1, kAsmImmediate) // pop from sp.
+ kAsmOpcodeDecl("int", 0b0111111, 0b0, kAsmSyscall) // raise interrupt
+};
+
+// \brief NewCPU register prefix
+// example: r32, r0
+// r32 -> sp
+// r0 -> hw zero
+
+#define kAsmRegisterPrefix "r"
+#define kAsmRegisterLimit 20
+#define kAsmPcRegister 17
+#define kAsmCrRegister 18
+#define kAsmSpRegister 5
+
+/* return address register */
+#define kAsmRetRegister 19
+
+/////////////////////////////////////////////////////////////////////////////
+
+// SYSTEM CALL ADDRESSING
+
+// | OPCODE | FUNCT3 | FUNCT7 | OFF |
+
+// IMMEDIATE ADDRESSING
+
+// | OPCODE | FUNCT3 | FUNCT7 | REG | OFF |
+// | OPCODE | FUNCT3 | FUNCT7 | REG | OFF | REG |
+// | OPCODE | FUNCT3 | FUNCT7 | REG | REG | OFF |
+
+// REG TO REG ADDRESSING
+
+// | OPCODE | FUNCT3 | FUNCT7 | REG | REG2 |
+
+////////////////////////////////
+
+// LOAD/CALL INTERRUPTS
+
+// SET A HANDLER IN ADDRESS: TODO: find one
+// DISABLE INTERRUPTS
+// PROCESS INTERRUPT
+// ENABLE INTERRUPTS
+
+//////////////////////////////// \ No newline at end of file