]> git.sur5r.net Git - cc65/blobdiff - src/ca65/main.c
initial import of the gamate stuff
[cc65] / src / ca65 / main.c
index 5a9bf70835b3d15b0c750e0976f73f7ca3ad264c..0016c46f3fe8b3eae76b205e9a9a431bb1189996 100644 (file)
@@ -1,3 +1,4 @@
+/*****************************************************************************/
 /*                                                                           */
 /*                                  main.c                                   */
 /*                                                                           */
@@ -204,6 +205,10 @@ static void SetSys (const char* Sys)
             AbEnd ("Cannot use `module' as a target for the assembler");
             break;
 
+        case TGT_ATARI5200:
+            NewSymbol ("__ATARI5200__", 1);
+            break;
+
         case TGT_ATARI:
             NewSymbol ("__ATARI__", 1);
             break;
@@ -259,6 +264,10 @@ static void SetSys (const char* Sys)
             NewSymbol ("__APPLE2ENH__", 1);
             break;
 
+        case TGT_GAMATE:
+            NewSymbol ("__GAMATE__", 1);
+            break;
+
         case TGT_GEOS_CBM:
             /* Do not handle as a CBM system */
             NewSymbol ("__GEOS__", 1);
@@ -298,10 +307,14 @@ static void SetSys (const char* Sys)
             NewSymbol ("__SIM65C02__", 1);
             break;
 
-               case TGT_C1P:
+        case TGT_OSIC1P:
             NewSymbol ("__OSIC1P__", 1);
             break;
 
+        case TGT_PCENGINE:
+            NewSymbol ("__PCE__", 1);
+            break;
+
         default:
             AbEnd ("Invalid target name: `%s'", Sys);
 
