PDP-11/45: Reversing a vintage DL11 hack
Fri 27 November 2020 by Fritz MuellerI recently had need to assess and repair several DL11 serial interfaces in my stock of spares. One of these had had some sort of end-user hack applied; in the course of putting the board back to factory condition, I did some analysis of the hack and its intended purpose, documented here.
Easy enough to beep this out and reverse to a schematic:
So, the hack appears to dynamically alter the CSR address and interrupt vector of the card, choosing between two hard-wired presets, based on whether P1A/P1B are connected together or not.
The CSR jumpers on a stock DL11 operate with pull-ups upstream of the address decode logic, so these can be directly driven by the hack so long as the jumpers for the bits-to-be-hacked are left open on the board. The vector address bits, however, must be driven by the DL11 onto to the Unibus contingent on an appropriate global enable. On a stock DL11, drivers for all configurable vector bits are activated by a single global enable, and jumpers downstream of the drivers control which of these activated bits will be admitted to bus. So, for the vector address part of the hack to function, hack control must be asserted instead of the global enable for each of the to-be-driven bits, and the corresponding jumpers for these bits must be left in. And indeed, upon inspection of the DL11 there are trace cuts that have been done (marked here with "X") to lift the global enable and allow individual hack control of each of the affected bits:
Last, we can look at the board jumpering and the wiring of the hack to determine the specific CSR and vector addresses at play:
A11 | A10 | A9 | A8 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
P1 Open | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 776510 |
P1 Closed | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 777560 |
V8 | V7 | V6 | V5 | V4 | V3 | V2 | V1 | V0 | ||
---|---|---|---|---|---|---|---|---|---|---|
P1 Open | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 310 |
P1 Closed | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 060 |
We see from these specific addresses that closing the contacts of P1 would dynamically re-jumper the board from assignment as the 2nd non-console interface to assignment as the console interface. So perhaps this was once used (in conjunction with another similarly hacked interface?) to swap console terminals with the flip of a single switch.