-
Notifications
You must be signed in to change notification settings - Fork 0
/
index3.html
815 lines (672 loc) · 47.5 KB
/
index3.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
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
<!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/la30-3.html"><h1>PDP-11/45: LA30 repair III</h1></a>
Sat 02 December 2017
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Digging in on the flip-flops identified as potentially problematic in the previous post, found that E5 had
failed. Pulled, socketed, and replaced; character generator now correctly clocks all five character columns:</p>
<p><img style="display:block; margin-left:auto; margin-right:auto" src="/images/pdp11/la30-chargen-clock-
trace-fixed.jpg" title="LA30 character generator clocking trace after repair. Runs correctly to five character columns"/></p>
<p>After this repair, characters were printing full width, but two problems remained: about half of the
characters printed in response to typing on the keyboard were the wrong character, and the top row was not
printing at all on any character:</p>
<p><img style="display:block; margin-left:auto; margin-right:auto" src="/images/pdp11/la30-second-print.jpg"
title="LA30 second print attempt -- incorrect characters and top row missing"/></p>
<p>Looking at the incorrect characters problem first, it was clear that bit 4 was not being received by the
character generator correctly. I was a bit worried that the SMC KR2376-17 scanner/ROM on the keyboard
assembly might be at fault, since Mattis had had some trouble with his. This is a pretty cool part; a
combined scanner and code translator, with an internal oscillator, rollover logic, debounce delay, and
flexible interfacing:</p>
<p><img style="display:block; margin-left:auto; margin-right:auto" src="/images/pdp11/kr2376-schematic.jpg"
title="KR2376-17 keyboard scanner/encoder internal schematic"/></p>
<p>...not to mention the very cool vintage ceramic/gold packaging (see below.) Fortunately, inspection with an
oscilloscope showed that the outputs from the scanner were just fine; chasing downstream, the problem was
found to be just a loose pin (SS) on the keyboard cable Berg connector. With that sorted, we now have this:</p>
<p><img style="display:block; margin-left:auto; margin-right:auto" src="/images/pdp11/la30-third-print.jpg"
title="LA30 third print attempt -- characters correct, but still missing top row"/></p>
<p>For the final issue with the top row not printing, verified that the problem followed a particular G380
solenoid driver card when swapping them around, and that with a functional G380 in the appropriate backplane
slot pin 1 fires and prints correctly. Inspection of the problematic G380 revealed a failed power transistor
and blown associated micro-fuse; replacement parts on order.</p>
<p>For the ribbon advance issue, I pulled the ribbon motors and disassembled their top-side reduction gear cases
in order to gain access to the upper rotor bearings. Cleaning and lubrication of these bearings, plus a few
more taps with a mallet after reassembly, achieved an improved bearing alignment. With the increased output
torque, the ribbon now advances reliably.</p>
<p>Other minor items: Replacement vibration isolators arrived, and were installed. Threaded inserts in the
fiberglass top shell that had pulled out were reattached with epoxy.</p>
<p>Have some more travel coming up for work, so may not be able to get back to this for a bit. Next steps will
be repair of the failed solenoid driver channel, calibrations, then any debug necessary on the M7910 interface
card for the PDP-11.</p>
<p><img src='/images/pdp11/kr2736_thumbnail_tall.jpg' title='The SMC KR2736-17 keyboard scanner/encoder in the LA30' onclick='pswipe("pdp11",74);'/>
<img src='/images/pdp11/G380_thumbnail_tall.jpg' title='G380 solenoid driver card from the LA30, with failed parts pulled' onclick='pswipe("pdp11",75);'/></p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/la30-2.html"><h1>PDP-11/45: LA30 repair II</h1></a>
Sun 26 November 2017
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Okay, first thing to debug today is the ready light. This is lit by RDY LITE L, pin A16D2 (lower right of
sheet M7721-0-1 in the LA30 engineering drawings). Logic probe showed this was correctly asserted low. Pulled
the lamp and checked it with bench supply, and it checked fine. Verified +10 and ground at the lamp socket as
well, so why isn't it lit? Turns out it is polarized, and the socket is soldered in backwards (?!). Corrected
the socket, and ready light is working.</p>
<p>Noticed that ribbon is stalling occasionally. Ribbon tension seems to be overcoming the clutch on the take-up
side. It seems tensioning drag on the inactive side is too high. Not sure what to do about this one yet;
there is not much adjustable within the clutches, and the service manual only recommends replacement if they
are out of spec (yeah, good luck finding one!)</p>
<p>Repeated the experiment with loopback jumper (A15R2 to A15C2). Turns out I had miscounted backplane pins the
first time. With jumper placed correctly, I am now get a printing response to the keyboard. Not quite right,
but definite progress:</p>
<p><img style="display:block; margin-left:auto; margin-right:auto" src="/images/pdp11/la30-first-print.jpg"
title="LA30 first print attempt"/></p>
<p>Here I had typed <code>:;L</code>, and then some other letters. You can see evidence of correct pins firing for the
first three characters, though either head movement or pin timing is off. Letter spacing appears more or less
correct for 80 characters per line.</p>
<p>Okay, hooked up the logic analyzer, and started to take a look at the character generator clocking to see if
all the the columns are being clocked out correctly. The logic analyzer shows a malfunction consistent with
the print behavior: character column clocking resets after two columns rather than proceeding through all
five:</p>
<p><img style="display:block; margin-left:auto; margin-right:auto" src="/images/pdp11/la30-chargen-clock-
trace.jpg" title="LA30 character generator clocking trace. Resets incorrectly after only two of five
character columns"/></p>
<p>This signaling is mediated by a ripple counter on the M7724 character generator card:</p>
<p><img style="display:block; margin-left:auto; margin-right:auto" src="/images/pdp11/la30-chargen-schem.jpg"
title="LA30 character generator clocking partial schematic."/></p>
<p>So it looks like one or more of these 7474 quad flops has failed. I note on my chargen board that these are
early 70's Nat Semi parts; Mattis had a very similar issue (search "7474" on <a href="http://www.datormuseum.se/computers/digital-equipment-corporation/pdp-11-04">this
page</a>) on his LA30 chargen with
the same parts.</p>
<p>All I have time for this weekend; next time I'll get the chip clip on these for a closer look, then pull and
replace the baddies.</p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/la30-repair.html"><h1>PDP-11/45: LA30 repair</h1></a>
Sat 25 November 2017
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Once again its been a little while since I've had to work on PDP-11 stuff or put any updates here; the <a href="https://www.lsst.org">day
gig</a> has been pretty intense lately.</p>
<p>Recent efforts have been focused on restoration of an LA30 printing terminal. This was really filthy
(including a mouse nest, yuck) so in addition to the usual electronics work it had to be completely
disassembled for proper cleaning and lubrication.</p>
<p>First off, the H735 power supply. This is a pretty straightforward supply, but has an oil cap in the ferro-
resonant circuit that is listed as a PCB-containing component; replaced this with a <a href="https://www.digikey.com/product-detail/en/cornell-dubilier-electronics-cde/SFA66S2K156B-F/338-1885-ND/1551444">modern
equivalent</a>.
Also pulled and reformed all the large electrolytic caps on the
bench per usual. No real trouble or surprises with this supply.</p>
<p>Logic assembly looks good; everything is there (mine is an LA30-P, the parallel interface version) with no
obvious scorches or toast. Backplane intact and chip pin corrosion doesn't look too bad. Needed some
compressed air to blow out all the dust bunnies.</p>
<p>Print head also looks to be in decent shape; all of the pins fire freely when activated momentarily with a 15
VDC bench supply.</p>
<p>Most of the work here was involved in disassembling the top section of the terminal, including the keyboard
and carriage assembles, where most of the filth had accumulated. There are a lot of parts and pieces, with
castings, bearings, machined shafts, stainless and brass throughout. This thing was really well built!</p>
<p>The ribbon-like paper drag springs were all either torn, mangled, or cracked/cracking; I fashioned some
replacements by cutting and drilling 1/2" x 3" strips of .002 steel shim stock. The rubber shock isolation
mounts for the carriage assembly had also hardened and decayed.
<a href="http://www.vibrationmounts.com/RFQ/VM07003.htm">These</a> look very close to the original; I put some on order.
Replaced the bumpers on the carriage rails with some less expensive 3/8" chassis grommets. After cleaning,
hit the slide rails with dry film silicone lubricant (Molykote 557) and pivot and carriage cam plates pins
with a good lithium grease (Molykote BR2 Plus).</p>
<p>Ribbon drive motor bearings were very gummy, and one of the ribbon motors had seized. These motors are quite
serviceable though; you can pull the bottom bearing cap and remove the rotor, clean the rotor shaft and
bearings of old lubricants, apply fresh and reassemble. These are self-aligning bearings, so don't forget to
give the assembly a few taps all around with a mallet after reassembly to shake them into true.</p>
<p>Consumables: compatible ribbons are still plentiful on eBay, so I ordered a few. Paper is an unusual width at
9-7/8". A few vendors on Amazon still seem to carry it, but it might be wise to lay in stock of a carton or
two while it is still obtainable.</p>
<p>Fired it up after reassembly. No smoke (good!) and it feeps once reassuringly at power on. Ribbon motors and
clutches seem to be working, and the ribbon advances. Activating the ribbon reverse switches manually
reverses the ribbon movement per expectation.</p>
<p>If the carriage is closed with paper loaded, the print head will home left and then move right after about a
second or so (per expectation; "last character visibility" feature) and ribbon advance halts. Local line feed
from the front panel switch works. All of this indicates a good deal of the logic and the motor drive are
already working correctly.</p>
<p>However: the front panel "ready" indicator does not light, and a quick loopback test (jumper A15R2 to A15C2 on
the backplane) does not print any characters in response to the keyboard. Will pick up here with logic
debug next time.</p>
<p><img src='/images/pdp11/la30-cap_thumbnail_tall.jpg' title='PCB-containing cap from ferro-resonant supply; to be replaced' onclick='pswipe("pdp11",68);'/>
<img src='/images/pdp11/la30-supply_thumbnail_tall.jpg' title='LA30 H735 supply, pulled to bench for clean/refurb' onclick='pswipe("pdp11",69);'/>
<img src='/images/pdp11/la30-cards_thumbnail_tall.jpg' title='LA30 internal controller card cage' onclick='pswipe("pdp11",70);'/>
<img src='/images/pdp11/la30-head_thumbnail_tall.jpg' title='LA30 print head' onclick='pswipe("pdp11",71);'/>
<img src='/images/pdp11/la30-carriage_thumbnail_tall.jpg' title='LA30 carriage, disassembled for clean, repairs, and lube. A mangled paper drag spring is visible on the print bar assembly.' onclick='pswipe("pdp11",72);'/>
<img src='/images/pdp11/la30-cleaned_thumbnail_tall.jpg' title='LA30 cleaned and reassembled' onclick='pswipe("pdp11",73);'/></p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/vt52-keyboard.html"><h1>PDP-11/45: VT52 Keyboard Repair</h1></a>
Sat 15 July 2017
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>The VT52 had a broken ESC key, and with RT-11 up and running I was motivated to dig in and fix it (you need
that ESC key if you are going to run the K52 editor). Pulling the keycap and giving things a look over, the
leaf contacts and the plastic plunger that activate the key looked fine. Need to get at the keyboard module
itself to troubleshoot, and on a VT52 that means opening the thing all the way up and pulling the main
boards. In we go...</p>
<p>Extracted the keyboard module, powered it from my bench supply, and used a breadboard and some jumpers to
drive the key select decoders. Key closure on the back of the module was intermittent, but some flexure of
the entire keyboard PCB seemed to be affecting it. Replaced/reflowed the solder on the back of the key
switch and that seems to have fixed it.</p>
<p>Back together, working well now. Test drove it for a while under RT-11...</p>
<p><img src='/images/pdp11/vt52-guts_thumbnail_tall.jpg' title='VT52 with logic boards and keyboard removed' onclick='pswipe("pdp11",65);'/>
<img src='/images/pdp11/vt52-keys_thumbnail_tall.jpg' title='VT52 keyboard under test, powered from bench supply' onclick='pswipe("pdp11",66);'/>
<img src='/images/pdp11/rt11-adventure_thumbnail_tall.jpg' title='VT52 test drive with RT-11 Adventure' onclick='pswipe("pdp11",67);'/></p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/data-recovery.html"><h1>PDP-11/45: Data Recovery</h1></a>
Sun 09 July 2017
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Okay, the system is working well enough now to start attempting recovery and archive of the dozen or so RK05
packs that I have on-hand. These were all obtained (along with the RK05 drives, controller and power supply)
in a surplus auction downstream of Stanford's Hansen Experimental Physics Lab, sometime in the early '90s.</p>
<p>The packs date from the mid-70's to early-80's, and the labels indicate contents related to experiments and
research projects taking place at the lab at that time. One particular pack seems associated with the
Stanford Gravity Wave Project, which built early resonant mass detectors. Other packs labeled "FEL" would
be related to early free-electron laser research. Many of the names on the packs are are readily found on
related scientific publications from the time.</p>
<p>The process for dealing with these packs involves opening them up for inspection and cleaning before
mounting them, with hopes of avoiding beating up or destroying the drive heads and/or media with head crashes.
Much has been written about pack cleaning on the classiccmp mailing lists and in the vcfed forums, but briefly
the process involves some clean-room gloves, lint-free wipes, and anhydrous isopropyl alcohol. The
outside of the pack is first cleaned of dust and grime, then the packs are opened and inspected and the disk
surfaces given a scrub with the wipes and alcohol. If a pack seems in good enough shape to mount, it is spun
up and run in a drive with head load disabled for about a half-hour. This gets a good air-flow over
the disk to blow out remaining loose particulates and also lets the disk come up to thermal equilibrium.
After that the heads are loaded, with a finger standing by on the unload switch in case there are any bad
noises...</p>
<p>I've already been dealing with two of the packs extensively during the restoration: one is an RKDP
diagnostics pack, and the other was a backup pack of same. I was able to capture a complete, error-free
image of the RKDP pack using PDP11GUI. This seems to be an earlier version of this disk that what is
already available on bitsavers; I've sent the bits to Al Kossow, but as I understand it his project has
a big backlog at the moment so it may be a while before he can consider my submission. In the meantime,
for those interested, the disk image is available <a href="http://www.slac.stanford.edu/~fritzm/data/pdp11/rk05/MAINDEC-11-DZZAA-J-HB.dsk">here</a>.</p>
<p>The RKDP backup disk was used as a test pack during the RK11/RK05 restoration work, and thus was overwritten
by the RK05 diagnostic read/write tests. It now contains a bootable RT-11 image, written via PDP11GUI.
Mixed results on the other packs so far: some have had severe head crashes (see pic below) or are otherwise
damaged to the point that I am hesitant to mount them. Some have been mysteriously unreadable. It looks
like I can expect about 50% recovery. Results so far are tabulated here. I hope to be able to make other
recovered images available soon, but since they contain original research materials I am trying to contact
the authors for permission first.</p>
<style>
.disklist { display: inline; border-collapse: collapse; margin-right: 1em; }
.disklist caption { font-weight: bold; }
.disklist tr:nth-child(even) { background-color: #f2f2f2; }
.disklist th, .disklist td { padding: 5px; }
.disklist td { border: 1px solid lightgray; font-family: Menlo,Consolas,monospace; }
</style>
<table class="disklist">
<thead>
<tr><th>Serial #</th><th>Label</th><th>OS</th><th>Notes</th></tr>
</thead>
<tbody><tr>
<td>ZO 50511</td>
<td>MAINDEC-11-DZZAA-J-HB 9/21/74 M<br>XXDP RKDP RK11 DIAGNOSTIC PACKAGE</td>
<td>DZQUD-A RKDP-RK11 MONITOR</td>
<td>[1974] MAINDEC diagnostics for PDP-11/40/45 CPU/MMU/FPU, MS11, DL11, DR11, RK11, LC11/LA30, KW11-L/P. Full recovery.</td>
</tr><tr>
<td>B1-75814</td>
<td>RKDB Backup</td>
<td>unknown</td>
<td>[unknown] Presumed to be backup of ZO 50511; used as test disk and overwritten.</td>
</tr><tr>
<td>B1-28320</td>
<td><span style="text-decoration:underline;">Gravitational</span> <span style="text-decoration:underline;">Radiation</span> <span style="text-decoration:underline;">Experiment</span><br>Boughn, Hollenhorst, Paik, Sears, Taber MSA</td>
<td>DOS/BATCH V09-20</td>
<td>[1976-77] Fortran and MACRO-11 codes, mostly calculations relating to resonant mass detector design. Full recovery.</td>
</tr><tr>
<td>AD-21279</td>
<td>BLAZQUEZ RT-11 AUG 83</td>
<td>RT-11FB (S) V04.00L</td>
<td>[1983] Fortran and MACRO-11 codes relating to image processing and display. Device driver code for DeAnza Systems ID-2000 display and Calcomp plotter. Names: Ken Dinwiddie (DeAnza codes), Art Vetter (Calcomp codes). Full recovery.</td>
</tr><tr>
<td>BAK 9069 A</td>
<td>W. COLSON</td>
<td>DOS/BATCH V9-20C</td>
<td>[1977-78] Full recovery.</td>
</tr><tr>
<td>AE 61745</td>
<td>FEL L.ELIAS</td>
<td>DOS/BATCH V9-20C</td>
<td>[1974-78] Head crash on read (ouch!) Partial recovery. Unrecovered data looks to be mostly OS files; may be patchable.</td>
</tr><tr>
<td>ZO 50399</td>
<td>TRANSPORT + DATA<br>1/18/80</td>
<td>DOS/BATCH V9-20C</td>
<td>[1980-83] Minor corrosion spot. Partial recovery. Data files and Fortran programs.</td>
</tr><tr>
<td>E172140</td>
<td>M. O'Halloran Ray Tracing<br>R. RAND BBU PROGRAMS</td>
<td>TBD</td>
<td>[TBD]</td>
</tr><tr>
<td>B1-45441</td>
<td>RT 11</td>
<td>TBD</td>
<td>[TBD] Minor head crashes on media.</td>
</tr><tr>
<td>B1-24056</td>
<td>RDAS</td>
<td>DOS/BATCH V9-20C</td>
<td>[1970-78, 1983] Minor head crashes on media. Partial recovery. FEL related Fortran codes.</td>
</tr><tr>
<td>AE 20116</td>
<td>DEACON FEL</td>
<td>unknown</td>
<td>[unknown] Many corrosion spots on media; did not mount.</td>
</tr><tr>
<td>19177</td>
<td>Transport DOS/BATCH-9 V 20C</td>
<td>unknown</td>
<td>[unknown] Major head crash on media; did not mount.</td>
</tr><tr>
<td>B1-44898</td>
<td>RDAS9 - V20C</td>
<td>unknown</td>
<td>[unknown] Medium head crashes on media; did not mount.</td>
</tr></tbody>
</table>
<p><img src='/images/pdp11/rk05-packs_thumbnail_tall.jpg' title='Some of the RK05 packs obtained in a surplus auction downstream of Stanford's Hansen Experimental Physics Lab' onclick='pswipe("pdp11",62);'/>
<img src='/images/pdp11/head-crashes_thumbnail_tall.jpg' title='An RK05 disk platter with obvious head crashes' onclick='pswipe("pdp11",63);'/>
<img src='/images/pdp11/gravity-pack_thumbnail_tall.jpg' title='RK05 pack spinning in drive with heads loaded' onclick='pswipe("pdp11",64);'/></p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/rt11-boots.html"><h1>PDP-11/45: First RT-11 Boot From Disk!</h1></a>
Thu 06 July 2017
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Not much technical in this post, except the big ticket news: after all the recent repairs and generating a
fresh RT-11 pack <strong>RT-11 BOOTS FROM DISK!</strong></p>
<p>It's been a very long road getting here, but the machine finally has a working, full-featured, operating
system, capable of supporting self-hosted program development. Spent a few enjoyable hours editing,
assembling, linking, and debugging some small MACRO-11 hacks directly on the machine, using the native RT-11
tools. This is probably a 40 year high-water-mark of functionality for these particular bits of hardware.
Very satisfying!</p>
<p>Next up will be to clean and inspect the dozen or so RK05 packs that I have on hand, and retrieve and
archive whatever content I can. That should let me clear off a few packs to create some space to
experiment with some additional operating systems, including 6th Edition Unix.</p>
<p><img src='/images/pdp11/rt11-boots_thumbnail_tall.jpg' title='At long last: RT-11 boots from an RK05 pack!' onclick='pswipe("pdp11",61);'/></p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/m9301-troubles.html"><h1>PDP-11/45: M9301 Troubles</h1></a>
Tue 04 July 2017
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>After a lot of recent progress with the RK11, suffered a setback: after trying once again to image
a fresh RT-11 pack, the machine began to behave erratically at boot. Sometimes the boot monitor would run
fine, sometimes it would run for a while and then take a machine exception or vector off to bad address,
and sometimes the machine would fail to boot at all, immediately taking exceptions of various sorts. Getting
so close, but then lost a lot of ground; I guess that's sort of the way it is going to be with a machine
that is this old...</p>
<p>So, back to the top without a working boot monitor. Microcode sequencing and seemed to be working fine --
exam/deposit/step working reliably from the front panel. Checked execution of the first few instructions
of the boot ROM in detail, a branch and some single operand instructions, and they seemed to execute
correctly.</p>
<p>Assuming some sort of new failure in the CPU, I prepared to instrument the Unibus with the HP
logic analyzer; it seemed that way I could trigger on machine exceptions then look back over the captured
address traces for a pattern. To make sense of those, I'd need a listing of the boot ROM in hand. Noel
Chiappa has a dump for this and a partial disassembly on his site <a href="http://ana-3.lcs.mit.edu/~jnc/tech/pdp11/ROMs/M9301-YB.mac">here</a>,
but is it the same as mine? Better check...</p>
<p>Started to run through Noel's listing and compare to the ROM contents on my machine via front panel exam.
Sure enough, there seemed to be some words different in a few places. Maybe the CPU is fine, and the ROM
card is failing? Swapped out the M9301 for a simpler M792 diode matrix boot ROM, and sure enough -- was
able to boot straight away off my RKDP pack, and from there reliably beat up the CPU with diagnostics. So,
great news: just a failing M9301!</p>
<p>Alright, so now I want to capture a dump of the M9301 so I can systematically compare with Noel's listing
to see if there's a pattern in failed/flaky bits to help guide my repair. For this I need a memory dump
utility that I can toggle in from the front panel. Came up with this:</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
31
32
33
34
35
36</pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="nt">001000</span> <span class="nt">012705</span> <span class="nt">START</span><span class="o">:</span> <span class="nt">MOV</span> <span class="p">#</span><span class="nn">177564</span><span class="o">,</span><span class="nt">R5</span> <span class="o">;</span><span class="nt">CONSOLE</span> <span class="nt">XCSR</span>
<span class="nt">177564</span>
<span class="nt">001004</span> <span class="nt">012700</span> <span class="nt">L0</span><span class="o">:</span> <span class="nt">MOV</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">SWITCH</span> <span class="nt">REGISTER</span>
<span class="nt">177570</span>
<span class="nt">001010</span> <span class="nt">000000</span> <span class="nt">HALT</span>
<span class="nt">001012</span> <span class="nt">011004</span> <span class="nt">MOV</span> <span class="p">@</span><span class="k">R0</span><span class="o">,</span><span class="nt">R4</span> <span class="p">;</span><span class="nt">READ</span> <span class="nt">ADDR</span> <span class="nt">FROM</span> <span class="nt">SWITCHES</span>
<span class="nt">001014</span> <span class="nt">000000</span> <span class="nt">HALT</span>
<span class="nt">001016</span> <span class="nt">011003</span> <span class="nt">MOV</span> <span class="p">@</span><span class="k">R0</span><span class="o">,</span><span class="nt">R3</span> <span class="p">;</span><span class="nt">READ</span> <span class="nt">COUNT</span> <span class="nt">FROM</span> <span class="nt">SWITCHES</span>
<span class="nt">001020</span> <span class="nt">012401</span> <span class="nt">L1</span><span class="o">:</span> <span class="nt">MOV</span> <span class="o">(</span><span class="nt">R4</span><span class="o">)+,</span><span class="nt">R1</span> <span class="o">;</span><span class="nt">GET</span> <span class="nt">NEXT</span> <span class="nt">WORD</span> <span class="nt">TO</span> <span class="nt">DUMP</span>
<span class="nt">001022</span> <span class="nt">012702</span> <span class="nt">MOV</span> <span class="p">#</span><span class="nn">6</span><span class="o">,</span><span class="nt">R2</span> <span class="o">;</span><span class="nt">SIX</span> <span class="nt">DIGITS</span> <span class="nt">TO</span> <span class="nt">PRINT</span>
<span class="nt">000006</span>
<span class="nt">001026</span> <span class="nt">005000</span> <span class="nt">CLR</span> <span class="nt">R0</span> <span class="o">;</span><span class="nt">R0</span> <span class="nt">GETS</span> <span class="nt">MSB</span> <span class="nt">R1</span>
<span class="nt">001030</span> <span class="nt">073027</span> <span class="nt">ASHC</span> <span class="p">#</span><span class="nn">1</span><span class="o">,</span><span class="nt">R0</span>
<span class="nt">000001</span>
<span class="nt">001034</span> <span class="nt">062700</span> <span class="nt">L2</span><span class="o">:</span> <span class="nt">ADD</span> <span class="p">#</span><span class="nn">60</span><span class="o">,</span><span class="nt">R0</span> <span class="o">;</span><span class="nt">MAKE</span> <span class="nt">INTO</span> <span class="nt">ASCII</span> <span class="nt">DIGIT</span>
<span class="nt">000060</span>
<span class="nt">001040</span> <span class="nt">010065</span> <span class="nt">MOV</span> <span class="nt">R0</span><span class="o">,</span><span class="nt">2</span><span class="o">(</span><span class="nt">R5</span><span class="o">)</span> <span class="o">;</span><span class="nt">OUTPUT</span>
<span class="nt">000002</span>
<span class="nt">001044</span> <span class="nt">105715</span> <span class="nt">TSTB</span> <span class="o">(</span><span class="nt">R5</span><span class="o">)</span>
<span class="nt">001046</span> <span class="nt">100376</span> <span class="nt">BPL</span> <span class="p">.</span><span class="nc">-2</span>
<span class="nt">001050</span> <span class="nt">005000</span> <span class="nt">CLR</span> <span class="nt">R0</span> <span class="o">;</span><span class="nt">R0</span> <span class="nt">GETS</span> <span class="nt">3</span> <span class="nt">MSB</span> <span class="nt">R1</span>
<span class="nt">001052</span> <span class="nt">073027</span> <span class="nt">ASHC</span> <span class="p">#</span><span class="nn">3</span><span class="o">,</span><span class="nt">R0</span>
<span class="nt">000003</span>
<span class="nt">001056</span> <span class="nt">077212</span> <span class="nt">SOB</span> <span class="nt">R2</span><span class="o">,</span><span class="nt">L2</span> <span class="o">;</span><span class="nt">LOOP</span> <span class="nt">DIGITS</span>
<span class="nt">001060</span> <span class="nt">012765</span> <span class="nt">MOV</span> <span class="p">#</span><span class="nn">15</span><span class="o">,</span><span class="nt">2</span><span class="o">(</span><span class="nt">R5</span><span class="o">)</span> <span class="o">;</span><span class="nt">OUTPUT</span> <span class="s1">'\R'</span>
<span class="nt">000015</span>
<span class="nt">000002</span>
<span class="nt">001066</span> <span class="nt">105715</span> <span class="nt">TSTB</span> <span class="o">(</span><span class="nt">R5</span><span class="o">)</span>
<span class="nt">001070</span> <span class="nt">100376</span> <span class="nt">BPL</span> <span class="p">.</span><span class="nc">-2</span>
<span class="nt">001072</span> <span class="nt">012765</span> <span class="nt">MOV</span> <span class="p">#</span><span class="nn">12</span><span class="o">,</span><span class="nt">2</span><span class="o">(</span><span class="nt">R5</span><span class="o">)</span> <span class="o">;</span><span class="nt">OUTPUT</span> <span class="s1">'\N'</span>
<span class="nt">000012</span>
<span class="nt">000002</span>
<span class="nt">001100</span> <span class="nt">105715</span> <span class="nt">TSTB</span> <span class="o">(</span><span class="nt">R5</span><span class="o">)</span>
<span class="nt">001102</span> <span class="nt">100376</span> <span class="nt">BPL</span> <span class="p">.</span><span class="nc">-2</span>
<span class="nt">001104</span> <span class="nt">077333</span> <span class="nt">SOB</span> <span class="nt">R3</span><span class="o">,</span><span class="nt">L1</span> <span class="o">;</span><span class="nt">LOOP</span> <span class="nt">WORDS</span>
<span class="nt">001106</span> <span class="nt">000736</span> <span class="nt">BR</span> <span class="nt">L0</span> <span class="o">;</span><span class="nt">START</span> <span class="nt">OVER</span>
</pre></div>
</td></tr></table>
<p>Executed this a few times and got slightly different results, then things settled into a pattern where the
lowest nybble of every word was consistently zeroed but everything else was fine. Smoking gun pointing to
a single PROM on the M9301. Pulled and reseated that chip, and did the same for the other three while I
was at it, and ... everything 100% after that. Wow, really should have just tried that first...</p>
<p>Well, at least I'm up and running again! The memory dump program might come in useful again at some other
time, and as a byproduct after I fixed my M9301 I got 100% agreement with Noel's listing. So I think that
listing can be considered authoritative now; good enough to generate replacement PROMs should anybody
ever need to do so.</p>
<p><img src='/images/pdp11/M9301_thumbnail_tall.jpg' title='M9301-YB bootstrap ROM' onclick='pswipe("pdp11",59);'/>
<img src='/images/pdp11/M792-YB_thumbnail_tall.jpg' title='M792-YB diode-matrix bootstrap ROM' onclick='pswipe("pdp11",60);'/>
<span class="videobox">
<iframe width="328" height="200"
src='https://www.youtube.com/embed/E7MAFjZVZ2Y?rel=0'
frameborder='0' webkitAllowFullScreen
mozallowfullscreen allowFullScreen>
</iframe>
</span></p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/rk11-7.html"><h1>PDP-11/45: RK11 VII</h1></a>
Sun 25 June 2017
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Okay, back from travel and picked up the thread on the RK11 interrupt problem this weekend. Put the KM11 in
the first slot on the RK11 which allows to monitor interrupt request. An interrupt can be very easily
generated from the front panel by writing bit 6 (Interrupt on Done Enable) on in the RKCS register at 777404.
Did this, and noticed that interrupt request logic on the RK11 went active, but never cleared.</p>
<p>Checked bus request and grant continuity all the way through to the CPU backplane and back and that looked
fine (the RK11 in its default configuration uses BR5).</p>
<p>Chased bus request with a logic probe all the way to the CPU backplane, and it was being asserted correctly.
Looking at BG5, however, I noticed it was always asserted, even if BR5 was inactive. Disconnected all
peripherals and terminated the Unibus directly on the CPU backplane, and this was still the case. So there
was problem with BG5 in the CPU itself.</p>
<p>Threw the CPU UBC card out on extenders, and took a look at BG5 logic with a logic probe. The 8881 driver
for this signal (E42 on sheet UBCD of the engineering drawings) had failed -- pins 8 and 9 were high, but pin
10, BG5, was not being driven low. Pulled this chip, put in a socket and a replacement, and the BG was then
working properly. That's three repairs total to this poor old UBC card so far! Was able to then verify from
the front panel that the processor fielded interrupt 220 in response to
setting the IDE bit in RKCS. Progress!</p>
<p>Back to the MAINDEC ZRKK -- interrupt test now passes, and the diagnostic continues. BUT... error output now
on test octal 57, which is working out the "hardware pole" feature of the controller. Thought this might
be due to the RK11 being configured for two RK05 drives, but I have restored/connected only the first.
Rejumpered the G740 flipchip for a single drive, but this didn't seem to help. Hmmm, will need to read the
diagnostic source to see what it is trying to do...</p>
<p><img src='/images/pdp11/G740_thumbnail_tall.jpg' title='G740 Disk Selection flipchip, jumpered for two drives' onclick='pswipe("pdp11",58);'/></p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/rk11-6.html"><h1>PDP-11/45: RK11 VI - "Pole" and Interrupt Issues</h1></a>
Thu 08 June 2017
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Replaced the failed 7401 in the RKDA to RKDB data path, and verified that the RKDB stuck bit 11 problem was
fixed. Ran the system for another couple hours to rewrite a fresh RT-11 pack, then another problem developed:
read operations would successfully obtain the bus, but would never complete.</p>
<p>Some investigation with a KM11 on the RK11 controller showed that POLE was now incorrectly asserted
continuously (did they mean "poll"?). Tracked this down to a failed 7420 (E1 on the M141 at A26, sheet
RK11-C-12). Replaced, and reads were working again. I guess with a machine this age there is going to be a
lot of this sort of thing where marginal parts give up after a few hours of use. Hopefully after some
prolonged operation things will settle down a little bit...</p>
<p>In any case, <em>still</em> unable to boot any of my RT-11 packs. I Decided to step back and run MAINDEC diagnostic
ZRKK. This is the RK11 dynamic diagnostic that destructively modifies a pack, and I had not previously run it
-- I had just optimistically jumped to trying to boot existing packs after the drive restore and calibration.
The diagnostic ran successfully for a while, through various format and read and write tests over the whole
pack (encouraging!), then hung up consistently on test 35 (octal), which tests whether the RK11 interrupts
the processor correctly when IDE is set.</p>
<p>So it could be the case that my RT-11 boots hang up when they first start trying to make use of interrupts.
Verified that I can run MAINDEC ZKWA, which tests interrupts from the KW11-L line clock, so interrupt
fielding in the CPU looks good.</p>
<p>Re-ran MAINDEC ZRKK, and noted that the CPU is waiting in micro-state BRK.00 (154) on page FLOWS 12 of the
engineering drawings. This state has a wait for Unibus INTR to be asserted, so it looks like a problem with
interrupt signaling on the RK11 side.</p>
<p>I have a bit of travel coming up, so I probably won't get back to this for a week or two. But the next
sensible step I think will be to work with a logic analyzer on the backplane of the RK11, slot A6 where the
M7820 interrupt control flipchip goes, and see what is/isn't happening with the interrupt signaling on that
end. I suspect there will probably be a failed IC on the M7820.</p></div>
<hr />
</div>
<div class='article'>
<div class="content-title">
<a href="https://fritzm.github.io/rk11-5.html"><h1>PDP-11/45: RK11 V - Checksum issues</h1></a>
Sun 21 May 2017
by <a class="url fn" href="https://fritzm.github.io/author/fritz-mueller.html">Fritz Mueller</a>
</div>
<div><p>Decided to use the disk utilities provided in PDP11GUI to write a fresh RT-11 pack. PDP11GUI successfully
assembled and downloaded a driver, then took a little under 2 hours to download the pack image over the
console serial line and write the pack without indicating any errors.</p>
<p>The resulting pack fared no better at boot than any of my existing legacy packs, however. I attempted
to verify the pack via PDP11GUI, and noticed that the controller was indicating checksum errors for every
sector on cylinders 64-127 and 192-202 (that is, whenever bit 11 of the RKDA was set). Tried this on several
other packs, including the RKDP pack which had previously booted, and found that these errors were returned
for these cylinders on <em>all</em> packs, so definitely a controller or drive issue, and not specific to any
particular pack.</p>
<p>Verified that bit 11 of the RKDA could be read and written normally, and that when so addressed the RK05
drive would mechanically seek to the correct cylinders. Programmed some format-mode reads (these just return
sector headers) manually via the front panel, and verified that the sector headers were being returned
correctly from disk for the affected cylinders.</p>
<p>Tried a few flipchip swaps to see if the affected bit would move: B18 and B19 (adder; sheet RK11-C-14; no
change), A21 and B21 (RKDB; sheet RK11-C-10; no change).</p>
<p>Programmed some all-mode reads (these return preamble, header, data, and postamble) manually via the front
panel. These showed that during reads of affected cylinders, bit 11 was stuck always on. When reading
unaffected cylinders, bit 11 turned on and off normally. So it seemed bit 11 was "leaking" from RKDA to
RKDB.</p>
<p>Seeing this, tried a few more swaps: A15 and B15 (internal bus, sheet RK11-C-20, no change), A23 and B23
(RKDB data path; sheet RK11-C-21; bingo!). Stuck bit went away on this last swap. So it looks like a
failed 7401, E2 on the M149 in slot A23. Pulled, socketed, and put some 7401 on order at Jameco where I
can pick them up tomorrow on my way in to work. Getting closer!</p></div>
<hr />
</div>
<div class="pagination">
<ul>
<li class="prev"><a href="https://fritzm.github.io/index2.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="active"><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=""><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/index4.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>