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