X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=sim%2Fucsim%2Fs51.src%2Fbit.cc;h=7b55a33ad170265c594abb6ce28576b29c91e050;hb=f27da39dbcab5678aca6d8462f1cc37a643f37e9;hp=4d7e44cb8aba4104155c1beefb0a9df4e072ac6d;hpb=0ac34444ce2ccdcaa5fe722e2420f96c46224039;p=fw%2Fsdcc diff --git a/sim/ucsim/s51.src/bit.cc b/sim/ucsim/s51.src/bit.cc index 4d7e44cb..7b55a33a 100644 --- a/sim/ucsim/s51.src/bit.cc +++ b/sim/ucsim/s51.src/bit.cc @@ -30,6 +30,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA // local #include "uc51cl.h" #include "regs51.h" +#include "types51.h" /* @@ -39,14 +40,16 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA */ int -t_uc51::inst_orl_c_bit(uchar code) +cl_51core::inst_orl_c_bit(uchar code) { - uchar *addr, bitaddr; - - addr= get_bit(bitaddr= fetch(), &event_at.ri, &event_at.rs); - SET_C(GET_C || - (read(addr) & BIT_MASK(bitaddr))); - event_at.ws= PSW; + uchar bitaddr; + + t_addr a; + t_mem m; + class cl_address_space *mem; + mem= bit2mem(bitaddr= fetch(), &a, &m); + SFR_SET_C(SFR_GET_C || + (mem->read(a) & m)); tick(1); return(resGO); } @@ -59,14 +62,15 @@ t_uc51::inst_orl_c_bit(uchar code) */ int -t_uc51::inst_anl_c_bit(uchar code) +cl_51core::inst_anl_c_bit(uchar code) { - uchar *addr, bitaddr; + t_mem m; + t_addr a; + class cl_address_space *mem; - addr= get_bit(bitaddr= fetch(), &event_at.ri, &event_at.rs); - SET_C(GET_C && - (read(addr) & BIT_MASK(bitaddr))); - event_at.ws= PSW; + mem= bit2mem(fetch(), &a, &m); + SFR_SET_C(SFR_GET_C && + (mem->read(a) & m)); tick(1); return(resGO); } @@ -79,17 +83,18 @@ t_uc51::inst_anl_c_bit(uchar code) */ int -t_uc51::inst_mov_bit_c(uchar code) +cl_51core::inst_mov_bit_c(uchar code) { - uchar *addr, bitaddr; - - addr= get_bit(bitaddr= fetch(), &event_at.wi, &event_at.ws); - if (GET_C) - (*addr)|= BIT_MASK(bitaddr); + t_addr a; + t_mem m, d; + class cl_address_space *mem; + + mem= bit2mem(fetch(), &a, &m); + d= mem->read(a, HW_PORT); + if (SFR_GET_C) + mem->write(a, d|m); else - (*addr)&= ~BIT_MASK(bitaddr); - event_at.rs= PSW; - proc_write(addr); + mem->write(a, d&~m); tick(1); return(resGO); } @@ -102,13 +107,35 @@ t_uc51::inst_mov_bit_c(uchar code) */ int -t_uc51::inst_mov_c_bit(uchar code) +cl_51core::inst_mov_c_bit(uchar code) { - uchar *addr, bitaddr; + t_addr a; + t_mem m; + class cl_address_space *mem; + + mem= bit2mem(fetch(), &a, &m); + SFR_SET_C(mem->read(a) & m); + return(resGO); +} + - addr= get_bit(bitaddr= fetch(), &event_at.ri, &event_at.rs); - SET_C(read(addr) & BIT_MASK(bitaddr)); - event_at.ws= PSW; +/* + * 0xa0 2 24 ORL C,/bit + *____________________________________________________________________________ + * + */ + +int +cl_51core::inst_orl_c_Sbit(uchar code) +{ + t_mem m; + t_addr a; + class cl_address_space *mem; + + mem= bit2mem(fetch(), &a, &m); + SFR_SET_C(SFR_GET_C || + !(mem->read(a) & m)); + tick(1); return(resGO); } @@ -120,14 +147,15 @@ t_uc51::inst_mov_c_bit(uchar code) */ int -t_uc51::inst_anl_c_$bit(uchar code) +cl_51core::inst_anl_c_Sbit(uchar code) { - uchar *addr, bitaddr; + t_mem m; + t_addr a; + class cl_address_space *mem; - addr= get_bit(bitaddr= fetch(), &event_at.ri, &event_at.rs); - SET_C(GET_C && - !(read(addr) & BIT_MASK(bitaddr))); - event_at.ws= PSW; + mem= bit2mem(fetch(), &a, &m); + SFR_SET_C(SFR_GET_C && + !(mem->read(a) & m)); tick(1); return(resGO); } @@ -140,13 +168,15 @@ t_uc51::inst_anl_c_$bit(uchar code) */ int -t_uc51::inst_cpl_bit(uchar code) +cl_51core::inst_cpl_bit(uchar code) { - uchar *addr, bitaddr; + t_addr a; + t_mem m, d; + class cl_address_space *mem; - addr= get_bit(bitaddr= fetch(), &event_at.wi, &event_at.ws); - (*addr)^= BIT_MASK(bitaddr); - proc_write(addr); + mem= bit2mem(fetch(), &a, &m); + d= mem->read(a, HW_PORT); + mem->write(a, d^m); return(resGO); } @@ -158,10 +188,9 @@ t_uc51::inst_cpl_bit(uchar code) */ int -t_uc51::inst_cpl_c(uchar code) +cl_51core::inst_cpl_c(uchar code) { - sfr->set(PSW, sfr->get(PSW) ^ bmCY); - event_at.ws= PSW; + psw->write(psw->read() ^ bmCY); return(resGO); } @@ -173,13 +202,15 @@ t_uc51::inst_cpl_c(uchar code) */ int -t_uc51::inst_clr_bit(uchar code) +cl_51core::inst_clr_bit(uchar code) { - uchar *addr, bitaddr; + t_addr a; + t_mem m; + class cl_address_space *mem; - addr= get_bit(bitaddr= fetch(), &event_at.wi, &event_at.ws); - (*addr)&= ~BIT_MASK(bitaddr); - proc_write(addr); + mem= bit2mem(fetch(), &a, &m); + t_mem d= mem->read(a, HW_PORT); + mem->write(a, d&~m); return(resGO); } @@ -191,10 +222,9 @@ t_uc51::inst_clr_bit(uchar code) */ int -t_uc51::inst_clr_c(uchar code) +cl_51core::inst_clr_c(uchar code) { - sfr->set(PSW, sfr->get(PSW) & ~bmCY); - event_at.ws= PSW; + psw->write(psw->read() & ~bmCY); return(resGO); } @@ -206,13 +236,15 @@ t_uc51::inst_clr_c(uchar code) */ int -t_uc51::inst_setb_bit(uchar code) +cl_51core::inst_setb_bit(uchar code) { - uchar *addr, bitaddr; + t_addr a; + t_mem m, d; + class cl_address_space *mem; - addr= get_bit(bitaddr= fetch(), &event_at.wi, &event_at.ws); - (*addr)|= BIT_MASK(bitaddr); - proc_write(addr); + mem= bit2mem(fetch(), &a, &m); + d= mem->read(a, HW_PORT); + mem->write(a, d|m); return(resGO); } @@ -224,10 +256,9 @@ t_uc51::inst_setb_bit(uchar code) */ int -t_uc51::inst_setb_c(uchar code) +cl_51core::inst_setb_c(uchar code) { - sfr->set(PSW, sfr->get(PSW) | bmCY); - event_at.ws= PSW; + psw->write(psw->read() | bmCY); return(resGO); }