Source Code

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