[Simh] FP11 revisions
Bob Supnik
bob at supnik.org
Thu Mar 26 16:22:13 EDT 2015
In the course of debugging the revised FP11, I ran into an interesting
and, as far as I can tell, hitherto undocumented incompatibility in the
various FP11 implementations.
The J11 Programmer's Reference states, and the microcode agrees, that if
enabled, an interrupt on undefined variable occurs prior to instruction
execution. That is, if an undefined variable (-0) is fetched from memory
by any floating point instruction, the rest of the execution flow is
skipped.
The PDP11 Architecture Handbook, for what it's worth, states that if
enabled, an interrupt on undefined variable occurs prior to instruction
execution EXCEPT FOR TSTf, ABSf, and NEGf. I think this is the behavior
of the FP11-B and C for the 11/45 and 11/70, in fact; it's clearly wrong
for J11.
I was debugging using the 11/34 floating point diagnostics. There is an
explicit test for the behavior of -0 with TSTf, but not with ABSf or
NEGf. TSTf indeed takes a floating point IUV interrupt AFTER setting the
floating condition codes, rather than before, like the J11.
The code has always followed the J11. I'm not prepared to conditionalize
those three instructions, because I would need to confirm the behavior
of the FP11-A (11/34), FP11-D (11/44), and FP11-E (11/60), as well as
the F11 (11/23).
The revised code passes the J11 floating point diagnostic, for what it's
worth. It passes two of the 11/34 diagnostics but fails in the third for
the reason indicated above.
/Bob
More information about the Simh
mailing list