// PROCLN.C - Line Processing
// Copyright (C) 199x Landon Dyer, 2011 Reboot and Friends
// RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986
-// Source Utilised with the Kind Permission of Landon Dyer
+// Source utilised with the kind permission of Landon Dyer
//
#include "procln.h"
static int disabled; // Assembly conditionally disabled
int just_bss; // 1, ds.b in microprocessor mode
VALUE pcloc; // Value of "PC" at beginning of line
-IFENT * ifent; // Current ifent
SYM * lab_sym; // Label on line (or NULL)
const char extra_stuff[] = "extra (unexpected) text found after addressing mode";
// Get another line of tokens
if (TokenizeLine() == TKEOF)
{
-if (verb_flag) printf("Assemble: Found TKEOF flag...\n");
+if (debug) printf("Assemble: Found TKEOF flag...\n");
if (list_flag && listflag) // Flush last line of source
listeol();
switch (state)
{
case MN_IF:
- d_if ();
+ d_if();
goto loop;
case MN_ELSE:
d_else();
goto loop;
case MN_ENDIF:
- d_endif ();
+ d_endif();
goto loop;
case MN_IIF: // .iif --- immediate if
if (disabled || expr(exprbuf, &eval, &eattr, &esym) != OK)
// o everything else
if (equtyp == EQUREG)
{
-//Linko's request to issue a warning on labels that equated to the same register
-//would go here. Not sure how to implement it though. :-/
+//Linko's request to issue a warning on labels that equated to the same
+//register would go here. Not sure how to implement it though. :-/
/*
Maybe like this way:
have an array of bools with 64 entries. Whenever a register is equated, set the
-corresponding register bool to true. Whenever it's undef'ed, set it to false. When
-checking to see if it's already been equated, issue a warning.
+corresponding register bool to true. Whenever it's undef'ed, set it to false.
+When checking to see if it's already been equated, issue a warning.
*/
// Check that we are in a RISC section
if (!rgpu && !rdsp)
goto loop;
}
- if (sloc & 1) // Automatic .even
+ if (sloc & 1) // Automatic .even
auto_even();
- if (challoc - ch_size < 18) // Make sure have space in current chunk
+ if (challoc - ch_size < 18) // Make sure have space in current chunk
chcheck(0);
m = &machtab[state - 1000];
goto loop;
}
- if (amode(1) < 0) // Parse 0, 1 or 2 addr modes
+ if (amode(1) < 0) // Parse 0, 1 or 2 addr modes
goto loop;
if (*tok != EOL)
goto loop;
}
+ // Keep a backup of chptr (used for optimisations during codegen)
+ chptr_opcode = chptr;
+
for(;;)
{
if ((m->mnattr & siz) && (amsk0 & m->mn0) != 0 && (amsk1 & m->mn1) != 0)