// local
#include "uc51cl.h"
#include "regs51.h"
+#include "types51.h"
/*
int
t_uc51::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_mem *mem;
+ mem= bit2mem(bitaddr= fetch(), &a, &m);
+ SFR_SET_C(SFR_GET_C ||
+ (mem->read(a) & m));
tick(1);
return(resGO);
}
int
t_uc51::inst_anl_c_bit(uchar code)
{
- uchar *addr, bitaddr;
+ t_mem m;
+ t_addr a;
+ class cl_mem *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);
}
int
t_uc51::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_mem *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);
}
int
t_uc51::inst_mov_c_bit(uchar code)
{
- uchar *addr, bitaddr;
+ t_addr a;
+ t_mem m;
+ class cl_mem *mem;
- addr= get_bit(bitaddr= fetch(), &event_at.ri, &event_at.rs);
- SET_C(read(addr) & BIT_MASK(bitaddr));
- event_at.ws= PSW;
+ mem= bit2mem(fetch(), &a, &m);
+ SFR_SET_C(mem->read(a) & m);
return(resGO);
}
int
t_uc51::inst_anl_c_$bit(uchar code)
{
- uchar *addr, bitaddr;
+ t_mem m;
+ t_addr a;
+ class cl_mem *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);
}
int
t_uc51::inst_cpl_bit(uchar code)
{
- uchar *addr, bitaddr;
+ t_addr a;
+ t_mem m, d;
+ class cl_mem *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);
}
int
t_uc51::inst_cpl_c(uchar code)
{
- sfr->set(PSW, sfr->get(PSW) ^ bmCY);
- event_at.ws= PSW;
+ psw->write(psw->read() ^ bmCY);
return(resGO);
}
int
t_uc51::inst_clr_bit(uchar code)
{
- uchar *addr, bitaddr;
+ t_addr a;
+ t_mem m;
+ class cl_mem *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);
}
int
t_uc51::inst_clr_c(uchar code)
{
- sfr->set(PSW, sfr->get(PSW) & ~bmCY);
- event_at.ws= PSW;
+ psw->write(psw->read() & ~bmCY);
return(resGO);
}
int
t_uc51::inst_setb_bit(uchar code)
{
- uchar *addr, bitaddr;
+ t_addr a;
+ t_mem m, d;
+ class cl_mem *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);
}
int
t_uc51::inst_setb_c(uchar code)
{
- sfr->set(PSW, sfr->get(PSW) | bmCY);
- event_at.ws= PSW;
+ psw->write(psw->read() | bmCY);
return(resGO);
}