swh:1:snp:92f3f585b9ae79620ad8c41a332d6329b31fd381
Raw File
Tip revision: 078c79d8734a9ed2860303a7c1662004284fe853 authored by Ron Burkey on 07 August 2022, 15:04:04 UTC
Fixed a potential string-overflow bug in yaASM. Removed timestamps from
Tip revision: 078c79d
T4RUPT_PROGRAM.agc
### FILE="Main.annotation"
## Copyright:   Public domain.
## Filename:    T4RUPT_PROGRAM.agc
## Purpose:     A section of Sunburst revision 37, or Shepatin revision 0.
##              It is part of an early development version of the software
##              for Apollo Guidance Computer (AGC) on the unmanned Lunar
##              Module (LM) flight Apollo 5. Sunburst 37 was the program
##              upon which Don Eyles's offline development program Shepatin
##              was based; the listing herein transcribed was actually for
##              the equivalent revision 0 of Shepatin.
##              This file is intended to be a faithful transcription, except
##              that the code format has been changed to conform to the
##              requirements of the yaYUL assembler rather than the
##              original YUL assembler.
## Reference:   pp. 90-123
## Assembler:   yaYUL
## Contact:     Ron Burkey <info@sandroid.org>.
## Website:     www.ibiblio.org/apollo/index.html
## Mod history: 2017-05-24 MAS  Created from Sunburst 120.
##              2017-05-29 HG   Transcribed
##              2017-06-15 HG   Fix operator TCF  -> TC
##                                           CS   -> CAF
##		2017-06-21 RSB	Proofed using octopus/ProoferComments.

## Page 90
                BANK            12
                EBANK=          M11
T4RUPT          TS              BANKRUPT

                CA              ZERO
                EXTEND                                  # ZERO OUT0 EVERY T4RUPT.
                WRITE           OUT0

                INDEX           T4LOC                   # NORMALLY TO NORMT4, BUT TO LMPRESET OR
                TCF             0                       # DSKYRSET AFTER OUT0 COMMAND.

NORMT4          CCS             DSRUPTSW                # GOES 7(-1)0.
                TCF             +2
                CAF             SEVEN
                TS              DSRUPTSW

                TCF             T4RUPTA

LMPRESET        CAF             LNORMT4                 # DO THINGS IN THIS ORDER FOR RESTART
                TS              T4LOC                   # PROTECTION.
                CA              LMPOUTT                 # NEW VALUE OF OUTPUT POINTER.
                TS              LMPOUT
                CS              ONE                     # TO SHOW OUTPUT POINTER ALREADY UPDATED.
                TS              LMPOUTT
                CAF             90MRUPT
                TCF             +4

DSKYRSET        CAF             LNORMT4                 # 20 MS ON / 100 MS OFF.
                TS              T4LOC
                CAF             100MRUPT
 +4             TS              TIME4
                TCF             NOQRSM

                BLOCK           02
90MRUPT         DEC             16375
100MRUPT        DEC             16374
LNORMT4         ADRES           NORMT4
74K             OCT             74000

# RELTAB IS A PACKED TABLE. RELAYWORD CODE IN UPPER 4 BITS, RELAY CODE
# IN LOWER 5 BITS.

RELTAB          OCT             04025
                OCT             10003
                OCT             14031
                OCT             20033
                OCT             24017
                OCT             30036
                OCT             34034
                OCT             40023
                OCT             44035

## Page 91
                OCT             50037
                OCT             54000
RELTAB11        OCT             60000

## Page 92
# SWITCHED-BANK PORTION.

                BANK            12
T4RUPTA         EXTEND
                QXCH            QRUPT

                INDEX           LMPOUT                  # SEE IF LMP COMMAND TO BE PUT OUT.
                CCS             LMPCMD
                TCF             CDRVE                   # BIT 15 = 1 AND (UP TO) BITS 1 - 11
                TCF             CDRVE                   # CONTAIN THE COMMAND.

                CAF             LLMPRS                  # SET T4 FOR SPECIAL RUPT AND SHOW LMP
                TS              T4LOC                   # COMMAND IN PROGRESS IF RESTART.

                CAF             LOW11
                INDEX           LMPOUT
                MASK            LMPCMD                  # LEAVE COMMAND PORTION INTACT.
                INDEX           LMPOUT
                TS              LMPCMD
                AD              74K

                EXTEND
                WRITE           OUT0

                CCS             LMPOUT                  # PREDICT NEW VALUE OF LMPOUT BUT DONT
                TCF             +2                      # UPDATE IT UNTIL COMMAND SENT (IN CASE OF
                CAF             SEVEN                   # RESTART.)
                TS              LMPOUTT

                CAF             30MRUPT
                TCF             SETTIME4

CDRVE           CCS             DSPTAB          +11D
                TC              DSPOUT
                TC              DSPOUT

                XCH             DSPTAB          +11D
                MASK            LOW11
                TS              DSPTAB          +11D
                AD              RELTAB11
                TC              DSPLAYC

## Page 93
# DSPOUT PROGRAM. PUTS OUT DISPLAYS.

DSPOUT          CCS             NOUT                    # DRIVE DISPLAY SYSTEM RELAYS.
                TCF             +3

NODSPOUT        CAF             120MRUPT                # SET FOR RUPT IN 120 MS IF NO RELAYS.
                TCF             SETTIME4

                TS              NOUT
                CS              ZERO
                TS              DSRUPTEM                # SET TO -0 FOR 1ST PASS THRU DSPTAB
                XCH             DSPCNT
                AD              NEG0                    # TO PREVENT +0
                TS              DSPCNT
DSPSCAN         INDEX           DSPCNT
                CCS             DSPTAB
                CCS             DSPCNT                  # IF DSPTAB ENTRY +, SKIP
                TC              DSPSCAN         -2      # IF DSPCNT +, AGAIN
                TC              DSPLAY                  # IF DSPTAB ENTRY -, DISPLAY
TABLNTH         OCT             12                      # DEC 10   LENGTH OF DSPTAB
                CCS             DSRUPTEM                # IF DSRUPTEM=+0,2ND PASS THRU DSPTAB
120MRUPT        DEC             16372                   # (DSPCNT = 0). +0 INTO NOUT.
                TS              NOUT
                TCF             NODSPOUT
                TS              DSRUPTEM                # IF DSRUPTEM=-0,1ST PASS THRU DSPTAB
                CAF             TABLNTH                 # (DSPCNT=0). +0 INTO DSRUPTEM. PASS AGAIN

                TC              DSPSCAN         -1

DSPLAY          AD              ONE
                INDEX           DSPCNT
                TS              DSPTAB                  # REPLACE POSITIVELY
                MASK            LOW11                   # REMOVE BITS 12 TO 15
                TS              DSRUPTEM
                CAF             HI5
                INDEX           DSPCNT
                MASK            RELTAB                  # PICK UP BITS 12 TO 15 OF RELTAB ENTRY
                AD              DSRUPTEM
DSPLAYC         EXTEND
                WRITE           OUT0

                CAF             LDSKYRS
                TS              T4LOC
                CAF             20MRUPT

SETTIME4        TS              TIME4

## Page 94
#          JUMP TO APPROPRIATE ONCE-PER SECOND (.96 SEC ACTUALLY) ACTIVITY

T4JUMP          INDEX           DSRUPTSW
                TCF             +1

                TC              ALTOUT

                TC              NORRGMON                # WAS TCF RRAUTCHK (NO RADAR IN 206).

                TCF             IMUMON
                TCF             DAPT4S
                TC              ALTROUT
                TC              NORRGMON                # WAS TCF RRAUTCHK (NO RADAR IN 206).
                TCF             IMUMON
                TCF             DAPT4S

LDSKYRS         ADRES           DSKYRSET
LLMPRS          ADRES           LMPRESET

30MRUPT         DEC             16381
20MRUPT         DEC             16382

## Page 95
# THIS ROUTINE SERVICES THE METER OUTPUTS.



