X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=sim%2Fucsim%2Fxa.src%2Finst.cc;h=cfb91214598f38e50ec6c62e74ca439d10840959;hb=df83225f04ffdc81a3d003a4b75e70897314a2e7;hp=218ec440eec5399277e130653ca4fba0ee2f7750;hpb=dc49af97088af823f41b5eb8f43cd13cb2648b30;p=fw%2Fsdcc diff --git a/sim/ucsim/xa.src/inst.cc b/sim/ucsim/xa.src/inst.cc index 218ec440..cfb91214 100644 --- a/sim/ucsim/xa.src/inst.cc +++ b/sim/ucsim/xa.src/inst.cc @@ -37,21 +37,21 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA int cl_xa::get_reg(int word_flag, unsigned int index) { - if (index < 3) { /* banked */ + //if (index < 3) { /* banked */ + // if (word_flag) + // return get_word_direct(0x400+index); + // else + // return mem_direct[0x400+index]; + //} else { /* non-banked */ if (word_flag) return get_word_direct(0x400+index); else return mem_direct[0x400+index]; - } else { /* non-banked */ - if (word_flag) - return get_word_direct(0x400+index); - else - return mem_direct[0x400+index]; - } + //} } int -cl_xa::inst_NOP(uint code) +cl_xa::inst_NOP(uint code, int operands) { return(resGO); } @@ -62,10 +62,8 @@ cl_xa::inst_NOP(uint code) #define RI_07 (code & 0x7) int -cl_xa::inst_ADD(uint code) +cl_xa::inst_ADD(uint code, int operands) { - int operands = code >> 16; // kludgy, param info - #undef FUNC1 #define FUNC1 add1 #undef FUNC2 @@ -76,10 +74,8 @@ cl_xa::inst_ADD(uint code) } int -cl_xa::inst_ADDC(uint code) +cl_xa::inst_ADDC(uint code, int operands) { - int operands = code >> 16; // kludgy, param info - #undef FUNC1 #define FUNC1 addc1 #undef FUNC2 @@ -90,239 +86,291 @@ cl_xa::inst_ADDC(uint code) } int -cl_xa::inst_SUB(uint code) +cl_xa::inst_SUB(uint code, int operands) { +#undef FUNC1 +#define FUNC1 sub1 +#undef FUNC2 +#define FUNC2 sub2 +#include "inst_gen.cc" return(resGO); } int -cl_xa::inst_SUBB(uint code) +cl_xa::inst_SUBB(uint code, int operands) { +#undef FUNC1 +#define FUNC1 subb1 +#undef FUNC2 +#define FUNC2 subb2 +#include "inst_gen.cc" return(resGO); } int -cl_xa::inst_CMP(uint code) +cl_xa::inst_CMP(uint code, int operands) { +#undef FUNC1 +#define FUNC1 cmp1 +#undef FUNC2 +#define FUNC2 cmp2 +#include "inst_gen.cc" return(resGO); } int -cl_xa::inst_AND(uint code) +cl_xa::inst_AND(uint code, int operands) { +#undef FUNC1 +#define FUNC1 and1 +#undef FUNC2 +#define FUNC2 and2 +#include "inst_gen.cc" return(resGO); } int -cl_xa::inst_OR(uint code) +cl_xa::inst_OR(uint code, int operands) { +#undef FUNC1 +#define FUNC1 or1 +#undef FUNC2 +#define FUNC2 or2 +#include "inst_gen.cc" return(resGO); } int -cl_xa::inst_XOR(uint code) +cl_xa::inst_XOR(uint code, int operands) { +#undef FUNC1 +#define FUNC1 xor1 +#undef FUNC2 +#define FUNC2 xor2 +#include "inst_gen.cc" return(resGO); } int -cl_xa::inst_ADDS(uint code) +cl_xa::inst_ADDS(uint code, int operands) { return(resGO); } int -cl_xa::inst_NEG(uint code) +cl_xa::inst_NEG(uint code, int operands) { return(resGO); } int -cl_xa::inst_SEXT(uint code) +cl_xa::inst_SEXT(uint code, int operands) { return(resGO); } int -cl_xa::inst_MUL(uint code) +cl_xa::inst_MUL(uint code, int operands) { return(resGO); } int -cl_xa::inst_DIV(uint code) +cl_xa::inst_DIV(uint code, int operands) { return(resGO); } int -cl_xa::inst_DA(uint code) +cl_xa::inst_DA(uint code, int operands) { return(resGO); } int -cl_xa::inst_ASL(uint code) +cl_xa::inst_ASL(uint code, int operands) { return(resGO); } int -cl_xa::inst_ASR(uint code) +cl_xa::inst_ASR(uint code, int operands) { return(resGO); } int -cl_xa::inst_LEA(uint code) +cl_xa::inst_LEA(uint code, int operands) { return(resGO); } int -cl_xa::inst_CPL(uint code) +cl_xa::inst_CPL(uint code, int operands) { return(resGO); } int -cl_xa::inst_LSR(uint code) +cl_xa::inst_LSR(uint code, int operands) { return(resGO); } int -cl_xa::inst_NORM(uint code) +cl_xa::inst_NORM(uint code, int operands) { return(resGO); } int -cl_xa::inst_RL(uint code) +cl_xa::inst_RL(uint code, int operands) { return(resGO); } int -cl_xa::inst_RLC(uint code) +cl_xa::inst_RLC(uint code, int operands) { return(resGO); } int -cl_xa::inst_RR(uint code) +cl_xa::inst_RR(uint code, int operands) { return(resGO); } int -cl_xa::inst_RRC(uint code) +cl_xa::inst_RRC(uint code, int operands) { return(resGO); } int -cl_xa::inst_MOVS(uint code) +cl_xa::inst_MOVS(uint code, int operands) { return(resGO); } int -cl_xa::inst_MOVC(uint code) +cl_xa::inst_MOVC(uint code, int operands) { return(resGO); } int -cl_xa::inst_MOVX(uint code) +cl_xa::inst_MOVX(uint code, int operands) { return(resGO); } int -cl_xa::inst_PUSH(uint code) +cl_xa::inst_PUSH(uint code, int operands) { return(resGO); } int -cl_xa::inst_POP(uint code) +cl_xa::inst_POP(uint code, int operands) { return(resGO); } int -cl_xa::inst_XCH(uint code) +cl_xa::inst_XCH(uint code, int operands) { return(resGO); } int -cl_xa::inst_SETB(uint code) +cl_xa::inst_SETB(uint code, int operands) { return(resGO); } int -cl_xa::inst_CLR(uint code) +cl_xa::inst_CLR(uint code, int operands) { return(resGO); } int -cl_xa::inst_MOV(uint code) +cl_xa::inst_MOV(uint code, int operands) { +#undef FUNC1 +#define FUNC1 mov1 +#undef FUNC2 +#define FUNC2 mov2 +#include "inst_gen.cc" return(resGO); } int -cl_xa::inst_ANL(uint code) +cl_xa::inst_ANL(uint code, int operands) { return(resGO); } int -cl_xa::inst_ORL(uint code) +cl_xa::inst_ORL(uint code, int operands) { return(resGO); } int -cl_xa::inst_BR(uint code) +cl_xa::inst_BR(uint code, int operands) { return(resGO); } int -cl_xa::inst_JMP(uint code) +cl_xa::inst_JMP(uint code, int operands) { + unsigned int jmpaddr; + short saddr; + + switch(operands) { + case REL16: + { + saddr = fetch2(); + jmpaddr = saddr; + jmpaddr *= 2; + PC = (PC + 3) + jmpaddr; + } + break; + case IREG: + PC = reg2(RI_07) & 0xfffe; /* word aligned */ + break; + /* fixme 2 more... */ + } return(resGO); } int -cl_xa::inst_CALL(uint code) +cl_xa::inst_CALL(uint code, int operands) { return(resGO); } int -cl_xa::inst_RET(uint code) +cl_xa::inst_RET(uint code, int operands) { return(resGO); } int -cl_xa::inst_Bcc(uint code) +cl_xa::inst_Bcc(uint code, int operands) { return(resGO); } int -cl_xa::inst_JB(uint code) +cl_xa::inst_JB(uint code, int operands) { return(resGO); } int -cl_xa::inst_JNB(uint code) +cl_xa::inst_JNB(uint code, int operands) { return(resGO); } int -cl_xa::inst_CJNE(uint code) +cl_xa::inst_CJNE(uint code, int operands) { return(resGO); } int -cl_xa::inst_DJNZ(uint code) +cl_xa::inst_DJNZ(uint code, int operands) { return(resGO); } int -cl_xa::inst_JZ(uint code) +cl_xa::inst_JZ(uint code, int operands) { return(resGO); } int -cl_xa::inst_JNZ(uint code) +cl_xa::inst_JNZ(uint code, int operands) { return(resGO); } int -cl_xa::inst_BKPT(uint code) +cl_xa::inst_BKPT(uint code, int operands) { return(resGO); } int -cl_xa::inst_TRAP(uint code) +cl_xa::inst_TRAP(uint code, int operands) { return(resGO); } int -cl_xa::inst_RESET(uint code) +cl_xa::inst_RESET(uint code, int operands) { return(resGO); }