FreeCalypso > hg > freecalypso-reveng
view dspanal/coffout.c @ 320:20feaf83c661
frbl/reconst/convert.c: better match to original object
still not perfect though
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 05 Mar 2020 05:01:14 +0000 |
parents | 493f73198267 |
children |
line wrap: on
line source
#include <sys/types.h> #include <stdio.h> #include <stdint.h> #include <stdlib.h> #include "coffout.h" static FILE *outF; static void write16(val) unsigned val; { putc(val, outF); putc(val >> 8, outF); } static void write32(val) unsigned val; { putc(val, outF); putc(val >> 8, outF); putc(val >> 16, outF); putc(val >> 24, outF); } emit_coff_output(filename, sections, nsect) char *filename; struct coff_section *sections; unsigned nsect; { uint32_t dataptr; unsigned n; char section_name[32]; outF = fopen(filename, "w"); if (!outF) { perror(filename); exit(1); } write16(0x00C1); write16(nsect); write32(0); write32(0); write32(0); write16(0); write16(0x0117); write16(0x0098); dataptr = 0x16 + 0x28 * nsect; for (n = 0; n < nsect; n++) { sprintf(section_name, "chunk%03u", n); fwrite(section_name, 1, 8, outF); write32(sections[n].addr); write32(sections[n].addr); write32(sections[n].size); write32(dataptr); dataptr += sections[n].size << 1; write32(0); write32(0); write32(0); write16(sections[n].flags); putc(0, outF); putc(sections[n].mempage, outF); } for (n = 0; n < nsect; n++) fwrite(sections[n].data, 2, sections[n].size, outF); fclose(outF); return(0); }