# DIDFLG INDICATES THE STATE OF THE PROGRAM..............
# IF GREATER THAN ZERO, THEN UNABLE TO DISPLAY DATA
# IF EQUAL TO ZERO, THEN THE PROGRAM IS IN USE
# IF LESS THAN ZERO, THEN THE PROGRAM IS ABLE TO BE USED............

ALTOUT          TC              DISINDAT
                CS              BIT2
                EXTEND
                WAND            14                      # SET UP OUTPUT FOR ALTITUDE
                CCS             ALT                     # -1 IF OLD DATA TO BE EXTRAPOLATED.

                TCF             +4                      # NEW DATA.
                TCF             +3
                TCF             OLDDATA

                TS              ALT                     # CHANGE -0 IN ALT TO +0.
                CS              ONE                     # RESET ALTSAVE.
                DXCH            ALT
ZDATA2          DXCH            ALTSAVE
                TCF             NEWDATA

OLDDATA         CA              ALTRATE                 # USE ALTRATE TO EXTRAPOLATE.
                EXTEND
                MP              ARTOA                   # RATE APPLIES FOR .96 SEC.
                AD              ALTSAVE         +1
                TS              ALTSAVE         +1      # AND MAYBE SKIP.
                CAF             ZERO
                ADS             ALTSAVE

                CAF             POSMAX                  # FORCE SIGN AGREEMENT ASSUMING ALTSAVE IS
                AD              ONE                     # NOT NEGATIVE. IF IT IS, THE FINAL TS
                AD              ALTSAVE         +1      # WILL NOT SKIP AND WE CAN SET ALTSAVE TO
                TS              ALTSAVE         +1      # ZERO IN THAT CASE.
                CAF             ZERO

                AD              POSMAX
                AD              ALTSAVE
                TS              ALTSAVE
                TCF             ZERODATA                # ALTSAVE NEGATIVE - SET TO ZERO.

NEWDATA         CCS             ALTSAVE                 # MAKE UP 15 BIT UNSIGNED OUTPUT.
                CAF             BIT15                   # MAJOR PART +1 OR +0.
                AD              ALTSAVE         +1
METEROUT        TS              ALTM
                CAF             BITSET
                EXTEND
                WOR             14
                TCF             DONEDID

## Page 96
ALTROUT         TC              DISINDAT
                CAF             BIT2

                EXTEND
                WOR             14                      # SET UP OUTPUT FOR ALT. RATE
                CA              ALTRATE
                TCF             METEROUT

DISINDAT        CCS             DIDFLG
                TCF             ALLDONE                 # NOTE THAT THIS SHOULD ALWAYS GO TO
                                                        # ALLDONE AND NOT DONEDID SINCE THE
                                                        # AVAILABILITY OF DATA MAY DISAPPEAR WHILE
                                                        # THE ASTRONAUT HAS THE BUTTON DOWN.
                NOOP
                CAF             BIT6
                EXTEND
                RAND            30                      # CHECK DISPLAY INERTIAL DATA BIT
                CCS             A
                TCF             ALLDONE
                CCS             DIDFLG
                NOOP
                TCF             GOAGN

FIRSTIME        CAF             BIT8
                EXTEND
                WOR             12                      # ENABLE DISPLAY INERTIAL DATA

                CAF             ZERO
                TS              DIDFLG
                TS              LASTXCMD
                TS              LASTYCMD
                CAF             SIX
                TC              WAITLIST
                EBANK=          M11
                2CADR           INTLZE

                TC              DONEDID

INTLZE          CAF             BIT2
                EXTEND
                WOR             12                      # ENABLE RR ERROR COUNTER
                TC              TASKOVER

GOAGN           CS              LASTXCMD
                AD              FORVEL
                TS              OPTXCMD
                CA              FORVEL
                TS              LASTXCMD
                CS              LASTYCMD
                AD              LATVEL

                TS              OPTYCMD
                CA              LATVEL

## Page 97
                TS              LASTYCMD
                TC              Q

ALLDONE         CS              DIDRESET                # REMOVE DISPLAY INERTIAL DATA AND ECTR.
                EXTEND
                WAND            12                      # RESET RR ERROR COUNTER
DONEDID         TCF             RESUME                  # ** FIX LATER**

ZERODATA        CAF             ZERO
                TS              L
                TCF             ZDATA2

ARTOA           DEC             .20469                  # ALT DUE TO ALTRATE FOR .96 SEC.
BITSET          OCT             6004

DIDRESET        OCT             202

## Page 98
# PROGRAM NAME:  IMUMON

# FUNCTIONAL DESCRIPTION:  THIS PROGRAM IS ENTERED EVERY 480 MS.  IT DETECTS CHANGES OF THE IMU STATUS BITS IN
# CHANNEL 30 AND CALLS THE APPROPRIATE SUBROUTINES.  THE BITS PROCESSED AND THEIR RELEVANT SUBROUTINES ARE:

#          FUNCTION               BIT    SUBROUTINE CALLED
#          --------               ---    -----------------
#          TEMP IN LIMITS          15    TLIM
#          ISS TURN-ON REQUEST     14    ITURNON
#          IMU FAIL                13    IMUFAIL (SETISSW)
#          IMU CDU FAIL            12    ICDUFAIL (SETISSW)
#          IMU CAGE                11    IMUCAGE
#          IMU OPERATE              9    IMUOP

#          THE LAST SAMPLED STATE OF THESE BITS IS LEFT IN IMODES30.  ALSO, EACH SUBROUTINE CALLED FINDS THE NEW
# VALUE OF THE BIT IN A, WITH Q SET TO THE PROPER RETURN LOCATION, NXTIFAIL.

# CALLING SEQUENCE:  T4RUPT EVERY 480 MILLISECONDS.

# JOBS OR TASKS INITIATED:  NONE.

# SUBROUTINES CALLED:  TLIM, ITURNON, SETISSW, IMUCAGE, IMUOP.

# ERASABLE INITIALIZATION:
#          FRESH START OR RESTART WITH NO GROUPS ACTIVE: C(IMODES30) = OCT 37411.
#          RESTART WITH ACTIVE GROUPS: C(IMODES30) = (B(IMODES30)AND(OCT 00035)) PLUS OCT 37400.
#                                      THIS LEAVES IMU FAIL BITS INTACT.

# ALARMS:  NONE.

# EXIT:  TNONTEST.

# OUTPUT:  UPDATED IMODES30 WITH CHANGES PROCESSED BY APPROPRIATE SUBROUTINE.

IMUMON          CAF             BITS4&5                 # DISABLE DAP IF ZERO ICDU OR COARSE ALIGN
                EXTEND
                RAND            12
                EXTEND

                BZMF            IMUNON1
                EXTEND
                DCA             T4DAP
                DXCH            T5ADR

IMUNON1         CA              IMODES30                # SEE IF THERE HAS BEEN A CHANGE IN THE
                EXTEND                                  # RELEVANT BITS OF CHAN 30.
                RXOR            30
                MASK            30RDMSK
                EXTEND
                BZF             TNONTEST                # NO CHANGE IN STATUS.

## Page 99
                TS              RUPTREG1                # SAVE BITS WHICH HAVE CHANGED.
                LXCH            IMODES30                # UPDATE IMODES30.
                EXTEND
                RXOR            L
                TS              IMODES30

                CS              ONE
                XCH             RUPTREG1
                EXTEND
                BZMF            TLIM                    # CHANGE IN IMU TEMP.
                TCF             NXTIFBIT                # BEGIN BIT SCAN.

 -1             AD              ONE                     # (RE-ENTERS HERE FROM NXTIFAIL.)
NXTIFBIT        INCR            RUPTREG1                # ADVANCE BIT POSITION NUMBER.
 +1             DOUBLE
                TS              A                       # SKIP IF OVERFLOW.
                TCF             NXTIFBIT                # LOOK FOR BIT.

                XCH             RUPTREG2                # SAVE OVERFLOW-CORRECTED DATA.
                INDEX           RUPTREG1                # SELECT NEW VALUE OF THIS BIT.

                CAF             BIT14
                MASK            IMODES30
                INDEX           RUPTREG1
                TC              IFAILJMP

