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