]> git.sur5r.net Git - cc65/blobdiff - src/ca65/instr.h
Finished implemenation of commands to delete macros. Added the new commands to
[cc65] / src / ca65 / instr.h
index 4fa99090db5c96fd4378ef0b71973dde362ed76c..7b36cfffbab6e5c87ff698fba87adaa71c683a8d 100644 (file)
@@ -1,15 +1,15 @@
 /*****************************************************************************/
 /*                                                                           */
-/*                                 instr.h                                  */
+/*                                 instr.h                                  */
 /*                                                                           */
 /*            Instruction encoding for the ca65 macroassembler              */
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998-2004 Ullrich von Bassewitz                                       */
-/*               Römerstrasse 52                                             */
-/*               D-70794 Filderstadt                                         */
-/* EMail:        uz@cc65.org                                                 */
+/* (C) 1998-2008, Ullrich von Bassewitz                                      */
+/*                Roemerstrasse 52                                           */
+/*                D-70794 Filderstadt                                        */
+/* EMail:         uz@cc65.org                                                */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
@@ -40,6 +40,7 @@
 
 /* common */
 #include "cpu.h"
+#include "strbuf.h"
 
 
 
  * When assembling for the 6502 or 65C02, all addressing modes that are not
  * available on these CPUs are removed before doing any checks.
  */
-#define AM65_IMPLICIT                  0x00000003UL
-#define AM65_ACCU                      0x00000002UL
+#define AM65_IMPLICIT                  0x00000003UL
+#define AM65_ACCU              0x00000002UL
 #define AM65_DIR               0x00000004UL
 #define AM65_ABS               0x00000008UL
 #define AM65_ABS_LONG                  0x00000010UL
 #define AM65_DIR_X             0x00000020UL
 #define AM65_ABS_X             0x00000040UL
 #define AM65_ABS_LONG_X                0x00000080UL
-#define AM65_DIR_Y                     0x00000100UL
-#define AM65_ABS_Y                     0x00000200UL
-#define AM65_DIR_IND                   0x00000400UL
-#define AM65_ABS_IND                   0x00000800UL
-#define AM65_DIR_IND_LONG              0x00001000UL
-#define AM65_DIR_IND_Y                 0x00002000UL
-#define AM65_DIR_IND_LONG_Y            0x00004000UL
-#define AM65_DIR_X_IND                 0x00008000UL
-#define AM65_ABS_X_IND                 0x00010000UL
-#define AM65_REL                       0x00020000UL
-#define AM65_REL_LONG                  0x00040000UL
-#define AM65_STACK_REL                 0x00080000UL
-#define AM65_STACK_REL_IND_Y           0x00100000UL
+#define AM65_DIR_Y              0x00000100UL
+#define AM65_ABS_Y              0x00000200UL
+#define AM65_DIR_IND            0x00000400UL
+#define AM65_ABS_IND           0x00000800UL
+#define AM65_DIR_IND_LONG       0x00001000UL
+#define AM65_DIR_IND_Y          0x00002000UL
+#define AM65_DIR_IND_LONG_Y     0x00004000UL
+#define AM65_DIR_X_IND          0x00008000UL
+#define AM65_ABS_X_IND          0x00010000UL
+#define AM65_REL                0x00020000UL
+#define AM65_REL_LONG           0x00040000UL
+#define AM65_STACK_REL          0x00080000UL
+#define AM65_STACK_REL_IND_Y    0x00100000UL
 #define AM65_IMM_ACCU          0x00200000UL
 #define AM65_IMM_INDEX         0x00400000UL
-#define AM65_IMM_IMPLICIT              0x00800000UL
-#define AM65_IMM                       (AM65_IMM_ACCU | AM65_IMM_INDEX | AM65_IMM_IMPLICIT)
-#define AM65_BLOCKMOVE                 0x01000000UL
+#define AM65_IMM_IMPLICIT      0x00800000UL
+#define AM65_IMM                (AM65_IMM_ACCU | AM65_IMM_INDEX | AM65_IMM_IMPLICIT)
+#define AM65_BLOCKMOVE          0x01000000UL
+#define AM65_BLOCKXFER          0x02000000UL
 
 /* Bitmask for all ZP operations that have correspondent ABS ops */
 #define AM65_SET_ZP    (AM65_DIR | AM65_DIR_X | AM65_DIR_Y | AM65_DIR_IND | AM65_DIR_X_IND)
@@ -93,7 +95,7 @@
 /* Bit numbers and count */
 #define AM65I_IMM_ACCU         21
 #define AM65I_IMM_INDEX                22
-#define AM65I_COUNT            25
+#define AM65I_COUNT            26
 
 
 
 typedef struct InsDesc InsDesc;
 struct InsDesc {
     char                       Mnemonic[5];
-    unsigned long              AddrMode;               /* Valid adressing modes */
-    unsigned char      BaseCode;               /* Base opcode */
-    unsigned char      ExtCode;                /* Number of ext code table */
+    unsigned long              AddrMode;               /* Valid adressing modes */
+    unsigned char      BaseCode;               /* Base opcode */
+    unsigned char      ExtCode;                /* Number of ext code table */
     void                       (*Emit) (const InsDesc*);/* Handler function */
 };
 
 /* An instruction table */
 typedef struct InsTable InsTable;
 struct InsTable {
-    unsigned                   Count;                  /* Number of intstructions */
+    unsigned                   Count;                  /* Number of intstructions */
     InsDesc                    Ins[1];                 /* Varying length */
 };
 
@@ -151,7 +153,7 @@ void SetCPU (cpu_t NewCPU);
 cpu_t GetCPU (void);
 /* Return the current CPU */
 
-int FindInstruction (const char* Ident);
+int FindInstruction (const StrBuf* Ident);
 /* Check if Ident is a valid mnemonic. If so, return the index in the
  * instruction table. If not, return -1.
  */
@@ -168,3 +170,4 @@ void HandleInstruction (unsigned Index);
 
 
 
+