Source Code
These source-code files were obtained by digitally photographing
a Solarium 55 (Apollo 6) program listing from the American Computer Museum in
Bozeman, Montana. Photography was by Ron Burkey, with assistance from
museum curator George Keremedjiev and Montana
State University curator Kim Scott. The listing originally belonged to Eldon C. Hall,
who donated it to the museum. Volunteers then manually typed in the
source code or else modified similar pre-existing Colossus 249
(Apollo 9) source files to incorporate changes, although this transcription was
principally done by Jim Lawton and corrected by Ron Burkey.
Notations on the program listing read, in part:YUL SYSTEM FOR AGC4: REVISION 0 OF PROGRAM SOLRUM55 BY NASA 1021108-021 DEC. 4, 1966Note that the date is the date of the printout, not the date of the program revision. Due to statements by Jay Sampson, the original contractor from AC Electronics who created Solarium 54 (Apollo 4) from the earlier Corona (AS-202 mission) program, it is believed that Solarium 54 and Solarium 55 (Apollo 6) are actually identical programs. The change in numbering, from 54 to 55, is believed to be for some administrative purpose. Thus, it is believed that the source-code represented here is equally appropriate for both Apollo 4 and Apollo 6 missions. |
004308,000002: ## Copyright: Public domain.
004309,000003: ## Filename: WAITLIST.agc
004310,000004: ## Purpose: Part of the source code for Solarium build 55. This
004311,000005: ## is for the Command Module's (CM) Apollo Guidance
004312,000006: ## Computer (AGC), for Apollo 6.
004313,000007: ## Assembler: yaYUL --block1
004314,000008: ## Contact: Jim Lawton <jim DOT lawton AT gmail DOT com>
004315,000009: ## Website: www.ibiblio.org/apollo/index.html
004316,000010: ## Page Scans: www.ibiblio.org/apollo/ScansForConversion/Solarium055/
004317,000011: ## Mod history: 2009-09-21 JL Created.
004318,000012: ## 2016-08-18 RSB Some fixes.
004319,000013: ## 2016-12-28 RSB Proofed comment text using octopus/ProoferComments,
004320,000014: ## and fixed errors found.
004321,000015:
Page 111 |
004323,000017:
004324,000018: # CHECK-OUT STATUS - UNIT VERIFICATION COMPLETE MAY, 1965 EXCEPT LONGCALL SECTION.
004325,000019:
004326,000020: # DO NOT CHANGE THIS SECTION WITHOUT PRB APPROVAL.
004327,000021:
004328,000022: # GROUNDRULE....DELTA T SHOULD NOT EXCEED 12000 (= 2 MINUTES)
004329,000023:
004330,000024: 2173 BANK 1
004331,000025: 2173 50577 WAITLIST TS DELT # STORE DELTA T = TD - T (TD = DESIRED
004332,000026: 2174 30001 XCH Q # TIME FOR FUTURE ACTION).
004333,000027: 2175 02065 TC EXECCOM # PICK UP TASK ADDRESS AND SAVE BANKREG.
004334,000028: 2176 06374 TC WTLST3
004335,000029:
004336,000030: 04,6374 BANK 4
004337,000031: 04,6374 40037 WTLST3 CS TIME3
004338,000032: 04,6375 66376 AD +1 # CCS A = + 1/4
004339,000033: 04,6376 10000 CCS A # TEST 1/4 - C(TIME3). IF POSITIVE,
004340,000034: # IT MEANS THAT TIME3 OVERFLOW HAS OCCURRED PRIOR TO CS TIME3 AND THAT
004341,000035: # C(TIME3) = T - T1, INSTEAD OF 1.0 - (T1 - T). THE FOLLOWING FOUR
004342,000036: # ORDERS SET C(A) = TD - T1 + 1 IN EITHER CASE. C(CSQ) = CS Q = 40001
004343,000037: # AND C(TSQ) = TS Q = 50001 NOTATION... 1 - 00001, 1.0 = 37777+1
004344,000038:
004345,000039: 04,6377 64664 AD CSQ # OVERFLOW HAS OCCURRED. SET C(A) =
004346,000040: 04,6400 40000 CS A # T - T1 + 3/4 - 1
004347,000041:
004348,000042: # NORMAL CASE (C(A) MINUS) YIELDS SAME C(A) -(-(1.0-(T1-T))+1/4)-1
004349,000043:
004350,000044: 04,6401 64561 AD TSQ # TS Q = - 3/4 + 2
004351,000045: 04,6402 60577 AD DELT # RESULT = TD - T1 + 1
004352,000046: # 10W
Page 112 |
004354,000048: 04,6403 10000 CCS A # TEST TD - T1 + 1
004355,000049:
004356,000050: 04,6404 60552 AD LST1 # IF TD - T1 POS, GO TO WTLST5 WITH
004357,000051: 04,6405 06451 TC WTLST5 # C(A) = (TD - T1) + C(LST1) = TD-T2+1
004358,000052:
004359,000053: 04,6406 06407 TC +1
004360,000054: 04,6407 40577 CS DELT
004361,000055:
004362,000056: # NOTE THAT THIS PROGRAM SECTION IS NEVER ENTERED WHEN T-T1 G/E -1,
004363,000057: # SINCE TD-T1+1 = (TD-T) + (T-T1+1), AND DELTA T = TD-T G/E +1. (G/E
004364,000058: # SYMBOL MEANS GREATER THAN OR EQUAL TO). THUS THERE NEED BE NO CON-
004365,000059: # CERN OVER A PREVIOUS OR IMMINENT OVERFLOW OF TIME3 HERE.
004366,000060:
004367,000061: 04,6410 64522 AD POS1/2 # WHEN TD IS NEXT, FORM QUANTITY
004368,000062: 04,6411 64522 AD POS1/2 # 1.0 - DELTA T = 1.0 - (TD - T)
004369,000063: 04,6412 30037 XCH TIME3
004370,000064: 04,6413 64563 AD MSIGN
004371,000065: 04,6414 60577 AD DELT
004372,000066: 04,6415 50577 TS DELT
004373,000067: 04,6416 35501 CAF ZERO
004374,000068: 04,6417 30577 XCH DELT
004375,000069: 04,6420 30552 WTLST4 XCH LST1
004376,000070: 04,6421 30553 XCH LST1 +1
004377,000071: 04,6422 30554 XCH LST1 +2
004378,000072: 04,6423 30555 XCH LST1 +3
004379,000073: 04,6424 30556 XCH LST1 +4
004380,000074: 04,6425 30557 XCH LST1 +5
004381,000075: 04,6426 30560 XCH LST1 +6
004382,000076: 04,6427 30573 XCH EXECTEM2 # TASK ADDRESS.
004383,000077: 04,6430 20577 INDEX NVAL
004384,000078: 04,6431 06432 TC +1
004385,000079: 04,6432 30561 XCH LST2
004386,000080: 04,6433 30562 XCH LST2 +1
004387,000081: 04,6434 30563 XCH LST2 +2
004388,000082: 04,6435 30564 XCH LST2 +3
004389,000083: 04,6436 30565 XCH LST2 +4
004390,000084: 04,6437 30566 XCH LST2 +5 # AT END, CHECK THAT C(LST2+5) IS STD
004391,000085: 04,6440 30567 XCH LST2 +6
004392,000086: 04,6441 30570 XCH LST2 +7
004393,000087: 04,6442 62260 AD ENDTASK # END ITEM, AS CHECK FOR EXCEEDING
004394,000088: # THE LENGTH OF THE LIST.
004395,000089: 04,6443 10000 CCS A
004396,000090: 04,6444 03044 TC ABORT # WAITLIST OVERFLOW.
004397,000091: 04,6445 01203 OCT 01203
004398,000092: 04,6446 06444 TC -2
004399,000093:
004400,000094: 04,6447 30572 XCH EXECTEM1 # RETURN TO CALLER.
004401,000095: 04,6450 02076 TC LVWTLIST # SAME ROUTINE AS FINDVAC, ETC., EXIT.
004402,000096:
Page 113 |
004404,000098:
004405,000099: 04,6451 10000 WTLST5 CCS A # TEST TD - T2 + 1
004406,000100: 04,6452 60553 AD LST1 +1
004407,000101: 04,6453 06457 TC +4
004408,000102: 04,6454 64516 AD ONE
004409,000103: 04,6455 06535 TC WTLST2
004410,000104: 04,6456 00001 OCT 1
004411,000105:
004412,000106: 04,6457 10000 +4 CCS A # TEST TD - T3 + 1
004413,000107: 04,6460 60554 AD LST1 +2
004414,000108: 04,6461 06465 TC +4
004415,000109: 04,6462 64516 AD ONE
004416,000110: 04,6463 06535 TC WTLST2
004417,000111: 04,6464 00002 OCT 2
004418,000112:
004419,000113: 04,6465 10000 +4 CCS A # TEST TD - T4 + 1
004420,000114: 04,6466 60555 AD LST1 +3
004421,000115: 04,6467 06473 TC +4
004422,000116: 04,6470 64516 AD ONE
004423,000117: 04,6471 06535 TC WTLST2
004424,000118: 04,6472 00003 OCT 3
004425,000119:
004426,000120: 04,6473 10000 +4 CCS A # TEST TD - T5 + 1
004427,000121: 04,6474 60556 AD LST1 +4
004428,000122: 04,6475 06501 TC +4
004429,000123: 04,6476 64516 AD ONE
004430,000124: 04,6477 06535 TC WTLST2
004431,000125: 04,6500 00004 OCT 4
004432,000126:
004433,000127: 04,6501 10000 +4 CCS A # TEST TD - T6 + 1
004434,000128: 04,6502 60557 AD LST1 +5
004435,000129: 04,6503 06507 TC +4
004436,000130: 04,6504 64516 AD ONE
004437,000131: 04,6505 06535 TC WTLST2
004438,000132: 04,6506 00005 OCT 5
004439,000133:
Page 114 |
004441,000135: 04,6507 10000 +4 CCS A
004442,000136: 04,6510 60560 AD LST1 +6
004443,000137: 04,6511 06515 TC +4
004444,000138: 04,6512 64516 AD ONE
004445,000139: 04,6513 06535 TC WTLST2
004446,000140: 04,6514 00006 OCT 6
004447,000141:
004448,000142: 04,6515 10000 +4 CCS A
004449,000143: 04,6516 06523 TC WTALARM
004450,000144: 04,6517 30000 NOOP
004451,000145: 04,6520 64516 AD ONE
004452,000146: 04,6521 06535 TC WTLST2
004453,000147: 04,6522 00007 OCT 7
004454,000148:
004455,000149: 04,6523 03044 WTALARM TC ABORT
004456,000150: 04,6524 01204 OCT 01204
004457,000151:
004458,000152: 04,6525 2076 LVWTLIST EQUALS FOUNDVAC
004459,000153:
004460,000154: 04,6525 10647 SVCT3X CCS FLAGWRD2 # IF DURING FREE-FALL AND AFTER
004461,000155: 04,6526 02256 TC TASKOVER # PLATFORM HAS BEEN ALIGNED, COMPENSATE
004462,000156: 04,6527 02256 TC TASKOVER # FOR GYRO BIAS DRIFT.
004463,000157: 04,6530 06531 TC +1
004464,000158:
004465,000159: 04,6531 32170 CAF PRIO35
004466,000160: 04,6532 02052 TC NOVAC
004467,000161: 04,6533 31261 CADR BIASONLY
004468,000162: 04,6534 02256 LTSKOV TC TASKOVER # USED BY LONGCALL.
004469,000163:
004470,000164: # C(TIME3) = 1.0 - (T1 - T)
004471,000165:
004472,000166: # C(LST1 ) = - (T2 - T1) + 1
004473,000167: # C(LST1+1) = - (T3 - T2) + 1
004474,000168: # C(LST1+2) = - (T4 - T3) + 1
004475,000169: # C(LST1+3) = - (T5 - T4) + 1
004476,000170: # C(LST1+4) = - (T6 - T5) + 1
004477,000171:
004478,000172: # C(LST2 ) = TC TASK1
004479,000173: # C(LST2+1) = TC TASK2
004480,000174: # C(LST2+2) = TC TASK3
004481,000175: # C(LST2+3) = TC TASK4
004482,000176: # C(LST2+4) = TC TASK5
004483,000177: # C(LST2+5) = TC TASK6 11W
004484,000178:
Page 115 |
004486,000180:
004487,000181: # THE ENTRY TO WTLST2 JUST PRECEDING OCT N IS FOR T LE TD LE T -1.
004488,000182: # N N+1
004489,000183: # (LE MEANS LESS THAN OR EQUAL TO). AT ENTRY, C(A) = -(TD - T + 1)
004490,000184: # N+1
004491,000185:
004492,000186: # THE LST1 ENTRY -(T - T +1) IS TO BE REPLACED BY -(TD - T + 1), AND
004493,000187: # N+1 N N
004494,000188:
004495,000189: # THE ENTRY -(T - TD + 1) IS TO BE INSERTED IMMEDIATELY FOLLOWING.
004496,000190: # N+1
004497,000191:
004498,000192: 04,6535 30001 WTLST2 XCH Q # NEW C(Q) = -(TD - T + 1)
004499,000193: 04,6536 20000 INDEX A # N+1
004500,000194: 04,6537 30000 CAF 0
004501,000195: 04,6540 50577 TS NVAL # VALUE OF N INTO NVAL
004502,000196:
004503,000197: 04,6541 34516 CAF ONE
004504,000198: 04,6542 60001 AD Q
004505,000199: 04,6543 20577 INDEX NVAL # C(A) = -(TD - T ) + 1.
004506,000200: 04,6544 60551 AD LST1 -1 # N
004507,000201:
004508,000202: 04,6545 20577 INDEX NVAL
004509,000203: 04,6546 50551 TS LST1 -1
004510,000204:
004511,000205: 04,6547 40001 CS Q # -C(Q) = -(T - TD) + 1
004512,000206: 04,6550 20577 INDEX NVAL # N+1
004513,000207: 04,6551 06420 TC WTLST4
004514,000208:
Page 116 |
004516,000210:
004517,000211: # THIS ROUTINE HANDLES TASKS MORE THAN 120 SECS IN THE FUTURE. IT REQUIRES CALL TIME IN LONGTIME, +1 SCALED SAME
004518,000212: # AS TIME2, 1 AND THE TASK ADDRESS IN CALLCADR. ENTER WITH
004519,000213: # TC IBNKCALL
004520,000214: # CADR LONGCALL
004521,000215: # THE ROUTINE ONLY HANDLES ONE CALL AT A TIME
004522,000216:
004523,000217: 04,6552 30001 LONGCALL XCH Q
004524,000218: 04,6553 51466 TS LONGEXIT
004525,000219:
004526,000220: 04,6554 31461 XCH LONGTIME +1
004527,000221: 04,6555 60000 DOUBLE
004528,000222: 04,6556 51461 TS LONGTIME +1
004529,000223: 04,6557 35501 CAF ZERO
004530,000224: 04,6560 61460 AD LONGTIME
004531,000225: 04,6561 61460 AD LONGTIME
004532,000226: 04,6562 51460 TS LONGTIME
004533,000227: 04,6563 06565 TC +2
004534,000228: 04,6564 06564 TC -0 # ERROR TRAP. DT TOO BIG
004535,000229:
004536,000230: 04,6565 34516 CAF ONE
004537,000231: 04,6566 61461 AD LONGTIME +1
004538,000232: 04,6567 64476 AD POSMAX
004539,000233: 04,6570 51461 TS LONGTIME +1
004540,000234: 04,6571 35501 CAF ZERO
004541,000235:
004542,000236: 04,6572 61460 AD LONGTIME
004543,000237: 04,6573 64476 AD POSMAX
004544,000238: 04,6574 51460 TS LONGTIME
004545,000239: 04,6575 03062 TC CCSHOLE
004546,000240:
004547,000241: 04,6576 34501 CAF BIT14
004548,000242: 04,6577 25777 EXTEND
004549,000243: 04,6600 41461 MP LONGTIME +1
004550,000244: 04,6601 51461 TS LONGTIME +1
004551,000245:
004552,000246: 04,6602 11460 LONGCYCL CCS LONGTIME
004553,000247: 04,6603 06613 TC LOOPAGIN
004554,000248:
004555,000249: 04,6604 11461 CCS LONGTIME +1 # TEST FOR LOWER ORDER ZERO
004556,000250: 04,6605 06607 TC +2
004557,000251: 04,6606 06622 TC GETCADR
004558,000252:
004559,000253: 04,6607 31461 XCH LONGTIME +1
004560,000254: 04,6610 02173 TC WAITLIST
004561,000255: 04,6611 10622 CADR GETCADR
004562,000256:
004563,000257: 04,6612 06617 TC LONGC1
004564,000258: 04,6613 51460 LOOPAGIN TS LONGTIME
Page 117 |
004566,000260: 04,6614 34501 CAF BIT14
004567,000261: 04,6615 02173 TC WAITLIST
004568,000262: 04,6616 10602 CADR LONGCYCL
004569,000263:
004570,000264: 04,6617 36534 LONGC1 CAF LTSKOV
004571,000265: 04,6620 31466 XCH LONGEXIT
004572,000266: 04,6621 00000 XAQ
004573,000267:
004574,000268: 04,6622 31467 GETCADR XCH CALLCADR
004575,000269: 04,6623 05723 TC BANKJUMP
004576,000270:
Page 118 |
004578,000272:
004579,000273: # ENTERS HERE ON T3 RUPT TO DISPATCH WAITLISTED TASK.
004580,000274:
004581,000275: 2177 SETLOC WAITLIST +4 # BACK TO FF.
004582,000276:
004583,000277: 2177 30015 T3RUPT XCH BANKREG # TIME 3 OVERFLOW INTERRUPT PROGRAM
004584,000278: 2200 50030 TS BANKRUPT
004585,000279: 2201 30034 XCH OVCTR # 1. PICK UP CONTENTS OF THE OVERFLOW
004586,000280: 2202 50031 TS OVRUPT # AND SAVE IN OVRUPT FOR ENTIRE T3RUPT.
004587,000281:
004588,000282: 2203 45501 T3RUPT2 CS ZERO # SET RUPTAGN TO -0 INITIALLY, AND SET
004589,000283: 2204 50571 TS RUPTAGN # T3 TO -0 WHILE WE MAKE UP ITS NEW
004590,000284: 2205 30037 XCH TIME3 # CONTENTS SO WE CAN DETECT AN INCREMENT
004591,000285: 2206 50001 TS Q # OCCURING IN THE PROCESS.
004592,000286:
004593,000287: 2207 34520 CAF NEG1/2
004594,000288: 2210 30560 XCH LST1 +6
004595,000289: 2211 30557 XCH LST1 +5
004596,000290: 2212 30556 XCH LST1 +4 # 3. MOVE UP LST1 CONTENTS, ENTERING
004597,000291: 2213 30555 XCH LST1 +3 # A VALUE OF 1/2 +1 AT THE BOTTOM
004598,000292: 2214 30554 XCH LST1 +2 # FOR T6-T5, CORRESPONDING TO THE
004599,000293: 2215 30553 XCH LST1 +1 # INTERVAL 81.93 SEC FOR ENDTASK.
004600,000294: 2216 30552 XCH LST1
004601,000295: 2217 64476 AD POSMAX # 4. SET T3 = 1.0 - T2 -T USING LIST 1.
004602,000296: 2220 60001 AD Q # SAMPLED T3.
004603,000297: 2221 50000 TS A # SEE IF NEW T3 HAS OVERFLOW. IF SO, NEXT
004604,000298: 2222 02226 TC +4 # TASK IS DUE THIS T3 RUPT AND SET RUPTAGN
004605,000299: 2223 30571 XCH RUPTAGN # ACCORDINGLY.
004606,000300: 2224 34516 CAF ONE
004607,000301: 2225 30571 XCH RUPTAGN
004608,000302:
004609,000303: 2226 30037 +4 XCH TIME3
004610,000304: 2227 10000 CCS A # T3 IS ALMOST ALWAYS -0 UNLESS AN
004611,000305: 2230 34516 CAF ONE # INCREMENT OCCURRED IN WHICH CASE WE MUST
004612,000306: 2231 60037 AD TIME3 # ADD IT TO THE NEW T3.
004613,000307: 2232 02272 TC XTRAINC
004614,000308:
Page 119 |
004616,000310:
004617,000311: 2233 42260 T3DSP CS ENDTASK
004618,000312: 2234 30570 XCH LST2 +7
004619,000313: 2235 30567 XCH LST2 +6
004620,000314: 2236 30566 XCH LST2 +5 # ENTERING THE ENDTASK AT BOTTOM.
004621,000315: 2237 30565 XCH LST2 +4
004622,000316: 2240 30564 XCH LST2 +3
004623,000317: 2241 30563 XCH LST2 +2
004624,000318: 2242 30562 XCH LST2 +1
004625,000319: 2243 30561 XCH LST2 # 9. PICK UP TOP TASK ON LIST
004626,000320:
004627,000321: 2244 50015 TS BANKREG # SWITCH BANKS IF NECESSARY
004628,000322: 2245 50577 TS ITEMP1
004629,000323: 2246 72667 MASK 70K
004630,000324: 2247 10000 CCS A
004631,000325: 2250 02252 TC +2 # IF +
004632,000326: 2251 00577 TC ITEMP1
004633,000327: 2252 30577 XCH ITEMP1
004634,000328: 2253 74606 MASK LOW10
004635,000329: 2254 20000 INDEX A
004636,000330: 2255 06000 TC 6000
004637,000331:
004638,000332:
004639,000333:
004640,000334: # RETURN, AFTER EXECUTION OF TIME3 OVERFLOW TASK.
004641,000335:
004642,000336: 2256 10571 TASKOVER CCS RUPTAGN # IF +1 RETURN TO T3RUPT, IF -0 RESUME.
004643,000337: 2257 02203 TC T3RUPT2 # DISPATCH NEXT TASK IF IT WAS DUE.
004644,000338:
004645,000339: 2260 67774 ENDTASK -CADR SVCT3
004646,000340: 2261 76000 BANKMASK OCT 76000
004647,000341:
004648,000342: 2262 30031 OVRESUME XCH OVRUPT # OVCTR RESTORE AND BANKREG RESTORE.
004649,000343: 2263 50034 TS OVCTR
004650,000344:
004651,000345: 2264 30030 RESUME XCH BANKRUPT # STANDARD BANK-SWITCH RESUME.
004652,000346: 2265 50015 TS BANKREG
004653,000347:
004654,000348: 2266 30027 NBRESUME XCH QRUPT # NO-BANK-SWITCH RESUME.
004655,000349: 2267 50001 TS Q
004656,000350: 2270 30026 XCH ARUPT
004657,000351: 2271 20025 RESUME
004658,000352:
004659,000353: # FINISH UP RARE EVENT OF EXTRA INCREMENT TO T3.
004660,000354:
004661,000355: 2272 50037 XTRAINC TS TIME3
004662,000356: 2273 02233 TC T3DSP # USUAL CASE.
004663,000357: 2274 50571 TS RUPTAGN # EVEN MORE RARE - THE NEXT TASK IS DUE
004664,000358: 2275 02233 TC T3DSP # THIS T3RUPT.
004665,000359:
004666,000360:
End of include-file WAITLIST.agc. Parent file is MAIN.agc