diff --git a/cpu.cpp b/cpu.cpp index 290cd69..1e65123 100644 --- a/cpu.cpp +++ b/cpu.cpp @@ -513,10 +513,11 @@ bool cpu::double_operand_instructions(const uint16_t instr) } 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); + + auto g_dst = getGAM(dst_mode, dst_reg, word_mode, rm_cur); + + addToMMR1(g_dst); addToMMR1(g_src); 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 - 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); + + auto g_dst = getGAM(dst_mode, dst_reg, word_mode, rm_cur); + + addToMMR1(g_dst); addToMMR1(g_src); 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 - 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); + + auto g_dst = getGAM(dst_mode, dst_reg, word_mode, rm_cur); + + addToMMR1(g_dst); addToMMR1(g_src); 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 // 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); + + auto g_dst = getGAM(dst_mode, dst_reg, word_mode, rm_cur); + + addToMMR1(g_dst); addToMMR1(g_src); 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 - 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_dst = getGAM(dst_mode, dst_reg, wm_word, rm_cur); + + addToMMR1(g_dst); addToMMR1(g_ssrc); int16_t result = 0;