-
Notifications
You must be signed in to change notification settings - Fork 3
/
index.html
1840 lines (1765 loc) · 89.7 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
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
<!DOCTYPE doctype PUBLIC "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<meta name="GENERATOR" content="Mozilla/4.7 [en] (X11; I; Linux
2.4.16 ppc) [Netscape]">
<meta name="Author" content="Ronald Burkey">
<title>Virtual AGC Home Page</title>
<meta name="author" content="Ronald S. Burkey">
<script>
(function() {
var cx = '005579885767466475821:oqt5wpxqlt8';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
</script>
<meta name="Generator" content="htp 1.16">
</head>
<body style="background-image: url(gray3.jpg);">
<table nosave="" border="1" cellpadding="10" width="100%">
<tbody>
<tr nosave="">
<td nosave="" align="center" valign="middle">
<div align="center"> </div>
<center>
<div align="center"> </div>
<table nosave="" width="100%">
<tbody>
<tr nosave="">
<td nosave="" align="center" valign="middle">
<div align="center"> </div>
<table nosave="">
<tbody>
<tr align="center">
<td style="vertical-align: top;"><a
href="index.html"><small>Home</small></a><br>
</td>
</tr>
<tr align="center">
<td style="vertical-align: top;"><span
style="text-decoration: underline;"><font
size="-1"><a href="yaAGS.html">AGS<br>
</a></font></span></td>
</tr>
<tr align="center">
<td style="vertical-align: top;"><a
href="LVDC.html"><small>LVDC</small></a><br>
</td>
</tr>
<tr align="center">
<td style="vertical-align: top;"><a
href="Gemini.html"><small>Gemini</small></a><br>
</td>
</tr>
<tr align="center">
<td> <font size="-1"><a
href="download.html">Download</a></font>
</td>
</tr>
<tr align="center">
<td> <font size="-1"><a href="links.html">Document
library</a></font> </td>
</tr>
<tr align="center">
<td> <font color="#000000"><font size="-1"><a
href="changes.html">Change log</a></font></font>
</td>
</tr>
<tr align="center">
<td> <font size="-1"><a href="buglist.html">Bug
and issues</a></font> </td>
</tr>
<tr nosave="" align="center">
<td nosave=""> <font color="#000000"><font
size="-1"><a href="developer.html">Developer
info</a></font></font> </td>
</tr>
</tbody>
</table>
<div align="center"> </div>
</td>
<td nosave="" align="center" valign="top">
<center><b><font color="#999900"><font size="+3">Virtual
AGC
— AGS — LVDC — Gemini</font></font></b></center>
<br>
<b><font color="#000000"><font size="+3">Home Page<br>
<small>Project Overview</small><br>
<br>
</font></font></b></td>
<td nosave="" align="center" valign="middle">
<div align="center"> </div>
<table nosave="">
<tbody>
<tr align="center">
<td style="vertical-align: top;"><font
size="-1"><a href="faq.html">FAQ</a></font></td>
</tr>
<tr align="center">
<td><font color="#000000"><font size="-1"><a
href="yaAGC.html">yaAGC</a></font></font></td>
</tr>
<tr nosave="" align="center">
<td nosave=""><font size="-1"><a
href="yaYUL.html">yaYUL</a></font></td>
</tr>
<tr align="center">
<td><font size="-1"><a href="yaDSKY.html">yaDSKY</a></font></td>
</tr>
<tr align="center">
<td style="vertical-align: top;"><small><a
href="yaTelemetry.html">yaOtherStuff</a></small><br>
</td>
</tr>
<tr align="center">
<td><font color="#000000"><font size="-1"><a
href="Luminary.html">Luminary</a></font></font></td>
</tr>
<tr align="center">
<td><font size="-1"><a href="Colossus.html">Colossus<br>
</a></font></td>
</tr>
<tr align="center">
<td style="vertical-align: top;"><small><a
href="assembly_language_manual.html">Language
Manual</a></small><br>
</td>
</tr>
<tr align="center">
<td style="vertical-align: top;"><font
size="-1"><a href="Pultorak.html">Physical
Implementations<br>
</a></font></td>
</tr>
</tbody>
</table>
<div align="center"> </div>
</td>
</tr>
</tbody>
</table>
<div align="center"> </div>
</center>
<center>
<div align="left"> </div>
</center>
<div align="left"> </div>
</td>
<td nosave="" align="center" height="200" valign="middle"
width="200">
<center><img src="ApolloPatch2.png" alt="" align="middle"
height="200" hspace="0" border="0" vspace="0"
width="200"> </center>
</td>
</tr>
<tr>
<td colspan="2" rowspan="1"><gcse:search></gcse:search><br>
</td>
</tr>
</tbody>
</table>
<h2>This Project</h2>
The purpose of this project is to provide a computer simulation of
the onboard guidance computers used in the Apollo Program's lunar
missions, and to generally allow you to learn about these guidance
computers. Since this can be quite intimidating, we invite you
to look at our <a href="ForDummies.html">"kinder and gentler"
introductory page</a> before immersing yourself in the full, gory
detail presented by the bulk of the website. <br>
<br>
<div align="center"><iframe
src="https://www.youtube.com/embed/hyhI85Rd1kI"
allowfullscreen="" frameborder="0" height="480" width="854">&lt;br&gt;
</iframe></div>
<br>
The video clip above (courtesy of user Dean Koska and YouTube)
illustrates some of the cute things you can do with Virtual AGC if
you're of a mind to do so. Dean compiled our <a
href="yaAGC.html">simulated AGC CPU</a> to run on a Palm
Centro—explaining that a regular Palm was too slow. He created
his own simulated display/keypad (<a href="yaDSKY.html">DSKY</a>),
presumably aided by the <a href="developer.html">developer info</a>
we provide for just such a desire. (And sorry, Dean's Palm
port isn't provided from our <a href="download.html">downloads page</a>.
Dean has indicated that he may be able to provide it in the future,
so if you want it you'll just have to be patient.)<br>
<h2>Contents</h2>
<ul>
<li><a href="index.html#What_Is_An_AGC_">What are the "AGC",
"AGS", and "LVDC"?</a></li>
<li><a href="index.html#What_Virtual_AGC_Is">What "Virtual AGC" is</a></li>
<li><a href="index.html#What_Virtual_AGC_Is_Not">What Virtual AGC
is not</a></li>
<li><a href="index.html#Principal_Elements_of_Virtual_AGC_">Existing
Elements
of
the Virtual AGC Project<br>
</a></li>
<li><a href="index.html#Licensing">Licensing</a></li>
<li><a href="index.html#What_If_You_Want_To_Help">What if You Want
to Help?</a></li>
<li><a href="index.html#Running_the_Emulator">Running the Emulator
... or, A Brief Introduction to the GUI</a><br>
</li>
<li><a href="index.html#Quick_Start">Quick Start</a></li>
<ul>
<li><a href="index.html#Running_the_Validation_Suite_">Running
the Validation Suite</a></li>
<li><a href="index.html#Playing_with_Colossus_">Playing with
Colossus</a></li>
<li><a href="index.html#Playing_with_Luminary_">Playing with
Luminary</a></li>
<li><a href="index.html#Much_more_intensive_playing_with_the_LM">Much
more
intensive
playing with the LM</a></li>
<li><a href="index.html#Playing_with_the_Abort_Guidance_System_">Playing
with
the
Abort Guidance System</a><br>
</li>
<li><a href="index.html#Playing_with_AGC_assembly_language_">Playing
with
AGC assembly language</a></li>
<li><a href="index.html#Modifying_the_LM">Modifying the LM
software (for the truly brave)</a></li>
<li><a href="index.html#Final_exam_for_the_advanced_student_">Final
exam
(for the advanced student)</a></li>
<li><a href="index.html#..._Or_for_the_silly_mood_">... Or, for
the silly mood</a></li>
<li><a href="index.html#..._Or_for_the_even_sillier_mood_">...
Or, for the even sillier mood</a><br>
</li>
</ul>
<li><a href="index.html#Acknowledgements">Acknowledgements</a></li>
</ul>
<h2><a name="What_Is_An_AGC_"></a><small><big>What are "Block I",
"Block II", the "AGC", "AGS", "LVDC", and "OBC"?</big><br>
</small></h2>
"AGC" stands for <span style="font-weight: bold;">A</span>pollo <span
style="font-weight: bold;">G</span>uidance <span
style="font-weight: bold;">C</span>omputer. The AGC was the
principal onboard computer for NASA's Apollo missions, including all
of the lunar landings. Both the Command Module (CM) and the
Lunar Module (LM) had AGCs, so two AGCs were used on most of the
Apollo missions, but with differing software. The
computer and its software were developed at MIT's Instrumentation
Laboratory, also known as Draper Labs.<br>
<br>
The "block II" AGC, employing the AGC4 instruction set, is the
particular computer model in which we're interested. The block II
AGC was used not only on Apollo 7 through Apollo 17 (including all
actual lunar landings), but also on three Skylab missions, on the
Apollo-Soyuz test mission, and on a <a
href="http://www.klabs.org/history/history_docs/reports/dfbw_tomayko.pdf">fly-by-wire
research
project using F-8 aircraft</a>. Nevertheless, only 57 AGCs were
constructed—and 138 display-keyboard units (DSKYs) for them—and all
of the ones installed in the Lunar Modules were not returned to the
Earth—so they are definitely collector's items.<br>
<br>
There was also the "block I" model of the AGC, which predated the
block II model. The block I model was supposed to fly in
Apollo 1 and 2. But since Apollo 1 was tragically destroyed by
fire, and Apollo 2 never flew, the block I model was never used in
any manned mission. It was, nevertheless, used in the unmanned
Apollo 4-6 missions.<br>
<br>
And of course, don't forget the "block III" model of the AGC, which
... wait just one second there, buddy! Anyone who has done any
reading at all about Apollo, knows there's no such thing as the
block III AGC. Okay, that's true, but one of the original AGC
developers, Hugh Blair-Smith, developed some thoughts in his spare
time about what a block III AGC might look like, and has been kind
enough to send them to us. If you're an advanced student of
the AGC who has already absorbed everything there is to know about
the block II system, <a href="BlockIII.html">you might be
interested in reading what Hugh has to say about it</a>.<br>
<br>
"AGS" stands for <span style="font-weight: bold;">A</span>bort <span
style="font-weight: bold;">G</span>uidance <span
style="font-weight: bold;">S</span>ystem, of which the computer
portion was known as the Abort Electronics Assembly (AEA). The
AGS/AEA was a completely separate computer system from the AGC, with
a different architecture, different instruction-set, different
runtime software, and designed/manufactured by different groups than
the AGC. It was in the LM as a kind of backup for the AGC, but
was only supposed to be used (as the name implies) in case of an
aborted landing. It's sole purpose was to get the LM from
wherever it was back into lunar orbit, so that the CM could
rendezvous with the LM.<br>
<br>
The "LVDC" (<span style="font-weight: bold;">L</span>aunch <span
style="font-weight: bold;">V</span>ehicle <span
style="font-weight: bold;">D</span>igital <span
style="font-weight: bold;">C</span>omputer) had yet a different
architecture, instruction set, software, and manufacturer. It
was a computer mounted in the Saturn rocket itself, and its
responsibility was to control the firing of the rocket engines to
give the rocket the proper trajectory. It was discarded when
the CSM discarded the rocket, and consequently was used during only
a very short time interval relative to the total length of the
mission.<br>
<br>
The Gemini spacecraft also had an on-board computer (OBC), having a
similar functionality to the Apollo AGC, though with greatly reduced
capabilities and sophistication, but with a computer architecture
very similar to the Apollo LVDC.<br>
<br>
Because we have much more information about the AGC than we do about
the AGS, LVDC, and OBC, the bulk of this website and of the
Virtual AGC project in general concentrates on the AGC.
Coverage of the other computers is mostly confined to the <a
href="yaAGS.html">AGS page</a>, <a href="LVDC.html">LVDC page</a>,
and the <a href="Gemini.html">Gemini</a><a href="Gemini.html"> page</a>
of this website.<br>
<h2><a name="What_Virtual_AGC_Is"></a>What "Virtual AGC" Is</h2>
<i>Virtual AGC</i> is a computer model of the AGC. It does not
try to mimic the <span style="font-style: italic;">superficial</span>
behavioral characteristics of the AGC, but rather to model the AGC's
<i>inner workings</i>. The result is a computer model of the
AGC which is itself capable of executing the original Apollo
software on (for example) a desktop PC. In computer terms,
Virtual AGC is an <span style="font-style: italic;">emulator</span>.
Virtual AGC also provides an emulated AGS and (in the planning
stages) an emulated LVDC. "Virtual AGC" is a catch-all term
that comprises all of these.<br>
<br>
The current version of the Virtual AGC software has been designed to
work in Linux, in Windows XP/Vista/7, and in Mac OS X 10.3 or later
(but 10.5 or later is best). It also works in at least some
versions of FreeBSD. However, since I personally work in
Linux, I have the most confidence in the Linux version.<br>
<h2><a name="What_Virtual_AGC_Is_Not"></a>What Virtual AGC Is Not</h2>
Virtual AGC is not a flight simulator, nor a lunar-lander simulator,
nor even a behavioral simulation of the Apollo Lunar Module (LM) or
Command-Module (CM) control panels. (In other words, if you
expect a realistic LM control panel to suddenly appear on your
computer screen, you'll be disappointed.) Virtual AGC could be
used, however, as a <span style="font-style: italic;">component</span>
of such a simulation, and developers of such software are encouraged
to do so. Indeed, some developers already have! But see
the <a href="faq.html">FAQ</a> for more info on this.<br>
<h2><a name="Principal_Elements_of_Virtual_AGC_"></a><small><big>Existing
Elements
of the Virtual AGC Project</big></small></h2>
<h3>AGC Elements<br>
</h3>
<ul>
<li><b>yaAGC</b> is an emulation of the AGC CPU. To
function, it requires a LM or CM "core rope" binary (see below).
<br>
</li>
<li><b>yaDSKY</b> is a simulation of the Display/Keyboard used in
Apollo. It supplies input to <b>yaAGC</b>, or receives
output from it. The design of the emulator is modular, so
the DSKY simulation may be easily replaced if you don't care for
mine, or if you want to replace it with a complete control-panel
simulation.</li>
<li><span style="font-weight: bold;">yaTelemetry</span> is a dumb
terminal on which telemetry downlinks from <span
style="font-weight: bold;">yaAGC</span> may be viewed, similar
to the way such telemetry from the AGC was originally viewed by
Mission Control.</li>
<li><span style="font-weight: bold;">yaACA</span> is a program
that emulates the LM's hand-controller (possibly with a
joystick), and to communicate the desired pitch/roll/yaw changes
to <span style="font-weight: bold;">yaAGC</span>.</li>
<li><b>yaYUL</b> is an assembler, capable of converting AGC4
assembly language into the binary executable format needed by
the AGC.</li>
<li><b>Luminary</b> is the name of the program used for the Apollo
Lunar Modules in the actual missions. Both binary
executable (needed by <span style="font-weight: bold;">yaAGC</span>)
and source code (needed by <span style="font-weight: bold;">yaYUL</span>)
are provided.</li>
<li><b>Colossus</b> is the name of the program used for many (but
not all) of the Apollo Command Modules. As with <span
style="font-weight: bold;">Luminary</span>, both binary and
source are provided.</li>
<li><span style="font-weight: bold;">Validation</span> is the name
of a newly-created AGC assembly-language program that provides a
validation suite for helping to assure that the implementation
of the virtual CPU is correct. It was written by closely
following the original Apollo documentation describing the
validation software used at that time.<br>
</li>
<li>Apollo-program documentation relevant to programming the AGC
has been corrected, rewritten, and expanded in some ways—just in
case you want to write your own AGC programs. Also, scans
of some of the relevant original Apollo-program documents not
available elsewhere on the web have been provided.</li>
<li>Supplemental materials for John Pultorak's physical Block I
AGC model.<br>
</li>
</ul>
<h3>AGS Elements</h3>
<ul>
<li><span style="font-weight: bold;">yaAGS</span> is an emulation
of the AGS CPU. To function, it requires a binary of one
of the flight programs (see below).</li>
<li><span style="font-weight: bold;">yaDEDA</span> is a simulation
of the AGS user interface.</li>
<li><span style="font-weight: bold;">yaLEMAP</span> is an
assembler for AGS assembly language.</li>
<li>The source code for the AGS flight program.</li>
<li>AGS scanned documentation, including specification,
programmer's manuals, and so on.</li>
</ul>
<h3>LVDC and Gemini OBC Elements</h3>
<ul>
<li>(Planning only) <span style="font-weight: bold;">yaLVDC</span>,
an emulation of the LVDC and Gemini OBC CPUs.</li>
<li>(Speculation only) <span style="font-weight: bold;">yaASTEC</span>,
a program for feeding simulated spacecraft sensor inputs to <span
style="font-weight: bold;">yaLVDC</span> and observing <span
style="font-weight: bold;">yaLVDC</span> outputs.</li>
<li>(Planning only) <span style="font-weight: bold;">yaPanel</span>,
a program for simulating various OBC user-interface devices of
the Gemini control panel.<br>
</li>
<li>(Planning stage only) <span style="font-weight: bold;">yaASM</span>,
an assembler for the Apollo LVDC and Gemini OBC assembly
language.</li>
<li>(Speculation only) Newly written LVDC and Gemini source code
for implementing the documented guidance equations. Note
that there is no known existing copy of true LVDC or Gemini OBC
source code, or else we wouldn't need to write new code for it!</li>
<li>Scans of all known existing LVDC and Gemini OBC documentation.<br>
</li>
</ul>
<h3>Contributed Code</h3>
<ul>
<li><a href="yaTelemetry.html"><span style="font-weight: bold;">LM_Simulator</span></a>
is a contributed program by Stephan Hotto. This program
has quickly ceased to be an optional add-on, and to become an
essential element of the project. It adds all kinds of
nifty things:</li>
<ul>
<li>An IMU simulation.</li>
<li>An FDAI ball.</li>
<li>A DSKY (if for some reason <span style="font-weight: bold;">yaDSKY</span>
cannot be used).</li>
<li>An i/o channel monitor, for viewing or creating arbitrary
i/o-channel activity.</li>
</ul>
</ul>
<h3>And to Tie It All together ...</h3>
<ul>
<li><span style="font-weight: bold;">VirtualAGC</span> is a GUI
front-end that ties all of the stuff listed above together into
an "easily" used bundle. (It should be obvious why
"easily" is in quotes here.)</li>
</ul>
<h2><a name="Licensing"></a>Licensing</h2>
PC-based programs such as <b>yaYUL</b>, <b>yaAGC</b>, and <b>yaDSKY</b><span
style="font-weight: bold;"></span> are copyrighted by the author,
Ron Burkey, but are provided to you as "free software" under the GNU
<a href="http://www.fsf.org">General Public License</a> (GPL).
<span style="font-weight: bold;">Validation</span> was
written by me, Ron Burkey, but is being placed in the public
domain. <b>Luminary</b> and <b>Colossus</b> are in the
public domain, to the best of my non-lawyer understanding.
Newly-written or revised documentation is being placed in the public
domain. Note that if you wanted to use <b>yaAGC</b> or <b>yaDSKY</b><span
style="font-weight: bold;"></span> as components of a
more-complete Apollo simulation, the modularity of the design allows
them to be run as stand-alone programs (whilst communicating with
your own software), and doing so does not force any particular
licensing requirements upon your own code. However, if you
choose instead to <span style="font-style: italic;">incorporate</span>
the code directly into your program or to link to it, your program
will itself need to be licensed under the GPL unless you feel like
negotiating an alternate license with me. (As of 2005-02-27,
the <span style="font-weight: bold;">yaAGC</span> source code
license also has a "special exception" as allowed/required by the
GPL, allowing linking to the non-free <span style="font-weight:
bold;">Orbiter</span> spacecraft-simulator SDK libraries.)
Refer to the <a href="developer.html">Developer info</a> page for
more detail.<br>
<h2><a name="What_If_You_Want_To_Help"></a>What If You Want To Help?</h2>
Check out the <a href="volunteer.html">volunteering page</a>.<br>
<br>
<h2><a name="Running_the_Emulator"></a>Running the Emulator ... or,
A Brief Introduction to the GUI<br>
</h2>
The first step, of course, is to download the Virtual AGC software
and install it or build it for the computer platform you're using,
by following the instructions on the <a href="download.html">download
page</a>. While the Virtual AGC project provides many
different programs that implement bits and pieces of the full
emulation, the only program you normally need to worry about running
is the one that's actually <span style="font-style: italic;">called</span>
<span style="font-weight: bold;">VirtualAGC</span>. <span
style="font-weight: bold;">VirtualAGC</span> is a GUI front-end
which allows you to choose almost any reasonable set of options
related to the emulation, and then to run all of the emulation
programs needed, in a way that allows those programs to
intercommunicate properly. <br>
<br>
Hopefully, <span style="font-weight: bold;">VirtualAGC</span> is
itself simple enough that it really requires very little explanation
to use, and your troubles will really begin only after the emulation
is actually running! But I'll provide a very brief overview
here. There's also <a href="yaTelemetry.html#VirtualAGC">a
more detailed explanation of <span style="font-weight: bold;">VirtualAGC</span></a>
available for your enjoyment.<br>
<br>
<div style="text-align: center;"><img alt="Screenshot of VirtualAGC
program." src="Screenshot-VirtualAGC.jpg" style="border: 2px
solid ;" height="646" width="1002"><br>
</div>
<br>
The screenshot above depicts the one and only window of the <span
style="font-weight: bold;">VirtualAGC</span> program. There
are no menus, toolbars, hot-buttons, or other controls. While
a large number of options are presented, you don't necessarily need
to change any of the selected options. The defaults are as
shown, and if you simply click the "Run!" button at the bottom of
the window, the simulation will run. If you change any of the
settings, the program will remember those changes and the settings
you've selected will be the ones that appear the next time you run <span
style="font-weight: bold;">VirtualAGC</span>. Or, you
could click the "Defaults" button at the bottom of the window to
restore all of the settings to their defaults. There's really
very little for a complete newcomer to change any of the settings,
but you will note that you can choose from among the several
available sets of AGC software for different Apollo missions in the
pane labeled "Simulation Type."<br>
<br>
When the simulation runs, <span style="font-weight: bold;">VirtualAGC</span>'s
rather
large window will courteously disappear to conserve space on your
screen, to be replaced by a much smaller pop-up window containing
options that are useful during the actual running of the simulation,
and will only return when the simulation ends. <br>
<br>
To end the simulation, simply exit from any of the visible elements
of the simulation—though there's a bit of platform to platform
variation as to which components are easily terminated, so I'd
recommend closing the DSKY. Within a few seconds all of the
other elements of the simulation will automatically terminate.
Note, however, that the automatic closing of all the simulation
windows isn't active until several seconds (5 in most versions, 30
in some) passed from the time the simulation started up, so if you
start a simulation and then immediately decide to shut it down,
you'll still have to wait a little while for the process to
complete. Also, on Mac OS X, there are various windows that
simply may not close automatically, running programs called <span
style="font-weight: bold;">Wish</span> and <span
style="font-weight: bold;">Terminator</span>, and these will
simply have to be closed manually from their main menus.<br>
<h2><a name="Quick_Start"></a>Quick Start</h2>
I expect that anyone who would <span style="font-style: italic;">really</span>
use Virtual AGC would likely want to adapt it quite a bit, and so
any simple instructions I might give wouldn't help much. Not
to mention the burden of training yourself on the technical
nitty-gritty of Apollo systems before you can actually <span
style="font-style: italic;">use</span> the AGC for anything!
:-) But here are a few scenarios where you can quickly get to
the point of seeing <span style="font-style: italic;">something</span>
happen, if not necessarily anything meaningful to our sad little
earthbound minds. The "full Apollo experience" isn't available
yet, since peripheral devices like the AOT haven't been created
yet. But there are still a few things you can try that are
amusing in a geekish sense.
<h3><a name="Running_the_Validation_Suite_"></a>Running the
Validation Suite<br>
</h3>
<span style="font-weight: bold; text-decoration: underline;"></span>There
is
a "validation suite", which I've written in AGC assembly language,
that attempts to check that each CPU instruction is implemented
correctly in the AGC simulator. You won't get the "Apollo
experience" by running it, but at least you'll be executing real AGC
assembly-language code:<br>
<ol>
<li>Run <span style="font-weight: bold;">VirtualAGC</span> as
described above, select the "Validation Suite" choice in the
"Simulation Type" area, and hit the "Run!" button. </li>
<li>On the DSKY, you'll see 00 appear in the PROG and NOUN fields,
and you'll see the OPR ERR annunciator will light.
This means that the validation program is ready to start.
Press the DSKY's PRO key to start the program. The OPR ERR
annunciater will turn off to indicate that the command was
accepted.</li>
<li>After about 77 seconds or so, 77 will appear in the PROG field
and the OPR ERR annunciator will light. If anything other
than 77 appears in the PROG field, then the numbers in the PROG
and NOUN fields will indicate which area of the test
failed. (You can press PRO again to proceed with the
remaining tests.)<br>
</li>
</ol>
<ul>
<ol>
</ol>
</ul>
<h3><a name="Playing_with_Colossus_"></a><span
style="text-decoration: underline;"><a name="PlayColossus"></a></span>Playing
with
Colossus<br>
</h3>
<span style="text-decoration: underline;"></span><span
style="font-weight: bold; text-decoration: underline;"></span><span
style="text-decoration: underline;"></span>(Actually, all of the
things down under "<a href="#PlayLuminary">Playing with Luminary</a>"
work with Colossus also.)<br>
<br>
Run the VirtualAGC program as described earlier, select any of the
Command Module choices in the "Simulation Type" area, and then try
the following stuff: <a name="Screenshots"></a><br>
<ul style="color: rgb(0, 0, 0);">
<ol>
</ol>
</ul>
<table style="width: 100%; text-align: left;" border="1"
cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="vertical-align: top;"><a href="V05N09E.png"><img
style="border: 2px solid ; width: 147px; height: 167px;"
alt="Screenshot of yaDSKY. Click to enlarge."
src="V05N09E-thm.png" height="167" width="147"></a><br>
</td>
<td style="vertical-align: top;">View the alarm codes<br>
</td>
<td style="vertical-align: top;">Because of some current bugs
(07/19/04) in the way I initialize Colossus, there will be
some program alarms at startup, and the PROG indicator will
light to inform you of this. You can view the alarms
by keying in V05N09E at the DSKY. (In normal AGC
shorthand, 'V' is short for "VERB", 'N' is short for "NOUN",
and 'E' is short for "ENTR". So "V05N09E" means to hit
the keys VERB 0 5 NOUN 0 9 ENTR.) <br>
<br>
Program alarms 1105 and 1106 happen to be "downlink too
fast" and "uplink too fast". Uplinks or downlinks
refer to exchange of telemetry information with ground
equipment.<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><a href="V35E.png"><img
style="border: 2px solid ; width: 147px; height: 167px;"
alt="Screenshot of yaDSKY. Click to Enlarge."
src="V35E-thm.png" height="167" width="147"></a></td>
<td style="vertical-align: top;">DSKY lamp test</td>
<td style="vertical-align: top;">At the DSKY, key in
V35E. This will light up all of the DSKY annunciators,
flash the VERB/NOUN labels, and display 88 or +88888 in all
of the numerical registers. After about 5 seconds, the
test stops—you can tell, because the flashing stops, though
the numbers remain—and you can continue.<br>
<br>
When the accompanying screenshot was taken, I didn't yet
know how the AGC controls the DSKY's STBY and RESTART
indicators, so those weren't turned on by the test.
Because of a bug in the simulator (as of 07/19/04), the PROG
indicator doesn't re-light after the lamp-test
completes. Therefore, you may or may not see the PROG
indicator lit if you try the sample operations below.<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><a href="V91E.png"><img
style="border: 2px solid ; width: 147px; height: 167px;"
alt="Screenshot of yaDSKY. Click to enlarge."
src="V91E-thm.png" height="167" width="147"></a><br>
</td>
<td style="vertical-align: top;">Display memory-bank checksums</td>
<td style="vertical-align: top;">The core-rope (read-only)
memory is divided into 36 banks, numbered 00-43
(octal). A so-called "bugger word" has been stuck at
the end of each bank—yes, I get the joke, so please <span
style="font-style: italic;">don't</span> send me an
explanation (and if you <span style="font-style: italic;">don't</span>
get it, don't ask me)—which causes the checksum of the bank
to come out to a known value. This known value is the
same as the bank number when possible, and is the logical
complement of the bank number otherwise. (For example,
the checksum of <span style="font-weight: bold;">Colossus</span>
bank 00007 is 00007, but the checksum of bank 00006 is
77771. Both are correct.) <span
style="font-weight: bold;">Colossus</span>'s
"show-banksum" program can be used to display the bank
numbers, one by one. You can execute the show-banksum
program by keying in V91E on the DSKY. After a few
seconds, the statistics for bank 00 will be shown: R1
(the topmost 5-digit display) will contain the computed
checksum; R2 will contain the bank number; and R3 will
contain the bugger word. Each of the displays will be
in octal, as indicated by the fact that the +/- sign is
blank. To advance to the next bank, key in V33E.
(Hitting the PRO key does the same thing.) If you have
the patience to advance through each of the banks, the next
V33E (or PRO) after bank 43 will wrap-around to bank 00
again. To terminate the show-banksum program, you can
key in V34E.<br>
<br>
By the way, the bank-6 bugger word shown (05143) is
for Colossus 249. If you ran the Artemis 072 program,
it would have been 04275, while if you ran the Luminary 131
program, it would have been 63402.<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><a href="V16N36E.png"><img
style="border: 2px solid ; width: 147px; height: 167px;"
alt="Screenshot of yaDSKY. Click to Enlarge."
src="V16N36E-thm.png" height="167" width="147"></a><br>
</td>
<td style="vertical-align: top;"><a name="MonitorTime"></a>Monitor
the
current time</td>
<td style="vertical-align: top;">If you key in V16N36E or
V16N65E, it will cause the current time to be
displayed. (Since we haven't set the time in any way,
this will be the time since AGC power-up). R1 (the
topmost 5-digit display) will be in hours, R2 will be in
minutes, and R3 will be in 100ths of a second. This
display is updated once per second.<br>
<br>
In the accompanying screenshot, the time is 06:58:33.86.<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><a href="V25N36E.png"><img
style="border: 2px solid ; width: 147px; height: 167px;"
alt="Screenshot of yaDSKY. Click to enlarge."
src="V25N36E-thm.png" height="167" width="147"></a><br>
</td>
<td style="vertical-align: top;">Setting the current time</td>
<td style="vertical-align: top;">If it annoys you to see the
time since power-up, you can change the time (for example,
to mission time) by keying in V25N36E. R1 will go
blank, enabling you to key in the current hour. Make
sure you start with a + sign (this is how the AGC knows
you're using decimal rather than octal), and make sure you
enter all five digits (including the leading zeroes).
In case you make a mistake, you can clear R1 any time before
pressing ENTR by using the CLR key. After you hit the
ENTR key, R2 will clear and you can enter the current
minutes. Finally, you can key in the number of seconds
in R3. Don't forget that the number of seconds is
actually in 100ths of seconds, so that if (for example) you
want 30 seconds you'd key in +03000E. <br>
<br>
In the accompanying screenshot, it just happened to be
06:55:25 am., so that's how I set the clock.<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><a href="V27N02E4000E.png"><img
style="border: 2px solid ; width: 147px; height: 167px;"
alt="Screenshot of yaDSKY. Click to enlarge."
src="V27N02E4000E-thm.png" height="167" width="147"></a><br>
</td>
<td style="vertical-align: top;">Examining the contents of the
core-rope</td>
<td style="vertical-align: top;">Key in V27N02E. This
allows you to enter the address of a word in the core-rope
into R3. This address will generally be in octal, and
therefore should not be preceded by a + sign. Also,
unlike entry of decimal data, in octal you can enter just as
many digits as you need, and don't need to enter a full five
digits. The addresses will be 00000-01777 for memory
bank 00, 02000-03777 for memory bank 01, and so forth, up to
76000-77777 for memory bank 37. (I'm not sure how to
examine banks 40-43.) The binary listing of the core
rope is at the very back of the Colossus 249 assembly
listing, which can be downloaded from MIT if you have some
spare time and disk space. (See my <a
href="links.html">links page</a>.)<br>
<br>
In the accompanying screenshot, we see that address 4000
(octal) of Luminary's core-rope contains the value
00004. This just happens to be the first instruction
executed after power-up. It is an <span
style="font-family: monospace;">INHINT</span> instruction,
and disables interrupts. The contents of R2 (the
middle 5-digit register) are not cleared, and thus are just
whatever lingers from before.<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><a href="V01N02E25E.png"><img
style="border: 2px solid ; width: 147px; height: 167px;"
alt="Screenshot of yaDSKY. Click to enlarge."
src="V01N02E25E-thm.png" height="167" width="147"></a><br>
</td>
<td style="vertical-align: top;">Examining the contents of
erasable memory</td>
<td style="vertical-align: top;">Key in V01N02E. This
allows you to enter the address of a word in erasable memory
into R3. The addresses will be 00000-00377 for
erasable bank E0, 00400-00777 for memory bank E1, and so
forth, up to 03400-03777 for memory bank E7.
Alternately, you can "monitor" a memory location (i.e., get
updates for it once per second) by using VERB 11 rather than
VERB 01. For example, V11N02E25E will monitor register
25, the "TIME1" register, which is an internal counter that
increments every 10 ms. In general, of course, the
numbers won't mean much unless you reference them to the
Colossus 249 assembly listing.<br>
<br>
In the accompanying screenshot, we actually do look at the
TIME1 register, and discover that at that instant it
contained the value 20245 (octal). Of course, you'll
see something different. Display R2 is not changed, so
it just contains whatever it contained before.<br>
</td>
</tr>
<tr>
<td style="vertical-align: top;"><a href="V21N02E25E.png"><img
style="border: 2px solid ; width: 147px; height: 167px;"
alt="Screenshot of yaDSKY. Click to enlarge."
src="V21N02E25E-thm.png" height="167" width="147"></a><br>
</td>
<td style="vertical-align: top;">Altering the contents of
erasable memory</td>
<td style="vertical-align: top;">Key in V21N02E, and enter an
octal address as above, and then enter a new value to be
stored at that address. It goes without saying that
you need to know what you're doing when you do this!<br>
<br>
In the accompanying screenshot, I've chosen to reload the
TIME1 register with the value 12345 (octal), which probably
won't cause too many adverse effects. Display R2 is
not changed, so it just contains whatever it contained
before. </td>
</tr>
<tr>
<td style="vertical-align: top;"><a href="V36E.png"><img
style="border: 2px solid ; width: 147px; height: 167px;"
alt="Screenshot of yaDSKY. Click to enlarge."
src="V36E-thm.png" height="167" width="147"></a><br>
</td>
<td style="vertical-align: top;">Fresh start</td>
<td style="vertical-align: top;">Key in V36E. This
apparently restarts the "pinball" program—i.e., the program
that is responsible for accepting verbs and nouns and
displaying stuff on the DSKY—and it's useful for clearing
garbage from the DSKY's display, as the accompanying
screenshot demonstrates.<br>
<br>
In the accompanying screenshot, a side-effect of the fresh
start is the thoughtful re-display of the PROG (program
alarm) which the earlier DSKY lamp-test had wiped out.<br>
</td>
</tr>
<tr>
<td style="text-align: center; vertical-align: middle;">(Your
picture here.)<br>
</td>
<td style="vertical-align: top;">Do-it-yourself research</td>
<td style="vertical-align: top;">The file
yaAGC/Colossus249/ASSEMBLY_AND_OPERATION_INFORMATION.s lists
the verb and noun tables<span style="font-weight: bold;"></span>,
so perhaps you can figure out some neat stuff
yourself. If you do, <a
href="mailto:[email protected]">let me know</a> and I'll
add it to this list.<br>
</td>
</tr>
</tbody>
</table>
<table style="width: 80%; text-align: left; margin-left: 40px;
margin-right: auto;" border="1" cellpadding="2" cellspacing="2">
</table>
<ul style="color: rgb(0, 0, 0);">
<ol>
<ul>
</ul>
</ol>
</ul>
<h3><a name="Playing_with_Luminary_"></a><span
style="text-decoration: underline;"><a name="PlayLuminary"></a></span>Playing
with
<span style="font-weight: bold;">Luminary</span><br>
</h3>
You can do the same things as for <span style="font-weight: bold;">Colossus</span>
above<span style="font-weight: bold;"></span>. Or rather than
trying stuff at random, you can try stepping through a more
realistic startup checklist. (Thanks to Julian Webb.)
<ul style="color: rgb(0, 0, 0);">
</ul>
<table style="width: 100%; text-align: left;" border="1"
cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="vertical-align: top;">Step 0<br>
</td>
<td style="vertical-align: top;">Run the simulator<br>
</td>
<td style="vertical-align: top;">
<ol>
</ol>
Run <span style="font-weight: bold;">VirtualAGC</span> as
described above, select "Apollo 13 Lunar Module" in the
"Simulation Type" area, and hit "Run!"
<ol>
</ol>
</td>
<td style="vertical-align: top;"><a href="LMV36E.png"><img
style="border: 2px solid ; width: 147px; height: 167px;"
alt="Screenshot of yaDSKY. Click to enlarge."
src="LMV36E-thm.png" height="167" width="147"></a><br>
</td>
</tr>
<tr>
<td style="vertical-align: top;">Step 1<br>
</td>
<td style="vertical-align: top;">V35E<br>
</td>
<td style="vertical-align: top;">Starts the DSKY lamp
test. All of the indicator lamps are lit, the
numerical displays show 88 or +888888 as appropriate, and
things which are supposed to flash, flash. After about
5 seconds, the lamp test automatically terminates.<br>
</td>
<td style="vertical-align: top;"><a href="LMV35E.png"><img
style="border: 2px solid ; width: 147px; height: 167px;"
alt="Screenshot of yaDSKY. Click to enlarge."
src="LMV35E-thm.png" height="167" width="147"></a><br>
</td>
</tr>
<tr>
<td style="vertical-align: top;">Step 2<br>
</td>
<td style="vertical-align: top;">V37E 00E<br>
</td>
<td style="vertical-align: top;">"Goto Pooh"—i.e., start
program P00, the idling program. The numeric area
under the PROG label will show 00.<br>
</td>
<td style="vertical-align: top;"><a href="V37E00E.png"><img
style="border: 0px solid ; width: 147px; height: 167px;"
alt="Screenshot of yaDSKY. Click to enlarge."
src="V37E00E-thm.png" height="167" width="147"></a><br>
</td>
</tr>
<tr>
<td style="vertical-align: top;">Step 3<br>
</td>
<td style="vertical-align: top;">V25E N01E 01365E 0E 0E 0E<br>
</td>
<td style="vertical-align: top;">Set the count of total failed
self-tests, total started self-tests, and
successfully-completed division tests to 0.<br>
</td>