NXTIFAIL        CCS             RUPTREG2                # PROCESS ANY ADDITIONAL CHANGES.
                TCF             NXTIFBIT        -1

## Page 100
# PROGRAM NAME:  TNONTEST.

# FUNCTIONAL DESCRIPTION:  THIS PROGRAM HONORS REQUESTS FOR ISS INITIALIZATION.  ISS TURN-ON (CHANNEL 30 BIT 14)
# AND ISS OPERATE (CHANNEL 30 BIT 9) REQUESTS ARE TREATED AS A PAIR AND PROCESSING TAKES PLACE .480 SECONDS
# AFTER EITHER ONE APPEARS.  THIS INITIALIZATION TAKES ON ONE OF THE FOLLOWING THREE FORMS:

#          1)  ISS TURN-ON:  IN THIS SITUATION THE COMPUTER IS OPERATING WHEN THE ISS IS TURNED ON.  NOMINALLY,
#          BOTH ISS TURN-ON AND ISS OPERATE APPEAR.  THE PLATFORM IS CAGED FOR 90 SECONDS AND THE ICDU'S ZEROED
#          SO THAT AT THE END OF THE PROCESS THE GIMBAL LOCK MONITOR WILL FUNCTION PROPERLY.

#          2)  ICDU INITIALIZATION:  IN THIS CASE THE COMPUTER WAS PROBABLY TURNED ON WITH THE ISS IN OPERATE OR
#          A FRESH START WAS DONE WITH THE ISS IN OPERATE.  IN THIS CASE ONLY ISS OPERATE IS ON.  THE ICDU'S ARE
#          ZEROED SO THE GIMBAL LOCK MONITOR WILL FUNCTION.  AN EXCEPTION IS IF THE ISS IS IN GIMBAL LOCK AFTER
#          A RESTART, THE ICDU'S WILL NOT BE ZEROED.

#          3)  RESTART WITH RESTARTABLE PROGRAM USING THE IMU:  IN THIS CASE, NO INITIALIZATION TAKES PLACE SINCE
#          IT IS ASSUMED THAT THE USING PROGRAM DID THE INITIALIZATION AND THEREFORE T4RUPT SHOULD NOT INTERFERE.

# IMODES30 BIT 7 IS SET = 1 BY THE FIRST BIT (CHANNEL 30 BIT 14 OR 9) WHICH ARRIVES.  FOLLOWING THIS. TNONTEST IS
# ENTERED, FINDS BIT 7 = 1 BUT BIT 8 = 0, SO IT SETS BIT 8 = 1 AND EXITS.  THE NEXT TIME IT FINDS BIT 8 = 1 AND
# PROCEEDS, SETTING BITS 8 AND 7 = 0.  AT PROCTNON, IF ISS TURN-ON REQUEST IS PRESENT, THE ISS IS CAGED (ZERO +
# COARSE).  IF ISS OPERATE IS NOT PRESENT PROGRAM ALARM 00213 IS ISSUED.  AT THE END OF A 90 SECOND CAGE, BIT 2
# OF IMODES30 IS TESTED.  IF IT IS = 1, ISS TURN-ON WAS NOT PRESENT FOR THE ENTIRE 90 SECONDS.  IN THAT CASE, IF
# THE ISS TURN-ON REQUEST IS PRESENT THE 90 SECOND WAIT IS REPEATED, OTHERWISE NO ACTION OCCURS UNLESS A PROGRAM
# WAS WAITING FOR THE INITIALIZATION IN WHICH CASE THE PROGRAM IS GIVEN AN IMUSTALL ERROR RETURN.  IF THE DELAY
# WENT PROPERLY, THE ISS DELAY OUTBIT IS SENT AND THE ICDU'S ZEROED.  A TASK IS INITIATED TO REMOVE THE PIPA FAIL

# INHIBIT BIT IN 10.24 SECONDS.  IF A MISSION PROGRAM WAS WAITING IT IS INFORMED VIA ENDIMU.

# AT PROCTNON, IF ONLY ISS OPERATE IS PRESENT (OPONLY), THE CDU'S ARE ZEROED UNLESS THE PLATFORM IS IN COARSE
# ALIGN (= GIMBAL LOCK HERE) OR A MISSION PROGRAM IS USING THE IMU (IMUSEFLG = 1).

# CALLING SEQUENCE:  T4RUPT EVERY 480 MILLISECONDS AFTER IMUMON.

# JOBS OR TASKS INITIATED:  1) ENDTNON, 90 SECONDS AFTER CAGING STARTED.  2) ISSUP, 4 SECONDS AFTER CAGING DONE.
#          3) PFAILOK, 10.24 SECONDS AFTER INITIALIZATION COMPLETED.  4) UNZ2, 320 MILLISECONDS AFTER ZEROING
#          STARTED.

# SUBROUTINES CALLED:  CAGESUB, CAGESUB2, ZEROICDU, ENDIMU, IMUBAD, NOATTOFF, SETISSW, VARDELAY.

# ERASABLE INITIALIZATION:  SEE IMUMON.

# ALARMS:  PROGRAM ALARM 00213 IF ISS TURN-ON REQUESTED WITHOUT ISS OPERATE.

# EXIT:  ENDTNON EXITS TO C33TEST.  TASKS HAVING TO DO WITH INITIALIZATION EXIT AS FOLLOWS:  MISSION PROGRAM
# WAITING AND INITIALIZATION COMPLETE, EXIT TO ENDIMU, MISSION PROGRAM WAITING AND INITIALIZATION FAILED, EXIT TO
# IMUBAD, IMU NOT IN USE, EXIT TO TASKOVER.

# OUTPUT:  ISS INITIALIZED.

TNONTEST        CS              IMODES30                # AFTER PROCESSING ALL CHANGES, SEE IF IT

## Page 101
                MASK            BIT7                    # IS TIME TO ACT ON A TURN-ON SEQUENCE.
                CCS             A
                TCF             C33TEST                 # NO - EXAMINE CHANNEL 33.

                CAF             BIT8                    # SEE IF FIRST SAMPLE OR SECOND.
                MASK            IMODES30
                CCS             A
                TCF             PROCTNON                # REACT AFTER SECOND SAMPLE.

                CAF             BIT8                    # IF FIRST SAMPLE, SET BIT TO REACT NEXT
                ADS             IMODES30                # TIME.
                TCF             C33TEST

#          PROCESS IMU TURN-ON REQUESTS AFTER WAITING 1 SAMPLE FOR ALL SIGNALS TO ARRIVE.

PROCTNON        CS              BITS7&8
                MASK            IMODES30
                TS              IMODES30
                MASK            BIT14                   # SEE IF TURN-ON REQUEST.
                CCS             A
                TCF             OPONLY                  # OPERATE ON ONLY.

                CS              IMODES30                # IF TURN-ON REQUEST, WE SHOULD HAVE IMU
                MASK            BIT9                    # OPERATE.
                CCS             A
                TCF             +3

                TC              ALARM                   # ALARM IF NOT.
                OCT             213

 +3             TC              CAGESUB
                CAF             90SECS

                TC              WAITLIST
                EBANK=          M11
                2CADR           ENDTNON

                TCF             C33TEST

RETNON          CAF             90SECS
                TC              VARDELAY

ENDTNON         CS              BIT2                    # RESET TURN-ON REQUEST FAIL BIT.
                MASK            IMODES30
                XCH             IMODES30
                MASK            BIT2                    # IF IT WAS OFF, SEND ISS DELAY COMPLETE.
                EXTEND
                BZF             ENDTNON2

                CAF             BIT14                   # IF IT WAS ON AND TURN-ON REQUEST NOW
                MASK            IMODES30                # PRESENT, RE-ENTER 90 SEC DELAY IN WL.

