X-Git-Url: http://shamusworld.gotdns.org/cgi-bin/gitweb.cgi?p=rmac;a=blobdiff_plain;f=amode.c;h=e5468fd55b4f22420580fb614cb7b914e860eccc;hp=f56fe9c1f16c250f34c94b6e20f49c667db40e2d;hb=HEAD;hpb=81c752326a21408c84f98a18aed065491a88b779 diff --git a/amode.c b/amode.c index f56fe9c..6fd3538 100644 --- a/amode.c +++ b/amode.c @@ -1,7 +1,7 @@ // -// RMAC - Reboot's Macro Assembler for all Atari computers +// RMAC - Renamed Macro Assembler for all Atari computers // AMODE.C - Addressing Modes -// Copyright (C) 199x Landon Dyer, 2011-2017 Reboot and Friends +// Copyright (C) 199x Landon Dyer, 2011-2021 Reboot and Friends // RMAC derived from MADMAC v1.07 Written by Landon Dyer, 1986 // Source utilised with the kind permission of Landon Dyer // @@ -15,8 +15,8 @@ #include "sect.h" #include "token.h" -#define DEF_KW -#include "kwtab.h" +#define DEF_REG68 +#include "68kregs.h" #define DEF_MN #include "mntab.h" @@ -31,9 +31,6 @@ uint64_t a0exval; // Expression's value WORD a0exattr; // Expression's attribute int a0ixreg; // Index register int a0ixsiz; // Index register size (and scale) -TOKEN a0oexpr[EXPRSIZE]; // Outer displacement expression -uint64_t a0oexval; // Outer displacement value -WORD a0oexattr; // Outer displacement attribute SYM * a0esym; // External symbol involved in expr TOKEN a0bexpr[EXPRSIZE]; // Base displacement expression uint64_t a0bexval; // Base displacement value @@ -49,9 +46,6 @@ uint64_t a1exval; // Expression's value WORD a1exattr; // Expression's attribute int a1ixreg; // Index register int a1ixsiz; // Index register size (and scale) -TOKEN a1oexpr[EXPRSIZE]; // Outer displacement expression -uint64_t a1oexval; // Outer displacement value -WORD a1oexattr; // Outer displacement attribute SYM * a1esym; // External symbol involved in expr TOKEN a1bexpr[EXPRSIZE]; // Base displacement expression uint64_t a1bexval; // Base displacement value @@ -83,8 +77,8 @@ int amode(int acount) // Initialize global return values nmodes = a0reg = a1reg = 0; am0 = am1 = AM_NONE; - a0expr[0] = a0oexpr[0] = a1expr[0] = a1oexpr[0] = ENDEXPR; - a0exattr = a0oexattr = a1exattr = a1oexattr = 0; + a0expr[0] = a1expr[0] = ENDEXPR; + a0exattr = a1exattr = 0; a0esym = a1esym = NULL; a0bexpr[0] = a1bexpr[0] = ENDEXPR; a0bexval = a1bexval = 0; @@ -108,9 +102,6 @@ int amode(int acount) #define AnEXPR a0expr #define AnEXVAL a0exval #define AnEXATTR a0exattr - #define AnOEXPR a0oexpr - #define AnOEXVAL a0oexval - #define AnOEXATTR a0oexattr #define AnESYM a0esym #define AMn_IX0 am0_ix0 #define AMn_IXN am0_ixn @@ -150,9 +141,6 @@ int amode(int acount) #define AnEXPR a1expr #define AnEXVAL a1exval #define AnEXATTR a1exattr - #define AnOEXPR a1oexpr - #define AnOEXVAL a1oexval - #define AnOEXATTR a1oexattr #define AnESYM a1esym #define AMn_IX0 am1_ix0 #define AMn_IXN am1_ixn @@ -183,9 +171,9 @@ int amode(int acount) // TODO: protect this from combinations like Dx:FPx etc :) tok++; //eat the colon - if ((*tok >= KW_D0) && (*tok <= KW_D7)) + if ((*tok >= REG68_D0) && (*tok <= REG68_D7)) a2reg = (*tok++) & 7; - else if ((*tok >= KW_FP0) && (*tok <= KW_FP7)) + else if ((*tok >= REG68_FP0) && (*tok <= REG68_FP7)) a2reg = (*tok++) & 7; else return error("a data or FPU register must follow a :"); @@ -223,7 +211,7 @@ int reglist(WORD * a_rmask) for(;;) { - if ((*tok >= KW_D0) && (*tok <= KW_A7)) + if ((*tok >= REG68_D0) && (*tok <= REG68_A7)) r = *tok++ & 0x0F; else break; @@ -232,7 +220,7 @@ int reglist(WORD * a_rmask) { tok++; - if ((*tok >= KW_D0) && (*tok <= KW_A7)) + if ((*tok >= REG68_D0) && (*tok <= REG68_A7)) cnt = *tok++ & 0x0F; else return error("register list syntax"); @@ -275,7 +263,7 @@ int fpu_reglist_left(WORD * a_rmask) for(;;) { - if ((*tok >= KW_FP0) && (*tok <= KW_FP7)) + if ((*tok >= REG68_FP0) && (*tok <= REG68_FP7)) r = *tok++ & 0x07; else break; @@ -284,7 +272,7 @@ int fpu_reglist_left(WORD * a_rmask) { tok++; - if ((*tok >= KW_FP0) && (*tok <= KW_FP7)) + if ((*tok >= REG68_FP0) && (*tok <= REG68_FP7)) cnt = *tok++ & 0x07; else return error("register list syntax"); @@ -326,7 +314,7 @@ int fpu_reglist_right(WORD * a_rmask) for(;;) { - if ((*tok >= KW_FP0) && (*tok <= KW_FP7)) + if ((*tok >= REG68_FP0) && (*tok <= REG68_FP7)) r = *tok++ & 0x07; else break; @@ -335,7 +323,7 @@ int fpu_reglist_right(WORD * a_rmask) { tok++; - if ((*tok >= KW_FP0) && (*tok <= KW_FP7)) + if ((*tok >= REG68_FP0) && (*tok <= REG68_FP7)) cnt = *tok++ & 0x07; else return error("register list syntax"); @@ -397,7 +385,7 @@ int Check030Bitfield(void) // Do=0, offset=immediate - shift it to place bfparam1 = (0 << 11); } - else if ((*tok >= KW_D0) && (*tok <= KW_D7)) + else if ((*tok >= REG68_D0) && (*tok <= REG68_D7)) { // Do=1, offset=data register - shift it to place bfparam1 = (1 << 11); @@ -440,7 +428,7 @@ int Check030Bitfield(void) // Do=0, offset=immediate - shift it to place bfparam2 = (0 << 5); } - else if ((*tok >= KW_D0) && (*tok <= KW_D7)) + else if ((*tok >= REG68_D0) && (*tok <= REG68_D7)) { // Do=1, offset=data register - shift it to place bfval2 = (*(int *)tok - 128);