//
-// RMAC - Reboot's Macro Assembler for the Atari Jaguar Console System
+// RMAC - Renamed Macro Assembler for all Atari computers
// AMODE.H - Addressing Modes
-// Copyright (C) 199x Landon Dyer, 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
//
#define DREG 000 // Dn
#define AREG 010 // An
#define AIND 020 // (An)
+#define DINDW 0112 // (Dn.w)
+#define DINDL 0113 // (Dn.l)
#define APOSTINC 030 // (An)+
#define APREDEC 040 // -(An)
#define ADISP 050 // (d16,An) d16(An)
#define AM_CCR 0110
#define AM_NONE 0111 // Nothing
#define CACHES 0120 // Instruction/Data/Both Caches (IC/DC/BC)
-#define CREG 0121 // Control registers (see CREGlut in mach.h)
+#define CREG 0121 // Control registers (see CREGlut in mach.c)
#define FREG 0122 // FPU registers (fp0-fp7)
#define FPSCR 0123 // FPU system control registers (fpiar, fpsr, fpcr)
#define M_CREG 0x00800000L // Control registers
#define M_FREG 0x01000000L // FPn
#define M_FPSCR 0x02000000L // fpiar, fpsr, fpcr
+#define M_CACHE40 0x04000000L // 68040 cache registers (IC40,DC40,BC40)
// Addr mode categories
#define C_ALL 0x00000FFFL
#define C_CTRL 0x000007E4L
#define C_ALT 0x000001FFL
#define C_ALL030 0x0003FFFFL
+#define C_ALT030 0x000071FDL
+#define C_FPU030 0x0003FFECL /* (An), #<data>, (An)+, (d16,An), (d16,PC), (d8, An, Xn), (d8, PC, Xn), (bd, An, Xn), An(bd, PC, Xn), ([bd, An, Xn], od), An([bd, PC, Xn], od), ([bd, An], Xn, od), An([bd, PC], Xn, od) */
#define C_CTRL030 0x0003F7E4L
#define C_DATA030 0x0003FFFDL
#define C_MOVES (M_AIND | M_APOSTINC | M_APREDEC | M_ADISP | M_AINDEXED | M_ABSW | M_ABSL | M_ABASE | M_MEMPRE | M_MEMPOST)
+#define C_BF1 (M_DREG | M_AIND | M_AINDEXED | M_ADISP | M_ABSW | M_ABSL | M_ABASE | M_MEMPOST | M_MEMPRE)
+#define C_BF2 (C_BF1 | M_PCDISP | M_PCINDEXED | M_PCBASE | M_PCMPOST | M_PCMPRE)
+#define C_PMOVE (M_AIND | M_ADISP | M_AINDEXED | M_ABSW | M_ABSL | M_ABASE | M_MEMPRE | M_MEMPOST)
#define C_ALTDATA (C_DATA & C_ALT)
#define C_ALTMEM (C_MEM & C_ALT)
extern int am0, am1;
extern int a0reg, a1reg, a2reg;
extern TOKEN a0expr[], a1expr[];
-extern VALUE a0exval, a1exval;
+extern uint64_t a0exval, a1exval;
extern WORD a0exattr, a1exattr;
extern int a0ixreg, a1ixreg;
extern int a0ixsiz, a1ixsiz;
extern TOKEN a0oexpr[], a1oexpr[];
-extern VALUE a0oexval, a1oexval;
+extern uint64_t a0oexval, a1oexval;
extern WORD a0oexattr, a1oexattr;
extern SYM * a0esym, * a1esym;
-extern VALUE a0bexval, a1bexval;
+extern uint64_t a0bexval, a1bexval;
extern WORD a0bexattr, a1bexattr;
extern WORD a0bsize, a1bsize;
extern TOKEN a0bexpr[], a1bexpr[];
extern WORD mulmode;
extern int bfparam1;
extern int bfparam2;
-extern VALUE bf0exval;
+extern int bfval1;
+extern int bfval2;
+extern uint64_t bf0exval;
// mnattr:
#define CGSPECIAL 0x8000 // Special (don't parse addr modes)