#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;
}
void cl_xa::set_bit(int bit, int value) {
+ int i;
short offset=0;
if (bit>=0x200) {
// in sfr space
bit-=0x200;
offset=0x400;
}
-#if 0
+
i = get_byte_direct(offset + (bit/8));
if (value) {
- set_byte_direct(offset + (bit/8), i | (1 << (bit%8) );
+ set_byte_direct(offset + (bit/8), i | (1 << (bit%8)) );
//mem_direct[offset + (bit/8)] |= (1 << (bit%8));
} else {
- set_byte_direct( offset + (bit/8), i & ~(1 << (bit%8) );
+ set_byte_direct(offset + (bit/8), i & ~(1 << (bit%8)) );
//mem_direct[offset + (bit/8)] &= ~(1 << (bit%8));
}
-#endif
}
#define RI_F0 ((code >> 4) & 0xf)
int cl_xa::inst_BR(uint code, int operands)
{
short jmpAddr = fetch1()*2;
- PC=(PC+jmpAddr)&0xfffffffe;
+ PC=(PC+jmpAddr)&0xfffffe;
return(resGO);
}
unsigned short tmp = mov2(0, reg2(RI_F0)-1);
set_reg2(RI_F0, tmp);
if (tmp != 0)
- PC = (PC + addr) & 0xfffffffe;
+ PC = (PC + addr) & 0xfffffe;
} else {
unsigned char tmp = mov1(0, reg1(RI_F0)-1);
set_reg1(RI_F0, tmp);
if (tmp != 0)
- PC = (PC + addr) & 0xfffffffe;
+ PC = (PC + addr) & 0xfffffe;
}
}
break;
case REL16:
{
jmpAddr = (signed short)fetch2()*2;
- PC = (PC + jmpAddr) & 0xfffffffe;
+ PC = (PC + jmpAddr) & 0xfffffe;
}
break;
case IREG: