diff --git a/src/assembler/assemble.c b/src/assembler/assemble.c index 4774d15..cefc25d 100644 --- a/src/assembler/assemble.c +++ b/src/assembler/assemble.c @@ -211,6 +211,32 @@ void serializeProgramToFile(Program* program, const char* outputFileName) { exit(1); } + // Write magic header + size_t written = fwrite("mlc\0", 4, 1, fp); + if (written != 1) { + fprintf(stderr, "failed to write magic header into file %s\n", outputFileName); + fclose(fp); + exit(1); + } + + // Write program version + uint8_t version = 1; + written = fwrite(&version, sizeof(uint8_t), 1, fp); + if (written != 1) { + fprintf(stderr, "failed to write version header into file %s\n", outputFileName); + fclose(fp); + exit(1); + } + + // Write instruction count + uint32_t instCount = program->len; + written = fwrite(&instCount, sizeof(uint32_t), 1, fp); + if (written != 1) { + fprintf(stderr, "failed to write instruction count header into file %s\n", outputFileName); + fclose(fp); + exit(1); + } + for (size_t i = 0; i < program->len; i++) { Instruction* inst = &program->at[i];