Source Code

047277,000001: # Copyright: Public domain. 047278,000002: # Filename: INTER-BANK_COMMUNICATION.agc 047279,000003: # Purpose: Part of the source code for Colossus, build 249. 047280,000004: # It is part of the source code for the Command Module's (CM) 047281,000005: # Apollo Guidance Computer (AGC), possibly for Apollo 8 and 9. 047282,000006: # Assembler: yaYUL 047283,000007: # Reference: Starts on p. 1085 of 1701.pdf. 047284,000008: # Contact: Ron Burkey <info@sandroid.org>. 047285,000009: # Website: www.ibiblio.org/apollo. 047286,000010: # Mod history: 08/28/04 RSB. Adapted from corresponding Luminary 131 file. 047287,000011: 047288,000012: # The contents of the "Colossus249" files, in general, are transcribed 047289,000013: # from a scanned document obtained from MIT's website, 047290,000014: # http://hrst.mit.edu/hrs/apollo/public/archive/1701.pdf. Notations on this 047291,000015: # document read, in part: 047292,000016: 047293,000017: # Assemble revision 249 of AGC program Colossus by NASA 047294,000018: # 2021111-041. October 28, 1968. 047295,000019: 047296,000020: # This AGC program shall also be referred to as 047297,000021: # Colossus 1A 047298,000022: 047299,000023: # Prepared by 047300,000024: # Massachussets Institute of Technology 047301,000025: # 75 Cambridge Parkway 047302,000026: # Cambridge, Massachusetts 047303,000027: # under NASA contract NAS 9-4065. 047304,000028: 047305,000029: # Refer directly to the online document mentioned above for further information. 047306,000030: # Please report any errors (relative to 1701.pdf) to info@sandroid.org. 047307,000031: 047308,000032: # In some cases, where the source code for Luminary 131 overlaps that of 047309,000033: # Colossus 249, this code is instead copied from the corresponding Luminary 131 047310,000034: # source file, and then is proofed to incorporate any changes. 047311,000035: 047312,000036: # Page 1085 047313,000037: # THE FOLLOWING ROUTINE CAN BE USED TO CALL A SUBROUTINE IN ANOTHER BANK. IN THE BANKCALL VERSION, THE 047314,000038: # CADR OF THE SUBROUTINE IMMEDIATELY FOLLOWS THE TC BANKCALL INSTRUCTION, WITH C(A) AND C(L) PRESERVED. 047315,000039: 047316,000040: 4555 BLOCK 02 047317,000041: 4555 COUNT 02/BANK 047318,000042: 047319,000043: 4555 52134 BANKCALL DXCH BUF2 # SAVE INCOMING A,L. 047320,000044: 4556 50002 INDEX Q # PICK UP CADR. 047321,000045: 4557 30000 CA 0 047322,000046: 4560 24002 INCR Q # SO WE RETURN TO THE LOC. AFTER THE CADR. 047323,000047: 047324,000048: # SWCALL IS IDENTICAL TO BANKCALL, EXCEPT THAT THE CADR ARRIVES IN A. 047325,000049: 047326,000050: 4561 54001 SWCALL TS L 047327,000051: 4562 22004 LXCH FBANK # SWITCH BANKS, SAVING RETURN. 047328,000052: 4563 74747 MASK LOW10 # GET SUB-ADDRESS OF CADR. 047329,000053: 4564 56002 XCH Q # A,L NOW CONTAINS DP RETURN. 047330,000054: 4565 52134 DXCH BUF2 # RESTORING INPUTS IF THIS IS A BANKCALL. 047331,000055: 4566 50002 INDEX Q 047332,000056: 4567 02000 TC 10000 047333,000057: 047334,000058: 4570 56134 SWRETURN XCH BUF2 +1 # COMES HERE TO RETURN TO CALLER. C(A,L) 047335,000059: 4571 56004 XCH FBANK # ARE PRESERVED FOR RETURN. 047336,000060: 4572 56134 XCH BUF2 +1 047337,000061: 4573 00133 TC BUF2 047338,000062: 047339,000063: # THE FOLLOWING ROUTINE CAN BE USED AS A UNILATERAL JUMP WITH C(A,L) PRESERVED AND THE CADR IMMEDIATELY 047340,000064: # FOLLOWING THE TC POSTJUMP INSTRUCTION. 047341,000065: 047342,000066: 4574 56002 POSTJUMP XCH Q # SAVE INCOMING C(A). 047343,000067: 4575 50000 INDEX A # GET CADR. 047344,000068: 4576 30000 CA 0 047345,000069: 047346,000070: # BANKJUMP IS THE SAME AS POSTJUMP, EXCEPT THAT THE CADR ARRIVES IN A. 047347,000071: 047348,000072: 4577 54004 BANKJUMP TS FBANK 047349,000073: 4600 74747 MASK LOW10 047350,000074: 4601 56002 XCH Q # RESTORING INPUT C(A) IF THIS WAS A 047351,000075: 4602 50002 Q+10000 INDEX Q # POSTJUMP. 047352,000076: 4603 12000 PRIO12 TCF 10000 # PRIO12 = TCF 10000 = 12000 047353,000077: 047354,000078: # Page 1086 047355,000079: # THE FOLLOWING ROUTINE GETS THE RETURN CADR SAVED BY SWCALL OR BANKCALL AND LEAVES IT IN A. 047356,000080: 047357,000081: 4604 34747 MAKECADR CAF LOW10 047358,000082: 4605 70133 MASK BUF2 047359,000083: 4606 60134 AD BUF2 +1 047360,000084: 4607 00002 TC Q 047361,000085: 047362,000086: 4610 54135 SUPDACAL TS MPTEMP 047363,000087: 4611 56004 XCH FBANK # SET FBANK FOR DATA. 047364,000088: 4612 00006 EXTEND 047365,000089: 4613 04007 ROR SUPERBNK # SAVE FBANK IN BITS 15-11, AND 047366,000090: 4614 56135 XCH MPTEMP # SUPERBANK IN BITS 7-5. 047367,000091: 4615 74747 MASK LOW10 047368,000092: 4616 56001 XCH L # SAVE REL. ADR. IN BANK, FETCH SUPERBITS 047369,000093: 4617 00004 INHINT # BECAUSE RUPT DOES NOT SAVE SUPERBANK. 047370,000094: 4620 00006 EXTEND 047371,000095: 4621 01007 WRITE SUPERBNK # SET SUPERBANK FOR DATA. 047372,000096: 4622 50001 INDEX L 047373,000097: 4623 32000 CA 10000 # PINBALL (FIX MEM DISP) PREVENTS DCA HERE 047374,000098: 4624 56135 XCH MPTEMP # SAVE 1ST WD, FETCH OLD FBANK AND SBANK. 047375,000099: 4625 00006 EXTEND 047376,000100: 4626 01007 WRITE SUPERBNK # RESTORE SUPERBANK. 047377,000101: 4627 00003 RELINT 047378,000102: 4630 54004 TS FBANK # RESTORE FBANK. 047379,000103: 4631 30135 CA MPTEMP # RECOVER FIRST WORD OF DATA. 047380,000104: 4632 00002 RETURN # 24 WDS. DATACALL 516 MU, SUPDACAL 432 MU 047381,000105: 047382,000106: # Page 1087 047383,000107: # THE FOLLOWING ROUTINES ARE IDENTICAL TO BANKCALL AND SWCALL EXCEPT THAT THEY ARE USED IN INTERRUPT. 047384,000108: 047385,000109: 4633 52073 IBNKCALL DXCH RUPTREG3 # USES RUPTREG3,4 FOR DP RETURN ADDRESS. 047386,000110: 4634 50002 INDEX Q 047387,000111: # Was CAF --- RSB 2004 047388,000112: 4635 30000 CA 0 047389,000113: 4636 24002 INCR Q 047390,000114: 047391,000115: 4637 54001 ISWCALL TS L 047392,000116: 4640 22004 LXCH FBANK 047393,000117: 4641 74747 MASK LOW10 047394,000118: 4642 56002 XCH Q 047395,000119: 4643 52073 DXCH RUPTREG3 047396,000120: 4644 50002 INDEX Q 047397,000121: 4645 02000 TC 10000 047398,000122: 047399,000123: 4646 56073 ISWRETRN XCH RUPTREG4 047400,000124: 4647 56004 XCH FBANK 047401,000125: 4650 56073 XCH RUPTREG4 047402,000126: 4651 00072 TC RUPTREG3 047403,000127: 047404,000128: # 2. USPRCADR ACCESSES INTERPRETIVE CODING IN OTHER THAN THE USER'S FBANK. THE CALLING SEQUENCE IS AS FOLLOWS: 047405,000129: # L TC USPRCADR 047406,000130: # L+1 CADR INTPRETX # INTPRETX IS THE INTERPRETIVE CODING 047407,000131: # # RETURN IS TO L+2 047408,000132: 047409,000133: 4652 54164 USPRCADR TS LOC # SAVE A 047410,000134: 4653 34703 CA BIT8 047411,000135: 4654 54023 TS EDOP # EXIT INSTRUCTION TO EDOP 047412,000136: 4655 30006 CA BBANK 047413,000137: 4656 54165 TS BANKSET # USER'S BBANK TO BANKSET 047414,000138: 4657 50002 INDEX Q 047415,000139: 4660 30000 CA 0 047416,000140: 4661 54004 TS FBANK # INTERPRETIVE BANK TO FBANK 047417,000141: 4662 74747 MASK LOW10 # YIELDS INTERPRETIVE RELATIVE ADDRESS 047418,000142: 4663 56002 XCH Q # INTERPRETIVE ADDRESS TO Q, FETCHING L+1 047419,000143: 4664 56164 XCH LOC # L+1 TO LOC, RETRIEVING ORIGINAL A 047420,000144: 4665 14602 TCF Q+10000 047421,000145: 047422,000146: # Page 1088 047423,000147: # THERE ARE FOUR POSSIBLE SETTINGS FOR CHANNEL 07. (CHANNEL 07 CONTAINS SUPERBANK SETTING.) 047424,000148: 047425,000149: # PSEUDO-FIXED OCTAL PSEUDO 047426,000150: # SUPERBANK SETTING S-REG. VALUE BANK NUMBERS ADDRESSES 047427,000151: # --------- ------- ------------ ------------ --------- 047428,000152: # SUPERBANK 3 OXX 2000 - 3777 30 - 37 70000 - 107777 (WHERE XX CAN BE ANYTHING AND 047429,000153: # WILL USUALLY BE SEEN AS 11) 047430,000154: # SUPERBANK 4 100 2000 - 3777 40 - 47 110000 - 127777 (AS FAR AS IT CAN BE SEEN, 047431,000155: # ONLY BANKS 40-43 WILL EVER BE 047432,000156: # AND ARE PRESENTLY AVAILABLE) 047433,000157: # SUPERBANK 5 101 2000 - 3777 50 - 57 130000 - 147777 (PRESENTLY NOT AVAILABLE TO 047434,000158: # THE USER) 047435,000159: # SUPERBANK 6 110 2000 - 3777 60 - 67 150000 - 167777 (PRESENTLY NOT AVAILABLE TO 047436,000160: # THE USER) 047437,000161: # *** THIS ROUTINE MAY BE CALLED BY ANY PROGRAM LOCATED IN BANKS 00 - 27. I.E., NO PROGRAM LIVING IN ANY 047438,000162: # SUPERBANK SHOULD USE SUPERSW. *** 047439,000163: 047440,000164: # SUPERSW MAY BE CALLED IN THIS FASHION: 047441,000165: # CAF ABBCON WHERE -- ABBCON BBCON SOMETHING -- 047442,000166: # TCR SUPERSW (THE SUPERBNK BITS ARE IN THE BBCON) 047443,000167: # ... ... 047444,000168: # . . 047445,000169: # . . 047446,000170: # OR IN THIS FASHION: 047447,000171: # CAF SUPERSET WHERE SUPERSET IS ONE OF THE FOUR AVAILABLE 047448,000172: # TCR SUPERSW SUPERBANK BIT CONSTANTS: 047449,000173: # ... ... SUPER011 OCTAL 60 047450,000174: # . . SUPER100 OCTAL 100 047451,000175: # . . SUPER101 OCTAL 120 047452,000176: # SUPER110 OCTAL 140 047453,000177: 047454,000178: 4666 00006 SUPERSW EXTEND 047455,000179: 4667 01007 WRITE SUPERBNK # WRITE BITS 7-6-5 OF THE ACCUMULATOR INTO 047456,000180: # CHANNEL 07 047457,000181: 4670 00002 TC Q # TC TO INSTRUCTION FOLLOWING 047458,000182: # TC SUPERSW 047459,000183: 047460,000184: 047461,000185: End of include-file INTER-BANK_COMMUNICATION.agc. Parent file is MAIN.agc