Purdue Physics PDP-11/23 Restoration Project


I discovered the remains of the Physics department's PDP-11/23 in the attic of the physics building. Since these are great machines I brought it down to my lab to see what was needed to get it working. This may serve as yet another guide for anyone else trying to restore a similar system.

On the left is the PDP-11/23 itself and an RX02 dual 8 inch floppy drive. On the right are two RL02 drives.

From the back one can see the modules plugged into the QBus backplane. From top to bottom they are:
M8186 KDF11-A QBus 11/23 CPU, 18-bit addressing
M8044-DH MSV11-DD QBus 32-kWord 16-bit MOS RAM
M8044-DH MSV11-DD QBus 32-kWord 16-bit MOS RAM
M8029 RXV21 QBus RX02 floppy disk controller
M8013 RLV11 QBus RL01/02 disk controller, 1 of 2
M8014 RLV11 QBus RL01/02 disk controller, 2 of 2
M8012 BDV11 QBus bus terminator, bootstrap and diagnostic ROM

Unfortunately, there is no DLV11 serial line unit and it will be hard to learn very much without one. More on this later...

M8186 - KDF11-A

This is the PDP-11/23 processor board. The innermost of the four 40-pin sockets is a DCF11 hybrid consisting of 23-001C7-AH and 21-15541-AB control and data path chips. The next 40-pin device is a KEF11-AA floating point hybrid consisting of 23-002C7-AA and 23-203C7-AA chips. The third socket is empty and the one closest to the edge of the board is the KDF11-AA processor.

M8044-DH - MSV11-DD

These provide 64 kWords or memory. DIP switches on the top module set to 11111 and set to 10111 on the second module.

M8029 - RXV21

This is the RX02 floppy disk controller. There is an insane number of green wires on this board as if it were some sort of prototype, but I'm guessing it isn't.

M8013/M8014 - RLV11

The DIP switch settings are visible in the picture. A12 is set to 1100100000 while A3 is set to 0011100. The cable connects to a connector mounted on a bracket below the BA11 enclosure into which plugs the BC212-10 cable that is daisy-chained through the RL02 drives:

M8012 - BDV11

Engineering information for this can be found in MP00489_BDV11_Sep77.pdf. Switches S1 and S2 are reported to halt and reboot the system, respectively. Test points J1, J2 and J3 are ground, +5V and +12V, respectively. This has been described on Will's PDP-11/23 information page. The LED's on this module indicate that at least something is working: after rebooting via the switch on the front panel, the red LED's end up in a 0011 state, indicating that the console SLU does not transmit.


No luck getting a DLV11-J from CodeMicro.


Although I don't have a DLV11-J yet, a suitable console is this Zenith Z-19 terminal...

Here is an online Operation Manual. Initially, the vertical refresh timing was bad, so that the bottom row appeared in the middle of the screen and stuff would scroll off the top and re-emerge on the bottom. Opening it up reveals the following...

The logic board, mounted vertically, is based around a Z80 processor, which is the middle 40-pin DIP. The left-most 40-pin DIP is a MC6845 video controller, while the other two are a keyboard decoder and an NS8250 asynchronous communication element (ie, a UART). The horizontal PC boards are the power supply on the right and the analog video driver on the right. This has potentiometers for focus, vertical, horizontal and brightness adjustment. Nothing was obviously broken, and after polishing the tarnished ground connections, straightening some of the electrolytic capacitors and repositioning some of the cabling, the vertical sync problem went away and hasn't returned.

This is WAY nicer than the VT50's that came with the PDP-11/03. If I recall correctly, the VT50 had 80 columns but only 12 rows of characters and it was upper case only.


The DLV11-J arrived in the mail today... it had been configured differently from the factory defaults: jumpers C1,C2 were set to 0 so that channel 3 was not functioning as the console, and channels 1-3 were set to 1200 baud. For inexplicable reasons, I happened to have a wire wrap tool (OK Industries model OK-11-BF) and lots of blue wire, so I reconfigured it so that channel 3 would operate as the console (C1=C2=1) and all channels would run at 9600 baud (0,1,2,3 to N). Jumper V7 was set so that a break on the console would issue a halt.

The cables from the DLV-11 go to a H3171-A distribution panel. Using Digi-Key parts 046-0003-ND, 046-0009-ND and A2662R-14-ND, I wired up a cable to interface with the serial port on a server running Linux.

I inserted a random 8" floppy disk (ie, definitely not a boot disk) in the right-hand drive of the RX02 (drive 0) and hit the restart switch. Giving DY0 at the prompt gives:

So it looks like it would boot if I had a boot disk. The FAULT lights are still lit on the RL02 drives so I don't expect to be booting from them until I figure that out. Meanwhile, there is a lot that can be learned by playing in ODT...

The first test to see if anything is working is just to print a character (an asterisk, octal 052) on the console:

  HACRO V0.3 Monday 12-Dec-2009 05:45

     1                  ;                
     2                  ;  First test - print a single character.
     3                  ;                
     4                             RCSR=177560          ; DLV11-J console base addresses
     5                             RBUF=177562          
     6                             XCSR=177564          
     7                             XBUF=177566          
     9                             .=1000            
    10  001000  112701             MOVB  #052,R1         
    11  001004  105737  $1:        TSTB  @#XCSR          
    12  001010  001775             BEQ   $1              
    13  001012  110137             MOVB  R1,@#XBUF       
    14  001016  000000             HALT                  
    15                             .END                  

      ERRORS : 0
    WARNINGS : 0
Enter the data into memory using ODT:
@1000/000000 112701
001002/000000 52
001004/000000 105737
001006/000000 177564
001010/000000 1775
001012/000000 110137
001014/000000 177566
001016/000000 0
and running it gives:
The asterisk after the 'G' is what got printed... so it works well enough to keep going.