diff options
| author | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-01-19 15:52:36 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-01-19 16:23:27 +0100 |
| commit | c418d56982805ad64a433ec02b9d787f56e23734 (patch) | |
| tree | 1721edac40abf31086367f69389dda16d9fc07d0 | |
| parent | 70122df2b7ef965ff79405fe2732f153c9a4098f (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.hpp | 2 | ||||
| -rw-r--r-- | Drivers/32asm.cc | 42 | ||||
| -rw-r--r-- | Drivers/64asm.cc | 18 |
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"; } } |
