From 8f64b17777926df3f56f52ac2553d53dbb2961fe Mon Sep 17 00:00:00 2001 From: Maxwell Jeffress Date: Fri, 17 Jul 2026 12:48:04 +1000 Subject: [PATCH] Include imm16's in the word count (fix the infinite loop bug yay!) --- add.o | Bin 22 -> 0 bytes src/assembler/assemble.c | 7 ++++++- src/assembler/program.c | 4 ++-- src/main.c | 1 + 4 files changed, 9 insertions(+), 3 deletions(-) delete mode 100644 add.o diff --git a/add.o b/add.o deleted file mode 100644 index 44f77e0310119e635c874c4bfff312a440bb0fae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22 acmd1JNoHVVU|?VcVnzl*1|}fQzyJUn0s&V5 diff --git a/src/assembler/assemble.c b/src/assembler/assemble.c index cbc18e0..45246ba 100644 --- a/src/assembler/assemble.c +++ b/src/assembler/assemble.c @@ -248,11 +248,16 @@ void serializeProgramToFile(Program* program, const char* outputFileName) { exit(1); } + size_t totalWords = 0; + for (size_t i = 0; i < program->len; i++) { + totalWords += program->at[i].hasImm16 ? 2 : 1; + } + // Write magic header ROMFileHeader header = { .magic = "mlc\0", .version = 1, - .numInstructions = program->len + .numInstructions = totalWords }; size_t written = fwrite(&header, sizeof(ROMFileHeader), 1, fp); diff --git a/src/assembler/program.c b/src/assembler/program.c index 248ab72..a2b5c4e 100644 --- a/src/assembler/program.c +++ b/src/assembler/program.c @@ -30,7 +30,7 @@ void addInstructionToProgram(Program* program, Instruction inst) { } if (program->len + 1 >= program->capacity) { - Instruction* tmp = malloc(sizeof(Instruction) * program->capacity * 2); + Instruction* tmp = realloc(program->at, sizeof(Instruction) * program->capacity * 2); if (tmp == NULL) { fprintf(stderr, "malloc failed while expanding program\n"); exit(1); @@ -50,7 +50,7 @@ void addLabelToProgram(Program* program, const char* name, uint8_t position) { } if (program->labels.len + 1 >= program->labels.capacity) { - Label* tmp = malloc(sizeof(Label) * program->labels.capacity * 2); + Label* tmp = realloc(program->labels.at, sizeof(Label) * program->labels.capacity * 2); if (tmp == NULL) { fprintf(stderr, "malloc failed while expanding program labels\n"); exit(1); diff --git a/src/main.c b/src/main.c index 28ee566..ea3097d 100644 --- a/src/main.c +++ b/src/main.c @@ -36,6 +36,7 @@ int main(int argc, char** argv) { } memcpy(emu->mem->data + MEM_PROGRAM_START, rom->instructions, sizeof(SerializedInst) * rom->header.numInstructions); + emu->pc = MEM_PROGRAM_START; startEmulator(emu); freeEmulator(emu);