Source Code

041996,000001: # Copyright: Public domain. 041997,000002: # Filename: INTER-BANK_COMMUNICATION.agc 041998,000003: # Purpose: A section of Luminary 1C, revision 131. 041999,000004: # It is part of the source code for the Lunar Module's (LM) 042000,000005: # Apollo Guidance Computer (AGC) for Apollo 13 and Apollo 14. 042001,000006: # This file is intended to be a faithful transcription, except 042002,000007: # that the code format has been changed to conform to the 042003,000008: # requirements of the yaYUL assembler rather than the 042004,000009: # original YUL assembler. 042005,000010: # Reference: pp. 997-1000 of 1729.pdf. 042006,000011: # Contact: Ron Burkey <info@sandroid.org>. 042007,000012: # Website: www.ibiblio.org/apollo/index.html 042008,000013: # Mod history: 05/30/03 RSB. Began transcribing. 042009,000014: # 05/14/05 RSB Corrected website reference above. 042010,000015: # 2011-05-07 JL Removed workaround. 042011,000016: 042012,000017: # Page 997 042013,000018: # THE FOLLOWING ROUTINE CAN BE USED TO CALL A SUBROUTINE IN ANOTHER BANK. IN THE BANKCALL VERSION, THE 042014,000019: # CADR OF THE SUBROUTINE IMMEDIATELY FOLLOWS THE TC BANKCALL INSTRUCTION, WITH C(A) AND C(L) PRESERVED. 042015,000020: 042016,000021: 4616 BLOCK 02 042017,000022: 4616 COUNT* $$/BANK 042018,000023: 4616 52134 BANKCALL DXCH BUF2 # SAVE INCOMING A,L. 042019,000024: 4617 50002 INDEX Q # PICK UP CADR. 042020,000025: 4620 30000 CA 0 042021,000026: 4621 24002 INCR Q # SO WE RETURN TO THE LOC. AFTER THE CADR. 042022,000027: 042023,000028: # SWCALL IS IDENTICAL TO BANKCALL, EXCEPT THAT THE CADR ARRIVES IN A. 042024,000029: 042025,000030: 4622 54001 SWCALL TS L 042026,000031: 4623 22004 LXCH FBANK # SWITCH BANKS, SAVING RETURN. 042027,000032: 4624 75012 MASK LOW10 # GET SUB-ADDRESS OF CADR. 042028,000033: 4625 56002 XCH Q # A,L NOW CONTAINS DP RETURN. 042029,000034: 4626 52134 DXCH BUF2 # RESTORING INPUTS IF THIS IS A BANKCALL. 042030,000035: 4627 50002 INDEX Q 042031,000036: 4630 02000 TC 10000 042032,000037: 042033,000038: 4631 56134 SWRETURN XCH BUF2 +1 # COMES HERE TO RETURN TO CALLER. C(A,L) 042034,000039: 4632 56004 XCH FBANK # ARE PRESERVED FOR RETURN. 042035,000040: 4633 56134 XCH BUF2 +1 042036,000041: 4634 00133 TC BUF2 042037,000042: 042038,000043: # THE FOLLOWING ROUTINE CAN BE USED AS A UNILATERAL JUMP WITH C(A,L) PRESERVED AND THE CADR IMMEDIATELY 042039,000044: # FOLLOWING THE TC POSTJUMP INSTRUCTION. 042040,000045: 042041,000046: 4635 56002 POSTJUMP XCH Q # SAVE INCOMING C(A). 042042,000047: 4636 50000 INDEX A # GET CADR. 042043,000048: 4637 30000 CA 0 042044,000049: 042045,000050: # BANKJUMP IS THE SAME AS POSTJUMP, EXCEPT THAT THE CADR ARRIVES IN A. 042046,000051: 042047,000052: 4640 54004 BANKJUMP TS FBANK 042048,000053: 4641 75012 MASK LOW10 042049,000054: 4642 56002 XCH Q # RESTORING INPUT C(A) IF THIS WAS A 042050,000055: 4643 50002 Q+10000 INDEX Q # POSTJUMP. 042051,000056: 4644 12000 PRIO12 TCF 10000 # PRIO12 = TCF 10000 = 12000 042052,000057: 042053,000058: # Page 998 042054,000059: # THE FOLLOWING ROUTINE GETS THE RETURN CADR SAVED BY SWCALL OR BANKCALL AND LEAVES IT IN A. 042055,000060: 042056,000061: 4645 35012 MAKECADR CAF LOW10 042057,000062: 4646 70133 MASK BUF2 042058,000063: 4647 60134 AD BUF2 +1 042059,000064: 4650 00002 TC Q 042060,000065: 042061,000066: 4651 54135 SUPDACAL TS MPTEMP 042062,000067: 4652 56004 XCH FBANK # SET FBANK FOR DATA. 042063,000068: 4653 00006 EXTEND 042064,000069: 4654 04007 ROR SUPERBNK # SAVE FBANK IN BITS 15-11, AND 042065,000070: 4655 56135 XCH MPTEMP # SUPERBANK IN BITS 7-5. 042066,000071: 4656 75012 MASK LOW10 042067,000072: 4657 56001 XCH L # SAVE REL. ADR. IN BANK, FETCH SUPERBITS 042068,000073: 4660 00004 INHINT # BECAUSE RUPT DOES NOT SAVE SUPERBANK. 042069,000074: 4661 00006 EXTEND 042070,000075: 4662 01007 WRITE SUPERBNK # SET SUPERBANK FOR DATA. 042071,000076: 4663 50001 INDEX L 042072,000077: 4664 32000 CA 10000 # PINBALL (FIX MEM DISP) PREVENTS DCA HERE 042073,000078: 4665 56135 XCH MPTEMP # SAVE 1ST WD, FETCH OLD FBANK AND SBANK. 042074,000079: 4666 00006 EXTEND 042075,000080: 4667 01007 WRITE SUPERBNK # RESTORE SUPERBANK. 042076,000081: 4670 00003 RELINT 042077,000082: 4671 54004 TS FBANK # RESTORE FBANK. 042078,000083: 4672 30135 CA MPTEMP # RECOVER FIRST WORD OF DATA. 042079,000084: 4673 00002 RETURN # 24 WDS. DATACALL 516 MU, SUPDACAL 432 MU 042080,000085: 042081,000086: # Page 999 042082,000087: # THE FOLLOWING ROUTINES ARE IDENTICAL TO BANKCALL AND SWCALL EXCEPT THAT THEY ARE USED IN INTERRUPT. 042083,000088: 042084,000089: 4674 52073 IBNKCALL DXCH RUPTREG3 # USES RUPTREG3,4 FOR DP RETURN ADDRESS. 042085,000090: 4675 50002 INDEX Q 042086,000091: 4676 30000 CAF 0 042087,000092: 4677 24002 INCR Q 042088,000093: 042089,000094: 4700 54001 ISWCALLL TS L 042090,000095: 4701 22004 LXCH FBANK 042091,000096: 4702 75012 MASK LOW10 042092,000097: 4703 56002 XCH Q 042093,000098: 4704 52073 DXCH RUPTREG3 042094,000099: 4705 50002 INDEX Q 042095,000100: 4706 02000 TC 10000 042096,000101: 042097,000102: 4707 56073 ISWRETRN XCH RUPTREG4 042098,000103: 4710 56004 XCH FBANK 042099,000104: 4711 56073 XCH RUPTREG4 042100,000105: 4712 00072 TC RUPTREG3 042101,000106: 042102,000107: # 2. USPRCADR ACCESSES INTERPRETIVE CODING IN OTHER THAN THE USER'S FBANK. THE CALLING SEQUENCE IS AS FOLLOWS: 042103,000108: # L TC USPRCADR 042104,000109: # L+1 CADR INTPRETX # INTPRETX IS THE INTERPRETIVE CODING 042105,000110: # # RETURN IS TO L+2 042106,000111: 042107,000112: 4713 54164 USPRCADR TS LOC # SAVE A 042108,000113: 4714 34744 CA BIT8 042109,000114: 4715 54023 TS EDOP # EXIT INSTRUCTION TO EDOP 042110,000115: 4716 30006 CA BBANK 042111,000116: 4717 54165 TS BANKSET # USER'S BBANK TO BANKSET 042112,000117: 4720 50002 INDEX Q 042113,000118: 4721 30000 CA 0 042114,000119: 4722 54004 TS FBANK # INTERPRETIVE BANK TO FBANK 042115,000120: 4723 75012 MASK LOW10 # YIELDS INTERPRETIVE RELATIVE ADDRESS 042116,000121: 4724 56002 XCH Q # INTERPRETIVE ADDRESS TO Q, FETCHING L+1 042117,000122: 4725 56164 XCH LOC # L+1 TO LOC, RETRIEVING ORIGINAL A 042118,000123: 4726 14643 TCF Q+10000 042119,000124: 042120,000125: # Page 1000 042121,000126: # THERE ARE FOUR POSSIBLE SETTINGS FOR CHANNEL 07. (CHANNEL 07 CONTAINS SUPERBANK SETTING.) 042122,000127: 042123,000128: # PSEUDO-FIXED OCTAL PSEUDO 042124,000129: # SUPERBANK SETTING S-REG. VALUE BANK NUMBERS ADDRESSES 042125,000130: # --------- ------- ------------ ------------ --------- 042126,000131: # SUPERBANK 3 OXX 2000 - 3777 30 - 37 70000 - 107777 (WHERE XX CAN BE ANYTHING AND 042127,000132: # WILL USUALLY BE SEEN AS 11) 042128,000133: # SUPERBANK 4 100 2000 - 3777 40 - 47 110000 - 127777 (AS FAR AS IT CAN BE SEEN, 042129,000134: # ONLY BANKS 40-43 WILL EVER BE 042130,000135: # AND ARE PRESENTLY AVAILABLE) 042131,000136: # SUPERBANK 5 101 2000 - 3777 50 - 57 130000 - 147777 (PRESENTLY NOT AVAILABLE TO 042132,000137: # THE USER) 042133,000138: # SUPERBANK 6 110 2000 - 3777 60 - 67 150000 - 167777 (PRESENTLY NOT AVAILABLE TO 042134,000139: # THE USER) 042135,000140: # *** THIS ROUTINE MAY BE CALLED BY ANY PROGRAM LOCATED IN BANKS 00 - 27. I.E., NO PROGRAM LIVING IN ANY 042136,000141: # SUPERBANK SHOULD USE SUPERSW. *** 042137,000142: 042138,000143: # SUPERSW MAY BE CALLED IN THIS FASHION: 042139,000144: # CAF ABBCON WHERE -- ABBCON BBCON SOMETHING -- 042140,000145: # TCR SUPERSW (THE SUPERBNK BITS ARE IN THE BBCON) 042141,000146: # ... ... 042142,000147: # . . 042143,000148: # . . 042144,000149: # OR IN THIS FASHION: 042145,000150: # CAF SUPERSET WHERE SUPERSET IS ONE OF THE FOUR AVAILABLE 042146,000151: # TCR SUPERSW SUPERBANK BIT CONSTANTS: 042147,000152: # ... ... SUPER011 OCTAL 60 042148,000153: # . . SUPER100 OCTAL 100 042149,000154: # . . SUPER101 OCTAL 120 042150,000155: # SUPER110 OCTAL 140 042151,000156: 042152,000157: 4727 00006 SUPERSW EXTEND 042153,000158: 4730 01007 WRITE SUPERBNK # WRITE BITS 7-6-5 OF THE ACCUMULATOR INTO 042154,000159: # CHANNEL 07 042155,000160: 4731 00002 TC Q # TC TO INSTRUCTION FOLLOWING 042156,000161: # TC SUPERSW 042157,000162: End of include-file INTER-BANK_COMMUNICATION.agc. Parent file is MAIN.agc