Source Code

062770,000001: # Copyright: Public domain. 062771,000002: # Filename: SERVICE_ROUTINES.agc 062772,000003: # Purpose: Part of the source code for Colossus, build 249. 062773,000004: # It is part of the source code for the Command Module's (CM) 062774,000005: # Apollo Guidance Computer (AGC), possibly for Apollo 8 and 9. 062775,000006: # Assembler: yaYUL 062776,000007: # Reference: Starts on p. 1475 of 1701.pdf. 062777,000008: # Contact: Ron Burkey <info@sandroid.org>. 062778,000009: # Website: www.ibiblio.org/apollo. 062779,000010: # Mod history: 08/30/04 RSB. Adapted from corresponding Luminary131 file. 062780,000011: 062781,000012: # The contents of the "Colossus249" files, in general, are transcribed 062782,000013: # from a scanned document obtained from MIT's website, 062783,000014: # http://hrst.mit.edu/hrs/apollo/public/archive/1701.pdf. Notations on this 062784,000015: # document read, in part: 062785,000016: 062786,000017: # Assemble revision 249 of AGC program Colossus by NASA 062787,000018: # 2021111-041. October 28, 1968. 062788,000019: 062789,000020: # This AGC program shall also be referred to as 062790,000021: # Colossus 1A 062791,000022: 062792,000023: # Prepared by 062793,000024: # Massachussets Institute of Technology 062794,000025: # 75 Cambridge Parkway 062795,000026: # Cambridge, Massachusetts 062796,000027: # under NASA contract NAS 9-4065. 062797,000028: 062798,000029: # Refer directly to the online document mentioned above for further information. 062799,000030: # Please report any errors (relative to 1701.pdf) to info@sandroid.org. 062800,000031: 062801,000032: # In some cases, where the source code for Luminary 131 overlaps that of 062802,000033: # Colossus 249, this code is instead copied from the corresponding Luminary 131 062803,000034: # source file, and then is proofed to incorporate any changes. 062804,000035: 062805,000036: # Page 1475 062806,000037: 7717 BLOCK 3 062807,000038: 6000 SETLOC FFTAG6 062808,000039: 6000 BANK 062809,000040: 7717 COUNT 03/FLAG 062810,000041: 062811,000042: 7717 54001 UPENT2 TS L # WHICH FLAGWORD IS IT 062812,000043: 7720 74716 MASK OCT7 062813,000044: 7721 56001 XCH L # SAVE IN L FOR INDEXING 062814,000045: 062815,000046: 7722 75630 MASK OCT77770 # OBTAIN THE BIT INFORMATION 062816,000047: 7723 00004 INHINT # PREVENT INTERRUPTS 062817,000048: 7724 54061 TS ITEMP1 # STORE THE BIT INFORMATION TEMPORARILY 062818,000049: 062819,000050: 7725 50001 NDX L 062820,000051: 7726 40074 CS FLAGWRD0 062821,000052: 7727 70061 MASK ITEMP1 062822,000053: 7730 50001 NDX L 062823,000054: 7731 26074 ADS FLAGWRD0 062824,000055: 7732 00003 RELINT # RELEASE INTERRUPT INHIBIT 062825,000056: 062826,000057: 7733 24002 INCR Q # OBTAIN THE CORRECT RETURN ADDRESS 062827,000058: 7734 00002 TC Q # RETURN 062828,000059: 062829,000060: 7735 54001 DOWNENT2 TS L # WHICH FLAGWORD IS IT 062830,000061: 7736 74716 MASK OCT7 062831,000062: 7737 56001 XCH L # SAVE IN L FOR INDEXING 062832,000063: 062833,000064: 7740 75630 MASK OCT77770 # OBTAIN THE BIT INFORMATION 062834,000065: 7741 40000 COM # START TO PROCESS THE INFORMATION 062835,000066: 062836,000067: 7742 00004 INHINT # PREVENT INTERRUPTS 062837,000068: 7743 50001 NDX L 062838,000069: 7744 70074 MASK FLAGWRD0 062839,000070: 7745 50001 NDX L 062840,000071: 7746 54074 TS FLAGWRD0 062841,000072: 7747 00003 RELINT # RELEASE INTERRUPT INHIBIT 062842,000073: 062843,000074: 7750 24002 INCR Q # OBTAIN THE CORRECT RETURN ADDRESS 062844,000075: 7751 00002 TC Q 062845,000076: 062846,000077: 7752 4716 OCT7 EQUALS SEVEN 062847,000078: 10,3671 BANK 10 062848,000079: 062849,000080: # Page 1476 062850,000081: # UPFLAG AND DOWNFLAG ARE ENTIRELY GENERAL FLAG SETTING AND CLEARING SUBROUTINES. USING THEM, WHETHER OR 062851,000082: # NOT IN INTERRUPT, ONE MAY SET OR CLEAR ANY SINGLE, NAMED BIT IN ANY ERASABLE REGISTER, SUBJECT OF COURSE TO 062852,000083: # EBANK SETTING. A "NAMED" BIT, AS THE WORD IS USED HERE, IS ANY BIT WITH A NAME FORMALLY ASSIGNED BY THE YUL 062853,000084: # ASSEMBLER. 062854,000085: 062855,000086: # AT PRESENT THE ONLY NAMED BITS ARE THOSE IN THE FLAGWORDS. ASSEMBLER CHANGES WILL MAKE IT POSSIBLE TO 062856,000087: # NAME ANY BIT IN ERASABLE MEMORY. 062857,000088: 062858,000089: # CALLING SEQUENCES ARE AS FOLLOWS -- 062859,000090: # TC UPFLAG TC DOWNFLAG 062860,000091: # ADRES NAME OF FLAG ADRES NAME OF FLAG 062861,000092: 062862,000093: # RETURN IS TO THE LOCATION FOLLOWING THE "ADRES" ABOUT .58 MS AFTER THE "TC". 062863,000094: # UPON RETURN A CONTAINS THE CURRENT FLAGWRD SETTING. 062864,000095: 062865,000096: 5435 BLOCK 02 062866,000097: 4000 SETLOC FFTAG1 062867,000098: 4000 BANK 062868,000099: 5435 COUNT* $$/FLAG 062869,000100: 062870,000101: 5435 30002 UPFLAG CA Q 062871,000102: 5436 05453 TC DEBIT 062872,000103: 5437 40000 COM # +(15 - BIT) 062873,000104: 5440 00006 EXTEND 062874,000105: 5441 04001 ROR LCHAN # SET BIT 062875,000106: 5442 50061 COMFLAG INDEX ITEMP1 062876,000107: 5443 54074 TS FLAGWRD0 062877,000108: 5444 22063 LXCH ITEMP3 062878,000109: 5445 00003 RELINT 062879,000110: 5446 00001 TC L 062880,000111: 062881,000112: 5447 30002 DOWNFLAG CA Q 062882,000113: 5450 05453 TC DEBIT 062883,000114: 5451 70001 MASK L # RESET BIT 062884,000115: 5452 15442 TCF COMFLAG 062885,000116: 062886,000117: 5453 64712 DEBIT AD ONE # CET DE BITS 062887,000118: 5454 00004 INHINT 062888,000119: 5455 54063 TS ITEMP3 062889,000120: 5456 34721 CA LOW4 # DEC15 062890,000121: 5457 54061 TS ITEMP1 062891,000122: 5460 50063 INDEX ITEMP3 062892,000123: 5461 27777 CA 0 -1 # ADRES 062893,000124: 5462 54001 TS L 062894,000125: 5463 34714 CA ZERO 062895,000126: # Page 1477 062896,000127: 5464 00006 EXTEND 062897,000128: 5465 10061 DV ITEMP1 # A = FLAGWRD, L = (15 - BIT) 062898,000129: 5466 52062 DXCH ITEMP1 062899,000130: 5467 50061 INDEX ITEMP1 062900,000131: 5470 30074 CA FLAGWRD0 062901,000132: 5471 54001 TS L # CURRENT STATE 062902,000133: 5472 50062 INDEX ITEMP2 062903,000134: 5473 44674 CS BIT15 # -(15 - BIT) 062904,000135: 5474 00002 TC Q 062905,000136: 062906,000137: # Page 1478 062907,000138: # DELAYJOB -- A GENERAL ROUTINE TO DELAY A JOB A SPECIFIC AMOUNT OF TIME BEFORE PICKING UP AGAIN. 062908,000139: 062909,000140: # ENTRANCE REQUIREMENTS ... 062910,000141: # CAF DT # DELAY JOB FOR DT CENTISECS 062911,000142: # TC BANKCALL 062912,000143: # CADR DELAYJOB 062913,000144: 062914,000145: 06,3651 BANK 06 062915,000146: 00,2000 SETLOC DLAYJOB 062916,000147: 00,2000 BANK 062917,000148: 062918,000149: # THIS MUST REMAIN IN BANK 0 **************************************** 062919,000150: 062920,000151: 00,3732 COUNT 00/DELAY 062921,000152: 062922,000153: 00,3732 00004 DELAYJOB INHINT 062923,000154: 00,3733 54002 TS Q # STORE DELAY DT IN Q FOR DLY -1 IN 062924,000155: 00,3734 36214 CAF DELAYNUM # WAITLIST 062925,000156: 00,3735 54070 DELLOOP TS RUPTREG1 062926,000157: 00,3736 50000 INDEX A 062927,000158: 00,3737 31141 CA DELAYLOC # IS THIS DELAYLOC AVAILABLE 062928,000159: 00,3740 00006 EXTEND 062929,000160: 00,3741 13746 BZF OK2DELAY # YES 062930,000161: 062931,000162: 00,3742 10070 CCS RUPTREG1 # NO, TRY NEXT DELAYLOC 062932,000163: 00,3743 13735 TCF DELLOOP 062933,000164: 062934,000165: 00,3744 05604 TC BAILOUT # NO AVAILABLE LOCS. 062935,000166: 00,3745 01104 OCT 1104 062936,000167: 062937,000168: 00,3746 33766 OK2DELAY CA TCSLEEP # SET WAITLIST IMMEDIATE RETURN 062938,000169: 00,3747 54061 TS WAITEXIT 062939,000170: 062940,000171: 00,3750 30004 CA FBANK 062941,000172: 00,3751 60070 AD RUPTREG1 # STORE BBANK FOR TASK CALL 062942,000173: 00,3752 54001 TS L 062943,000174: 062944,000175: 00,3753 33767 CAF WAKECAD # STORE CADR FOR TASK CALL 062945,000176: 00,3754 15146 TCF DLY2 -1 # DLY IS IN WAITLIST ROUTINE 062946,000177: 062947,000178: 00,3755 04604 TCGETCAD TC MAKECADR # GET CALLER'S FCADR 062948,000179: 062949,000180: 00,3756 50070 INDEX RUPTREG1 062950,000181: 00,3757 55141 TS DELAYLOC # SAVE DELAY CADRS 062951,000182: 062952,000183: 00,3760 05070 TC JOBSLEEP 062953,000184: 062954,000185: 00,3761 34714 WAKER CAF ZERO 062955,000186: 00,3762 50006 INDEX BBANK 062956,000187: 00,3763 57141 XCH DELAYLOC # MAKE DELAYLOC AVAILABLE 062957,000188: # Page 1479 062958,000189: 00,3764 05074 TC JOBWAKE 062959,000190: 062960,000191: 00,3765 05213 TC TASKOVER 062961,000192: 062962,000193: 00,3766 03753 TCSLEEP GENADR TCGETCAD -2 062963,000194: 00,3767 03761 WAKECAD GENADR WAKER 062964,000195: 062965,000196: # Page 1480 062966,000197: # GENTRAN, A BLOCK TRANSFER ROUTINE 062967,000198: # WRITTEN BY D. EYLES 062968,000199: # MOD 1 BY KERNAN UTILITYM REV 17 11/18/67 062969,000200: # MOD 2 BY SCHULENBERG -- (REMOVE RELINT) -- SKIPPER REV 4 2/28/68 062970,000201: 062971,000202: # THIS ROUTINE IS USEFUL FOR TRANSFERRING N CONSECUTIVE ERASABLE OR FIXED QUANTITIES TO SOME OTHER N 062972,000203: # CONSECUTIVE ERASABLE LOCATIONS. IF BOTH BLOCKS OF DATA ARE IN SWITCHABLE EBANKS, THEY MUST BE IN THE SAME ONE. 062973,000204: 062974,000205: # GENTRAN IS CALLABLE IN A JOB AS WELL AS A RUPT. THE CALLING SEQUENCE IS: 062975,000206: # I CA N-1 # NUMBER OF QUANTITIES MINUS ONE. 062976,000207: # I +1 TC GENTRAN # IN FIXED-FIXED. 062977,000208: # I +2 ADRES L # STARTING ADRES OF DATA TO BE MOVED. 062978,000209: # I +3 ADRES M # STARTING ADRES OF DUPLICATION BLOCK. 062979,000210: # I +4 # RETURNS HERE. 062980,000211: 062981,000212: # GENTRAN TAKES 25 MCT'S (300 MICROSECONDS) PER ITEM + 5 MCT'S (60 MICS) FOR ENTERING AND EXITING. 062982,000213: # A, L, AND ITEMP1 ARE NOT PRESERVED. 062983,000214: 062984,000215: 5475 BLOCK 02 062985,000216: 4000 SETLOC FFTAG4 062986,000217: 4000 BANK 062987,000218: 062988,000219: 5475 0061 EBANK= ITEMP1 062989,000220: 062990,000221: 5475 COUNT* $$/TRAN 062991,000222: 062992,000223: 5475 00004 GENTRAN INHINT 062993,000224: 5476 54061 TS ITEMP1 # SAVE N-1 062994,000225: 5477 50002 INDEX Q # C(Q) = ADRES L. 062995,000226: 5500 60000 AD 0 # ADRES (L + N - 1). 062996,000227: 5501 50000 INDEX A 062997,000228: 5502 30000 CA 0 # C(ABOVE). 062998,000229: 5503 54001 TS L # SAVE DATA. 062999,000230: 5504 30061 CA ITEMP1 063000,000231: 5505 50002 INDEX Q 063001,000232: 5506 60001 AD 1 # ADRES (M + N - 1). 063002,000233: 5507 50000 INDEX A 063003,000234: 5510 22000 LXCH 0 # STUFF IT. 063004,000235: 5511 10061 CCS ITEMP1 # LOOP UNTIL N-1 = 0. 063005,000236: 5512 15476 TCF GENTRAN +1 063006,000237: 5513 16710 TCF Q+2 # RETURN TO CALLER. 063007,000238: 063008,000239: # Page 1481 063009,000240: # B5OFF ZERO BIT 5 OF EXTVBACK, WHICH IS SET BY TESTXACT. 063010,000241: # MAY BE USED AS NEEDED BY ANY EXTENDED VERB WHICH HAS DONE TESTXACT 063011,000242: 063012,000243: 5514 COUNT* $$/EXTVB 063013,000244: 063014,000245: 5514 44706 B5OFF CS BIT5 063015,000246: 5515 71044 MASK EXTVBACT 063016,000247: 5516 55044 TS EXTVBACT 063017,000248: 5517 05112 TC ENDOFJOB 063018,000249: 063019,000250: # Page 1482 063020,000251: # SUBROUTINES TO TURNOFF AND TURN ON TRACKER FAIL LIGHT. 063021,000252: 063022,000253: 5520 00004 TRFAILOF INHINT 063023,000254: 5521 47704 CS OCT40200 # TURN OFF TRACKER LIGHT 063024,000255: 5522 71036 MASK DSPTAB +11D 063025,000256: 5523 64674 AD BIT15 063026,000257: 5524 55036 TS DSPTAB +11D 063027,000258: 5525 41331 CS OPTMODES # TO INSURE THAT OCDU FAIL WILL GO ON 063028,000259: 5526 74704 MASK BIT7 # AGAIN IF IT WAS ON IN ADDITION TO 063029,000260: 5527 27331 ADS OPTMODES # TRACKER FAIL. 063030,000261: 063031,000262: 5530 00003 REQ RELINT 063032,000263: 5531 00002 TC Q 063033,000264: 063034,000265: 5532 00004 TRFAILON INHINT 063035,000266: 5533 41036 CS DSPTAB +11D # TURN ON 063036,000267: 5534 77704 MASK OCT40200 063037,000268: 5535 27036 ADS DSPTAB +11D 063038,000269: 5536 15530 TCF REQ 063039,000270: 063040,000271: 063041,000272: 063042,000273: End of include-file SERVICE_ROUTINES.agc. Parent file is MAIN.agc