-
Notifications
You must be signed in to change notification settings - Fork 0
/
1134.html
400 lines (353 loc) · 22.5 KB
/
1134.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>fritzm.github.io - PDP-11/34</title>
<meta name="description" content="">
<meta name="author" content="Fritz Mueller">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Le HTML5 shim, for IE6-8 support of HTML elements -->
<!--[if lt IE 9]>
<script src="https://fritzm.github.io/theme/html5.js"></script>
<![endif]-->
<!-- Le styles -->
<link href="https://fritzm.github.io/theme/bootstrap.min.css" rel="stylesheet">
<link href="https://fritzm.github.io/theme/bootstrap.min.responsive.css" rel="stylesheet">
<link href="https://fritzm.github.io/theme/local.css" rel="stylesheet">
<link href="https://fritzm.github.io/theme/pygments.css" rel="stylesheet">
<!-- Photoswipe -->
<link rel="stylesheet" href="https://fritzm.github.io/theme/photoswipe.css">
<link rel="stylesheet" href="https://fritzm.github.io/theme/default-skin/default-skin.css">
<script src="https://fritzm.github.io/theme/photoswipe.min.js"></script>
<script src="https://fritzm.github.io/theme/photoswipe-ui-default.min.js"></script>
<script src="https://fritzm.github.io/galleries.js"></script>
<script type="text/javascript">
var pswipe = function(gname, index) {
var pswpElement = document.querySelectorAll('.pswp')[0];
var items = galleries[gname];
var options = { index: index };
var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, options);
gallery.init();
};
</script>
<!-- So Firefox can bookmark->"abo this site" -->
<link href="https://fritzm.github.io/feeds/all.rss.xml" rel="alternate" title="fritzm.github.io" type="application/rss+xml">
</head>
<body>
<div class="navbar">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="https://fritzm.github.io">fritzm.github.io</a>
<div class="nav-collapse">
<ul class="nav">
</ul>
</div>
</div>
</div>
</div>
<div class="container">
<div class="content">
<div class="row">
<div class="span9">
<div class='article'>
<div class="content-title">
<h1>PDP-11/34</h1>
Tue 09 March 2021
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>This spring I worked on repair/restoration of a friend's PDP-11/34. The system was in fairly good shape, but
missing a few bits and pieces and with the usual sorts of issues for 45-year-old kit. Started per usual with
disassembly, cleaning, and inspection. The BA11-K chassis was in pretty decent shape; just a few scratches
requiring some sanding and a little touch-up paint to inhibit future corrosion.</p>
<p>Date codes on the chassis and CPU cards are from 1976, but other components in the chassis are a bit of
mix-and-match (a KY11-LB console interface and a third-party Monolithic systems memory board date from 1981,
and a DL11-W SLU/RTC card is from 1977). Serial number is 2001. There is also a sticker for "OHIO NUCLEAR",
which was an <a href="https://en.wikipedia.org/wiki/Technicare">early manufacturer of CT devices</a>.</p>
<p><img src='/images/pdp11/1134-serial_thumbnail_tall.jpeg' title='PDP-11/34: serial number tag' onclick='pswipe("pdp11",88);'/>
<img src='/images/pdp11/1134-chassis-sticker_thumbnail_tall.jpeg' title='PDP-11/34: BA11-K chassis sticker dating the system to 1976' onclick='pswipe("pdp11",89);'/>
<img src='/images/pdp11/1134-ohio-nuclear_thumbnail_tall.jpg' title='PDP-11/34: partial sticker for 'Ohio Nuclear' -- manufacturers of CT systems' onclick='pswipe("pdp11",90);'/></p>
<p>Foam problems here were limited to a decayed air pre-filter at the front of the chassis and some padding on
the cable retaining bar at the rear. A heat gun and a paint scraper are your friend for removing the leftover
cellophane adhesive strips that were used to secure the foam. For the replacement pre-filter, I opted for 3M
Filtrete carbon pre-filter sheet (part FAPF-UCTF2PAMZ) which comes in sheets large enough to cover the front
of the chassis and is easily cut to size with scissors.</p>
<p>The front panel brackets ended up being a bit of a puzzle to reassemble -- I unfortunately failed to pay close
attention to how exactly the lower fasteners were configured during disassembly. Most of the wisdom out in
the restoration community seems to pertain to a newer, and much more convenient, version of these brackets (or
the ones that arrived on this system were mismatched?) Here's a picture of the brackets that I have, and a
shot of the arrangement I finally opted for for the flange-blinded mounting hole at the bottom of the chassis:
machine screws driven from the back of the bracket with Keps nuts toward the front. I also added some 1/8"
nylon spacers so the pre-filter could be extended across the entire front of the chassis, behind the brackets,
and everything still remains square when tightened up. A serviceable replacement power knob was tracked down
<a href="https://www.millsupply.com/knob-fan-speed-grumman-olson-53777.php?p=324629">here</a>.</p>
<p><img src='/images/pdp11/1134-brackets-2_thumbnail_tall.jpg' title='PDP-11/34: BA11-K front panel mounting bracket' onclick='pswipe("pdp11",91);'/>
<img src='/images/pdp11/1134-brackets-3_thumbnail_tall.jpeg' title='PDP-11/34: BA11-K front panel mounting detail, with nylon spacers to make room for pre-filter' onclick='pswipe("pdp11",92);'/>
<img src='/images/pdp11/1134-brackets-4_thumbnail_tall.jpeg' title='PDP-11/34: Front panel mounted with replacement air pre-filter in place behind brackets and replacement power knob' onclick='pswipe("pdp11",93);'/></p>
<p>The BA11-K chassis has an integrated H765 power supply. The power-controller unit was in pretty good shape,
but I replaced the line cord since the old one had some fairly serious nicks in its outer jacket. Also
replaced cap C1 (50uF) which seemed to be drifting off value. Replaced the .1uF across-the-line caps mounted
on the power transformer with modern X2 safety caps. The DC regulator modules (2x H744 +5V and 1x H745 -15V)
were disassembled and cleaned. Reformed all the large electrolytics, then load tested the reassembled
regulators individually. Nothing out of sorts here except the usual replacement of burnt out incandescent
indicator bulbs.</p>
<p><img src='/images/pdp11/H765-power-controller_thumbnail_tall.jpeg' title='PDP-11/34: H765 power controller module cleaned with new line cord' onclick='pswipe("pdp11",94);'/>
<img src='/images/pdp11/H765-transformer_thumbnail_tall.jpeg' title='PDP-11/34: H765 power supply main transformer, with modern X2 safety caps (orange) installed' onclick='pswipe("pdp11",95);'/>
<img src='/images/pdp11/H744-load-test_thumbnail_tall.png' title='PDP-11/34: Load testing an H744 DC regulator module; 'scope displays switching waveform' onclick='pswipe("pdp11",96);'/></p>
<p>I filled out the system with a near-side M9301 bootstrap-terminator (recent eBay purchase), some G727 "knuckle
buster" grant continuity cards, and an M9302 SACK turnaround far-side terminator. New on this restoration was
a <a href="http://retrocmp.com/projects/unibone">UniBone Linux-to-Unibus bridge</a>, used to emulate storage devices
among other things (more on this in a separate article soon). Checked/adjusted NPR continuity on the
backplane (continuity wire wraps in place for all slots except slot 9, to accommodate the UniBone). Module
utilization as follows:</p>
<style>
.module-utilization {
font-size: smaller;
width: 50em;
margin-left: auto;
margin-right: auto;
margin-top: 1rem;
margin-bottom: 2rem;
border-collapse: true;
}
.module-utilization th {
padding: .5em;
font-weight: normal;
}
.module-utilization tr:first-child th {
width: 16.67%;
}
.module-utilization td {
border: 1px solid black;
padding: .5em;
text-align: center;
}
.module-utilization td:empty {
background-color: LightGray;
}
.module-utilization tr:first-child td:first-child {
border: none;
visibility: hidden;
}
</style>
<table class="module-utilization">
<tr><td></td><th>A</th><th>B</th><th>C</th><th>D</th><th>E</th><th>F</th></tr>
<tr><th>1</td><td colspan=6>M7266 CPU control</td></tr>
<tr><th>2</td><td colspan=6>M7265 CPU data path</td></tr>
<tr><th>3</td><td colspan=2>M9301 boot term</td><td colspan=4>M7859 console</td></tr>
<tr><th>4</td><td colspan=6>Monolithic Systems 303-0158 64 KiB memory</td></tr>
<tr><th>5</td><td colspan=2></td><td colspan=4>M7856 serial / line clock</td></tr>
<tr><th>6</td><td colspan=3></td><td colspan=1>G727</td><td colspan=2></td></tr>
<tr><th>7</td><td colspan=3></td><td colspan=1>G727</td><td colspan=2></td></tr>
<tr><th>8</td><td colspan=3></td><td colspan=1>G727</td><td colspan=2></td></tr>
<tr><th>9</td><td colspan=2>M9302 SACK term</td><td colspan=4>UniBone</td></tr>
</table>
<p>Connected up a VT100 to the serial card, and fired things up. Good signs of life from the front panel, but
the machine immediately halted without producing a boot monitor prompt. Was able to reset the machine from
the front panel, though, and then examine and deposit various memory locations from there.</p>
<p>Boot ROM memory locations were readable, and the contents looked correct. RAM addresses were generally
readable and writable, but bit 10 appeared incorrect (sometimes always set; sometimes always clear). I was
also able to successfully write to the console XBUF register from the front panel and see characters appear on
the VT100.</p>
<p>A bus init from the front panel followed by manually punching in the boot ROM entry point produced a
functional ROM monitor on the VT100. Deposits and examines to RAM done from the boot monitor produced results
identical to those seen using the front panel (same bit 10 problem).</p>
<p>One of the cool features of the KY11-LB console is a maintenance mode that can run Unibus bus cycles on its
own without a CPU. This gives a way to do limited testing of cards in isolation: just set up the M7859 on a
powered, terminated backplane segment and plug in cards to be tested one at a time. Deposits and examines can
then be done using the buttons and display on the front panel.</p>
<p>Interestingly, when running this way with just the console and memory cards in place the bit 10 errors were no
longer apparent. Some other card was apparently corrupting bit 10 on the bus; by checking one at a time the
problem was quickly isolated to the M9301 boot terminator card.</p>
<p>The M9301 drives the implicated bit onto the Unibus via an 8881 bus driver at position E9, as seen below. The
signal coming in from the bottom here is ENAB DATA H, which is meant to enable these drivers only when
the M9301 detects a valid address decode. Verified that data was being incorrectly driven on BUS D10 L at E9
pin 13, regardless of the state of pin 12, indicating a faulty driver. Pulled this, socketed, and replaced
(with a compatible ECG 7439), and the bit 10 problem was fixed.</p>
<p><br><img style="display:block; margin-left:auto; margin-right:auto" src="/images/pdp11/m9301-data-drivers.png" title="Part of the data drivers for the M9301 bootstrap terminator"/><br></p>
<p>There was still some problem with auto-boot to the M9301 monitor, however; the monitor prompt would now begin
to print at power up, but the machine would halt a few characters in. The front panel bus init plus manual
jump to monitor entry point workaround was still working though, so put off further investigation of this
issue until later.</p>
<p>At this point, given the workaround, the system was working well enough to begin loading and running MAINDEC
diagnostics over the serial line with PDP11GUI. Relevant diagnostics, from the PDP-11/34 System User's
Manual:</p>
<p><br><img style="display:block; margin-left:auto; margin-right:auto" src="/images/pdp11/1134-diags.png" title="PDP 11/34 Diagnostics"/><br></p>
<p>DFKAA, DFKAB, and DKFAC all ran without issue. DFKTG, DZKMA, and DZQMC all reported various errors, so
time to look into the memory board.</p>
<p>The board is a Monolithic Systems 303-0158:</p>
<p><img src='/images/pdp11/1134-memory_thumbnail_tall.jpeg' title='PDP-11/34: Monolithic Systems memory card' onclick='pswipe("pdp11",97);'/></p>
<p>I could not find any information on the board on the internet, but much can be figured out by inspection and
testing. First, the board is using 4116 (16Kx1) DRAMs, pretty usual for the era. There is space for 4 banks
of 18; each bank would be 16K words (16 data bits plus two parity bits per word.) Here we see two banks
populated, minus one of the parity chips. So we'd expect to see 32K words (64 KiB) mappable (or 28K words [56
KiB] with address translation disabled, to accommodate the 4K word [8 KiB] I/O page.) The missing parity chip
is unlikely to cause any trouble in this application; in an '11/34, there is no memory parity support without
the optional M7850 parity board installed, and this system does not have one.</p>
<p>One of the capabilities of the Unibone is to probe the full 18-bit Unibus address space, looking for active
pages. These tests indicated that the memory board as configured was responding to the lower 128 KiB of
addresses, even though only 64 KiB was populated. One would suppose that the mapped address range was
configured via the DIP switches on the board. Some experimentation with various switch settings yielded the
following:</p>
<style>
.dipswitch {
font-size: smaller;
width: 30em;
margin-left: auto;
margin-right: auto;
margin-top: 1rem;
margin-bottom: 2rem;
border-collapse: true;
}
.dipswitch th {
padding: .5em;
font-weight: normal;
}
.dipswitch td {
border: 1px solid black;
padding: .5em;
text-align: center;
}
</style>
<table class="dipswitch">
<caption>SW1: Memory start addr, 000000 + values as follows</caption>
<tr><th>7</th><th>6</th><th>5</th><th>4</th><th>3</th><th></th></tr>
<tr><td>0</td><td>.</td><td>.</td><td>.</td><td>.</td><td>400000</td></tr>
<tr><td>.</td><td>0</td><td>.</td><td>.</td><td>.</td><td>200000</td></tr>
<tr><td>.</td><td>.</td><td>0</td><td>.</td><td>.</td><td>100000</td></tr>
<tr><td>.</td><td>.</td><td>.</td><td>0</td><td>.</td><td>040000</td></tr>
<tr><td>.</td><td>.</td><td>.</td><td>.</td><td>0</td><td>020000</td></tr>
</table>
<table class="dipswitch">
<caption>SW2: Memory size, 020000 + values as follows</caption>
<tr><th>4</th><th>3</th><th>2</th><th>1</th><th></th></tr>
<tr><td>0</td><td>.</td><td>.</td><td>.</td><td>200000</td></tr>
<tr><td>.</td><td>0</td><td>.</td><td>.</td><td>100000</td></tr>
<tr><td>.</td><td>.</td><td>0</td><td>.</td><td>040000</td></tr>
<tr><td>.</td><td>.</td><td>.</td><td>0</td><td>020000</td></tr>
</table>
<p>After setting the switches appropriately for the amount of memory physically present, memory test errors went
away and the MAINDEC memory diagnostics (excepting parity tests) also ran successfully.</p>
<p>So the Last thing to fix was the problem with the boot monitor at startup. For this, the boot ROM card went
back out on an extender so I could get at it with a logic analyzer.</p>
<p><img src='/images/pdp11/1134-M9301_thumbnail_tall.jpeg' title='A troublesome M9301 boot ROM card in a PDP-11/34, out on a card extender for troubleshooting. This one was acting strangely at power-up; the problem is actually visible in this picture...' onclick='pswipe("pdp11",98);'/></p>
<p>A PDP-11 generates power down and power up traps, through location 024, based on transitions of the AC LO and
DC LO Unibus signals. In handling this trap, the processor first reads the PC from location 024, then the PSW
from location 026. Many PDP-11s had core memory or battery-backed RAM; this allowed for orderly recovery from
power failure events.</p>
<p><img style="display:block; margin-left:auto; margin-right:auto" src="/images/pdp11/ACLO-DCLO.png" title="Power up/down signals"/></p>
<p>PDP-11 boot ROM cards like the M9301 or its younger cousin the M9312 use a hack to obtain control at boot.
They monitor AC LO and DC LO, and when detecting a boot condition they jam higher order address bits on the
Unibus for a the first couple bus cycles. This causes the PC and PSW to be fetched from locations within the
address space of the boot ROM card. Here is most of the circuitry responsible for this:</p>
<p><img style="display:block; margin-left:auto; margin-right:auto" src="/images/pdp11/M9301-boot-logic.png" title="M9301 boot logic"/></p>
<p>The bus drivers that jam the address bus are seen on the right. The central player here is E21, a 9602
one-shot. CLEAR ADDR L is supposed to arrive after the first two bus cycles (fetch of PC and PSW) and
release the bus; the one-shot is set up to timeout after about 300ms and release the bus in any case.</p>
<p>On the logic analyzer, we can see an issue here:</p>
<p><img style="display:block; margin-left:auto; margin-right:auto" src="/images/pdp11/M9301-bad-boot.png" title="M9301 at boot with bus release issue"/></p>
<p>MSYN delimits bus cycles mastered by the CPU. Here we can see that CLEAR ADDR L never arrives, and so the
higher-order address bits remained jammed by the M9301 for the full duration of the one-shot timeout. This is
okay for the first few instructions, which are executing out of the ROM anyway, but things quickly go awry...</p>
<p>Here is the circuitry responsible for CLEAR ADDR L:</p>
<p><img style="display:block; margin-left:auto; margin-right:auto" src="/images/pdp11/M9301-transfer-logic.png" title="M9301 bus release logic"/></p>
<p>The desired pulse is mediated by 270 uF capacitor C36 in one leg of gate E20, so this is a good thing to check
first, and... it is actually missing from the board! (Visible in the M9301 gallery picture above.) Replaced
this cap, and now we are in good shape:</p>
<p><img style="display:block; margin-left:auto; margin-right:auto" src="/images/pdp11/M9301-repaired-boot.png" title="M9301 at boot with bus release issue repaired"/></p>
<p>With this, the machine is fully repaired. Spent a little time with it, booting and running various operating
systems from emulated storage on the Unibone card. Frieda also approves:</p>
<p><img src='/images/pdp11/1134-frieda_thumbnail_tall.jpeg' title='Frieda approved PDP-11/34' onclick='pswipe("pdp11",99);'/></p></div>
<hr>
</div>
</div>
<div class="span3">
<div class="well" style="padding: 8px 0; background-color: #FBFBFB;">
<ul class="nav nav-list">
<li class="nav-header">
Site
</li>
<li><a href="https://fritzm.github.io/archives.html">Archives</a>
<li><a href="https://fritzm.github.io/tags.html">Tags</a>
<li><a href="https://fritzm.github.io/feeds/all.rss.xml" rel="alternate">RSS feed</a></li>
</ul>
</div>
<div class="well" style="padding: 8px 0; background-color: #FBFBFB;">
<ul class="nav nav-list">
<li class="nav-header">
Categories
</li>
<li><a href="https://fritzm.github.io/category/arcade-games.html">Arcade Games</a></li>
<li><a href="https://fritzm.github.io/category/math.html">Math</a></li>
<li><a href="https://fritzm.github.io/category/micros.html">Micros</a></li>
<li><a href="https://fritzm.github.io/category/pdp-11.html">PDP-11</a></li>
<li><a href="https://fritzm.github.io/category/programming.html">Programming</a></li>
<li><a href="https://fritzm.github.io/category/radios.html">Radios</a></li>
</ul>
</div>
<div class="social">
<div class="well" style="padding: 8px 0; background-color: #FBFBFB;">
<ul class="nav nav-list">
<li class="nav-header">
Social
</li>
<li><a href="http://facebook.com/fritzmueller">facebook</a></li>
<li><a href="http://instagram.com/infrafritz">Instagram</a></li>
<li><a href="http://www.linkedin.com/pub/fritz-mueller/a/679/62/">LinkedIn</a></li>
<li><a href="http://jsfiddle.net/user/fritzm/fiddles/">JSFiddle</a></li>
<li><a href="https://github.com/fritzm">GitHub</a></li>
</ul>
</div>
</div>
</div>
</div> </div>
<footer>
<br />
<p><a href="https://fritzm.github.io">fritzm.github.io</a> © Fritz Mueller 2023</p>
</footer>
</div> <!-- /container -->
<!-- Photoswipe -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">
<div class="pswp__bg"></div>
<div class="pswp__scroll-wrap">
<div class="pswp__container">
<div class="pswp__item"></div>
<div class="pswp__item"></div>
<div class="pswp__item"></div>
</div>
<div class="pswp__ui pswp__ui--hidden">
<div class="pswp__top-bar">
<div class="pswp__counter"></div>
<button class="pswp__button pswp__button--close" title="Close (Esc)"></button>
<button class="pswp__button pswp__button--share" title="Share"></button>
<button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>
<button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
<div class="pswp__preloader">
<div class="pswp__preloader__icn">
<div class="pswp__preloader__cut">
<div class="pswp__preloader__donut"></div>
</div>
</div>
</div>
</div>
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
<div class="pswp__share-tooltip"></div>
</div>
<button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
</button>
<button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
</button>
<div class="pswp__caption">
<div class="pswp__caption__center"></div>
</div>
</div>
</div>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script src="https://fritzm.github.io/theme/bootstrap-collapse.js"></script>
</body>
</html>