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