diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-01-03 10:36:40 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-01-03 10:39:59 +0100 |
| commit | 3ec9c329f4854b1647f166b9d822c2f8f41ba80c (patch) | |
| tree | 463d3c21e579a1364de031a2d18fe2550ce7f50a /C++Kit | |
| parent | 0b95d82b74c782ce38cb51f7f4b79c7b815c6403 (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.hpp | 92 |
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 |
