forked from chrislgarry/Apollo-11
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Apollo-11.nw
1008 lines (830 loc) · 48.5 KB
/
Apollo-11.nw
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
\documentclass{book}
\usepackage{noweb}
\usepackage{hyperref}
\hypersetup{final=true}
\usepackage[toc,page]{appendix}
\usepackage{multicol}
\usepackage{framed}
\usepackage{graphicx}
\usepackage{xcolor}
\let\oldquote=\quote
\let\endoldquote=\endquote
\colorlet{shadecolor}{green!8}
\renewenvironment{quote}{\begin{shaded*}\begin{oldquote}}{\end{oldquote}\end{shaded*}}
\title{Reverse Engineering the Apollo 11 Guidance Computer (AGC) Source Code}
\author{Edited by Gary Young \\ \\ \href{mailto:[email protected]}{[email protected]}}
\begin{document}
\pagestyle{noweb}
\maketitle
%\includegraphics{images/avatar.jpg}
\tableofcontents
\newpage
<<latex header>>=
echo "\documentclass{book}";
echo "\usepackage{noweb}";
echo "\usepackage{hyperref}";
echo "\hypersetup{final=true}";
echo "\usepackage[toc,page]{appendix}";
echo "\usepackage{multicol}";
echo "\usepackage{framed}";
echo "\usepackage{graphicx}";
echo "\usepackage{xcolor}";
echo "\let\oldquote=\quote";
echo "\let\endoldquote=\endquote";
echo "\colorlet{shadecolor}{green!8}";
echo "\renewenvironment{quote}{\begin{shaded*}\begin{oldquote}}{\end{oldquote}\end{shaded*}}";
echo "";
echo "\title{Reverse Engineering\\The Apollo 11 Guidance Computer (AGC)\\$prog Source Code}";
echo "\author{Edited by Gary Young \\ \\ \href{mailto:[email protected]}{[email protected]}}";
echo "";
echo "\begin{document}";
echo "\pagestyle{noweb}";
echo "";
echo "\maketitle";
echo "%\includegraphics{images/avatar.jpg}";
echo "\tableofcontents";
echo "\newpage";
echo "";
@
\chapter{Introduction}
<<README.md>>=
Apollo-11
=========
README.md
=========================================================
Literate Apollo-11 code and images of original card decks
---------------------------------------------------------
### About:
I've cloned and intend to follow the [chrislgarry/Apollo-11](https://github.com/chrislgarry/Apollo-11) repository, with additions.
My project is at [proudindiv/Apollo-11](https://github.com/proudindiv/Apollo-11) on [github](https://github.com).
My current objectives are to literate the original Apollo 11 source code and to reverse engineer images of the original card decks.
I hope to produce something useful to the community and
to submit PRs for issues I identify between the transcriptions in that repository and the original source scans for [Luminary 099](http://www.ibiblio.org/apollo/ScansForConversion/Luminary099/) and [Comanche 055](http://www.ibiblio.org/apollo/ScansForConversion/Comanche055/).
### Contents of my Apollo-11 Repository:
1. **Comanche055** and **Luminary099** directory contents track the original repository.
1. The noweb file **Apollo-11.nw**, which creates **Apollo-11.pdf**, README.md, and
the files that generate the others (Comanche055.sh, and Luminary099.sh and
in turn Comanche055.nw, Luminary099.nw, **Comanche055.pdf**, **Luminary099.pdf**,
Comanche055.agc, and Luminary099.agc), is my in progress reverse engineering
of the code in the original repository.
**Comanche055.card** and **Luminary099.card** will be generated from the .agc files.
The interesting output products are the .pdf files.
1. **extern** and **intern** contain generated files that are part of my process and
are not for human consumption.
1. **README.md** is this explanation and contains the content of the original repositry
README.md below.
### Tools Used:
My main tool is **vi** on **Linux**.
I also use **TeXstudio** and **ReText**, with **noweb**, on the **ubuntu mate** operating system:
To compile the noweb .nw files I use this user command in TeXstudio:
```
noweb %.nw | pdflatex -synctex=1 -interaction=nonstopmode %.tex
```
Eventually I'll create a Makefile to show the dependencies and constructions.
### Web References to the Apollo-11 Project:
- [QUARTZ: "BURN, BABY! BURN!"](http://qz.com/726338/the-code-that-took-america-to-the-moon-was-just-published-to-github-and-its-like-a-1960s-time-capsule/)
The code that took America to the moon was just published to GitHub,
and it’s like a 1960s time capsule,
Written by
Keith Collins,
July 09, 2016.
- [Apollo Guidance Computer emulation by Dean Koska](https://www.youtube.com/watch?v=hyhI85Rd1kI)
This Palm Centro program is running the computer software used on the Apollo moon landings.
It utilizes Ron Burkey's Virtual AGC engine for the emulation (www.ibiblio.org/apollo).
- [Virtual AGC Home Page - Ibiblio](http://www.ibiblio.org/apollo/)
- [slashdot: Assembly Code That Took America to the Moon Now Published On GitHub](https://developers.slashdot.org/story/16/07/10/162241/assembly-code-that-took-america-to-the-moon-now-published-on-github)
- [Skylab quick-reference card](http://www.ibiblio.org/apollo/NARA-SW/SkylabDataCards.pdf)
- [Space Guidance Analysis (SGA) memos](http://www.ibiblio.org/apollo/links.html#Space_Guidance_Analysis_SGA_memos)
****************************************************************************************************
Apollo-11
=========
*Also available in: [English](README.md), [简体中文](README.zh_cn.md), [正體中文](README.zh_tw.md).*
Original Apollo 11 guidance computer (AGC) source code for Command Module (Comanche055) and Lunar Module (Luminary099). Digitized by the folks at [Virtual AGC](http://www.ibiblio.org/apollo/) and [MIT Museum](http://web.mit.edu/museum/). The goal is to be a repo for the original Apollo 11 source code. As such, PRs are welcome for any issues identified between the transcriptions in this repository and the original source scans for [Luminary 099](http://www.ibiblio.org/apollo/ScansForConversion/Luminary099/) and [Comanche 055](http://www.ibiblio.org/apollo/ScansForConversion/Comanche055/), as well as any files I may have missed.
##Compilation
If you are interested in compiling the original source code, check out [Virtual AGC](https://github.com/rburkey2005/virtualagc).
##Attribution
Copyright: Public domain.
Filename: CONTRACT_AND_APPROVALS.agc
Purpose: Part of the source code for Colossus 2A, AKA Comanche 055.
It is part of the source code for the Command Module's (CM)
Apollo Guidance Computer (AGC), for Apollo 11.
Assembler: yaYUL
Contact: Ron Burkey <[email protected]>.
Website: www.ibiblio.org/apollo.
Mod history: 2009-05-06 RSB Transcribed from page images.
This source code has been transcribed or otherwise adapted from digitized
images of a hardcopy from the MIT Museum. The digitization was performed
by Paul Fjeld, and arranged for by Deborah Douglas of the Museum. Many
thanks to both. The images (with suitable reduction in storage size and
consequent reduction in image quality as well) are available online at
www.ibiblio.org/apollo. If for some reason you find that the images are
illegible, contact me at [email protected] about getting access to the
(much) higher-quality images which Paul actually created.
Notations on the hardcopy document read, in part:
Assemble revision 055 of AGC program Comanche by NASA
2021113-051. 10:28 APR. 1, 1969
Page 1
#************************************************************************
# *
# THIS AGC PROGRAM SHALL ALSO BE REFERRED TO AS: *
# *
# *
# COLOSSUS 2A *
# *
# *
# THIS PROGRAM IS INTENDED FOR USE IN THE CM AS SPECIFIED *
# IN REPORT R-577. THIS PROGRAM WAS PREPARED UNDER DSR *
# PROJECT 55-23870, SPONSORED BY THE MANNED SPACECRAFT *
# CENTER OF THE NATIONAL AERONAUTICS AND SPACE *
# ADMINISTRATION THROUGH CONTRACT NAS 9-4065 WITH THE *
# INSTRUMENTATION LABORATORY, MASSACHUSETTS INSTITUTE OF *
# TECHNOLOGY, CAMBRIDGE, MASS. *
# *
#************************************************************************
SUBMITTED: MARGARET H. HAMILTON DATE: 28 MAR 69
M.H.HAMILTON, COLOSSUS PROGRAMMING LEADER
APOLLO GUIDANCE AND NAVIGATION
APPROVED: DANIEL J. LICKLY DATE: 28 MAR 69
D.J.LICKLY, DIRECTOR, MISSION PROGRAM DEVELOPMENT
APOLLO GUIDANCE AND NAVIGATION PROGRAM
APPROVED: FRED H. MARTIN DATE: 28 MAR 69
FRED H. MARTIN, COLOSSUS PROJECT MANAGER
APOLLO GUIDANCE AND NAVIGATION PROGRAM
APPROVED: NORMAN E. SEARS DATE: 28 MAR 69
N.E. SEARS, DIRECTOR, MISSION DEVELOPMENT
APOLLO GUIDANCE AND NAVIGATION PROGRAM
APPROVED: RICHARD H. BATTIN DATE: 28 MAR 69
R.H. BATTIN, DIRECTOR, MISSION DEVELOPMENT
APOLLO GUIDANCE AND NAVIGATION PROGRAM
APPROVED: DAVID G. HOAG DATE: 28 MAR 69
D.G. HOAG, DIRECTOR
APOLLO GUIDANCE AND NAVIGATION PROGRAM
APPROVED: RALPH R. RAGAN DATE: 28 MAR 69
R.R. RAGAN, DEPUTY DIRECTOR
INSTRUMENTATION LABORATORY
@
\chapter{Notes}
\begin{quote}
\#140 Apollo-11 sources as Literate Programs Jul 16 chrislgarry/Apollo-11
\hrule
I'm literating Apollo-11 for documentation, chunk and page descriptions and indexing, and memory label indexing. So far I've been working on this early experiment for a week, and the structure and contents will change drastically as my ideas evolve.
I've started a typeset book for the Apollo-11 source in my clone at https://github.com/proudindiv/Apollo-11. The original sources were not "files" in any sense, but about 45 boxes of hollerith punch cards (2000 cards to a box) on a large cart, with the listings produced by the assembler which have been imaged. So I'm looking at the code as virtual card decks.
The main output is currently in my Apollo-11.pdf, which is better downloaded and examined because the github pdf viewer doesn't show the massive internal linkages.
I just wanted to make this early announcement, so others were aware of and could think about it.
Thanks,
Gary Young
aka proudindiv
Sat Jul 16, 2016
\end{quote}
So far, I'm
breaking the code into chunks,
organizing and structuring the chunks,
indexing the memory labels and all references to them by chunks,
making notes and comments, and
adding the table of contents, bookmarks, chunk index, and general and label indices.
I do the markup and noweb and \LaTeX {} do the typesetting.
I don't know how much time I'm going to spend on this,
nor how far I'll take it, but I'll collect my notes here.
I started putting comments on
my \href{https://www.facebook.com/gary.young.9480/posts/10207920379865840}
{facebook account},
and I'll initially copy them here to keep them together.
\begin{quote}
\begin{itemize}
\item Original Apollo 11 guidance computer (AGC) source code,
I wrote programs like this in the same time period,
however I started using more abstraction
with macros and defines in the assembler.
(\href{https://github.com/chrislgarry/Apollo-11}{chrislgarry/Apollo-11})
\item Today, I would create a literate program in noweb
to reverse engineer the code,
integrating the documentation and code
into a version of the Forth programming language.
Forth would be more compact to fit in the small memories
of the computers of those days,
but I would have to emulate the stack
because those old computers hadn't implemented them in the hardware yet. (\href{https://en.wikipedia.org/wiki/Forth_(programming_language)}{wikipedia})
\item I wrote assemblers in forth to compile (assemble) this type of code
on machines before personal computers that didn't have operating systems.
\item Such a macro-assembler could be written in several pages of machine code
almost directly from the processor reference card.
\item I've cloned the Apollo-11 repository and
made my first change to the README.md:
(\href{https://github.com/proudindiv/Apollo-11/tree/master}{link})
\item Well, I've got my first stub reverse engineering
of the Apollo-11 code in last night.
(\href{https://github.com/proudindiv/Apollo-11/blob/master/Apollo-11.pdf}{link})
\item There were no file systems with 80 (or more) characters in a file name.
There were no file systems at all.
The source had to have been on punch cards or paper tape.
I worked at the Federal Reserve Bank in Seattle then on an IBM 360 main frame
and we had to order a select chain to put on the printer
for the characters that we could print.
We had 26 capital letters "A-Z", 10 digits "0-9", and 6 "special characters".
In our case the special characters were chosen for accounting applications:
"\$", "\#", "-", period, comma, and space.
(I think, I can't remember if we had the pound sign.)
Notice that there are no lower case letters.
That came later, at Bell Labs with UNIX and such, I think.
\item There was no floating point arithmetic, only 16 bit integers,
from 0 to 65535, or -32767 to 0 to 32767 or possibly -32768 to 32767
depending on whether 0 has a sign and is different from minus zero.
Heck there may not have been an integer "divide" operation
implemented in the hardware, and probably not even a 16 bit integer multiply.
I'll have to look through the source to see.
We had to implement multiply and divide in software.
Also there was a distinction between "scientific" and "business" computers.
My memory is not too good on the details and I have no reference in front of me.
\item Aha! I just looked at the first file in my "Apollo-11" book that I just started AND ...
"S-ZERO EQUALS NEG0" so plus zero and negative zero were two different numbers!
\end{itemize}
\end{quote}
\begin{itemize}
\item I could clone the entire repository and
then download it to my Intel Skull Canyon computer
from the internet in a fraction of a second.
It's 2MB, including all the boiler plate
that has been recently added.
\item It originally takes about five seconds to typeset this book.
It takes longer as I create complex indexing and add structure to the listing,
but still less than a minute.
It probably took all night to print the original source listing once.
\item The release of the Apollo 11 software and the extreme popularity,
with over 2000 clones already, has much larger significance than just a fad.
If you look at the IoT phenomenon and the computers that are used there,
the Apollo 11 software is a training guide and
a huge inspiration on what can be done.
Imagine how you could program
a \href{https://www.amazon.com/dp/B014KK89BW}{self driving car}
modeling it on the Apollo 11.
The Apollo 11 software shows a new generation how computers work
at the low level and how they integrate into the real world.
The next huge changes to society aren't coming from the corporate world.
\item I think the biggest difficulty in recreating the card decks
is going to be white space.
In creating the files from the page listing images, tabs were used.
The original programmers in the 1960's used card punches to create
the input to the assembler.
I think the assembler only accepted fixed format cards and that's why
if you were to scan the listings there probably aren't any errors
in the spacing on the cards.
Those card punch machines had a method of setting tab stops and
there was a key to advance the current card being punched to the next tab stop.
Characters being typed or duped then continued from that location.
There was no tab character punched into any column of the card.
Similarly, the advancement to the next page was controlled by the assembler program.
The programmer could force a short page by inserting a control pseudo-op
into the second field of the card, something like "newpage",
but I don't remember what it was.
There was also an "end" pseudo-op in the last card.
Some pseudo-ops weren't printed by the assembler.
\item The line numbers on the left side of the listings
also seem to indicate other pseudo-ops, such as
begin comment block and end comment block.
We used columns 72-80 for a card sequence number,
but they were hard to keep consistent because of card insertions and replacements.
\end{itemize}
\begin{quote}
proudindiv:
Did you notice Comanche055.binsource and Luminary099.binsource in the rburkey2005/virtualagc repo? I'm thinking of running their assembler on the sources and comparing, or writing my own simple assembler. Do you think we should bring those files into chrislgarry/Apollo-11?
\end{quote}
\begin{quote}
wopian:
I would disagree with adding those files.
This repo is a historical archive of the Apollo 11 source code, VirtualAGC was made to compile the Apollo 11 code (and will be pulling the .agc files from here once they've all been checked)
Scroll down on \#38
\end{quote}
\begin{quote}
proudindiv:
But with that argument, the historical Apollo 11 source code is defined by the jpg images linked to in the chrislgarry/master README.md file. The added 51 files from the VirtualAGC are required if you are going to match the images. They are also required if you are going to compile the source code and fly the Apollo-11 to the moon. There are issues with the encoding used in the VirtualAGC transcriptions representing the original source code, but adding the 51 files doesn't change that issue.
I'm sorry, I went back and re-read your comment, and realize that you were talking about the two .binsource files. Those files are a modern creation from the original sources, and as such can be excluded from the historical archive. They are better placed in a modern analysis of the historical code, and I agree with you on excluding them.
But with your argument, we need to remove the file "HeaderTemplate.agc" and discuss the "MAIN.agc" files and splitting the source lines (cards) into 174 files (plus two MAIN.agc files) instead of only 2 files representing the original card decks. See VirtualAGC's Programmer's Manual for what I am talking about.
Thanks for the link to \#38, I hadn't seen that but had inferred the information in the discussion. I'm a long retired programmer and was programming on similar style programs in the later 1960's. I became interested in the Apollo-11 code when it was announced because it brings back lots of memories. Reading the code is very intimate because I can see what the original programmers were thinking. I started my Literate version of the code to give me a structure to reverse engineer in modern terms what was in it. We'll see how long I work with it and keep up the effort.
Gary Young
aka proudindiv
\end{quote}
\begin{quote}
chrislgarry:
@wopian yep that's my stance as well. @proudindiv yes I did plan on doing something with main.agc since its purpose is to be a wrapper to organize all of the assembly files for compliation, but it slipped my mind. We could simply just remove it if there is no original logic in there. I haven't looked yet. I also agree with splitting into the original number of files so we don't have multiple original assembly files in one digital assembly file here. And removal of header template if it's not original.
\end{quote}
\#38:
\begin{quote}
ohommes:
It is crucial to split out the code for the Command Module and the Lunar Module. I have worked closely with Ron Burkey and many others in the world to transcribe the source code for the 40th anniversary of the lunar landing for Apollo 11 over a period of many weeks. Without thinking to much about the source code build names; for the Command Module (CM) the names are starting with a "C" (e.g. Colossus238 and Comanche055 ) and the Lunar Module (LM) started with "L" (e.g. Luminary). There are however many exceptions to this Like Artemis and Sundance, Sundial and Sunburst but having the code split is a must. There are MANY difference crucial for the landing versus the orbit only and reentry for the CM. The original source listings that we made available on sourcecode.google.com and at biblio had these significant distinctions. Combining them in one location does not even make them compile anymore with yaYUL from Ron Burkey. Hope to see this fixed soon.
\end{quote}
\begin{quote}
ohommes:
For sure I support that setup by original build-name. I worked on the transcription painstakingly with many others to support the 40th anniversary of the Moon Landings.
In 2009, the year of the 40th anniversary of Apollo 11, a size-able group of Apollo enthusiast from all across the world transcribed both Comanche055 and Luminary099 from pictures taken of each page.
This process started by Ron Burkey, who travelled to make photographs of each page of the code on site since we could not take the actual hardcopy. Then a process started where each individual of this project checked out a block of pages and transcribed the assemble code with comments. The images contained both the binary code and the assembly mnemonics with comments.
Once transcribed the process of verification started:
\begin{itemize}
\item The first pass was to compile the code with yaYUL from Ron Burkey. The binary code was then verified agains the binary code on the printout.
\item The second stage was visual re-inspection for the comments.
\item The third stage was the verification of the memory bank which was done by running the actual code in yaAGC and by running the original Checksum verification program with Verb 91 (V91E) the checksum (including the so called bugger word) if correct is the same value as the bank number. I think it would be interesting for people to know these verification steps and how this process took many weeks with the deadline of the 40th anniversay of Apollo 11.
\end{itemize}
\end{quote}
\begin{quote}
chrislgarry:
@ohommes @corvuscrypto first, thanks for sharing your thoughts and the effort you guys put. Very much appreciated. I created this repo two years ago when I saw the original Apollo 11 source online bundled with Virtual AGC. I wanted the original Apollo 11 source just for viewing, so I extracted it and uploaded it to a repo for myself. Recently, somebody found my repo and shared it online, and here we are. Although Virtual AGC is awesome, I never was and am still not interested in Virtual AGC here in this repo. I am interested in the original Apollo 11 source only. I didn't know about the Virtual AGC repo until the other day when Ron shared the link with me and candidly stated "It probably would have helped if I had actually included this information on my website rather than keeping it to myself. :-)." This repo was meant to be for my own interest, but here we are, and now I am doing my best to maintain it as a repo for simply viewing the code. The community has already cleaned up a bunch of typos from digitization, and I suspect a lot more work in that area. We may get it to the point where it is truly reflective of the hard copies, which is my goal. The rekindled interest is tremendous, and I want to keep that going. Such a historical artifact as this deserves it's own repo without all the extras to build it in a VM, and I'm very appreciative of all the hard work that went into digitization, and is still going into it right now.
\end{quote}
\section{References}
\begin{itemize}
\item \href{http://qz.com/726338/the-code-that-took-america-to-the-moon-was-just-published-to-github-and-its-like-a-1960s-time-capsule/}
{QUARTZ: "BURN, BABY! BURN!"}
The code that took America to the moon was just published to GitHub,
and it’s like a 1960s time capsule,
Written by
Keith Collins,
July 09, 2016.
\item \href{https://www.youtube.com/watch?v=hyhI85Rd1kI}
{Apollo Guidance Computer emulation by Dean Koska}
This Palm Centro program is running the computer software used on the Apollo moon landings.
It utilizes Ron Burkey's Virtual AGC engine for the emulation (www.ibiblio.org/apollo).
\item \href{http://www.ibiblio.org/apollo/}
{Virtual AGC Home Page - Ibiblio}
\item \href{https://developers.slashdot.org/story/16/07/10/162241/assembly-code-that-took-america-to-the-moon-now-published-on-github}
{slashdot: Assembly Code That Took America to the Moon Now Published On GitHub}
\item \href{http://www.ibiblio.org/apollo/assembly_language_manual.html}
{Programmer's Manual AGC Assembly Language}
\item \href{http://www.ibiblio.org/apollo/NARA-SW/SkylabDataCards.pdf}
{Skylab quick-reference card}
\item \href{http://www.ibiblio.org/apollo/links.html\#Space_Guidance_Analysis_SGA_memos}
{Space Guidance Analysis (SGA) memos}
\item \href{http://web.archive.org/web/20101024223709/http://forth.gsfc.nasa.gov/}
{Space-Related Applications of Forth}
\item \href{https://www.ibiblio.org/apollo/yaYUL.html}
{yaYUL: The AGC Cross-Assembler}
\item \href{https://www.ibiblio.org/apollo/listings/}{yaYUL Apollo listings}
\item \href{(https://code.google.com/archive/p/virtualagc/wikis}{Virtual AGC wiki}
\item \href{http://www.klabs.org/}
{klags.org: The NASA Office of Logic Design:
A scientific study of the problems of digital engineering
for space flight systems, with a view to their practical solution.}
\item \href{http://www.hq.nasa.gov/office/pao/History/computers/Ch2-6.html}
{Computers in Spaceflight: The NASA Experience:
Computers On Board The Apollo Spacecraft}
\item \href{http://history.nasa.gov/}
{NASA History Program Office}
\end{itemize}
\section{Oddities Spotted}
Files that are versions of each other:
\begin{itemize}
\item AGC\_BLOCK\_TWO\_SELF\_CHECK.s and AGC\_BLOCK\_TWO\_SELF-CHECK.s
\item DOWN\_TELEMETRY\_PROGRAM.s and DOWN-TELEMETRY\_PROGRAM.s
\item P30\_P37.s and P30-P37.s (Luminary vs Colossus)
\end{itemize}
Line 66 of Luminary099/AOTMARK.agc has junk control characters.
<<tmpline line 66 of AOTMARK.agc>>=
TS MARKSTAT # STORE VAC ADR IN LOW 9 OF MARKSTAT
@
In Comanche055/REENTRY\_CONTROL.agc there should be
a new line "\# Page 882 (page is empty)" added to the end.
This comment has been added recently on page CM0785:
\begin{verbatim}
## The 9th-degree polynomial spoken of here is a pad load, meaning
## that it is not actually hardcoded into the software. Additional
## information about calculating the polynomial can be found on the
## <a href="http://nassp.sourceforge.net/wiki/Lunar_Ephemeris_Polynomials">
## <b>Orbiter</b> NASSP wiki</a>, as well as information about calculation
## of the <a href="http://nassp.sourceforge.net/wiki/Solar_Ephemeris">
## solar ephemerides</a>.
\end{verbatim}
This comment has been added recently on page CM0948:
\begin{verbatim}
1SHOTOK CAF BIT13 # CHECK ENGINE-ON BIT, NOT PERMITTING
# RSB 2009. The following instruction was previously "CAE FCORFRAC", but FCORFRAC
# is not in erasable memory as implied by the use of CAE. I've accordingly changed
# it to CAF instead to indicate fixed memory.
\end{verbatim}
\part{Apollo 11 Computer Topics}
\chapter{The Physical Level}
\chapter{The Original Programmer's Level}
\chapter{The Reference Documentation Level}
\chapter{The Mission Level}
\part{Suplimentary Material}
\begin{appendices}
\chapter{Files Inserted For Transcription}
\section{README.md}
<<intern/README.md>>=
Apollo-11
=========
Original Apollo 11 guidance computer (AGC) source code for Command Module (Comanche055) and Lunar Module (Luminary099). Digitized by the folks at [Virtual AGC](http://www.ibiblio.org/apollo/) and [MIT Museum](http://web.mit.edu/museum/). The goal is to be a repo for the original Apollo 11 source code. As such, PRs are welcome for any issues identified between the transcriptions in this repository and the original source scans for [Luminary 099](http://www.ibiblio.org/apollo/ScansForConversion/Luminary099/) and [Comanche 055](http://www.ibiblio.org/apollo/ScansForConversion/Comanche055/), as well as any files I may have missed.
##Compilation
If you are interested in compiling the original source code, check out [Virtual AGC](https://github.com/rburkey2005/virtualagc).
##Attribution
Copyright: Public domain.
Filename: CONTRACT_AND_APPROVALS.agc
Purpose: Part of the source code for Colossus 2A, AKA Comanche 055.
It is part of the source code for the Command Module's (CM)
Apollo Guidance Computer (AGC), for Apollo 11.
Assembler: yaYUL
Contact: Ron Burkey <[email protected]>.
Website: www.ibiblio.org/apollo.
Mod history: 2009-05-06 RSB Transcribed from page images.
This source code has been transcribed or otherwise adapted from digitized
images of a hardcopy from the MIT Museum. The digitization was performed
by Paul Fjeld, and arranged for by Deborah Douglas of the Museum. Many
thanks to both. The images (with suitable reduction in storage size and
consequent reduction in image quality as well) are available online at
www.ibiblio.org/apollo. If for some reason you find that the images are
illegible, contact me at [email protected] about getting access to the
(much) higher-quality images which Paul actually created.
Notations on the hardcopy document read, in part:
Assemble revision 055 of AGC program Comanche by NASA
2021113-051. 10:28 APR. 1, 1969
Page 1
#************************************************************************
# *
# THIS AGC PROGRAM SHALL ALSO BE REFERRED TO AS: *
# *
# *
# COLOSSUS 2A *
# *
# *
# THIS PROGRAM IS INTENDED FOR USE IN THE CM AS SPECIFIED *
# IN REPORT R-577. THIS PROGRAM WAS PREPARED UNDER DSR *
# PROJECT 55-23870, SPONSORED BY THE MANNED SPACECRAFT *
# CENTER OF THE NATIONAL AERONAUTICS AND SPACE *
# ADMINISTRATION THROUGH CONTRACT NAS 9-4065 WITH THE *
# INSTRUMENTATION LABORATORY, MASSACHUSETTS INSTITUTE OF *
# TECHNOLOGY, CAMBRIDGE, MASS. *
# *
#************************************************************************
SUBMITTED: MARGARET H. HAMILTON DATE: 28 MAR 69
M.H.HAMILTON, COLOSSUS PROGRAMMING LEADER
APOLLO GUIDANCE AND NAVIGATION
APPROVED: DANIEL J. LICKLY DATE: 28 MAR 69
D.J.LICKLY, DIRECTOR, MISSION PROGRAM DEVELOPMENT
APOLLO GUIDANCE AND NAVIGATION PROGRAM
APPROVED: FRED H. MARTIN DATE: 28 MAR 69
FRED H. MARTIN, COLOSSUS PROJECT MANAGER
APOLLO GUIDANCE AND NAVIGATION PROGRAM
APPROVED: NORMAN E. SEARS DATE: 28 MAR 69
N.E. SEARS, DIRECTOR, MISSION DEVELOPMENT
APOLLO GUIDANCE AND NAVIGATION PROGRAM
APPROVED: RICHARD H. BATTIN DATE: 28 MAR 69
R.H. BATTIN, DIRECTOR, MISSION DEVELOPMENT
APOLLO GUIDANCE AND NAVIGATION PROGRAM
APPROVED: DAVID G. HOAG DATE: 28 MAR 69
D.G. HOAG, DIRECTOR
APOLLO GUIDANCE AND NAVIGATION PROGRAM
APPROVED: RALPH R. RAGAN DATE: 28 MAR 69
R.R. RAGAN, DEPUTY DIRECTOR
INSTRUMENTATION LABORATORY
@
\section{HeaderTemplate}
<<intern/Luminary099/HeaderTemplate.agc>>=
# Copyright: Public domain.
# Filename: XXXXXXXX.agc
# Purpose: Part of the source code for Luminary 1A build 099.
# It is part of the source code for the Lunar Module's (LM)
# Apollo Guidance Computer (AGC), for Apollo 11.
# Assembler: yaYUL
# Contact: Ron Burkey <[email protected]>.
# Website: www.ibiblio.org/apollo.
# Pages: XXXX-XXXX
# Mod history: 2009-05-XX XXX Adapted from the corresponding
# Luminary131 file, using page
# images from Luminary 1A.
#
# This source code has been transcribed or otherwise adapted from
# digitized images of a hardcopy from the MIT Museum. The digitization
# was performed by Paul Fjeld, and arranged for by Deborah Douglas of
# the Museum. Many thanks to both. The images (with suitable reduction
# in storage size and consequent reduction in image quality as well) are
# available online at www.ibiblio.org/apollo. If for some reason you
# find that the images are illegible, contact me at [email protected]
# about getting access to the (much) higher-quality images which Paul
# actually created.
#
# Notations on the hardcopy document read, in part:
#
# Assemble revision 001 of AGC program LMY99 by NASA 2021112-61
# 16:27 JULY 14, 1969
@
\chapter{Miscellaneous Files}
\section{External vs Internal File Names}
<<Comanche055 files info>>=
ex=AGC_BLOCK_TWO_SELF-CHECK; in=CM1394SELF; eval $cmd;
ex=ALARM_AND_ABORT; in=CM1493ALARM; eval $cmd;
ex=ANGLFIND; in=CM0399ANGL; eval $cmd;
ex=ASSEMBLY_AND_OPERATION_INFORMATION; in=CM0002ASM; eval $cmd;
ex=AUTOMATIC_MANEUVERS; in=CM1025MANVR; eval $cmd;
ex=CM_BODY_ATTITUDE; in=CM0883BODY; eval $cmd;
ex=CM_ENTRY_DIGITAL_AUTOPILOT; in=CM1063AUTO; eval $cmd;
ex=CONIC_SUBROUTINES; in=CM1262CONIC; eval $cmd;
ex=CONTRACT_AND_APPROVALS; in=CM0001APPRV; eval $cmd;
ex=CSM_GEOMETRY; in=CM0285GEOM; eval $cmd;
ex=DISPLAY_INTERFACE_ROUTINES; in=CM1452DISP; eval $cmd;
ex=DOWNLINK_LISTS; in=CM0170DOWN; eval $cmd;
ex=DOWN-TELEMETRY_PROGRAM; in=CM1093TELEM; eval $cmd;
ex=ENTRY_LEXICON; in=CM0837LEXI; eval $cmd;
ex=ERASABLE_ASSIGNMENTS; in=CM0037ERASE; eval $cmd;
ex=EXECUTIVE; in=CM1208EXEC; eval $cmd;
ex=EXTENDED_VERBS; in=CM0236VERBS; eval $cmd;
ex=FIXED_FIXED_CONSTANT_POOL; in=CM1200FIXED; eval $cmd;
ex=FRESH_START_AND_RESTART; in=CM0181FRESH; eval $cmd;
ex=GIMBAL_LOCK_AVOIDANCE; in=CM0412AVOID; eval $cmd;
ex=GROUND_TRACKING_DETERMINATION_PROGRAM; in=CM0456GRND; eval $cmd;
ex=IMU_CALIBRATION_AND_ALIGNMENT; in=CM0423CALIB; eval $cmd;
ex=IMU_COMPENSATION_PACKAGE; in=CM0297ICOMP; eval $cmd;
ex=IMU_MODE_SWITCHING_ROUTINES; in=CM1420IMODE; eval $cmd;
ex=INFLIGHT_ALIGNMENT_ROUTINES; in=CM1355INFLT; eval $cmd;
ex=INTEGRATION_INITIALIZATION; in=CM1309INTEG; eval $cmd;
ex=INTER-BANK_COMMUNICATION; in=CM1103BKCOM; eval $cmd;
ex=INTERPRETER; in=CM1107TRPRT; eval $cmd;
ex=INTERPRETIVE_CONSTANTS; in=CM1205ICONS; eval $cmd;
ex=INTERRUPT_LEAD_INS; in=CM0131LEAD; eval $cmd;
ex=JET_SELECTION_LOGIC; in=CM1039JET; eval $cmd;
ex=KALCMANU_STEERING; in=CM0414STEER; eval $cmd;
ex=KEYRUPT_UPRUPT; in=CM1449KEYRP; eval $cmd;
ex=LATITUDE_LONGITUDE_SUBROUTINES; in=CM1236LAT; eval $cmd;
ex=LUNAR_AND_SOLAR_EPHEMERIDES_SUBROUTINES; in=CM0785EPHEM; eval $cmd;
ex=LUNAR_LANDMARK_SELECTION_FOR_CM; in=CM0936LAND; eval $cmd;
ex=MAIN; in=CM0000MAIN; eval $cmd;
ex=MEASUREMENT_INCORPORATION; in=CM1252MEAS; eval $cmd;
ex=MYSUBS; in=CM0999MYSUB; eval $cmd;
ex=ORBITAL_INTEGRATION; in=CM1334ORBIT; eval $cmd;
ex=P11; in=CM0533P11; eval $cmd;
ex=P20-P25; in=CM0562P20; eval $cmd;
ex=P30-P37; in=CM0635P30; eval $cmd;
ex=P32-P33_P72-P73; in=CM0649P32; eval $cmd;
ex=P34-35_P74-75; in=CM0460P34; eval $cmd;
ex=P37_P70; in=CM0890P37; eval $cmd;
ex=P40-P47; in=CM0684P40; eval $cmd;
ex=P51-P53; in=CM0737P51; eval $cmd;
ex=P61-P67; in=CM0789P61; eval $cmd;
ex=P76; in=CM0511P76; eval $cmd;
ex=PHASE_TABLE_MAINTENANCE; in=CM1404PHASE; eval $cmd;
ex=PINBALL_GAME_BUTTONS_AND_LIGHTS; in=CM0307GAME; eval $cmd;
ex=PINBALL_NOUN_TABLES; in=CM0268NOUN; eval $cmd;
ex=PLANETARY_INERTIAL_ORIENTATION; in=CM1243INERT; eval $cmd;
ex=POWERED_FLIGHT_SUBROUTINES; in=CM1365POWER; eval $cmd;
ex=R30; in=CM0514R30; eval $cmd;
ex=R31; in=CM0505R31; eval $cmd;
ex=R60_62; in=CM0390R60; eval $cmd;
ex=RCS-CSM_DAP_EXECUTIVE_PROGRAMS; in=CM1037RCDAP; eval $cmd;
ex=RCS-CSM_DIGITAL_AUTOPILOT; in=CM1002RCSDG; eval $cmd;
ex=REENTRY_CONTROL; in=CM0844REENT; eval $cmd;
ex=RESTARTS_ROUTINE; in=CM1414RESTR; eval $cmd;
ex=RESTART_TABLES; in=CM0211RETAB; eval $cmd;
ex=RT8_OP_CODES; in=CM1508CODES; eval $cmd;
ex=S-BAND_ANTENNA_FOR_CM; in=CM0934SBAND; eval $cmd;
ex=SERVICER207; in=CM0819SV207; eval $cmd;
ex=SERVICE_ROUTINES; in=CM1485SERV; eval $cmd;
ex=SINGLE_PRECISION_SUBROUTINES; in=CM1207SINGL; eval $cmd;
ex=STABLE_ORBIT; in=CM0525STABL; eval $cmd;
ex=STAR_TABLES; in=CM1389STARS; eval $cmd;
ex=SXTMARK; in=CM0222SXTMK; eval $cmd;
ex=SYSTEM_TEST_STANDARD_LEAD_INS; in=CM0420STEST; eval $cmd;
ex=T4RUPT_PROGRAM; in=CM0133T4RPT; eval $cmd;
ex=TAGS_FOR_RELATIVE_SETLOC; in=CM0027TAGS; eval $cmd;
ex=TIME_OF_FREE_FALL; in=CM1373FALL; eval $cmd;
ex=TPI_SEARCH; in=CM0551TPI; eval $cmd;
ex=TVCDAPS; in=CM0961DAPS; eval $cmd;
ex=TVCEXECUTIVE; in=CM0945TVCX; eval $cmd;
ex=TVCINITIALIZE; in=CM0937TVCI; eval $cmd;
ex=TVCMASSPROP; in=CM0951TVCM; eval $cmd;
ex=TVCRESTARTS; in=CM0956TVCR; eval $cmd;
ex=TVCROLLDAP; in=CM0984TROLL; eval $cmd;
ex=TVCSTROKETEST; in=CM0949STROK; eval $cmd;
ex=UPDATE_PROGRAM; in=CM1497UPDT; eval $cmd;
ex=WAITLIST; in=CM1221WAIT; eval $cmd;
@
<<Luminary099 files info>>=
ex=AGC_BLOCK_TWO_SELF_CHECK; in=LM1284SELF; eval $cmd;
ex=AGS_INITIALIZATION; in=LM0206AGSI; eval $cmd;
ex=ALARM_AND_ABORT; in=LM1381ALARM; eval $cmd;
ex=AOSTASK_AND_AOSJOB; in=LM1485AOST; eval $cmd;
ex=AOTMARK; in=LM0244AOTMK; eval $cmd;
ex=ASCENT_GUIDANCE; in=LM0843ASCNT; eval $cmd;
ex=ASSEMBLY_AND_OPERATION_INFORMATION; in=LM0001ASM; eval $cmd;
ex=ATTITUDE_MANEUVER_ROUTINE; in=LM0342ATTIT; eval $cmd;
ex=BURN_BABY_BURN--MASTER_IGNITION_ROUTINE; in=LM0731BURN; eval $cmd;
ex=CONIC_SUBROUTINES; in=LM1159CONIC; eval $cmd;
ex=CONTROLLED_CONSTANTS; in=LM0038CONST; eval $cmd;
ex=DAPIDLER_PROGRAM; in=LM1410IDLER; eval $cmd;
ex=DAP_INTERFACE_SUBROUTINES; in=LM1406DAP; eval $cmd;
ex=DISPLAY_INTERFACE_ROUTINES; in=LM1341DISP; eval $cmd;
ex=DOWNLINK_LISTS; in=LM0193DOWN; eval $cmd;
ex=DOWN_TELEMETRY_PROGRAM; in=LM0988TELEM; eval $cmd;
ex=ERASABLE_ASSIGNMENTS; in=LM0090ERASE; eval $cmd;
ex=EXECUTIVE; in=LM1103EXEC; eval $cmd;
ex=EXTENDED_VERBS; in=LM0262VERBS; eval $cmd;
ex=FINDCDUW--GUIDAP_INTERFACE; in=LM0908CDUW; eval $cmd;
ex=FIXED_FIXED_CONSTANT_POOL; in=LM1095FIXED; eval $cmd;
ex=FLAGWORD_ASSIGNMENTS; in=LM0061FLAG; eval $cmd;
ex=FRESH_START_AND_RESTART; in=LM0211FRESH; eval $cmd;
ex=GIMBAL_LOCK_AVOIDANCE; in=LM0364AVOID; eval $cmd;
ex=GROUND_TRACKING_DETERMINATION_PROGRAM; in=LM0654GRND; eval $cmd;
ex=IMU_COMPENSATION_PACKAGE; in=LM0326ICOMP; eval $cmd;
ex=IMU_MODE_SWITCHING_ROUTINES; in=LM1309IMODE; eval $cmd;
ex=IMU_PERFORMANCE_TEST_2; in=LM0373TEST2; eval $cmd;
ex=IMU_PERFORMANCE_TESTS_4; in=LM0382TEST4; eval $cmd;
ex=INFLIGHT_ALIGNMENT_ROUTINES; in=LM1249INFLT; eval $cmd;
ex=INPUT_OUTPUT_CHANNEL_BIT_DESCRIPTIONS; in=LM0054INOUT; eval $cmd;
ex=INTEGRATION_INITIALIZATION; in=LM1205INTEG; eval $cmd;
ex=INTER-BANK_COMMUNICATION; in=LM0998BKCOM; eval $cmd;
ex=INTERPRETER; in=LM1002TRPRT; eval $cmd;
ex=INTERPRETIVE_CONSTANT; in=LM1100ICONS; eval $cmd;
ex=INTERRUPT_LEAD_INS; in=LM0153LEAD; eval $cmd;
ex=KALCMANU_STEERING; in=LM0365STEER; eval $cmd;
ex=KALMAN_FILTER; in=LM1470KALMN; eval $cmd;
ex=KEYRUPT_UPRUPT; in=LM1338KEYRP; eval $cmd;
ex=LAMBERT_AIMPOINT_GUIDANCE; in=LM0651LAMBT; eval $cmd;
ex=LANDING_ANALOG_DISPLAYS; in=LM0898ANALG; eval $cmd;
ex=LATITUDE_LONGITUDE_SUBROUTINES; in=LM1133LAT; eval $cmd;
ex=LEM_GEOMETRY; in=LM0320GEOM; eval $cmd;
ex=LUNAR_AND_SOLAR_EPHEMERIDES_SUBROUTINES; in=LM0984EPHEM; eval $cmd;
ex=LUNAR_LANDING_GUIDANCE_EQUATIONS; in=LM0798EQUAT; eval $cmd;
ex=MAIN; in=LM0000MAIN; eval $cmd;
ex=MEASUREMENT_INCORPORATION; in=LM1149MEAS; eval $cmd;
ex=ORBITAL_INTEGRATION; in=LM1227ORBIT; eval $cmd;
ex=P12; in=LM0838P12; eval $cmd;
ex=P20-P25; in=LM0492P20; eval $cmd;
ex=P30_P37; in=LM0615P30; eval $cmd;
ex=P32-P35_P72-P75; in=LM0618P32; eval $cmd;
ex=P34-35_P74-75; in=LM0658P34; eval $cmd;
ex=P40-P47; in=LM0752P40; eval $cmd;
ex=P51-P53; in=LM0926P51; eval $cmd;
ex=P70-P71; in=LM0829P70; eval $cmd;
ex=P76; in=LM0709P76; eval $cmd;
ex=P-AXIS_RCS_AUTOPILOT; in=LM1421PAXIS; eval $cmd;
ex=PHASE_TABLE_MAINTENANCE; in=LM1294PHASE; eval $cmd;
ex=PINBALL_GAME_BUTTONS_AND_LIGHTS; in=LM0390GAME; eval $cmd;
ex=PINBALL_NOUN_TABLES; in=LM0301NOUN; eval $cmd;
ex=PLANETARY_INERTIAL_ORIENTATION; in=LM1140INERT; eval $cmd;
ex=POWERED_FLIGHT_SUBROUTINES; in=LM1259POWER; eval $cmd;
ex=Q_R-AXIS_RCS_AUTOPILOT; in=LM1442QRAXS; eval $cmd;
ex=R30; in=LM0712R30; eval $cmd;
ex=R31; in=LM0703R31; eval $cmd;
ex=R60_62; in=LM0472R60; eval $cmd;
ex=R63; in=LM0338R63; eval $cmd;
ex=RADAR_LEADIN_ROUTINES; in=LM0490RADAR; eval $cmd;
ex=RCS_FAILURE_MONITOR; in=LM0190FAIL; eval $cmd;
ex=RESTARTS_ROUTINE; in=LM1303RESTR; eval $cmd;
ex=RESTART_TABLES; in=LM0238RETAB; eval $cmd;
ex=RTB_OP_CODES; in=LM1397CODES; eval $cmd;
ex=S-BAND_ANTENNA_FOR_LM; in=LM0486SBAND; eval $cmd;
ex=SERVICER; in=LM0857SERVR; eval $cmd;
ex=SERVICE_ROUTINES; in=LM1374SERV; eval $cmd;
ex=SINGLE_PRECISION_SUBROUTINES; in=LM1102SINGL; eval $cmd;
ex=SPS_BACK-UP_RCS_CONTROL; in=LM1507BKUP; eval $cmd;
ex=STABLE_ORBIT; in=LM0723STABL; eval $cmd;
ex=SYSTEM_TEST_STANDARD_LEAD_INS; in=LM0370STEST; eval $cmd;
ex=T4RUPT_PROGRAM; in=LM0155T4RPT; eval $cmd;
ex=T6-RUPT_PROGRAMS; in=LM1403T6RPT; eval $cmd;
ex=TAGS_FOR_RELATIVE_SETLOC; in=LM0028TAGS; eval $cmd;
ex=THE_LUNAR_LANDING; in=LM0785LANDG; eval $cmd;
ex=THROTTLE_CONTROL_ROUTINES; in=LM0793THROT; eval $cmd;
ex=TIME_OF_FREE_FALL; in=LM1268FALL; eval $cmd;
ex=TJET_LAW; in=LM1460TJET; eval $cmd;
ex=TRIM_GIMBAL_CNTROL_SYSTEM; in=LM1472TRIM; eval $cmd;
ex=UPDATE_PROGRAM; in=LM1386UPDT; eval $cmd;
ex=WAITLIST; in=LM1117WAIT; eval $cmd;
@
<<commands for both programs>>=
prog=Comanche055;
<<Comanche055 files info>>
prog=Luminary099;
<<Luminary099 files info>>
@
\section{Check for Changes}
<<intern/check.sh>>=
#!/bin/bash
cmd='echo "XX $in XX"; diff extern/$prog/$ex.agc intern/$prog/$in.agc'
<<commands for both programs>>
@
\section{Export with Original File Names}
<<intern/export.sh>>=
#!/bin/bash
rm -r -f tmp
mkdir -p tmp/{Comanche055,Luminary099}
cmd='echo "XX $in XX"; cp $prog/$in.agc tmp/$prog/$ex.agc'
<<commands for both programs>>
@
\section{Import from Original File Names}
<<intern/import.sh>>=
#!/bin/bash
rm -r -f tmp
mkdir -p tmp/{Comanche055,Luminary099}
cmd='echo "XX $in XX"; cp $prog/$ex.agc tmp/$prog/$in.agc'
<<commands for both programs>>
@
\section{Migrate to Internal File Names}
<<intern/migrate.sh>>=
#!/bin/bash
cmd='echo "XX $in XX"; git mv $prog/$ex.agc $prog/$in.agc'
<<commands for both programs>>
@
\section{Literation Tools}
\subsection{Trial Literation}
<<initial trial literation>>=
cmd='echo \\section{$ex}|tr _ " ";
echo "";
echo "@<<intern/$prog/$in.agc@>>=";
cat "../extern/$prog/$ex.agc";
echo @;
echo "";'
@
<<intern/CMlit1.sh>>=
#!/bin/bash
prog=Comanche055
<<initial trial literation>>
<<Comanche055 files info>>
@
<<intern/LMlit1.sh>>=
#!/bin/bash
prog=Luminary099
<<initial trial literation>>
<<Luminary099 files info>>
@
\subsection{Program Literation}
<<literate program>>=
ininfo=$(sort -k 2,2 <<EOF
$exinfo
EOF
)
<<latex header>>
echo "\chapter{Reverse Engineered $prog Transcribed Program}";
echo "";
echo "@<<$prog.agc@>>=";
cmd='
echo "@<<$prog $in@>>"
'
eval $ininfo;
echo "@";
echo "";
cmd='
echo "\section{$(echo $ex | tr "_" " ")}";
echo "";
echo "@<<$prog $in@>>=";
grep "^# Page " extern/$prog/$ex.agc |
sed "s/^.*\$/@<<&@>>/" |
sed "s/@<<[^0-9]*/<<Page /" |
sed "s/[^0-9]*@>>\$/@>>/";
echo "@";
echo "";
(sed -n "/^# Page /,\$p" extern/$prog/$ex.agc |
sed "s/^# Page .*/<end>\n<begin>\n@<<&@>>=/";
echo "<end>") |
sed -e "s/^@<<[^0-9]*/@<<Page /" -e "s/[^0-9]*@>>=\$/@>>=/" |
sed "1d" |
sed -n "/<begin>/,/<end>/ {
/<begin>/ d;
/<end>/! {p;s/[@#\t ].*//;s/^/@ %def /;H;};
/<end>/ {H;x;s/^\n//;p;s/.*//;x;};
}" |
sed "/^@ %def \$/d" |
sed "/^@ %def @<<Page\$/d" |
sed "s/^<end>\$/@\n/";
'
eval $ininfo;
echo "\chapter{Program Transcription Information}"
echo "";
cmd='
desc=$(echo $ex | tr "_" " ");
echo "\section{$desc}";
echo "";
echo "@<<intern/$prog/$in.agc@>>=";
sed -e "/^# Page /,\$ d" extern/$prog/$ex.agc;
grep "^# Page " extern/$prog/$ex.agc |
sed "s/^.*\$/&\n@<<&@>>/" |
sed "s/@<<[^0-9]*/<<Page /" |
sed "s/[^0-9]*@>>\$/@>>/";
echo "@";
echo "";
'
eval $exinfo;
echo "\chapter{Indexes}";
echo "";
echo "\section{Chunks}";
echo "\nowebchunks";
echo "";
echo "\section{Index}";
echo "\nowebindex";
echo "";
echo "\end{document}";
@
<<Comanche055.sh>>=
#!/bin/bash
id=CM;
prog=Comanche055;
exinfo='<<Comanche055 files info>>'
<<literate program>>
@
<<Luminary099.sh>>=
#!/bin/bash
id=LM;
prog=Luminary099;
exinfo='<<Luminary099 files info>>'
<<literate program>>
@
\chapter{Notes, Bibliography and Indexes}
\section{Chunks}