-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfeed.xml
More file actions
1643 lines (1177 loc) · 103 KB
/
feed.xml
File metadata and controls
1643 lines (1177 loc) · 103 KB
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
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.9.2">Jekyll</generator><link href="http://localhost:4000/feed.xml" rel="self" type="application/atom+xml" /><link href="http://localhost:4000/" rel="alternate" type="text/html" /><updated>2025-07-23T21:36:04-05:00</updated><id>http://localhost:4000/feed.xml</id><title type="html">decuser’s blog</title><subtitle>decuser's technical explorations and adventures in retro-computing, unix, and programming.</subtitle><author><name>decuser</name><email>will.senn@gmail.com</email></author><entry><title type="html">Fix for Thunderbird hangs while indexing messages</title><link href="http://localhost:4000/unix/2024/08/16/thunderbird-hangs-indexing.html" rel="alternate" type="text/html" title="Fix for Thunderbird hangs while indexing messages" /><published>2024-08-16T06:05:00-05:00</published><updated>2024-08-16T06:05:00-05:00</updated><id>http://localhost:4000/unix/2024/08/16/thunderbird-hangs-indexing</id><content type="html" xml:base="http://localhost:4000/unix/2024/08/16/thunderbird-hangs-indexing.html"><p>This note describes a method for fixing Thunderbird when it hangs while indexing.</p>
<p>I’m posting this in case it’s useful to folks and for my own reference. It took me a quite a while to figure it out.</p>
<p>So you have been using Thunderbird for your email for a while, on Windows, Linux, Mac, FreeBSD, and so on, for let’s say a couple of decades. If you copy your profile around much, you are bound to hit an indexing issue where Thunderbird is unable to index your archives. You open up Activity Manager and it helpfully reports:</p>
<p>Indexing 32 of 14243 messages in Archives/2002-2020/2016</p>
<p>Read on for the fix.
<!--more--></p>
<p>You watch the Activity Manager for a while, mesmerized perhaps by it’s stolid refusal to progress or go away. Then you fire up your favorite search engine and start looking for answers. If you’re lucky, this page pops up, otherwise you read drivel like “try again”, “delete your index and rebuild it”, or even reinstall.</p>
<p>If you’re on linux, or another unix that has similar functionality, you can do this!</p>
<p>In a terminal:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>strace thunderbird
</code></pre></div></div>
<p>In thunderbird:
open Tools-&gt;Activity Manager</p>
<p>When it gets to the place where it hangs, in the terminal, press CTRL-C to end the session. Capture the output from the terminal window into a text editor and search from the bottom up for the directory it’s complaining about. In the above example, look for the last occurance of 2016/. The trailing slash is important to include in your search to find the correct information.</p>
<p>In my strace output, the last occurance(s) are:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>access("/home/wsenn/Thunderbird/Mail/Local Folders-maildir/Archives.sbd/2002-2020.sbd/2016/cur", F_OK) = 0
openat(AT_FDCWD, "/home/wsenn/Thunderbird/Mail/Local Folders-maildir/Archives.sbd/2002-2020.sbd/2016/cur/1723773452464.eml", O_RDONLY) = 147
</code></pre></div></div>
<p>This is likely (so far, it’s always, but time may tell if there are exceptions) the file that’s breaking the indexing. Move it off somewhere to review:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir -p ~/Desktop/2016
mv "/home/wsenn/Thunderbird/Mail/Local Folders-maildir/Archives.sbd/2002-2020.sbd/2016/cur/1723773452464.eml" ~/Desktop/2016/
</code></pre></div></div>
<p>Restart thunderbird without strace and pull up activity manager to see if it continues. If so, rinse and repeat as needed.</p>
<p>– will</p>
<p><em>post added 2024-08-16 10:27:00 -0600</em></p></content><author><name>decuser</name><email>will.senn@gmail.com</email></author><category term="unix" /><summary type="html">This note describes a method for fixing Thunderbird when it hangs while indexing. I’m posting this in case it’s useful to folks and for my own reference. It took me a quite a while to figure it out. So you have been using Thunderbird for your email for a while, on Windows, Linux, Mac, FreeBSD, and so on, for let’s say a couple of decades. If you copy your profile around much, you are bound to hit an indexing issue where Thunderbird is unable to index your archives. You open up Activity Manager and it helpfully reports: Indexing 32 of 14243 messages in Archives/2002-2020/2016 Read on for the fix.</summary></entry><entry><title type="html">Research Unix Version 7 - 3.2</title><link href="http://localhost:4000/unix/research-unix/v7/2024/05/23/research-unix-v7-3.2.html" rel="alternate" type="text/html" title="Research Unix Version 7 - 3.2" /><published>2024-05-23T09:00:00-05:00</published><updated>2024-05-23T09:00:00-05:00</updated><id>http://localhost:4000/unix/research-unix/v7/2024/05/23/research-unix-v7-3.2</id><content type="html" xml:base="http://localhost:4000/unix/research-unix/v7/2024/05/23/research-unix-v7-3.2.html"><p>This is an updated note that covers building a working v7 instance from tape files that will run in the OpenSImH emulator. First, the reader is led through the restoration of a pristine v7 instance from tape to disk. Next, the reader is led through adding a regular user and making the system multi-user capable. Then, the reader is shown how to make the system multi-session cable to allow multiple simultaneous sessions. Finally, the system is put to use with hello world, DMR style, and the learn system is enabled.</p>
<p>The note explains each step of the process in detail.</p>
<!--more-->
<p>Last Updated May 23, 2024</p>
<h3 id="changes-since-revision-31">Changes since revision 3.1</h3>
<p>Revision 3.2 - minor revision:</p>
<ul>
<li>Tape format issue fixed in mktape.pl and mktape.py, resulted in updated image on tuhs.</li>
<li>Updated note for Linux Mint 21.3 “Virginia” host and latest Open-SIMH</li>
</ul>
<p>Here’s the note, as a pdf:</p>
<iframe allow="autoplay" height="480" src="https://drive.google.com/file/d/1eGrdZVc2R-hFfsbJ70PNbWBGNEXCLN1W/preview" width="640"></iframe>
<p>Local copy here: <a href="/assets/pdf/unix/research-unix-7-pdp11-45-3.2.pdf">research-unix-7-pdp11-45-3.2.pdf</a>
<!--more--></p>
<p><em>post added 2024-05-23 08:00:00 -0600</em></p></content><author><name>decuser</name><email>will.senn@gmail.com</email></author><category term="unix" /><category term="research-unix" /><category term="v7" /><summary type="html">This is an updated note that covers building a working v7 instance from tape files that will run in the OpenSImH emulator. First, the reader is led through the restoration of a pristine v7 instance from tape to disk. Next, the reader is led through adding a regular user and making the system multi-user capable. Then, the reader is shown how to make the system multi-session cable to allow multiple simultaneous sessions. Finally, the system is put to use with hello world, DMR style, and the learn system is enabled. The note explains each step of the process in detail.</summary></entry><entry><title type="html">Will’s Geometry - A Setting Out.</title><link href="http://localhost:4000/geometry/2023/12/19/wills-geometry.html" rel="alternate" type="text/html" title="Will’s Geometry - A Setting Out." /><published>2023-12-19T06:05:00-06:00</published><updated>2023-12-19T06:05:00-06:00</updated><id>http://localhost:4000/geometry/2023/12/19/wills-geometry</id><content type="html" xml:base="http://localhost:4000/geometry/2023/12/19/wills-geometry.html"><p>This is a note where I begin to develop my own geometry based on the example of Euclid, but with an eye towards addressing its shortcomings - what hubris?! But seriously, I’m pretty sure my geometry will pale in comparison. The purpose of the exploration is not to show off, but to learn more about the world and in this regard, will be interesting and educational.</p>
<!--more-->
<p>Gotta start somewhere!</p>
<p>Start from first principles - the evidents.</p>
<p>Shapes exist and are perceived. That is, we see and describe the world around us in abstract terms and shapes are abstract. As we abstract away details and try to describe things that exist, we highlight some things / aspects of things, and disregard others. We strive to arrive at useful ways of referring to groups of / sets of objects. Geometry, which started as a way of measuring land, has evolved into an ever-abstracting study of shape. What is shape? Wow, so hard to establish the bare necessities. Maybe a shape is a collection of points? What is a collection and what is a point?</p>
<p>Let’s just say (posit) that a collection is just what it sounds like, one or more than one of something, or nothing at all (for convenience, later). In this case, a collection of points. A point being the idea of the smallest thing (or not thing), imaginable. We represent this idea generally with a dot drawn on a page. Keep in mind that a point is an idea and doesn’t have width, height, or any physical measure, whereas the dot does.</p>
<p>Maybe think of the dot as a graph (physical representative) of the point and imagine zooming in on the dot, imagine it never changing in appearance, whereas the area around it expands, endlessly.</p>
<p>We have our first postulates:</p>
<ul>
<li>a point is an idea that can be represented by a dot. It has no measure.</li>
<li>a collection (set) is a collection of zero or more points.</li>
</ul>
<p>What can we do with our postulates? Not much, at this “point” :). We can put points into a collection and take them out again. We can imagine that our collection, thus created, refers to different points. But, if a point has no measure, or other attribute, how can two be different?</p>
<p>Now we can posit something new about points, relationship. Points can be different. If they are different, they cannot be the same point :). This is an intuition related to the nature of information - any difference that makes a difference to a knowing subject. But again, how are they different? We are in desperate need of a property or aspect of points with which to differentiate them. Naming them provides one basis - we can call our points by name. Let’s say A is one of our imaginary points and B is another - difference! But, that’s of limited utility in the context of shapes, so we look for another. How about location. Wow! That “maps” to our intuition pretty well, points are located. What this means will be expanded on, but for now, just know that location simply means that point A is not in the same place as B, there is difference. In space, this would mean that points A and B do not occupy the same space, and that’s reasonable and seems consistent with reality, but in this case we are only suggesting that A and B are different and that difference is location.</p>
<p>This brings us to our next postulate:</p>
<ul>
<li>location - objects (in our world, there are collections and points only) have difference.</li>
</ul>
<p>Location is tricky to describe, but I mean that points are located (have difference) somewhere, even if its only in our mental world. We will represent our idea by referring to the idea of physical space, in the real world, that is the 3 dimensions we normally consider space.</p>
<p>How are points related locationally (is that even a word)? Suppose that points can be next to each other. Indeed, if two points exist (even in the mind), in order for them to be different, by definition (see above), they have different locations and one is next to the other (if is isn’t clear, then here they are so defined, as being next to each other).</p>
<p>The hard part comes when we add a third point. Where are the points in relation to each other. If points have no measure, then why can’t they all be next to each other? If they are all next to each other, then they can’t not be next to each other, right? But, we know this isn’t how the real world works, things can be between each other… ick, so hard to explain betweeness. Why? Well, if a point has no measure, then it can’t be put between two points. Unless, perhaps, we establish the idea that there is order on the universe. Let’s do that. The universe is ordered, so mote it be. If that’s the case, then we have another postulate:</p>
<ul>
<li>order - the universe has order</li>
</ul>
<p>That is, one thing can be said to be ordered (precede, or follow) with respect to another. Order is imposed, so, without knowing the established order, one can only detect it and not know what the origin or orientation of that order is in its entirety.</p>
<p>Now, betweeness becomes evident as the established order of three objects (points). We say, determine, decree, demand, etc. that a point is between two others. This may sound silly and needlessly complex, but it is what it is and betweeness is our next postulate:</p>
<ul>
<li>betweeness - the property of a point that indicates it precedes a particular point and follows another particular point</li>
</ul>
<p>Now we can speak about dimensionality. We can define dimensions thusly, a single dimension exists when a point is brought into existence. Another, the second dimension, when three points are realized. Why three and not two, well, I’m not sure, with two points we can speak about the relationship between the points, A is not B, B is not A, A exists, B exists, A and B exist, but that’s pretty much it. In order to go further, we really need at least 3 points (this is an exploration of the mind, not definitive). With three points, we can say much, much more. We can say is everything we can say about two, plus some more.</p>
<p>Let’s say that A and B and C are points in our universe. A is next to B and B is next to C, but C is not next to A. Then, B is between A and C.</p>
<p>Here’s a thought exercise to be integrated into the discussion as it is determined where it should go…</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Think of a light filled universe.
Bring a point, A, into existence. If the point had measure, and the light had a source, this would change the universe in a measurable way, as it stands this is not the case. It just is.
Bring another point B, into existence. No change... or is there? There is difference, but not measurable.
Bring a third point C, into existence, such that we say B is between A and C. Again, difference, but not measurable. Why not? Because points have no measure!
But when we bring our points into the real world, and of necessity given them measure, voila! There's going to be measurable differences. But, very local. Perspective is hinted at here - we need it in order to appreciate our new universe. If we were to place our consciousness at a point and look, as it were, around, what would we "see". If we were at A, we would see B, if we were at C, we could also see B, but from A, we could not see C and from C we could not see A. Wow!
</code></pre></div></div>
<p>But, for now, we’re sticking with betweeness being nothing more than established by fiat and being definitional in nature. B is between A and C because I say it is and beyond establishing order between A, B, C, has no material effect on anything.</p>
<p>Ah, but let’s give another name to that order of points and introduce another postulate:</p>
<ul>
<li>line - a line is an ordered set of points</li>
</ul>
<p>But, it’s tricky again, the line may be a set of points, but surely, we can’t refer to a line by it’s points, that’s nuts. So, we’ll say that a line can be named by any two points, belonging to the set, where the set established the order. Line AB therefore is part of ABC. As is AC and BC.</p>
<p>Let’s say that the order we write the points matches their ordering, this means AB is not the same ordering as BA, and ABC means that B is between A and C, with A preceding and C following.</p>
<p>To recap what we have so far:</p>
<ul>
<li>point</li>
<li>collection</li>
<li>location (difference)</li>
<li>order</li>
<li>betweeness</li>
<li>line</li>
</ul>
<p>The point is fairly standard to think about in this way, collection or set is what we would expect, location is a bit different :),, order is meta, betweeness is necessary, but I’m no geometry expert, so I could be naive on this. Line is way different from what it is usually described as, but this is because I’m working through it from the ground up.</p>
<p>… enough for today. Too many gaps, too many doubts, need to consider for a bit :).</p>
<p>– will</p>
<p><em>post edited 2023-12-19 13:58:00 -0600</em></p></content><author><name>decuser</name><email>will.senn@gmail.com</email></author><category term="GEOMETRY" /><summary type="html">This is a note where I begin to develop my own geometry based on the example of Euclid, but with an eye towards addressing its shortcomings - what hubris?! But seriously, I’m pretty sure my geometry will pale in comparison. The purpose of the exploration is not to show off, but to learn more about the world and in this regard, will be interesting and educational.</summary></entry><entry><title type="html">Geometry Explorations</title><link href="http://localhost:4000/geometry/2023/12/19/geometry-explorations.html" rel="alternate" type="text/html" title="Geometry Explorations" /><published>2023-12-19T05:05:00-06:00</published><updated>2023-12-19T05:05:00-06:00</updated><id>http://localhost:4000/geometry/2023/12/19/geometry-explorations</id><content type="html" xml:base="http://localhost:4000/geometry/2023/12/19/geometry-explorations.html"><p>This note sets up a series of related notes pertaining to my explorations in Geometry and by extension, Maths.</p>
<p>The explorations are my work in trying to make sense of the world through math. They are presented here, in part, to motivate me to express my thoughts in a more organized fashion than I might otherwise, and in part to share in the hopes that some small few might benefit or wish to chat about things.</p>
<p>So, enjoy and if you do, feel free to email me about it.</p>
<!--more-->
<p>The notes to come are not mathematical treatises, they are mostly me trying to figure stuff out. I expect they will be superseded with more intelligible writings as I learn more, but they are not definitive. They are more like a journal where I lay out my thoughts of the moment.</p>
<p>I have always found math confusing and so much of it lacking comprehensibility or cohesion. When I came across Geometry, as part of my personal remediation plan doing Saxon Math, begun about 7 years ago. I was stunned to find something that actually made sense, was coherent and cohesive. It turns out that Euclid, writer of the Elements of Geometry, established by example, one of the greatest models of thought that the world has ever known. I dug in to his subject, Geometry, and I dug in hard. I worked through propositions referenced by Saxon, in the Elements. I was mesmerized, but not at first. At first, it seemed incredibly difficult to understand, but after many, many hours of work and contemplation, it clicked and I got it… even if I couldn’t apply it in novel circumstances without great difficulty on the drop of a dime. But, I felt like I could see where it was coming from and where it was going. Thank you Euclid and thank you John Saxon for introducing me to the subject in such an accessible way.</p>
<p>Before I dive into the explorations, I feel compelled to defend Euclid, who while appreciated by many, is mocked unfairly at times by folks. Euclid’s postulates are not complete. He made some assumptions that people eventually decided were unwarranted. He didn’t prove every case of every postulate. Other geometries are possible and valid. So what? Euclid wrote a work of mathematics that lives as the finest example of mathematics ever written (to date). He didn’t write a book on how to write axiomatically, or how to write with rigor. If he had, things would have been quite different. Rather, he showed the world, by example, how to write a book with axioms and rigor, that would stand as the eminent example of how to do so, for the better part of two and a half millennia.</p>
<p>I find it amusing and bemusing that folks spend vast amounts of time and energy learning Euclid’s work, only to turn around and smugly criticize its flaws. To my mind they are like children who want to show their independence from their parents - meanwhile, everyone can see by looking that they are their parent’s children. In a similar vein, modernists from David Hilbert to Bertrand Russell, while widely criticizing Euclid, so clearly resemble their forbear, that it beggars belief. Its shocking to me that they wouldn’t simply correct the flaws inherent in his work (as an exemplar of a mindset) and extend it, without bad-mouthing it. These geniuses, and geniuses they so clearly are, have not, with all there labor achieved a work as influential as the work attributed to Euclid.</p>
<p>Anyway, enough ranting, off to explore :).</p>
<p>– will</p>
<p><em>post added 2023-12-19 12:27:00 -0600</em></p></content><author><name>decuser</name><email>will.senn@gmail.com</email></author><category term="GEOMETRY" /><summary type="html">This note sets up a series of related notes pertaining to my explorations in Geometry and by extension, Maths. The explorations are my work in trying to make sense of the world through math. They are presented here, in part, to motivate me to express my thoughts in a more organized fashion than I might otherwise, and in part to share in the hopes that some small few might benefit or wish to chat about things. So, enjoy and if you do, feel free to email me about it.</summary></entry><entry><title type="html">MACLISP in ITS running on an emulated PDP-10</title><link href="http://localhost:4000/lisp/2023/07/31/maclisp.html" rel="alternate" type="text/html" title="MACLISP in ITS running on an emulated PDP-10" /><published>2023-07-31T10:03:00-05:00</published><updated>2023-07-31T10:03:00-05:00</updated><id>http://localhost:4000/lisp/2023/07/31/maclisp</id><content type="html" xml:base="http://localhost:4000/lisp/2023/07/31/maclisp.html"><p>This is a longer note that describes the process of getting ITS (Incompatible Timesharing System) up and running in order to run MACLISP. ITS is quite a large system and it has many different programming languages and programs available. In this note, we will only be using lisp and emacs, but future notes will explore logo, and perhaps other languages found in the distribution.</p>
<p><img src="/assets/img/lisp/Terminal_006.png" alt="one" /></p>
<!--more-->
<h2 id="resources">Resources</h2>
<ul>
<li>
<p><strong>The ITS operating system github repo</strong> <a href="https://github.com/PDP-10/its">https://github.com/PDP-10/its</a></p>
</li>
<li>
<p><strong>The MACLISP manual</strong> <a href="http://www.maclisp.info/pitmanual">http://www.maclisp.info/pitmanual</a></p>
</li>
<li>
<p><strong>OpenSIMH</strong> <a href="https://opensimh.org/">https://opensimh.org/</a></p>
</li>
</ul>
<h2 id="prerequisites">Prerequisites</h2>
<ul>
<li>Linux - I’m running Debian 12 (bookworm)</li>
<li>A build environement (make, cc, and ld) - build-essential package on debian systems</li>
<li>OpenSIMH - any reasonably recent version should work</li>
</ul>
<h2 id="getting-started">Getting Started</h2>
<ul>
<li>Install some dependencies</li>
</ul>
<p>The pdp10-ka emulator requires - git, c compiler, make, expect, curses, autoconf, sdl2, sdl2-image, sdl2-net, gtk3. You will also need telnet and some network dependencies. Generally, whenever something complains about a missing dependency, google it and then <code class="language-plaintext highlighter-rouge">sudo apt install whatever</code>.</p>
<p>My own incanation was:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>sudo apt install -y bridge-utils build-essential expect gawk git libgtk-3-dev libpcap-dev libpcre3-dev ncurses-base ncurses-bin libncurses5-dev libpcap-dev libsdl2-2.0-0 libsdl2-dev libsdl2-image-dev libsdl2-net-dev make net-tools telnet uml-utilities
</code></pre></div></div>
<ul>
<li>Create a Workarea</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir -p ~/workarea/retro/its/{dist,work}
cd ~/workarea/retro/its/dist
</code></pre></div></div>
<ul>
<li>Clone the ITS repository</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git clone https://github.com/PDP-10/its.git
</code></pre></div></div>
<ul>
<li>Download a working system</li>
</ul>
<p>This will just take a few minutes. The repo can also be completely built from source, but that takes a long time (an hour or more).</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cd its
make download EMULATOR=pdp10-ka
</code></pre></div></div>
<h2 id="prepare-the-sytem-to-be-run">Prepare the sytem to be run</h2>
<ul>
<li>Backup the original run file, so we can edit it</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cp out/pdp10-ka/run out/pdp10-ka/run.original
</code></pre></div></div>
<ul>
<li>Edit the run file for no network to start</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>vi out/pdp10-ka/run
# comment out lines dealing with imp
# set imp enabled
# set imp mac=e2:6c:84:1d:34:a3
# set imp ip=192.168.2.101/24
# set imp gw=172.31.1.100
# set imp host=10.3.0.6
# at imp tap:tap0
</code></pre></div></div>
<ul>
<li>Create a back up of the untested baseline</li>
</ul>
<p>This is a good starting point. If you run into problems, you can revert to this baseline without having to redownload stuff.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cd ..
tar cvjf untested-baseline.tar.bz2 its/build/pdp10-ka its/start its/out its/tools/sims/BIN/pdp10-ka
</code></pre></div></div>
<ul>
<li>Unpack the basline into work</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cd ../work
tar xvf ../dist/untested-baseline.tar.bz2
cd its
</code></pre></div></div>
<h2 id="run-its-the-first-time">Run ITS the first time</h2>
<ul>
<li>Start the simulator</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./start
KA-10 simulator V4.0-0 Current git commit id: 48186c90
/home/wsenn/workarea/retro/its/work/its/out/pdp10-ka/run-22&gt; at -u tk 10000 speed=300
%SIM-INFO: Listening on port 10000
/home/wsenn/workarea/retro/its/work/its/out/pdp10-ka/run-25&gt; at -u dpk 10002 speed=4800
%SIM-INFO: Listening on port 10002
/home/wsenn/workarea/retro/its/work/its/out/pdp10-ka/run-26&gt; at -u dpk line=11,10019 speed=4800
%SIM-INFO: Line 11 Listening on port 10019
/home/wsenn/workarea/retro/its/work/its/out/pdp10-ka/run-27&gt; at -u dpk line=15,10020 speed=4800
%SIM-INFO: Line 15 Listening on port 10020
/home/wsenn/workarea/retro/its/work/its/out/pdp10-ka/run-29&gt; at -u mty 10003 speed=50000
%SIM-INFO: Listening on port 10003
/home/wsenn/workarea/retro/its/work/its/out/pdp10-ka/run-30&gt; at -u mty line=9,10018 speed=9600
%SIM-INFO: Line 9 Listening on port 10018
/home/wsenn/workarea/retro/its/work/its/out/pdp10-ka/run-31&gt; at -u mty line=8,10017 speed=9600
%SIM-INFO: Line 8 Listening on port 10017
/home/wsenn/workarea/retro/its/work/its/out/pdp10-ka/run-32&gt; at -u mty line=7,10016;notelnet speed=50000
%SIM-INFO: Line 7 Listening on port 10016
/home/wsenn/workarea/retro/its/work/its/out/pdp10-ka/run-33&gt; at -u mty line=6,10015 speed=9600
%SIM-INFO: Line 6 Listening on port 10015
/home/wsenn/workarea/retro/its/work/its/out/pdp10-ka/run-35&gt; at ten11 10011
%SIM-INFO: Listening on port 10011
/home/wsenn/workarea/retro/its/work/its/out/pdp10-ka/run-37&gt; at auxcpu 10006
%SIM-INFO: Listening on port 10006
DSKDMP
</code></pre></div></div>
<p>If all went well, nothing failed and you ITS prints DSKDMP in the terminal window.</p>
<ul>
<li>Start ITS</li>
</ul>
<p>When DSKDMP is displayed, you can start ITS by typing <code class="language-plaintext highlighter-rouge">its&lt;CR&gt;&lt;ESC&gt;g</code> and it will start working. Ignore the NET message. We haven’t provided a working network, and won’t in this note. It isn’t needed.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>DSKDMP
its
$G
SALVAGER.317
IT IS NOW 3:25:48 PM EDT, MONDAY, JUL 31, 2023
KA ITS 1651 IN OPERATION AT 15:25:48
KA ITS 1651 SYSTEM JOB USING THIS CONSOLE.
TV 11 WENT DOWN -- 15:25:48
LOGIN TARAKA 0 15:25:49
TOP LEVEL INTERRUPT 200 DETACHED JOB # 4, USR:TARAKA CNAVRL 15:25:50
NET: TIMED OUT TRYING TO COME UP 15:25:58
IT IS NOW 3:26:17 PM EDT, MONDAY, JUL 31, 2023
LOGIN .BATCH 0 15:26:50
LOGIN GUNNER 0 15:27:50
</code></pre></div></div>
<h2 id="login-to-its-over-telnet-locally">Login to ITS over telnet (locally)</h2>
<ul>
<li>Determine the port</li>
</ul>
<p>After the time is displayed, you can connect via telnet or login at the console itself. Let’s connect via telnet. Look up above to where the dpk is attached:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>...&gt; at -u dpk 10002 speed=4800
%SIM-INFO: Listening on port 10002
</code></pre></div></div>
<ul>
<li>Connect to the ITS sever using telnet</li>
</ul>
<p>That’s our telnet port, fire up telnet and connect:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ telnet localhost 10002
Trying ::1...
Connected to localhost.
Escape character is '^]'.
Connected to the KA-10 simulator DPK device, line 0
</code></pre></div></div>
<ul>
<li>Initiate a session</li>
</ul>
<p>To begin a session with ITS, press <code class="language-plaintext highlighter-rouge">C-z</code>, that is press and hold Ctrl and z at the same time. In this note anytime you see C-char, this is a control chord and works this way. If you see M-char, it means press Esc, let it go, then press the char. The ordinary Meta-char chord where you press Alt and char at the same time doesn’t seem to work. Alternatively and in the output a control chord may appear as ^char.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>^Z
KA ITS.1651. DDT.1548.
TTY 21
You're all alone, Fair share = 99%
Welcome to ITS!
For brief information, type ?
For a list of colon commands, type :? and press Enter.
For the full info system, type :INFO and Enter.
Happy hacking!
</code></pre></div></div>
<ul>
<li>Actually login to ITS</li>
</ul>
<p>And it’s ready for you to login. The system is not secure, which is a good thing. Sorta like when you live somewhere where you don’t have to lock the doors - hint, move outta the city… but still, lock the doors :).</p>
<p>So, to login we will use a : command, that is a command that begins with a colon. The command to login is <code class="language-plaintext highlighter-rouge">:login loginname</code>. Initials were in vogue back when, so I will use my initials:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>:login wds
</code></pre></div></div>
<p>The system will respond with:</p>
<p><code class="language-plaintext highlighter-rouge">KA: WDS; WDS MAIL - NON-EXISTENT DIRECTORY</code></p>
<p>No worries, even though it complains about a non-existent directory, it’ll log you in anyway.</p>
<h2 id="first-steps">First Steps</h2>
<p>In this section we will set the terminal type, create a user directory and log out and back in so that ITS knows about the directory going forward. Otherwise, ITS will occasionally refuse to acknowledge the existence of the directory, usually at inopportune moments like when you are trying to save a ledit session.</p>
<ul>
<li>Set the terminal type</li>
</ul>
<p>We need to tell ITS about our terminal (it may think we’re a line printer terminal ATM). The command needed here is <code class="language-plaintext highlighter-rouge">:tctyp AAA</code>:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>:tctyp AAA
:KILL
*
</code></pre></div></div>
<ul>
<li>Create the user directory</li>
</ul>
<p>This is a little tricky and a lot weird, but what we are going to do is type <code class="language-plaintext highlighter-rouge">&lt;C-r&gt;wds; ..new. (udir).&lt;CR&gt;</code> where <CR> is an actual carriage return. This will create a new directory named `wds`:</CR></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>^R wds; ..new. (udir).
DSK: WDS; ..NEW. (UDIR) - FILE NOT FOUND
</code></pre></div></div>
<p>Ignore the FILE NOT FOUND error, it created the directory. To see this, change into the directory and type <code class="language-plaintext highlighter-rouge">C-f</code> to see the files, or just type <code class="language-plaintext highlighter-rouge">:listf wds;&lt;CR&gt;</code>. I’ll stop saying <code class="language-plaintext highlighter-rouge">&lt;CR&gt;</code> after : commands from this point forward, just know you need to end : commands with <code class="language-plaintext highlighter-rouge">&lt;CR&gt;</code>.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>:cwd wds
^F
KA WDS
FREE BLOCKS #2=784 #3=1523 #0=568 #1=1541
*
</code></pre></div></div>
<ul>
<li>Create a file in the directory to keep the salvager happy</li>
</ul>
<p>Apparently, there is a salvager that will get rid of empty directories. Let’s create a file in the directory. Let’s use emacs (this is a VERY early version, but should be quite familiar to any current emacs user). This version is a set of macros running in TECO, after RMS renamed it to EMACS, but before it became a standalone editor:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>:emacs --read-- --me--
</code></pre></div></div>
<p>Yup, that’s exactly as typed, files have two names (somebody smarter than me knows why, just trust me for now). This file is called “–read–” and “–me–”. For me it’s easier to just think of it as a name and extension separated by a space instead of a ., but ymmv.</p>
<p>The screen should clear and emacs should fire up in all it’s ancient glory:</p>
<p><img src="/assets/img/lisp/Terminal_005.png" alt="two" /></p>
<p>Let’s enter <code class="language-plaintext highlighter-rouge">This file is to prevent directory salvage.</code>, Then type <code class="language-plaintext highlighter-rouge">C-x C-s</code> to save and <code class="language-plaintext highlighter-rouge">C-x C-c</code> to exit emacs. See, familiar, and easy right (says the :wq vi guy)? Then to list the file in the directory, type <code class="language-plaintext highlighter-rouge">C-f</code>:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>*^F
KA WDS
FREE BLOCKS #2=784 #3=1523 #0=568 #1=1540
2 --READ --ME-- 1 ! 7/31/2023 15:57:23
*
</code></pre></div></div>
<p>yay? I think so, and hopefully, you feel the same way.</p>
<ul>
<li>Logout and back in again</li>
</ul>
<p>Let’s quickly logout and back in to get ITS to recognize our user directory properly:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>:logout
KA ITS 1651 Console 21 Free. 16:32:00
</code></pre></div></div>
<p>and back in with <code class="language-plaintext highlighter-rouge">C-z</code>:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>^Z
KA ITS.1651. DDT.1548.
TTY 21
You're all alone, Fair share = 99%
Welcome to ITS!
For brief information, type ?
For a list of colon commands, type :? and press Enter.
For the full info system, type :INFO and Enter.
Happy hacking!
:login wds
To see system messages, do ":MSGS&lt;CR&gt;"
</code></pre></div></div>
<p>and set the terminal type:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>tctyp AAA
:KILL
*
</code></pre></div></div>
<h2 id="program-in-maclisp">Program in MACLISP</h2>
<p>Let’s create some lisp and run MACLISP. This example uses emacs initially to create a lisp source file, then we run lisp standalone, load the file we created and use it’s function in our interpreter session. Then we will use ledit, a special mode of MACLISP using emacs from MACLISP on a special buffer.</p>
<ul>
<li>Use emacs to create the file <code class="language-plaintext highlighter-rouge">addtwo lisp</code>:</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>:EMACS addtwo lisp
(defun addtwo (x y)
(+ x y))
</code></pre></div></div>
<p>If you’ve been cutting and pasting as you followed along with the note, you might find that doesn’t work so great with emacs, so be careful. You may need to do it a line at a time. Anyway, enter the text, then <code class="language-plaintext highlighter-rouge">C-x C-s</code> and <code class="language-plaintext highlighter-rouge">C-x C-c</code>.</p>
<ul>
<li>Run MACLISP</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>*:LISP
LISP 2156
Alloc? n
*
</code></pre></div></div>
<p>We’re in! Let’s load our lisp file:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(LOAD "addtwo lisp")
T
</code></pre></div></div>
<p>Lisp responds T if it was able to load. Let’s use it in our session:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(addtwo 5 3)
10
</code></pre></div></div>
<p>Sure 5+3 is 8, right? Ha, it’s base 8 (octal). Yes, you can change it, but it is running on a dec vm, so base 8 is just, right, right?</p>
<p>That’s it for this first session, let’s quit:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(quit)
:KILL EMACS0$J
*
</code></pre></div></div>
<p><img src="/assets/img/lisp/Terminal_006.png" alt="one" /></p>
<p>yay again!</p>
<ul>
<li>Use LEDIT in MACLISP</li>
</ul>
<p>Let’s use ledit now. Start lisp up again, and invoke (ledit) straightaway:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>*:LISP
LISP 2156
Alloc? n
*
(ledit)
</code></pre></div></div>
<p>As soon as you type the closing parenthesis, emacs ledit will start up and your cursor will be top-left. The status line will display: <code class="language-plaintext highlighter-rouge">EMACS LEDIT (LISP) Main: *</code>:</p>
<p><img src="/assets/img/lisp/Terminal_007.png" alt="three" /></p>
<p>In ledit, let’s create the timestwo function:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(defun timestwo (x y)
(* x y))
</code></pre></div></div>
<p>This time, we will use some ledit magic and not treat it as a normal emacs session. To push the defined funtion to the environment, press <code class="language-plaintext highlighter-rouge">M-z</code> (<ESC> let go, then 'z'), then to exit ledit and return to lisp, type `C-x z`.</ESC></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>;Reading from LEDIT
TIMESTWO
;Edit Completed
*
</code></pre></div></div>
<p>Let’s try it out in our lisp environment:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(timestwo 5 2)
12
</code></pre></div></div>
<p>Nice, and correct!</p>
<p>We can still load the existing lisp file and use it too:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(load "addtwo lisp")
(addtwo (timestwo 2 3) (timestwo 3 7))
33
</code></pre></div></div>
<p>Cool.</p>
<ul>
<li>Exit LISP</li>
</ul>
<p>Let’s exit lisp:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>(quit)
:KILL LEDIT$J
*
</code></pre></div></div>
<p><img src="/assets/img/lisp/Terminal_008.png" alt="four" /></p>
<h2 id="shutdown-the-system">Shutdown the system</h2>
<p>To bring the system down, we will first logout out of our user account with <code class="language-plaintext highlighter-rouge">:logout</code>. Then we will <code class="language-plaintext highlighter-rouge">:login</code> with no user and proceed with a normal shutdown (if you don’t logout of the user account first, the shutdown will take 5 minutes).</p>
<ul>
<li>Logout of the user account</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>* :logout
KA ITS 1651 Console 21 Free. 16:42:56
</code></pre></div></div>
<ul>
<li>Login as an unnamed user</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>^Z
KA ITS.1651. DDT.1548.
TTY 21
You're all alone, Fair share = 99%
Welcome to ITS!
For brief information, type ?
For a list of colon commands, type :? and press Enter.
For the full info system, type :INFO and Enter.
Happy hacking!
</code></pre></div></div>
<ul>
<li>Initiate the shutdown</li>
</ul>
<p>First we initiate lock with <code class="language-plaintext highlighter-rouge">:lock</code>, then initiate the shutdown with <code class="language-plaintext highlighter-rouge">5down</code>, we will answer <code class="language-plaintext highlighter-rouge">Y</code> and <code class="language-plaintext highlighter-rouge">byeC-c</code>, to the prompts:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>:lock
(Please Log In)
LOCK.156
_5down
DO YOU REALLY WANT THE SYSTEM TO GO DOWN?
Y
___002 LOCK SYS DOWN MAIL WRITE
PLEASE ENTER A BRIEF MESSAGE TO USERS, ENDED BY ^C
bye^C
KA ITS 1651 NOT IN OPERATION 16:45:23
</code></pre></div></div>
<p>Since we are running in a telnet session, we can just end it. To exit telnet, press <code class="language-plaintext highlighter-rouge">^]</code> and at the telnet&gt; prompt, type <code class="language-plaintext highlighter-rouge">q</code>:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>^]
telnet&gt; q
Connection closed.
$
</code></pre></div></div>
<p>You can close the terminal and switch to the other terminal with our console session. You will see some console messages that are new and the last few should look like:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>SHUTDOWN COMPLETE
PI LEVEL 7 BUGDDT. TYPE &lt;ALTMODE&gt;P TO CONTINUE.
YOU ARE NOW IN DDT.
BUGPC/ CAI COFFI4+1 $Q-2/ JRST COFFI7
</code></pre></div></div>
<p>At this point ITS is shut down. To exit, we will type <code class="language-plaintext highlighter-rouge">^\</code> to suspend the emulator and return to the sim&gt; prompt, then type <code class="language-plaintext highlighter-rouge">q</code> to exit the sim:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>^\
Simulation stopped, PC: 773121 (CONSO 120,40)
sim&gt; q
Goodbye
$
</code></pre></div></div>
<h2 id="back-up-the-working-system">Back up the working system</h2>
<p>It is a really good idea to back up the tested working system. This way, you can always get back to what worked with minimal fuss:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cd ../../dist
tar cvjf tested-working.tar.bz2 its/build/pdp10-ka its/start its/out its/tools/sims/BIN/pdp10-ka
</code></pre></div></div>
<p>That’s it for now. In another note, I will walk through setting up networking and using LOGO in ITS with a graphical terminal and turtle.</p>
<p>Let me know if you run into any issues.</p>
<p>Later, Will</p>
<p><em>post added 2023-07-31 18:07:00 -0600</em></p></content><author><name>decuser</name><email>will.senn@gmail.com</email></author><category term="LISP" /><summary type="html">This is a longer note that describes the process of getting ITS (Incompatible Timesharing System) up and running in order to run MACLISP. ITS is quite a large system and it has many different programming languages and programs available. In this note, we will only be using lisp and emacs, but future notes will explore logo, and perhaps other languages found in the distribution.</summary></entry><entry><title type="html">Franz LISP Opus 32 in 3BSD running on an emulated VAX 780</title><link href="http://localhost:4000/lisp/2023/07/31/franz-lisp.html" rel="alternate" type="text/html" title="Franz LISP Opus 32 in 3BSD running on an emulated VAX 780" /><published>2023-07-31T08:03:00-05:00</published><updated>2023-07-31T08:03:00-05:00</updated><id>http://localhost:4000/lisp/2023/07/31/franz-lisp</id><content type="html" xml:base="http://localhost:4000/lisp/2023/07/31/franz-lisp.html"><p>This note describes how to set up and run Franz LISP Opus 32 running on 3BSD running on an emulated VAX 780. This version of Franz LISP is Opus 32 and it is a LISP 1.5 derived LISP from 1979.</p>
<p><img src="/assets/img/lisp/Terminal_004.png" alt="one" /></p>
<!--more-->
<p>Wikipedia notes:</p>
<blockquote>
<p>In computer programming, Franz Lisp is a discontinued Lisp programming language system written at the University of California, Berkeley (UC Berkeley, UCB) by Professor Richard Fateman and several students, based largely on Maclisp and distributed with the Berkeley Software Distribution (BSD) for the Digital Equipment Corporation (DEC) VAX minicomputer. Piggybacking on the popularity of the BSD package, Franz Lisp was probably the most widely distributed and used Lisp system of the 1970s and 1980s.</p>
</blockquote>
<blockquote>
<p>The name is a pun on the composer and pianist Franz Liszt.</p>
</blockquote>
<h2 id="resources">Resources</h2>
<ul>
<li>
<p><strong>3BSD Tape File</strong> <a href="https://sourceforge.net/projects/bsd42/files/Install%20tapes/3%20BSD/">https://sourceforge.net/projects/bsd42/files/Install%20tapes/3%20BSD/</a></p>
</li>
<li>
<p><strong>Franz Lisp Manual - Opus 38.69 from 1982</strong> <a href="https://www.softwarepreservation.org/projects/LISP/franz/Franz_Lisp_July_1983.pdf">https://www.softwarepreservation.org/projects/LISP/franz/Franz_Lisp_July_1983.pdf</a></p>
</li>
</ul>
<p>This is the earliest manual I could find. When you’re online in 3BSD, there is documentation for the Franz LISP Opus 32, in <code class="language-plaintext highlighter-rouge">/usr/doc/lisp</code>.</p>
<ul>
<li><strong>Gunkies 3BSD Page</strong> <a href="https://gunkies.org/wiki/3BSD">https://gunkies.org/wiki/3BSD</a></li>
</ul>
<p>An invaluable resource for getting things up an running with a minimum of fuss.</p>
<ul>
<li><strong>OpenSIMH</strong> <a href="https://opensimh.org/">https://opensimh.org/</a></li>
</ul>
<p>The simulator I’m using.</p>
<h2 id="prerequisites">Prerequisites</h2>
<ul>
<li>Linux - I’m running Debian 12 (bookworm)</li>
<li>A build environement (make, cc, and ld) - build-essential package on debian systems</li>
<li>OpenSIMH - any reasonably recent version should work</li>
</ul>
<h2 id="overview">Overview</h2>
<p>Much of this note is based on the Gunkies 3BSD page. Specifically, tboot.ini, dboot.ini, uudecode, and the 3BSD boot block are from that page <a href="https://gunkies.org/wiki/3BSD">https://gunkies.org/wiki/3BSD</a>. This note is just organized differently and getting 3BSD running here, is specifically for running Franz LISP.</p>
<h2 id="getting-started">Getting Started</h2>
<ul>
<li>Create a workarea</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mkdir -p ~/workarea/retro/franz/{dist,work}
cd ~/workarea/retro/franz/dist
</code></pre></div></div>
<ul>
<li>Download 3BSD and a bootblock</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>wget https://decuser.github.io/assets/files/lisp/3bsd.tap.bz2
wget https://decuser.github.io/assets/files/lisp/boot3bsd
</code></pre></div></div>
<ul>
<li>Verify you have the right files</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>shasum *
f8b59d933896678f04e9a0b0284466563d650c24 3bsd.tap.bz2
482464bbd3ceb8ec9f02036ad06dbe5a181572e2 boot3bsd
</code></pre></div></div>
<ul>
<li>Unpack the tape file and copy the bootblock into work</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cd ../work
bzcat ../dist/3bsd.tap.bz2 &gt; 3bsd.tap
cp ../dist/boot3bsd .
</code></pre></div></div>
<ul>
<li>Create an ini file for booting from tape</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cat &lt;&lt;EOF &gt;tboot.ini
set tto 7b
set rq dis
set lpt dis
set rl dis
set hk dis
set rq dis
set rqb dis
set rqc dis
set rqd dis
set ry dis
set ts dis
set tq dis
set dz lines=8
set rp0 rp06
at rp0 rp06.disk
set tu0 te16
at tu0 3bsd.tap
D 50000 20009FDE
D 50004 D0512001
D 50008 3204A101
D 5000C C113C08F
D 50010 A1D40424
D 50014 008FD00C
D 50018 C1800000
D 5001C 8F320800
D 50020 10A1FE00
D 50024 00C139D0
D 50028 04c1d004
D 5002C 07e15004
D 50030 0000f750
go 50000
go 0
EOF
</code></pre></div></div>
<h2 id="build-the-system">Build the system</h2>
<ul>
<li>Boot to tape</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>vax780 tboot.ini
/home/wsenn/workarea/retro/franz/work/tboot.ini-15&gt; at rp0 rp06.disk
%SIM-INFO: RP0: Creating new file: rp06.disk
/home/wsenn/workarea/retro/franz/work/tboot.ini-17&gt; at tu0 3bsd.tap
%SIM-INFO: TU0: Tape Image '3bsd.tap' scanned as SIMH format
HALT instruction, PC: 00050033 (HALT)
=
</code></pre></div></div>
<ul>
<li>Restore Unix</li>
</ul>
<p><code class="language-plaintext highlighter-rouge">=</code> is the tape’s minimal OS prompt. From here we will make a new filesystem on the rp06 and restor unix from the tape to the disk.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>=mkfs
file sys size: 7942
file system: hp(0,0)
isize = 5072
m/n = 3 500
=restor
Tape? ht(1,1)
Disk? hp(0,0)
Last chance before scribbling on disk.
End of tape
=
</code></pre></div></div>
<p>Press enter after <code class="language-plaintext highlighter-rouge">Last chance before scribbling on disk.</code> to continue.</p>
<ul>
<li>Restore <code class="language-plaintext highlighter-rouge">/usr</code></li>
</ul>
<p>Boot Unix, make a new fileystem for /usr, and restore it from tape.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>=boot
Boot
: hp(0,0)vmunix
61856+61008+70120 start 0x4B4
VM/UNIX (Berkeley Version 2.7) 2/10/80
real mem = 8323072
avail mem = 8062976
ERASE IS CONTROL-H!!!
# /etc/mkfs /dev/rrp0g 145673
isize = 65488
m/n = 3 500
# /etc/mount /dev/rp0g /usr
# cd /usr
# cp /dev/rmt5 /dev/null
# cp /dev/rmt5 /dev/null
# tar xbf 20 /dev/rmt1
#
</code></pre></div></div>
<p>The restore can take a couple of minutes, be patient. The two lines:</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># cp /dev/rmt5 /dev/null
# cp /dev/rmt5 /dev/null
</code></pre></div></div>
<p>Are just a way to get the tape device to fast forward to the tape file we want.</p>
<ul>
<li>Cleanly shut unix down</li>
</ul>
<p>First we will sync and unmount any mounted devices, then we will sync our system. This is the “normal” way to shut down the unix environment in simh</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># sync
# sync
# sync
# cd /
# /etc/umount /dev/rp0g
# sync
# sync
# sync
# ^E
Simulation stopped, PC: 8000085F (BLBC 80010FA0,8000085F)
sim&gt; q
Goodbye
$
</code></pre></div></div>
<ul>
<li>Backup the baseline system</li>
</ul>
<p><code class="language-plaintext highlighter-rouge">tar cvzf rp06-baseline.tar.gz rp06.disk</code></p>
<h2 id="boot-the-system-and-run-franz-lisp">Boot the system and run Franz LISP</h2>
<ul>
<li>Create a disk boot ini</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cat &lt;&lt;EOF &gt;dboot.ini
set tto 7b
set rq dis
set lpt dis
set rl dis
set hk dis
set rq dis
set rqb dis
set rqc dis
set rqd dis
set ry dis
set ts dis
set tq dis
set dz lines=8
set rp0 rp06
at rp0 rp06.disk
set tu0 te16
load -o boot3bsd 0
go 2
EOF
</code></pre></div></div>
<ul>
<li>Boot to disk</li>
</ul>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>$ vax780 dboot.ini
VAX 11/780 simulator Open SIMH V4.1-0 Current simh git commit id: cf47a20f
Boot
:
</code></pre></div></div>
<p>At the <code class="language-plaintext highlighter-rouge">:</code> prompt, provide the location of the kernel, <code class="language-plaintext highlighter-rouge">hp(0,0)vmunix</code></p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>: hp(0,0)vmunix
61856+61008+70120 start 0x4B4
VM/UNIX (Berkeley Version 2.7) 2/10/80
real mem = 8323072
avail mem = 8062976
ERASE IS CONTROL-H!!!
#
</code></pre></div></div>
<p>Change the root password. It needs to be at least 6 characters long.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># passwd root
New password:
Retype new password:
#
</code></pre></div></div>
<p>To go into multi-user mode, press <code class="language-plaintext highlighter-rouge">^d</code>. this will allow you to login. Login as root with the new password.</p>
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#^D
Sat Aug 30 06:40:18 PDT 1980
entering rc
clearing mtab
mounting /usr on /dev/rp0g