recover stack when a trap in a trap

This commit is contained in:
folkert van heusden 2024-04-12 21:32:33 +02:00
parent 77a12c0fa1
commit 8fb77ff4d4
Signed by untrusted user who does not match committer: folkert
GPG key ID: 6B6455EDFEED3BD1

11
cpu.cpp
View file

@ -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) if (processing_trap_depth >= 2 && kernel_mode)
setRegister(6, 04); setRegister(6, 04);
pushStack(before_psw); uint16_t prev_sp = getRegister(6);
pushStack(before_pc); try {
pushStack(before_psw);
pushStack(before_pc);
}
catch(const int exception) {
// recover stack
setRegister(6, prev_sp);
}
processing_trap_depth = 0; processing_trap_depth = 0;