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);
}
#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
}
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
}
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);
}