diff options
author | Benji Dial <benji@benjidial.net> | 2023-05-29 16:36:19 -0400 |
---|---|---|
committer | Benji Dial <benji@benjidial.net> | 2023-05-29 16:36:19 -0400 |
commit | 97c79ff771d4993e322d0d6c44f265180797b2eb (patch) | |
tree | 5513cf25721cf21c06efd913ed2f82b980e3cb24 /test/test.cpp | |
parent | 338549f9cd49fa0f3001826c6605663fa6dd019b (diff) | |
download | lib94-97c79ff771d4993e322d0d6c44f265180797b2eb.tar.gz |
a whole lot more
Diffstat (limited to 'test/test.cpp')
-rw-r--r-- | test/test.cpp | 85 |
1 files changed, 0 insertions, 85 deletions
diff --git a/test/test.cpp b/test/test.cpp deleted file mode 100644 index b838a02..0000000 --- a/test/test.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include <lib94/lib94.hpp> -#include <iostream> -#include <cassert> -#include <fstream> -#include <chrono> -#include <thread> - -const char *const opcodes[] = { - "dat", "mov", "add", "sub", - "mul", "div", "mod", "jmp", - "jmz", "jmn", "djn", "seq", - "sne", "slt", "spl", "nop" -}; - -const char *const modifiers[] = { - "a ", "b ", "ab", "ba", "f ", "x ", "i " -}; - -const char *modes = "#$*@{<}>"; - -int main(int argc, const char **argv) { - assert(argc > 1); - - seed_prng(time(0)); - - std::vector<const warrior *> ws; - - for (int i = 1; i < argc; ++i) { - std::string source; - std::ifstream f(argv[i]); - std::getline(f, source, '\0'); - f.close(); - - auto result = compile_warrior(source); - if (std::holds_alternative<std::string>(result)) { - std::cout << "Error in " << argv[i] << ": " << std::get<std::string>(result) << std::endl; - return 0; - } - - ws.push_back(std::get<warrior *>(result)); - } - - std::vector<number_t> wps; - wps.resize(ws.size()); - - clear_core({.op = DAT, .mod = F, .amode = DIRECT, .bmode = DIRECT, .anumber = 0, .bnumber = 0}); - init_round(ws); - - while (true) { - for (int i = 0; i < ws.size(); ++i) - if (get_processes(ws[i]).size() == 0) - wps[i] = -1; - else - wps[i] = get_next_process(ws[i]); - - auto mod = get_modified_addresses(); - - printf("\x1b[H\x1b[2J"); - - for (int a = 0; a < CORE_SIZE; ++a) { - const instruction &i = get_instruction(a); - - printf("%d: %s.%s %c%d, %c%d", - a, opcodes[i.op], modifiers[i.mod], - modes[i.amode], i.anumber, - modes[i.bmode], i.bnumber); - - if (mod.contains(a)) - printf(" *"); - - for (int w = 0; w < ws.size(); ++w) - if (a == wps[w]) - printf(" < %s", ws[w]->name.c_str()); - - putchar('\n'); - } - - std::this_thread::sleep_for(std::chrono::milliseconds(250)); - - clear_modified_addresses(); - single_step(); - } - - return 0; -} |