1
0
mirror of https://github.com/wfjm/w11.git synced 2026-01-12 00:43:01 +00:00
wfjm.w11/doc/simh_diff_stklim_vpush.md
2022-12-25 09:07:26 +01:00

1.7 KiB

Known differences between SimH, 11/70, and w11a

SimH: stack limit check and vector push aborts

In a vector flow, the 11/70 performs an individual stack limit check for the PS push and the PC push. Therefore, a vector flow can be aborted on the first or the second push, the red zone is never written. In case of a stack limit abort during a vector flow, the PS is restored to the value at the entry of the vector flow, an emergency stack is set up, and a vector 4 flow is started that will save the PS and PC values present at the beginning of the aborted vector flow.

SimH implements a substantially different behavior for all PDP-11 models. A stack limit violation is checked at the end of the vector flow, after the writes have been performed and one or two values have been potentially written into the red zone. An emergency stack is set up and a vector 4 flow is started that will save the PS and PC values taken read in beginning of the aborted vector flow.

Note: The SimH behavior for vector push aborts caused by an MMU abort is different. These aborts are detected before the actual write, and the vector flow handling of the abort saves the PS and PC values present at the beginning of the initial vector flow. This occurs both for a vector 240 flow when a push to a non-kernel stack failed, and a vector 4 flow when a push to kernel stack failed and is converted to a fatal stack error. In these cases, SimH implements the 11/70 behavior.

The w11 correctly implements the 11/70 behavior in all cases. This is verified in a tcode, the tests are skipped when executed on SimH (see cpu_details tests A3.4 and A3.5).

Tested with SimH V3.12-3.