PDP-11/05 Fault?

Matt Burke matt at 9track.net
Wed Sep 29 18:31:49 CDT 2021


I've been restoring a PDP-11/05 recently and after replacing several
faulty ICs I have it mostly working. I've run into a bit of a problem
whilst running MAINDEC-11-D0NB (T14 TRAP TEST) though.

The failing instruction sequence is:

7200:   MOV #6340,R0
7204:   MOV R0,(R0)+
7206:   CMP 6340,#6342
7214:   BEQ 7220
7216:   HALT

This halts at 7216 with:
  R0 = 6342
  6340 = 6340

I tried this same set of instructions on a PDP-11/84 and also on Simh
and the result is:
  R0 = 6342
  6340 = 6342

which is what the diagnostic seems to expect.

I've carefully looked through the PDP-11/05 microprogram listing but I'm
having difficulty seeing where this is going wrong. Here is a brief
extract of the microprogram in the context of the MOV R0,(R0)+
instruction along with my interpretation of what I think is going on:

LOC  NXT  * SOURCE MODE 0 (REGISTER), GET SOURCE DATA
201  007  S0-1  B=R[S]; BUT BYTE
007  001  S0-2  R[10]=B; BUT DESTINATION
          / IF IR<5:3> = 2 GOTO D2-1

  B = R0 = 6340    // B = source register
  R10 = B = 6340   // Source data stored in sratch pad register R10

LOC  NXT  * DEST MODE 2 (AUTO-INC) GET DEST DATA, OP AND REPLACE
105  331  D2-1  BA=R[D]; DATAIP; ALBYT
331  341  D2-2  B=R[D]+1+BYTE.BAR
341  200  D2-3  R[D]=B; BUT JSRMP; GOTO D1-2; CKOFF
          / IF INST NOT JMP OR JSR FALL THROUGH TO D1-2

  BA = R0 = 6340    // Bus address = destination register
  B = R0 + 2 = 6342 // Auto-increment and store in B
  R0 = B = 6342     // Update destination register

LOC  NXT  * DEST MODE 1 (REG,DEFERRED) GET DEST DATA, OP AND REPLACE
200  210  D1-2  B=UNIBUS DATA; BUT BYTE
210  143  D1-3  R[11]=B; BUT UNARY
163  334  D1-4  B=R[10] OP B; BUT NOMOD
334  065  D1-5  DATO; ALBYT; CKOFF
065  305  D1-5  DRIVERS=B; GOTO S2-2 (BUT SERVICE)

  B = (6340) = 0    // B = value at location pointed to by bus address
  R11 = B = 0       // R11 is only used for unary instructions
  B = R10 = 6340    // B = source data stored previously in R10
  (6340) = B = 6340 // B is written to the address pointed to by bus address


Where have I gone wrong with this? I can't see from the above how the
value at 6340 can possibly be 6342

Matt



More information about the cctalk mailing list