Source Code

056833,000001: # Copyright: Public domain. 056834,000002: # Filename: SERVICE_ROUTINES.agc 056835,000003: # Purpose: A section of Luminary 1C, revision 131. 056836,000004: # It is part of the source code for the Lunar Module's (LM) 056837,000005: # Apollo Guidance Computer (AGC) for Apollo 13 and Apollo 14. 056838,000006: # This file is intended to be a faithful transcription, except 056839,000007: # that the code format has been changed to conform to the 056840,000008: # requirements of the yaYUL assembler rather than the 056841,000009: # original YUL assembler. 056842,000010: # Reference: pp. 1371-1377 of 1729.pdf. 056843,000011: # Contact: Ron Burkey <info@sandroid.org>. 056844,000012: # Website: www.ibiblio.org/apollo/index.html 056845,000013: # Mod history: 06/06/03 RSB. Began transcribing. 056846,000014: # 05/14/05 RSB Corrected website references above. 056847,000015: 056848,000016: # Page 1371 056849,000017: 10,3545 BANK 10 056850,000018: 10,2000 SETLOC DISPLAYS 056851,000019: 10,2000 BANK 056852,000020: 10,3545 COUNT* $$/DSPLA 056853,000021: 056854,000022: 10,3545 00004 UPENT2 INHINT 056855,000023: 10,3546 75650 MASK OCT77770 056856,000024: 10,3547 54001 TS L 056857,000025: 10,3550 40100 CS FLAGWRD4 056858,000026: 10,3551 70001 MASK L 056859,000027: 10,3552 26100 ADS FLAGWRD4 056860,000028: 10,3553 00003 JOIN RELINT 056861,000029: 10,3554 16742 TCF Q+1 056862,000030: 056863,000031: 10,3555 00004 DOWNENT2 INHINT 056864,000032: 10,3556 75650 MASK OCT77770 056865,000033: 10,3557 40000 COM 056866,000034: 10,3560 70100 MASK FLAGWRD4 056867,000035: 10,3561 54100 TS FLAGWRD4 056868,000036: 10,3562 13553 TCF JOIN 056869,000037: 056870,000038: 10,3563 4757 OCT7 EQUALS SEVEN 056871,000039: 056872,000040: # Page 1372 056873,000041: # UPFLAG AND DOWNFLAG ARE ENTIRELY GENERAL FLAG SETTING AND CLEARING SUBROUTINES. USING THEM, WHETHER OR 056874,000042: # NOT IN INTERRUPT, ONE MAY SET OR CLEAR ANY SINGLE, NAMED BIT IN ANY ERASABLE REGISTER, SUBJECT OF COURSE TO 056875,000043: # EBANK SETTING. A "NAMED" BIT, AS THE WORD IS USED HERE, IS ANY BIT WITH A NAME FORMALLY ASSIGNED BY THE YUL 056876,000044: # ASSEMBLER. 056877,000045: 056878,000046: # AT PRESENT THE ONLY NAMED BITS ARE THOSE IN THE FLAGWORDS. ASSEMBLER CHANGES WILL MAKE IT POSSIBLE TO 056879,000047: # NAME ANY BIT IN ERASABLE MEMORY. 056880,000048: 056881,000049: # CALLING SEQUENCES ARE AS FOLLOWS -- 056882,000050: # TC UPFLAG TC DOWNFLAG 056883,000051: # ADRES NAME OF FLAG ADRES NAME OF FLAG 056884,000052: 056885,000053: # RETURN IS TO THE LOCATION FOLLOWING THE "ADRES" ABOUT .58 MS AFTER THE "TC". 056886,000054: # UPON RETURN A CONTAINS THE CURRENT FLAGWRD SETTING. 056887,000055: 056888,000056: 5504 BLOCK 02 056889,000057: 4000 SETLOC FFTAG1 056890,000058: 4000 BANK 056891,000059: 5504 COUNT* $$/FLAG 056892,000060: 056893,000061: 5504 30002 UPFLAG CA Q 056894,000062: 5505 05522 TC DEBIT 056895,000063: 5506 40000 COM # +(15 - BIT) 056896,000064: 5507 00006 EXTEND 056897,000065: 5510 04001 ROR LCHAN # SET BIT 056898,000066: 5511 50061 COMFLAG INDEX ITEMP1 056899,000067: 5512 54074 TS FLAGWRD0 056900,000068: 5513 22063 LXCH ITEMP3 056901,000069: 5514 00003 RELINT 056902,000070: 5515 00001 TC L 056903,000071: 056904,000072: 5516 30002 DOWNFLAG CA Q 056905,000073: 5517 05522 TC DEBIT 056906,000074: 5520 70001 MASK L # RESET BIT 056907,000075: 5521 15511 TCF COMFLAG 056908,000076: 056909,000077: 5522 64753 DEBIT AD ONE # CET DE BITS 056910,000078: 5523 00004 INHINT 056911,000079: 5524 54063 TS ITEMP3 056912,000080: 5525 34762 CA LOW4 # DEC15 056913,000081: 5526 54061 TS ITEMP1 056914,000082: 5527 50063 INDEX ITEMP3 056915,000083: 5530 27777 CA 0 -1 # ADRES 056916,000084: 5531 54001 TS L 056917,000085: 5532 34755 CA ZERO 056918,000086: # Page 1373 056919,000087: 5533 00006 EXTEND 056920,000088: 5534 10061 DV ITEMP1 # A = FLAGWRD, L = (15 - BIT) 056921,000089: 5535 52062 DXCH ITEMP1 056922,000090: 5536 50061 INDEX ITEMP1 056923,000091: 5537 30074 CA FLAGWRD0 056924,000092: 5540 54001 TS L # CURRENT STATE 056925,000093: 5541 50062 INDEX ITEMP2 056926,000094: 5542 44735 CS BIT15 # -(15 - BIT) 056927,000095: 5543 00002 TC Q 056928,000096: 056929,000097: # Page 1374 056930,000098: # DELAYJOB -- A GENERAL ROUTINE TO DELAY A JOB A SPECIFIC AMOUNT OF TIME BEFORE PICKING UP AGAIN. 056931,000099: 056932,000100: # ENTRANCE REQUIREMENTS ... 056933,000101: # CAF DT # DELAY JOB FOR DT CENTISECS 056934,000102: # TC BANKCALL 056935,000103: # CADR DELAYJOB 056936,000104: 056937,000105: 06,3772 BANK 06 056938,000106: 00,2000 SETLOC DLAYJOB 056939,000107: 00,2000 BANK 056940,000108: 056941,000109: # THIS MUST REMAIN IN BANK 0 **************************************** 056942,000110: 056943,000111: 00,3735 COUNT* $$/DELAY 056944,000112: 00,3735 35000 2SECDELY CAF 2SECS 056945,000113: 00,3736 00004 DELAYJOB INHINT 056946,000114: 00,3737 54002 TS Q # STORE DELAY DT IN Q FOR DLY -1 IN 056947,000115: 00,3740 34752 CAF DELAYNUM # WAITLIST 056948,000116: 00,3741 54070 DELLOOP TS RUPTREG1 056949,000117: 00,3742 50000 INDEX A 056950,000118: 00,3743 31323 CA DELAYLOC # IS THIS DELAYLOC AVAILABLE 056951,000119: 00,3744 00006 EXTEND 056952,000120: 00,3745 13753 BZF OK2DELAY # YES 056953,000121: 056954,000122: 00,3746 10070 CCS RUPTREG1 # NO, TRY NEXT DELAYLOC 056955,000123: 00,3747 13741 TCF DELLOOP 056956,000124: 056957,000125: 00,3750 52134 DXCH BUF2 056958,000126: 00,3751 05706 TC BAILOUT1 # NO AVAILABLE LOCS. 056959,000127: 00,3752 31104 OCT 31104 056960,000128: 056961,000129: 00,3753 33773 OK2DELAY CA TCSLEEP # SET WAITLIST IMMEDIATE RETURN 056962,000130: 00,3754 54061 TS WAITEXIT 056963,000131: 056964,000132: 00,3755 30004 CA FBANK 056965,000133: 00,3756 60070 AD RUPTREG1 # STORE BBANK FOR TASK CALL 056966,000134: 00,3757 54001 TS L 056967,000135: 056968,000136: 00,3760 33774 CAF WAKECAD # STORE CADR FOR TASK CALL 056969,000137: 00,3761 15211 TCF DLY2 -1 # DLY IS IN WAITLIST ROUTINE 056970,000138: 056971,000139: 00,3762 04645 TCGETCAD TC MAKECADR # GET CALLER'S FCADR 056972,000140: 056973,000141: 00,3763 50070 INDEX RUPTREG1 056974,000142: 00,3764 55323 TS DELAYLOC # SAVE DELAY CADRS 056975,000143: 056976,000144: 00,3765 05133 TC JOBSLEEP 056977,000145: 056978,000146: 00,3766 34755 WAKER CAF ZERO 056979,000147: 00,3767 50006 INDEX BBANK 056980,000148: # Page 1375 056981,000149: 00,3770 57323 XCH DELAYLOC # MAKE DELAYLOC AVAILABLE 056982,000150: 00,3771 05137 TC JOBWAKE 056983,000151: 056984,000152: 00,3772 05261 TC TASKOVER 056985,000153: 056986,000154: 00,3773 03760 TCSLEEP GENADR TCGETCAD -2 056987,000155: 00,3774 03766 WAKECAD GENADR WAKER 056988,000156: 056989,000157: # Page 1376 056990,000158: # GENTRAN, A BLOCK TRANSFER ROUTINE 056991,000159: # WRITTEN BY D. EYLES 056992,000160: # MOD 1 BY KERNAN UTILITYM REV 17 11/18/67 056993,000161: # MOD 2 BY SCHULENBERG -- (REMOVE RELINT) -- SKIPPER REV 4 2/28/68 056994,000162: 056995,000163: # THIS ROUTINE IS USEFUL FOR TRANSFERRING N CONSECUTIVE ERASABLE OR FIXED QUANTITIES TO SOME OTHER N 056996,000164: # CONSECUTIVE ERASABLE LOCATIONS. IF BOTH BLOCKS OF DATA ARE IN SWITCHABLE EBANKS, THEY MUST BE IN THE SAME ONE. 056997,000165: 056998,000166: # GENTRAN IS CALLABLE IN A JOB AS WELL AS A RUPT. THE CALLING SEQUENCE IS: 056999,000167: # I CA N-1 # NUMBER OF QUANTITIES MINUS ONE. 057000,000168: # I +1 TC GENTRAN # IN FIXED-FIXED. 057001,000169: # I +2 ADRES L # STARTING ADRES OF DATA TO BE MOVED. 057002,000170: # I +3 ADRES M # STARTING ADRES OF DUPLICATION BLOCK. 057003,000171: # I +4 # RETURNS HERE. 057004,000172: 057005,000173: # GENTRAN TAKES 25 MCT'S (300 MICROSECONDS) PER ITEM + 5 MCT'S (60 MICS) FOR ENTERING AND EXITING. 057006,000174: # A, L, AND ITEMP1 ARE NOT PRESERVED. 057007,000175: 057008,000176: 5544 BLOCK 02 057009,000177: 4000 SETLOC FFTAG4 057010,000178: 4000 BANK 057011,000179: 057012,000180: 5544 0061 EBANK= ITEMP1 057013,000181: 057014,000182: 5544 COUNT* $$/TRAN 057015,000183: 057016,000184: 5544 00004 GENTRAN INHINT 057017,000185: 5545 54061 TS ITEMP1 # SAVE N-1 057018,000186: 5546 50002 INDEX Q # C(Q) = ADRES L. 057019,000187: 5547 60000 AD 0 # ADRES (L + N - 1). 057020,000188: 5550 50000 INDEX A 057021,000189: 5551 30000 CA 0 # C(ABOVE). 057022,000190: 5552 54001 TS L # SAVE DATA. 057023,000191: 5553 30061 CA ITEMP1 057024,000192: 5554 50002 INDEX Q 057025,000193: 5555 60001 AD 1 # ADRES (M + N - 1). 057026,000194: 5556 50000 INDEX A 057027,000195: 5557 22000 LXCH 0 # STUFF IT. 057028,000196: 5560 10061 CCS ITEMP1 # LOOP UNTIL N-1 = 0. 057029,000197: 5561 15545 TCF GENTRAN +1 057030,000198: 5562 16744 TCF Q+2 # RETURN TO CALLER. 057031,000199: 057032,000200: # Page 1377 057033,000201: # B5OFF ZERO BIT 5 OF EXTVBACK, WHICH IS SET BY TESTXACT. 057034,000202: # MAY BE USED AS NEEDED BY ANY EXTENDED VERB WHICH HAS DONE TESTXACT 057035,000203: 057036,000204: 5563 COUNT* $$/EXTVB 057037,000205: 057038,000206: 5563 44747 B5OFF CS BIT5 057039,000207: 5564 71043 MASK EXTVBACT 057040,000208: 5565 55043 TS EXTVBACT 057041,000209: 5566 05155 TC ENDOFJOB 057042,000210: 057043,000211: 057044,000212: End of include-file SERVICE_ROUTINES.agc. Parent file is MAIN.agc