Source Code

064241,000001: # Copyright: Public domain. 064242,000002: # Filename: SERVICE_ROUTINES.agc 064243,000003: # Purpose: Part of the source code for Comanche, build 055. It 064244,000004: # is part of the source code for the Command Module's 064245,000005: # (CM) Apollo Guidance Computer (AGC), Apollo 11. 064246,000006: # Assembler: yaYUL 064247,000007: # Reference: pp. 1485-1492 064248,000008: # Contact: Ron Burkey <info@sandroid.org> 064249,000009: # Website: http://www.ibiblio.org/apollo. 064250,000010: # Mod history: 2009-05-07 RSB Adapted from Colossus249 file of the same 064251,000011: # name, and page images. Corrected various 064252,000012: # typos in the transcription of program 064253,000013: # comments, and these should be back-ported 064254,000014: # to Colossus249. 064255,000015: 064256,000016: # The contents of the "Comanche055" files, in general, are transcribed 064257,000017: # from scanned documents. 064258,000018: 064259,000019: # Assemble revision 055 of AGC program Comanche by NASA 064260,000020: # 2021113-051. April 1, 1969. 064261,000021: 064262,000022: # This AGC program shall also be referred to as Colossus 2A 064263,000023: 064264,000024: # Prepared by 064265,000025: # Massachussets Institute of Technology 064266,000026: # 75 Cambridge Parkway 064267,000027: # Cambridge, Massachusetts 064268,000028: 064269,000029: # under NASA contract NAS 9-4065. 064270,000030: 064271,000031: # Refer directly to the online document mentioned above for further 064272,000032: # information. Please report any errors to info@sandroid.org. 064273,000033: 064274,000034: # Page 1485 064275,000035: 7722 BLOCK 3 064276,000036: 6000 SETLOC FFTAG6 064277,000037: 6000 BANK 064278,000038: 7722 COUNT 03/FLAG 064279,000039: 064280,000040: 7722 54001 UPENT2 TS L # WHICH FLAGWORD IS IT 064281,000041: 7723 75023 MASK OCT7 064282,000042: 7724 56001 XCH L # SAVE IN L FOR INDEXING 064283,000043: 064284,000044: 7725 75731 MASK OCT77770 # OBTAIN THE BIT INFORMATION 064285,000045: 7726 00004 INHINT # PREVENT INTERRUPTS 064286,000046: 7727 54061 TS ITEMP1 # STORE THE BIT INFORMATION TEMPORARILY 064287,000047: 064288,000048: 7730 50001 NDX L 064289,000049: 7731 40074 CS FLAGWRD0 064290,000050: 7732 70061 MASK ITEMP1 064291,000051: 7733 50001 NDX L 064292,000052: 7734 26074 ADS FLAGWRD0 064293,000053: 7735 00003 RELINT # RELEASE INTERRUPT INHIBIT 064294,000054: 064295,000055: 7736 24002 INCR Q # OBTAIN THE CORRECT RETURN ADDRESS 064296,000056: 7737 00002 TC Q # RETURN 064297,000057: 064298,000058: 7740 54001 DOWNENT2 TS L # WHICH FLAGWORD IS IT 064299,000059: 7741 75023 MASK OCT7 064300,000060: 7742 56001 XCH L # SAVE IN L FOR INDEXING 064301,000061: 064302,000062: 7743 75731 MASK OCT77770 # OBTAIN THE BIT INFORMATION 064303,000063: 7744 40000 COM # START TO PROCESS THE INFORMATION 064304,000064: 064305,000065: 7745 00004 INHINT # PREVENT INTERRUPTS 064306,000066: 7746 50001 NDX L 064307,000067: 7747 70074 MASK FLAGWRD0 064308,000068: 7750 50001 NDX L 064309,000069: 7751 54074 TS FLAGWRD0 064310,000070: 7752 00003 RELINT # RELEASE INTERRUPT INHIBIT 064311,000071: 064312,000072: 7753 24002 INCR Q # OBTAIN THE CORRECT RETURN ADDRESS 064313,000073: 7754 00002 TC Q 064314,000074: 064315,000075: 7755 5023 OCT7 EQUALS SEVEN 064316,000076: 10,3766 BANK 10 064317,000077: 064318,000078: # Page 1486 064319,000079: # UPFLAG AND DOWNFLAG ARE ENTIRELY GENERAL FLAG SETTING AND CLEARING SUBROUTINES. USING THEM, WHETHER OR 064320,000080: # NOT IN INTERRUPT, ONE MAY SET OR CLEAR ANY SINGLE, NAMED BIT IN ANY ERASABLE REGISTER, SUBJECT OF COURSE TO 064321,000081: # EBANK SETTING. A "NAMED" BIT, AS THE WORD IS USED HERE, IS ANY BIT WITH A NAME FORMALLY ASSIGNED BY THE YUL 064322,000082: # ASSEMBLER. 064323,000083: 064324,000084: # AT PRESENT THE ONLY NAMED BITS ARE THOSE IN THE FLAGWORDS. ASSEMBLER CHANGES WILL MAKE IT POSSIBLE TO 064325,000085: # NAME ANY BIT IN ERASABLE MEMORY. 064326,000086: 064327,000087: # CALLING SEQUENCES ARE AS FOLLOWS -- 064328,000088: # TC UPFLAG TC DOWNFLAG 064329,000089: # ADRES NAME OF FLAG ADRES NAME OF FLAG 064330,000090: 064331,000091: # RETURN IS TO THE LOCATION FOLLOWING THE "ADRES" ABOUT .58 MS AFTER THE "TC". 064332,000092: # UPON RETURN A CONTAINS THE CURRENT FLAGWRD SETTING. 064333,000093: 064334,000094: 5546 BLOCK 02 064335,000095: 4000 SETLOC FFTAG1 064336,000096: 4000 BANK 064337,000097: 5546 COUNT* $$/FLAG 064338,000098: 064339,000099: 5546 30002 UPFLAG CA Q 064340,000100: 5547 05564 TC DEBIT 064341,000101: 5550 40000 COM # +(15 - BIT) 064342,000102: 5551 00006 EXTEND 064343,000103: 5552 04001 ROR LCHAN # SET BIT 064344,000104: 5553 50061 COMFLAG INDEX ITEMP1 064345,000105: 5554 54074 TS FLAGWRD0 064346,000106: 5555 22063 LXCH ITEMP3 064347,000107: 5556 00003 RELINT 064348,000108: 5557 00001 TC L 064349,000109: 064350,000110: 5560 30002 DOWNFLAG CA Q 064351,000111: 5561 05564 TC DEBIT 064352,000112: 5562 70001 MASK L # RESET BIT 064353,000113: 5563 15553 TCF COMFLAG 064354,000114: 064355,000115: 5564 65017 DEBIT AD ONE # CET DE BITS 064356,000116: 5565 00004 INHINT 064357,000117: 5566 54063 TS ITEMP3 064358,000118: 5567 35026 CA LOW4 # DEC15 064359,000119: 5570 54061 TS ITEMP1 064360,000120: 5571 50063 INDEX ITEMP3 064361,000121: 5572 27777 CA 0 -1 # ADRES 064362,000122: 5573 54001 TS L 064363,000123: 5574 35021 CA ZERO 064364,000124: # Page 1487 064365,000125: 5575 00006 EXTEND 064366,000126: 5576 10061 DV ITEMP1 # A = FLAGWRD, L = (15 - BIT) 064367,000127: 5577 52062 DXCH ITEMP1 064368,000128: 5600 50061 INDEX ITEMP1 064369,000129: 5601 30074 CA FLAGWRD0 064370,000130: 5602 54001 TS L # CURRENT STATE 064371,000131: 5603 50062 INDEX ITEMP2 064372,000132: 5604 45001 CS BIT15 # -(15 - BIT) 064373,000133: 5605 00002 TC Q 064374,000134: 064375,000135: # Page 1488 064376,000136: # DELAYJOB -- A GENERAL ROUTINE TO DELAY A JOB A SPECIFIC AMOUNT OF TIME BEFORE PICKING UP AGAIN. 064377,000137: 064378,000138: # ENTRANCE REQUIREMENTS ... 064379,000139: # CAF DT # DELAY JOB FOR DT CENTISECS 064380,000140: # TC BANKCALL 064381,000141: # CADR DELAYJOB 064382,000142: 064383,000143: 06,3770 BANK 06 064384,000144: 00,2000 SETLOC DLAYJOB 064385,000145: 00,2000 BANK 064386,000146: 064387,000147: # THIS MUST REMAIN IN BANK 0 **************************************** 064388,000148: 064389,000149: 00,3732 COUNT 00/DELAY 064390,000150: 064391,000151: 00,3732 00004 DELAYJOB INHINT 064392,000152: 00,3733 54002 TS Q # STORE DELAY DT IN Q FOR DLY -1 IN 064393,000153: 00,3734 36214 CAF DELAYNUM # WAITLIST 064394,000154: 00,3735 54070 DELLOOP TS RUPTREG1 064395,000155: 00,3736 50000 INDEX A 064396,000156: 00,3737 31141 CA DELAYLOC # IS THIS DELAYLOC AVAILABLE 064397,000157: 00,3740 00006 EXTEND 064398,000158: 00,3741 13746 BZF OK2DELAY # YES 064399,000159: 064400,000160: 00,3742 10070 CCS RUPTREG1 # NO, TRY NEXT DELAYLOC 064401,000161: 00,3743 13735 TCF DELLOOP 064402,000162: 064403,000163: 00,3744 07755 TC BAILOUT # NO AVAILABLE LOCS. 064404,000164: 00,3745 01104 OCT 1104 064405,000165: 064406,000166: 00,3746 33766 OK2DELAY CA TCSLEEP # SET WAITLIST IMMEDIATE RETURN 064407,000167: 00,3747 54061 TS WAITEXIT 064408,000168: 064409,000169: 00,3750 30004 CA FBANK 064410,000170: 00,3751 60070 AD RUPTREG1 # STORE BBANK FOR TASK CALL 064411,000171: 00,3752 54001 TS L 064412,000172: 064413,000173: 00,3753 33767 CAF WAKECAD # STORE CADR FOR TASK CALL 064414,000174: 00,3754 15255 TCF DLY2 -1 # DLY IS IN WAITLIST ROUTINE 064415,000175: 064416,000176: 00,3755 04711 TCGETCAD TC MAKECADR # GET CALLER'S FCADR 064417,000177: 064418,000178: 00,3756 50070 INDEX RUPTREG1 064419,000179: 00,3757 55141 TS DELAYLOC # SAVE DELAY CADRS 064420,000180: 064421,000181: 00,3760 05175 TC JOBSLEEP 064422,000182: 064423,000183: 00,3761 35021 WAKER CAF ZERO 064424,000184: 00,3762 50006 INDEX BBANK 064425,000185: 00,3763 57141 XCH DELAYLOC # MAKE DELAYLOC AVAILABLE 064426,000186: # Page 1489 064427,000187: 00,3764 05201 TC JOBWAKE 064428,000188: 064429,000189: 00,3765 05324 TC TASKOVER 064430,000190: 064431,000191: 00,3766 03753 TCSLEEP GENADR TCGETCAD -2 064432,000192: 00,3767 03761 WAKECAD GENADR WAKER 064433,000193: 064434,000194: # Page 1490 064435,000195: # GENTRAN, A BLOCK TRANSFER ROUTINE 064436,000196: # WRITTEN BY D. EYLES 064437,000197: # MOD 1 BY KERNAN UTILITYM REV 17 11/18/67 064438,000198: # MOD 2 BY SCHULENBERG -- (REMOVE RELINT) -- SKIPPER REV 4 2/28/68 064439,000199: 064440,000200: # THIS ROUTINE IS USEFUL FOR TRANSFERRING N CONSECUTIVE ERASABLE OR FIXED QUANTITIES TO SOME OTHER N 064441,000201: # CONSECUTIVE ERASABLE LOCATIONS. IF BOTH BLOCKS OF DATA ARE IN SWITCHABLE EBANKS, THEY MUST BE IN THE SAME ONE. 064442,000202: 064443,000203: # GENTRAN IS CALLABLE IN A JOB AS WELL AS A RUPT. THE CALLING SEQUENCE IS: 064444,000204: # I CA N-1 # NO. NUMBER OF QUANTITIES MINUS ONE. 064445,000205: # I +1 TC GENTRAN # IN FIXED-FIXED. 064446,000206: # I +2 ADRES L # STARTING ADRES OF DATA TO BE MOVED. 064447,000207: # I +3 ADRES M # STARTING ADRES OF DUPLICATION BLOCK. 064448,000208: # I +4 # RETURNS HERE. 064449,000209: 064450,000210: # GENTRAN TAKES 25 MCT'S (300 MICROSECONDS) PER ITEM + 5 MCT'S (60 MICS) FOR ENTERING AND EXITING. 064451,000211: # A, L, AND ITEMP1 ARE NOT PRESERVED. 064452,000212: 064453,000213: 5606 BLOCK 02 064454,000214: 4000 SETLOC FFTAG4 064455,000215: 4000 BANK 064456,000216: 064457,000217: 5606 0061 EBANK= ITEMP1 064458,000218: 064459,000219: 5606 COUNT* $$/TRAN 064460,000220: 064461,000221: 5606 00004 GENTRAN INHINT 064462,000222: 5607 54061 TS ITEMP1 # SAVE N-1 064463,000223: 5610 50002 INDEX Q # C(Q) = ADRES L. 064464,000224: 5611 60000 AD 0 # ADRES (L + N - 1). 064465,000225: 5612 50000 INDEX A 064466,000226: 5613 30000 CA 0 # C(ABOVE). 064467,000227: 5614 54001 TS L # SAVE DATA. 064468,000228: 5615 30061 CA ITEMP1 064469,000229: 5616 50002 INDEX Q 064470,000230: 5617 60001 AD 1 # ADRES (M + N - 1). 064471,000231: 5620 50000 INDEX A 064472,000232: 5621 22000 LXCH 0 # STUFF IT. 064473,000233: 5622 10061 CCS ITEMP1 # LOOP UNTIL N-1 = 0. 064474,000234: 5623 15607 TCF GENTRAN +1 064475,000235: 5624 16710 TCF Q+2 # RETURN TO CALLER. 064476,000236: 064477,000237: # Page 1491 064478,000238: # B5OFF ZERO BIT 5 OF EXTVBACK, WHICH IS SET BY TESTXACT. 064479,000239: # MAY BE USED AS NEEDED BY ANY EXTENDED VERB WHICH HAS DONE TESTXACT 064480,000240: 064481,000241: 5625 COUNT* $$/EXTVB 064482,000242: 064483,000243: 5625 45013 B5OFF CS BIT5 064484,000244: 5626 71044 MASK EXTVBACT 064485,000245: 5627 55044 TS EXTVBACT 064486,000246: 5630 05217 TC ENDOFJOB 064487,000247: 064488,000248: # Page 1492 064489,000249: # SUBROUTINES TO TURN OFF AND TURN ON TRACKER FAIL LIGHT. 064490,000250: 064491,000251: 5631 00004 TRFAILOF INHINT 064492,000252: 5632 47704 CS OCT40200 # TURN OFF TRACKER LIGHT 064493,000253: 5633 71036 MASK DSPTAB +11D 064494,000254: 5634 65001 AD BIT15 064495,000255: 5635 55036 TS DSPTAB +11D 064496,000256: 5636 41331 CS OPTMODES # TO INSURE THAT OCDU FAIL WILL GO ON 064497,000257: 5637 75011 MASK BIT7 # AGAIN IF IT WAS ON IN ADDITION TO 064498,000258: 5640 27331 ADS OPTMODES # TRACKER FAIL. 064499,000259: 064500,000260: 5641 00003 REQ RELINT 064501,000261: 5642 00002 TC Q 064502,000262: 064503,000263: 5643 00004 TRFAILON INHINT 064504,000264: 5644 41036 CS DSPTAB +11D # TURN ON 064505,000265: 5645 77704 MASK OCT40200 064506,000266: 5646 27036 ADS DSPTAB +11D 064507,000267: 5647 15641 TCF REQ 064508,000268: 064509,000269: 064510,000270: 064511,000271: End of include-file SERVICE_ROUTINES.agc. Parent file is MAIN.agc