*** empty log message ***
authorkbongers <kbongers@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 3 Feb 2002 06:09:35 +0000 (06:09 +0000)
committerkbongers <kbongers@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 3 Feb 2002 06:09:35 +0000 (06:09 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1894 4a8a32a2-be11-0410-ad9d-d568d2c75423

sim/ucsim/xa.src/inst.cc
sim/ucsim/xa.src/inst_gen.cc
sim/ucsim/xa.src/regsxa.h
sim/ucsim/xa.src/xacl.h

index f493dac7ca96bff7d971eea99815d6b7209eefda..ec737aa83bd2d38e10cd059eed8574e881502c4f 100644 (file)
@@ -35,6 +35,43 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include "xacl.h"
 #include "regsxa.h"
 
+
+void cl_xa::store1(t_addr addr, unsigned char val)
+{
+  if (addr < 0x2000) {
+    set_idata1(addr, val);
+  } else {
+    set_xdata1(addr, val);
+  }
+}
+
+void cl_xa::store2(t_addr addr, unsigned char val)
+{
+  if (addr < 0x2000) {
+    set_idata2(addr, val);
+  } else {
+    set_xdata2(addr, val);
+  }
+}
+
+unsigned char cl_xa::get1(t_addr addr)
+{
+  if (addr < 0x2000) {
+    return get_idata1(addr);
+  } else {
+    return get_xdata1(addr);
+  }
+}
+
+unsigned short cl_xa::get2(t_addr addr)
+{
+  if (addr < 0x2000) {
+    return get_idata2(addr);
+  } else {
+    return get_xdata2(addr);
+  }
+}
+
 int cl_xa::get_reg(int word_flag, unsigned int index)
 {
   int result;
index 294a184ce28855db3b456a1e16033b1cfb9473b8..50e3d647a9246945fcd582f67154804815bcca8d 100644 (file)
@@ -173,16 +173,21 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
     break;
 
     case REG_DATA8 :
+#if 0
+      {
+        unsigned char dat = fetch();
+        unsigned char res;
+        res = FUNC1( reg1(RI_F0), dat);
+        set_reg1( RI_F0, res );
+   printf("reg_data8 code=%x dat=%x, res=%x r=%x\n", code, dat, res, reg1( RI_F0) );
+      }
+#endif
       set_reg1( RI_F0, FUNC1( reg1(RI_F0), fetch()) );
     break;
 
     case REG_DATA16 :
       {
         unsigned short dat = fetch2();
-        //unsigned short res;
-        //res = FUNC2( reg2(RI_F0), dat);
-        //set_reg2( RI_F0, res );
-//printf("reg_data16 code=%x dat=%x, res=%x\n", code, dat, res);
         set_reg2( RI_F0, FUNC2( reg2(RI_F0), dat) );
       }
     break;
index 215315985c0b5196d32a67031fd30893a2096d20..c59247254edabeb1c980a8aee40f6848391c4dea 100644 (file)
@@ -55,6 +55,26 @@ struct t_regs
 #define get_byte_direct(addr) sfr->get((t_addr) (addr))
 #define get_word_direct(addr) (sfr->get((t_addr) (addr)) | (sfr->get((t_addr) (addr+1)) << 8) )
 
+/* store to idata(onchip) ram */
+#define set_idata2(addr, val) { iram->set((t_addr) (addr), (val) & 0xff); \
+                            iram->set((t_addr) (addr+1), ((val) >> 8) & 0xff); }
+#define set_idata1(addr, val) iram->set((t_addr) (addr), (val) )
+
+/* get from idata(onchip) ram */
+#define get_idata1(addr) iram->get((t_addr) (addr))
+#define get_idata2(addr) (iram->get((t_addr) (addr)) | (iram->get((t_addr) (addr+1)) << 8) )
+
+/* store to xdata(external) ram */
+#define set_xdata2(addr, val) { ram->set((t_addr) (addr), (val) & 0xff); \
+                            ram->set((t_addr) (addr+1), ((val) >> 8) & 0xff); }
+#define set_xdata1(addr, val) ram->set((t_addr) (addr), val)
+
+/* get from xdata(external) ram */
+#define get_xdata1(addr) ram->get((t_addr) (addr))
+#define get_xdata2(addr) (ram->get((t_addr) (addr)) | (ram->get((t_addr) (addr+1)) << 8) )
+
+#if 0
+  moved to inst.cc as functions
 /* store to ram */
 #define store2(addr, val) { ram->set((t_addr) (addr), (val) & 0xff); \
                             ram->set((t_addr) (addr+1), ((val) >> 8) & 0xff); }
@@ -63,6 +83,7 @@ struct t_regs
 /* get from ram */
 #define get1(addr) ram->get((t_addr) (addr))
 #define get2(addr) (ram->get((t_addr) (addr)) | (ram->get((t_addr) (addr+1)) << 8) )
+#endif
 
 /* get from code */
 #define getcode1(addr) rom->get((t_addr) (addr))
@@ -77,7 +98,7 @@ struct t_regs
 #define reg1(_index) (unsigned char)get_reg(0, (_index))
 
 #define set_reg1(_index, _value) { \
-  set_byte_direct((REGS_OFFSET+(_index<<1)), _value); \
+  set_byte_direct((REGS_OFFSET+(_index)), _value); \
 }
 
 #define set_reg2(_index, _value) { \
index 66997b5247493e3db7ee8c0dd6f921afcf704100..04d2120fc9445aaa70120cc6c23ffe6fdc8c7d68 100644 (file)
@@ -85,6 +85,12 @@ public:
 
   virtual int exec_inst(void);
   virtual int get_reg(int word_flag, unsigned int index);
+
+  virtual void store1(t_addr addr, unsigned char val);
+  virtual void store2(t_addr addr, unsigned char val);
+  virtual unsigned char get1(t_addr addr);
+  virtual unsigned short get2(t_addr addr);
+
   virtual bool get_bit(int bit);
   virtual void set_bit(int bit, int value);