X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=procln.c;h=4afd5388c092035de15310389b7bf7156dded649;hp=dd8980622be2eb42d4f4ebd7e3dd75ab3572c9f7;hb=052be802baa4836564801c780b1d432cfe17c576;hpb=a5aa8711ae41356bb9c4c853bc07d96efae0b5d6 diff --git a/procln.c b/procln.c index dd89806..4afd538 100644 --- a/procln.c +++ b/procln.c @@ -29,6 +29,12 @@ #define DECL_MR #include "risckw.h" +#define DEF_MP /* include 6502 keyword definitions */ +#define DECL_MP /* include 6502 keyword state machine tables */ +#include "6502.h" +extern int m6502; /* 1, assembler in .6502 mode */ +extern VOID m6502cg(); /* 6502 code generator */ +extern VOID m6502obj(int ofd); IFENT * ifent; // Current ifent static IFENT ifent0; // Root ifent @@ -566,6 +572,44 @@ When checking to see if it's already been equated, issue a warning. if (state == -3) goto loop; + /* + * If we're in 6502 mode and are still in need + * of a mnemonic, then search for valid 6502 mnemonic. + */ + if (m6502 && + (state < 0 || state >= 1000)) + { +#ifdef ST + state = kmatch(opname, mpbase, mpcheck, mptab, mpaccept); +#else + for (state = 0, p = opname; state >= 0;) + { + j = mpbase[state] + tolowertab[*p]; + if (mpcheck[j] != state) /* reject, character doesn't match */ + { + state = -1; /* no match */ + break; + } + + if (!*++p) + { /* must accept or reject at EOS */ + state = mpaccept[j]; /* (-1 on no terminal match) */ + break; + } + state = mptab[j]; + } +#endif + + /* + * Call 6502 code generator if we found a mnemonic + */ + if (state >= 2000) + { + m6502cg(state - 2000); + goto loop; + } + } + // If we are in GPU or DSP mode and still in need of a mnemonic then search // for one if ((rgpu || rdsp) && (state < 0 || state >= 1000))