From: johanknol Date: Mon, 4 Feb 2002 09:37:17 +0000 (+0000) Subject: work in progress X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=b1f85c08d3a6ead57a1cc5f14b57c3adf806204a;p=fw%2Fsdcc work in progress git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1900 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/sim/ucsim/xa.src/glob.cc b/sim/ucsim/xa.src/glob.cc index 21e0a775..83497dd5 100644 --- a/sim/ucsim/xa.src/glob.cc +++ b/sim/ucsim/xa.src/glob.cc @@ -206,10 +206,10 @@ struct xa_dis_entry disass_xa[]= { {0,0x0850,0xfffc,' ',2,ANL, C_NOTBIT }, // ANL C, /bit 0 0 0 0 1 0 0 0 0 1 0 1 0 0 b b {0,0xc150,0xf300,' ',2,ASL, REG_REG }, // ASL Rd, Rs 1 1 0 0 S S 0 1 d d d d s s s s {0,0xdd00,0xff00,' ',2,ASL, REG_DATA5 }, // ASL Rd, #data5 (dword) 1 1 0 1 1 1 0 1 d d d #data5 - {0,0xd100,0xf300,' ',2,ASL, REG_DATA4 }, // ASL Rd, #data4 1 1 0 1 S S 0 1 d d d d #data4 + {0,0xd100,0xf700,' ',2,ASL, REG_DATA4 }, // ASL Rd, #data4 1 1 0 1 S S 0 1 d d d d #data4 {0,0xc250,0xf300,' ',2,ASR, REG_REG }, // ASR Rd, Rs 1 1 0 0 S S 1 0 d d d d s s s s {0,0xde00,0xff00,' ',2,ASR, REG_DATA5 }, // ASR Rd, #data5 (dword) 1 1 0 1 1 1 1 0 d d d #data5 - {0,0xd200,0xf300,' ',2,ASR, REG_DATA4 }, // ASR Rd, #data4 1 1 0 1 S S 1 0 d d d d #data4 + {0,0xd200,0xf700,' ',2,ASR, REG_DATA4 }, // ASR Rd, #data4 1 1 0 1 S S 1 0 d d d d #data4 {1,0xf000,0xff00,' ',2,BCC, REL8 }, // BCC rel8 1 1 1 1 0 0 0 0 rel8 {1,0xf100,0xff00,' ',2,BCS, REL8 }, // BCS rel8 1 1 1 1 0 0 0 1 rel8 {1,0xf300,0xff00,' ',2,BEQ, REL8 }, // BEQ rel8 1 1 1 1 0 0 1 1 rel8 diff --git a/sim/ucsim/xa.src/inst.cc b/sim/ucsim/xa.src/inst.cc index dc991e08..1549367c 100644 --- a/sim/ucsim/xa.src/inst.cc +++ b/sim/ucsim/xa.src/inst.cc @@ -96,7 +96,6 @@ bool cl_xa::get_bit(int bit) { } result = get_byte_direct(offset + (bit/8)) & (1 << (bit%8)); return result; - //return mem_direct[offset + (bit/8)] & (1 << (bit%8)); } void cl_xa::set_bit(int bit, int value) { @@ -111,10 +110,8 @@ void cl_xa::set_bit(int bit, int value) { i = get_byte_direct(offset + (bit/8)); if (value) { 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)) ); - //mem_direct[offset + (bit/8)] &= ~(1 << (bit%8)); } } @@ -507,6 +504,12 @@ int cl_xa::inst_JB(uint code, int operands) } int cl_xa::inst_JBC(uint code, int operands) { + short bitAddr=((code&0x3)<<8) + fetch1(); + short jmpAddr = (fetch1() * 2); + if (get_bit(bitAddr)) { + PC = (PC+jmpAddr)&0xfffffe; + } + set_bit(bitAddr); return(resGO); } int cl_xa::inst_JNB(uint code, int operands) @@ -517,7 +520,6 @@ int cl_xa::inst_JNB(uint code, int operands) PC = (PC+jmpAddr)&0xfffffe; } return(resGO); - return(resGO); } int cl_xa::inst_JMP(uint code, int operands) { @@ -558,6 +560,20 @@ int cl_xa::inst_JZ(uint code, int operands) } int cl_xa::inst_LEA(uint code, int operands) { + switch (operands) { + case REG_REGOFF8: + { + char offset=fetch1(); + set_reg2(RI_70, reg2(RI_07)+offset); + break; + } + case REG_REGOFF16: + { + short offset=fetch2(); + set_reg2(RI_70, reg2(RI_07)+offset); + break; + } + } return(resGO); } int cl_xa::inst_LSR(uint code, int operands) diff --git a/src/xa51/gen.c b/src/xa51/gen.c index ec4e9356..65f7b3f8 100755 --- a/src/xa51/gen.c +++ b/src/xa51/gen.c @@ -1234,7 +1234,7 @@ static void genPointerGet (iCode * ic, iCode *pi) { symbol *tlbl1=newiTempLabel(NULL); symbol *tlbl2=newiTempLabel(NULL); emitcode ("cmp", "%s,#0x%02x", AOP_NAME(left)[1], CPOINTER); - emitcode ("bne", "%05d$", tlbl1->key+100); + emitcode ("beq", "%05d$", tlbl1->key+100); // far/near pointer if (pi) { emitcode ("mov", "%s,[%s+]", AOP_NAME(result)[0], AOP_NAME(left)[0]);