summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-01-19 15:52:36 +0100
committerAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-01-19 16:23:27 +0100
commitc418d56982805ad64a433ec02b9d787f56e23734 (patch)
tree1721edac40abf31086367f69389dda16d9fc07d0
parent70122df2b7ef965ff79405fe2732f153c9a4098f (diff)
Assembler: Add kStdErr for error output.
Assembler: Adding 32x0 support. Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
-rw-r--r--CompilerKit/AsmKit/Arch/64k.hpp2
-rw-r--r--Drivers/32asm.cc42
-rw-r--r--Drivers/64asm.cc18
3 files changed, 54 insertions, 8 deletions
diff --git a/CompilerKit/AsmKit/Arch/64k.hpp b/CompilerKit/AsmKit/Arch/64k.hpp
index 4c3abd0..95d635f 100644
--- a/CompilerKit/AsmKit/Arch/64k.hpp
+++ b/CompilerKit/AsmKit/Arch/64k.hpp
@@ -23,7 +23,7 @@
#define kAsmRegToReg 0x02
#define kAsmSyscall 0x03
#define kAsmJump 0x04
-#define kAsmNoArgs 0x05
+#define kAsmNoArgs 0x00
typedef char e64k_character_t;
typedef uint8_t e64k_num_t;
diff --git a/Drivers/32asm.cc b/Drivers/32asm.cc
new file mode 100644
index 0000000..08c9b03
--- /dev/null
+++ b/Drivers/32asm.cc
@@ -0,0 +1,42 @@
+/*
+ * ========================================================
+ *
+ * 32asm
+ * Copyright 2024, Mahrouss Logic, all rights reserved.
+ *
+ * ========================================================
+ */
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+// @file 32asm.cxx
+// @author Amlal El Mahrouss
+// @brief 32x0 Assembler.
+
+// REMINDER: when dealing with an undefined symbol use (string size):LinkerFindSymbol:(string)
+// so that ld will look for it.
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+#define __ASM_NEED_32x0__ 1
+
+#include <CompilerKit/AsmKit/Arch/32k.hpp>
+#include <CompilerKit/ParserKit.hpp>
+#include <CompilerKit/StdKit/PEF.hpp>
+#include <CompilerKit/StdKit/AE.hpp>
+#include <filesystem>
+#include <iostream>
+#include <fstream>
+
+/////////////////////
+
+// ANSI ESCAPE CODES
+
+/////////////////////
+
+#define kBlank "\e[0;30m"
+#define kRed "\e[0;31m"
+#define kWhite "\e[0;97m"
+#define kYellow "\e[0;33m"
+
+
diff --git a/Drivers/64asm.cc b/Drivers/64asm.cc
index 3a4b6dc..6e8e2f0 100644
--- a/Drivers/64asm.cc
+++ b/Drivers/64asm.cc
@@ -40,6 +40,7 @@
#define kYellow "\e[0;33m"
#define kStdOut (std::cout << kWhite)
+#define kStdErr (std::cout << kRed)
static char kOutputArch = CompilerKit::kPefArch64000;
static Boolean kOutputAsBinary = false;
@@ -74,8 +75,8 @@ namespace detail
if (reason[0] == '\n')
reason.erase(0, 1);
- kStdOut << kRed << "[ 64asm ] " << kWhite << ((file == "64asm") ? "internal assembler error " : ("in file, " + file)) << kBlank << std::endl;
- kStdOut << kRed << "[ 64asm ] " << kWhite << reason << kBlank << std::endl;
+ kStdErr << kRed << "[ 64asm ] " << kWhite << ((file == "64asm") ? "internal assembler error " : ("in file, " + file)) << kBlank << std::endl;
+ kStdErr << kRed << "[ 64asm ] " << kWhite << reason << kBlank << std::endl;
if (kAcceptableErrors > kErrorLimit)
std::exit(3);
@@ -211,13 +212,14 @@ MPCC_MODULE(Assembler64x0)
}
}
- if (kVerbose)
- {
- kStdOut << "64asm: writing to file...\n";
- }
if (!kOutputAsBinary)
{
+ if (kVerbose)
+ {
+ kStdOut << "64asm: Writing object file...\n";
+ }
+
// this is the final step, write everything to the file.
auto pos = file_ptr_out.tellp();
@@ -228,6 +230,8 @@ MPCC_MODULE(Assembler64x0)
if (kRecords.empty())
{
+ kStdErr << "64asm: At least one record is needed to write an object file.\n64asm: Make one using `export .text foo_bar`.\n";
+
std::filesystem::remove(object_output);
return -1;
}
@@ -287,7 +291,7 @@ MPCC_MODULE(Assembler64x0)
{
if (kVerbose)
{
- kStdOut << "64asm: Skip AE write...\n";
+ kStdOut << "64asm: Skip object write...\n";
}
}