From 616674f8b19465ba6cbd5bf2b70b67e60d3cfc4f Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Fri, 12 Apr 2024 21:46:00 +0200 Subject: [PATCH] partial revert of 85e8f873e9200c7404167d6c648a3741287569cb as they broke unix 5 --- cpu.cpp | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) 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;