1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-07-16 22:28:57 +00:00

Fix interrupt stack frame.

This commit is contained in:
Thomas Harte 2022-05-27 21:54:23 -04:00
parent 1365fca161
commit 698d1a7111

View File

@ -526,9 +526,9 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
SetupDataAccess(0, Microcycle::SelectWord); SetupDataAccess(0, Microcycle::SelectWord);
SetDataAddress(registers_[15].l); SetDataAddress(registers_[15].l);
// Push status. // Push low part of program counter.
registers_[15].l -= 2; registers_[15].l -= 2;
Access(captured_status_); // ns Access(instruction_address_.low); // ns
// Do the interrupt cycle, to obtain a vector. // Do the interrupt cycle, to obtain a vector.
temporary_address_.l = 0xffff'fff1 | uint32_t(captured_interrupt_level_ << 1); temporary_address_.l = 0xffff'fff1 | uint32_t(captured_interrupt_level_ << 1);
@ -549,11 +549,12 @@ void Processor<BusHandler, dtack_is_implicit, permit_overrun, signal_will_perfor
SetupDataAccess(0, Microcycle::SelectWord); SetupDataAccess(0, Microcycle::SelectWord);
SetDataAddress(registers_[15].l); SetDataAddress(registers_[15].l);
registers_[15].l -= 2; registers_[15].l -= 4;
Access(instruction_address_.high); // ns Access(captured_status_); // ns
registers_[15].l += 2;
Access(instruction_address_.high); // nS
registers_[15].l -= 2; registers_[15].l -= 2;
Access(instruction_address_.low); // nS
// Grab new program counter. // Grab new program counter.
SetupDataAccess(Microcycle::Read, Microcycle::SelectWord); SetupDataAccess(Microcycle::Read, Microcycle::SelectWord);