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