]> Shamusworld >> Repos - rmac/blobdiff - procln.c
Partial fix for bug #108 (Fixup cleanups).
[rmac] / procln.c
index 79c0db26f107627ab0826f7dc7b1169e945e6773..addff0462d8247e6cdc02632f88939e75f531b3e 100644 (file)
--- a/procln.c
+++ b/procln.c
@@ -1,7 +1,7 @@
 //
 // RMAC - Reboot's Macro Assembler for all Atari computers
 // PROCLN.C - Line Processing
-// Copyright (C) 199x Landon Dyer, 2011-2017 Reboot and Friends
+// Copyright (C) 199x Landon Dyer, 2011-2018 Reboot and Friends
 // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
 // Source utilised with the kind permission of Landon Dyer
 //
@@ -39,7 +39,7 @@ static IFENT ifent0;                  // Root ifent
 IFENT * f_ifent;                               // Freelist of ifents
 int disabled;                                  // Assembly conditionally disabled
 int just_bss;                                  // 1, ds.b in microprocessor mode
-VALUE pcloc;                                   // Value of "PC" at beginning of line
+uint32_t pcloc;                                        // Value of "PC" at beginning of line
 SYM * lab_sym;                                 // Label on line (or NULL)
 
 const char extra_stuff[] = "extra (unexpected) text found after addressing mode";
@@ -95,7 +95,7 @@ LONG amsktab[0124] = {
        0L,                             // 0115
        0L,                             // 0116
        0L,                             // 0117
-    M_CACHE40,                                                                     // 0120
+       M_CACHE40,              // 0120
        M_CREG,                 // 0121
        M_FREG,                 // 0122
        M_FPSCR                 // 0123
@@ -131,7 +131,7 @@ void Assemble(void)
        char * equate;                          // Symbol (or NULL)
        int labtyp = 0;                         // Label type (':', DCOLON)
        int equtyp = 0;                         // Equ type ('=', DEQUALS)
-       VALUE eval;                                     // Expression value
+       uint64_t eval;                          // Expression value
        WORD eattr;                                     // Expression attributes
        SYM * esym;                                     // External symbol involved in expr.
        WORD siz = 0;                           // Size suffix to mnem/diretve/macro
@@ -177,7 +177,7 @@ DEBUG { printf("Assemble: Found TKEOF flag...\n"); }
        lab_sym = NULL;                                                 // No (exported) label
        equate = NULL;                                                  // No equate
        tk = tok;                                                               // Save first token in line
-       pcloc = (VALUE)sloc;                                    // Set beginning-of-line PC
+       pcloc = (uint32_t)sloc;                                 // Set beginning-of-line PC
 
 loop1:                                                                         // Internal line processing loop
 
@@ -229,7 +229,7 @@ as68label:
        if (*tok == EOL)
                goto normal;
 
-       // Next token MUST be a symbol
+       // First token MUST be a symbol (if we get here, tok didn't advance)
        if (*tok++ != SYMBOL)
        {
                error("syntax error; expected symbol");
@@ -269,18 +269,17 @@ as68label:
        // Check for ".b" ".w" ".l" after directive, macro or mnemonic.
        siz = SIZN;
 
-    switch (*tok)
-    {
-    case DOTW: siz = SIZW, tok++; break;
-    case DOTL: siz = SIZL, tok++; break;
-    case DOTB: siz = SIZB, tok++; break;
-    case DOTD: siz = SIZD, tok++; break;
-    case DOTP: siz = SIZP, tok++; break;
-    case DOTQ: siz = SIZQ, tok++; break;
-    case DOTS: siz = SIZS, tok++; break;
-    case DOTX: siz = SIZX, tok++; break;
-    }
-
+       switch (*tok)
+       {
+       case DOTW: siz = SIZW, tok++; break;
+       case DOTL: siz = SIZL, tok++; break;
+       case DOTB: siz = SIZB, tok++; break;
+       case DOTD: siz = SIZD, tok++; break;
+       case DOTP: siz = SIZP, tok++; break;
+       case DOTQ: siz = SIZQ, tok++; break;
+       case DOTS: siz = SIZS, tok++; break;
+       case DOTX: siz = SIZX, tok++; break;
+       }
 
        // Do special directives (500..999) (These must be handled in "real time")
        if (state >= 500 && state < 1000)
@@ -399,13 +398,11 @@ normal:
                {
                        if ((equtyp == EQUREG) && (sy->sattre & UNDEF_EQUR))
                        {
-//REALLY?                              sy->sattre |= ~UNDEF_EQUR;
                                sy->sattre &= ~UNDEF_EQUR;
                                sy->svalue = 0;
                        }
                        else if ((equtyp == CCDEF) && (sy->sattre & UNDEF_CC))
                        {
-//REALLY?                              sy->sattre |= ~UNDEF_CC;
                                sy->sattre &= ~UNDEF_CC;
                                sy->svalue = 0;
                        }
@@ -467,9 +464,9 @@ When checking to see if it's already been equated, issue a warning.
                                        tok += 3;
 
                                        // Anything other than a 0 or a 1 will result in "No Bank"
-                                       if (*tok == 0)
+                                       if (*(uint64_t *)tok == 0)
                                                registerbank = BANK_0;
-                                       else if (*tok == 1)
+                                       else if (*(uint64_t *)tok == 1)
                                                registerbank = BANK_1;
                                }
 
@@ -486,8 +483,6 @@ When checking to see if it's already been equated, issue a warning.
                                sy->sattre |= regbank;          // Store register bank
 #endif
                                eattr = ABS | DEFINED | GLOBAL;
-// & what does this $80000080 constant mean???
-//                             eval = 0x80000080 + (riscreg) + (registerbank << 8);
                                eval = riscreg;
                                tok++;
                        }
@@ -521,7 +516,7 @@ When checking to see if it's already been equated, issue a warning.
                        if (reglist(&rmask) < 0)
                                goto loop;
 
-                       eval = (VALUE)rmask;
+                       eval = (uint32_t)rmask;
                        eattr = ABS | DEFINED;
                }
                else if (equtyp == CCDEF)
@@ -549,7 +544,7 @@ When checking to see if it's already been equated, issue a warning.
                        else if (expr(exprbuf, &eval, &eattr, &esym) != OK)
                                goto loop;
                }
-               //equ a equr
+               // equ an equr
                else if (*tok == SYMBOL)
                {
                        sy2 = lookup(string[tok[1]], LABEL, j);
@@ -559,7 +554,6 @@ When checking to see if it's already been equated, issue a warning.
                                sy->stype = sy2->stype;
                                sy->sattr = sy2->sattr;
                                sy->sattre = sy2->sattre;
-//ICK                          sy->svalue = (sy2->svalue & 0xFFFFF0FF);
                                sy->svalue = sy2->svalue;
                                goto loop;
                        }
@@ -579,7 +573,7 @@ When checking to see if it's already been equated, issue a warning.
                sy->svalue = eval;
 
                if (list_flag)                                  // Put value in listing
-                       listvalue(eval);
+                       listvalue((uint32_t)eval);
 
                at_eol();                                               // Must be at EOL now
                goto loop;
@@ -755,7 +749,6 @@ int HandleLabel(char * label, int labelType)
        {
                symbol = NewSymbol(label, LABEL, environment);
                symbol->sattr = 0;
-//             symbol->sattre = RISCSYM;
                symbol->sattre = 0;
        }
        else if (symbol->sattr & DEFINED)
@@ -794,4 +787,3 @@ int HandleLabel(char * label, int labelType)
        return 0;
 }
 
-