new files of 0.5.2
[fw/sdcc] / sim / ucsim / xa.src / xa.cc
index 93b33cce74d5d80ed1ca19b2950538056614e290..da7ed0fc6d74b42a279bd22124bcf800f7e86fae 100644 (file)
@@ -472,12 +472,20 @@ cl_xa::disass(t_addr addr, char *sep)
     case NO_OPERANDS :  // for NOP
       strcpy(parm_str, "");
     break;
-    case C_BIT :
-      strcpy(parm_str, "C_BIT");
+    case CY_BIT :
+      sprintf(parm_str, "C,%s", 
+            get_bit_name(((code&0x0003)<<8) + get_mem(MEM_ROM, addr+2)));
+    break;
+    case BIT_CY :
+      sprintf(parm_str, "%s,C", 
+             get_bit_name(((code&0x0003)<<8) + get_mem(MEM_ROM, addr+2)));
     break;
     case REG_DATA4 :
       strcpy(parm_str, "REG_DATA4");
     break;
+    case REG_DATA5 :
+      strcpy(parm_str, "REG_DATA5");
+    break;
     case IREG_DATA4 :
       strcpy(parm_str, "IREG_DATA4");
     break;
@@ -518,8 +526,15 @@ cl_xa::disass(t_addr addr, char *sep)
              get_bit_name((code&0x0003)<<8) + get_mem(MEM_ROM, addr+2),
              ((signed char)get_mem(MEM_ROM, addr+3)*2+addr+len)&0xfffe);
     break;
+    case DATA4:
+      sprintf(parm_str, "#0x%02x", code&0x0f);
+      break;
     case ADDR24 :
-      strcpy(parm_str, "ADDR24");
+      sprintf(parm_str, "0x%06x", 
+            (get_mem(MEM_ROM, addr+3)<<16) + 
+            (get_mem(MEM_ROM, addr+1)<<8) + 
+            get_mem(MEM_ROM, addr+2));
+      break;
     break;
     case REG_REL8 :
       sprintf(parm_str, "%s,0x%04x",
@@ -532,7 +547,12 @@ cl_xa::disass(t_addr addr, char *sep)
                           get_mem(MEM_ROM, addr+2)),
              ((signed char)get_mem(MEM_ROM, addr+2)*2+addr+len)&0xfffe);
     break;
-
+    case REG_USP:
+      sprintf(parm_str, "REG_USP");
+    break;
+    case USP_REG:
+      sprintf(parm_str, "USP_REG");
+    break;
     case REL8 :
       sprintf(parm_str, "0x%04x",
              ((signed char)get_mem(MEM_ROM, addr+1)*2+addr+len)&0xfffe);
@@ -599,30 +619,30 @@ cl_xa::disass(t_addr addr, char *sep)
               ((signed char) get_mem(MEM_ROM, addr+immed_offset+1) * 2) & 0xfffe );
     break;
     case REG_DATA8_REL8 :
-      sprintf(parm_str, "%s,#0x%04x,0x%02x",
+      sprintf(parm_str, "%s,#0x%02x,0x%02x",
               reg_strs[((code >> 4) & 0xf)],
-              get_mem(MEM_ROM, addr+immed_offset),
-              ((signed char)get_mem(MEM_ROM, addr+immed_offset+1) * 2) & 0xfffe );
+              get_mem(MEM_ROM, addr+immed_offset+1),
+              ((signed char)get_mem(MEM_ROM, addr+immed_offset) * 2) & 0xfffe );
     break;
     case REG_DATA16_REL8 :
-      sprintf(parm_str, "%s,#0x%02x,0x%02x",
-              w_reg_strs[((code >> 4) & 0x7)*2],
-              get_mem(MEM_ROM, addr+immed_offset+1) +
-                 (get_mem(MEM_ROM, addr+immed_offset+0)<<8),
-              ((signed char)get_mem(MEM_ROM, addr+immed_offset+2) * 2) & 0xfffe );
+      sprintf(parm_str, "%s,#0x%04x,0x%02x",
+              w_reg_strs[(code >> 4) & 0xf],
+              get_mem(MEM_ROM, addr+immed_offset+2) +
+                 (get_mem(MEM_ROM, addr+immed_offset+1)<<8),
+              ((signed char)get_mem(MEM_ROM, addr+immed_offset) * 2) & 0xfffe );
     break;
     case IREG_DATA8_REL8 :
-      sprintf(parm_str, "[%s],#0x%04x,0x%02x",
+      sprintf(parm_str, "[%s],#0x%02x,0x%02x",
               reg_strs[((code >> 4) & 0x7)],
-              get_mem(MEM_ROM, addr+immed_offset),
-              ((signed char)get_mem(MEM_ROM, addr+immed_offset+1) * 2) & 0xfffe );
+              get_mem(MEM_ROM, addr+immed_offset+1),
+              ((signed char)get_mem(MEM_ROM, addr+immed_offset) * 2) & 0xfffe );
     break;
     case IREG_DATA16_REL8 :
-      sprintf(parm_str, "[%s],#0x%02x,0x%02x",
-              w_reg_strs[((code >> 4) & 0x7)*2],
-              get_mem(MEM_ROM, addr+immed_offset+1) +
-                 (get_mem(MEM_ROM, addr+immed_offset+0)<<8),
-              ((signed char)get_mem(MEM_ROM, addr+immed_offset+2) * 2) & 0xfffe );
+      sprintf(parm_str, "[%s],#0x%04x,0x%02x",
+              w_reg_strs[(code >> 4) & 0x7],
+              get_mem(MEM_ROM, addr+immed_offset+2) +
+               (get_mem(MEM_ROM, addr+immed_offset+1)<<8),
+              ((signed char)get_mem(MEM_ROM, addr+immed_offset) * 2) & 0xfffe );
     break;
 
     case A_APLUSDPTR :
@@ -633,6 +653,30 @@ cl_xa::disass(t_addr addr, char *sep)
       strcpy(parm_str, "A, [A+PC]");
     break;
 
+    case REG_REGOFF8 :
+      sprintf(parm_str, "%s,%s+0x%02x", 
+             w_reg_strs[(code >> 4) & 0x7],
+             w_reg_strs[code & 0x7],
+             get_mem(MEM_ROM, addr+immed_offset));
+      break;
+
+    case REG_REGOFF16 :
+      sprintf(parm_str, "%s,%s+0x%02x", 
+             w_reg_strs[(code >> 4) & 0x7],
+             w_reg_strs[code & 0x7],
+             get_mem(MEM_ROM, addr+immed_offset+1) +
+               (get_mem(MEM_ROM, addr+immed_offset+0)<<8));
+      break;
+
+    case A_PLUSDPTR :
+      strcpy(parm_str, "[A+DPTR]");
+      break;
+
+    case IIREG :
+      sprintf(parm_str, "[[%s]]",
+              w_reg_strs[(code & 0x7)]);
+      break;
+
     default:
       strcpy(parm_str, "???");
     break;