diff --git a/src/spider/runtime/instr/Instr_000-01F.cpp b/src/spider/runtime/instr/Instr_000-01F.cpp index b96b3a3..80b6f16 100644 --- a/src/spider/runtime/instr/Instr_000-01F.cpp +++ b/src/spider/runtime/instr/Instr_000-01F.cpp @@ -295,19 +295,23 @@ namespace spider { (this->*_post)(); } - void CPU::DMOD() { //It gives error and I dont understand why + void CPU::DMOD() { // TODO: Implement DMOD fetchOperSrc(); fetchOperDst(); switch(_size){ case 0b00: //byte - //_dst->_i8 / _src->_i8 = RX * _src + RY; + RX._i8 = _dst->_i8 / _src->_i8; + RY._i8 = _dst->_i8 % _src->_i8; case 0b01: //short - //_dst->_i16 / _src->_i16 = RX * _src->_i16 + RY; + RX._i16 = _dst->_i16 / _src->_i16; + RY._i16 = _dst->_i16 % _src->_i16; case 0b10: //int - //_dst->_i32 / _src->_i32 = RX * _src->_i32 + RY; + RX._i32 = _dst->_i32 / _src->_i32; + RY._i32 = _dst->_i32 % _src->_i32; case 0b11: //long - //_dst->_i64 / _src->_i64 = RX * _src->_i64 + RY; + RX._i64 = _dst->_i64 / _src->_i64; + RY._i64 = _dst->_i64 % _src->_i64; } (this->*_post)(); } @@ -318,13 +322,17 @@ namespace spider { fetchOperDst(); switch(_size){ case 0b00: //byte - //_dst->_u8 / _src->_u8 = RX * _src->_u8 + RY; + RX._u8 = _dst->_u8 / _src->_u8; + RY._u8 = _dst->_u8 % _src->_u8; case 0b01: //short - //_dst->_u16 / _src->_u16 = RX * _src->_u16 + RY; + RX._u16 = _dst->_u16 / _src->_u16; + RY._u16 = _dst->_u16 % _src->_u16; case 0b10: //int - //_dst->_u32 / _src->_u32 = RX * _src->_u32 + RY; + RX._u32 = _dst->_u32 / _src->_u32; + RY._u32 = _dst->_u32 % _src->_u32; case 0b11: //long - //_dst->_u64 / _src->_u64 = RX * _src->_u64 + RY; + RX._u64 = _dst->_u64 / _src->_u64; + RY._u64 = _dst->_u64 % _src->_u64; } (this->*_post)(); } @@ -334,13 +342,13 @@ namespace spider { fetchOperDst(); switch(_size){ case 0b00: //byte - _dst->_u8 = 1; + RF = (RF & ~(0x3 << 9)) | ((_dst->_u8 >> 9) & 0x3) << 9; case 0b01: //short - _dst->_u16 = 1; + RF = (RF & ~(0x3 << 9)) | ((_dst->_u16 >> 9) & 0x3) << 9; case 0b10: //int - _dst->_u32 = 1; + RF = (RF & ~(0x3 << 9)) | ((_dst->_u32 >> 9) & 0x3) << 9; case 0b11: //long - _dst->_u64 = 1; + RF = (RF & ~(0x3 << 9)) | ((_dst->_u64 >> 9) & 0x3) << 9; } (this->*_post)(); } diff --git a/src/spider/runtime/instr/Instr_020-03F.cpp b/src/spider/runtime/instr/Instr_020-03F.cpp index 58a8805..42d1838 100644 --- a/src/spider/runtime/instr/Instr_020-03F.cpp +++ b/src/spider/runtime/instr/Instr_020-03F.cpp @@ -13,7 +13,8 @@ namespace spider { fetchOperDst(); switch(_size){ case 0b00: //byte - _dst->_u8 = 1; + + _dst->_u8 = _src->_u8 == 0; case 0b01: //short _dst->_u16 = 1; case 0b10: //int