On Thu, May 12, 2022 at 8:07 AM Ron Natalie <ron(a)ronnatalie.com> wrote:
UNIX uses trap as a system call, RSTS (like most DEC
OS's for some odd
reason) uses EMT.
That's pretty much what the processor documentation says (in various
wordings depending on what manual you look at). EMT is for the "system",
TRAP is for the "user". The intention, I think, was that a user-mode
program could use TRAP for its own purposes, and the supervisor would keep
track of the TRAP vector in low memory associated with a process. Since
Unix was a "user program", even though it ran in supervisor mode, the
decision was made to use TRAP.
Each DEC OS used EMT in a different way. Consequently, when the RSTS/E
pseudo-hypervisor (it didn't provide full emulation) was written,
hypervisor calls were performed with EMT 377 immediately followed by
another EMT. This was unlikely to occur in any user program (at minimum
you'd have to set up the registers for the second call). An EMT was acted
on by the hypervisor only if it met these conditions (the second EMT was
simply examined, not executed), otherwise it was vectored to the guest OS.
Similarly, RSX/11-M used only EMT 376 and EMT 377, neither of which were
used by RT-11 user programs, making it possible to run a thin RT-11
emulator as a user program that EMTed into RSX to do its work.