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. |
020053,000002: ## Copyright: Public domain.
020054,000003: ## Filename: T6-RUPT_PROGRAMS.agc
020055,000004: ## Purpose: A module for revision 0 of BURST120 (Sunburst). It
020056,000005: ## is part of the source code for the Lunar Module's
020057,000006: ## (LM) Apollo Guidance Computer (AGC) for Apollo 5.
020058,000007: ## Assembler: yaYUL
020059,000008: ## Contact: Ron Burkey <info@sandroid.org>.
020060,000009: ## Website: www.ibiblio.org/apollo/index.html
020061,000010: ## Mod history: 2016-09-30 RSB Created draft version.
020062,000011: ## 2016-10-21 HG Transcribed
020063,000012: ## 2016-12-05 RSB Comment-proofing with octopus/ProoferComments
020064,000013: ## completed, changes made.
020065,000014:
Page 483 |
020067,000016: # PROGRAM NAMES: (1) DOT6RUPT MOD. NO. 4 DATE: FEBRUARY 9. 1967
020068,000017:
020069,000018: # (2) T6JOBCHK
020070,000019:
020071,000020: # MODIFICATION BY: JONATHAN D. ADDELSTON (ADAMS ASSOCIATES)
020072,000021:
020073,000022: # THESE PROGRAMS ENABLE THE LM DAP TO CONTROL THE THRUST TIMES OF THE REACTION CONTROL SYSTEM JETS BY USING TIME6.
020074,000023: # SINCE THE LM DAP MAINTAINS EXCLUSIVE CONTROL OVER TIME6 AND ITS INTERRUPTS, THE FOLLOWING CONVENTIONS HAVE BEEN
020075,000024: # ESTABLISHED AND MUST NOT BE TAMPERED WITH:
020076,000025: # 1. NO NUMBER IS EVER PLACED INTO TIME6 EXCEPT BY LM DAP.
020077,000026: # 2. NO PROGRAM OTHER THAN LM DAP ENABLES THE TIME6 COUNTER.
020078,000027: # 3. ONLY POSITIVE NUMBERS ARE ENTERED INTO TIME6, SO IT COUNTS DOWN TO -0 (MINUS ZERO) TO INTERRUPT.
020079,000028: # 4. IF -0 IS NOT IN TIME6 WHEN THE INTERRUPT OCCURS, THEN THE INTERRUPT HAS ALREADY BEEN PROCESSED.
020080,000029: # 5. ALL PROGRAMS WHICH OPERATE IN EITHER INTERRUPT MODE OR WITH INTERRUPT INHIBITED MUST CALL T6JOBCHK
020081,000030: # EVERY 6 MILLISECONDS TO PROCESS A POSSIBLE WAITING T6RUPT BEFORE IT CAN BE HONORED BY THE HARDWARE.
020082,000031:
020083,000032: # DOT6RUPT CALLING SEQUENCE:
020084,000033:
020085,000034: # REF 1 4004 52 011 0 DXCH ARUPT T6RUPT
020086,000035: # 4005 0 0006 1 EXTEND
020087,000036: # REF 1 4006 3 5045 0 DCA T6ADR
020088,000037: # 4007 52 006 0 DTCB
020089,000038:
020090,000039: # T6JOBCHK CALLING SEQUENCE:
020091,000040:
020092,000041: # REF 0 23,1000 0 4200 1 TC T6JOBCHK
020093,000042:
020094,000043: # SUBROUTINES CALLED: DOT6RUPT CALLS T6JOBCHK.
020095,000044:
020096,000045: # NORMAL EXIT MODES: DOT6RUPT TRANSFERS CONTROL TO RESUME.
020097,000046: # T6JOBCHK TRANSFERS CONTROL TO CALLER AT LOCATION AFTER CALL.
020098,000047:
020099,000048: # ALARM/ABORT MODES: NONE.
020100,000049:
020101,000050: # INPUT: TIME6,T6NEXT REGS,T6NEXTJT REGS.
020102,000051:
020103,000052: # OUTPUT: (SAME AS INPUT.)
020104,000053:
020105,000054: # DEBRIS: DOT6RUPT: NONE. T6JOBCHK: A,L
020106,000055: # *** NOTE: AS OF MOD. NO. 2, T6NEXT AND T6NEXTJT LISTS ARE IN UNSWITCHED ERASABLE. ***
020107,000056:
Page 484 |
020109,000058:
020110,000059: 5050 BLOCK 02
020111,000060: 5050 1002 EBANK= T6NEXT
020112,000061:
020113,000062: 5050 1002 EBANK= T6NEXT
020114,000063: 5050 02000 34062 T6ADR 2CADR DOT6RUPT # 2CADR OF INTERRUPT PROCESSOR.
020115,000064:
020116,000065: 16,2000 BANK 16
020117,000066: 16,2000 1002 EBANK= T6NEXT
020118,000067:
020119,000068: 16,2000 22016 DOT6RUPT LXCH BANKRUPT # (INTERRUPT LEAD IN CONTINUED)
020120,000069: 16,2001 00006 EXTEND
020121,000070: 16,2002 22012 QXCH QRUPT
020122,000071:
020123,000072: 16,2003 06013 TC T6JOBCHK # CALL T6JOBCHK
020124,000073:
020125,000074: 16,2004 15733 TCF RESUME # END TIME6 RUPT
020126,000075:
020127,000076:
020128,000077:
020129,000078: 6013 BLOCK 03
020130,000079: 6013 1002 EBANK= T6NEXT
020131,000080:
020132,000081: 6013 10031 T6JOBCHK CCS TIME6 # CHECK TIME6 FOR WAITING T6RUPT:
020133,000082: 6014 00002 TC Q # NONE: CLOCK COUTING DOWN.
020134,000083: 6015 00002 TC Q # NONE: T6RUPT ALREADY PROCESSED.
020135,000084: 6016 00002 TC Q # NONE: INVALID VALUE. (POSSIBLE ABORT.)
020136,000085:
020137,000086: # CONTROL PASSES TO T6JOB ONLY WHEN C(TIME6) = -0 (I.E. WHEN A T6RUPT MUST BE PROCESSED).
020138,000087:
020139,000088: 6017 37743 T6JOB CAF POSMAX # DISABLE CLOCK: NEEDED SINCE RUPT OCCURS
020140,000089: 6020 00006 EXTEND # 1 DINC AFTER T6 = 77777. FOR 625 MUSECS
020141,000090: 6021 03013 WAND 13 # MUST NOT HAVE T6 = +0 WITH ENABLE SET.
020142,000091:
020143,000092: 6022 37767 CAF ZERO # UPDATE ORDERED LIST OF T6NEXT REGISTERS
020144,000093: 6023 57003 XCH T6NEXT +1 # 1) PUSH FIRST ENTRY INTO TIME6.
020145,000094: 6024 57002 XCH T6NEXT # 2) PUSH SECOND ENTRY INTO FIRST PLACE.
020146,000095: 6025 54031 TS TIME6 # 3) ZERO LAST (SECOND) DT IN LIST.
020147,000096:
020148,000097: 6026 10031 CCS TIME6 # TIME6 EITHER POSITIVE OR PLUS ZERO:
020149,000098: 6027 16032 TCF T6NZERO # (BRANCH IF TIME6 STILL ACTIVE.)
020150,000099:
020151,000100: 6030 31004 CAE T6NEXTJT # THESE ARE TRANSLATION JETS (NO DT),
020152,000101: 6031 16041 TCF WRITEJTS # DETERMINE CHANNEL AND WRITE.
020153,000102:
020154,000103: 6032 37745 T6NZERO CAF BIT15 # ENABLE TIME6 COUNTER TO START TIMING
020155,000104: 6033 00006 EXTEND # THIS JET FIRING (PROPER JETS NOT YET
020156,000105: 6034 05013 WOR 13 # WRITTEN INTO CHANNEL, BUT WILL BE SOON).
020157,000106:
020158,000107: 6035 37767 CAF ZERO # UPDATE ORDERED LIST OF JET POLICIES:
020159,000108: 6036 57006 XCH T6NEXTJT +2 # 1) LEAVE JETS TO GO ON NOW IN A.
020160,000109:
Page 485 |
020162,000111: 6037 57005 XCH T6NEXTJT +1 # 2) CYCLE LIST UP TOWARD TOP.
020163,000112: 6040 57004 XCH T6NEXTJT # 3) ZERO LAST ENTRY IN LIST.
020164,000113:
Page 486 |
020166,000115: # THE FOLLOWING JET-ON LOGIC MAY BE USED AS A SUBROUTINE (3 ENTRY POINTS):
020167,000116:
020168,000117: # FIRST, LET SGN(A) DETERMINE THE JET CHANNEL:
020169,000118: # POSITIVE IMPLIES P-AXIS POLICY.
020170,000119: # NEGATIVE IMPLIES Q,R-AXES POLICY.
020171,000120:
020172,000121: 6041 00006 WRITEJTS EXTEND # TEST FOR CHANNEL TO WRITE POLICY IN:
020173,000122: 6042 66046 BZMF WRITEQR # NEG: Q,R-AXES JETS IN CHANNEL 5
020174,000123:
020175,000124: # SECOND, FOR P-AXIS JET POLICIES:
020176,000125:
020177,000126: 6043 00006 WRITEP EXTEND # POS: P-AXIS JETS IN CHANNEL 6
020178,000127: 6044 01006 WRITE 6
020179,000128: 6045 00002 TC Q # RETURN.
020180,000129:
020181,000130: # THIRD, FOR Q,R-AXES JET POLICIES:
020182,000131:
020183,000132: 6046 00006 WRITEQR EXTEND # Q,R-AXES JETS IN CHANNEL 5
020184,000133: 6047 01005 WRITE 5
020185,000134: 6050 00002 TC Q # RETURN.
End of include-file T6-RUPT_PROGRAMS.agc. Parent file is MAIN.agc