Add creation of .dat file by writing header and few machine codes
[zilutils.git] / zilasm / header.c
index 8eb0c3406fb430fc3521aa5b2c6bbb903451bbed..e5f350fbaa0265d5a0267721a2137714df8e58f3 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * header.c -- part of ZilUtils/ZilAsm
  *
- * Copyright (C) 2016 Jason Self <j@jxself.org>
+ * Copyright (C) 2016, 2019 Jason Self <j@jxself.org>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Affero General Public License as
  *
  * You should have received a copy of the GNU Affero General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ * SPDX-License-Identifier: AGPL-3.0-or-later
  */
 
 #include <string.h>  /* bzero */
 #include <assert.h>
+#include <stdio.h>
 
 #include "header.h"
 
@@ -39,3 +42,20 @@ ZMemblock *program_header_build(void)
        /* TODO */
        return zmb;
 }
+
+
+Word swapBytes(Word w)
+{
+       return ((w & 255) << 8) + (w >> 8);
+}
+
+
+void outputToFile(Program_header_struct *pHeader, FILE* file)
+{
+       Program_header_struct h;
+       memcpy(&h, pHeader, sizeof(Program_header_struct));
+
+       h.startPC = swapBytes(h.startPC);
+       h.h_file_size = swapBytes(h.h_file_size);
+       fwrite(&h, sizeof(Program_header_struct), 1, file);
+}
\ No newline at end of file