Source Code

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