Source Code
![]() |
These source-code files were obtained by digitally photographing
an Artemis 72 program listing from a private collection and then
modifying pre-existing Comanche 55 (Apollo 11) source files to
incorporate changes. Note that the page images
presented online are of reduced quality, and that additional images
may be available. Report any conversion errors or legibility
problems in page images to info@sandroid.org.
Notations on the program listing read, in part:GAP: ASSEMBLE REVISION 072 OF AGC PROGRAM ARTEMIS BY NASA 2021114-011 11:40 FEB. 26, 1971 THIS AGC PROGRAM SHALL ALSO BE REFERRED TO AS COLOSSUS 3 THIS PROGRAM IS INTENDED FOR USE IN THE CM AS SPECIFIED IN REPORT R-577. THIS PROGRAM WAS PREPARED UNDER OSR PROJECT 55-23890, SPONSORED BY THE MANNED SPACECRAFT CENTER OF THE NATIONAL AERONAUTICS AND SPACE ADMINISTRATION THROUGH CONTRACT NAS 9-4065 WITH THE CHARLES STARK DRAPER LABORATORY, MASSACHUSETTS INSTITUTE OF TECHNOLOGY, CAMBRIDGE, MASS. |
048024,000002: # Copyright: Public domain.
048025,000003: # Filename: INTER-BANK_COMMUNICATION.agc
048026,000004: # Purpose: Part of the source code for Artemis (i.e., Colossus 3),
048027,000005: # build 072. This is for the Command Module's (CM)
048028,000006: # Apollo Guidance Computer (AGC), we believe for
048029,000007: # Apollo 15-17.
048030,000008: # Assembler: yaYUL
048031,000009: # Contact: Jim Lawton <jim DOT lawton AT gmail DOT com>
048032,000010: # Website: www.ibiblio.org/apollo/index.html
048033,000011: # Page scans: www.ibiblio.org/apollo/ScansForConversion/Artemis072/
048034,000012: # Mod history: 2009-08-22 JL Adapted from corresponding Comanche 055 file.
048035,000013: # 2009-08-29 JL Merged changes from Sergio Navarro.
048036,000014: # 2010-02-20 RSB Un-##'d this header.
048037,000015: # 2011-05-07 JL Removed workaround.
048038,000016:
048039,000017: # # Page 1104
048040,000018:
048041,000019: # THE FOLLOWING ROUTINE CAN BE USED TO CALL A SUBROUTINE IN ANOTHER BANK. IN THE BANKCALL VERSION, THE
048042,000020: # CADR OF THE SUBROUTINE IMMEDIATELY FOLLOWS THE TC BANKCALL INSTRUCTION, WITH C(A) AND C(L) PRESERVED.
048043,000021:
048044,000022: 4000 SETLOC FFTAG1
048045,000023: 4000 BANK
048046,000024:
048047,000025: 4636 COUNT* $$/BANK
048048,000026: 4636 52134 BANKCALL DXCH BUF2 # SAVE INCOMING A,L.
048049,000027: 4637 50002 INDEX Q # PICK UP CADR.
048050,000028: 4640 30000 CA 0
048051,000029: 4641 24002 -1 INCR Q # SO WE RETURN TO THE LOC. AFTER THE CADR.
048052,000030:
048053,000031: # SWCALL IS IDENTICAL TO BANKCALL, EXCEPT THAT THE CADR ARRIVES IN A.
048054,000032:
048055,000033: 4642 54001 SWCALL TS L
048056,000034: 4643 22004 LXCH FBANK # SWITCH BANKS, SAVING RETURN.
048057,000035: 4644 75041 MASK LOW10 # GET SUB-ADDRESS OF CADR.
048058,000036: 4645 56002 XCH Q # A,L NOW CONTAINS DP RETURN.
048059,000037: 4646 52134 DXCH BUF2 # RESTORING INPUTS IF THIS IS A BANKCALL.
048060,000038: 4647 50002 INDEX Q
048061,000039: 4650 02000 TC 10000 # SETTING Q TO SWRETURN.
048062,000040:
048063,000041: 4651 56134 SWRETURN XCH BUF2 +1 # COMES HERE TO RETURN TO CALLER. C(A,L)
048064,000042: 4652 56004 XCH FBANK # ARE PRESERVED FOR RETURN.
048065,000043: 4653 56134 XCH BUF2 +1
048066,000044: 4654 00133 TC BUF2
048067,000045:
048068,000046: # THE FOLLOWING ROUTINE CAN BE USED AS A UNILATERAL JUMP WITH C(A,L) PRESERVED AND THE CADR IMMEDIATELY
048069,000047: # FOLLOWING THE TC POSTJUMP INSTRUCTION.
048070,000048:
048071,000049: 4655 56002 POSTJUMP XCH Q # SAVE INCOMING C(A).
048072,000050: 4656 50000 INDEX A # GET CADR.
048073,000051: 4657 30000 CA 0
048074,000052:
048075,000053: # BANKJUMP IS THE SAME AS POSTJUMP, EXCEPT THAT THE CADR ARRIVES IN A.
048076,000054:
048077,000055: 4660 54004 BANKJUMP TS FBANK
048078,000056: 4661 75041 MASK LOW10
048079,000057: 4662 56002 XCH Q # RESTORING INPUT C(A) IF THIS WAS A
048080,000058: 4663 50002 Q+10000 INDEX Q # POSTJUMP.
048081,000059: 4664 12000 PRIO12 TCF 10000 # PRIO12 = TCF 10000 = 12000
048082,000060:
048083,000061: # # Page 1105
048084,000062:
048085,000063: # THE FOLLOWING ROUTINE GETS THE RETURN CADR SAVED BY SWCALL OR BANKCALL AND LEAVES IT IN A.
048086,000064:
048087,000065: 4665 35041 MAKECADR CAF LOW10
048088,000066: 4666 70133 MASK BUF2
048089,000067: 4667 60134 AD BUF2 +1
048090,000068: 4670 00002 TC Q
048091,000069:
048092,000070: 4671 54135 SUPDACAL TS MPTEMP
048093,000071: 4672 56004 XCH FBANK # SET FBANK FOR DATA.
048094,000072: 4673 00006 EXTEND
048095,000073: 4674 04007 ROR SUPERBNK # SAVE FBANK IN BITS 15-11, AND
048096,000074: 4675 56135 XCH MPTEMP # SUPERBANK IN BITS 7-5.
048097,000075: 4676 75041 MASK LOW10
048098,000076: 4677 56001 XCH L # SAVE REL. ADR. IN BANK, FETCH SUPERBITS
048099,000077: 4700 00004 INHINT # BECAUSE RUPT DOES NOT SAVE SUPERBANK.
048100,000078: 4701 00006 EXTEND
048101,000079: 4702 01007 WRITE SUPERBNK # SET SUPERBANK FOR DATA.
048102,000080: 4703 50001 INDEX L
048103,000081: 4704 32000 CA 10000 # PINBALL (FIX MEM DISP) PREVENTS DCA HERE
048104,000082: 4705 56135 XCH MPTEMP # SAVE 1ST WD, FETCH OLD FBANK AND SBANK.
048105,000083: 4706 00006 EXTEND
048106,000084: 4707 01007 WRITE SUPERBNK # RESTORE SUPERBANK.
048107,000085: 4710 00003 RELINT
048108,000086: 4711 54004 TS FBANK # RESTORE FBANK.
048109,000087: 4712 30135 CA MPTEMP # RECOVER FIRST WORD OF DATA.
048110,000088: 4713 00002 RETURN # 24 WDS. DATACALL 516 MU, SUPDACAL 432 MU
048111,000089:
048112,000090: # # Page 1106
048113,000091:
048114,000092: # THE FOLLOWING ROUTINES ARE IDENTICAL TO BANKCALL AND SWCALL EXCEPT THAT THEY ARE USED IN INTERRUPT.
048115,000093:
048116,000094: 4714 52073 IBNKCALL DXCH RUPTREG3 # USES RUPTREG3,4 FOR DP RETURN ADDRESS.
048117,000095: 4715 50002 INDEX Q
048118,000096: 4716 30000 CAF 0
048119,000097: 4717 24002 INCR Q
048120,000098:
048121,000099: 4720 54001 ISWCALL TS L
048122,000100: 4721 22004 LXCH FBANK
048123,000101: 4722 75041 MASK LOW10
048124,000102: 4723 56002 XCH Q
048125,000103: 4724 52073 DXCH RUPTREG3
048126,000104: 4725 50002 INDEX Q
048127,000105: 4726 02000 TC 10000
048128,000106:
048129,000107: 4727 56073 ISWRETRN XCH RUPTREG4
048130,000108: 4730 56004 XCH FBANK
048131,000109: 4731 56073 XCH RUPTREG4
048132,000110: 4732 00072 TC RUPTREG3
048133,000111:
048134,000112: # 2. USPRCADR ACCESSES INTERPRETIVE CODING IN OTHER THAN THE USER'S FBANK. THE CALLING SEQUENCE IS AS FOLLOWS:
048135,000113:
048136,000114: # L TC USPRCADR
048137,000115: # L+1 CADR INTPRETX # INTPRETX IS THE INTERPRETIVE CODING
048138,000116: # # RETURN IS TO L+2
048139,000117:
048140,000118: 4733 54164 USPRCADR TS LOC # SAVE A
048141,000119: 4734 34761 CA BIT8
048142,000120: 4735 54023 TS EDOP # EXIT INSTRUCTION TO EDOP
048143,000121: 4736 30006 CA BBANK
048144,000122: 4737 54165 TS BANKSET # USER'S BBANK TO BANKSET
048145,000123: 4740 50002 INDEX Q
048146,000124: 4741 30000 CA 0
048147,000125: 4742 54004 TS FBANK # INTERPRETIVE BANK TO FBANK
048148,000126: 4743 75041 MASK LOW10 # YIELDS INTERPRETIVE RELATIVE ADDRESS
048149,000127: 4744 56002 XCH Q # INTERPRETIVE ADDRESS TO Q, FETCHING L+1
048150,000128: 4745 56164 XCH LOC # L+1 TO LOC, RETRIEVING ORIGINAL A
048151,000129: 4746 14663 TCF Q+10000
048152,000130:
048153,000131: # # Page 1107
048154,000132:
048155,000133: # THERE ARE FOUR POSSIBLE SETTINGS FOR CHANNEL 07. (CHANNEL 07 CONTAINS SUPERBANK SETTING.)
048156,000134:
048157,000135: # PSEUDO-FIXED OCTAL PSEUDO
048158,000136: # SUPERBANK SETTING S-REG. VALUE BANK NUMBERS ADDRESSES
048159,000137: # --------- ------- ------------ ------------ ---------
048160,000138: # SUPERBANK 3 OXX 2000 - 3777 30 - 37 70000 - 107777 (WHERE XX CAN BE ANYTHING AND
048161,000139: # WILL USUALLY BE SEEN AS 11)
048162,000140: # SUPERBANK 4 100 2000 - 3777 40 - 47 110000 - 127777 (AS FAR AS IT CAN BE SEEN,
048163,000141: # ONLY BANKS 40-43 WILL EVER BE
048164,000142: # AND ARE PRESENTLY AVAILABLE)
048165,000143: # SUPERBANK 5 101 2000 - 3777 50 - 57 130000 - 147777 (PRESENTLY NOT AVAILABLE TO
048166,000144: # THE USER)
048167,000145: # SUPERBANK 6 110 2000 - 3777 60 - 67 150000 - 167777 (PRESENTLY NOT AVAILABLE TO
048168,000146: # THE USER)
048169,000147:
End of include-file INTER-BANK_COMMUNICATION.agc. Parent file is MAIN.agc