partial revert of 85e8f873e9
as they broke unix 5
This commit is contained in:
parent
ec9211a0f1
commit
616674f8b1
1 changed files with 20 additions and 15 deletions
35
cpu.cpp
35
cpu.cpp
|
@ -513,10 +513,11 @@ bool cpu::double_operand_instructions(const uint16_t instr)
|
||||||
}
|
}
|
||||||
|
|
||||||
case 0b010: { // CMP/CMPB Compare Word/Byte
|
case 0b010: { // CMP/CMPB Compare Word/Byte
|
||||||
auto g_dst = getGAM(dst_mode, dst_reg, word_mode, rm_cur);
|
|
||||||
addToMMR1(g_dst);
|
|
||||||
|
|
||||||
gam_rc_t g_src = getGAM(src_mode, src_reg, word_mode, rm_cur);
|
gam_rc_t g_src = getGAM(src_mode, src_reg, word_mode, rm_cur);
|
||||||
|
|
||||||
|
auto g_dst = getGAM(dst_mode, dst_reg, word_mode, rm_cur);
|
||||||
|
|
||||||
|
addToMMR1(g_dst);
|
||||||
addToMMR1(g_src);
|
addToMMR1(g_src);
|
||||||
|
|
||||||
uint16_t temp = (g_src.value.value() - g_dst.value.value()) & (word_mode == wm_byte ? 0xff : 0xffff);
|
uint16_t temp = (g_src.value.value() - g_dst.value.value()) & (word_mode == wm_byte ? 0xff : 0xffff);
|
||||||
|
@ -530,10 +531,11 @@ bool cpu::double_operand_instructions(const uint16_t instr)
|
||||||
}
|
}
|
||||||
|
|
||||||
case 0b011: { // BIT/BITB Bit Test Word/Byte
|
case 0b011: { // BIT/BITB Bit Test Word/Byte
|
||||||
auto g_dst = getGAM(dst_mode, dst_reg, word_mode, rm_cur);
|
|
||||||
addToMMR1(g_dst);
|
|
||||||
|
|
||||||
gam_rc_t g_src = getGAM(src_mode, src_reg, word_mode, rm_cur);
|
gam_rc_t g_src = getGAM(src_mode, src_reg, word_mode, rm_cur);
|
||||||
|
|
||||||
|
auto g_dst = getGAM(dst_mode, dst_reg, word_mode, rm_cur);
|
||||||
|
|
||||||
|
addToMMR1(g_dst);
|
||||||
addToMMR1(g_src);
|
addToMMR1(g_src);
|
||||||
|
|
||||||
uint16_t result = (g_dst.value.value() & g_src.value.value()) & (word_mode == wm_byte ? 0xff : 0xffff);
|
uint16_t result = (g_dst.value.value() & g_src.value.value()) & (word_mode == wm_byte ? 0xff : 0xffff);
|
||||||
|
@ -544,10 +546,11 @@ bool cpu::double_operand_instructions(const uint16_t instr)
|
||||||
}
|
}
|
||||||
|
|
||||||
case 0b100: { // BIC/BICB Bit Clear Word/Byte
|
case 0b100: { // BIC/BICB Bit Clear Word/Byte
|
||||||
auto g_dst = getGAM(dst_mode, dst_reg, word_mode, rm_cur);
|
|
||||||
addToMMR1(g_dst);
|
|
||||||
|
|
||||||
gam_rc_t g_src = getGAM(src_mode, src_reg, word_mode, rm_cur);
|
gam_rc_t g_src = getGAM(src_mode, src_reg, word_mode, rm_cur);
|
||||||
|
|
||||||
|
auto g_dst = getGAM(dst_mode, dst_reg, word_mode, rm_cur);
|
||||||
|
|
||||||
|
addToMMR1(g_dst);
|
||||||
addToMMR1(g_src);
|
addToMMR1(g_src);
|
||||||
|
|
||||||
uint16_t result = g_dst.value.value() & ~g_src.value.value();
|
uint16_t result = g_dst.value.value() & ~g_src.value.value();
|
||||||
|
@ -560,10 +563,11 @@ bool cpu::double_operand_instructions(const uint16_t instr)
|
||||||
|
|
||||||
case 0b101: { // BIS/BISB Bit Set Word/Byte
|
case 0b101: { // BIS/BISB Bit Set Word/Byte
|
||||||
// TODO: retain MSB for register operations?
|
// TODO: retain MSB for register operations?
|
||||||
auto g_dst = getGAM(dst_mode, dst_reg, word_mode, rm_cur);
|
|
||||||
addToMMR1(g_dst);
|
|
||||||
|
|
||||||
gam_rc_t g_src = getGAM(src_mode, src_reg, word_mode, rm_cur);
|
gam_rc_t g_src = getGAM(src_mode, src_reg, word_mode, rm_cur);
|
||||||
|
|
||||||
|
auto g_dst = getGAM(dst_mode, dst_reg, word_mode, rm_cur);
|
||||||
|
|
||||||
|
addToMMR1(g_dst);
|
||||||
addToMMR1(g_src);
|
addToMMR1(g_src);
|
||||||
|
|
||||||
uint16_t result = g_dst.value.value() | g_src.value.value();
|
uint16_t result = g_dst.value.value() | g_src.value.value();
|
||||||
|
@ -578,10 +582,11 @@ bool cpu::double_operand_instructions(const uint16_t instr)
|
||||||
}
|
}
|
||||||
|
|
||||||
case 0b110: { // ADD/SUB Add/Subtract Word
|
case 0b110: { // ADD/SUB Add/Subtract Word
|
||||||
auto g_dst = getGAM(dst_mode, dst_reg, wm_word, rm_cur);
|
|
||||||
addToMMR1(g_dst);
|
|
||||||
|
|
||||||
auto g_ssrc = getGAM(src_mode, src_reg, wm_word, rm_cur);
|
auto g_ssrc = getGAM(src_mode, src_reg, wm_word, rm_cur);
|
||||||
|
|
||||||
|
auto g_dst = getGAM(dst_mode, dst_reg, wm_word, rm_cur);
|
||||||
|
|
||||||
|
addToMMR1(g_dst);
|
||||||
addToMMR1(g_ssrc);
|
addToMMR1(g_ssrc);
|
||||||
|
|
||||||
int16_t result = 0;
|
int16_t result = 0;
|
||||||
|
|
Loading…
Add table
Reference in a new issue