From 976f37c0bcb861ec03d721c7900b14b3bd47cdad Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Wed, 16 Mar 2022 21:05:15 +0100 Subject: [PATCH] SXT was not implemented --- cpu.cpp | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/cpu.cpp b/cpu.cpp index 40cabe6..5e68376 100644 --- a/cpu.cpp +++ b/cpu.cpp @@ -854,8 +854,24 @@ bool cpu::single_operand_instructions(const uint16_t instr) psw = getGAM(dst_mode, dst_reg, word_mode, false, src_gam_text); break; - case 0b000110111: // MFPS (get PSW to something) - putGAM(dst_mode, dst_reg, word_mode, psw, false, dst_gam_text); + case 0b000110111: // MFPS (get PSW to something) / SXT + if (word_mode) { // MFPS + putGAM(dst_mode, dst_reg, word_mode, psw, false, dst_gam_text); + } + else { // SXT + a = getGAMAddress(dst_mode, dst_reg, word_mode, false); + v = b -> read(a, word_mode); + + vl = getPSW_n() ? -1 : 0; + + setPSW_z(getPSW_n() == false); + setPSW_v(false); + + if (dst_mode == 0) + putGAM(dst_mode, dst_reg, word_mode, vl, false, dst_gam_text); + else + b -> write(a, word_mode, vl); + } break; default: