From e4aab75bb093e0d68786a68471c97d957c769f2a Mon Sep 17 00:00:00 2001 From: uz Date: Mon, 27 Feb 2012 18:17:28 +0000 Subject: [PATCH] Added a module for assembler source output. git-svn-id: svn://svn.cc65.org/cc65/trunk@5562 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- src/sp65/asm.c | 109 ++++++++++++++++++++++++++++++++++++++++++ src/sp65/asm.h | 62 ++++++++++++++++++++++++ src/sp65/make/gcc.mak | 3 +- 3 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 src/sp65/asm.c create mode 100644 src/sp65/asm.h diff --git a/src/sp65/asm.c b/src/sp65/asm.c new file mode 100644 index 000000000..911c4cac4 --- /dev/null +++ b/src/sp65/asm.c @@ -0,0 +1,109 @@ +/*****************************************************************************/ +/* */ +/* asm.c */ +/* */ +/* Assembler output for the sp65 sprite and bitmap utility */ +/* */ +/* */ +/* */ +/* (C) 2012, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#include +#include +#include + +/* common */ +#include "cmdline.h" +#include "version.h" + +/* sp65 */ +#include "bin.h" +#include "error.h" + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +void WiteAsmFile (const char* Name, const StrBuf* Data) +/* Write the contents of Data to the given file in assembler (ca65) format */ +{ + const char* D; + unsigned Size; + + /* Open the output file */ + FILE* F = fopen (Name, "w"); + if (F == 0) { + Error ("Cannot open output file `%s': %s", Name, strerror (errno)); + } + + /* Write a readable header */ + fprintf (F, + ";\n" + "; This file was generated by %s %s\n" + ";\n" + "\n", + ProgName, + GetVersionAsString ()); + + /* Write the data */ + D = SB_GetConstBuf (Data); + Size = SB_GetLen (Data); + while (Size) { + + unsigned I; + + /* Output one line */ + unsigned Chunk = Size; + if (Chunk > 16) { + Chunk = 16; + } + fprintf (F, " .byte $%02X", (*D++ & 0xFF)); + for (I = 1; I < Chunk; ++I) { + fprintf (F, ",%02X", (*D++ & 0xFF)); + } + fputc ('\n', F); + + /* Bump the counters */ + Size -= Chunk; + } + + /* Add an empty line at the end */ + fputc ('\n', F); + + /* Close the file */ + if (fclose (F) != 0) { + Error ("Error closing output file `%s': %s", Name, strerror (errno)); + } +} + + + diff --git a/src/sp65/asm.h b/src/sp65/asm.h new file mode 100644 index 000000000..2edf2a8fb --- /dev/null +++ b/src/sp65/asm.h @@ -0,0 +1,62 @@ +/*****************************************************************************/ +/* */ +/* asm.h */ +/* */ +/* Assembler output for the sp65 sprite and bitmap utility */ +/* */ +/* */ +/* */ +/* (C) 2012, Ullrich von Bassewitz */ +/* Roemerstrasse 52 */ +/* D-70794 Filderstadt */ +/* EMail: uz@cc65.org */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef ASM_H +#define ASM_H + + + +/* common */ +#include "strbuf.h" + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +void WiteAsmFile (const char* Name, const StrBuf* Data); +/* Write the contents of Data to the given file in assembler (ca65) format */ + + + +/* End of asm.h */ + +#endif + + + diff --git a/src/sp65/make/gcc.mak b/src/sp65/make/gcc.mak index 045ad28a4..3235b395e 100644 --- a/src/sp65/make/gcc.mak +++ b/src/sp65/make/gcc.mak @@ -22,7 +22,8 @@ LDFLAGS = # ----------------------------------------------------------------------------- # List of all object files -OBJS = bin.o \ +OBJS = asm.o \ + bin.o \ bitmap.o \ color.o \ error.o \ -- 2.39.5