## Page 102
                EXTEND
                BZF             RETNON

                CS              STATE                   # IF IT IS NOT ON NOW, SEE IF A PROG WAS
                MASK            IMUSEFLG                # WAITING.
                CCS             A
                TCF             TASKOVER
                TC              POSTJUMP
                CADR            IMUBAD                  # UNSUCCESSFUL TURN-ON.

ENDTNON2        CAF             BIT15                   # SEND ISS DELAY COMPLETE.
                EXTEND
                WOR             CHAN12

                TC              IBNKCALL                # TURN OFF NO ATT LAMP.
                CADR            NOATTOFF

UNZ2            TC              ZEROICDU

                CS              BITS4&5                 # REMOVE ZERO AND COARSE.
                EXTEND
                WAND            CHAN12

                CAF             4SECS                   # WAIT 4 SECS FOR COUNTERS TO FIND GIMBALS
                TC              VARDELAY

ISSUP           CS              OCT54                   # REMOVE CAGING, IMU FAIL INHIBIT, AND
                MASK            IMODES30                # ICDUFAIL INHIBIT FLAGS.
                TS              IMODES30

                TC              SETISSW                 # ISS WARNING MIGHT HAVE BEEN INHIBITED.

                CS              BIT15                   # REMOVE IMU DELAY COMPLETE DISCRETE.
                EXTEND
                WAND            12

                CAF             BIT11                   # DONT ENABLE PROG ALARM ON PIP FAIL FOR
                TC              WAITLIST                # ANOTHER 10 SECS.

                EBANK=          M11
                2CADR           PFAILOK

                CS              STATE                   # SEE IF ANYONE IS WAITING FOR THE IMU AT
                MASK            IMUSEFLG                # IMUZERO. IF SO, WAKE THEM UP.
                CCS             A
                TCF             TASKOVER

                TC              POSTJUMP
                CADR            ENDIMU

OPONLY          CAF             BIT4                    # IF OPERATE ON ONLY, AND WE ARE IN COARSE

## Page 103
                EXTEND                                  # ALIGN, DONT ZERO THE CDUS BECAUSE WE
                RAND            CHAN12                  # MIGHT BE IN GIMBAL LOCK.
                CCS             A
                TCF             C33TEST

                CAF             IMUSEFLG                # OTHERWISE, ZERO THE COUNTERS
                MASK            STATE                   # UNLESS SOMEONE IS USING THE IMU.
                CCS             A
                TCF             C33TEST

                TC              CAGESUB2                # SET TURNON FLAGS.

                CAF             BIT5
                EXTEND
                WOR             12

                CAF             BIT6                    # WAIT 300 MS FOR AGS TO RECEIVE SIGNAL.
                TC              WAITLIST
                EBANK=          M11
                2CADR           UNZ2

                TCF             C33TEST

## Page 104
# PROGRAM NAME:  C33TEST

# FUNCTIONAL DESCRIPTION:  THIS PROGRAM MONITORS THREE FLIP-FLOP INBITS OF CHANNEL 33 AND CALLS THE APPROPRIATE
# SUBROUTINE TO PROCESS A CHANGE.  IT IS ANALOGOUS TO IMUMON, WHICH MONITORS CHANNEL 30, EXCEPT THAT IT READS
# CHANNEL 33 WITH A WAND INSTRUCTION BECAUSE A 'WRITE' PULSE IS REQUIRED TO RESET THE FLIP-FLOPS.  THE BITS
# PROCESSED AND THE SUBROUTINES CALLED ARE:

#          BIT    FUNCTION                SUBROUTINE
#          ---    --------                ----------
#           13    PIPA FAIL               PIPFAIL
#           12    DOWNLINK TOO FAST       DNTMFAST
#           11    UPLINK TOO FAST         UPTMFAST

# UPON ENTRY TO THE SUBROUTINE, THE NEW BIT STATE IS IN A.

# CALLING SEQUENCE:  EVERY 480 MILLISECONDS AFTER TNONTEST.

# JOBS OR TASKS INITIATED:  NONE.

# SUBROUTINES CALLED:  PIPFAIL, DNTMFAST AND UPTMFAST ON BIT CHANGES.

# ERASABLE INITIALIZATION:  C(IMODES33) = OCT 16000 ON A FRESH START OR RESTART, THEREFORE, THESE ALARMS WILL
# REAPPEAR IF THE CONDITIONS PERSIST.

# ALARMS:  NONE.

# EXIT:  GLOCKMON.

# OUTPUT:  UPDATED BITS 13, 12 AND 11 OF IMODES33 WITH CHANGES PROCESSED.

C33TEST         CA              IMODES33                # SEE IF RELEVANT CHAN 33 BITS HAVE
                MASK            33RDMSK
                TS              L                       # CHANGED.
                CAF             33RDMSK
                EXTEND
                WAND            33                      # RESETS FLIP-FLOP INPUTS.
                EXTEND
                RXOR            L
                EXTEND
                BZF             GLOCKMON                # ON NO CHANGE.

                TS              RUPTREG1                # SAVE BITS WHICH HAVE CHANGED.
                LXCH            IMODES33
                EXTEND
                RXOR            L
                TS              IMODES33                # UPDATED IMODES33.

                CAF             ZERO
                XCH             RUPTREG1
                DOUBLE

## Page 105
                TCF             NXTIBT          +1      # SCAN FOR BIT CHANGES.

 -1             AD              ONE
NXTIBT          INCR            RUPTREG1
 +1             DOUBLE
                TS              A                       # (CODING IDENTICAL TO CHAN 30).
                TCF             NXTIBT

                XCH             RUPTREG2
                INDEX           RUPTREG1                # GET NEW VALUE OF BIT WHICH CHANGED.
                CAF             BIT13
                MASK            IMODES33
                INDEX           RUPTREG1
                TC              C33JMP

NXTFL33         CCS             RUPTREG2                # PROCESS POSSIBLE ADDITIONAL CHANGES.
                TCF             NXTIBT          -1

## Page 106
# PROGRAM NAME:  GLOCKMON

# FUNCTIONAL DESCRIPTION:  THIS PROGRAM MONITORS THE CDUZ COUNTER TO DETERMINE WHETHER THE ISS IS IN GIMBAL LOCK
# AND TAKES ACTION IF IT IS.  THREE REGIONS OF MIDDLE GIMBAL ANGLE (MGA) ARE USED:

#          1) ABS(MGA) LESS THAN OR EQUAL TO 70 DEGREES - NORMAL MODE.
#          2) ABS(MGA) GREATER THAN 70 DEGREES AND LESS THAN OR EQUAL TO 85 DEGREES - GIMBAL LOCK LAMP TURNED ON.
#          3) ABS(MGA) GREATER THAN 85 DEGREES - ISS PUT IN COARSE ALIGN AND NO ATT LAMP TURNED ON.

# CALLING SEQUENCE:  EVERY 480 MILLISECONDS AFTER C33TEST.

# JOBS OR TASKS INITIATED:  NONE.

# SUBROUTINES CALLED:  1) SETCOARS WHEN ABS(MGA) GREATER THAN 85 DEGREES AND ISS NOT IN COARSE ALIGN.
#                      2) LAMPTEST BEFORE TURNING OFF GIMBAL LOCK LAMP.

# ERASABLE INITIALIZATION:
#          1) FRESH START OR RESTART WITH NO GROUPS ACTIVE:  C(CDUZ) = 0, IMODES30 BIT 6 = 0, IMODES33 BIT 1 =  0.
#          2) RESTART WITH GROUPS ACTIVE:  SAME AS FRESH START EXCEPT C(CDUZ) NOT CHANGED SO GIMBAL MONITOR
#                                          PROCEEDS AS BEFORE.

# ALARMS:  1) MGA REGION (2) CAUSES GIMBAL LOCK LAMP TO BE LIT.
#          2) MGA REGION (3) CAUSES THE ISS TO BE PUT IN COARSE ALIGN AND THE NO ATT LAMP TO BE LIT IF EITHER NOT
#             SO ALREADY.

