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