X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fca65%2Fmain.c;h=0016c46f3fe8b3eae76b205e9a9a431bb1189996;hb=60285097e3b5bddc8c5ef67bd101039eae547763;hp=b3e855e98872679b8a2c2c98f613aa01f5a6d52b;hpb=55f9e6ac2555d31517bf96d5d910161b329735a7;p=cc65 diff --git a/src/ca65/main.c b/src/ca65/main.c index b3e855e98..0016c46f3 100644 --- a/src/ca65/main.c +++ b/src/ca65/main.c @@ -1,3 +1,4 @@ +/*****************************************************************************/ /* */ /* main.c */ /* */ @@ -204,10 +205,19 @@ 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; + case TGT_ATARIXL: + NewSymbol ("__ATARI__", 1); + NewSymbol ("__ATARIXL__", 1); + break; + case TGT_C16: CBMSystem ("__C16__"); break; @@ -225,7 +235,8 @@ static void SetSys (const char* Sys) break; case TGT_PLUS4: - CBMSystem ("__PLUS4__"); + CBMSystem ("__C16__"); + NewSymbol ("__PLUS4__", 1); break; case TGT_CBM510: @@ -249,9 +260,14 @@ static void SetSys (const char* Sys) break; case TGT_APPLE2ENH: + NewSymbol ("__APPLE2__", 1); 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); @@ -291,6 +307,14 @@ static void SetSys (const char* Sys) NewSymbol ("__SIM65C02__", 1); break; + case TGT_OSIC1P: + NewSymbol ("__OSIC1P__", 1); + break; + + case TGT_PCENGINE: + NewSymbol ("__PCE__", 1); + break; + default: AbEnd ("Invalid target name: `%s'", Sys); @@ -507,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); @@ -623,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 (); } @@ -636,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)) { @@ -666,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 */ @@ -694,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 */ @@ -705,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 (); @@ -714,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"); @@ -731,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); } } } @@ -755,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)) { @@ -773,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) { @@ -899,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 */ @@ -1087,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) { @@ -1103,6 +1132,3 @@ int main (int argc, char* argv []) /* Return an apropriate exit code */ return (ErrorCount == 0)? EXIT_SUCCESS : EXIT_FAILURE; } - - -