summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-04-22 10:34:40 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-04-22 10:34:40 +0200
commit209abc044af82897acce2ede571934af0d77b257 (patch)
tree0734be5a848ab99b55b63904b25a16e84ed3d5e0
parent0027f3523f4b12e73f79b49bb7380eb0092d6b86 (diff)
MHR-4: Merging with unstable.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
-rw-r--r--.gitignore1
-rw-r--r--Examples/ExampleAMD64.asm7
-rw-r--r--Headers/AsmKit/CPU/amd64.hpp3
-rw-r--r--Headers/Defines.hpp2
-rw-r--r--Sources/64asm.cc2
-rw-r--r--Sources/i64asm.cc15
-rw-r--r--Sources/ppcasm.cc2
7 files changed, 24 insertions, 8 deletions
diff --git a/.gitignore b/.gitignore
index 48a4a74..ee93641 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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);