From 8fb77ff4d4040e9815155501db8d80c3df78a03c Mon Sep 17 00:00:00 2001 From: folkert van heusden Date: Fri, 12 Apr 2024 21:32:33 +0200 Subject: [PATCH] recover stack when a trap in a trap --- cpu.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/cpu.cpp b/cpu.cpp index 5f82fed..6c5789b 100644 --- a/cpu.cpp +++ b/cpu.cpp @@ -1724,8 +1724,15 @@ void cpu::trap(uint16_t vector, const int new_ipl, const bool is_interrupt) if (processing_trap_depth >= 2 && kernel_mode) setRegister(6, 04); - pushStack(before_psw); - pushStack(before_pc); + uint16_t prev_sp = getRegister(6); + try { + pushStack(before_psw); + pushStack(before_pc); + } + catch(const int exception) { + // recover stack + setRegister(6, prev_sp); + } processing_trap_depth = 0;