Use 'ao-dbg' instead of 's51' to communicate with TeleMetrum
[fw/sdcc] / src / z80 / gen.h
index 8052526e70417e7308559a961ab5fc81c1539f70..2512bd65e2c517c8b85a867db349493e97440b5b 100644 (file)
    what you give them.   Help stamp out software-hoarding!  
 -------------------------------------------------------------------------*/
 
-#ifndef SDCCGEN51_H
-#define SDCCGEN51_H
+#ifndef Z80GEN_H
+#define Z80GEN_H
 
-enum {
+typedef enum
+  {
+    AOP_INVALID,
     /* Is a literal */
     AOP_LIT = 1,
     /* Is in a register */
-    AOP_REG, 
+    AOP_REG,
     /* Is in direct space */
-    AOP_DIR, 
+    AOP_DIR,
+    /* SFR space ($FF00 and above) */
+    AOP_SFR,
     /* Is on the stack */
-    AOP_STK ,
+    AOP_STK,
     /* Is an immediate value */
-    AOP_IMMD, 
+    AOP_IMMD,
     /* Is a string (?) */
     AOP_STR,
     /* Is in the carry register */
-    AOP_CRY, 
+    AOP_CRY,
     /* Is pointed to by IY */
     AOP_IY,
     /* Is pointed to by HL */
     AOP_HL,
     /* Is in A */
-    AOP_ACC };
+    AOP_ACC,
+    /* Is in H and L */
+    AOP_HLREG,
+    /* Simple literal. */
+    AOP_SIMPLELIT,
+    /* Is in the extended stack pointer (IY on the Z80) */
+    AOP_EXSTK,
+    /* Is referenced by a pointer in a register pair. */
+    AOP_PAIRPTR,
+    /* Read as 0, discard writes */
+    AOP_DUMMY
+  }
+AOP_TYPE;
 
 /* type asmop : a homogenised type for 
    all the different spaces an operand can be
    in */
-typedef struct asmop {
-    
-    short type ;  /* can have values
-                    AOP_LIT    -  operand is a literal value
-                    AOP_REG    -  is in registers
-                    AOP_DIR    -  direct just a name
-                    AOP_DPTR   -  dptr contains address of operand
-                    AOP_R0/R1  -  r0/r1 contains address of operand               
-                    AOP_STK    -  should be pushed on stack this
-                                  can happen only for the result
-                    AOP_IMMD   -  immediate value for eg. remateriazable 
-                    AOP_CRY    -  carry contains the value of this
-                    AOP_STR    -  array of strings
-                    AOP_ACC    -  result is in the acc:b pair
-                 */
-    short coff ;  /* current offset */
-    short size ;  /* total size */
-    unsigned code :1 ;         /* is in Code space */
-    unsigned paged:1 ;         /* in paged memory  */
-    unsigned freed:1 ;         /* already freed    */
-    union {
-       value *aop_lit ;       /* if literal */
-       regs  *aop_reg[4];     /* array of registers */
-       char  *aop_dir ;       /* if direct  */
-       char  *aop_immd;       /* if immediate others are implied */    
-       int    aop_stk ;       /* stack offset when AOP_STK */
-       char  *aop_str[4];     /* just a string array containing the location */
-    } aopu;
-} asmop;
+typedef struct asmop
+  {
+    AOP_TYPE type;
+    short coff;                 /* current offset */
+    short size;                 /* total size */
+    unsigned  code:1;               /* is in Code space */
+    unsigned  paged:1;              /* in paged memory  */
+    unsigned  freed:1;              /* already freed    */
+    unsigned  bcInUse:1;
+    unsigned  deInUse:1;
+    union
+      {
+        value *aop_lit;         /* if literal */
+        regs *aop_reg[4];       /* array of registers */
+        char *aop_dir;          /* if direct  */
+        char *aop_immd;         /* if immediate others are implied */
+        int aop_stk;            /* stack offset when AOP_STK */
+        const char *aop_str[4]; /* just a string array containing the location */
+        unsigned long aop_simplelit; /* Just the value. */
+        int aop_pairId;                /* The pair ID */
+      }
+    aopu;
+  }
+asmop;
 
 void genZ80Code (iCode *);
+void z80_emitDebuggerSymbol (char *);
 
 
 #endif