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
_______________________________________________
Simh mailing list
[email protected]
http://mailman.trailing-edge.com/mailman/listinfo/simh

Reply via email to