Now that I've pondered the below a bit, I must say that this is a rather
interesting bug. I don't recollect hearing anything that would cause an
instruction to get skipped unintentionally.
The PDP-10 is interesting (or strange) in that it uses skips to convey
the result of various tests and comparisons. You don't use tests to set
PC flags and do conditional jumps on them (like nearly every other
architecture that comes to mind immediately).
I have heard of cranky I/O hardware causing a CONSO (Conditions In and
Skip if One) to think that an I/O operation was complete when it wasn't,
but I don't recall a processor (which you can read conditions on) doing
this. It is true that sometimes checking an asynchronous transfer too
soon can get you the wrong thing, perhaps the paradigmatic example being
the PC-AT bus:
TIN MACRO REG1:REQ,REG2:REQ ;; Define the macro name
Local BusIdle ;; Address to Idle 286 Bus
in REG1,REG2 ;; Actually do the IN
jmp SHORT BusIdle ;; Basically a JMP SHORT +2
BusIdle: ; ; Target of jmp
ENDM ;; End of macro
The JMP SHORT functioned something like a NOP except that it hit the
memory bus. You couldn't trust anything an I/O instruction said unless
you gave it time to catch up. But the 11/60 bug isn't the same thing
and I can only imagine what it took to track it down.
/Very/ interesting.
------------------------------------------------------------------------
On 2/2/22 7:15 AM, Johnny Billquist wrote:
Paul already mentioned it:
Here is the code in RSX:
[11,10]SSTSR.MAC:
CLR @$CPUER ;CLEAR CPU ERROR REGISTER
.IF NDF M$$EXT
NOP ;THIS NOP MUST BE HERE.
;UNLESS THE MICRO CODE BUG IN THE
;11/60 IS FIXED (ECO M7872-00007),
;CLEARING THE CPU ERROR REGISTER
;WILL CAUSE THIS WORD TO BE SKIPPED.
.ENDC
(it actually occurs in two places in the code)
RSTS/E seems to be a bit more fancy and actually tries to detect the
bug and print a message on the console at boot (I assume) if it is
spotted.
I thought I had seen something in 2.11BSD as well, but now I can't
find it.
Johnny