X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=procln.c;h=9c207bfdefe8481ca71195ad1ad7c3aaaf7c3471;hp=d7bf53c577044a5b5ee83659cbe6b8c697ef2712;hb=4205233c8397c581b4d27ab36ab81ec896ef3dd0;hpb=30a208654896284b50e7b362e97d3e63ec717b96 diff --git a/procln.c b/procln.c index d7bf53c..9c207bf 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-2018 Reboot and Friends +// Copyright (C) 199x Landon Dyer, 2011-2020 Reboot and Friends // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986 // Source utilised with the kind permission of Landon Dyer // @@ -53,6 +53,7 @@ int disabled; // Assembly conditionally disabled int just_bss; // 1, ds.b in microprocessor mode uint32_t pcloc; // Value of "PC" at beginning of line SYM * lab_sym; // Label on line (or NULL) +char * label_defined; // The name of the last label defined in current line (if any) const char extra_stuff[] = "extra (unexpected) text found after addressing mode"; const char comma_error[] = "missing comma"; @@ -186,6 +187,7 @@ DEBUG { printf("Assemble: Found TKEOF flag...\n"); } state = -3; // No keyword (just EOL) label = NULL; // No label + label_defined = NULL; // No label defined yet lab_sym = NULL; // No (exported) label equate = NULL; // No equate tk = tok; // Save first token in line @@ -233,6 +235,8 @@ as68label: if (HandleLabel(label, labtyp) != 0) goto loop; + label_defined = label; + goto as68label; } } @@ -363,6 +367,8 @@ as68label: { if (HandleLabel(label, labtyp) != 0) goto loop; + + label_defined = label; } HandleRept(); @@ -587,7 +593,7 @@ When checking to see if it's already been equated, issue a warning. if (list_flag) // Put value in listing listvalue((uint32_t)eval); - at_eol(); // Must be at EOL now + ErrorIfNotAtEOL(); // Must be at EOL now goto loop; } @@ -597,6 +603,8 @@ When checking to see if it's already been equated, issue a warning. // Non-zero == error occurred if (HandleLabel(label, labtyp) != 0) goto loop; + + label_defined = label; } // Punt on EOL @@ -854,9 +862,11 @@ When checking to see if it's already been equated, issue a warning. // Keep a backup of chptr (used for optimisations during codegen) chptr_opcode = chptr; - while ((m->mnattr & siz) && (amsk0 & m->mn0) == 0 || (amsk1 & m->mn1) == 0) + while (!(m->mnattr & siz) || (amsk0 & m->mn0) == 0 || (amsk1 & m->mn1) == 0) m = &machtab[m->mncont]; + DEBUG { printf(" 68K: mninst=$%X, siz=$%X, mnattr=$%X, amsk0=$%X, mn0=$%X, amsk1=$%X, mn1=$%X\n", m->mninst, siz, m->mnattr, amsk0, m->mn0, amsk1, m->mn1); } + (*m->mnfunc)(m->mninst, siz); goto loop; }