X-Git-Url: https://jxself.org/git/?p=zilutils.git;a=blobdiff_plain;f=zilasm%2Fheader.cpp;fp=zilasm%2Fheader.cpp;h=863c65e2b3e25d4b4e84074212068f42846087a7;hp=0000000000000000000000000000000000000000;hb=82b0f84ab797141758929d16894d42e12ef79af7;hpb=37d32bd49e745a5c1686b6495f60172b24222361 diff --git a/zilasm/header.cpp b/zilasm/header.cpp new file mode 100644 index 0000000..863c65e --- /dev/null +++ b/zilasm/header.cpp @@ -0,0 +1,68 @@ +/* + * header.c -- part of ZilUtils/ZilAsm + * + * Copyright (C) 2016, 2019 Jason Self + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +#include /* bzero */ +#include +#include + +#include "header.h" + +Program_header_struct Program_header; + +const unsigned MAX_HEADER_LEN = 40; + +void +program_header_reset (unsigned zversion) +{ + bzero (&Program_header, sizeof (Program_header)); + Program_header.version = zversion; +} + +ZMemblock * +program_header_build (void) +{ + ZMemblock *zmb = zmem_init (MAX_HEADER_LEN); + zmem_putbyte (zmb, Program_header.version); + /* 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); + h.H_STRINGS_OFFSET = swapBytes (h.H_STRINGS_OFFSET); + + int size = sizeof (Program_header_struct); + fwrite (&h, sizeof (Program_header_struct), 1, file); +}