-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex6.html
745 lines (596 loc) · 47 KB
/
index6.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
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>fritzm.github.io</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">
<a href="https://fritzm.github.io/diagnostics-3.html"><h1>PDP-11/45: Diagnostics III - CKBME0</h1></a>
Sat 09 July 2016
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Okay, digging into the CKBME0 traps diagnostic now in more detail. Here I've transcribed the source of the failing
test from the older available diagnostic listing, then re-assembled it at the address matching the more modern
binary. This makes it a little easier to follow along while debugging the newer binary:</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre> 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</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="nt">013604</span> <span class="nt">000230</span> <span class="nt">SPL</span> <span class="nt">0</span> <span class="o">;</span><span class="nt">SET</span> <span class="nt">PRIORITY</span> <span class="nt">LEVEL</span> <span class="nt">0</span>
<span class="nt">013606</span> <span class="nt">012706</span> <span class="nt">000500</span> <span class="nt">MOV</span> <span class="p">#</span><span class="nn">STKPTR</span><span class="o">,%</span><span class="nt">6</span> <span class="o">;</span><span class="nt">SET</span> <span class="nt">STACK</span> <span class="nt">PTR</span>
<span class="nt">013612</span> <span class="nt">012737</span> <span class="nt">013650</span> <span class="nt">000064</span> <span class="nt">MOV</span> <span class="p">#</span><span class="nn">TTY7A</span><span class="o">,@</span><span class="p">#</span><span class="nn">TPVEC</span> <span class="o">;</span><span class="nt">LOAD</span> <span class="nt">TTY</span> <span class="nt">INTERRUPT</span> <span class="nt">VECTOR</span>
<span class="nt">013620</span> <span class="nt">012737</span> <span class="nt">013644</span> <span class="nt">000014</span> <span class="nt">MOV</span> <span class="p">#</span><span class="nn">TTY7B</span><span class="o">,@</span><span class="p">#</span><span class="nn">BPTVEC</span> <span class="o">;</span><span class="nt">LOAD</span> <span class="s1">'T'</span> <span class="nt">BIT</span> <span class="nt">TRAP</span> <span class="nt">VECTOR</span>
<span class="nt">013626</span> <span class="nt">005002</span> <span class="nt">CLR</span> <span class="o">%</span><span class="nt">2</span> <span class="o">;</span><span class="nt">CLEAR</span> <span class="nt">INDICATOR</span>
<span class="nt">013630</span> <span class="nt">052737</span> <span class="nt">000100</span> <span class="nt">177564</span> <span class="nt">BIS</span> <span class="p">#</span><span class="nn">100</span><span class="o">,@</span><span class="p">#</span><span class="nn">TTCSR</span> <span class="o">;</span><span class="nt">ALLOW</span> <span class="nt">INTERRUPT</span> <span class="nt">INTERRUPT</span> <span class="nt">OCCURS</span> <span class="nt">AFTER</span>
<span class="o">;</span><span class="nt">THIS</span> <span class="nt">INSTRUCTION</span> <span class="o">&</span> <span class="nt">BEFORE</span> <span class="nt">NEXT</span>
<span class="nt">013636</span> <span class="nt">000001</span> <span class="nt">WAIT1</span><span class="o">:</span> <span class="nt">WAIT</span> <span class="o">;</span><span class="nt">WAIT</span> <span class="nt">FOR</span> <span class="nt">AN</span> <span class="nt">INTERRUPT</span>
<span class="nt">013640</span> <span class="nt">005202</span> <span class="nt">INC</span> <span class="o">%</span><span class="nt">2</span> <span class="o">;</span><span class="nt">INCREMENT</span> <span class="nt">INDICATOR</span>
<span class="nt">013642</span> <span class="nt">000000</span> <span class="nt">HLT</span> <span class="o">;</span><span class="nt">ERROR</span><span class="o">!</span> <span class="nt">NO</span> <span class="s1">'T'</span> <span class="nt">TRAP</span> <span class="nt">AFTER</span> <span class="nt">INTERRUPT</span>
<span class="nt">013644</span> <span class="nt">000000</span> <span class="nt">TTY7B</span><span class="o">:</span> <span class="nt">HLT</span> <span class="o">;</span><span class="nt">ERROR</span><span class="o">!</span> <span class="s1">'T'</span> <span class="nt">BIT</span> <span class="nt">TRAPPED</span> <span class="nt">OUT</span> <span class="nt">OF</span> <span class="nt">WAIT</span>
<span class="nt">013646</span> <span class="nt">000424</span> <span class="nt">BR</span> <span class="nt">TTY7EX</span> <span class="o">;</span><span class="nt">EXIT</span> <span class="nt">TEST</span>
<span class="nt">013650</span> <span class="nt">012737</span> <span class="nt">000040</span> <span class="nt">177566</span> <span class="nt">TTY7A</span><span class="o">:</span> <span class="nt">MOV</span> <span class="p">#</span><span class="nn">40</span><span class="o">,@</span><span class="p">#</span><span class="nn">177566</span> <span class="o">;</span><span class="nt">TYPE</span> <span class="nt">SPACE</span> <span class="nt">CHAR</span>
<span class="nt">013656</span> <span class="nt">012737</span> <span class="nt">013674</span> <span class="nt">000064</span> <span class="nt">MOV</span> <span class="p">#</span><span class="nn">TTY7C</span><span class="o">,@</span><span class="p">#</span><span class="nn">TPVEC</span> <span class="o">;</span><span class="nt">REPOSITION</span> <span class="nt">TTY</span> <span class="nt">INT</span> <span class="nt">VECTOR</span>
<span class="nt">013664</span> <span class="nt">012766</span> <span class="nt">000020</span> <span class="nt">000002</span> <span class="nt">MOV</span> <span class="p">#</span><span class="nn">20</span><span class="o">,</span><span class="nt">2</span><span class="o">(</span><span class="nt">6</span><span class="o">)</span> <span class="o">;</span><span class="nt">PUT</span> <span class="s1">'T'</span> <span class="nt">BIT</span> <span class="nt">IN</span> <span class="nt">RETURN</span> <span class="nt">STATUS</span>
<span class="nt">013672</span> <span class="nt">000006</span> <span class="nt">RTT</span> <span class="o">;</span><span class="nt">RETURN</span> <span class="nt">TO</span> <span class="nt">WAIT</span> <span class="nt">WITH</span> <span class="s1">'T'</span> <span class="nt">BIT</span> <span class="nt">SET</span>
<span class="o">;</span><span class="nt">AND</span> <span class="nt">WAIT</span> <span class="nt">FOR</span> <span class="nt">TTY</span> <span class="nt">INTERRUPT</span> <span class="nt">WHEN</span> <span class="nt">NULL</span>
<span class="o">;</span><span class="nt">CHARACTER</span> <span class="nt">IS</span> <span class="nt">TYPED</span>
<span class="nt">013674</span> <span class="nt">012737</span> <span class="nt">013716</span> <span class="nt">000014</span> <span class="nt">TTY7C</span><span class="o">:</span> <span class="nt">MOV</span> <span class="p">#</span><span class="nn">TTY7D</span><span class="o">,@</span><span class="p">#</span><span class="nn">BPTVEC</span> <span class="o">;</span><span class="nt">REPOINT</span> <span class="s1">'T'</span> <span class="nt">BIT</span> <span class="nt">TRAP</span> <span class="nt">VECTOR</span> <span class="nt">AFTER</span>
<span class="o">;</span><span class="nt">TTY</span> <span class="nt">HAS</span> <span class="nt">INTERRUPTED</span>
<span class="nt">013702</span> <span class="nt">005037</span> <span class="nt">177564</span> <span class="nt">CLR</span> <span class="o">@</span><span class="p">#</span><span class="nn">TTCSR</span> <span class="o">;</span><span class="nt">DISABLE</span> <span class="nt">INTERRUPT</span> <span class="nt">ENABLE</span>
<span class="nt">013706</span> <span class="nt">012737</span> <span class="nt">000015</span> <span class="nt">177566</span> <span class="nt">MOV</span> <span class="p">#</span><span class="nn">15</span><span class="o">,@</span><span class="p">#</span><span class="nn">177566</span>
<span class="nt">013714</span> <span class="nt">000006</span> <span class="nt">RTT</span> <span class="o">;</span><span class="nt">RETURN</span> <span class="nt">TO</span> <span class="nt">INST</span> <span class="nt">FOLLOWING</span> <span class="nt">WAIT</span> <span class="nt">WITH</span> <span class="s1">'T'</span>
<span class="o">;</span><span class="nt">BIT</span> <span class="nt">SET</span>
<span class="nt">013716</span> <span class="nt">000240</span> <span class="nt">TTY7D</span><span class="o">:</span> <span class="nt">NOP</span>
<span class="nt">013720</span> <span class="nt">012737</span> <span class="nt">000016</span> <span class="nt">000014</span> <span class="nt">TTY7EX</span><span class="o">:</span> <span class="nt">MOV</span> <span class="p">#</span><span class="nn">BPTVEC</span><span class="o">+</span><span class="nt">2</span><span class="o">,@</span><span class="p">#</span><span class="nn">BPTVEC</span><span class="o">;</span><span class="nt">RESTORE</span> <span class="nt">VECTORS</span> <span class="nt">TO</span> <span class="nt">HALT</span> <span class="nt">AT</span>
<span class="nt">013726</span> <span class="nt">012737</span> <span class="nt">000066</span> <span class="nt">000064</span> <span class="nt">MOV</span> <span class="p">#</span><span class="nn">66</span><span class="o">,@</span><span class="p">#</span><span class="nn">TPVEC</span> <span class="o">;</span><span class="nt">VECTOR</span> <span class="o">+</span><span class="nt">2</span>
<span class="nt">013734</span> <span class="nt">005302</span> <span class="nt">DEC</span> <span class="o">%</span><span class="nt">2</span> <span class="o">;</span><span class="nt">CHECK</span> <span class="nt">INDICATOR</span>
<span class="nt">013736</span> <span class="nt">001401</span> <span class="nt">BEQ</span> <span class="o">.+</span><span class="nt">4</span>
<span class="nt">013740</span> <span class="nt">000000</span> <span class="nt">HLT</span> <span class="o">;</span><span class="nt">ERROR</span><span class="o">!</span> <span class="nt">DID</span> <span class="nt">NOT</span> <span class="nt">DO</span> <span class="nt">INC</span> <span class="nt">INST</span> <span class="nt">AFTER</span> <span class="nt">INTERRUPT</span>
</pre></div>
</td></tr></table>
<p>This test seems to be designed to return from an interrupt handler to a WAIT instruction, with the T bit set in
the PSW and a serial xmit interrupt pending. It verifies that the WAIT still "waits" in this circumstance. It also
verifies that a trace trap <em>does</em> occur after the immediately following INC instruction when the xmit interrupt
subsequently terminates the WAIT.</p>
<p>One potential problem with this test concerns the apparent assumption that enabling the xmit interrupt will cause an
immediate trap before the subsequent WAIT instruction. This is true if the serial transmitter is empty, but if the
transmitter is ever full/busy when this code is entered this assumption may not hold. Not sure yet if this will ever
be a problem for this test given the surrounding code.</p>
<p>In any case, as currently written this routine fails about 50% of the time on my 11/45. The failure mode
is that the processor sits at the WAIT instruction, (address display 013640, PC+2). Intervention with the
console halt switch (halt then back to enabl) breaks the WAIT microcode loop; console cont then takes us to the halt
at 013740 (address display 013742, PC+2).</p>
<p>The fact that the routine is tailing out through the halt at 013740 without hitting the halts at 013642 or 013644 is
interesting; this implies that the second serial xmit interrupt to TTY7C has executed. This is verified by examining
the break trap from the console after the test hangs up on the WAIT -- in the failure case, it is already reset to
point to TTY7D. So the failure mode seems to be that the return from the second xmit interrupt sometimes goes to the
WAIT instead of the subsequent INC.</p>
<p>Here is the microcode flow around the WAIT instruction. The horizontal line across the top is the A fork:</p>
<p><img src='/images/pdp11/wait-microcode.png'/></p>
<p>Using the KM11, in the failure case I can see the T bit set and the microcode looping through states WAT.00, WAT.20, WAT.30, WAT.11, which seems expected. I have also verified that executing a WAIT <em>without</em> the T bit set
loops through states WAT.00 and WAT.10.</p>
<p>Lastly, running on the RC maintenance clock at about half the usual clock frequency makes the failure case happen
almost 100% of the time.</p>
<p>Next I'll be needing to learn more about the BRQ logic, and in particular the mechanism by which the second xmit
interrupt nominally causes INTRF to be asserted. Understanding that should lead me to some things to check with the
logic probe and analyzer...</p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/diagnostics-2.html"><h1>PDP-11/45: Diagnostics II</h1></a>
Mon 04 July 2016
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Investigated some of the halted diagnostics a bit today. CKBGB0 (SPL instruction test) was halting at 001404.
Looking at the sources, the diagnostic was waiting at this point for a transmit interrupt from the DL11 that didn't
seem to be arriving. Some troubleshooting turned up that the vector address on my DL11 was jumpered incorrectly. Fixed this, and the diagnostic now passes.</p>
<p>CKBME0 (11/45 traps test) is a bit more complicated. The halt address of 005320 here indicates that the floating
point coprocessor is detected but not trapping per design. Pulled the floating point cards for now; the diagnostic
now runs through several passes successfully, but regularly hangs up at 013640. Hitting the halt
switch when it is hung up displays 000342 in the address lights, then with a couple continues it will start up again,
run a bunch more passes, but sooner or later hang up at 013640 again with the same behavior. This behavior is a
little more difficult to decode because the diagnostic itself is more complicated, and also the binary available from
classicmp is a later revision than the available source code so the addresses don't quite match up. So I'll need to
spend a little more time reading the diagnostic sources and examining the disassembly in PDP11GUI to make sense of this
one. And it looks like there will be some downstream work to debug the floating point unit as well; I haven't studied
its design yet at all.</p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/diagnostics.html"><h1>PDP-11/45: Diagnostics with PDP11GUI</h1></a>
Sun 03 July 2016
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Okay, now that serial is straightened out, on to running diagnostic tests via PDP11GUI. PDP11GUI itself, as well as
a thorough and useful database of DEC diagnostic programs, are available at <a href="http://www.retrocmp.com/tools">http://www.retrocmp.com/tools</a>.</p>
<p>Since my home computer is a MacBook, I had intended to run PDP11GUI under Wine. I ran into a problem with this where
PDP11GUI under Wine could not generate its pre-processed machine description temp file, seemingly because of some
incompatible behavior wrt. multiple backslashes in pathnames. Rather than fight with this too long, I just sprang for
a Windows 10 license and installed a Windows 10 VM; it will come in handy for other Windows-only tools that have
been tweaky to use under Wine as well.</p>
<p>With PDP11GUI up and running under Windows, results of the initial set of 11/45 CPU diagnostics were very encouraging!
In summary:</p>
<style>
.diaglist { display: inline; border-collapse: collapse; margin-right: 1em; }
.diaglist caption { font-weight: bold; }
.diaglist tr:nth-child(even) { background-color: #f2f2f2; }
.diaglist th, .diaglist td { padding: 5px; }
.diaglist td { border: 1px solid lightgray; font-family: Menlo,Consolas,monospace; }
</style>
<table class="diaglist">
<thead>
<tr><th>Diagnostic</th><th>BEL</th><th>Description</th><th>Status</th></tr>
</thead>
<tbody>
<tr><td>CKBAB0.BIC</td><td>002562</td><td>SXT instruction</td><td>pass</td></tr>
<tr><td>CKBBB0.BIC</td><td>003604</td><td>SOB instruction</td><td>pass</td></tr>
<tr><td>CKBCB0.BIC</td><td>007410</td><td>XOR instruction</td><td>pass</td></tr>
<tr><td>CKBDC0.BIC</td><td>007262</td><td>MARK instruction</td><td>pass</td></tr>
<tr><td>CKBEC0.BIC</td><td>002212</td><td>RTI/RTT instructions</td><td>pass</td></tr>
<tr><td>CKBFD0.BIC</td><td>002272</td><td>stack limit</td><td>pass</td></tr>
<tr><td>CKBGB0.BIC</td><td>001446</td><td>SPL instruction</td><td>halt 001404</td></tr>
<tr><td>CKBHB0.BIC</td><td>003762</td><td>11/45 registers</td><td>pass</td></tr>
<tr><td>CKBIB0.BIC</td><td>013746</td><td>ASH instruction</td><td>pass</td></tr>
<tr><td>CKBJA0.BIC</td><td>014722</td><td>ASHC instruction</td><td>pass</td></tr>
<tr><td>CKBKA0.BIC</td><td>014430</td><td>MUL instruction</td><td>pass</td></tr>
<tr><td>CKBLA0.BIC</td><td>011574</td><td>DIV instruction</td><td>pass</td></tr>
<tr><td>CKBME0.BIC</td><td>016000</td><td>11/45 traps</td><td>halt 005320</td></tr>
<tr><td>CKBNC0.BIC</td><td>004702</td><td>PIRQ instruction</td><td>pass</td></tr>
<tr><td>CKBOA0.BIC</td><td>013640</td><td>11/45 states</td><td>halt 000610</td></tr>
</tbody>
</table>
<p>Note that these tests are written to output an ASCII BEL to the console on each successful pass. The terminal
built in to PDP11GUI doesn't sound when given a BEL, however, so it is convenient to patch the BEL literal in the
programs to a visible character (e.g. 000052, ASCII '*') before running them. This may be done in the memory loader
window in PDP11GUI after "Load" but before "Deposit all". The patch address I identified for each diagnostic is
listed in the table above as well for convenience.</p>
<p>So, out of this initial set of tests, only three halts to investigate. I'll be posting more information here as I look
further into these.</p>
<p>Regarding the backplane SPC issue discussed in the previous post: Marty from the vcfed.org forum did some investigation
of his 11/45, and reports that he does have +15V (actually +12V on his system) distributed to pin CU1 on slots
26-28. It seems to be wired over from slot 15 on his system, but it is not clear whether this was a factory wire,
an ECO, or a user mod.</p>
<p>Marty's 11/45 also has no power distributed to CA1 on this slots, so it's really looking to me like the reference
to that on page 5-10 of the 11/45 maintenance manual is a misprint. Thanks to Marty for checking all this out! I'd be
curious to hear from any other 11/45 owners out there regarding wiring of CU1 and CA1 on slots 26-28 in their systems.</p>
<p><img src='/images/pdp11/pdp11gui_thumbnail_tall.jpg' title='PDP11GUI hooked up and running; ready to start downloading and running diagnostics' onclick='pswipe("pdp11",34);'/></p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/serial-console.html"><h1>PDP-11/45: Serial console and backplane SPC slots</h1></a>
Sun 26 June 2016
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Hit a snag on the way to getting PDP11GUI hooked up: while the M9301 console emulator was working fine with the VT52,
I could not get serial communication to my laptop (MacBook Pro + Keyspan USA-19HS USB serial) to work as expected. Some
detective work showed that the voltages from the EIA output drivers on the DL11 were way out of whack (+3V for mark,
which should have been a negative voltage). Somehow the VT52 was able to still make sense out of this signaling,
though the laptop was not.</p>
<p>Some investigation of power to the DL11, which was sitting in one of the backplane SPC slots (26-28), showed that there
was no distribution of +15V to pin CU1 of these slots where the DL11 was expecting it. So that explained the bad
driver output voltages. Moved the DL11 over to the DD11 expansion backplane which does have +15V to that pin, and
serial to/from the laptop started working fine.</p>
<p>So this raises a bit of a question about the SPC slots on the 11/45 backplane. Was EIA console serial from these slots
ever supported? The configurations listed in the 11/45 engineering prints call out only DL11-A, the 20mA current
loop version, which doesn't have EIA drivers and thus doesn't need the +15V supply, so maybe not. Was +15V distribution
perhaps added to these slots in subsequent revisions or via an ECO? I'd like to track down a wire list for this or
later revision 11/45 backplanes, and/or a comprehensive list of KB11-A ECOs, but so far haven't seen traces of either
anywhere out there.</p>
<p>One other curiosity of these SPC slots that came up while investigating this: the power distribution table in
the 11/45 maintenance manual, EK-11045-MM-007, page 5-10, implies that +15V should be distributed to the SPC slots on
CA1. This is suspicious to me (maybe a typo?) because all other SPC pinouts that I have seen use this pin and CB1
as NPR in/out. And in checking my backplane, there is no power distribution to those pins. But slots 27 and 28
(Unibus B) do have their CA1 pins bridged to one another, and their CB1 pins bridged to one another, with what look like
factory installed wire wraps. This also seems unusual for NPR/NPG. So, some mysteries remain about these slots...</p>
<p>In other news, the clock oscillator on the VT52 has given out, so that's down now until I can find a replacement. They
are out of production and aren't easy to track down, but I do have one lead to follow so far.</p>
<p>Also, I pulled the suspected failed subsidiary ALU control ROM, tested it in isolation, and verified that it had indeed
failed. This card is just a spare for me, but I'd like to go ahead and repair it since the fault is isolated. With
some help from the classiccmp mailing list (thanks guys!) I have a recommendation for some vintage PROM programmers to
stalk on eBay, and some compatible parts, that would allow me to blow a replacement and make the repair.</p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/m9301-running.html"><h1>PDP-11/45: Running the M9301 console emulator</h1></a>
Thu 23 June 2016
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Replacement DRAMs showed up. Pulled and replaced the two faulty ones on the MS11. Pic below -- you can see the
replacements are socketed, and are the TI parts instead of the original ITT. Full address space is working now! Now
that bank 0 is repaired, trap vectors can conceivably work.</p>
<p>Jumpered and configured a DL11-E serial card for use as console, slotted in an M9301-YB bootstrap terminator, connected
up the VT52, powered up, and off it goes straight to the console emulator! That means the basic instruction set tests
in the boot ROM are passing as well, which is great news.</p>
<p>Next step will be to hook up PDP11GUI and load some more in-depth diagnostics, in order to shake out any
remaining bugs with the CPU and memory system. Will slot in the FPU at that point for testing and debug as well.</p>
<p><img src='/images/pdp11/ms11-repaired_thumbnail_tall.jpg' title='MS11 with two bad 4116 RAMs pulled, socketed, and replaced' onclick='pswipe("pdp11",32);'/>
<img src='/images/pdp11/m9301-running_thumbnail_tall.jpg' title='VT52 attached, and running now in the M9301 bootstrap monitor!' onclick='pswipe("pdp11",33);'/></p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/cpu-debug-5.html"><h1>PDP-11/45: CPU debug V -- chasing lights!</h1></a>
Sun 19 June 2016
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Tracked down the source of the inverted result after register-to-register move problem on GRA: outputs of the
subsidiary ALU control ROM E74 on pins 6 and 7 are floating. Will need some closer inspection to determine if this
is a board fault or a chip fault. In the meantime, I have a spare GRA which I had been reluctant to try because it
has a "bad" sticker on it... Decided to give it a try anyway, and it seems to be working much better than the one I
have been debugging.</p>
<p>Now have enough of the CPU debugged to toggle in and run a simple light chaser program:</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2
3
4
5
6
7
8</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="nt">000000</span> <span class="nt">013700</span> <span class="nt">177570</span> <span class="nt">L0</span><span class="o">:</span> <span class="nt">MOV</span> <span class="o">@</span><span class="p">#</span><span class="nn">177570</span><span class="o">,</span> <span class="nt">R0</span> <span class="o">;</span><span class="nt">LOAD</span> <span class="nt">COUNT</span> <span class="nt">FROM</span> <span class="nt">SWITCH</span> <span class="nt">REGISTER</span>
<span class="nt">000004</span> <span class="nt">005300</span> <span class="nt">L1</span><span class="o">:</span> <span class="nt">DEC</span> <span class="nt">R0</span> <span class="o">;</span><span class="nt">COUNT</span> <span class="nt">DOWN</span>
<span class="nt">000006</span> <span class="nt">001376</span> <span class="nt">BNE</span> <span class="nt">L1</span> <span class="o">;</span><span class="nt">LOOP</span> <span class="nt">UNTIL</span> <span class="nt">ZERO</span>
<span class="nt">000010</span> <span class="nt">006301</span> <span class="nt">ASL</span> <span class="nt">R1</span> <span class="o">;</span><span class="nt">SHIFT</span> <span class="nt">DISPLAY</span> <span class="nt">VALUE</span>
<span class="nt">000012</span> <span class="nt">001002</span> <span class="nt">BNE</span> <span class="nt">L2</span> <span class="o">;</span><span class="nt">SKIP</span> <span class="nt">AHEAD</span> <span class="nt">IF</span> <span class="nt">NOT</span> <span class="nt">SHIFTED</span> <span class="nt">OUT</span>
<span class="nt">000014</span> <span class="nt">012701</span> <span class="nt">000001</span> <span class="nt">MOV</span> <span class="p">#</span><span class="nn">1</span><span class="o">,</span><span class="nt">R1</span> <span class="o">;</span><span class="nt">ELSE</span> <span class="nt">RELOAD</span>
<span class="nt">000020</span> <span class="nt">010137</span> <span class="nt">177570</span> <span class="nt">L2</span><span class="o">:</span> <span class="nt">MOV</span> <span class="nt">R1</span><span class="o">,@</span><span class="p">#</span><span class="nn">177570</span> <span class="o">;</span><span class="nt">STORE</span> <span class="nt">TO</span> <span class="nt">DISPLAY</span> <span class="nt">REGISTER</span>
<span class="nt">000024</span> <span class="nt">000765</span> <span class="nt">BR</span> <span class="nt">L0</span> <span class="o">;</span><span class="nt">REPEAT</span> <span class="nt">FROM</span> <span class="nt">THE</span> <span class="nt">TOP</span>
</pre></div>
</td></tr></table>
<p><span class="videobox">
<iframe width="640" height="390"
src='https://www.youtube.com/embed/ZhuzC9v3q-k?rel=0'
frameborder='0' webkitAllowFullScreen
mozallowfullscreen allowFullScreen>
</iframe>
</span></p>
<p>Some notes on the program and video above since I've received some questions:</p>
<ul>
<li>
<p>The listing here is shown assembled at location 000000, but the program is relocatable and can be toggled in at any
convenient address (000000, on top of the trap vectors, probably isn't the best choice!)</p>
</li>
<li>
<p>Data display should be on "DISPLAY REGISTER" to see the chase.</p>
</li>
<li>
<p>The front panel toggles are loaded into a counter to control the speed of the chase. Without some of the most
significant bits set the chase may go too fast to see, especially on older 11's with incandescent indicators. All
toggles off is a special case: this will be the slowest chase, since as written the counter wraps around when
decremented before being checked for zero. The video has toggles 15 and 14 up.</p>
</li>
<li>
<p>If you look at the address lights in the video, you can see that I ran this program from address 100000. This was
because at the time I had a fault in the first 16KW of memory on my MS11-L so I couldn't execute any code at lower
addresses.</p>
</li>
</ul></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/ms11-debug.html"><h1>PDP-11/45: MS11-L debug</h1></a>
Sat 18 June 2016
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>After addressing the -15V problem on the MS11, most of the bad behaviors seem to have cleared up except a stuck (on)
bit 6 in the first 16K words of address space (000000-077776). Hooked up the new logic analyzer, and it has been very
useful in troubleshooting the board -- can easily capture and inspect the timing of complete memory cycles. Definitely
worth the investment!</p>
<p>Using the analyzer, I was able to verify the refresh and chip select logic on the board, then track down the stuck bit
to what seems to be a single failed DRAM chip (E96 on the MS11-L engineering drawings). I'd like to test the entire
card before ordering replacement parts, but need to set up address translation to get beyond the first two banks from
the console.</p>
<p>Here is the address translation register setup that I used for testing. This was followed by a deposit of 000001 to
KT11 SR0 (777572) to enable translation. KT11 SR3 was left all zeros to keep D space disabled. This setup allows
console access to physical addresses in banks 1 through 7 by appropriate settings of virtual address bits 13 through
15. I wanted to reserve PAR7 to map I/O space, so I left out bank 0 since it was one of the two already tested.</p>
<style>
.memlist { display: inline; border-collapse: collapse; margin-right: 1em; }
.memlist caption { font-weight: bold; }
.memlist tr:nth-child(even) { background-color: #f2f2f2; }
.memlist th, .memlist td { padding: 5px; }
.memlist td { border: 1px solid lightgray; font-family: Menlo,Consolas,monospace; }
</style>
<table class="memlist">
<caption>Kernel I PAR</caption>
<tbody>
<tr><td>772340</td><td>001000</td></tr>
<tr><td>772342</td><td>002000</td></tr>
<tr><td>772344</td><td>003000</td></tr>
<tr><td>772346</td><td>004000</td></tr>
<tr><td>772350</td><td>005000</td></tr>
<tr><td>772352</td><td>006000</td></tr>
<tr><td>772354</td><td>007000</td></tr>
<tr><td>772356</td><td>007600</td></tr>
</tbody>
</table>
<table class="memlist">
<caption>Kernel I PDR</caption>
<tbody>
<tr><td>772300</td><td>077406</td></tr>
<tr><td>772302</td><td>077406</td></tr>
<tr><td>772304</td><td>077406</td></tr>
<tr><td>772306</td><td>077406</td></tr>
<tr><td>772310</td><td>077406</td></tr>
<tr><td>772312</td><td>077406</td></tr>
<tr><td>772314</td><td>077406</td></tr>
<tr><td>772316</td><td>077406</td></tr>
</tbody>
</table>
<p>This worked as expected according to panel PROG PHY and the logic analyzer, so the KT11 option which I had not
previously tested is at least working for kernel I space. Tested each bank on the MS11 from the front panel using this
setup, and uncovered that bank 4 bit 10 also has a stuck on condition. Since bank 1 is working now, I can use that
as work space for the time being in order to continue the CPU debug while awaiting some replacement DRAM chips in the
mail.</p>
<p>Pics here of the logic analyzer setup, and captured traces of a write and subsequent read to one of the misbehaving
chips:</p>
<p><img src='/images/pdp11/ms11-debug_thumbnail_tall.jpg' title='MS11 memory card debug in progress, with board extender, logic analyzer, and KM11' onclick='pswipe("pdp11",31);'/>
<a href="https://fritzm.github.io/images/pdp11/bad-dram-write.jpg"><img src='/images/pdp11/bad-dram-write_thumbnail_tall.jpg'/></a>
<a href="https://fritzm.github.io/images/pdp11/bad-dram-read.jpg"><img src='/images/pdp11/bad-dram-read_thumbnail_tall.jpg'/></a></p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/cpu-debug-4.html"><h1>PDP-11/45: MS11-L and CPU debug IV</h1></a>
Sun 12 June 2016
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Made some progress on the inverted result after register-to-register move problem: with the help of the KM11, extender
card, and a logic probe I was able to track down that signal ALUM L coming onto the DAP is not asserted when it should
be for a MOV instruction. This means the ALU is performing in arithmetic instead of logic mode and thus the incorrect
result.</p>
<p>I next moved the extender card over to GRA, where this signal originates from a subsidiary ROM, but unfortunately at
that point the MS11-L memory behavior got even worse, putting and end to these experiments. So I'll have to tackle
that first...</p>
<p>Moved the M792 ROM over to the expansion backplane where the MS11-L resides, and it works fine there. So it doesn't
seem to be a bus wiring or jumper problem onto the expansion backplane. Checked the power input pins on the backplane
behind the MS11-L. 5V was a little low there; trimmed this up. Probably need to clean or replace the Molex contacts
on the power distribution board in the cabinet, as it seems a few mV are being shed there needlessly compared to the
output of the same regulator on the main backplane, but things seem within stated tolerances for now.</p>
<p>The -15V input to the MS11-L was missing entirely. Removed the DD11 expansion backplane, and added jumpers between
the battery backup supply inputs and the corresponding main supply inputs, per documentation. Now have -15 to the
MS11-L, but still no joy.</p>
<p>Will need to go deeper into the MS11-L next time...</p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/cpu-debug-3.html"><h1>PDP-11/45: KM11 replica and CPU debug III</h1></a>
Sat 11 June 2016
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Received the boards and components for the KM11 replica; stuffed and soldered, and it appears to work! There
are some photos below. I can easily single-step microcode, clock states, and bus cycles now, which should
really help with the CPU debug.</p>
<p>Swapped DAP for a spare, and this has fixed the stuck PC issue. Memory issues remain, but by choosing a
working memory range, I can start to toggle in and attempt to execute very simple programs.</p>
<p>The simplest possible program, unconditional branch to self, seems to execute correctly:</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1</pre></div></td><td class="code"><div class="highlight"><pre><span></span>001000 000777 BR .-0
</pre></div>
</td></tr></table>
<p>A register to register data move test does not however:</p>
<table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2</pre></div></td><td class="code"><div class="highlight"><pre><span></span>001000 010203 MOV R2,R3
001002 000776 BR .-2
</pre></div>
</td></tr></table>
<p>Control flow is as expected, but the value that ends up in R3 seems to be negated. Still, pretty good
progress! Now that I can step machine states, the next step will be to put the DAP out on an extender card and
start tracking down signals with a logic probe.</p>
<p>The HP1662A logic analyzer from eBay has also arrived; should come in handy in investigating the memory issue.</p>
<p><img src='/images/pdp11/km11_thumbnail_tall.jpg' title='Tom Uban KM11 replica, stuffed with parts and ready to go' onclick='pswipe("pdp11",29);'/>
<img src='/images/pdp11/km11-action_thumbnail_tall.jpg' title='Tom Uban KM11 replica in action' onclick='pswipe("pdp11",30);'/></p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/cpu-debug-2.html"><h1>PDP-11/45: CPU debug II</h1></a>
Sun 05 June 2016
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Received and installed the replacement lamps for the -15V regulators. Pic below shows what the power supply
looks like with all the lamps functioning.</p>
<p>Verified backplane DC voltages and ripple currents again, and re-trimmed all the DC regulators. Verified AC
LO and DC LO deasserted and free of glitches. Found some harness wiring mistakes to the DD11 expansion
backplane; corrected these.</p>
<p>Tried some CPU board-swaps looking for a quick win, but broken console behavior didn't change significantly
with different boards.</p>
<p>Investigated the timing generator board, and found that the crystal oscillator wasn't oscillating. Tracked
this down to inductor L1 which looked as if it had been partially sheared away from the board at some point
during installation/removal/storage. Repaired this. Success! Able to load addresses from the front console
now. Switches are mirrored in the BR when halted in console.</p>
<p>Address bit 0 seems stuck. Swapped PDR from spare board back to the original. Can now examine and modify the
light/switch register, and examine the contents of the M792 ROM.</p>
<p>Jumpered the DD11 expansion backplane back in, and slotted in the MS11-L memory. Limited success: can modify
and examine memory for example near address 001000, but cannot modify low memory addresses. In some ranges,
can only modify every other word. Also, PC seems stuck at 022000.</p>
<p>At this point, I could really use a KM11 maintenance board set. These are pretty hard to get a hold of, but a
few folks on the web have built their own reproductions. I put in a PCB order to ExpressPCB with a KM11
layout by Tom Uban (described <a href="http://www.ubanproductions.com/museum.html">here</a>), and also put parts on order
to stuff it.</p>
<p>Also, figuring I'll need to be going deeper into the CPU debug, I found and bought an <a href="http://www.ebay.com/itm/142004889393">HP1662A logic
analyzer</a> on eBay, for about the same money as the KM11 PCB and parts!</p>
<p><img src='/images/pdp11/power-lights_thumbnail_tall.jpg' title='Power supply with all regulator lamps repaired' onclick='pswipe("pdp11",28);'/></p></div>
<hr />
</div>
<div class="pagination">
<ul>
<li class="prev"><a href="https://fritzm.github.io/index5.html">← Previous</a></li>
<li class=""><a href="https://fritzm.github.io/index.html">1</a></li>
<li class=""><a href="https://fritzm.github.io/index2.html">2</a></li>
<li class=""><a href="https://fritzm.github.io/index3.html">3</a></li>
<li class=""><a href="https://fritzm.github.io/index4.html">4</a></li>
<li class=""><a href="https://fritzm.github.io/index5.html">5</a></li>
<li class="active"><a href="https://fritzm.github.io/index6.html">6</a></li>
<li class=""><a href="https://fritzm.github.io/index7.html">7</a></li>
<li class=""><a href="https://fritzm.github.io/index8.html">8</a></li>
<li class="next"><a href="https://fritzm.github.io/index7.html">Next →</a></li>
</ul>
</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>