GLOCKMON        CCS             CDUZ
                TCF             GLOCKCHK                # SEE IF MAGNITUDE OF MGA IS GREATER THAN
                TCF             SETGLOCK                # 70 DEGREES.
                TCF             GLOCKCHK
                TCF             SETGLOCK

GLOCKCHK        AD              -70DEGS
                EXTEND
                BZMF            SETGLOCK        -1      # NO LOCK.

                AD              -15DEGS                 # SEE IF ABS(MGA) GREATER THAN 85 DEGREES.
                EXTEND
                BZMF            NOGIMRUN

                CAF             BIT4                    # IF SO, SYSTEM SHOULD BE IN COARSE ALIGN
                EXTEND                                  # TO PREVENT GIMBAL RUNAWAY.
                RAND            12
                CCS             A
                TCF             NOGIMRUN

                TC              IBNKCALL
                CADR            SETCOARS

NOGIMRUN        CAF             BIT6                    # TURN ON GIMBAL LOCK LAMP.
                TCF             SETGLOCK

## Page 107
 -1             CAF             ZERO
SETGLOCK        AD              DSPTAB          +11D    # SEE IF PRESENT STATE OF GIMBAL LOCK LAMP
                MASK            BIT6                    # AGREES WITH DESIRED STATE BY HALF ADDING
                EXTEND                                  # THE TWO.
                BZF             GLOCKOK                 # OK AS IS.

                MASK            DSPTAB          +11D    # IF OFF, DONT TURN ON IF IMU BEING CAGED.
                CCS             A
                TCF             GLAMPTST                # TURN OFF UNLESS LAMP TEST IN PROGRESS.

                CAF             BIT6
                MASK            IMODES30
                CCS             A
                TCF             GLOCKOK

GLINVERT        CS              DSPTAB          +11D    # INVERT GIMBAL LOCK LAMP.
                MASK            BIT6
                AD              BIT15                   # TO INDICATE CHANGE IN DSPTAB +11D.
                XCH             DSPTAB          +11D

                MASK            OCT37737
                ADS             DSPTAB          +11D
                TCF             GLOCKOK

GLAMPTST        TC              LAMPTEST                # TURN OFF UNLESS LAMP TEST IN PROGRESS.
                TCF             GLOCKOK
                TCF             GLINVERT

-70DEGS         DEC             -.38888                 # -70 DEGREES SCALED IN HALF-REVOLUTIONS.
-15DEGS         DEC             -.08333
OCT37737        OCT             37737

## Page 108
# PROGRAM NAME:  TLIM.

# FUNCTIONAL DESCRIPTION:  THIS PROGRAM MAINTAINS THE TEMP LAMP (BIT 4 OF CHANNEL 11) ON THE DSKY TO AGREE WITH
# THE TEMP SIGNAL FROM THE ISS (BIT 15 OF CHANNEL 30).  HOWEVER, THE LIGHT WILL NOT BE TURNED OFF IF A LAMP TEST
# IS IN PROGRESS.

# CALLING SEQUENCE:  CALLED BY IMUMON ON A CHANGE OF BIT 15 OF CHANNEL 30.

# JOBS OR TASKS INITIATED:  NONE.

# SUBROUTINES CALLED:  LAMPTEST.

# ERASABLE INITIALIZATION:  FRESH START AND RESTART TURN THE TEMP LAMP OFF.

# ALARMS:  TEMP LAMP TURNED ON WHEN IMU TEMP GOES OUT OF LIMITS.

# EXIT:  NXTIFAIL.

# OUTPUT:  SERVICE OF TEMP LAMP.                                          IN A, EXCEPT FOR TLIM.

TLIM            MASK            POSMAX                  # REMOVE BIT FROM WORD OF CHANGES AND SET
                TS              RUPTREG2                # DSKY TEMP LAMP ACCORDINGLY.

                CCS             IMODES30
                TCF             TEMPOK
                TCF             TEMPOK

                CAF             BIT4                    # TURN ON LAMP.
                EXTEND
                WOR             11
                TCF             NXTIFAIL

TEMPOK          TC              LAMPTEST                # IF TEMP NOW OK, DONT TURN OFF LAMP IF
                TCF             NXTIFAIL                # LAMP TEST IN PROGRESS.

                CS              BIT4
                EXTEND
                WAND            11
                TCF             NXTIFAIL

## Page 109
# PROGRAM NAME:  ITURNON.

# FUNCTIONAL DESCRIPTION:  THIS PROGRAM IS CALLED BY IMUMON WHEN A CHANGE OF BIT 14 OF CHANNEL 30 (ISS TURN-ON
# REQUEST) IS DETECTED.  UPON ENTRY, ITURNON CHECKS IF A TURN-ON DELAY SEQUENCE HAS FAILED, AND IF SO, IT EXITS.
# IF NOT, IT CHECKS WHETHER THE TURN-ON REQUEST CHANGE IS TO ON OR OFF.  IF ON, IT SETS BIT7 OF IMODES30 TO 1 SO
# THAT TNONTEST WILL INITIATE THE ISS INITIALIZATION SEQUENCE.  IF OFF, THE TURN-ON DELAY SIGNAL, CHANNEL 12 BIT
# 15, IS CHECKED AND IF IT IS ON, ITURNON EXITS.  IF THE DELAY SIGNAL IS OFF, PROGRAM ALARM 00207 IS ISSUED, BIT 2
# OF IMODES30 IS SET TO 1 AND THE PROGRAM EXITS.

#          THE SETTING OF BIT 2 OF IMODES30 (ISS DELAY SEQUENCE FAIL) INHIBITS THIS ROUTINE AND IMUOP FROM
# PROCESSING ANY CHANGES.  THIS BIT WILL BE RESET BY THE ENDTNON ROUTINE WHEN THE CURRENT 90 SECOND DELAY PERIOD
# ENDS.

# CALLING SEQUENCE:  FROM IMUMOM WHEN ISS TURN-ON REQUEST CHANGES STATE.

# JOBS OR TASKS INITIATED:  NONE.

# SUBROUTINES CALLED:  ALARM, IF THE ISS TURN-ON REQUEST IS NOT PRESENT FOR 90 SECONDS.

# ERASABLE INITIALIZATION:  FRESH START AND RESTART SET BIT 15 OF CHANNEL 12 AND BITS 2 AND 7 OF IMODES30 TO 0,
# AND BIT 14 OF IMODES30 TO 1.

# ALARMS: PROGRAM ALARM 00207 IS ISSUED IF THE ISS TURN-ON REQUEST SIGNAL IS NOT PRESENT FOR 90 SECONDS.

# EXIT:  NXTIFAIL.

# OUTPUT:  BIT 7 OF IMODES30 TO START ISS INITIALIZATION, OR BIT 2 OF IMODES30 AND PROGRAM ALARM 00207 TO INDICATE
# A FAILED TURN-ON SEQUENCE.

ITURNON         CAF             BIT2                    # IF DELAY REQUEST HAS GONE OFF
                MASK            IMODES30                # PREMATURELY, DO NOT PROCESS ANY CHANGES
                CCS             A                       # UNTIL THE CURRENT 90 SEC WAIT EXPIRES.

                TCF             NXTIFAIL

                CAF             BIT14                   # SEE IF JUST ON OR OFF.
                MASK            IMODES30
                EXTEND
                BZF             ITURNON2                # IF JUST ON.

                CAF             BIT15
                EXTEND                                  # SEE IF DELAY PRESENT DISCRETE HAS BEEN
                RAND            12                      # SENT.  IF SO, ACTION COMPLETE.
                EXTEND
                BZF             +2
                TCF             NXTIFAIL

                CAF             BIT2                    # IF NOT, SET BIT TO INDICATE REQUEST NOT
                ADS             IMODES30                # PRESENT FOR FULL DURATION.
                TC              ALARM
                OCT             207
                TCF             NXTIFAIL

