Source Code

058458,000001: # Copyright: Public domain. 058459,000002: # Filename: SERVICE_ROUTINES.agc 058460,000003: # Purpose: Part of the source code for Luminary 1A build 099. 058461,000004: # It is part of the source code for the Lunar Module's (LM) 058462,000005: # Apollo Guidance Computer (AGC), for Apollo 11. 058463,000006: # Assembler: yaYUL 058464,000007: # Contact: Ron Burkey <info@sandroid.org>. 058465,000008: # Website: www.ibiblio.org/apollo. 058466,000009: # Pages: 1374-1380 058467,000010: # Mod history: 2009-05-10 SN (Sergio Navarro). Started adapting 058468,000011: # from the Luminary131/ file of the same 058469,000012: # name, using Luminary099 page images. 058470,000013: 058471,000014: # This source code has been transcribed or otherwise adapted from 058472,000015: # digitized images of a hardcopy from the MIT Museum. The digitization 058473,000016: # was performed by Paul Fjeld, and arranged for by Deborah Douglas of 058474,000017: # the Museum. Many thanks to both. The images (with suitable reduction 058475,000018: # in storage size and consequent reduction in image quality as well) are 058476,000019: # available online at www.ibiblio.org/apollo. If for some reason you 058477,000020: # find that the images are illegible, contact me at info@sandroid.org 058478,000021: # about getting access to the (much) higher-quality images which Paul 058479,000022: # actually created. 058480,000023: 058481,000024: # Notations on the hardcopy document read, in part: 058482,000025: 058483,000026: # Assemble revision 001 of AGC program LMY99 by NASA 2021112-61 058484,000027: # 16:27 JULY 14, 1969 058485,000028: 058486,000029: # Page 1374 058487,000030: 10,3544 BANK 10 058488,000031: 10,2000 SETLOC DISPLAYS 058489,000032: 10,2000 BANK 058490,000033: 10,3544 COUNT* $$/DSPLA 058491,000034: 058492,000035: 10,3544 00004 UPENT2 INHINT 058493,000036: 10,3545 75660 MASK OCT77770 058494,000037: 10,3546 54001 TS L 058495,000038: 10,3547 40100 CS FLAGWRD4 058496,000039: 10,3550 70001 MASK L 058497,000040: 10,3551 26100 ADS FLAGWRD4 058498,000041: 10,3552 00003 JOIN RELINT 058499,000042: 10,3553 16737 TCF Q+1 058500,000043: 058501,000044: 10,3554 00004 DOWNENT2 INHINT 058502,000045: 10,3555 75660 MASK OCT77770 058503,000046: 10,3556 40000 COM 058504,000047: 10,3557 70100 MASK FLAGWRD4 058505,000048: 10,3560 54100 TS FLAGWRD4 058506,000049: 10,3561 13552 TCF JOIN 058507,000050: 058508,000051: 10,3562 4757 OCT7 EQUALS SEVEN 058509,000052: 058510,000053: # Page 1375 058511,000054: # UPFLAG AND DOWNFLAG ARE ENTIRELY GENERAL FLAG SETTING AND CLEARING SUBROUTINES. USING THEM, WHETHER OR 058512,000055: # NOT IN INTERRUPT, ONE MAY SET OR CLEAR ANY SINGLE, NAMED BIT IN ANY ERASABLE REGISTER, SUBJECT OF COURSE TO 058513,000056: # EBANK SETTING. A "NAMED" BIT, AS THE WORD IS USED HERE, IS ANY BIT WITH A NAME FORMALLY ASSIGNED BY THE YUL 058514,000057: # ASSEMBLER. 058515,000058: 058516,000059: # AT PRESENT THE ONLY NAMED BITS ARE THOSE IN THE FLAGWORDS. ASSEMBLER CHANGES WILL MAKE IT POSSIBLE TO 058517,000060: # NAME ANY BIT IN ERASABLE MEMORY. 058518,000061: 058519,000062: # CALLING SEQUENCES ARE AS FOLLOWS :- 058520,000063: # TC UPFLAG TC DOWNFLAG 058521,000064: # ADRES NAME OF FLAG ADRES NAME OF FLAG 058522,000065: 058523,000066: # RETURN IS TO THE LOCATION FOLLOWING THE "ADRES" ABOUT .58 MS AFTER THE "TC". 058524,000067: # UPON RETURN A CONTAINS THE CURRENT FLAGWRD SETTING. 058525,000068: 058526,000069: 5504 BLOCK 02 058527,000070: 4000 SETLOC FFTAG1 058528,000071: 4000 BANK 058529,000072: 5504 COUNT* $$/FLAG 058530,000073: 058531,000074: 5504 30002 UPFLAG CA Q 058532,000075: 5505 05522 TC DEBIT 058533,000076: 5506 40000 COM # +(15 - BIT) 058534,000077: 5507 00006 EXTEND 058535,000078: 5510 04001 ROR LCHAN # SET BIT 058536,000079: 5511 50061 COMFLAG INDEX ITEMP1 058537,000080: 5512 54074 TS FLAGWRD0 058538,000081: 5513 22063 LXCH ITEMP3 058539,000082: 5514 00003 RELINT 058540,000083: 5515 00001 TC L 058541,000084: 058542,000085: 5516 30002 DOWNFLAG CA Q 058543,000086: 5517 05522 TC DEBIT 058544,000087: 5520 70001 MASK L # RESET BIT 058545,000088: 5521 15511 TCF COMFLAG 058546,000089: 058547,000090: 5522 64753 DEBIT AD ONE # CET DE BITS 058548,000091: 5523 00004 INHINT 058549,000092: 5524 54063 TS ITEMP3 058550,000093: 5525 34762 CA LOW4 # DEC15 058551,000094: 5526 54061 TS ITEMP1 058552,000095: 5527 50063 INDEX ITEMP3 058553,000096: 5530 27777 CA 0 -1 # ADRES 058554,000097: 5531 54001 TS L 058555,000098: 5532 34755 CA ZERO 058556,000099: # Page 1376 058557,000100: 5533 00006 EXTEND 058558,000101: 5534 10061 DV ITEMP1 # A = FLAGWRD, L = (15 - BIT) 058559,000102: 5535 52062 DXCH ITEMP1 058560,000103: 5536 50061 INDEX ITEMP1 058561,000104: 5537 30074 CA FLAGWRD0 058562,000105: 5540 54001 TS L # CURRENT STATE 058563,000106: 5541 50062 INDEX ITEMP2 058564,000107: 5542 44735 CS BIT15 # -(15 - BIT) 058565,000108: 5543 00002 TC Q 058566,000109: 058567,000110: # Page 1377 058568,000111: # DELAYJOB -- A GENERAL ROUTINE TO DELAY A JOB A SPECIFIC AMOUNT OF TIME BEFORE PICKING UP AGAIN. 058569,000112: 058570,000113: # ENTRANCE REQUIREMENTS ... 058571,000114: # CAF DT # DELAY JOB FOR DT CENTISECS 058572,000115: # TC BANKCALL 058573,000116: # CADR DELAYJOB 058574,000117: 058575,000118: 06,3764 BANK 06 058576,000119: 00,2000 SETLOC DLAYJOB 058577,000120: 00,2000 BANK 058578,000121: 058579,000122: # THIS MUST REMAIN IN BANK 0 **************************************** 058580,000123: 058581,000124: 00,3735 COUNT* $$/DELAY 058582,000125: 00,3735 00004 DELAYJOB INHINT 058583,000126: 00,3736 54002 TS Q # STORE DELAY DT IN Q FOR DLY -1 IN 058584,000127: 00,3737 34752 CAF DELAYNUM # WAITLIST 058585,000128: 00,3740 54070 DELLOOP TS RUPTREG1 058586,000129: 00,3741 50000 INDEX A 058587,000130: 00,3742 31326 CA DELAYLOC # IS THIS DELAYLOC AVAILABLE 058588,000131: 00,3743 00006 EXTEND 058589,000132: 00,3744 13752 BZF OK2DELAY # YES 058590,000133: 058591,000134: 00,3745 10070 CCS RUPTREG1 # NO, TRY NEXT DELAYLOC 058592,000135: 00,3746 13740 TCF DELLOOP 058593,000136: 058594,000137: 00,3747 52134 DXCH BUF2 058595,000138: 00,3750 05716 TC BAILOUT1 # NO AVAILABLE LOCS. 058596,000139: 00,3751 01104 OCT 1104 058597,000140: 058598,000141: 00,3752 33772 OK2DELAY CA TCSLEEP # SET WAITLIST IMMEDIATE RETURN 058599,000142: 00,3753 54061 TS WAITEXIT 058600,000143: 058601,000144: 00,3754 30004 CA FBANK 058602,000145: 00,3755 60070 AD RUPTREG1 # STORE BBANK FOR TASK CALL 058603,000146: 00,3756 54001 TS L 058604,000147: 058605,000148: 00,3757 33773 CAF WAKECAD # STORE CADR FOR TASK CALL 058606,000149: 00,3760 15211 TCF DLY2 -1 # DLY IS IN WAITLIST ROUTINE 058607,000150: 058608,000151: 00,3761 04645 TCGETCAD TC MAKECADR # GET CALLERS FCADR 058609,000152: 058610,000153: 00,3762 50070 INDEX RUPTREG1 058611,000154: 00,3763 55326 TS DELAYLOC # SAVE DELAY CADRS 058612,000155: 058613,000156: 00,3764 05133 TC JOBSLEEP 058614,000157: 058615,000158: 00,3765 34755 WAKER CAF ZERO 058616,000159: 00,3766 50006 INDEX BBANK 058617,000160: 00,3767 57326 XCH DELAYLOC # MAKE DELAYLOC AVAILABLE 058618,000161: # Page 1378 058619,000162: 00,3770 05137 TC JOBWAKE 058620,000163: 058621,000164: 00,3771 05261 TC TASKOVER 058622,000165: 058623,000166: 00,3772 03757 TCSLEEP GENADR TCGETCAD -2 058624,000167: 00,3773 03765 WAKECAD GENADR WAKER 058625,000168: 058626,000169: # Page 1379 058627,000170: # GENTRAN, A BLOCK TRANSFER ROUTINE 058628,000171: # WRITTEN BY D. EYLES 058629,000172: # MOD 1 BY KERNAN UTILITYM REV 17 11/18/67 058630,000173: # MOD 2 BY SCHULENBERG (REMOVE RELINT) SKIPPER REV 4 2/28/68 058631,000174: 058632,000175: # THIS ROUTINE IS USEFUL FOR TRANSFERING N CONSECUTIVE ERASABLE OR FIXED QUANTITIES TO SOME OTHER N 058633,000176: # CONSECUTIVE ERASABLE LOCATIONS. IF BOTH BLOCKS OF DATA ARE IN SWITCHABLE EBANKS, THEY MUST BE IN THE SAME ONE. 058634,000177: 058635,000178: # GENTRAN IS CALLABLE IN A JOB AS WELL AS A RUPT. THE CALLING SEQUENCE IS: 058636,000179: # I CA N-1 # # OF QUANTITIES MINUS ONE. 058637,000180: # I +1 TC GENTRAN # IN FIXED-FIXED. 058638,000181: # I +2 ADRES L # STARTING ADRES OF DATA TO BE MOVED. 058639,000182: # I +3 ADRES M # STARTING ADRES OF DUPLICATION BLOCK. 058640,000183: # I +4 # RETURNS HERE. 058641,000184: 058642,000185: # GENTRAN TAKES 25 MCT'S (300 MICROSECONDS) PER ITEM + 5 MCT'S (60 MICS) FOR ENTERING AND EXITING. 058643,000186: # A, L, AND ITEMP1 ARE NOT PRESERVED. 058644,000187: 058645,000188: 5544 BLOCK 02 058646,000189: 4000 SETLOC FFTAG4 058647,000190: 4000 BANK 058648,000191: 058649,000192: 5544 0061 EBANK= ITEMP1 058650,000193: 058651,000194: 5544 COUNT* $$/TRAN 058652,000195: 058653,000196: 5544 00004 GENTRAN INHINT 058654,000197: 5545 54061 TS ITEMP1 # SAVE N-1 058655,000198: 5546 50002 INDEX Q # C(Q) = ADRES L. 058656,000199: 5547 60000 AD 0 # ADRES (L + N - 1). 058657,000200: 5550 50000 INDEX A 058658,000201: 5551 30000 CA 0 # C(ABOVE). 058659,000202: 5552 54001 TS L # SAVE DATA. 058660,000203: 5553 30061 CA ITEMP1 058661,000204: 5554 50002 INDEX Q 058662,000205: 5555 60001 AD 1 # ADRES (M + N - 1). 058663,000206: 5556 50000 INDEX A 058664,000207: 5557 22000 LXCH 0 # STUFF IT. 058665,000208: 5560 10061 CCS ITEMP1 # LOOP UNTIL N-1 = 0. 058666,000209: 5561 15545 TCF GENTRAN +1 058667,000210: 5562 16741 TCF Q+2 # RETURN TO CALLER. 058668,000211: 058669,000212: # Page 1380 058670,000213: # B5OFF ZERO BIT 5 OF EXTVBACK, WHICH IS SET BY TESTXACT. 058671,000214: # MAY BE USED AS NEEDED BY ANY EXTENDED VERB WHICH HAS DONE TESTXACT 058672,000215: 058673,000216: 5563 COUNT* $$/EXTVB 058674,000217: 058675,000218: 5563 44747 B5OFF CS BIT5 058676,000219: 5564 71044 MASK EXTVBACT 058677,000220: 5565 55044 TS EXTVBACT 058678,000221: 5566 05155 TC ENDOFJOB 058679,000222: 058680,000223: 058681,000224: End of include-file SERVICE_ROUTINES.agc. Parent file is MAIN.agc