X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=procln.c;h=addff0462d8247e6cdc02632f88939e75f531b3e;hp=3a4aac8316d44c570373b675c6994cddfff00e76;hb=9153334781cd2e23750f4dc002e847606c07a1f0;hpb=cfd001aea60f54e49d9beae0f941c513f45c202b diff --git a/procln.c b/procln.c index 3a4aac8..addff04 100644 --- 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 // @@ -131,7 +131,7 @@ void Assemble(void) char * equate; // Symbol (or NULL) int labtyp = 0; // Label type (':', DCOLON) int equtyp = 0; // Equ type ('=', DEQUALS) - uint32_t 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 @@ -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"); @@ -281,7 +281,6 @@ as68label: 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++; } @@ -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)