]> git.sur5r.net Git - cc65/commitdiff
Similar changes as for the C output target: If the attribute "ident" is given,
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 4 Jun 2012 19:29:39 +0000 (19:29 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 4 Jun 2012 19:29:39 +0000 (19:29 +0000)
place the data into a .PROC with this name. Add additional constants named
COLORS, WIDTH and HEIGHT within this .PROC.

git-svn-id: svn://svn.cc65.org/cc65/trunk@5684 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/sp65/asm.c

index 882897a40b89d39f7d72344bf90fb7d1a1c8ca46..c397d33d6324dc53a7a33279bfb68548e091130d 100644 (file)
@@ -56,7 +56,7 @@
 
 
 
-static int ValidAsmLabel (const char* L)
+static int ValidIdentifier (const char* L)
 /* Check an assembler label for validity */
 {
     /* Must begin with underscore or alphabetic character */
@@ -113,28 +113,15 @@ static unsigned GetBase (const Collection* A)
 
 
 
-static const char* GetLabel (const Collection* A)
-/* Return the assembler label from the attribute collection A */
+static const char* GetIdentifier (const Collection* A)
+/* Return the label identifier from the attribute collection A */
 {
-    /* Check for a label attribute */
-    const char* Label = GetAttrVal (A, "label");
-    if (Label && !ValidAsmLabel (Label)) {
-        Error ("Invalid value for attribute `label'");
+    /* Check for a ident attribute */
+    const char* Ident = GetAttrVal (A, "ident");
+    if (Ident && !ValidIdentifier (Ident)) {
+        Error ("Invalid value for attribute `ident'");
     }
-    return Label;
-}
-
-
-
-static const char* GetSegment (const Collection* A)
-/* Return the segment name from the attribute collection A */
-{
-    /* Check for a label attribute */
-    const char* Seg = GetAttrVal (A, "segment");
-    if (Seg && !ValidAsmLabel (Seg)) {
-        Error ("Invalid value for attribute `segment'");
-    }
-    return Seg;
+    return Ident;
 }
 
 
@@ -159,11 +146,8 @@ void WriteAsmFile (const StrBuf* Data, const Collection* A, const Bitmap* B)
     /* Get the number base */
     unsigned Base = GetBase (A);
 
-    /* Get the assembler label */
-    const char* Label = GetLabel (A);
-
-    /* Get the segment */
-    const char* Segment = GetSegment (A);
+    /* Get the identifier */
+    const char* Ident = GetIdentifier (A);
 
     /* Open the output file */
     F = fopen (Name, "w");
@@ -185,14 +169,17 @@ void WriteAsmFile (const StrBuf* Data, const Collection* A, const Bitmap* B)
              GetBitmapColors (B),
              BitmapIsIndexed (B)? ", indexed" : "");
 
-    /* If we have a segment defined, output a segment directive */
-    if (Segment) {
-        fprintf (F, ".segment        \"%s\"\n\n", Segment);
-    }
-
     /* If we have an assembler label, output that */
-    if (Label) {
-        fprintf (F, "%s:\n", Label);
+    if (Ident) {
+        fprintf (F,
+                 ".proc   %s\n"
+                 "        COLORS = %u\n"
+                 "        WIDTH  = %u\n"
+                 "        HEIGHT = %u\n",
+                 Ident,
+                 GetBitmapColors (B),
+                 GetBitmapWidth (B),
+                 GetBitmapHeight (B));
     }
 
     /* Write the data */
@@ -238,6 +225,11 @@ void WriteAsmFile (const StrBuf* Data, const Collection* A, const Bitmap* B)
         Size -= Chunk;
     }
 
+    /* Terminate the .proc if we had an identifier */
+    if (Ident) {
+        fputs (".endproc\n", F);
+    }
+
     /* Add an empty line at the end */
     fputc ('\n', F);