#define DEF_KW
#include "kwtab.h"
-
+#define DEF_REG56
+#define DECL_REG56
+#include "56kregs.h"
+#define DEF_REG68
+#define DECL_REG68
+#include "68kregs.h"
+#define DEF_REGRISC
+#define DECL_REGRISC
+#include "riscregs.h"
TOKEN exprbuf[128]; // Expression buffer
SYM * symbolPtr[1000000]; // Symbol pointers table
switch (tok[0])
{
- case KW_X:
+ case REG56_X:
dsp_currentorg->memtype = ORG_X;
sectionToSwitch = M56001X;
break;
- case KW_Y:
+ case REG56_Y:
dsp_currentorg->memtype = ORG_Y;
sectionToSwitch = M56001Y;
break;
- case KW_P:
+ case REG56_P:
dsp_currentorg->memtype = ORG_P;
sectionToSwitch = M56001P;
break;
- case KW_L:
+ case REG56_L:
dsp_currentorg->memtype = ORG_L;
sectionToSwitch = M56001L;
break;
formatting = 1;
// "X" & "L" get tokenized now... :-/ Probably should look into preventing this kind of thing from happening (was added with DSP56K code)
- if ((tok[1] != SYMBOL) && (tok[1] != KW_L) && (tok[1] != KW_X))
+ // Note (ggn): This is now much less severe as it's localised for 56k only
+ if ((tok[1] != SYMBOL) && (tok[1] != REG56_L) && (tok[1] != REG56_X))
goto token_err;
- if (tok[1] == KW_L)
+ if (tok[1] == REG56_L)
{
wordlong = 1;
tok += 2;
}
- else if (tok[1] == KW_X)
+ else if (tok[1] == REG56_X)
{
outtype = 0;
tok += 2;
SaveSection();
SwitchSection(TEXT);
activecpu = CPU_68000;
+ regbase = reg68base; // Update register DFA tables
+ regtab = reg68tab;
+ regcheck = reg68check;
+ regaccept = reg68accept;
return 0;
}
//
int d_68881(void)
{
- //d_68000();
activefpu = FPU_68881;
+ regbase = reg68base; // Update register DFA tables
+ regtab = reg68tab;
+ regcheck = reg68check;
+ regaccept = reg68accept;
return 0;
}
//
int d_68882(void)
{
- //d_68000();
activefpu = FPU_68882;
+ regbase = reg68base; // Update register DFA tables
+ regtab = reg68tab;
+ regcheck = reg68check;
+ regaccept = reg68accept;
return 0;
}
if ((obj_format == LOD) || (obj_format == P56))
SwitchSection(M56001P);
+ regbase = reg56base; // Update register DFA tables
+ regtab = reg56tab;
+ regcheck = reg56check;
+ regaccept = reg56accept;
return 0;
}
rdsp = 0; // Unset DSP assembly
robjproc = 0; // Unset OP assembly
dsp56001 = 0; // Unset 56001 assembly
+
+ regbase = regriscbase; // Update register DFA tables
+ regtab = regrisctab;
+ regcheck = regrisccheck;
+ regaccept = regriscaccept;
return 0;
}
rgpu = 0; // Unset GPU assembly
robjproc = 0; // Unset OP assembly
dsp56001 = 0; // Unset 56001 assembly
+
+ regbase = regriscbase; // Update register DFA tables
+ regtab = regrisctab;
+ regcheck = regrisccheck;
+ regaccept = regriscaccept;
return 0;
}
eval += 2;
}
- else if (*tok >= KW_D0 && *tok <= KW_A7)
+ else if (*tok >= REG68_D0 && *tok <= REG68_A7)
{
if (reglist(&rlist) < 0)
return 0;
{
switch ((int)*tok)
{
- case KW_USP:
- case KW_SSP:
- case KW_PC:
+ case REG68_USP:
+ case REG68_SSP:
+ case REG68_PC:
eval += 2;
// FALLTHROUGH
- case KW_SR:
- case KW_CCR:
+ case REG68_SR:
+ case REG68_CCR:
eval += 2;
tok++;
break;
tok++;
}
- else if (*tok >= KW_D0 && *tok <= KW_A7)
+ else if (*tok >= REG68_D0 && *tok <= REG68_A7)
{
if (reglist(&rlist) < 0)
return 0;
{
switch ((int)*tok)
{
- case KW_USP:
- case KW_SSP:
- case KW_PC:
+ case REG68_USP:
+ case REG68_SSP:
+ case REG68_PC:
eval += 2;
// FALLTHROUGH
- case KW_SR:
- case KW_CCR:
+ case REG68_SR:
+ case REG68_CCR:
eval += 2;
tok++;
break;