## Page 110
ITURNON2        CS              BIT7                    # SET BIT 7 TO INITIATE WAIT OF 1 SAMPLE.
                MASK            IMODES30
                AD              BIT7
                TS              IMODES30
                TCF             NXTIFAIL

## Page 111
# PROGRAM NAME:  IMUCAGE.

# FUNCTIONAL DESCRIPTION:  THIS PROGRAM PROCESSES CHANGES OF THE IMUCAGE INBIT, CHANNEL 30 BIT 11.  IF THE BIT
# CHANGES TO 0 (CAGE BUTTON PRESSED), THE ISS IS CAGED (ICDU ZERO + COARSE ALIGN + NO ATT LAMP) UNTIL THE
# ASTRONAUT SELECTS ANOTHER PROGRAM TO ALIGN THE ISS.  ANY PULSE TRAINS TO THE ICDU'S AND GYRO'S ARE TERMINATED,
# THE ASSOCIATED OUTCOUNTERS ARE ZEROED AND THE GYRO'S ARE DE-SELECTED.  NO ACTION OCCURS WHEN THE BUTTON IS
# RELEASED (INBIT CHANGES TO 1).

# CALLING SEQUENCE:  BY IMUMON WHEN IMU CAGE BIT CHANGES.

# JOBS OR TASKS INITIATED:  NONE.

# SUBROUTINES CALLED:  CAGESUB.

# ERASABLE INITIALIZATION:  FRESH START AND RESTART SET BIT 11 OF IMODES30 TO 1.

# ALARMS: NONE.

# EXIT:  NXTIFAIL.

# OUTPUT:  ISS CAGED, COUNTERS ZEROED, PULSE TRAINS TERMINATED AND NO ATT LAMP LIT.

IMUCAGE         CCS             A                       # NO ACTION IF GOING OFF.
                TCF             NXTIFAIL

                CS              OCT71000                # TERMINATE ICDU AND GYRO PULSE TRAINS.
                EXTEND
                WAND            14

                TC              CAGESUB

                CAF             ZERO                    # ZERO COMMAND OUT-COUNTERS.
                TS              CDUXCMD
                TS              CDUYCMD
                TS              CDUZCMD
                TS              GYROCMD

                CS              OCT1700                 # HAVING WAITED AT LEAST 27 MCT FROM
                EXTEND                                  # GYRO PULSE TRAIN TERMINATION, WE CAN
                WAND            14                      # DE-SELECT THE GYROS.

                TCF             NXTIFAIL

## Page 112
# PROGRAM NAME:  IMUOP.

# FUNCTIONAL DESCRIPTION:  THIS PROGRAM PROCESSES CHANGES IN THE ISS OPERATE DISCRETE, BIT 9 OF CHANNEL 30.
# IF THE INBIT CHANGES TO 0, INDICATING ISS ON, IMUOP GENERALLY SETS BIT 7 OF IMODES30 TO 1 TO REQUEST ISS
# INITIALIZATION VIA TNONTEST.  AN EXCEPTION IS DURING A FAILED ISS DELAY DURING WHICH BIT 2 OF IMODES30 IS SET
# TO 1 AND NO FURTHER INITIALIZATION IS REQUIRED.  WHEN THE INBIT CHANGES TO 1, INDICATING ISS OFF, IMUSEFLG IS
# TESTED TO SEE IF ANY PROGRAM WAS USING THE ISS.  IF SO, PROGRAM ALARM 00214 IS ISSUED.

# CALLING SEQUENCE:  BY IMUMON WHEN BIT 9 OF CHANNEL 30 CHANGES.

# JOBS OR TASKS INITIATED:  NONE.

# SUBROUTINES CALLED:  ALARM, IF ISS IS TURNED OFF WHILE IN USE.

# ERASABLE INITIALIZATION:  ON FRESH START AND RESTART, BIT 9 OF IMODES30 IS SET TO 1 EXCEPT WHEN THE GIMBAL LOCK
# LAMP IS ON, IN WHICH CASE IT IS SET TO 0.  THIS PREVENTS ICDU ZERO BY TNONTEST WITH THE ISS IN GIMBAL LOCK.

# ALARMS:  PROGRAM ALARM 00214 IF THE ISS IS TURNED OFF WHILE IN USE.

# EXIT:  NXTIFAIL.

# OUTPUT:  ISS INITIALIZATION REQUEST (IMODES30 BIT 7) OR PROGRAM ALARM 00214.

IMUOP           EXTEND
                BZF             IMUOP2

                CS              STATE                   # IF GOING OFF, ALARM IF PROG USING IMU.
                MASK            IMUSEFLG
                CCS             A
                TCF             NXTIFAIL

                TC              ALARM
                OCT             214
                TCF             NXTIFAIL

IMUOP2          CAF             BIT2                    # SEE IF FAILED ISS TURN-ON SEQ IN PROG.
                MASK            IMODES30
                CCS             A
                TCF             NXTIFAIL                # IF SO, DONT PROCESS UNTIL PRESENT 90
                TCF             ITURNON2                # SECONDS EXPIRES.

## Page 113
# PROGRAM NAME:  PIPFAIL

# FUNCTIONAL DESCRIPTION:  THIS PROGRAM PROCESSES CHANGES OF BIT 13 OF CHANNEL 33, PIPA FAIL.  IT SETS BIT 10 OF
# IMODES30 TO AGREE.  IT CALLS SETISSW IN CASE A PIPA FAIL NECESSITATES AN ISS WARNING.  IF NOT,I.E., IMODES30
# BIT 1 = 1, AND A PIPA FAIL IS PRESENT AND THE ISS IS NOT BEING INITIALIZED, PROGRAM ALARM 00212 IS ISSUED.

# CALLING SEQUENCE:  BY C33TEST ON CHANGES OF CHANNEL 33 BIT 13.

# JOBS OR TASKS INITIATED:  NONE.

# SUBROUTINES CALLED:  1) SETISSW, AND 2) ALARM (SEE FUNCTIONAL DESCRIPTION).

# ERASABLE INITIALIZATION:  SEE IMUMON FOR INITIALIZATION OF IMODES30.  THE RELAVANT BITS ARE 5, 7, 8, 9, AND 10.

# ALARMS:  PROGRAM ALARM 00212 IF PIPA FAIL IS PRESENT BUT NEITHER ISS WARNING IS TO BE ISSUED NOR THE ISS IS
# BEING INITIALIZED.

# EXIT:  NXTFL33.

# OUTPUT:  PROGRAM ALARM 00212 AND ISS WARNING MAINTENANCE.

PIPFAIL         CCS             A                       # SET BIT10 IN IMODES30 SO ALL ISS WARNING
                CAF             BIT10                   # INFO IS IN ONE REGISTER.
                XCH             IMODES30
                MASK            -BIT10
                ADS             IMODES30

                TC              SETISSW

                CS              IMODES30                # IF PIP FAIL DOESNT LIGHT ISS WARNING, DO
                MASK            BIT1                    # A PROGRAM ALARM IF IMU OPERATING BUT NOT
                CCS             A                       # CAGED OR BEING TURNED ON.

                TCF             NXTFL33

                CA              IMODES30
                MASK            OCT1720
                CCS             A
                TCF             NXTFL33                 # ABOVE CONDITION NOT MET.

                TC              ALARM
                OCT             212
                TCF             NXTFL33

## Page 114
# PROGRAM NAMES:  DNTMFAST, UPTMFAST

# FUNCTIONAL DESCRIPTION:  THESE PROGRAMS PROCESS CHANGES OF BITS 12 AND 11 OF CHANNEL 33.  IF A BIT CHANGES TO A
# 0, A PROGRAM ALARM IS ISSUED.  THE ALARMS ARE:

#          BIT    ALARM           CAUSE
#          ---    -----           -----
#           12    01105           DOWNLINK TOO FAST
#           11    01106           UPLINK TOO FAST

# CALLING SEQUENCE:  BY C33TEST ON A BIT CHANGE.

