of inst.cc with FUNC1 and FUNC2 defined as
various operations to implement ADD, ADDC, ...
*
- * Written by Karl Bongers karl@turbobit.com
- *
- * Copyright (C) 1999,99 Drotos Daniel, Talker Bt.
+ * Copyright (C) 1999,2002 Drotos Daniel, Talker Bt.
*
* To contact author send email to drdani@mazsola.iit.uni-miskolc.hu
+ * Other contributors include:
+ * Karl Bongers karl@turbobit.com,
+ * Johan Knol
*
*/
case REG_IREGINC :
case REG_IREG:
{
- short srcreg = reg2(RI_0F);
+ short srcreg = reg2(RI_07);
if (code & 0x0800) { /* word op */
set_reg2( RI_F0,
FUNC2( reg2(RI_F0),
);
}
if (operands == REG_IREGINC) {
- set_reg2(RI_0F, srcreg+1);
+ set_reg2(RI_07, srcreg+1);
}
}
break;
store1(addr, total);
}
if (operands == IREGINC_REG) {
- set_reg2(RI_0F, addr+1);
+ set_reg2(RI_07, addr+1);
}
}
break;
offset = (int)((short)fetch2());
}
if (code & 0x0800) { /* word op */
- t_mem addr = reg2(RI_07) + offset;
+ t_mem addr = reg2(RI_70) + offset;
unsigned short wtmp, wtotal;
wtmp = get2(addr);
wtotal = FUNC2( wtmp, reg2(RI_F0) );
store2(addr, wtotal);
} else {
- t_mem addr = reg2(RI_07) + ((short) fetch2());
+ t_mem addr = reg2(RI_70) + ((short) fetch2());
unsigned char total;
total = FUNC1( get1(addr), reg1(RI_F0) );
store1(addr, total);
)
);
} else {
- int offset = (int)((short)fetch2());
set_reg1( RI_F0,
FUNC1( reg1(RI_F0),
get1(reg2(RI_07)+offset)
case DIRECT_REG :
{
- int addr = ((code & 0x3) << 8) | fetch();
+ int addr = ((code & 0x7) << 8) | fetch();
if (code & 0x0800) { /* word op */
unsigned short wtmp = get_word_direct(addr);
set_word_direct( addr,
case REG_DIRECT :
{
- int addr = ((code & 0x3) << 8) | fetch();
+ int addr = ((code & 0x7) << 8) | fetch();
if (code & 0x0800) { /* word op */
set_reg2( RI_F0,
FUNC2( reg2(RI_F0),
break;
case REG_DATA8 :
+#if 0
+ {
+ unsigned char dat = fetch();
+ unsigned char res;
+ res = FUNC1( reg1(RI_F0), dat);
+ set_reg1( RI_F0, res );
+ printf("reg_data8 code=%x dat=%x, res=%x r=%x\n", code, dat, res, reg1( RI_F0) );
+ }
+#endif
set_reg1( RI_F0, FUNC1( reg1(RI_F0), fetch()) );
break;
case REG_DATA16 :
- set_reg2( RI_F0, FUNC2( reg2(RI_F0), fetch()) );
+ {
+ unsigned short dat = fetch2();
+ set_reg2( RI_F0, FUNC2( reg2(RI_F0), dat) );
+ }
break;
case IREGINC_DATA8 :
{
unsigned char total;
unsigned char tmp;
- t_mem addr = reg2(RI_07);
+ t_mem addr = reg2(RI_70);
tmp = get1(addr);
total = FUNC1(tmp, fetch() );
store1(addr, total);
if (operands == IREGINC_DATA8) {
- set_reg2(RI_07, addr+1);
+ set_reg2(RI_70, addr+1);
}
}
break;
total = FUNC2(tmp, fetch2() );
store2(addr, total);
if (operands == IREGINC_DATA16) {
- set_reg2(RI_07, addr+1);
+ set_reg2(RI_70, addr+1);
}
}
break;
offset = (int)((short)fetch2());
}
tmp = fetch();
- addr = reg2(RI_07);
+ addr = reg2(RI_70);
- store1( addr,
+ store1( addr+offset,
FUNC1( tmp,
get1(addr+offset)
)
offset = (int)((short)fetch2());
}
tmp = fetch2();
- addr = reg2(RI_07);
+ addr = reg2(RI_70);
- store2( addr,
+ store2( addr+offset,
FUNC2( tmp,
get2(addr+offset)
)
case DIRECT_DATA8 :
{
- int addr = ((code & 0x3) << 8) | fetch();
+ int addr = ((code & 0x70) << 4) | fetch();
unsigned char bdir = get_byte_direct(addr);
unsigned char bdat = fetch();
set_byte_direct( addr, FUNC1( bdir, bdat) );
case DIRECT_DATA16 :
{
- int addr = ((code & 0x3) << 8) | fetch();
+ int addr = ((code & 0x70) << 4) | fetch();
unsigned short wdir = get_word_direct(addr);
unsigned short wdat = fetch2();
set_word_direct( addr, FUNC2( wdir, wdat) );