]> git.sur5r.net Git - cc65/commitdiff
Started to code the front end base layer modules.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 25 Feb 2012 15:08:38 +0000 (15:08 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 25 Feb 2012 15:08:38 +0000 (15:08 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5550 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/sp65/bitmap.c [new file with mode: 0644]
src/sp65/bitmap.h [new file with mode: 0644]
src/sp65/color.h [new file with mode: 0644]
src/sp65/make/gcc.mak
src/sp65/palette.c [new file with mode: 0644]
src/sp65/palette.h [new file with mode: 0644]
src/sp65/pixel.h [new file with mode: 0644]

diff --git a/src/sp65/bitmap.c b/src/sp65/bitmap.c
new file mode 100644 (file)
index 0000000..c2daba5
--- /dev/null
@@ -0,0 +1,127 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                 bitmap.c                                  */
+/*                                                                           */
+/*         Bitmap definition 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.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+
+/* common */
+#include "check.h"
+#include "xmalloc.h"
+
+/* sp65 */
+#include "bitmap.h"
+#include "error.h"
+
+
+
+/*****************************************************************************/
+/*                                   Code                                    */
+/*****************************************************************************/
+
+
+
+Bitmap* NewBitmap (unsigned Width, unsigned Height)
+/* Create a new bitmap. The type is set to unknown and the palette to NULL */
+{
+    Bitmap* B;
+
+    /* Calculate the size of the bitmap in pixels */
+    unsigned long Size = (unsigned long) Width * Height;
+
+    /* Some safety checks */
+    PRECONDITION (Size > 0 && Size <= BM_MAX_SIZE);
+
+    /* Allocate memory */
+    B = xmalloc (sizeof (*B) + (Size - 1) * sizeof (B->Data[0]));
+
+    /* Initialize the data */
+    B->Type     = bmUnknown;
+    SB_Init (&B->Name);
+    B->Width    = Width;
+    B->Height   = Height;
+    B->Pal      = 0;
+
+    /* Return the bitmap */
+    return B;
+}
+
+
+
+void FreeBitmap (Bitmap* B)
+/* Free a dynamically allocated bitmap */
+{
+    /* Free the palette */
+    xfree (B->Pal);
+}
+
+
+
+Color GetPixelColor (const Bitmap* B, unsigned X, unsigned Y)
+/* Get the color for a given pixel. For indexed bitmaps, the palette entry
+ * is returned.
+ */
+{
+    /* Get the pixel at the given coordinates */
+    Pixel P = GetPixel (B, X, Y);
+
+    /* If the bitmap has a palette, return the color from the palette. For
+     * simplicity, we will only check the palette, not the type.
+     */
+    if (B->Pal) {
+        if (P.Index >= B->Pal->Count) {
+            /* Palette index is invalid */
+            Error ("Invalid palette index %u at position %u/%u of \"%*s\"",
+                   P.Index, X, Y, SB_GetLen (&B->Name),
+                   SB_GetConstBuf (&B->Name));
+        }
+        return B->Pal->Entries[P.Index];
+    } else {
+        return P.C;
+    }
+}
+
+
+
+Pixel GetPixel (const Bitmap* B, unsigned X, unsigned Y)
+/* Return a pixel from the bitmap. The returned value may either be a color
+ * or a palette index, depending on the type of the bitmap.
+ */
+{
+    /* Check the coordinates */
+    PRECONDITION (X < B->Width && Y < B->Height);
+
+    /* Return the pixel */
+    return B->Data[Y * B->Width + X];
+}
+
+
+
diff --git a/src/sp65/bitmap.h b/src/sp65/bitmap.h
new file mode 100644 (file)
index 0000000..739f645
--- /dev/null
@@ -0,0 +1,125 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                 bitmap.h                                  */
+/*                                                                           */
+/*         Bitmap definition 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 BITMAP_H
+#define BITMAP_H
+
+
+
+/* common */
+#include "strbuf.h"
+
+/* sp65 */   
+#include "palette.h"
+#include "pixel.h"
+
+
+
+/*****************************************************************************/
+/*                                   Data                                    */
+/*****************************************************************************/
+
+
+
+/* Safety limit for the size of the bitmap in pixels */
+#define BM_MAX_SIZE     4194304UL
+
+/* Bitmap type */
+typedef enum BitmapType BitmapType;
+enum BitmapType {
+    bmUnknown,
+    bmMonochrome,
+    bmIndexed,
+    bmRGB,
+    bmRGBA
+};
+
+/* Bitmap structure */
+typedef struct Bitmap Bitmap;
+struct Bitmap {
+
+    /* Type of the bitmap */
+    BitmapType  Type;
+
+    /* Name of the bitmap. This is used for error messages and should be
+     * something that allows the user to identify which bitmap the message
+     * refers to. For bitmaps loaded from a file, using the file name is
+     * a good idea.
+     */
+    StrBuf      Name;
+
+    /* Size of the bitmap */
+    unsigned    Width;
+    unsigned    Height;
+
+    /* Palette for monochrome and indexed bitmap types, otherwise NULL */
+    Palette*    Pal;
+
+    /* Pixel data, dynamically allocated */
+    Pixel       Data[1];
+};
+
+
+
+/*****************************************************************************/
+/*                                   Code                                    */
+/*****************************************************************************/
+
+
+
+Bitmap* NewBitmap (unsigned Width, unsigned Height);
+/* Create a new bitmap. The type is set to unknown and the palette to NULL */
+
+void FreeBitmap (Bitmap* B);
+/* Free a dynamically allocated bitmap */
+
+Color GetPixelColor (const Bitmap* B, unsigned X, unsigned Y);
+/* Get the color for a given pixel. For indexed bitmaps, the palette entry
+ * is returned.
+ */
+
+Pixel GetPixel (const Bitmap* B, unsigned X, unsigned Y);
+/* Return a pixel from the bitmap. The returned value may either be a color
+ * or a palette index, depending on the type of the bitmap.
+ */
+
+
+
+/* End of bitmap.h */
+
+#endif
+
+
+
diff --git a/src/sp65/color.h b/src/sp65/color.h
new file mode 100644 (file)
index 0000000..6502bc9
--- /dev/null
@@ -0,0 +1,69 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                  color.h                                  */
+/*                                                                           */
+/*          Color definition 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 COLOR_H
+#define COLOR_H
+
+
+
+/*****************************************************************************/
+/*                                   Data                                    */
+/*****************************************************************************/
+
+
+
+/* Color structure */
+typedef struct Color Color;
+struct Color {
+    unsigned char R;
+    unsigned char G;
+    unsigned char B;
+    unsigned char A;
+};
+
+
+
+/*****************************************************************************/
+/*                                   Code                                    */
+/*****************************************************************************/
+
+
+
+/* End of color.h */
+
+#endif
+
+
+
index 30fcbbc763ef9f39eda9d73069a52ab724661b43..20503b0680eaaa40d992893a98c12c7410d855a8 100644 (file)
@@ -22,8 +22,10 @@ LDFLAGS =
 # -----------------------------------------------------------------------------
 # List of all object files
 
-OBJS =         error.o         \
-       main.o
+OBJS =         bitmap.o        \
+        error.o                \
+       main.o          \
+        palette.o
 
 LIBS = $(COMMON)/common.a
 
diff --git a/src/sp65/palette.c b/src/sp65/palette.c
new file mode 100644 (file)
index 0000000..3ada051
--- /dev/null
@@ -0,0 +1,76 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                 palette.c                                 */
+/*                                                                           */
+/*      Color palette definition 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.                                                          */
+/*                                                                           */
+/*****************************************************************************/
+
+
+
+/* common */
+#include "check.h"
+#include "xmalloc.h"
+
+/* sp65 */
+#include "palette.h"
+
+
+
+/*****************************************************************************/
+/*                                   Code                                    */
+/*****************************************************************************/
+
+
+
+Palette* NewPalette (unsigned Entries)
+/* Create a new palette with the given number of entries */
+{
+    Palette* P;
+
+    /* Some safety checks */
+    PRECONDITION (Entries > 0 && Entries <= 256);
+
+    /* Allocate memory */
+    P = xmalloc (sizeof (*P) + (Entries - 1) * sizeof (P->Entries[0]));
+
+    /* Initialize the struct, then return it */
+    P->Count = Entries;
+    return P;
+}
+
+
+
+void FreePalette (Palette* P)
+/* Free a dynamically allocated palette */
+{
+    xfree (P);
+}
+
+
+
diff --git a/src/sp65/palette.h b/src/sp65/palette.h
new file mode 100644 (file)
index 0000000..c925f81
--- /dev/null
@@ -0,0 +1,79 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                 palette.h                                 */
+/*                                                                           */
+/*      Color palette definition 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 PALETTE_H
+#define PALETTE_H
+
+
+
+/* sp65 */
+#include "color.h"
+
+
+
+/*****************************************************************************/
+/*                                   Data                                    */
+/*****************************************************************************/
+
+
+
+typedef struct Palette Palette;
+struct Palette {
+    unsigned            Count;          /* Number of entries */
+    Color               Entries[1];     /* Palette entries - dynamic */
+};
+
+
+
+/*****************************************************************************/
+/*                                   Code                                    */
+/*****************************************************************************/
+
+
+
+Palette* NewPalette (unsigned Entries);
+/* Create a new palette with the given number of entries */
+
+void FreePalette (Palette* P);
+/* Free a dynamically allocated palette */
+
+
+
+/* End of palette.h */
+
+#endif
+
+
+
diff --git a/src/sp65/pixel.h b/src/sp65/pixel.h
new file mode 100644 (file)
index 0000000..f313ff3
--- /dev/null
@@ -0,0 +1,72 @@
+/*****************************************************************************/
+/*                                                                           */
+/*                                  pixel.h                                  */
+/*                                                                           */
+/*          Pixel definition 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 PIXEL_H
+#define PIXEL_H
+
+
+
+/* sp65 */
+#include "color.h"
+
+
+
+/*****************************************************************************/
+/*                                   Data                                    */
+/*****************************************************************************/
+
+
+
+/* A pixel is either a color or a palette index, depending on the bitmap */
+typedef union Pixel Pixel;
+union Pixel {
+    Color       C;
+    unsigned    Index;
+};
+
+
+
+/*****************************************************************************/
+/*                                   Code                                    */
+/*****************************************************************************/
+
+
+
+/* End of pixel.h */
+
+#endif
+
+
+