From 7fe3949307de8dedeb88ccc237066faddbca7b11 Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Sun, 31 Mar 2024 14:31:28 +0200 Subject: [PATCH] SOB: code reduction / RTS: fix for "RTS R6" --- cpu.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/cpu.cpp b/cpu.cpp index e3876de..b65ef3e 100644 --- a/cpu.cpp +++ b/cpu.cpp @@ -796,9 +796,7 @@ bool cpu::additional_double_operand_instructions(const uint16_t instr) } case 7: { // SOB - addRegister(reg, rm_cur, -1); - - if (getRegister(reg)) { + if (addRegister(reg, rm_cur, -1)) { uint16_t newPC = getPC() - dst * 2; setPC(newPC); @@ -1643,13 +1641,17 @@ bool cpu::misc_operations(const uint16_t instr) if ((instr & 0b1111111111111000) == 0b0000000010000000) { // RTS const int link_reg = instr & 7; - uint16_t v = popStack(); - // MOVE link, PC setPC(getRegister(link_reg)); // POP link - setRegister(link_reg, v); + uint16_t word_on_stack = b->readWord(getRegister(6), d_space); + + setRegister(link_reg, word_on_stack); + + // do not overwrite SP when it was just set + if (link_reg != 6) + addRegister(6, rm_cur, 2); return true; }