Source Code

059806,000001: # Copyright: Public domain. 059807,000002: # Filename: RESTARTS_ROUTINE.agc 059808,000003: # Purpose: Part of the source code for Colossus, build 249. 059809,000004: # It is part of the source code for the Command Module's (CM) 059810,000005: # Apollo Guidance Computer (AGC), possibly for Apollo 8 and 9. 059811,000006: # Assembler: yaYUL 059812,000007: # Reference: Starts on p. 1404 of 1701.pdf. 059813,000008: # Contact: Ron Burkey <info@sandroid.org>. 059814,000009: # Website: www.ibiblio.org/apollo. 059815,000010: # Mod history: 08/30/04 RSB. Adapted from corresponding Luminary131 file. 059816,000011: # 2010-10-24 JL Added missing # in comment. 059817,000012: 059818,000013: # The contents of the "Colossus249" files, in general, are transcribed 059819,000014: # from a scanned document obtained from MIT's website, 059820,000015: # http://hrst.mit.edu/hrs/apollo/public/archive/1701.pdf. Notations on this 059821,000016: # document read, in part: 059822,000017: 059823,000018: # Assemble revision 249 of AGC program Colossus by NASA 059824,000019: # 2021111-041. October 28, 1968. 059825,000020: 059826,000021: # This AGC program shall also be referred to as 059827,000022: # Colossus 1A 059828,000023: 059829,000024: # Prepared by 059830,000025: # Massachusetts Institute of Technology 059831,000026: # 75 Cambridge Parkway 059832,000027: # Cambridge, Massachusetts 059833,000028: # under NASA contract NAS 9-4065. 059834,000029: 059835,000030: # Refer directly to the online document mentioned above for further information. 059836,000031: # Please report any errors (relative to 1701.pdf) to info@sandroid.org. 059837,000032: 059838,000033: # In some cases, where the source code for Luminary 131 overlaps that of 059839,000034: # Colossus 249, this code is instead copied from the corresponding Luminary 131 059840,000035: # source file, and then is proofed to incorporate any changes. 059841,000036: 059842,000037: # Page 1404 059843,000038: 01,3520 BANK 01 059844,000039: 01,2000 SETLOC RESTART 059845,000040: 01,2000 BANK 059846,000041: 059847,000042: 01,3520 E3,1436 EBANK= PHSNAME1 # GOPROG MUST SWITCH TO THIS EBANK 059848,000043: 059849,000044: 01,3520 COUNT 01/RSROU 059850,000045: 059851,000046: 01,3520 30161 RESTARTS CA MPAC +5 # GET GROUP NUMBER -1 059852,000047: 01,3521 60000 DOUBLE # SAVE FOR INDEXING 059853,000048: 01,3522 54155 TS TEMP2G 059854,000049: 059855,000050: 01,3523 33762 CA PHS2CADR # SET UP EXIT IN CASE IT IS AN EVEN 059856,000051: 01,3524 54157 TS TEMPSWCH # TABLE PHASE 059857,000052: 059858,000053: 01,3525 33557 CA RTRNCADR # TO SAVE TIME ASSUME IT WILL GET NEXT 059859,000054: 01,3526 54707 TS GOLOC +2 # GROUP AFTER THIS 059860,000055: 059861,000056: 01,3527 30154 CA TEMPPHS 059862,000057: 01,3530 74744 MASK OCT1400 059863,000058: 01,3531 10000 CCS A # IS IT A VARIABLE OR TABLE RESTART 059864,000059: 01,3532 13543 TCF ITSAVAR # IT'S A VARIABLE RESTART 059865,000060: 059866,000061: 01,3533 10154 GETPART2 CCS TEMPPHS # IS IT AN X.1 RESTART 059867,000062: 01,3534 10000 CCS A 059868,000063: 01,3535 13643 TCF ITSATBL # NO, IT'S A TABLE RESTART 059869,000064: 059870,000065: 01,3536 34761 CA PRIO14 # IT IS AN X.1 RESTART, THEREFORE START 059871,000066: 01,3537 05042 TC FINDVAC # THE DISPLAY RESTART JOB 059872,000067: 01,3540 E3,1400 EBANK= LST1 059873,000068: 01,3540 03165 20103 2CADR INITDSP 059874,000069: 059875,000070: 01,3542 03557 TC RTRNCADR # FINISHED WITH THIS GROUP, GET NEXT ONE 059876,000071: 059877,000072: 01,3543 74744 ITSAVAR MASK OCT1400 # IS IT TYPE B ? 059878,000073: 01,3544 10000 CCS A 059879,000074: 01,3545 13614 TCF ITSLIKEB # YES, IT IS TYPE B 059880,000075: 059881,000076: 01,3546 00006 EXTEND # STORES THE JOB (OR TASK) 2CADR FOR EXIT 059882,000077: 01,3547 50155 NDX TEMP2G 059883,000078: 01,3550 31437 DCA PHSNAME1 059884,000079: 01,3551 52706 DXCH GOLOC 059885,000080: 059886,000081: 01,3552 30154 CA TEMPPHS # SEE IF THIS IS A JOB, TASK, OR A LONGCALL 059887,000082: 01,3553 74716 MASK OCT7 059888,000083: 01,3554 67715 AD MINUS2 059889,000084: 01,3555 10000 CCS A 059890,000085: 01,3556 13726 TCF ITSLNGCL # IT'S A LONGCALL 059891,000086: 059892,000087: # Page 1405 059893,000088: 01,3557 04570 RTRNCADR TC SWRETURN # CAN'T GET HERE. 059894,000089: 01,3560 13562 TCF ITSAWAIT 059895,000090: 059896,000091: 01,3561 13627 TCF ITSAJOB # IT'S A JOB 059897,000092: 059898,000093: 01,3562 33766 ITSAWAIT CA WTLTCADR # SET UP WAITLIST CALL 059899,000094: 01,3563 54704 TS GOLOC -1 059900,000095: 059901,000096: 01,3564 50155 NDX TEMP2G # DIRECTLY STORED 059902,000097: 01,3565 31054 CA PHSPRDT1 059903,000098: 01,3566 10000 TIMETEST CCS A # IS IT AN IMMEDIATE RESTART 059904,000099: 01,3567 24000 INCR A # NO. 059905,000100: 01,3570 13573 TCF FINDTIME # FIND OUT WHEN IT SHOULD BEGIN 059906,000101: 059907,000102: 01,3571 15367 TCF ITSINDIR # STORED INDIRECTLY 059908,000103: 059909,000104: 01,3572 13612 TCF IMEDIATE # IT WANTS AN IMMEDIATE RESTART 059910,000105: 059911,000106: # ***** THIS MUST BE IN FIXED FIXED ***** 059912,000107: 059913,000108: 5367 BLOCK 02 059914,000109: 4000 SETLOC FFTAG2 059915,000110: 4000 BANK 059916,000111: 059917,000112: 5367 COUNT 02/RSROU 059918,000113: 059919,000114: 5367 22706 ITSINDIR LXCH GOLOC +1 # GET THE CORRECT E BANK IN CASE THIS IS 059920,000115: 5370 22006 LXCH BB # SWITCHED ERASABLE 059921,000116: 059922,000117: 5371 50000 NDX A # GET THE TIME INDIRECTLY 059923,000118: 5372 30001 CA 1 059924,000119: 059925,000120: 5373 22006 LXCH BB # RESTORE THE BB AND GOLOC 059926,000121: 5374 22706 LXCH GOLOC +1 059927,000122: 059928,000123: 5375 13573 TCF FINDTIME # FIND OUT WHEN IT SHOULD BEGIN 059929,000124: 059930,000125: # ***** YOU MAY RETURN TO SWITCHED FIXED ***** 059931,000126: 059932,000127: 01,3573 BANK 01 059933,000128: 01,2000 SETLOC RESTART 059934,000129: 01,2000 BANK 059935,000130: 059936,000131: 01,3573 COUNT 01/RSROU 059937,000132: 059938,000133: 01,3573 40000 FINDTIME COM # MAKE NEGATIVE SINCE IT WILL BE SUBTRACTED 059939,000134: 01,3574 54001 TS L # AND SAVE 059940,000135: 01,3575 50155 NDX TEMP2G 059941,000136: 01,3576 41053 CS TBASE1 059942,000137: 01,3577 00006 EXTEND 059943,000138: # Page 1406 059944,000139: 01,3600 60025 SU TIME1 059945,000140: 01,3601 10000 CCS A 059946,000141: 01,3602 40000 COM 059947,000142: 01,3603 67700 AD OCT37776 059948,000143: 01,3604 64712 AD ONE 059949,000144: 01,3605 60001 AD L 059950,000145: 01,3606 10000 CCS A 059951,000146: 01,3607 34714 CA ZERO 059952,000147: 01,3610 13612 TCF +2 059953,000148: 01,3611 13612 TCF +1 059954,000149: 01,3612 64712 IMEDIATE AD ONE 059955,000150: 01,3613 00704 TC GOLOC -1 059956,000151: 01,3614 33557 ITSLIKEB CA RTRNCADR # TYPE B, SO STORE RETURN IN 059957,000152: 01,3615 54157 TS TEMPSWCH # TEMPSWCH IN CASE OF AN EVEN PHASE 059958,000153: 059959,000154: 01,3616 33763 CA PRT2CADR # SET UP EXIT TO GET TABLE PART OF THIS 059960,000155: 01,3617 54707 TS GOLOC +2 # VARIABLE TYPE OF PHASE 059961,000156: 059962,000157: 01,3620 30154 CA TEMPPHS # MAKE THE PHASE LOOK RIGHT FOR THE TABLE 059963,000158: 01,3621 76043 MASK OCT177 # PART OF THIS VARIABLE PHASE 059964,000159: 01,3622 54154 TS TEMPPHS 059965,000160: 059966,000161: 01,3623 00006 EXTEND 059967,000162: 01,3624 50155 NDX TEMP2G # OBTAIN THE JOB'S 2CADR 059968,000163: 01,3625 31437 DCA PHSNAME1 059969,000164: 01,3626 52706 DXCH GOLOC 059970,000165: 059971,000166: 01,3627 50155 ITSAJOB NDX TEMP2G # NOW ADD THE PRIORITY AND LET'S GO 059972,000167: 01,3630 31054 CA PHSPRDT1 059973,000168: 01,3631 54704 CHKNOVAC TS GOLOC -1 # SAVE PRIO UNTIL WE SEE IF IT'S 059974,000169: 01,3632 00006 EXTEND # A FINDVAC OR A NOVAC 059975,000170: 01,3633 63637 BZMF ITSNOVAC 059976,000171: 059977,000172: 01,3634 33765 CAF FVACCADR # POSITIVE, SET UP FINDVAC CALL. 059978,000173: 01,3635 56704 XCH GOLOC -1 # PICK UP PRIO 059979,000174: 01,3636 00704 TC GOLOC -1 # AND GO 059980,000175: 059981,000176: 01,3637 33767 ITSNOVAC CAF NOVACADR # NEGATIVE, 059982,000177: 01,3640 56704 XCH GOLOC -1 # SET UP NOVAC CALL, 059983,000178: 01,3641 40000 COM # CORRECT PRIO, 059984,000179: 01,3642 00704 TC GOLOC -1 # AND GO 059985,000180: 059986,000181: 01,3643 54020 ITSATBL TS CYR # FIND OUT IF THE PHASE IS ODD OR EVEN 059987,000182: 01,3644 10020 CCS CYR 059988,000183: 01,3645 13646 TCF +1 # IT'S EVEN 059989,000184: 01,3646 13744 TCF ITSEVEN 059990,000185: 059991,000186: 01,3647 33557 CA RTRNCADR # IN CASE THIS IS THE SECOND PART OF A 059992,000187: 01,3650 54707 TS GOLOC +2 # TYPE B RESTART, WE NEED PROPER EXIT 059993,000188: # Page 1407 059994,000189: 01,3651 30154 CA TEMPPHS # SET UP POINTER FOR FINDING OUR PLACE IN 059995,000190: 01,3652 54021 TS SR # THE RESTART TABLES 059996,000191: 01,3653 60021 AD SR 059997,000192: 01,3654 50155 NDX TEMP2G 059998,000193: 01,3655 62001 AD SIZETAB +1 059999,000194: 01,3656 54156 TS POINTER 060000,000195: 060001,000196: 01,3657 00006 CONTBL2 EXTEND # FIND OUT WHAT'S IN THE TABLE 060002,000197: 01,3660 50156 NDX POINTER 060003,000198: 01,3661 32002 DCA CADRTAB # GET THE 2CADR 060004,000199: 060005,000200: 01,3662 22706 LXCH GOLOC +1 # STORE THE BB INFORMATION 060006,000201: 060007,000202: 01,3663 10000 CCS A # IS IT A JOB OR IT IT TIMED 060008,000203: 01,3664 24000 INCR A # POSITIVE, MUST BE A JOB 060009,000204: 01,3665 13740 TCF ITSAJOB2 060010,000205: 060011,000206: 01,3666 24000 INCR A # MUST BE EITHER A WAITLIST OR LONGCALL 060012,000207: 01,3667 54705 TS GOLOC # LET'S STORE THE CORRECT CADR 060013,000208: 060014,000209: 01,3670 33766 CA WTLTCADR # SET UP OUR EXIT TO WAITLIST 060015,000210: 01,3671 54704 TS GOLOC -1 060016,000211: 060017,000212: 01,3672 30706 CA GOLOC +1 # NOW FIND OUT IF IT IS A WAITLIST CALL 060018,000213: 01,3673 74701 MASK BIT10 # THIS SHOULD BE ONE IF WE HAVE -BB 060019,000214: 01,3674 10000 CCS A # FOR THAT MATTER SO SHOULD BE BITS 9,8,7, 060020,000215: # 6,5, AND LAST BUT NOT LEAST (PERHAPS NOT 060021,000216: # IN IMPORTANCE ANYWAY. BUT 4 060022,000217: 01,3675 13733 TCF ITSWTLST # IT IS A WAITLIST CALL 060023,000218: 060024,000219: 01,3676 50156 NDX POINTER # OBTAIN THE ORIGINAL DELTA T 060025,000220: 01,3677 32000 CA PRDTTAB # ADDRESS FOR THIS LONGCALL 060026,000221: 060027,000222: 01,3700 15376 TCF ITSLGCL1 # NOW GO GET THE DELTA TIME 060028,000223: 060029,000224: # ***** THIS MUST BE IN FIXED FIXED ***** 060030,000225: 060031,000226: 5376 BLOCK 02 060032,000227: 4000 SETLOC FFTAG2 060033,000228: 4000 BANK 060034,000229: 060035,000230: 5376 COUNT 02/RSROU 060036,000231: 060037,000232: 5376 22706 ITSLGCL1 LXCH GOLOC +1 # OBTAIN THE CORRECT E BANK 060038,000233: 5377 22006 LXCH BB 060039,000234: 5400 22706 LXCH GOLOC +1 # AND PRESERVE OUR E AND F BANKS 060040,000235: 060041,000236: 5401 00006 EXTEND # GET THE DELTA TIME 060042,000237: 5402 50000 NDX A 060043,000238: 5403 30001 DCA 0 060044,000239: # Page 1408 060045,000240: 5404 22706 LXCH GOLOC +1 # RESTORE OUR E AND F BANK 060046,000241: 5405 22006 LXCH BB # RESTORE THE TASKS E AND F BANKS 060047,000242: 5406 22706 LXCH GOLOC +1 # AND PRESERVE OUR L 060048,000243: 5407 13701 TCF ITSLGCL2 # NOT GET'S PROCESS THIS LONGCALL 060049,000244: 060050,000245: # ***** YOU MAY RETURN TO SWITCHED FIXED ***** 060051,000246: 060052,000247: 01,3701 BANK 01 060053,000248: 01,2000 SETLOC RESTART 060054,000249: 01,2000 BANK 060055,000250: 060056,000251: 01,3701 COUNT 01/RSROU 060057,000252: 01,3701 53140 ITSLGCL2 DXCH LONGTIME 060058,000253: 060059,000254: 01,3702 00006 EXTEND # CALCULATE TIME LEFT 060060,000255: 01,3703 40025 DCS TIME2 060061,000256: 01,3704 21140 DAS LONGTIME 060062,000257: 01,3705 00006 EXTEND 060063,000258: 01,3706 31136 DCA LONGBASE 060064,000259: 01,3707 21140 DAS LONGTIME 060065,000260: 060066,000261: 01,3710 11137 CCS LONGTIME # FIND OUT HOW THIS SHOULD BE RESTARTED 060067,000262: 01,3711 13721 TCF LONGCLCL 060068,000263: 01,3712 13714 TCF +2 060069,000264: 01,3713 13607 TCF IMEDIATE -3 060070,000265: 01,3714 11140 CCS LONGTIME +1 060071,000266: 01,3715 13721 TCF LONGCLCL 060072,000267: 01,3716 13717 NOOP # CAN'T GET HERE ************ 060073,000268: 01,3717 13607 TCF IMEDIATE -3 060074,000269: 01,3720 13612 TCF IMEDIATE 060075,000270: 060076,000271: 01,3721 33764 LONGCLCL CA LGCLCADR # WE WILL GO TO LONGCALL 060077,000272: 01,3722 54704 TS GOLOC -1 060078,000273: 060079,000274: 01,3723 00006 EXTEND # PREPARE OUR ENTRY TO LONGCALL 060080,000275: 01,3724 31140 DCA LONGTIME 060081,000276: 01,3725 00704 TC GOLOC -1 060082,000277: 060083,000278: 01,3726 33766 ITSLNGCL CA WTLTCADR # ASSUME IT WILL GO TO WAITLIST 060084,000279: 01,3727 54704 TS GOLOC -1 060085,000280: 060086,000281: 01,3730 50155 NDX TEMP2G 060087,000282: 01,3731 41054 CS PHSPRDT1 # GET THE DELTA T ADDRESS 060088,000283: 060089,000284: 01,3732 15376 TCF ITSLGCL1 # NOW GET THE DELTA TIME 060090,000285: 060091,000286: 01,3733 40706 ITSWTLST CS GOLOC +1 # CORRECT THE BBCON INFORMATION 060092,000287: 01,3734 54706 TS GOLOC +1 060093,000288: # Page 1409 060094,000289: 01,3735 50156 NDX POINTER # GET THE DT AND FIND OUT IF IT WAS STORED 060095,000290: 01,3736 32000 CA PRDTTAB # DIRECTOY OR INDIRECTLY 060096,000291: 060097,000292: 01,3737 13566 TCF TIMETEST # FIND OUT HOW THE TIME IS STORED 060098,000293: 060099,000294: 01,3740 56705 ITSAJOB2 XCH GOLOC # STORE THE CADR 060100,000295: 060101,000296: 01,3741 50156 NDX POINTER # ADD THE PRIORITY AND LET'S GO 060102,000297: 01,3742 32000 CA PRDTTAB 060103,000298: 060104,000299: 01,3743 13631 TCF CHKNOVAC 060105,000300: 060106,000301: 01,3744 30157 ITSEVEN CA TEMPSWCH # SET FOR EITHER THE SECOND PART OF THE 060107,000302: 01,3745 54707 TS GOLOC +2 # TABLE, OR A RETURN FOR THE NEXT GROUP 060108,000303: 060109,000304: 01,3746 50155 NDX TEMP2G # SET UP POINTER FOR OUR LOCATION WITHIN 060110,000305: 01,3747 32000 CA SIZETAB # THE TABLE 060111,000306: 01,3750 60154 AD TEMPPHS # THIS MAY LOOK BAD BUT LET'S SEE YOU DO 060112,000307: 01,3751 60154 AD TEMPPHS # BETTER IN TIME OR NUMBER OF LOCATIONS 060113,000308: 01,3752 60154 AD TEMPPHS 060114,000309: 01,3753 54156 TS POINTER 060115,000310: 060116,000311: 01,3754 13657 TCF CONTBL2 # NO PROCESS WHAT IS IN THE TABLE 060117,000312: 060118,000313: 01,3755 36214 PHSPART2 CA THREE # SET THE POINTER FOR THE SECOND HALF OF 060119,000314: 01,3756 26156 ADS POINTER # THE TABLE 060120,000315: 060121,000316: 01,3757 33557 CA RTRNCADR # THIS WILL BE OUR LAST TIME THROUGH THE 060122,000317: 01,3760 54707 TS GOLOC +2 # EVEN TABLE, SO AFTER IT GET THE NEXT 060123,000318: # GROUP 060124,000319: 01,3761 13657 TCF CONTBL2 # SO LET'S GET THE SECOND ENTRY IN THE TBL 060125,000320: 060126,000321: 01,3762 0154 TEMPPHS EQUALS MPAC 060127,000322: 01,3762 0155 TEMP2G EQUALS MPAC +1 060128,000323: 01,3762 0156 POINTER EQUALS MPAC +2 060129,000324: 01,3762 0157 TEMPSWCH EQUALS MPAC +3 060130,000325: 01,3762 0705 GOLOC EQUALS VAC5 +20D 060131,000326: 01,3762 7715 MINUS2 EQUALS NEG2 060132,000327: 01,3762 6043 OCT177 EQUALS LOW7 060133,000328: 060134,000329: 01,3762 03755 PHS2CADR GENADR PHSPART2 060135,000330: 01,3763 03533 PRT2CADR GENADR GETPART2 060136,000331: 01,3764 05231 LGCLCADR GENADR LONGCALL 060137,000332: 01,3765 05042 FVACCADR GENADR FINDVAC 060138,000333: 01,3766 05140 WTLTCADR GENADR WAITLIST 060139,000334: 01,3767 05027 NOVACADR GENADR NOVAC 060140,000335: 060141,000336: 060142,000337: 060143,000338: End of include-file RESTARTS_ROUTINE.agc. Parent file is MAIN.agc