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