Source Code

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