From 6a91f64fceb12d43ccd6fdfeb1a4a8b753f3e482 Mon Sep 17 00:00:00 2001 From: Maxwell Jeffress Date: Thu, 16 Jul 2026 12:42:27 +1000 Subject: [PATCH] assembler stub --- src/assembler/assemble.c | 9 ++++++ src/assembler/assemble.h | 3 ++ src/assembler/main.c | 60 ++++++++++++++++++++++++++++++++++++++++ src/instruction.h | 2 +- 4 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 src/assembler/assemble.c create mode 100644 src/assembler/assemble.h create mode 100644 src/assembler/main.c diff --git a/src/assembler/assemble.c b/src/assembler/assemble.c new file mode 100644 index 0000000..99d58e5 --- /dev/null +++ b/src/assembler/assemble.c @@ -0,0 +1,9 @@ +#include "assemble.h" + +#include + +#include "../instruction.h" + +void assemble(const char* input, const char* outputFileName) { + +} diff --git a/src/assembler/assemble.h b/src/assembler/assemble.h new file mode 100644 index 0000000..cee9c2a --- /dev/null +++ b/src/assembler/assemble.h @@ -0,0 +1,3 @@ +#pragma once + +void assemble(const char* input, const char* outputFileName); diff --git a/src/assembler/main.c b/src/assembler/main.c new file mode 100644 index 0000000..d27e447 --- /dev/null +++ b/src/assembler/main.c @@ -0,0 +1,60 @@ +#include +#include + +#include "assemble.h" + +char* getFileContents(const char* filename) { + // https://stackoverflow.com/questions/3747086/reading-the-whole-text-file-into-a-char-array-in-c + FILE* fp; + long lSize; + char* file; + + fp = fopen(filename, "rb"); + if (!fp) { + perror(filename); + exit(1); + } + + fseek(fp, 0L, SEEK_END); + lSize = ftell(fp); + rewind(fp); + + file = calloc(1, lSize + 1); + if (!file) { + fclose(fp); + fprintf(stderr, "memory allocation fail when reading file %s\n", filename); + exit(1); + } + + if (1!=fread(file, lSize, 1, fp)) { + fclose(fp); + free(file); + fputs("couldn't read entire file", stderr); + exit(1); + } + + // we done + fclose(fp); + + return file; +} + +int main(int argc, char** argv) { + if (argc < 2) { + printf("Usage: %s\n [output file]\n", argv[0]); + return 1; + } + char* outputName = "out.bin"; + if (argc >= 3) { + outputName = argv[2]; + } + + char* asmContents = getFileContents(argv[1]); + if (asmContents == NULL) { + printf("couldn't read file %s\n", argv[1]); + return 1; + } + + // TODO: implement + assemble(asmContents, outputName); +} diff --git a/src/instruction.h b/src/instruction.h index f49e7e1..4e9e5f0 100644 --- a/src/instruction.h +++ b/src/instruction.h @@ -32,7 +32,7 @@ typedef uint16_t SerializedInst; typedef struct { InstructionOpcode opcode; - uint8_t operands[3]; + Register operands[3]; uint16_t immediate; // unused for almost all instructions bool hasImm16; } Instruction;