diff --git a/add.o b/add.o deleted file mode 100644 index 44f77e0..0000000 Binary files a/add.o and /dev/null differ 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);