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