Source Code
![]() |
These source-code files were transcribed from scans made from Don Eyles's personal
copy of BURST120 (SUNBURST 120). They were scanned at archive.org's Boston
facility, and the scanning was sponsored by Mike Stewart. The code was transcribed
from these scans by a team of volunteers who are referenced in the program
comments. Comments from the original source code are in ALL-CAPS, whereas
comments added later in transcription are in Mixed-Case. In some cases, where
similar code blocks exist in previously-transcribed AGC programs (primarily
Luminary 99, from Apollo 11) those code blocks were used as a starting point and
then corrected to agree with the BURST120 scans. The full scans are available
at the Virtual AGC
project's collection at archive.org, while more-convenient reduced-size (but reduced-quality)
images are available at
the main Virtual AGC website. Report any errors noted by creating an
issue report at the Virtual AGC
project's GitHub repository. Notations on the program listing read, in part:YUL SYSTEM FOR AGC: REVISION 0 OF PROGRAM BURST120 BY NASA 2021106-031 DEC 7, 1967 THIS LISTING IS A COPY OF A VERSION OF THE PROGRAM INTENDED FOR USE IN THE ON-BOARD PRIMARY GUIDANCE COMPUTER IN THE UNMANNED FLIGHT OF APOLLO LUNAR MODULE 1 --- THE AS206 MISSION.Note that the date is the date of the printout, not the date of the program revision. |
040655,000002: ## Copyright: Public domain.
040656,000003: ## Filename: INTER-BANK_COMMUNICATION.agc
040657,000004: ## Purpose: A module for revision 0 of BURST120 (Sunburst). It
040658,000005: ## is part of the source code for the Lunar Module's
040659,000006: ## (LM) Apollo Guidance Computer (AGC) for Apollo 5.
040660,000007: ## Assembler: yaYUL
040661,000008: ## Contact: Ron Burkey <info@sandroid.org>.
040662,000009: ## Website: www.ibiblio.org/apollo/index.html
040663,000010: ## Mod history: 2016-09-30 RSB Created draft version.
040664,000011: ## 2016-10-19 RSB Transcribed, largely from Aurora 12 version of the file.
040665,000012: ## 2016-10-31 RSB Typos.
040666,000013: ## 2016-11-01 RSB More typos.
040667,000014: ## 2016-12-06 RSB Comments proofed using octopus/ProoferComments,
040668,000015: ## changes made.
040669,000016: ## 2017-03-17 RSB Comment-text fixes identified in diff'ing
040670,000017: ## Luminary 99 vs Comanche 55.
040671,000018:
![]() |
Page 948 |
040673,000020: # THE FOLLOWING ROUTINE CAN BE USED TO CALL A SUBROUTINE IN ANOTHER BANK. IN THE BANKCALL VERSION, THE
040674,000021: # CADR OF THE SUBROUTINE IMMEDIATELY FOLLOWS THE TC BANKCALL INSTRUCTION, WITH C(A) AND C(L) PRESERVED.
040675,000022:
040676,000023: 5206 BLOCK 02
040677,000024: 5206 52124 BANKCALL DXCH BUF2 # SAVE INCOMING A,L.
040678,000025: 5207 50002 INDEX Q # PICK UP CADR.
040679,000026: 5210 30000 BNKCAL+2 CA 0
040680,000027: 5211 24002 INCR Q # SO WE RETURN TO THE LOC. AFTER THE CADR.
040681,000028:
040682,000029: # SWCALL IS IDENTICAL TO BANKCALL, EXCEPT THAT THE CADR ARRIVES IN A.
040683,000030:
040684,000031: 5212 54001 SWCALL TS L
040685,000032: 5213 22004 LXCH FBANK # SWITCH BANKS, SAVING RETURN.
040686,000033: 5214 75337 MASK LOW10 # GET SUB-ADDRESS OF CADR.
040687,000034: 5215 56002 XCH Q # A,L NOW CONTAINS DP RETURN.
040688,000035: 5216 52124 DXCH BUF2 # RESTORING INPUTS IF THIS IS A BANKCALL.
040689,000036: 5217 50002 INDEX Q
040690,000037: 5220 02000 TC 10000 # SETTING Q TO SWRETURN.
040691,000038:
040692,000039: 5221 56124 SWRETURN XCH BUF2 +1 # COMES HERE TO RETURN TO CALLER. C(A,L)
040693,000040: 5222 56004 XCH FBANK # ARE PRESERVED FOR RETURN.
040694,000041: 5223 56124 XCH BUF2 +1
040695,000042: 5224 00123 TC BUF2
040696,000043:
040697,000044: # THE FOLLOWING ROUTINE CAN BE USED AS A UNILATERAL JUMP WITH C(A,L) PRESERVED AND THE CADR IMMEDIATELY
040698,000045: # FOLLOWING THE TC POSTJUMP INSTRUCTION.
040699,000046:
040700,000047: 5225 56002 POSTJUMP XCH Q # SAVE INCOMING C(A).
040701,000048: 5226 50000 INDEX A # GET CADR.
040702,000049: 5227 30000 CA 0
040703,000050:
040704,000051: # BANKJUMP IS THE SAME AS POSTJUMP, EXCEPT THAT THE CADR ARRIVES IN A.
040705,000052:
040706,000053: 5230 54004 BANKJUMP TS FBANK
040707,000054: 5231 75337 MASK LOW10
040708,000055: 5232 56002 XCH Q # RESTORING INPUT C(A) IF THIS WAS A
040709,000056: 5233 50002 Q+10000 INDEX Q # POSTJUMP.
040710,000057: 5234 12000 BNKJUP+4 TCF 10000
040711,000058:
![]() |
Page 949 |
040713,000060: # THE FOLLOWING ROUTINE GETS THE RETURN CADR SAVED BY SWCALL OR BANKCALL AND LEAVES IT IN A.
040714,000061:
040715,000062: 5235 35337 MAKECADR CAF LOW10
040716,000063: 5236 70123 MASK BUF2
040717,000064: 5237 60124 AD BUF2 +1
040718,000065: 5240 00002 TC Q
040719,000066:
040720,000067:
040721,000068: # THE FOLLOWING ROUTINE OBTAINS THE ONE WORD AT THE ADDRESS ARRIVING IN A, AND LEAVES IT IN A. ENTER
040722,000069: # WITH THE CADR IN A, AT DATACALL WITH JUNK IN L IF NOT SWITCHING SUPERBANKS, OTHERWISE AT SUPDACAL WITH SUPERBANK
040723,000070: # BITS IN BITS 7-5 IN L (BITS 15-8 AND 4-1 MAY BE JUNK). DEBRIS = MTEMP. INHINTS FOR ABOUT 165 MUSEC.
040724,000071:
040725,000072: 5241 54001 DATACALL TS L # SAVE CADR (SOLE INPUT HERE).
040726,000073: 5242 00006 EXTEND
040727,000074: 5243 00007 READ SUPERBNK # THIS PROLOGUE MAKES SUPERSWITCH VACUOUS.
040728,000075: 5244 56001 XCH L # CADR IN A, SUPERBITS IN L.
040729,000076:
040730,000077: 5245 54125 SUPDACAL TS MPTEMP
040731,000078: 5246 56004 XCH FBANK # SET FBANK FOR DATA.
040732,000079: 5247 00006 EXTEND
040733,000080: 5250 04007 ROR SUPERBNK # SAVE FBANK IN BITS 15-11, AND
040734,000081: 5251 56125 XCH MPTEMP # SUPERBANK IN BITS 7-5.
040735,000082: 5252 75337 MASK LOW10
040736,000083: 5253 56001 XCH L # SAVE REL. ADR. IN BANK, FETCH SUPERBITS.
040737,000084: 5254 00004 INHINT # BECAUSE RUPT DOES NOT SAVE SUPERBANK.
040738,000085: 5255 00006 EXTEND
040739,000086: 5256 01007 WRITE SUPERBNK # SET SUPERBANK FOR DATA.
040740,000087: 5257 50001 INDEX L
040741,000088: 5260 32000 CA 10000
040742,000089:
040743,000090: 5261 56125 XCH MPTEMP # SAVE 1ST WD, FETCH OLD FBANK AND SBANK.
040744,000091: 5262 00006 EXTEND
040745,000092: 5263 01007 WRITE SUPERBNK # RESTORE SUPERBANK.
040746,000093: 5264 00003 RELINT
040747,000094: 5265 54004 TS FBANK # RESTORE FBANK.
040748,000095: 5266 30125 CA MPTEMP # RECOVER FIRST WORD OF DATA.
040749,000096: 5267 00002 RETURN # 24 WDS. DATACALL 516 MU, SUPDACAL 432 MU
040750,000097:
![]() |
Page 950 |
040752,000099: # THE FOLLOWING ROUTINES ARE IDENTICAL TO BANKCALL AND SWCALL EXCEPT THAT THEY ARE USED IN INTERRUPT.
040753,000100:
040754,000101: 5270 52073 IBNKCALL DXCH RUPTREG3 # USES RUPTREG3,4 FOR DP RETURN ADDRESS.
040755,000102: 5271 50002 INDEX Q
040756,000103: 5272 30000 CAF 0
040757,000104: 5273 24002 INCR Q
040758,000105:
040759,000106: 5274 54001 ISWCALLL TS L
040760,000107: 5275 22004 LXCH FBANK
040761,000108: 5276 75337 MASK LOW10
040762,000109: 5277 56002 XCH Q
040763,000110: 5300 52073 DXCH RUPTREG3
040764,000111: 5301 50002 INDEX Q
040765,000112: 5302 02000 TC 10000
040766,000113:
040767,000114: 5303 56073 ISWRETRN XCH RUPTREG4
040768,000115: 5304 56004 XCH FBANK
040769,000116: 5305 56073 XCH RUPTREG4
040770,000117: 5306 00072 TC RUPTREG3
040771,000118:
![]() |
Page 951 |
040773,000120: # THE FOLLOWING SUBROUTINES PROVIDE TO THE BASIC PROGRAMMER ENTRY INTO AND RETURN FROM ANY INTERPRETIVE
040774,000121: # CODING WHICH DOES NOT USE THE ENTERING CONTENTS OF Q AND WHICH RETURNS VIA DANZIG. C(A) AND C(L) ARE SAVED.
040775,000122:
040776,000123: # USER'S RESPONSIBILITY TO FILL IN ADVANCE THE APPROPRIATE OPERAND AND ADDRESS REGISTERS USED BY THE
040777,000124: # INTERPRETIVE CODING SUCH AS MPAC, BUF, ADDRWD, ETC.; AND TO CONFIRM THAT THE INTERPRETIVE CODING MEETS THE
040778,000125: # ABOVE RESTRICTIONS WITH RESPECT TO Q AND DANZIG.
040779,000126:
040780,000127: # USEPRET AND USPRCADR MUST NOT BE USED IN INTERRUPT.
040781,000128:
040782,000129: # 1. USEPRET ACCESSES INTERPRETIVE CODING WHICH CAN BE ENTERED WITHOUT CHANGING FBANK.
040783,000130: # THE CALLING SEQUENCE IS AS FOLLOWS:
040784,000131:
040785,000132: # L TC USEPRET
040786,000133: # L+1 TC,TCF INTPRETX TC,TCF MEANS TC OR TCF
040787,000134: # INTPRETX IS THE INTERPRETIVE CODING
040788,000135: # RETURN IS TO L+2
040789,000136:
040790,000137: # 2. USPRCADR ACCESSES INTERPRETIVE CODING IN OTHER THAN THE USER'S FBANK. THE CALLING SEQUENCE IS AS FOLLOWS:
040791,000138:
040792,000139: # L TC USPRCADR
040793,000140: # L+1 CADR INTPRETX INTPRETX IS THE INTERPRETIVE CODING
040794,000141: # RETURN IS TO L+2
040795,000142:
040796,000143: 5307 56002 USEPRET XCH Q # FETCH Q, SAVING A
040797,000144: 5310 54154 TS LOC # L+1 TO LOC
040798,000145: 5311 30006 CA BBANK
040799,000146: 5312 54155 TS BANKSET # USER'S BBANK TO BANKSET
040800,000147: 5313 37754 CA BIT8
040801,000148: 5314 54023 TS EDOP # EXIT INSTRUCTION TO EDOP
040802,000149: 5315 30002 CA Q # RETRIEVE ORIGINAL A
040803,000150: 5316 00154 TC LOC
040804,000151:
040805,000152: 5317 54154 USPRCADR TS LOC # SAVE A
040806,000153: 5320 37754 CA BIT8
040807,000154: 5321 54023 TS EDOP # EXIT INSTRUCTION TO EDOP
040808,000155: 5322 30006 CA BBANK
040809,000156: 5323 54155 TS BANKSET # USER'S BBANK TO BANKSET
040810,000157: 5324 50002 INDEX Q
040811,000158: 5325 30000 CA 0
040812,000159: 5326 54004 TS FBANK # INTERPRETIVE BANK TO FBANK
040813,000160: 5327 75337 MASK LOW10 # YIELDS INTERPRETIVE RELATIVE ADDRESS
040814,000161: 5330 56002 XCH Q # INTERPRETIVE ADDRESS TO Q, FETCHING L+1
040815,000162: 5331 56154 XCH LOC # L+1 TO LOC, RETRIEVING ORIGINAL A
040816,000163: 5332 15233 TCF Q+10000
040817,000164:
![]() |
Page 952 |
040819,000166: # THERE ARE FOUR POSSIBLE SETTINGS FOR CHANNEL 07. (CHANNEL 07 CONTAINS THE SUPERBANK SETTING.)
040820,000167: # PSEUDO-FIXED OCTAL PSEUDO
040821,000168: # SUPERBANK SETTING S-REG. VALUE BANK NUMBERS ADDRESSES
040822,000169: # --------- ------- ------------ ------------ ------------
040823,000170:
040824,000171: # SUPERBANK 3 0XX 2000 - 3777 30 - 37 70000 - 107777 (WHERE XX CAN BE ANYTHING AND
040825,000172: # WILL USUALLY BE SEEN AS 11)
040826,000173: # SUPERBANK 4 100 2000 - 3777 40 - 47 110000 - 127777 (AS FAR AS IT CAN BE SEEN,
040827,000174: # ONLY BANKS 40-43 WILL EVER BE
040828,000175: # AND ARE PRESENTLY AVAILABLE)
040829,000176: # SUPERBANK 5 101 2000 - 3777 50 - 57 130000 - 147777 (PRESENTLY NOT AVAILABLE TO
040830,000177: # THE USER)
040831,000178: # SUPERBANK 6 110 2000 - 3777 60 - 67 150000 - 167777 (PRESENTLY NOT AVAILABLE TO
040832,000179: # THE USER)
040833,000180: # *** THIS ROUTINE MAYBE CALLED BY ANY PROGRAM LOCATED IN BANKS 00 - 27. I.E., NO PROGRAM LIVING IN ANY
040834,000181: # SUPERBANK SHOULD USE SUPERSW. ***
040835,000182:
040836,000183: # SUPERSW MAY BE CALLED IN THIS FASHION:
040837,000184:
040838,000185: # CAF ABBCON WHERE -- ABBCON BBCON SOMETHIN --
040839,000186: # TCR SUPERSW (THE SUPERBNK BITS ARE IN THE BBCON)
040840,000187: # ... ...
040841,000188: # . .
040842,000189: # . .
040843,000190:
040844,000191: # OR IN THIS FASHION:
040845,000192:
040846,000193: # CAF SUPERSET WHERE SUPERSET IS ONE OF THE FOUR AVAILABLE
040847,000194: # TCR SUPERSW SUPERBANK BIT CONSTANTS:
040848,000195: # ... ... SUPER011 OCTAL 60
040849,000196: # . . SUPER100 OCTAL 100
040850,000197: # . . SUPER101 OCTAL 120
040851,000198: # SUPER110 OCTAL 140
040852,000199:
040853,000200: 5333 00006 SUPERSW EXTEND
040854,000201: 5334 01007 WRITE SUPERBNK # WRITE BITS 7-6-5 OF THE ACCUMULATOR INTO
040855,000202: # CHANNEL 07
040856,000203: 5335 00002 TC Q # TC TO INSTRUCTION FOLLOWING
040857,000204: # TC SUPERSW
040858,000205:
End of include-file INTER-BANK_COMMUNICATION.agc. Parent file is MAIN.agc