From 7b0c1bf49c52185dcf0fc02421dda5a781ce9409 Mon Sep 17 00:00:00 2001 From: kbongers Date: Sun, 3 Feb 2002 06:09:35 +0000 Subject: [PATCH] *** empty log message *** git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1894 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- sim/ucsim/xa.src/inst.cc | 37 ++++++++++++++++++++++++++++++++++++ sim/ucsim/xa.src/inst_gen.cc | 13 +++++++++---- sim/ucsim/xa.src/regsxa.h | 23 +++++++++++++++++++++- sim/ucsim/xa.src/xacl.h | 6 ++++++ 4 files changed, 74 insertions(+), 5 deletions(-) diff --git a/sim/ucsim/xa.src/inst.cc b/sim/ucsim/xa.src/inst.cc index f493dac7..ec737aa8 100644 --- a/sim/ucsim/xa.src/inst.cc +++ b/sim/ucsim/xa.src/inst.cc @@ -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; diff --git a/sim/ucsim/xa.src/inst_gen.cc b/sim/ucsim/xa.src/inst_gen.cc index 294a184c..50e3d647 100644 --- a/sim/ucsim/xa.src/inst_gen.cc +++ b/sim/ucsim/xa.src/inst_gen.cc @@ -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; diff --git a/sim/ucsim/xa.src/regsxa.h b/sim/ucsim/xa.src/regsxa.h index 21531598..c5924725 100644 --- a/sim/ucsim/xa.src/regsxa.h +++ b/sim/ucsim/xa.src/regsxa.h @@ -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) { \ diff --git a/sim/ucsim/xa.src/xacl.h b/sim/ucsim/xa.src/xacl.h index 66997b52..04d2120f 100644 --- a/sim/ucsim/xa.src/xacl.h +++ b/sim/ucsim/xa.src/xacl.h @@ -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); -- 2.30.2