From 40d8eb449ed072b47bfbe953a191708f761c53a0 Mon Sep 17 00:00:00 2001 From: Louis Burda Date: Tue, 25 Jul 2023 00:47:01 +0200 Subject: Reimplement value passing and improve curses ui --- asm.c | 433 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 433 insertions(+) create mode 100644 asm.c (limited to 'asm.c') diff --git a/asm.c b/asm.c new file mode 100644 index 0000000..f08a515 --- /dev/null +++ b/asm.c @@ -0,0 +1,433 @@ +#include "asm.h" +#include "util.h" +#include "tpu.h" + +#include +#include +#include + +#define NAMEALPH "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_" +#define WHITESPACE " \t\v\r\n" + +enum asm_tok { + /* Global */ + TOK_STDIN, TOK_STDOUT, TOK_TPU, TOK_END, + + /* Operands (order like OP_*) */ + TOK_ACC, TOK_BAK, TOK_NIL, TOK_LEFT, TOK_RIGHT, + TOK_UP, TOK_DOWN, TOK_ANY, TOK_LAST, TOK_LIT, TOK_NAME, + + /* Instructions (order like INST_*) */ + TOK_NOP, TOK_MOV, TOK_SWP, TOK_SAV, TOK_ADD, TOK_SUB, + TOK_NEG, TOK_JMP, TOK_JEZ, TOK_JNZ, TOK_JGZ, TOK_JLZ, TOK_JRO, + + /* Misc */ + TOK_COMMENT, TOK_LABEL, TOK_XPOS, TOK_YPOS, TOK_NL, TOK_EOF +}; + +struct asm_tokenizer { + const char *filepath; + FILE *file; + enum asm_tok tok; + char *tokstr; + size_t lineno, off; + char linebuf[256]; +}; + +static const char *tok_reprs[] = { + /* Global */ + "'STDIN'", "'STDOUT'", "'TPU'", "'END'", + + /* Operands (order like OP_*) */ + "'ACC'", "'BAK'", "'NIL'", "'LEFT'", "'RIGHT'", + "'UP'", "'DOWN'", "'ANY'", "'LAST'", "", "", + + /* Instructions (order like INST_*) */ + "'NOP'", "'MOV'", "'SWP'", "'SAV'", "'ADD'", "'SUB'", + "'NEG'", "'JMP'", "'JEZ'", "'JNZ'", "'JGZ'", "'JLZ'", "'JRO'", + + /* Misc */ + "#", "