Source Code
048678,000001: # Copyright: Public domain.
048679,000002: # Filename: INTER-BANK_COMMUNICATION.agc
048680,000003: # Purpose: Part of the source code for Comanche, build 055. It
048681,000004: # is part of the source code for the Command Module's
048682,000005: # (CM) Apollo Guidance Computer (AGC), Apollo 11.
048683,000006: # Assembler: yaYUL
048684,000007: # Reference: pp. 1103-1106
048685,000008: # Contact: Ron Burkey <info@sandroid.org>
048686,000009: # Website: http://www.ibiblio.org/apollo.
048687,000010: # Mod history: 2009-05-08 RSB Adapted from Colossus249/ file of same name
048688,000011: # and page images. Corrected various typos
048689,000012: # in the transcription of program comments,
048690,000013: # and these should be back-ported to
048691,000014: # Colossus249.
048692,000015: # 2011-05-08 JL Removed workaround.
048693,000016:
048694,000017: # The contents of the "Comanche055" files, in general, are transcribed
048695,000018: # from scanned documents.
048696,000019:
048697,000020: # Assemble revision 055 of AGC program Comanche by NASA
048698,000021: # 2021113-051. April 1, 1969.
048699,000022:
048700,000023: # This AGC program shall also be referred to as Colossus 2A
048701,000024:
048702,000025: # Prepared by
048703,000026: # Massachusetts Institute of Technology
048704,000027: # 75 Cambridge Parkway
048705,000028: # Cambridge, Massachusetts
048706,000029:
048707,000030: # under NASA contract NAS 9-4065.
048708,000031:
048709,000032: # Refer directly to the online document mentioned above for further
048710,000033: # information. Please report any errors to info@sandroid.org.
048711,000034:
048712,000035: # Page 1103
048713,000036: # THE FOLLOWING ROUTINE CAN BE USED TO CALL A SUBROUTINE IN ANOTHER BANK. IN THE BANKCALL VERSION, THE
048714,000037: # CADR OF THE SUBROUTINE IMMEDIATELY FOLLOWS THE TC BANKCALL INSTRUCTION, WITH C(A) AND C(L) PRESERVED.
048715,000038:
048716,000039: 4662 BLOCK 02
048717,000040: 4662 COUNT 02/BANK
048718,000041:
048719,000042: 4662 52134 BANKCALL DXCH BUF2 # SAVE INCOMING A,L.
048720,000043: 4663 50002 INDEX Q # PICK UP CADR.
048721,000044: 4664 30000 CA 0
048722,000045: 4665 24002 INCR Q # SO WE RETURN TO THE LOC. AFTER THE CADR.
048723,000046:
048724,000047: # SWCALL IS IDENTICAL TO BANKCALL, EXCEPT THAT THE CADR ARRIVES IN A.
048725,000048:
048726,000049: 4666 54001 SWCALL TS L
048727,000050: 4667 22004 LXCH FBANK # SWITCH BANKS, SAVING RETURN.
048728,000051: 4670 75054 MASK LOW10 # GET SUB-ADDRESS OF CADR.
048729,000052: 4671 56002 XCH Q # A,L NOW CONTAINS DP RETURN.
048730,000053: 4672 52134 DXCH BUF2 # RESTORING INPUTS IF THIS IS A BANKCALL.
048731,000054: 4673 50002 INDEX Q
048732,000055: 4674 02000 TC 10000 # SETTING Q TO SWRETURN
048733,000056:
048734,000057: 4675 56134 SWRETURN XCH BUF2 +1 # COMES HERE TO RETURN TO CALLER. C(A,L)
048735,000058: 4676 56004 XCH FBANK # ARE PRESERVED FOR RETURN.
048736,000059: 4677 56134 XCH BUF2 +1
048737,000060: 4700 00133 TC BUF2
048738,000061:
048739,000062: # THE FOLLOWING ROUTINE CAN BE USED AS A UNILATERAL JUMP WITH C(A,L) PRESERVED AND THE CADR IMMEDIATELY
048740,000063: # FOLLOWING THE TC POSTJUMP INSTRUCTION.
048741,000064:
048742,000065: 4701 56002 POSTJUMP XCH Q # SAVE INCOMING C(A).
048743,000066: 4702 50000 INDEX A # GET CADR.
048744,000067: 4703 30000 CA 0
048745,000068:
048746,000069: # BANKJUMP IS THE SAME AS POSTJUMP, EXCEPT THAT THE CADR ARRIVES IN A.
048747,000070:
048748,000071: 4704 54004 BANKJUMP TS FBANK
048749,000072: 4705 75054 MASK LOW10
048750,000073: 4706 56002 XCH Q # RESTORING INPUT C(A) IF THIS WAS A
048751,000074: 4707 50002 Q+10000 INDEX Q # POSTJUMP.
048752,000075: 4710 12000 PRIO12 TCF 10000 # PRIO12 = TCF 10000 = 12000
048753,000076:
048754,000077: # Page 1104
048755,000078: # THE FOLLOWING ROUTINE GETS THE RETURN CADR SAVED BY SWCALL OR BANKCALL AND LEAVES IT IN A.
048756,000079:
048757,000080: 4711 35054 MAKECADR CAF LOW10
048758,000081: 4712 70133 MASK BUF2
048759,000082: 4713 60134 AD BUF2 +1
048760,000083: 4714 00002 TC Q
048761,000084:
048762,000085: 4715 54135 SUPDACAL TS MPTEMP
048763,000086: 4716 56004 XCH FBANK # SET FBANK FOR DATA.
048764,000087: 4717 00006 EXTEND
048765,000088: 4720 04007 ROR SUPERBNK # SAVE FBANK IN BITS 15-11, AND
048766,000089: 4721 56135 XCH MPTEMP # SUPERBANK IN BITS 7-5.
048767,000090: 4722 75054 MASK LOW10
048768,000091: 4723 56001 XCH L # SAVE REL. ADR. IN BANK, FETCH SUPERBITS
048769,000092: 4724 00004 INHINT # BECAUSE RUPT DOES NOT SAVE SUPERBANK.
048770,000093: 4725 00006 EXTEND
048771,000094: 4726 01007 WRITE SUPERBNK # SET SUPERBANK FOR DATA.
048772,000095: 4727 50001 INDEX L
048773,000096: 4730 32000 CA 10000 # PINBALL (FIX MEM DISP) PREVENTS DCA HERE
048774,000097: 4731 56135 XCH MPTEMP # SAVE 1ST WD, FETCH OLD FBANK AND SBANK.
048775,000098: 4732 00006 EXTEND
048776,000099: 4733 01007 WRITE SUPERBNK # RESTORE SUPERBANK.
048777,000100: 4734 00003 RELINT
048778,000101: 4735 54004 TS FBANK # RESTORE FBANK.
048779,000102: 4736 30135 CA MPTEMP # RECOVER FIRST WORD OF DATA.
048780,000103: 4737 00002 RETURN # 24 WDS. DATACALL 516 MU, SUPDACAL 432 MU
048781,000104:
048782,000105: # Page 1105
048783,000106: # THE FOLLOWING ROUTINES ARE IDENTICAL TO BANKCALL AND SWCALL EXCEPT THAT THEY ARE USED IN INTERRUPT.
048784,000107:
048785,000108: 4740 52073 IBNKCALL DXCH RUPTREG3 # USES RUPTREG3,4 FOR DP RETURN ADDRESS.
048786,000109: 4741 50002 INDEX Q
048787,000110: 4742 30000 CAF 0
048788,000111: 4743 24002 INCR Q
048789,000112:
048790,000113: 4744 54001 ISWCALL TS L
048791,000114: 4745 22004 LXCH FBANK
048792,000115: 4746 75054 MASK LOW10
048793,000116: 4747 56002 XCH Q
048794,000117: 4750 52073 DXCH RUPTREG3
048795,000118: 4751 50002 INDEX Q
048796,000119: 4752 02000 TC 10000
048797,000120:
048798,000121: 4753 56073 ISWRETRN XCH RUPTREG4
048799,000122: 4754 56004 XCH FBANK
048800,000123: 4755 56073 XCH RUPTREG4
048801,000124: 4756 00072 TC RUPTREG3
048802,000125:
048803,000126: # 2. USPRCADR ACCESSES INTERPRETIVE CODING IN OTHER THAN THE USER'S FBANK. THE CALLING SEQUENCE IS AS FOLLOWS:
048804,000127: # L TC USPRCADR
048805,000128: # L+1 CADR INTPRETX # INTPRETX IS THE INTERPRETIVE CODING
048806,000129: # # RETURN IS TO L+2
048807,000130:
048808,000131: 4757 54164 USPRCADR TS LOC # SAVE A
048809,000132: 4760 35010 CA BIT8
048810,000133: 4761 54023 TS EDOP # EXIT INSTRUCTION TO EDOP
048811,000134: 4762 30006 CA BBANK
048812,000135: 4763 54165 TS BANKSET # USER'S BBANK TO BANKSET
048813,000136: 4764 50002 INDEX Q
048814,000137: 4765 30000 CA 0
048815,000138: 4766 54004 TS FBANK # INTERPRETIVE BANK TO FBANK
048816,000139: 4767 75054 MASK LOW10 # YIELDS INTERPRETIVE RELATIVE ADDRESS
048817,000140: 4770 56002 XCH Q # INTERPRETIVE ADDRESS TO Q, FETCHING L+1
048818,000141: 4771 56164 XCH LOC # L+1 TO LOC, RETRIEVING ORIGINAL A
048819,000142: 4772 14707 TCF Q+10000
048820,000143:
048821,000144: # Page 1106
048822,000145: # THERE ARE FOUR POSSIBLE SETTINGS FOR CHANNEL 07. (CHANNEL 07 CONTAINS SUPERBANK SETTING.)
048823,000146:
048824,000147: # PSEUDO-FIXED OCTAL PSEUDO
048825,000148: # SUPERBANK SETTING S-REG. VALUE BANK NUMBERS ADDRESSES
048826,000149: # --------- ------- ------------ ------------ ---------
048827,000150: # SUPERBANK 3 OXX 2000 - 3777 30 - 37 70000 - 107777 (WHERE XX CAN BE ANYTHING AND
048828,000151: # WILL USUALLY BE SEEN AS 11)
048829,000152: # SUPERBANK 4 100 2000 - 3777 40 - 47 110000 - 127777 (AS FAR AS IT CAN BE SEEN,
048830,000153: # ONLY BANKS 40-43 WILL EVER BE
048831,000154: # AND ARE PRESENTLY AVAILABLE)
048832,000155: # SUPERBANK 5 101 2000 - 3777 50 - 57 130000 - 147777 (PRESENTLY NOT AVAILABLE TO
048833,000156: # THE USER)
048834,000157: # SUPERBANK 6 110 2000 - 3777 60 - 67 150000 - 167777 (PRESENTLY NOT AVAILABLE TO
048835,000158: # THE USER)
048836,000159: # *** THIS ROUTINE MAY BE CALLED BY ANY PROGRAM LOCATED IN BANKS 00 - 27. I.E., NO PROGRAM LIVING IN ANY
048837,000160: # SUPERBANK SHOULD USE SUPERSW. ***
048838,000161:
048839,000162: # SUPERSW MAY BE CALLED IN THIS FASHION:
048840,000163: # CAF ABBCON WHERE -- ABBCON BBCON SOMETHING --
048841,000164: # TCR SUPERSW (THE SUPERBNK BITS ARE IN THE BBCON)
048842,000165: # ... ...
048843,000166: # . .
048844,000167: # . .
048845,000168: # OR IN THIS FASHION:
048846,000169: # CAF SUPERSET WHERE SUPERSET IS ONE OF THE FOUR AVAILABLE
048847,000170: # TCR SUPERSW SUPERBANK BIT CONSTANTS:
048848,000171: # ... ... SUPER011 OCTAL 60
048849,000172: # . . SUPER100 OCTAL 100
048850,000173: # . . SUPER101 OCTAL 120
048851,000174: # SUPER110 OCTAL 140
048852,000175:
048853,000176: 4773 00006 SUPERSW EXTEND
048854,000177: 4774 01007 WRITE SUPERBNK # WRITE BITS 7-6-5 OF THE ACCUMULATOR INTO
048855,000178: # CHANNEL 07
048856,000179: 4775 00002 TC Q # TC TO INSTRUCTION FOLLOWING
048857,000180: # TC SUPERSW
048858,000181:
048859,000182:
048860,000183:
End of include-file INTER-BANK_COMMUNICATION.agc. Parent file is MAIN.agc