Pre-launch Review
UPDATE PROGRAM
Scanned pages: 1386-1396
# Copyright: Public domain.# Filename: UPDATE_PROGRAM.agc# Purpose: Part of the source code for Luminary 1A build 099.# It is part of the source code for the Lunar Module's (LM)# Apollo Guidance Computer (AGC), for Apollo 11.# Assembler: yaYUL# Contact: Ron Burkey <info@sandroid.org>.# Website: www.ibiblio.org/apollo.# Pages: 1386-1396# Mod history: 2009-05-10 SN (Sergio Navarro). Started adapting# from the Luminary131/ file of the same# name, using Luminary099 page images.# 2009-06-07 RSB Added an SBANK= to account for incompatibilities# between YUL and yaYUL.# 2011-01-06 JL Fixed pseudo-label indentation.# 2011-05-07 JL Flag SBANK= workaround.
# This source code has been transcribed or otherwise adapted from# digitized images of a hardcopy from the MIT Museum. The digitization# was performed by Paul Fjeld, and arranged for by Deborah Douglas of# the Museum. Many thanks to both. The images (with suitable reduction# in storage size and consequent reduction in image quality as well) are# available online at www.ibiblio.org/apollo. If for some reason you# find that the images are illegible, contact me at info@sandroid.org# about getting access to the (much) higher-quality images which Paul# actually created.## Notations on the hardcopy document read, in part:## Assemble revision 001 of AGC program LMY99 by NASA 2021112-061# 16:27 JULY 14, 1969
# Page 1386# PROGRAM NAME: P27# WRITTEN BY: KILROY/ DE WOLF## MOD NO: 6# MOD BY: KILROY# DATE: 01DEC67## LOG SECTION: UPDATE PROGRAM.## FUNCT. DESCR: P27 (THE UPDATE PROGRAM) PROCESSES COMMANDS AND DATA# INSERTIONS REQUESTED BY THE GROUND VIA UPLINK.# THE P27 PROGRAM WILL ACCEPT UPDATES# ONLY DURING P00 FOR THE LM, AND ONLY DURING P00,# P02, AND FRESH START FOR THE CSM## CALLING SEQ: PROGRAM IS INITIATED BY UPLINK ENTRY OF VERBS 70, 71, 72 AND 73.## SUBROUTINES: TESTXACT, NEWMODEX, NEWMODEX +3, GOXDSPF, BANKCALL, FINDVAC, INTPRET, INTSTALL, TPAGREE,# INTWAKEU, ENDEXT, POSTJUMP, FALTON, NEWPHASE, PHASCHNG## NORMAL EXIT: TC ENDEXT## ALARM/ABORT: TC FALTON FOLLOWED BY TC ENDEXT## RESTARTS: P27 IS RESTART PROTECTED IN TWO WAYS...# 1. PRIOR TO VERIFLAG INVERSION(WHICH IS CAUSED BY THE GROUND/ASTRONAUT'S VERIFICATION OF UPDATE# DATA BY SENDING A V33E WHEN V21N02 IS FLASHING)---# NO PROTECTION EXCEPT PRE-P27 MODE IS RESTORED, COAST + ALIGN DOWNLIST IS SELECTED AND UPLINK# ACTIVITY LIGHT IS TURNED OFF.(JUST AS IF A V34E WAS SENT DURING P27 DATA LOADS).# V70,V71,V72 OR V73 WILL HAVE TO BE COMPLETELY RESENT BY USER.# 2. AFTER VERIFLAG INVERSION(WHEN UPDATE OF THE SPECIFIED ERASABLES IS BEING PERFORMED)---# PROTECTED AGAINST RESTARTS.## DEBRIS: UPBUFF (20D) TEMP STORAGE FOR ADDRESSES AND CONTENTS.# UPVERB (1) VERB NUMBER MINUS 70D (E.G., FOR V72, UPVERB = 72D - 70D = 2)# UPOLDMOD (1) FOR MAJOR MODE INTERRUPTED BY P27.# COMPNUMB (1) TOTAL NUMBER OF COMPONENTS TO BE TRANSMITTED.# UPCOUNT (1) ACTUAL NUMBER OF COMPONENTS RECEIVED.# UPTEMP (1) SCRATCH, BUT USUALLY CONTAINS COMPONENT NUMBER TO BE CHANGED DURING VERIFY CYCLE## INPUT:## ENTRY: DESCRIPTION## V70EXXXXXEXXXXXE (LIFTOFF TIME INCREMENT) DOUBLE PRECISION OCTAL TIME INCREMENT, XXXXX XXXXX,# IS ADDED TO TEPHEM, SUBTRACTED FROM AGC CLOCK(TIME2,TIME1), SUBTRACTED FROM CSM STATE# VECTOR TIME(TETCSM) AND SUBTRACTED FROM LEM STATE VECTOR TIME(TETLEM).# THE DP OCTAL TIME INCREMENT IS SCALED AT 2(28).# Page 1387# V71EIIEAAAAE (CONTIGUOUS BLOCK UPDATE) II-2 OCTAL COMPONENTS,XXXXX,# XXXXXE ARE LOADED INTO ERASABLE STARTING AT ECADR, AAAA.# XXXXXE IT IS .GE. 3 .AND. .LE. 200.,# AND (AAAA + II - 3) DOES NOT PRODUCE AN ADDRESS IN THE# 9 NEXT BANK.# . SCALING IS SAME AS INTERNAL REGISTERS.## V72EIIE (SCATTER UPDATE) (II-1)/2 OCTAL COMPONENTS,XXXXX, ARE# AAAAEXXXXXE LOADED INTO ERASABLE LOCATIONS, AAAA.# AAAAEXXXXXE II IS .GE. 3 .AND. .LE. 19D, AND MUST BE ODD.# . SCALING IS SAME AS INTERNAL REGISTERS.## V73EXXXXXEXXXXXE (OCTAL CLOCK INCREMENT) DOUBLE PRECISION OCTAL TIME# INCREMENT XXXXX XXXXX, IS ADDED TO THE AGC CLOCK, IN# CENTISECONDS SCALED AT (2)28.# THIS LOAD IS THE OCTAL EQUIVALENT OF V55.## OUTPUT: IN ADDITION TO THE ABOVE REGISTER LOADS, ALL UPDATES# COMPLEMENT BIT3 OF FLAGWORD7.## ADDITIONAL NOTES: VERB 71, JUST DEFINED ABOVE WILL BE USED TO PERFORM BUT NOT LIMITED TO THE FOLLOWING UPDATES--## 1. CSM/LM STATE VECTOR UPDATE# 2. REFSMMAT UPDATE### THE FOLLOWING COMMENTS DELINEATE EACH SPECIAL UPDATE----## 1. CSM/LM STATE VECTOR UPDATE(ALL DATA ENTRIES IN OCTAL)## ENTRIES: DATA DEFINITION: SCALE FACTORS:# V71E CONTIGUOUS BLOCK UPDATE VERB# 21E NUMBER OF COMPONENTS FOR STATE VECTOR UPDATE# AAAAE ECADR OF 'UPSVFLAG'# XXXXXE STATE VECTOR IDENTIFIER: 00001 FOR CSM, 77776 FOR LEM - EARTH SPHERE OF INFLUENCE SCALING# 00002 FOR CSM, 77775 FOR LEM - LUNAR SPHERE OF INFLUENCE SCALING## XXXXXEXXXXXE X POSITION# XXXXXEXXXXXE Y POSITION# XXXXXEXXXXXE Z POSITION# XXXXXEXXXXXE X VELOCITY# XXXXXEXXXXXE Y VELOCITY# XXXXXEXXXXXE Z VELOCITY# XXXXXEXXXXXE TIME FROM AGC CLOCK ZERO# V33E VERB 33 TO SIGNAL THAT THE STATE VECTOR IS READY TO BE STORED.### 2. REFSMMAT(ALL DATA ENTRIES IN OCTAL)# ENTRIES: DATA DEFINITITIONS: SCALE FACTORS:# Page 1388# V71E CONTIGUOUS BLOCK UPDATE VERB# 24E NUMBER OF COMPONENTS FOR REFSMMAT UPDATE# AAAAE ECADR OF 'REFSMMAT'# XXXXXEXXXXXE ROW 1 COLUMN 1 2(-1)# XXXXXEXXXXXE ROW 1 COLUMN 2 2(-1)# XXXXXEXXXXXE ROW 1 COLUMN 3 2(-1)# XXXXXEXXXXXE ROW 2 COLUMN 1 2(-1)# XXXXXEXXXXXE ROW 2 COLUMN 2 2(-1)# XXXXXEXXXXXE ROW 2 COLUMN 3 2(-1)# XXXXXEXXXXXE ROW 3 COLUMN 1 2(-1)# XXXXXEXXXXXE ROW 3 COLUMN 2 2(-1)# XXXXXEXXXXXE ROW 3 COLUMN 3 2(-1)# V33E VERB 33 TO SIGNAL THAT REFSMMAT IS READY TO BE STORED.
BANK 07 SETLOC EXTVERBS BANK
EBANK= TEPHEM
COUNT* $$/P27V70UPDAT CAF UP70 # COMES HERE ON V70E TCF V73UPDAT +1
V71UPDAT CAF UP71 # COMES HERE ON V71E TCF V73UPDAT +1
V72UPDAT CAF UP72 # COMES HERE ON V72E TCF V73UPDAT +1
V73UPDAT CAF UP73 # COMES HERE ON V73E
+1 TS UPVERBSV # SAVE UPVERB UNTIL IT'S OK TO ENTER P27
TC TESTXACT # GRAB DISPLAY IF AVAILABLE, OTHERWISE # TURN*OPERATOR ERROR* ON AND TERMINATEJOB
CA MODREG # CHECK IF UPDATE ALLOWED EXTEND # FIRST CHECK FOR MODREG = +0, -0 BZF +3 # (+0 = P00, -0 = FRESHSTART)UPERROR TC POSTJUMP # TURN ON 'OPERATOR ERROR' LIGHT CADR UPERROUT +2 # GO TO COMMON UPDATE PROGRAM EXIT
CAE MODREG # UPDATE ALLOWED.CKMDMORE = UPERROR TS UPOLDMOD # SAVE CURRENT MAJOR MODE# Page 1389 CAE UPVERBSV # SET UPVERB TO INDICDATE TO P27 TS UPVERB # WHICH EXTENDED VERB CALLED IT.
CAF ONE TS UPCOUNT # INITIALIZE UPCOUNT TO 1
TC POSTJUMP # LEAVE EXTENDED VERB BANK AND CADR UPPART2 # GO TO UPDATE PROGRAM(P27) BANK.
UP70 EQUALS ZEROUP71 EQUALS ONEUP72 EQUALS TWOUP73 EQUALS THREE
BANK 04 SETLOC UPDATE2 BANK
COUNT* $$/P27
UPPART2 EQUALS # UPDATE PROGRAM - PART 2
TC PHASCHNG # SET RESTART GROUP 6 TO RESTORE OLD MODE OCT 07026 # AND DOWNLIST AND EXIT IF RESTART OCCURS. OCT 30000 # PRIORITY SAME AS CHRPRIO EBANK= UPBUFF 2CADR UPOUT +1
CAF ONE TS DNLSTCOD # DOWNLIST
TC NEWMODEX # SET MAJOR MODE = 27 DEC 27
INDEX UPVERB # BRANCH DEPENDING ON WHETHER THE UPDATE TCF +1 # VERB REQUIRES A FIXED OR VARIABLE NUMBER TCF +3 # V70 FIXED. (OF COMPONENTS. TCF OHWELL1 # V71 VARIABLE - GO GET NO. OF COMPONENTS TCF OHWELL1 # V72 VARIABLE - GO GET NO. OF COMPONENTS CA TWO # V73 (AND V70) FIXED TS COMPNUMB # SET NUMBER OF COMPONENTS TO 2. TCF OHWELL2 # GO GET THE TWO UPDATE COMPONENTS
OHWELL1 CAF ADUPBUFF # * REQUEST USER TO SEND NUMBER * TS MPAC +2 # * OF COMPONENTS PARAMETER(II).* +2 CAF UPLOADNV # (CK4V32 RETURNS HERE IF V32 ENCOUNTERED) TC BANKCALL # DISPLAY A FLASHING V21N01# Page 1390 CADR GOXDSPF # TO REQUEST II. TCF UPOUT4 # V34 TERMINATE UPDATE(P27) RETURN TCF OHWELL1 +2 TC CK4V32 # DATA OR V32 RETURN CS BIT2 AD UPBUFF # IS II(NUMBER OF COMPONENTS PARAMETER) EXTEND # .GE. 3 AND .LE. 20D. BZMF OHWELL1 +2 CS UPBUFF AD UP21 EXTEND BZMF OHWELL1 +2 CAE UPBUFF TS COMPNUMB # SAVE II IN COMPNUMB
# UPBUFF LOADING SEQUENCE
INCR UPCOUNT # INCREMENT COUNT OF COMPONENTS RECEIVED.OHWELL2 CAF ADUPBFM1 # CALCULATE LOCATION(ECADR) IN UPBUFF AD UPCOUNT # WHERE NEXT COMPONENT SHOULD BE STORED. +2 TS MPAC +2 # PLACE ECADR INTO R3. +3 CAF UPLOADNV # (CK4V32 RETURNS HERE IF V32 ENCOUNTERED) TC BANKCALL # DISPLAY A FLASHING V21N01 CADR GOXDSPF # TO REQUEST DATA. TCF UPOUT4 # V34 TERMINATE UPDATE(P27) RETURN. TCF OHWELL2 +3 # V33 PROCEED RETURN TC CK4V32 # DATA OR V32 RETURN CS UPCOUNT # HAVE WE FINISHED RECEIVING ALL AD COMPNUMB # THE DATA WE EXPECTED. EXTEND BZMF UPVERIFY # YES- GO TO VERIFICATION SEQUENCE TCF OHWELL2 -1 # NO- REQUEST ADDITIONAL DATA.
# VERIFY SEQUENCE
UPVERIFY CAF ADUPTEMP # PLACE ECADR WHERE COMPONENT NO. INDEX TS MPAC +2 # IS TO BE STORED INTO R3. CAF UPVRFYNV # (CK4V32 RETURNS HERE IF V32 ENCOUNTERED) TC BANKCALL # DISPLAY A FLASHING V21N02 TO REQUEST CADR GOXDSPF # DATA CORRECTION OR VERIFICATION. TCF UPOUT4 # V34 TERMINATE UPDATE(P27) RETURN TCF UPSTORE # V33 DATA SENT IS GOOD. GO STORE IT. TC CK4V32 # COMPONENT NO. INDEX OR V32 RETURN CA UPTEMP # DOES THE COMPONENT NO. INDEX JUST SENT EXTEND # SPECIFY A LEGAL COMPONENT NUMBER? BZMF UPVERIFY # NO, IT IS NOT POSITIVE NONZERO CS UPTEMP AD COMPNUMB# Page 1391 AD BIT1 EXTEND BZMF UPVERIFY # NO CAF ADUPBFM1 # YES- BASED ON THE COMPONENT NO. INDEX AD UPTEMP # CALCULATE THE ECADR OF LOCATION IN TCF OHWELL2 +2 # UPBUFF WHICH USER WANTS TO CHANGE.
UPOUT4 EQUALS UPOUT +1 # COMES HERE ON V34 TO TERMINATE UPDATE
# CHECK FOR VERB 32 SEQUENCE
CK4V32 CS MPAC # ON DATA RETURN FROM 'GOXDSPF' MASK BIT6 # ON DATA RETURN FROM "GOXDSP"& THE CON- CCS A # TENTS OF MPAC = VERB. SO TEST FOR V32. TC Q # IT'S NOT A V32, IT'S DATA. PROCEED. INDEX Q TC 0 -6 # V32 ENCOUNTERED - GO BACK AND GET DATA
ADUPTEMP ADRES UPTEMP # ADDRESS OF TEMP STORAGE FOR CORRECTIONSADUPBUFF ADRES UPBUFF # ADDRESS OF UPDATE DATA STORAGE BUFFERUPLOADNV VN 2101 # VERB 21 NOUN 01UPVRFYNV VN 2102 # VERB 21 NOUN 02UP21 = MD1 # DEC 21 = MAX NO OF COMPONENTS +1UPDTPHAS EQUALS FIVE
# PRE-STORE AND FAN TO APPROPRIATE BRANCH SEQUENCE
UPSTORE EQUALS # GROUND HAS VERIFIED UPDATE. STORE DATA.
INHINT
CAE FLAGWRD7 # INVERT VERIFLAG(BIT3 OF FLAGWRD7) TO XCH L # INDICATE TO THE GROUND(VIA DOWNLINK) CAF VERIFBIT # THAT THE V33 (WHICH THE GROUND SENT TO EXTEND # VERIFY THE UPDATE) HAS BEEN SUCCESSFULLY RXOR LCHAN # RECEIVED BY THE UPDATE PROGRAM TS FLAGWRD7
TC PHASCHNG # SET RESTART GROUP 6 TO REDO THE UPDATE OCT 04026 # DATA STORE IF A RESTART OCCURS. INHINT # (BECAUSE PHASCHNG DID A RELINT)
CS TWO # GO TO UPFNDVAC IF INSTALL IS REQUIRED. AD UPVERB # THAT IS, IF IT'S A V70 - V72. EXTEND # GO TO UPEND73 IF IT'S A V73. BZMF UPFNDVAC
# VERB 73 BRANCH# Page 1392UPEND73 EXTEND # V73-PERFORM DP OCTAL AGC CLOCK INCREMENT
DCA UPBUFF DXCH UPBUFF +8D TC TIMEDIDL TC FALTON # ERROR- TURN ON *OPERATOR ERROR* LIGHT TC UPOUT +1 # GO TO COMMON UPDATE PROGRAM EXIT
UPFNDVAC CAF CHRPRIO # (USE EXTENDED VERB PRIORITY) TC FINDVAC # GET VAC AREA FOR 'CALL INTSTALL' EBANK= TEPHEM 2CADR UPJOB # (NOTE: THIS WILL ALSO SET EBANK FOR
TC ENDOFJOB # 'TEPHEM' UPDATE BY V70)
UPJOB TC INTPRET # THIS COULD BE A STATE VECTOR UPDATE--SO CALL # WAIT(PUT JOB TO SLEEP) IF ORBIT INT(OI) INTSTALL # IS IN PROGRESS--OR--GRAB OI AND RETURN # TO UPWAKE IF OI IS NOT IN PROGRESS.
UPWAKE EXIT
TC PHASCHNG # RESTART PROTECT(GROUP 6) OCT 04026
TC UPFLAG # SET INTEGRATION RESTART BIT ADRES REINTFLG INHINTUPPART3 EQUALS
INDEX UPVERB # BRANCH TO THE APPROPRIATE UPDATE VERB TCF +1 # ROUTINE TO ACTUALLY PERFORM THE UPDATE TCF UPEND70 # V70 TCF UPEND71 # V71 TCF UPEND72 # V72
# ROUTINE TO INCREMENT CLOCK(TIME2,TIME1) WITH CONTENTS OF DP WORD AT UPBUFF.
TIMEDIDL EXTEND QXCH UPTEMP # SAVE Q FOR RETURN CAF ZERO # ZERO AND SAVE TIME2,TIME1 ZL DXCH TIME2 DXCH UPBUFF +18D # STORE IN CASE OF OVERFLOW
CAF UPDTPHAS # DO TS L # A COM # QUICK DXCH -PHASE6 # PHASCHNG# Page 1393TIMEDIDR INHINT
CAF ZERO ZL # PICK UP INCREMENTER(AND ZERO TS MPAC +2 # IT IN CASE OF RESTARTS) AND DXCH UPBUFF +8D # STORE IT DXCH MPAC # INTO MPAC FOR TPAGREE.
EXTEND DCA UPBUFF +18D DAS MPAC # FORM SUM IN MPAC EXTEND BZF DELTATOK # TEST FOR OVERFLOW CAF ZERO DXCH UPBUFF +18D # OVERFLOW, RESTORE OLD VALUE OF CLOCK DAS TIME2 # AND TURN ON OPERATOR ERROR
TC PHASCHNG # RESTART PROTECT(GROUP 6) OCT 04026
TC UPTEMP # GO TO ERROR EXIT
DELTATOK TC TPAGREE # FORCE SIGN AGREEMENT DXCH MPAC DAS TIME2 # INCREMENT TIME2,TIME1
TC PHASCHNG # RESTART PROTECT(GROUP 6) OCT 04026
INHINT INDEX UPTEMP # (CODED THIS WAY FOR RESTART PROTECTION) TC 1 # NORMAL RETURN
# VERB 71 BRANCH
UPEND71 CAE UPBUFF +1 # SET EBANK TS EBANK # AND MASK LOW8 # CALCULATE TS UPTEMP # S-REG VALUE OF RECEIVING AREA
AD NEG3 # IN THE PROCESS OF AD COMPNUMB # PERFORMING EXTEND # THIS UPDATE BZF STORLP71 # WILL WE MASK BIT9 # OVERFLOW CCS A # INTO THE NEXT EBANK.... TCF UPERROUT # YES
CA NEG3 # NO- CALCULATE NUMBER OF AD COMPNUMB # WORDS TO BE STORED MINUS ONESTORLP71 TS MPAC # SAVE NO. OF WORDS REMAINING MINUS ONE# Page 1394 INDEX A # TAKE NEXT UPDATE WORD FROM CA UPBUFF +2 # UPBUFF AND TS L # SAVE IT IN L CA MPAC # CALCULATE NEXT AD UPTEMP # RECEIVING ADDRESS INDEX A EBANK= 1400 LXCH 1400 # UPDATE THE REGISTER BY CONTENTS OF L EBANK= TEPHEM CCS MPAC # ARE THERE ANY WORDS LEFT TO BE STORED TCF STORLP71 # YES TCF UPOUT # NO- THEN EXIT UPDATE PROGRAMADUPBFM1 ADRES UPBUFF -1 # SAME AS ADUPBUFF BUT LESS 1 (DON'T MOVE) TCF UPOUT # NO- EXIT UPDATE(HERE WHEN COMPNUMB = 3)
# VERB 72 BRANCH
UPEND72 CAF BIT1 # HAVE AN ODD NO. OF COMPONENTS MASK COMPNUMB # BEEN SENT FOR A V72 UPDATE... CCS A TCF +2 # YES TCF UPERROUT # ERROR- SHOULD BE ODD NO. OF COMPONENTS CS BIT2 AD COMPNUMBLDLOOP72 TS MPAC # NOW PERFORM THE UPDATE INDEX A CAE UPBUFF +1 # PICK UP NEXT UPDATE WORD LXCH A CCS MPAC # SET POINTER TO ECADR(MUST BE CCS) TS MPAC INDEX A CAE UPBUFF +1 # PICK UP NEXT ECADR OF REG TO BE UPDATED TS EBANK # SET EBANK MASK LOW8 # ISOLATE RELATIVE ADDRESS INDEX A EBANK= 1400 LXCH 1400 # UPDATE THE REGISTER BY CONTENTS OF L EBANK= TEPHEM CCS MPAC # ARE WE THORUGH THE V72 UPDATE... TCF LDLOOP72 # NO
# NORMAL FINISH OF P27
UPOUT EQUALS TC INTWAKEU # RELEASE GRAB OF ORBITAL INTEGRATION +1 CAE UPOLDMOD # RESTORE PRIOR P27 MODE TC NEWMODEX +3 CAF ZERO# Page 1395 TS DNLSTCOD TC UPACTOFF # TURN OFF 'UPLINK ACTIVITY' LIGHT
EXTEND # KILL GROUP 6. DCA NEG0 DXCH -PHASE6
TC ENDEXT # EXTENDED VERB EXIT
# VERB 7O BRANCH
UPEND70 EXTEND # V70 DOES THE FOLLOWING WITH DP DELTA DCS UPBUFF # TIME IN UPBUFF DXCH UPBUFF +8D TC TIMEDIDL # DECREMENT AGC CLOCK
TC UPERROUT # ERROR WHILE DECREMENTING CLOCK -- EXIT
EBANK= TEPHEM EXTEND DCS UPBUFF # COPY DECREMENTERS FOR DXCH UPBUFF +10D # RESTART PROTECTION EXTEND DCS UPBUFF DXCH UPBUFF +12D
TC PHASCHNG # RESTART PROTECT(GROUP 6) OCT 04026
CAF ZERO ZL DXCH UPBUFF +10D # DECREMENT CSM STATE VECTOR TIME DAS TETCSM
CAF ZERO ZL DXCH UPBUFF +12D # DECREMENT LEM STATE VECTOR TIME DAS TETLEM
CAF ZERO ZL DXCH UPBUFF DAS TEPHEM +1 # INCREMENT TP TEPHEM ADS TEPHEM
TC PHASCHNG # RESTART PROTECT(GROUP 6) OCT 04026
EBANK= UPBUFF# Page 1396 TC UPOUT # GO TO STANDARD UPDATE PROGRAM EXIT
# ERROR SEQUENCE
UPERROUT TC FALTON # TURN ON *OPERATOR ERROR* LIGHT TCF UPOUT # GO TO COMMON UPDATE PROGRAM EXIT
+2 TC FALTON # TURN ON 'OPERATOR ERROR' LIGHT TC UPACTOFF # TURN OFF'UPLINK ACTIVITY'LIGHT TC ENDEXT # EXTENDED VERB EXIT # (THE PURPOSE OF UPERROUT +2 EXIT IS # TO PROVIDE AN ERROR EXIT WHICH DOES NOT # RESET ANY RESTART GROUPS)
# :UPACTOFF: IS A ROUTINE TO TURN OFF UPLINK ACTIVITY LIGHT ON ALL EXITS FROM UPDATE PROGRAM(P27).
UPACTOFF CS BIT3 EXTEND # TURN OFF UPLINK ACTIVITY LIGHT WAND DSALMOUT # (BIT 3 OF CHANNEL 11) TC Q