*** empty log message ***
[fw/sdcc] / sim / ucsim / xa.src / xa.cc
index b672ce8d501137f83be9d53b1d9397dd8bc60ac7..9e65740fa816b1a85b3959a7c45b8a6f03a6fa91 100644 (file)
@@ -1,12 +1,12 @@
 /*
  * Simulator of microcontrollers (xa.cc)
  *
- * Copyright (C) 1999,99 Drotos Daniel, Talker Bt.
+ * Copyright (C) 1999,2002 Drotos Daniel, Talker Bt.
  *
- * Written by Karl Bongers karl@turbobit.com
- * 
  * To contact author send email to drdani@mazsola.iit.uni-miskolc.hu
- *
+ * Other contributors include:
+ *   Karl Bongers karl@turbobit.com,
+ *   Johan Knol 
  */
 
 /* This file is part of microcontroller simulator: ucsim.
@@ -334,7 +334,7 @@ cl_xa::disass(t_addr addr, char *sep)
       ++immed_offset;
     break;
     case REG_DATA16 :
-      sprintf(parm_str, "%s,#%04x",
+      sprintf(parm_str, "%s,#0x%04x",
               reg_strs[((code >> 4) & 0xf)],
               (short)((get_mem(MEM_ROM, addr+immed_offset+1)) |
                      (get_mem(MEM_ROM, addr+immed_offset)<<8)) );
@@ -489,6 +489,39 @@ cl_xa::disass(t_addr addr, char *sep)
       strcpy(parm_str, "RLIST");
     break;
 
+    case REG_DIRECT_REL8 :
+      sprintf(parm_str, "%s,0x%02x,0x%02x",
+              reg_strs[((code >> 4) & 0xf)],
+              ((code & 0x7) << 8) + get_mem(MEM_ROM, addr+immed_offset),
+              (get_mem(MEM_ROM, addr+immed_offset+1) * 2) & 0xfffe );
+    break;
+    case REG_DATA8_REL8 :
+      sprintf(parm_str, "%s,#0x%04x,0x%02x",
+              reg_strs[((code >> 4) & 0xf)],
+              get_mem(MEM_ROM, addr+immed_offset),
+              (get_mem(MEM_ROM, addr+immed_offset+1) * 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),
+              (get_mem(MEM_ROM, addr+immed_offset+2) * 2) & 0xfffe );
+    break;
+    case IREG_DATA8_REL8 :
+      sprintf(parm_str, "[%s],#0x%04x,0x%02x",
+              reg_strs[((code >> 4) & 0x7)],
+              get_mem(MEM_ROM, addr+immed_offset),
+              (get_mem(MEM_ROM, addr+immed_offset+1) * 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),
+              (get_mem(MEM_ROM, addr+immed_offset+2) * 2) & 0xfffe );
+    break;
+
     default:
       strcpy(parm_str, "???");
     break;
@@ -669,6 +702,8 @@ cl_xa::exec_inst(void)
     return inst_ANL(code, operands);
     case ORL:
     return inst_ORL(code, operands);
+    case BEQ:
+    return inst_BEQ(code, operands);
     case BR:
     return inst_BR(code, operands);
     case JMP: