*** empty log message ***
[fw/sdcc] / sim / ucsim / xa.src / xa.cc
index e189643ff1e2dec16d1ab2de0ed876b599856542..cf2811b9ecce2a02c05c559e6bc508c2c6cad439 100644 (file)
@@ -45,7 +45,6 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include "glob.h"
 #include "regsxa.h"
 
-
 /*
  * Base type of xa controllers
  */
@@ -63,8 +62,6 @@ cl_xa::init(void)
   ram= mem(MEM_XRAM);
   rom= mem(MEM_ROM);
 
-  wmem_direct = (TYPE_UWORD *) &mem_direct[0];
-
   /* set SCR to osc/4, native XA mode, flat 24 */
   set_scr(0);
   /* initialize SP to 100H */
@@ -79,6 +76,17 @@ cl_xa::init(void)
   return(0);
 }
 
+class cl_mem *
+cl_xa::mk_mem(enum mem_class type, char *class_name)
+{
+  class cl_mem *m= cl_uc::mk_mem(type, class_name);
+  if (type == MEM_SFR)
+    sfr= m;
+  if (type == MEM_IRAM)
+    iram= m;
+  return(m);
+}
+
 char *
 cl_xa::id_string(void)
 {
@@ -95,6 +103,8 @@ cl_xa::get_mem_size(enum mem_class type)
 {
   switch(type)
     {
+    case MEM_IRAM: return(0x2000);
+    case MEM_SFR: return(0x2000);
     case MEM_ROM: return(0x10000);
     case MEM_XRAM: return(0x10000);
     default: return(0);
@@ -570,6 +580,14 @@ cl_xa::disass(t_addr addr, char *sep)
               ((signed char)get_mem(MEM_ROM, addr+immed_offset+2) * 2) & 0xfffe );
     break;
 
+    case A_APLUSDPTR :
+      strcpy(parm_str, "A, [A+DPTR]");
+    break;
+
+    case A_APLUSPC :
+      strcpy(parm_str, "A, [A+PC]");
+    break;
+
     default:
       strcpy(parm_str, "???");
     break;
@@ -654,7 +672,7 @@ int cl_xa::exec_inst(void)
   code = (code1 << 8);
   i= 0;
   while ( ((code & disass_xa[i].mask) != disass_xa[i].code ||
-           ((disass_xa[i].mask & 0x00ff) != 0)) /* one byte op code */
+          (!disass_xa[i].is1byte)) /* not a one byte op code */
                     &&
          disass_xa[i].mnemonic != BAD_OPCODE)
     i++;