diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-04-22 10:34:40 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-04-22 10:34:40 +0200 |
| commit | 209abc044af82897acce2ede571934af0d77b257 (patch) | |
| tree | 0734be5a848ab99b55b63904b25a16e84ed3d5e0 | |
| parent | 0027f3523f4b12e73f79b49bb7380eb0092d6b86 (diff) | |
MHR-4: Merging with unstable.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | Examples/ExampleAMD64.asm | 7 | ||||
| -rw-r--r-- | Headers/AsmKit/CPU/amd64.hpp | 3 | ||||
| -rw-r--r-- | Headers/Defines.hpp | 2 | ||||
| -rw-r--r-- | Sources/64asm.cc | 2 | ||||
| -rw-r--r-- | Sources/i64asm.cc | 15 | ||||
| -rw-r--r-- | Sources/ppcasm.cc | 2 |
7 files changed, 24 insertions, 8 deletions
@@ -10,6 +10,7 @@ local.properties # NewOS/MP-UX executable *.exec +*.bin docs/ diff --git a/Examples/ExampleAMD64.asm b/Examples/ExampleAMD64.asm index 12f8f61..4f8625e 100644 --- a/Examples/ExampleAMD64.asm +++ b/Examples/ExampleAMD64.asm @@ -1,4 +1,9 @@ #org 0x7c00 -int 13 +nop +nop +nop +nop +nop + ret diff --git a/Headers/AsmKit/CPU/amd64.hpp b/Headers/AsmKit/CPU/amd64.hpp index ca3c7dd..42fbc26 100644 --- a/Headers/AsmKit/CPU/amd64.hpp +++ b/Headers/AsmKit/CPU/amd64.hpp @@ -43,7 +43,6 @@ inline std::vector<CpuOpcodeAMD64> kOpcodesAMD64 = { kAsmOpcodeDecl("ret", 0xC3) kAsmOpcodeDecl("sti", 0xfb) kAsmOpcodeDecl("cli", 0xfa) kAsmOpcodeDecl("hlt", 0xf4) kAsmOpcodeDecl("nop", 0x90) kAsmOpcodeDecl("mov", 0x48) - kAsmOpcodeDecl("call", 0xFF) kAsmOpcodeDecl("mv", 0x48) - kAsmOpcodeDecl("br", 0xE9)}; + kAsmOpcodeDecl("call", 0xFF)}; #define kAsmRegisterLimit 15 diff --git a/Headers/Defines.hpp b/Headers/Defines.hpp index 51b0dec..627e5b3 100644 --- a/Headers/Defines.hpp +++ b/Headers/Defines.hpp @@ -122,6 +122,8 @@ inline bool to_str(CharType *str, Int32 limit, Int32 base) noexcept { typedef char char_type; #define kObjectFileExt ".obj" +#define kBinaryFileExt ".bin" + #define kAsmFileExts \ { ".64x", ".32x", ".masm", ".s", ".S", ".asm" } diff --git a/Sources/64asm.cc b/Sources/64asm.cc index 0c3f9a7..566dfd8 100644 --- a/Sources/64asm.cc +++ b/Sources/64asm.cc @@ -144,7 +144,7 @@ MPCC_MODULE(NewOSAssembler64000) { } } - object_output += kObjectFileExt; + object_output += kOutputAsBinary ? kBinaryFileExt : kObjectFileExt; std::ifstream file_ptr(argv[i]); std::ofstream file_ptr_out(object_output, std::ofstream::binary); diff --git a/Sources/i64asm.cc b/Sources/i64asm.cc index d19c515..634c070 100644 --- a/Sources/i64asm.cc +++ b/Sources/i64asm.cc @@ -24,6 +24,7 @@ #define __ASM_NEED_AMD64__ 1 +#define kAssemblerPragmaSymStr "#" #define kAssemblerPragmaSym '#' #include <Headers/AsmKit/CPU/amd64.hpp> @@ -192,7 +193,7 @@ MPCC_MODULE(NewOSAssemblerAMD64) { } } - object_output += kObjectFileExt; + object_output += kOutputAsBinary ? kBinaryFileExt : kObjectFileExt; std::ifstream file_ptr(argv[i]); std::ofstream file_ptr_out(object_output, std::ofstream::binary); @@ -520,8 +521,9 @@ std::string CompilerKit::EncoderAMD64::CheckLine(std::string &line, std::string err_str; if (line.empty() || ParserKit::find_word(line, "import") || - ParserKit::find_word(line, "export") || ParserKit::find_word(line, "#") || - ParserKit::find_word(line, ";")) { + ParserKit::find_word(line, "export") || ParserKit::find_word(line, kAssemblerPragmaSymStr) || + ParserKit::find_word(line, ";") || + line[0] == kAssemblerPragmaSym) { if (line.find(';') != std::string::npos) { line.erase(line.find(';')); } else { @@ -577,6 +579,13 @@ std::string CompilerKit::EncoderAMD64::CheckLine(std::string &line, } } } + for (auto &opcodeAMD64 : kOpcodesAMD64) { + if (ParserKit::find_word(line, opcodeAMD64.fName)) { + return err_str; + } + } + + err_str += "\nUnrecognized instruction -> " + line; return err_str; } diff --git a/Sources/ppcasm.cc b/Sources/ppcasm.cc index 90e0429..f95020e 100644 --- a/Sources/ppcasm.cc +++ b/Sources/ppcasm.cc @@ -150,7 +150,7 @@ MPCC_MODULE(NewOSAssemblerPowerPC) { } } - object_output += kObjectFileExt; + object_output += kOutputAsBinary ? kBinaryFileExt : kObjectFileExt; std::ifstream file_ptr(argv[i]); std::ofstream file_ptr_out(object_output, std::ofstream::binary); |
