]> Shamusworld >> Repos - rmac/blobdiff - amode.c
ELF support for RMAC.
[rmac] / amode.c
diff --git a/amode.c b/amode.c
index 2c89911b3c87fc643f0bf5d7f65b97fdcd10316c..f0734ea5916dc8f6c86007954062fd162372b1e6 100644 (file)
--- a/amode.c
+++ b/amode.c
@@ -1,9 +1,9 @@
 //
 // RMAC - Reboot's Macro Assembler for the Atari Jaguar Console System
 // AMODE.C - Addressing Modes
-// Copyright (C) 199x Landon Dyer, 2011 Reboot and Friends
+// Copyright (C) 199x Landon Dyer, 2017 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 "amode.h"
 #include "mntab.h"
 
 // Address-mode information
-int nmodes;                                                 // Number of addr'ing modes found
-int am0;                                                    // Addressing mode
-int a0reg;                                                  // Register
-TOKEN a0expr[EXPRSIZE];                                     // Expression
-VALUE 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
-VALUE a0oexval;                                             // Outer displacement value
-WORD a0oexattr;                                             // Outer displacement attribute
-SYM * a0esym;                                               // External symbol involved in expr
-
-int am1;                                                    // Addressing mode
-int a1reg;                                                  // Register
-TOKEN a1expr[EXPRSIZE];                                     // Expression
-VALUE 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
-VALUE a1oexval;                                             // Outer displacement value
-WORD a1oexattr;                                             // Outer displacement attribute
-SYM * a1esym;                                               // External symbol involved in expr
+int nmodes;                                    // Number of addr'ing modes found
+int am0;                                       // Addressing mode
+int a0reg;                                     // Register
+TOKEN a0expr[EXPRSIZE];                // Expression
+VALUE 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
+VALUE a0oexval;                                // Outer displacement value
+WORD a0oexattr;                                // Outer displacement attribute
+SYM * a0esym;                          // External symbol involved in expr
+
+int am1;                                       // Addressing mode
+int a1reg;                                     // Register
+TOKEN a1expr[EXPRSIZE];                // Expression
+VALUE 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
+VALUE a1oexval;                                // Outer displacement value
+WORD a1oexattr;                                // Outer displacement attribute
+SYM * a1esym;                          // External symbol involved in expr
 
 
 //
-// Parse Addressing Mode
+// Parse addressing mode
 //
 int amode(int acount)
 {
@@ -75,9 +75,10 @@ int amode(int acount)
        #define AnESYM    a0esym
        #define AMn_IX0   am0_ix0
        #define AMn_IXN   am0_ixn
+       #define CHK_FOR_DISPn CheckForDisp0
        #include "parmode.h"
 
-       // If caller wants only one mode, return just one (ignore comma); 
+       // If caller wants only one mode, return just one (ignore comma);
        // If there is no second addressing mode (no comma), then return just one anyway.
        nmodes = 1;
 
@@ -102,6 +103,7 @@ int amode(int acount)
        #define AnESYM    a1esym
        #define AMn_IX0   am1_ix0
        #define AMn_IXN   am1_ixn
+       #define CHK_FOR_DISPn CheckForDisp1
        #include "parmode.h"
 
        nmodes = 2;
@@ -117,7 +119,7 @@ int amode(int acount)
 
 
 //
-// Parse Register List
+// Parse register list
 //
 int reglist(WORD * a_rmask)
 {
@@ -144,7 +146,7 @@ int reglist(WORD * a_rmask)
 
                        if (*tok >= KW_D0 && *tok <= KW_A7)
                                cnt = *tok++ & 15;
-                       else 
+                       else
                                return error("register list syntax");
 
                        if (cnt < r)
@@ -152,7 +154,7 @@ int reglist(WORD * a_rmask)
 
                        cnt -= r;
                }
-               else 
+               else
                        cnt = 0;
 
                while (cnt-- >= 0)