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