@@ -518,8 +531,8 @@ static void OptListing (const char* Opt, const char* Arg)
 /* Create a listing file */
 {
     /* Since the meaning of -l and --listing has changed, print an error if
-     * the filename is empty or begins with the option char.
-     */
+    ** the filename is empty or begins with the option char.
+    */
     if (Arg == 0 || *Arg == '\0' || *Arg == '-') {
         Fatal ("The meaning of `%s' has changed. It does now "
                "expect a file name as argument.", Opt);
@@ -634,8 +647,8 @@ static void OneLine (void)
     int           Instr = -1;
 
     /* Initialize the new listing line if we are actually reading from file
-     * and not from internally pushed input.
-     */
+    ** and not from internally pushed input.
+    */
     if (!HavePushedInput ()) {
         InitListingLine ();
     }
@@ -647,25 +660,28 @@ static void OneLine (void)
     }
 
     /* If the first token on the line is an identifier, check for a macro or
-     * an instruction.
-     */
+    ** an instruction.
+    */
     if (CurTok.Tok == TOK_IDENT) {
-        if (!UbiquitousIdents) {
-            /* Macros and symbols cannot use instruction names */
+        if (UbiquitousIdents) {
+            /* Macros CAN be instructions, so check for them first */
+            Mac = FindMacro (&CurTok.SVal);
+            if (Mac == 0) {
+                Instr = FindInstruction (&CurTok.SVal);
+            }
+        } else {
+            /* Macros and symbols may NOT use the names of instructions */
             Instr = FindInstruction (&CurTok.SVal);
             if (Instr < 0) {
                 Mac = FindMacro (&CurTok.SVal);
             }
-        } else {
-            /* Macros and symbols may use the names of instructions */
-            Mac = FindMacro (&CurTok.SVal);
         }
     }
 
     /* Handle an identifier. This may be a cheap local symbol, or a fully
-     * scoped identifier which may start with a namespace token (for global
-     * namespace)
-     */
+    ** scoped identifier which may start with a namespace token (for global
+    ** namespace)
+    */
     if (CurTok.Tok == TOK_LOCAL_IDENT ||
         CurTok.Tok == TOK_NAMESPACE   ||
         (CurTok.Tok == TOK_IDENT && Instr < 0 && Mac == 0)) {
@@ -677,8 +693,8 @@ static void OneLine (void)
         Sym = ParseAnySymName (SYM_ALLOC_NEW);
 
         /* If a colon follows, this is a label definition. If there
-         * is no colon, it's an assignment.
-         */
+        ** is no colon, it's an assignment.
+        */
         if (CurTok.Tok == TOK_EQ || CurTok.Tok == TOK_ASSIGN) {
 
             /* Determine the symbol flags from the assignment token */
@@ -705,8 +721,8 @@ static void OneLine (void)
             Expr = GenLiteralExpr (ConstExpression ());
 
             /* Define the symbol with the constant expression following
-             * the '='
-             */
+            ** the '='
+            */
             SymDef (Sym, Expr, ADDR_SIZE_DEFAULT, SF_VAR);
 
             /* Don't allow anything after a symbol definition */
@@ -716,8 +732,8 @@ static void OneLine (void)
         } else {
 
             /* A label. Remember the current segment, so we can later
-             * determine the size of the data stored under the label.
-             */
+            ** determine the size of the data stored under the label.
+            */
             Seg = ActiveSeg;
             PC  = GetPC ();
 
@@ -725,9 +741,9 @@ static void OneLine (void)
             SymDef (Sym, GenCurrentPC (), ADDR_SIZE_DEFAULT, SF_LABEL);
 
             /* Skip the colon. If NoColonLabels is enabled, allow labels
-             * without a colon if there is no whitespace before the
-             * identifier.
-             */
+            ** without a colon if there is no whitespace before the
+            ** identifier.
+            */
             if (CurTok.Tok != TOK_COLON) {
                 if (HadWS || !NoColonLabels) {
                     Error ("`:' expected");
@@ -742,18 +758,21 @@ static void OneLine (void)
             }
 
             /* If we come here, a new identifier may be waiting, which may
-             * be a macro or instruction.
-             */
+            ** be a macro or instruction.
+            */
             if (CurTok.Tok == TOK_IDENT) {
-                if (!UbiquitousIdents) {
-                    /* Macros and symbols cannot use instruction names */
+                if (UbiquitousIdents) {
+                    /* Macros CAN be instructions, so check for them first */
+                    Mac = FindMacro (&CurTok.SVal);
+                    if (Mac == 0) {
+                        Instr = FindInstruction (&CurTok.SVal);
+                    }
+                } else {
+                    /* Macros and symbols may NOT use the names of instructions */
                     Instr = FindInstruction (&CurTok.SVal);
                     if (Instr < 0) {
                         Mac = FindMacro (&CurTok.SVal);
                     }
-                } else {
-                    /* Macros and symbols may use the names of instructions */
-                    Mac = FindMacro (&CurTok.SVal);
                 }
             }
         }
@@ -766,8 +785,7 @@ static void OneLine (void)
     } else if (Mac != 0) {
         /* A macro expansion */
         MacExpandStart (Mac);
-    } else if (Instr >= 0 ||
-               (UbiquitousIdents && ((Instr = FindInstruction (&CurTok.SVal)) >= 0))) {
+    } else if (Instr >= 0) {
         /* A mnemonic - assemble one instruction */
         HandleInstruction (Instr);
     } else if (PCAssignment && (CurTok.Tok == TOK_STAR || CurTok.Tok == TOK_PC)) {
@@ -784,9 +802,9 @@ static void OneLine (void)
     }
 
     /* If we have defined a label, remember its size. Sym is also set by
-     * a symbol assignment, but in this case Done is false, so we don't
-     * come here.
-     */
+    ** a symbol assignment, but in this case Done is false, so we don't
+    ** come here.
+    */
     if (Sym) {
         unsigned long Size;
         if (Seg == ActiveSeg) {
@@ -910,13 +928,13 @@ int main (int argc, char* argv [])
     SegInit ();
 
     /* Enter the base lexical level. We must do that here, since we may
-     * define symbols using -D.
-     */
+    ** define symbols using -D.
+    */
     SymEnterLevel (&GlobalNameSpace, SCOPE_FILE, ADDR_SIZE_DEFAULT, 0);
 
     /* Initialize the line infos. Must be done here, since we need line infos
-     * for symbol definitions.
-     */
+    ** for symbol definitions.
+    */
     InitLineInfo ();
 
     /* Check the parameters */
@@ -1098,8 +1116,8 @@ int main (int argc, char* argv [])
     DoneLineInfo ();
 
     /* If we didn't have any errors, create the object, listing and
-     * dependency files
-     */
+    ** dependency files
+    */
     if (ErrorCount == 0) {
         CreateObjFile ();
         if (SB_GetLen (&ListingName) > 0) {
@@ -1114,6 +1132,3 @@ int main (int argc, char* argv [])
     /* Return an apropriate exit code */
     return (ErrorCount == 0)? EXIT_SUCCESS : EXIT_FAILURE;
 }
-
-
-