From 649516df18a9a5eb509c7c1fd844f972b30fb879 Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Fri, 3 Jun 2022 11:48:06 +0200 Subject: [PATCH] MARK versus MTPS --- cpu.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/cpu.cpp b/cpu.cpp index 7071fef..ec32473 100644 --- a/cpu.cpp +++ b/cpu.cpp @@ -1281,9 +1281,19 @@ bool cpu::single_operand_instructions(const uint16_t instr) break; } - case 0b000110100: // MTPS (put something in PSW) - psw &= 0xff00; // only alter lower 8 bits - psw |= getGAM(dst_mode, dst_reg, word_mode, false) & 0xef; // can't change bit 4 + case 0b000110100: // MARK/MTPS (put something in PSW) + if (word_mode) { // MTPS + psw &= 0xff00; // only alter lower 8 bits + psw |= getGAM(dst_mode, dst_reg, word_mode, false) & 0xef; // can't change bit 4 + } + else { + setRegister(6, getPC() + dst * 2); + + setPC(getRegister(5)); + + setRegister(5, popStack()); + } + break; case 0b000110111: // MFPS (get PSW to something) / SXT