These notes are the first, very simple, tests to be carried out on a dead
PDP-11.
If you find low voltages at the backplane, but normal at the regulators, check
the connectors, especially the MateLock types used on the modular regulators
(type H74X), and the original H720 used on the PDP11/20. On micro PDP-11's
(BA-23 box), check the connectors on the wire loom from the supply to the
backplane.
On
H742 power systems
(used on 21" PDP11/35/40/45/50/55/70), the +15 volt
regulator is prone to failure, and the -15 will also stop working if it goes.
It is a small linear regulator housed in the top of the transformer box. There
is a small fan that often fails, and the regulator cooks.
If the power supplies seem OK, check the AC and DC low signals. These are
bussed via the Unibus (and Q-Bus), and a failure in any system box can
shutdown other parts of the system (depending on the supply design). Again,
use an oscilloscope to check for pulses (it should normally be above 2.5 volts)
since it may be putting the CPU into power fail mode. All the DC voltages may
be OK, but a fault in the AC low logic can still stop the CPU from running.
While you are checking the power supplies, make sure all the fans are running.
Some of the newer machines, like the PDP11/44 use special 150Hz, high volume
fans, with power derived from the power supply. Machines wired for 230/240
volts may use 115 volts fans wired across the power transformer taps.
The BA11-K mounting box, used as an expansion box or CPU box
for some PDP11/34/35, will often fail in the AC/DC low circuit, with the
voltages OK but the AC/DC low signals pulsing due to an open circuit ceramic
capacitor (I forget which one!)
If you get a struck bit, there is still the possibility that there is a faulty
data or address driver on the bus. Try the same test on a different bank of memory,
and then an internal CPU register (like the PAR in 11/23/53/44/53/70/73/83/84/93/94).
If your memory is interleaved, then errors can happen on every other 16 bit
location (address modulus 4).
There is a subtle distinction between testing with a 777 (br .)
and a 5007 (clr pc) in that the latter is a JAM load of the PC, and the 'br'
requires the adder and more of the data paths to be working correctly.
This program will loop until it generates a bus error trap when it tries to
access non-existent memory. Register 0 will contain the top address + 2.
On a PDP11/20, the value will be in the data lights. On the older processors,
examine memory location 777700; on 11/45/50/50 use the register examine switch;
on the LSI based machines, examine $0
This slightly more complicated version will identity the trap location, with the
processor halting with the trap location + 6 in the PC register.
After loading memory with the trap catcher, deposit 777 into location 1000
as start (at location 1000). The processor should loop at 1000.
To check the input register, press the '0', then examine the receive
register 0777562 and it should contain 060.
Needles to say, if you are using any of the Qbus processors, or a PDP11/24,
/44, /84 or /94 then you need the serial console working to do anything.
As simple serial echo test would be:-
Note:- PDP11 guru's will notice that I don't test for transmitter ready, as
there is little point given that you cannot, type fast enough for it to overrun!
Also, remember that the halt instruction is 000000, so a random jump has a
good chance of landing on a memory location containing zeros.
As simple tape copy test:-
Notes:-
If you are getting read errors, then there are a couple of places to look:-
Power Controller
If there is no power getting to the system boxes, then there are several
failure modes for the 861 power controller used on many of the older PDP-11's:-
Power Supplies and Fans
Check all the supply voltages with both a DVM and oscilloscope
on the backplane. The TTL supply should be between 4.9 and 5.1 volts. The other
voltages are less critical. It is not sufficient just to use a DVM, since it
averages the reading, and the supply may in fact have spikes going to zero
volts; also check the ripple and make sure it's less than 200mV on the +5
supply. All PDP-11 models have switch mode power supplies.
Simple Memory Test
The next step is some simple memory tests. The first is to check basic
memory function, and testing for common
core memory
failure modes. Starting
at 0, deposit 4 consecutive zeros, followed by four 177777, and then another
four zeros. Start back
at address zero, and read the numbers back and check that they match. There are
certain types of core memory faults that will pick up or loose memory bits
after reading data.
Simple Processor test
The simplest test is to loop on a single instruction. First, in location
zero deposit 5007, which is a 'clr pc' instruction. Start the processor at
0 and it should loop. Next try 777 in any location and it should also
loop (it's a 'br .' instruction).
Memory Sizing Program
If the simple tests work, the next step is to find out how much memory
is in the system. Without memory management on it will be limited to 56Kb
(or 60Kb with memory boards that extend into the I/O page locations).
Toggle in the following program :-
Location Contents Opcode Comment
000004 000006 Bus Error trap
000006 000000 halt
000010 000012 Reserved instruction trap
000012 000000 halt
000024 000026 Power fail trap
000026 000000 halt
001000 012700 mov #770,sp set the stack
001002 000770
001004 005000 clr r0 set memory address
001006 005720 tst (r0)+ test memory, increment
001010 000776 br .-2 loop
Trap Catcher Program
The idea of a trap catcher is to load all the trap vectors so that a random
trap can be detected. The first program will trap to 0 on any random trap.
Remember on that 11/03 processors (and some other LSI as strap options), that
the line time clock is always running unless disabled by the LTC switch on
the front panel, and this will cause traps to location 0100.
Location Contents Opcode Comment
001000 012706 mov #770,sp set the stack
001002 000770
001004 005000 clr r0 set address pointer
001006 005020 clr (r0)+ zero memory
001010 000776 br .-2 loop until halt
Location Contents Opcode Comment
001000 012706 mov #770,sp set the stack pointer
001002 000770
001004 005000 clr r0 memory pointer
001006 012701 mov #2,r1 trap value
001010 000002
001012 010120 loop: mov r1,(r0)+ set trap vector value
001014 005020 clr (r0)+ set halt instruction in trap
001016 062701 add #4,r1 update r1 for next trap
001020 000004
001022 020600 cmp sp,r0 load up to stack pointer
001024 001372 bne loop
001026 000000 halt
Memory Address Program
The idea of this program is to load every memory location with it's address
and then verify. It should normally halt at location 10. If there is an
error, the address will be in register 1.
Location Contents Opcode Comment
000004 000226 bus error trap
000006 000000
000010 000012 reserved instruction trap
000012 000000
000200 012706 mov #410,sp set the stack
000202 000410
000204 012700 mov #420,r0 set target memory address
000206 000420
000210 010001 mov r0, r1 copy memory address
000212 010111 loop1: mov r1, (r1) write memory
000214 020111 cmp r1, (r1) check write
000216 001401 beq .+2 OK
000220 000000 halt initial check error
000222 005121 com (r1)+ complement the data
000224 000772 br loop1 loop till bus error
000226 012737 mov #6,@#4 reload trap vector
000230 000006
000232 000004
000234 010001 mov r0,r1 copy memory address
000236 005111 loop2: com (r1) complement memory
000240 020111 cmp r1,(r1) recheck memory
000242 001401 beq .+2 OK
000244 000000 halt memory addressing error
000246 005721 tst (r1)+ increment memory address
000250 000772 br loop2
Line Time Clock Interrupt Test
Most of the older PDP11's had a line time clock that would interrupt at mains
frequency (50 or 60Hz). On early LSI-11's, it was not programmable but enabled
by a switch on the front panel. Load the following program (which is just a
trap catcher and interrupt enable), and start. If an early LSI-11's, substitute
000240 for the lines marked #, run the program for a second or two, then
enable the clock.
The program should halt at address 104 (the interrupt vector address is 100,
and the vector is loaded with 102, which then executes a halt at 102, the PC
will then be 104).
Location Contents Opcode Comment
001000 012706 mov #770,sp set the stack pointer
001002 000770
001004 005000 clr r0 memory pointer
001006 012701 mov #2,r1 trap value
001010 000002
001012 010120 loop: mov r1,(r0)+ set trap vector value
001014 005020 clr (r0)+ set halt instruction in trap
001016 062701 add #4,r1 update r1 for next trap
001020 000004
001022 020600 cmp sp,r0 load up to stack pointer
001024 001372 bne loop
# 001026 012737 mov #100,@#ltc enable clock interrupt
# 001030 000100
# 001032 177546
001034 000777 br . loop for ever
If the processor doesn't halt, then your clock isn't running. If it halts at 6,
then the clock register is missing.
Console serial port
Any DL-11 style serial port (including the console)
can be simply tested by depositing 060 (octal) into its
'transmitter buffer ', 0777566 in the case of the
console. A '0' should appear on the console. If it is anything else,
check the baud rate settings.
Location Contents Opcode Comment
001000 012700 mov #kbs, r0
001002 177560
001004 105710 wait: tstb (r0) character received?
001006 100376 bpl wait no, loop
001010 016060 mov 2(r0),6(r0) transmit data
001012 000002
001014 000006
001016 000772 br wait get next character
Unexpected HALTS
On the Q-Bus processors, most of the serial controller cards, and the ones
intergrated into the CPU card, have a strapping or switch option to halt on
break. This can easily be accidentally generated by unplugging or cycling
the power on a terminal connected to the console port.
Bus Problems (Unibus)
There are several pitfalls with configuring Unibus systems:-
If all the terminations and jumpers look fine, and the power supplies test
OK, then you will have to systematically remove bits of the system. The easiest
way is to move the bus terminator closer to the processor, step by step.
Bus Problems (Q-Bus)
The Q-Bus is simpler to configure, but there are problems with the range
of backplane configurations. Again, there are bus grant signals that are
propagated, so there can be problems with empty slots. Check the
following :-
Bootstrap problems
Bootstrap failures can result from media errors, incorrect device names or
units, or the bootstrap itself may be corrupted. Check the device registers
for error bits, or use one of the toggle-in
bootstraps and have it halt before executing
the loaded bootstrap. For RK05 disks, check this
hints section
High speed reader/punch
The high speed reader/punch programming is almost identical to the DL serial
and console interfaces. To test the punch, deposit 0377 into the
paper punch buffer at 777556. The punch should start and punch
one frame of holes. To test the reader, place a tape in it, make sure that
the reader switch is in the on position, and deposit 1 into location
777550. The tape should advance by one frame.
Location Contents Opcode Comment
001000 012700 mov #kbs, r0 I/O registers
001002 177550
001004 005210 loop: inc (r0) initiate read
001006 105710 rwait: tstb (r0) character received?
001010 100376 bpl rwait no, loop
001012 105760 pwait: tstb 2(r0) punch ready ?
001014 000004
001016 100376 br pwait
001020 016060 mov 2(r0),6(r0) punch frame
001022 000002
001024 000006
001026 000766 br loop get next frame