# SUBROUTINES CALLED:  ALARM, IF A BIT CHANGES TO A 0.

# ERASABLE INITIALIZATION:  FRESH START OR RESTART, BITS 12 AND 11 OF IMODES33 ARE SET TO 1.

# ALARMS:  SET FUNCTIONAL DESCRIPTION.

# EXIT:  NXTFL33.

# OUTPUT:  PROGRAM ALARM ON A BIT CHANGE TO 0.

DNTMFAST        CCS             A                       # DO PROG ALARM IF TM TOO FAST.
                TCF             NXTFL33

                TC              ALARM
                OCT             1105
                TCF             NXTFL33

UPTMFAST        CCS             A                       # SAME AS DNLINK TOO FAST WITH DIFFERENT
                TCF             NXTFL33                 # ALARM CODE.

                TC              ALARM
                OCT             1106
                TCF             NXTFL33

## Page 115
# PROGRAM NAME:  SETISSW

# FUNCTIONAL DESCRIPTION:  THIS PROGRAM TURNS THE ISS WARNING LAMP ON AND OFF (CHANNEL 11 BIT 1 = 1 FOR ON,
# 0 FOR OFF) DEPENDING ON THE STATUS OF IMODES30 BITS 13 (IMU FAIL) AND 4 (INHIBIT IMU FAIL), 12 (ICDU FAIL) AND
# 3 (INHIBIT ICDU FAIL), AND 10 (PIPA FAIL) AND 1 (INHIBIT PIPA FAIL).  THE LAMP IS LEFT ON IF A LAMP TEST IS IN
# PROGRESS.

# CALLING SEQUENCE:  CALLED BY IMUMON ON CHANGES TO IMU FAIL AND ICDU FAIL.  CALLED BY IFAILOK AND PFAILOK UPON
# REMOVAL OF THE FAIL INHIBITS.  CALLED BY PIPFAIL WHEN THE PIPA FAIL DISCRETE CHANGES.  IT IS CALLED BY PIPUSE
# SINCE THE PIPA FAIL PROGRAM ALARM MAY NECESSITATE AN ISS WARNING, AND LIKEWISE BY PIPFREE WHEN THE ALARM DEPARTS
# AND IT IS CALLED BY IMUZERO3 AND ISSUP AFTER THE FAIL INHIBITS HAVE BEEN REMOVED.

# JOBS OR TASKS INITIATED:  NONE.

# SUBROUTINES CALLED:  NONE.

# ERASABLE INITIALIZATION:

#          1) IMODES30 - SEE IMUMON.
#          2) IMODES33 BIT 1 = 0 (LAMP TEST NOT IN PROGRESS).

# ALARMS:  ISS WARNING.

# EXIT: VIA Q.

# OUTPUT: ISS WARNING LAMP SET PROPERLY.

SETISSW         CAF             OCT15                   # SET ISS WARNING USING THE FAIL BITS IN
                MASK            IMODES30                # BITS 13, 12, AND 10 OF IMODES30 AND THE
                EXTEND                                  # FAILURE INHIBIT BITS IN POSITIONS
                MP              BIT10                   # 4, 3, AND 1.
                CA              IMODES30
                EXTEND
                ROR             L                       # 0 INDICATES FAILURE.
                COM
                MASK            OCT15000
                CCS             A
                TCF             ISSWON                  # FAILURE.

ISSWOFF         CAF             BIT1                    # DONT TURN OFF ISS WARNING IF LAMP TEST
                MASK            IMODES33                # IN PROGRESS.
                CCS             A
                TC              Q

                CS              BIT1
                EXTEND
                WAND            11
                TC              Q

ISSWON          CAF             BIT1

## Page 116
                EXTEND
                WOR             11

                TC              Q

CAGESUB         CS              BITS6&15                # SET OUTBITS AND INTERNAL FLAGS FOR
                EXTEND                                  # SYSTEM TURN-ON OR CAGE.  DISABLE THE
                WAND            12                      # ERROR COUNTER AND REMOVE IMU DELAY COMP.
                CAF             BITS4&5                 # SEND ZERO AND COARSE.
                EXTEND
                WOR             12

                CS              OC40010                 # TURN ON NO ATT LAMP.
                MASK            DSPTAB          +11D
                AD              OC40010
                TS              DSPTAB          +11D

CAGESUB2        CS              OCT75                   # SET FLAGS TO INDICATE CAGING OR TURN-ON,
                MASK            IMODES30                # AND TO INHIBIT ALL ISS WARNING INFO.
                AD              OCT75
                TS              IMODES30

                EXTEND
                DCA             T4DAP                   # DISABLE DAP DURING ISS INITIALIZATION
                DXCH            T5ADR

                TC              Q

                EBANK=          DT
T4DAP           2CADR           DAPIDLER
IMUFAIL         EQUALS          SETISSW
ICDUFAIL        EQUALS          SETISSW

## Page 117
#          JUMP TABLES AND CONSTANTS.

IFAILJMP        TCF             ITURNON                 # CHANNEL 30 DISPATCH.
                TCF             IMUFAIL
                TCF             ICDUFAIL
                TCF             IMUCAGE
30RDMSK         OCT             76400                   # (BIT 10 NOT SAMPLED HERE).
                TCF             IMUOP

C33JMP          TCF             PIPFAIL                 # CHANNEL 33 DISPATCH.
                TCF             DNTMFAST
                TCF             UPTMFAST

#          SUBROUTINE TO SKIP IF LAMP TEST NOT IN PROGRESS.
LAMPTEST        CS              IMODES33                # BIT 1 OF IMODES33 = 1 IF LAMP TEST IN
                MASK            BIT1                    # PROGRESS.
                CCS             A
                INCR            Q
                TC              Q

33RDMSK         EQUALS          PRIO16
OCT15           OCT             15
OC40010         OCT             40010
BITS4&5         OCT             30
OCT54           OCT             54
OCT75           OCT             75
BITS7&8         OCT             300
OCT1720         OCT             1720
OCT1700         OCT             1700
OCT15000        EQUALS          PRIO15
OCT71000        OCT             71000
BITS6&15        OCT             40040

-BIT10          OCT             -1000

90SECS          DEC             9000
120MS           DEC             12

GLOCKOK         EQUALS          RCSMONIT
NOIMUON         EQUALS          GLOCKOK

## Page 118
#          RR INBIT MONITOR.

RRAUTCHK        CA              RADMODES                # SEE IF CHANGE IN RR AUTO MODE BIT.
                EXTEND
                RXOR            33
                MASK            BIT2
                EXTEND
                BZF             RRCDUCHK

                LXCH            RADMODES                # UPDATE RADMODES.
                EXTEND
                RXOR            L
                TS              RADMODES
                MASK            BIT2                    # SEE IF JUST ON.

                CCS             A
                TCF             RROFF                   # OFF.

                CAF             BIT7                    # IF JUST ON AND SOME PROGRAM IS USING THE
                MASK            STATE                   # RR, DONT ZERO THE CDUS.
                CCS             A
                TCF             RRCDUCHK

                CS              OCT10001                # SET BITS TO INDICATE ZERO AND TURNON
                MASK            RADMODES                # IN PROGRESS.
                AD              OCT10001
                TS              RADMODES

                CAF             ONE
                TC              WAITLIST
                EBANK=          M11
                2CADR           RRTURNON
                TCF             NORRGMON

OCT10001        OCT             10001

RROFF           CS              STATE                   # IF SOMEONE WAS USING THE RR, DISPLAY AN

                MASK            BIT7                    # ALARM IF THE RR GOES OUT OF AUTO MODE.
                CCS             A
                TCF             RRCDUCHK

                TC              ALARM
                OCT             514

## Page 119
#          CHECK FOR RR CDU FAIL.

RRCDUCHK        CA              RADMODES                # LAST SAMPLED BIT IN RADMODES.
                EXTEND
                RXOR            30
                MASK            BIT7
                EXTEND
                BZF             RRGIMON

                CAF             BIT2                    # IF RR NOT IN AUTO MODE, DONT CHANGE BIT
                MASK            RADMODES                # 7 OF RADMODES. IF THIS WERE NOT DONE,
                CCS             A                       # THE TRACKER FAIL MIGHT COME ON WHEN
                TCF             NORRGMON                # JUST READING LR DATA.

                CAF             BIT7                    # SET BIT 7 OF RADMODES FOR SETTRKF.
                LXCH            RADMODES                # UPDATE RADMODES.
                EXTEND
                RXOR            L
                TS              RADMODES

TRKFLCDU        TC              SETTRKF                 # UPDATE TRACKER FAIL LAMP ON DSKY.

## Page 120
#          THE RR GIMBAL LIMIT MONITOR IS ENABLED WHENEVER THE RR IS IN THE AUTO MODE EXCEPT WHEN THE RR CDUS ARE
# BEING ZEROED, OR DURING A REMODE OR MONITOR REPOSITION OPERATION. THE LATTER IS INITIATED BY THIS MONITOR WHEN

# THE GIMBALS EXCEED THE LIMITS FOR THE CURRENT MODE. A ROUTINE IS INITIATED TO DRIVE THE GIMBALS TO T = 0 AND
# S = 0 IF IN MODE 1 AND T = 180 WITH S = -90 FOR MODE 2.

RRGIMON         CAF             OCT32002                # INHIBITED BY REMODE, ZEROING, MONITOR.
                MASK            RADMODES                # OR RR NOT IN AUTO.
                CCS             A
                TCF             NORRGMON

                TC              RRLIMCHK                # SEE IF ANGLES IN LIMITS.
                ADRES           OPTY

                TCF             MONREPOS

                TCF             NORRGMON                # (ADDITIONAL CODING MAY GO HERE).

MONREPOS        CAF             BIT11                   # SET FLAG TO SHOW REPOSITION IN PROGRESS.
                ADS             RADMODES

                CS              OCT20002                # DISABLE TRACKER AND ERROR COUNTER.
                EXTEND
                WAND            12

                CAF             TWO

                TC              WAITLIST
                EBANK=          M11
                2CADR           DORREPOS
                TCF             NORRGMON

OCT32002        OCT             32002
OCT20002        OCT             20002

## Page 121
# PROGRAM NAME:  GPMATRIX (DAPT4S) MOD. NO. 2 DATE: OCTOBER 27, 1966

# AUTHOR:  JONATHAN D. ADDELSTON (ADAMS ASSOCIATES)

# THIS PROGRAM CALCULATES ALL THE SINGLE-PRECISION MATRIX ELEMENTS WHICH ARE USED BY LEM DAP TO TRANSFORM VECTORS
# FROM GIMBAL TO PILOT (BODY) AXES AND BACK AGAIN.  THESE ELEMENTS ARE USED EXCLUSIVELY BY BASIC LANGUAGE ROUTINES
# AND THEREFORE ARE NOT ARRAYED FOR USE BY INTERPRETIVE PROGRAMS.

# CALLING SEQUENCE:  GPMATRIX IS TRANSFERRED TO FROM DAPT4S AND IS THUS EXECUTED 4 TIMES A SECOND BY T4RUPT.
# DAPT4S IS LISTED IN T4JUMP TABLE TWICE EXPLICITLY AND ALSO OCCURS AFTER RRAUTCHK (WHICH IS ALSO LISTED TWICE).

# SUBROUTINES CALLED: SPSIN, SPCOS.

# NORMAL EXIT: RESUME.

# ALARM/ABORT MODE:  THERE ARE NO REAL ALARMS OR ABORTS.  HOWEVER, WHEN THE MIDDLE GIMBAL ANGLE NEARS GIMBAL LOCK,
# A DIVISION BY COS(MG) WILL CAUSE OVERFLOW (I.E. A BAD QUOTIENT).  THIS CONDITION IS PREVENTED BY TESTING COS(MG)
# AND SUBSTITUTING POSMAX/NEGMAX FOR THE INCALCULABLE QUANTITIES.

# INPUT: CDUX,CDUY,CDUZ.          OUTPUT: M11,M21,M31,M22,M32,MR12,MR13.
#                                         (ALSO MR22=M22,MR23=M32)

# AOG = CDUX, AIG = CDUY, AMG = CDUZ: MNEMONIC IS: OIM = XYZ

#    *       *    SIN(MG)        0         1      *
#    M   =   *    COS(MG)COS(OG) SIN(OG)   0      *
#     GP     *   -COS(MG)SIN(OG) COS(OG)   0      *

#    *       *  0    COS(OG)/COS(MG)         -SIN(OG)/COS(MG)         *
#    M   =   *  0    SIN(OG)                  COS(OG)                 *
#     PG     *  1   -SIN(MG)COS(OG)/COS(MG)   SIN(MG)SIN(OG)/COS(MG)  *

# THIS CODING TRANSFERS CONTROL TO THE DAP FIXED BANK FOR GPMATRIX:

                BANK            12
                EBANK=          M11

DAPT4S          EXTEND                                  # GET 2CADR OF GPMATRIX
                DCA             DAPT4
                DTCB                                    # CROSS BANKS

NORRGMON        EQUALS          DAPT4S

                EBANK=          M11
DAPT4           2CADR           GPMATRIX

## Page 122
# T4RUPT DAP LOGIC:

                BANK            20
                EBANK=          M11

GPMATRIX        CAE             CDUZ                    # SINGLE ENTRY POINT
                TC              SPSIN                   # SIN(CDUZ) = SIN(MG)
                TS              M11                     # SCALED AT 1

                CAE             CDUZ
                TC              SPCOS                   # COS(CDUZ) = COS(MG)
                TS              COSMG                   # SCALED AT 1 (ONLY A FACTOR)

                CAE             CDUX

                TC              SPSIN                   # SIN(CDUX) = SIN(OG)
                TS              M22                     # SCALED AT 1 (ALSO IS MR22)

                CS              M22
                EXTEND
                MP              COSMG                   # -SIN(OG)COS(MG)
                TS              M31                     # SCALED AT 1

                CAE             CDUX
                TC              SPCOS                   # COS(CDUX) = COS(OG)
                TS              M32                     # SCALED AT 1 (ALSO IS MR23)

                EXTEND
                MP              COSMG                   # COS(OG)COS(MG)
                TS              M21                     # SCALED AT 1

                CAE             COSMG                   # TEST FOR GIMBAL LOCK (OVERFLOW) REGION
                AD              NEG1/2                  # BY TESTING MIDDLE GIMBAL ANGLE FOR
                EXTEND                                  # VALUES EQUAL TO OR GREATER THAN 60 DEGS.
                BZMF            GPGLOCK

                CAE             M32
                EXTEND

                MP              BIT14                   # SCALE FOR DIVISION
                EXTEND
                DV              COSMG                   # COS(OG)/COS(MG)
                TS              MR12                    # SCALED AT 2

                CS              M22
                EXTEND
                MP              BIT14                   # SCALE FOR DIVISION
                EXTEND
                DV              COSMG                   # -SIN(OG)/COS(MG)
                TCF             MR13STOR

## Page 123
# SPECIAL LOGIC FOR MIDDLE GIMBAL ANGLES GREATER THAN OR EQUAL TO 60 DEGS:

GPGLOCK         CCS             M32                     # SINCE DIVISION BY COS(MG) MIGHT CREATE
                CAF             POSMAX
                TCF             +2                      # OVERFLOW (I.E. A NUMBER GREATER THAN 2)
                CAF             NEGMAX
                TS              MR12                    # USE THE VALUE SGN(NUMERATOR)*POSMAX AS

                CCS             M22
                CAF             POSMAX                  # THE CLOSEST APPROXIMATION
                TCF             +2
                CAF             NEGMAX
MR13STOR        TS              MR13                    # SCALED AT 2

                TCF             RESUME
back to top