Revision 66d8e606a8d996ded60bc81d5edf319142a5fad9 authored by Ron Burkey on 04 October 2021, 11:49:55 UTC, committed by Ron Burkey on 04 October 2021, 11:49:55 UTC
2 parent s dfc2190 + 42c2282
Raw File
AGC_BLOCK_TWO_SELF-CHECK.agc
### FILE="Main.annotation"
## Copyright:   Public domain.
## Filename:    AGC_BLOCK_TWO_SELF-CHECK.agc
## Purpose:     This program is designed to extensively test the Apollo Guidance Computer
##              (specifically the LM instantiation of it). It is built on top of a heavily
##              stripped-down Aurora 12, with all code ostensibly added by the DAP Group
##              removed. Instead Borealis expands upon the tests provided by Aurora,
##              including corrected tests from Retread 44 and tests from Ron Burkey's
##              Validation.
## Assembler:   yaYUL
## Contact:     Mike Stewart <mastewar1@gmail.com>.
## Website:     www.ibiblio.org/apollo/index.html
## Mod history: 2016-12-20 MAS  Created from Aurora 12 (with much DAP stuff removed).
##              2016-12-21 MAS  Shuffled some things around for multi-bank handling,
##                              and put in jumps to Retread instruction checks and back.
##              2017-01-04 MAS  Fleshed out the rest of the hardware alarm tests. Also
##                              pulled back all updates added by the time of Sunburst 120.
##                              and put in jumps to Retread instruction checks and back.
##              2017-01-15 MAS  Added transfers to and from the new extended tests.
##		2017-01-28 RSB	WTIH -> WITH.
##		2017-03-27 MAS	A few corrections for the hardware alarm tests: counter
##                              alarms are now filtered out because they can happen at
##                              random during other restarts, if counter increments had
##                              been requested. Also added testing of the Night Watchman's
##                              stretching out of its monitor output for 1.28s. Also
##                              adopted a bugfix from Sunburst 120 that stopped the AGC
##                              from crashing when running a self-test after the DSKY test.

# PROGRAM DESCRIPTION                                                         DATE  14 FEBRUARY 1967
# PROGRAM NAME - SELF-CHECK                                                   LOG SECTION AGC BLOCK TWO SELF-CHECK
# MOD NO - 0                                                                  ASSEMBLY SUNBURST REV 107
# MOD BY - GAUNTT


# FUNCTIONAL DESCRIPTION

#      PROGRAM HAS TWO MAIN PARTS. THE FIRST IS SELF-CHECK WHICH RUNS AS A ZERO PRIORITY JOB WITH NO CORE SET, AS
# PART OF THE BACK-UP IDLE LOOP. THE SECOND IS SHOW-BANKSUM WHICH RUNS AS A REGULAR EXECUTIVE JOB WITH ITS OWN
# STARTING VERB.
#      THE PURPOSE OF SELF-CHECK IS TO CHECK OUT VARIOUS PARTS OF THE COMPUTER AS OUTLINED BELOW IN THE OPTIONS.
#      THE PURPOSE OF SHOW-BANKSUM IS TO DISPLAY THE SUM OF EACH BANK, ONE AT A TIME.
#      A THIRD SECTION, DSKYCHK, LIGHTS UP ALL THE DSKY ELECTROLUMINESCENT ELEMENTS.
#      IN ALL THERE ARE 15 POSSIBLE OPTIONS IN THIS BLOCK II VERSION OF SELF-CHECK. MORE DETAIL DESCRIPTION MAY BE
# FOUND IN E-2065 BLOCK II AGC SELF-CHECK AND SHOW BANKSUM BY EDWIN D. SMALLY DECEMBER 1966.
#      THE DIFFERENT OPTIONS ARE CONTROLLED BY PUTTING DIFFERENT NUMBERS IN THE SMODE REGISTER (NOUN 27). BELOW IS
# A DESCRIPTION OF WHAT PARTS OF THE COMPUTER THAT ARE CHECKED BY THE OPTIONS, AND THE CORRESPONDING NUMBER, IN
# OCTAL, TO LOAD INTO SMODE.
# +-1  ALL PULSES POSSIBLE BY INTERNAL CONTROL OF THE COMPUTER.
# +-2  ALL THE IN-OUT INSTRUCTION PULSES.
# +-3  SPECIAL AND CENTRAL REGISTERS, ALL BIT COMBINATIONS.
# +-4  ERASABLE MEMORY
# +-5  FIXED MEMORY
# +-6,7,10  EVERYTHING IN THE PREVIOUS 5 OPTIONS.
# +-11  TURNS ON THE ELECTROLUMINESCENT DISPLAY IN THE DSKY.
# -0   SAME AS +-10 UNTIL AN ERROR IS DETECTED.
# +0   NO CHECK, PUTS COMPUTER INTO THE BACKUP IDLE LOOP.


# WARNINGS

#      SMODE LOADED WITH GREATER THAN OCTAL 11 PUTS COMPUTER INTO THE BACKUP IDLE LOOP.



# CALLING SEQUENCE

#      TO CALL SELF-CHECK KEY IN
#           V 21 N 27 E OPTION NUMBER E
#      TO CALL DSKYCHK KEY IN
#           V 21 N 27 E +-11 E
#      TO CALL SHOW-BANKSUM KEY IN
#           V 56 E         DISPLAYS FIRST BANK
#           V 33 E         PROCEED, DISPLAYS NEXT BANK

# EXIT MODES, NORMAL AND ALARM

#      SELF-CHECK NORMALLY CONTINUES INDEFINITELY UNLESS THERE IS AN ERROR DETECTED. IF SO + OPTION NUMBERS PUT
# COMPUTER INTO BACKUP IDLE LOOP, - OPTION NUMBERS RESTART THE OPTION.
#      THE -0 OPTION PROCEEDS FROM THE LINE FOLLOWING THE LINE WHERE THE ERROR WAS DETECTED.
#      COMPLETION OF DSKYCHK PUTS THE COMPUTER INTO THE BACKUP IDLE LOOP.
#      SHOW-BANKSUM PROCEEDS UNTIL A TERMINATE IS KEYED IN (V 34 E). THE COMPUTER IS PUT INTO THE BACKUP IDLE LOOP


# OUTPUT

#      SELF-CHECK UPON DETECTING AN ERROR LOADS THE SELF-CHECK ALARM CONSTANT (01102) INTO THE FAILREG SET AND
# TRIGGERS THE ALARM. THE ALARM ROUTINE DISPLAYS THE THREE FAILREGS. IF OPERATOR DESIRES FURTHER INFORMATION HE
# MAY KEY IN   V 05 N 31 E    DSKY DISPLAY IN R1 WILL BE ADDRESS +1 OF WHERE THE ERROR WAS DETECTED, IN R2 THE
# BANK NUMBER OF SELF-CHECK (37 OCTAL), AND IN R3 THE TOTAL NUMBER OF ERRORS DETECTED BY SELF-CHECK SINCE THE LAST
# FRESH START
#      DSKYCHK LIGHTS UP THE DSKY DISPLAY ELEMENTS STARTING WITH THE DIGIT9 IN ALL POSITIONS. EACH DISPLAY LASTS
# 5 SECONDS
#      SHOW-BANKSUM STARTING WITH BANK 0 DISPLAYS IN R1 +- THE BANK SUM (SHOULD EQUAL THE BANK NUMBER), IN R2 THE
# BANK NUMBER, AND IN R3 THE BUGGER WORD.


# ERASABLE INITIALIZATION REQUIRED

#      ACCOMPLISHED BY FRESH START
#           SMODE & ERESTORE SET TO +0


# DEBRIS

#      ALL EXITS FROM THE CHECK OF ERASABLE (ERASCHK) RESTORE ORIGINAL CONTENTS TO REGISTERS UNDER CHECK.
# EXCEPTION IS A RESTART. RESTART THAT OCCURS DURING ERASCHK DOES A FRESH START.

                SETLOC          ENDIMUF

SBIT1           OCT             00001                           # SBIT1 and SBIT2 must be together                          
SBIT2           OCT             00002                           
SBIT3           EQUALS          BIT3                            
SBIT4           EQUALS          BIT4                            
SBIT5           EQUALS          BIT5                            
SBIT6           EQUALS          BIT6                            
SBIT7           EQUALS          BIT7                            
SBIT8           EQUALS          BIT8                            
SBIT9           EQUALS          BIT9                            
SBIT10          EQUALS          BIT10                           
SBIT11          EQUALS          BIT11                           
SBIT12          EQUALS          BIT12                           
SBIT13          EQUALS          BIT13                           
SBIT14          EQUALS          BIT14                           
SBIT15          EQUALS          BIT15                           

S+ZERO          EQUALS          ZERO                            
S+1             EQUALS          SBIT1                            
S+2             EQUALS          SBIT2                            
S+3             EQUALS          THREE                           
S+4             EQUALS          FOUR                            
S+5             EQUALS          FIVE                            
S+6             EQUALS          SIX                             
S+7             EQUALS          SEVEN                           
S8BITS          EQUALS          LOW8                            # 00377
CNTRCON         OCTAL           00050                           # USED IN CNTRCHK
ERASCON1        OCTAL           00061                           # USED IN ERASCHK
ERASCON2        OCTAL           01374                           # USED IN ERASCHK
ERASCON6        OCTAL           01400                           # USED IN ERASCHK
ERASCON3        OCTAL           01461                           # USED IN ERASCHK
ERASCON4        OCTAL           01774                           # USED IN ERASCHK
S10BITS         EQUALS          LOW10                           # 01777, USED IN ERASCHK
SBNK03          EQUALS          PRIO6                           # 06000, USED IN ROPECHK
SIXTY           OCTAL           00060                           
SUPRCON         OCTAL           60017                           # USED IN ROPECHK
S+MAX           OCTAL           37777                           # ** S+MAX AND S-MAX MUST BE TOGETHER
S-MAX           OCTAL           40000                           # FOR DOUBLE PRECISION CHECKING.
S13BITS         OCTAL           17777                           
CONC+S1         OCTAL           25252                           # USED IN CYCLSHFT
OVCON           OCTAL           37737                           # USED IN RUPTCHK
DVCON           OCTAL           37776                           
SUPER100        EQUALS          BIT7
CONC+S2         OCTAL           52400                           # USED IN CYCLSHFT
ERASCON5        OCTAL           76777                           
S-7             OCTAL           77770                           
S-4             EQUALS          NEG4                            
S-3             EQUALS          NEG3                            
S-2             EQUALS          NEG2                            
S-1             EQUALS          NEGONE                          
S-ZERO          EQUALS          NEG0                            

                EBANK=          LST1                            
ADRS1           ADRES           SKEEP1                          

SRADRS          ADRES           SR                              

PRITYBIT        EQUALS          SBIT1
TCTRPBIT        EQUALS          SBIT3
RPTLKBIT        EQUALS          SBIT4
WATCHBIT        EQUALS          SBIT5
CTRMASK         OCT             77677
300MSEC         DEC             30
2SEC            DEC             200
0.64SEC         EQUALS          BIT7
BNK34ADR        FCADR           BANK34                          # With superbank = 100, this becomes bank 44


PRERRORS        CA              ERESTORE                        # IS IT NECESSARY TO RESTORE ERASABLE
                EXTEND                                          
                BZF             ERRORS                          # NO
                EXTEND                                          
                DCA             SKEEP5                          
                INDEX           SKEEP7                          
                DXCH            0000                            # RESTORE THE TWO ERASABLE REGISTERS
                CA              S+ZERO                          
                TS              ERESTORE                        
ERRORS          CA              Q                               
                TS              SFAIL                           # SAVE Q FOR FAILURE LOCATION
                INCR            ERCOUNT                         # KEEP TRACK OF NUMBER OF MALFUNCTIONS.
                TC              ALARM                           
                OCT             01102                           # SELF-CHECK MALFUNCTION INDICATOR
                CCS             SMODE                           
                CA              S+ZERO                          
                TS              SMODE                           
                TC              SELFIDLE                        # GO TO IDLE LOOP
                TC              SFAIL                           # CONTINUE WITH SELF-CHECK

SELFIDLE        TC              POSTJUMP
                CADR            SELFCHK

+0CHK           CS              A                               
-0CHK           CCS             A                               
                TCF             ERRORS                          
                TCF             ERRORS                          
                TCF             ERRORS                          
                TC              Q                               

+1CHK           CS              A                               
-1CHK           CCS             A                               
                TCF             PRERRORS                        
                TCF             PRERRORS                        
                CCS             A                               
                TCF             PRERRORS                        
                TC              Q                               

ENDSELFF        EQUALS

                BANK            20

SELFADRS        ADRES           SELFCHK                         # SELFCHK RETURN ADDRESS.  SHOULD BE PUT
                                                                # IN SELFRET WHEN GOING FROM SELFCHK TO
                                                                # SHOWSUM AND PUT IN SKEEP1 WHEN GOING
                                                                # FROM SHOWSUM TO SELF-CHECK.

SMODECHK        EXTEND                                          
                QXCH            SKEEP1                          
                TC              CHECKNJ                         # CHECK FOR NEW JOB
                CCS             SMODE                           
                TC              SOPTIONS                        
                TC              SMODECHK        +2              # TO BACKUP IDLE LOOP
                TC              SOPTIONS                        
                INCR            SCOUNT                          
                TC              SKEEP1                          # CONTINUE WITH SELF-CHECK

SOPTIONS        AD              S-7                             
                EXTEND                                          
                BZMF            +3                              # FOR OPTIONS BELOW NINE.
BNKOPTN         TC              POSTJUMP                        # GO TO ANOTHER BANK FOR OPTIONS ABOVE 8.
                CADR            SBNKOPTN                        
                INCR            SCOUNT                          # FOR OPTIONS BELOW NINE.
                AD              S+7                             

                INDEX           A                               
                TC              SOPTION1                        
SOPTION1        TC              TC+TCF                          
SOPTION2        TC              IN-OUT1                         
SOPTION3        TC              COUNTCHK                        
SOPTION4        TC              ERASCHK                         
SOPTION5        TC              ROPECHK                         
SOPTION6        TC              MPNMBRS                         
SOPTION7        TC              DVCHECK                         
SOPTON10        TC              SKEEP1                          # CONTINUE WITH SELF-CHECK

SELFCHK         TC              SMODECHK                        # ** CHARLEY, COME IN HERE

# TC+TCF CHECKS ALL OF THE PULSES OF TCF AND ALL OF THE PULSES OF TC
# EXCEPT ABILITY TO TC TO ERASABLE.
# ALSO FIRST TIME CS FIXED MEMORY IS USED
TC+TCF          TC              +2                              
                TC              CCSCHK                          
                TCF             +2                              # $ TCF FIXED MEMORY
                TC              ERRORS                          
                CS              S+3                             # $ CS FIXED MEMORY
                TC              Q                               # $
                TC              ERRORS                          

# CCSCHK CHECKS ALL OF CCS EXCEPT RB WG.
# ALSO CHECKS TS ERASABLE, CS SC, AND CS ERASABLE MEMORY.
CCSCHK          CCS             A                               # $ CCS SC, C(A) = -3
                TC              ERRORS                          
                TC              ERRORS                          
                TC              +2                              
                TC              ERRORS                          
                CCS             A                               # $ C(A) = +2, RESULT OF CCS -NUMBER
                TC              +4                              
                TC              ERRORS                          
                TC              ERRORS                          
                TC              ERRORS                          
                TS              SKEEP1                          # $ TS ERASABLE
                CCS             SKEEP1                          # $ CCS ERASABLE, C(A) = +1, RESULT OF
                TC              +4                              # CCS +NUMBER
                TC              ERRORS                          
                TC              ERRORS                          
                TC              ERRORS                          
                CCS             A                               # $ C(A) = +0, RESULT OF CCS +1, CHECKS CI
                TC              ERRORS                          
                TC              +3                              
                TC              ERRORS                          
                TC              ERRORS                          
                CS              A                               # $ CS SC
                CCS             A                               # $ C(A) = -0, RESULT OF CCS +0
                TC              ERRORS                          
                TC              ERRORS                          
                TC              ERRORS                          
                CCS             A                               # $ RESULT OF CCS -0
                TC              ERRORS                          
                TC              +3                              
                TC              ERRORS                          
                TC              ERRORS                          
                CS              SKEEP1                          # $ CS ERASABLE. ALSO CHECKS BACK INTO
                TC              -1CHK                           # ERASABLE SEQUENCE.

# BZMFCHK CHECKS ALL PULSES OF BZMF.
# ALSO CHECKS CA FIXED MEMORY.
BZMFCHK         CAF             SBIT9                           # $ CA FIXED MEMORY
                EXTEND                                          
                BZMF            ERRBZMF                         
                CS              A                               
                EXTEND                                          
                BZMF            +2                              # $
                TC              ERRORS                          
                CA              S+MAX                           
                AD              S+1                             
                EXTEND                                          
                BZMF            ERRBZMF2                        # $ + OVERFLOW, CHECK 01-0000
                CA              S+ZERO                          
                EXTEND                                          
                BZMF            +2                              # $
                TC              ERRORS                          
                CS              A                               
                EXTEND                                          
                BZMF            +4                              # $
                TC              ERRORS                          
ERRBZMF         TC              ERRORS                          # FROM BZMF WITH +NON-ZERO
ERRBZMF2        TC              ERRORS                          # OVERFLOW WITH +0

# RESTORE1 AND 2 CHECKS INSTRUCTIONS (WITH STAR) ABILITY TO READ BACK INTO
# ERASABLE MEMORY. NOT NORMALLY INTERESTED IN CONTENTS OF A REGISTER.
# FIRST TIME MANY INSTRUCTIONS ARE USED.
# RESTORE1 ALSO CHECKS INDEX (WITHOUT EXTRACODE) ERASABLE, CA ERASABLE,
# AND MASK ERASABLE.
RESTORE1        CAF             SRADRS                          # ADDRESS OF SR
                TS              SKEEP7                          
                CA              S8BITS                          # 00377
                NDX             SKEEP7                          # $ INDEX ERASABLE                       *
                TS              0000                            # TS SR, C(SR) = 00177
                CCS             SR                              # C(SR) = 00077                          *
                NDX             SKEEP7                          # CHECKS C(SKEEP7) CORRECT
                CS              0000                            # C(SR) = 00037
                AD              SR                              # C(SR) = 00017                          *
                EXTEND                                          
                MSU             SR                              # C(SR) = 00007                          *
                EXTEND                                          
                SU              SR                              # C(SR) = 00003                          *
                CA              SR                              # $ C(SR) = +1, C(A) = +3, CA ERASABLE   *
                MASK            SR                              # $ B(SR) = C(SR) = +1, MASK ERASABLE    *
                TC              +1CHK                           
                EXTEND                                          
                MP              SR                              
                EXTEND                                          
                DV              SR                              
                CA              SR                              # $ CA ERASABLE
                TC              +1CHK                           # MAKES SURE MASK, MP, AND DV DO NOT EDIT.

# RESTORE2 ALSO CHECKS XCH ERASABLE,INDEX (WITH EXTRACODE) ERASABLE AND
# FIXED MEMORY, DCS ERASABLE, CA SC, AND DCA ERASABLE.
RESTORE2        CAF             ADRS1                           # ADDRESS OF SKEEP1
                TS              SKEEP6                          
                CA              S-1                             
                TS              SKEEP1                          # -1
                CS              A                               
                XCH             SKEEP1                          # $ XCH ERASABLE, C(SKEEP1) = +1
                XCH             SKEEP2                          # $ XCH ERASABLE, C(SKEEP2) = -1
                EXTEND                                          
                NDX             SKEEP6                          # $ NDX ERASABLE                         *
                DCA             0000                            # DCA ERASABLE                           *
                EXTEND                                          
                NDX             ADRS1                           # $ NDX FIXED MEMORY                     *
                DCS             0000                            # $ DCS ERASABLE MEMORY                  *
                TC              -1CHK                           # MAKES SURE DCS ERASABLE OK
                CA              L                               # $ CA SC
                TC              +1CHK                           
                EXTEND                                          
                NDX             SKEEP6                          # MAKE SURE C(SKEEP6) IS STILL CORRECT
                DCA             0000                            # $ DCA ERASABLE
                TC              +1CHK                           
                CA              L                               
                TC              -1CHK                           

# RESTORE3 CHECKS ABILITY TO RESTORE INSTRUCTIONS BACK INTO ERASABLE
# MEMORY. IT IS ONLY NECESSARY TO RESTORE ONE INSTRUCTION BECAUSE THE
# G REGISTER DOES NOT CHANGE.
# ALSO CHECKS TC TO ERASABLE MEMORY.
RESTORE3        CA              SBIT15                          # CS
                TS              SKEEP1                          # 40000
                CA              S+2                             # TC Q
                TS              SKEEP2                          
                CA              S+1                             # +1
                TC              SKEEP1                          # $ TC ERASABLE
                TC              -1CHK                           # FIRST TIME BACK FROM ERASABLE.
                TC              SKEEP1                          
                TC              -0CHK                           # SECOND TIME BACK FROM ERASABLE.

# BZFCHK CHECKS ALL PULSES OF BZF.
BZFCHK          CAF             S+5                             
                EXTEND                                          
                BZF             ERRBZF1                         # $
                CS              A                               
                EXTEND                                          
                BZF             ERRBZF2                         # $
                CA              S+MAX                           
                AD              S+1                             # 01-00000
                EXTEND                                          
                BZF             ERRBZF3                         # $
                CS              A                               
                EXTEND                                          
                BZF             ERRBZF4                         # $
                CAF             S+ZERO                          
                EXTEND                                          
                BZF             +2                              # $
                TC              ERRORS                          
                CS              A                               
                EXTEND                                          
                BZF             +6                              # $
                TC              ERRORS                          
ERRBZF1         TC              ERRORS                          # +NON-ZERO
ERRBZF2         TC              ERRORS                          # -NON-ZERO
ERRBZF3         TC              ERRORS                          # 01-00000
ERRBZF4         TC              ERRORS                          # 10-37777

# DXCH+DIM CHECKS ALL PULSES OF DXCH AND DIM.
# ALSO CHECKS TS WITH OVERFLOW, TS SC, CA SC, AND AD ERASABLE.
DXCH+DIM        CA              S+MAX                           
                AD              S+2                             # OVERFLOW WITH +1
                TS              SKEEP1                          # $ TS WITH OVERFLOW, +1
                TC              ERRORS                          
                CS              A                               
                TS              SKEEP2                          
                CS              S+MAX                           
                TS              L                               # $ TS SC, 40000
                CS              A                               # 37777
                DXCH            SKEEP1                          # $ DXCH ERASABLE
                TC              +1CHK                           
                CA              L                               # $ CA SC
                TC              -1CHK                           
                EXTEND                                          
                DIM             SKEEP1                          # $ DIM ERASABLE, DIM + NUMBER, 37776
                EXTEND                                          
                DIM             SKEEP2                          # $ DIM - NUMBER, 40001
                CA              S+MAX                           # 37777
                AD              SKEEP2                          # $ AD ERASABLE, +1
                TC              +1CHK                           
                CS              S+MAX                           # 40000
                AD              SKEEP1                          # -1
                TC              -1CHK                           
                CA              S+1                             # +1
                EXTEND                                          
                DIM             A                               # $ DIM SC, DIM +1
                EXTEND                                          
                DIM             A                               # $ DIM -0
                TC              -0CHK                           
                EXTEND                                          
                DIM             A                               # $ DIM +0
                TC              +0CHK                           

# DAS+INCR CHECKS ALL PULSES OF DAS AND INCR.
# ALSO CHECKS DCA FIXED, LXCH SC, DCA ERASABLE, AD ERASABLE, DCS FIXED,
# DCS ERASABLE, AND XCH SC.
DAS+INCR        CA              S-1                             
DAS++           TS              L                               # -1
                CA              S+2                             # +2
                DAS             A                               # $ DAS SC, C(A) = +4 AND C(L) = -2
                AD              S-3                             # $ AD FIXED MEMORY
                TC              +1CHK                           
                CA              S+1                             
                AD              L                               # $ AD SC, -1
                TC              -1CHK                           
# DAS WITH INTERFLOW IN LOW ORDER AND NET OVERFLOW
DAS+-           EXTEND                                          
                DCA             S+MAX                           # $DCA FIXED MEMORY
                DXCH            SKEEP3                          # 37777, 40000
                CA              S-2                             
                TS              L                               
                CA              S+3                             # C(A) = +3, C(L) = -2
                DAS             SKEEP3                          # $ DAS ERASABLE
                LXCH            A                               # $ LXCH SC
                TC              +0CHK                           
                CA              L                               
                TC              +1CHK                           
                EXTEND                                          
                DCA             SKEEP3                          # $ DCA ERASABLE
                LXCH            A                               # C(A) = -1, C(L) = +1
                TC              -1CHK                           
                CA              L                               
                TC              +1CHK                           
# INCRCHK CHECKS ALL INCR PULSES EXCEPT WOVR.
INCRCHK         INCR            SKEEP4                          # $ INCR ERASABLE, -0
                AD              SKEEP4                          # $ AD ERASABLE
                TC              -0CHK                           
                INCR            A                               # $ INCR SC, +1
                TC              +1CHK                           
# DAS WITH OVERFLOW IN LOW ORDER AND NET UNDERFLOW
DAS-+           EXTEND                                          
                DCS             S+MAX                           # $ DCS FIXED MEMORY
                DXCH            SKEEP1                          # 40000, 37777
                CA              S+3                             # +3
                TS              L                               
                CS              A                               # -3
                DAS             SKEEP1                          # $
                TC              -1CHK                           
                EXTEND                                          
                DCS             SKEEP1                          # $ DCS ERASABLE (+1, -2)
                XCH             L                               # $ XCH SC (-2, +1)
                AD              S+1                             
                TC              -1CHK                           
                CA              L                               
                TC              +1CHK                           

# MPCHK CHECKS ALL PULSES OF MP, AUG, AND ADS.
MPCHK           CA              S+1                             
                EXTEND                                          
                AUG             A                               # $ AUG SC, +2
                TS              SKEEP5                          # +2
                CS              A                               
                TS              Q                               # -2
                CS              A                               
MP++            EXTEND                                          
                MP              S+MAX                           # $ MP FIXED MEMORY, +1, 37776
                AD              L                               # 37777
MP+-            EXTEND                                          
                MP              Q                               # $ MP SC, -1, 40001
                ADS             L                               # $ ADS SC, 40000
                AD              DVCON                           
                TC              -1CHK                           
                CA              L                               
MP-+            EXTEND                                          
                MP              SKEEP5                          # $ MP ERASABLE, -1, 40001
                TS              SKEEP6                          
                EXTEND                                          
                AUG             SKEEP6                          # $ AUG ERASABLE, -2
                AD              L                               # 40000
MP--            EXTEND                                          
                MP              SKEEP6                          # $ +1, 37776
                TC              +1CHK                           
                CS              L                               # 40001
                AD              DVCON                           
                TC              -0CHK                           
                CA              S+1                             
                ADS             SKEEP6                          # $ ADS ERASABLE, +1
                TC              -1CHK                           
                CA              SKEEP6                          
                TC              -1CHK                           

# DVCH AND DVQXCHK CHECK ALL OF PULSES OF DV AND QXCH.
# ALSO CHECKS TS WITH UNDERFLOW
DVCHK           CA              SBIT14                          # 20000
                TS              SKEEP1                          
                AD              A                               # OVERFLOW
                AD              S+1                             
                TS              L                               # $ TS SC WITH OVERFLOW, +1
                TC              ERRORS                          
                CS              A                               
                TS              SKEEP2                          # -1
                CA              S-ZERO                          # -0
                LXCH            SKEEP1                          # $ LXCH ERASABLE
DV++            EXTEND                                          
                DV              SKEEP1                          # $ DV ERASABLE, C(A) = 20000, C(L) = +0
                CS              A                               
                LXCH            A                               
                TC              +0CHK                           
DV--            EXTEND                                          
                DV              SKEEP2                          # $ 20000, +0
                TS              SKEEP4                          # 20000
                CS              A                               
                TS              SKEEP3                          # -(20000)
                AD              SBIT14                          
                TC              -0CHK                           
                CA              L                               
                TC              -0CHK                           
DV+-            CA              S+MAX                           
                TS              L                               
                CA              S13BITS                         
                EXTEND                                          
                DV              SKEEP3                          # $ -(37777), +(17777)
                XCH             L                               
                CS              A                               
DV-+            EXTEND                                          
                DV              SKEEP4                          # $ -(37777), -(17777)
                AD              DVCON                           
                TC              -1CHK                           
                CA              S+MAX                           
                XCH             L                               # ALSO PUTS 37777 IN L FOR DV-+,-
                AD              SBIT14                          
                TC              +1CHK                           
DV-+,+          CS              S13BITS                         # -(17777)
                EXTEND                                          
                DV              SKEEP4                          
                AD              L                               # -(37775)
                AD              DVCON                           
                TC              +1CHK                           
                XCH             L                               
                TC              -1CHK                           # ALSO PUTS +0 IN L FOR DVQXCH
DVQXCHK         CS              DVCON                           
                TS              Q                               # 40001
                CS              A                               
                EXTEND                                          
                DV              Q                               # $ DV SC, -(37777), +(37776)
                EXTEND                                          
                QXCH            L                               # $ QXCH SC, C(L) = 40001, C(Q) = 37776
                AD              Q                               
                TC              -1CHK                           
                CA              L                               
                AD              S+MAX                           
                TC              +1CHK                           
                EXTEND                                          
                QXCH            SKEEP1                          # $ QXCH ERAS., C(Q) = +1, C(SKEEP1) = +3
                CA              Q                               
                TC              +1CHK                           
                CS              SKEEP1                          # -3
                AD              S+2                             
                TC              -1CHK                           

# MSUCHK CHECKS ALL PULSES OF MSU EXCEPT RB WG.
MSUCHK          CA              S+ZERO                          
                TS              SKEEP1                          # +0
                CS              A                               
                TS              SKEEP2                          # -0
                EXTEND                                          
                MSU             A                               # $ MSU SC, +0
                TC              +0CHK                           
                EXTEND                                          
                MSU             SKEEP2                          # $ MSU ERASABLE, +1
                TC              +1CHK                           
                EXTEND                                          
                DCA             S+MAX                           
                EXTEND                                          
                MSU             L                               # $ CHECKS RUS WA, ALSO -1 FROM NEG. NO.
                TS              A                               
                TC              +2                              
                TC              ERRORS                          
                TC              -1CHK                           

# MASKCHK FINISHES CHECKING MASK INSTRUCTION.
MASKCHK         CA              S+7                             
                TS              L                               
                MASK            S-7                             # $ MASK FIXED MEMORY
                TC              +0CHK                           
                CA              S+1                             
                MASK            L                               # $ MASK SC
                TC              +1CHK                           

# NDX+SU FINISHES CHECKING BOTH INDEX INSTRUCTIONS. ALSO CHECKS ALL OF SU
# EXCEPT RB WG.
NDX+SU          CA              S+1                             
                TS              L                               
                TS              SKEEP1                          
                NDX             A                               # $ NDX SC
                AD              0000                            # AD L, +2
                EXTEND                                          
                SU              SKEEP1                          # $ SU ERASABLE
                TC              +1CHK                           
                EXTEND                                          
                NDX             L                               # $ NDX SC
                SU              0000                            # $ SU SC, SU L
                TC              -1CHK                           

# D--SC CHECKS DCS SC, DXCH SC, AND DCA SC.
D--SC           CA              S+2                             
                TS              L                               # +2
                CA              S+1                             
                EXTEND                                          
                DCS             A                               # $ DCS SC, C(L) = -2
                TC              -1CHK                           
# AFTER DXCH C(A) = B(Q) = +3, C(L) = B(A) = +0, C(Q) = B(L) = -1.
                DXCH            L                               # $ DXCH SC
                TS              SKEEP3                          
                AD              Q                               
                TC              +1CHK                           
                CA              L                               
                TC              +0CHK                           
                CA              S-1                             
                TS              Q                               
                CS              A                               
                EXTEND                                          
# AFTER DCA C(A) = C(L) = C(Q) = B(Q) = -1.
                DCA             L                               # $ DCA SC
                AD              Q                               
                AD              SKEEP3                          
                TC              +1CHK                           
                CA              L                               
                TC              -1CHK                           

# D--LCHK CHECKS THAT OVERFLOW IS LOST IN PROCESS OF GOING THROUGH L REG.
# ALSO CHECKS THAT Q WILL HOLD 16 BITS
D--LCHK         CA              S-2                             
                TS              Q                               
                CA              S-MAX                           
                ADS             Q                               
                CS              Q                               
                TS              A                               
                TC              ERRORS                          
                EXTEND                                          
                DCA             L                               
                TS              A                               
                TC              +2                              
                TC              ERRORS                          
                TC              -1CHK                           

# CHECKS OVERFLOW, UNDERFLOW,END-AROUND-CARRY, AND SIGN CHANGE OF ADDER.
# ALSO CHECKS ADS SC WITH OVERFLOW AND TS A WITH UNDERFLOW
ADDRCHK         CA              SBIT14                          # 20000
                TS              Q                               
                ADS             Q                               # $ ADS SC, OVERFLOW
                ADS             Q                               # UNDERFLOW
                TS              A                               # $ TS SC WITH UNDERFLOW
                TC              ERRORS                          
                ADS             Q                               
                TC              +1CHK                           

# RUPTCHK CHECKS THAT INTERRUPT DOES NOT OCCUR WHILE OVERFLOW OR UNDERFLOW
# IS IN THE A REGISTER. ALSO CHECKS THAT INHINT RELINT WORK PROPERLY.
RUPTCHK         INHINT                                          
                CA              S+ZERO                          
                TS              ZRUPT                           
                RELINT                                          
                AD              TIME4                           
                TS              SKEEP1                          
TENMS           CS              SKEEP1                          
                AD              TIME4                           # WAIT FOR NEXT TIME4 INCREMENT
                EXTEND                                          
                BZF             TENMS                           
                INHINT                                          
                CA              ZRUPT                           
                EXTEND                                          
                BZF             +2                              # NO INTERRUPT.
                TC              RUPTCHK                         # THERE WAS AN INTERRUPT. START AGAIN.
                CAF             S+1                             # 2 1/2 MS UNTILE NEXT T3 INTERRUPT.
                TC              WAITLIST                        
                EBANK=          LST1                            
                2CADR           TSKADRS                         

                CA              S+MAX                           
                AD              OVCON                           # CONTROLS TIME SPENT IN OF-UF LOOP
                RELINT                                          
WAIT            CS              A                               
                CCS             A                               
                TC              INHNTCHK                        
RUPTCON         ADRES           C(BRUPT)                        
                AD              S+2                             
                TC              WAIT                            
INHNTCHK        INHINT                                          # T3 RUPT SHOULD BE WAITING
                TS              SKEEP5                          
                TC              ERRORS                          
                RELINT                                          
C(BRUPT)        CS              ZRUPT                           # INTERRUPT SHOULD HAPPEN HERE
                EXTEND                                          
                BZF             +6                              # MAKES SURE AN INTERRUPT DID OCCUR
                TC              INSTCHK                         # AN INTERRUPT. END OF RUPTCHK
TSKADRS         CS              ZRUPT                           
                AD              RUPTCON                         
                TC              -1CHK                           
                TC              TASKOVER                        
                TC              ERRORS                          # NO INTERRUPT                        

# Go perform the (bugfixed) instruction-level tests from Retread 44.
INSTCHK         TC              CHECKNJ                         # CHECK FOR NEW JOB
                TC              POSTJUMP
                CADR            TCCHK

# Retread tests are done. Go perform custom extended tests.
INSTDONE        TC              CHECKNJ                        
                TC              POSTJUMP
                CADR            EXTTESTS

# All done checking instructions out. Move on.
EXTTDONE        TC              SMODECHK                        

# IN-OUT1 CHECKS ALL PULSES OF WRITE AND READ
IN-OUT1         CA              S-1                             
WRITECHK        EXTEND                                          
                WRITE           Q                               
                LXCH            Q                               # PUT C(Q) IN L
                TC              -1CHK                           
READCHK         EXTEND                                          # C(L) = 77776
                READ            L                               
                TC              -1CHK                           
                CA              L                               
                TC              -1CHK                           

# IN-OUT2 CHECKS ALL PULSES OF ROR AND WOR
IN-OUT2         CS              S+3                             
RORCHK          TS              L                               # 77774
                CA              DVCON                           # 37776
                EXTEND                                          
                ROR             L                               # $ ROR, -1
                TC              -1CHK                           
WORCHK          CA              DVCON                           # C(L) STILL 77774
                EXTEND                                          
                WOR             L                               # $ WOR, -1
                TC              -1CHK                           
                CA              L                               
                TC              -1CHK                           

# IN-OUT3 CHECKS ALL PULSES OF RAND, WAND, AND RXOR
IN-OUT3         CS              DVCON                           
RANDCHK         TS              L                               # 40001
                CA              S13BITS                         # 17777
                EXTEND                                          
                RAND            L                               # $ RAND, +1
                TC              +1CHK                           
WANDCHK         CA              S13BITS                         # C(L) STILL 40001
                EXTEND                                          
                WAND            L                               # $ WAND, +1
                TC              +1CHK                           
                CS              S+5                             
                XCH             L                               # ALSO PUT -5 IN L FOR RXORCHK
                TC              +1CHK                           
RXORCHK         CA              S+6                             
                EXTEND                                          
                RXOR            L                               # $ RXOR, -3
                AD              S+2                             
                TC              -1CHK                           
                CA              L                               
                AD              S+4                             
                TC              -1CHK                           

                TC              SMODECHK                        

# COUNTCHK COUNTS UP 14 BIT NUMBER WITH SIGN.
# TAKES APPROXIMATELY 8.7 SECONDS.
# ** PUT IN CCS NEWJOB FOR ROPE.
COUNTCHK        EXTEND                                          
                DCA             S+MAX                           
                DXCH            SKEEP6                          # PUT 37777 IN SKEEP6 AND 40000 IN SKEEP7
+LOOP           CA              SKEEP6                          
                XCH             Q                               
                EXTEND                                          
                DCS             L                               
                CCS             A                               
                TC              -NMBR                           
                TC              ENDCOUNT                        
                TS              SKEEP6                          
                AD              SKEEP7                          
                TC              -1CHK                           
                INCR            SKEEP7                          
                TC              +LOOP                           
-NMBR           AD              L                               
                TC              -1CHK                           
                TC              CHECKNJ                         # CHECK FOR NEW JOB
                CS              SKEEP6                          
                TC              +LOOP           +1              
ENDCOUNT        CA              SKEEP7                          # -0
                AD              SKEEP6                          # SKEEP6 SHOULD BE +0
                TC              -0CHK                           

# O-UFLOW COUNTS DOWN OVERFLOW AND UNDERFLOW NUMBERS.
# TAKES APPROXIMATELY 10.8 SECONDS
O-UFLOW         CA              S-MAX                           
                TS              SKEEP5                          # 40000
                CS              A                               
OFLOOP          INHINT                                          
                AD              S+MAX                           
                AD              S+1                             
                XCH             Q                               
                CCS             Q                               
                TC              -NMBRS                          
                TC              ERRORS                          # CAN PUT IN CONSTANT
                TS              SKEEP3                          
                TC              ERRORS                          
                CA              SKEEP3                          
                AD              SKEEP5                          
                TC              -1CHK                           
                RELINT                                          
                TC              CHECKNJ                         # CHECK FOR NEW JOB
                CA              SKEEP4                          
                EXTEND                                          
                DIM             SKEEP5                          
                TC              OFLOOP                          
-NMBRS          TS              SKEEP4                          
                TC              ENDOFUF                         
                CA              SKEEP4                          
                AD              SKEEP5                          
                TC              -1CHK                           
                CA              SKEEP5                          
                AD              S-MAX                           
                AD              S-1                             
                TC              OFLOOP          +3              
ENDOFUF         CA              SKEEP5                          
                TC              -0CHK                           
                CS              SKEEP4                          
                AD              DVCON                           
                TC              -1CHK                           
                RELINT                                          

                TC              SMODECHK                        

# SKEEP7 HOLDS LOWEST OF TWO ADDRESSES BEING CHECKED.
# SKEEP6 HOLDS B(X+1).
# SKEEP5 HOLDS B(X).
# SKEEP4 CONTROLS CHECKING OF NON-SWITCHABLE ERASABLE MEMORY WITH
# BANK NUMBERS IN EB.
# SKEEP3 HOLDS LAST ADDRESS BEING CHECKED (HIGHEST ADDRESS).
# SKEEP2 HOLDS C(EBANK) DURING CHECKNJ
# ERASCHK TAKES APPROXMATELY 7 SECONDS
ERASCHK         CA              S+1                             
                TS              SKEEP4                          
0EBANK          CA              S+ZERO                          
                TS              EBANK                           
                CA              ERASCON3                        # 01461
                TS              SKEEP7                          # STARTING ADDRESS
                CA              S10BITS                         # 01777
                TS              SKEEP3                          # LAST ADDRESS CHECKED
                TC              ERASLOOP                        

E134567B        CA              ERASCON6                        # 01400
                TS              SKEEP7                          # STARTING ADDRESS
                CA              S10BITS                         # 01777
                TS              SKEEP3                          # LAST ADDRESS CHECKED
                TC              ERASLOOP                        

2EBANK          CA              ERASCON6                        # 01400
                TS              SKEEP7                          # STARTING ADDRESS
                CA              ERASCON4                        # 01774
                TS              SKEEP3                          # LAST ADDRESS CHECKED
                TC              ERASLOOP                        

NOEBANK         TS              SKEEP4                          # +0
                CA              ERASCON1                        # 00061
                TS              SKEEP7                          # STARTING ADDRESS
                CA              ERASCON2                        # 01374
                TS              SKEEP3                          # LAST ADDRESS CHECKED

ERASLOOP        INHINT                                          
                EXTEND                                          
                INDEX           SKEEP7                          
                DCA             0000                            
                DXCH            SKEEP5                          # STORES C(X) AND C(X-1) IN SKEEP6 AND 5.
                CA              SKEEP7                          
                TS              ERESTORE                        # IF RESTART, RESTORE C(X) AND C(X+1)
                TS              L                               
                INCR            L                               
                NDX             A                               
                DXCH            0000                            # PUTS OWN ADDRESS IN X AND X +1
                NDX             SKEEP7                          
                CS              0001                            # CS  X+1
                NDX             SKEEP7                          
                AD              0000                            # AD X
                TC              -1CHK                           
                CA              ERESTORE                        # HAS ERASABLE BEEN RESTORED
                EXTEND                                          
                BZF             ELOOPFIN                        # YES, EXIT ERASLOOP.
                EXTEND                                          
                NDX             SKEEP7                          
                DCS             0000                            # COMPLEMENT OF ADDRESS OF X AND X+1
                NDX             SKEEP7                          
                DXCH            0000                            # PUT COMPLEMENT OF ADDRESS OF X AND X+1
                NDX             SKEEP7                          
                CS              0000                            # CS X
                NDX             SKEEP7                          
                AD              0001                            # AD X+1
                TC              -1CHK                           
                CA              ERESTORE                        # HAS ERASABLE BEEN RESTORED
                EXTEND                                          
                BZF             ELOOPFIN                        # YES, EXIT ERASLOOP.
                EXTEND                                          
                DCA             SKEEP5                          
                NDX             SKEEP7                          
                DXCH            0000                            # PUT B(X) AND B(X+1) BACK INTO X AND X+1
                CA              S+ZERO                          
                TS              ERESTORE                        # IF RESTART, DO NOT RESTORE C(X), C(X+1)
ELOOPFIN        RELINT                                          
                CA              EBANK                           # STORES C(EBANK)
                TS              SKEEP2                          
                TC              CHECKNJ                         # CHECK FOR NEW JOB
                CA              SKEEP2                          # REPLACES B(EBANK)
                TS              EBANK                           
                INCR            SKEEP7                          
                CS              SKEEP7                          
                AD              SKEEP3                          
                EXTEND                                          
                BZF             +2                              
                TC              ERASLOOP                        # GO TO NEXT ADDRESS IN SAME BANK
                CCS             SKEEP4                          
                TC              NOEBANK                         
                INCR            SKEEP4                          # PUT +1 IN SKEEP4
                CA              EBANK                           
                AD              SBIT9                           
                TS              EBANK                           
                AD              ERASCON5                        # 76777, CHECK FOR BANK E3
                EXTEND                                          
                BZF             2EBANK                          
                CCS             EBANK                           
                TC              E134567B                        # GO TO EBANKS 1,3,4,5,6, AND 7
                CA              ERASCON6                        # END OF ERASCHK
                TS              EBANK                           
# CNTRCHK PERFORMS A CS OF ALL REGISTERS FROM OCT. 60 THROUGH OCT. 10.
# INCLUDED ARE ALL COUNTERS, T6-1, CYCLE AND SHIFT, AND ALL RUPT REGISTERS
CNTRCHK         CAF             CNTRCON                         # 00050
CNTRLOOP        TS              SKEEP2                          
                AD              SBIT4                           # +10 OCTAL
                INDEX           A                               
                CS              0000                            
                CCS             SKEEP2                          
                TC              CNTRLOOP                        

# CYCLSHFT CHECKS THE CYCLE AND SHIFT REGISTERS
CYCLSHFT        CA              CONC+S1                         # 25252
                TS              CYR                             # C(CYR) = 12525
                TS              CYL                             # C(CYL) = 52524
                TS              SR                              # C(SR) = 12525
                TS              EDOP                            # C(EDOP) = 00125
                AD              CYR                             # 37777         C(CYR) = 45252
                AD              CYL                             # 00-12524      C(CYL) = 25251
                AD              SR                              # 00-25251      C(SR) = 05252
                AD              EDOP                            # 00-25376      C(EDOP) = +0
                AD              CONC+S2                         # C(CONC+S2) = 52400
                TC              -1CHK                           
                AD              CYR                             # 45252
                AD              CYL                             # 72523
                AD              SR                              # 77775
                AD              EDOP                            # 77775
                AD              S+1                             # 77776
                TC              -1CHK                           

                INCR            SCOUNT          +1              
                TC              SMODECHK                        
                TC              ROPECHK                         

# SKEEP1 HOLDS SUM
# SKEEP2 HOLDS PRESENT CONTENTS OF ADDRESS IN ROPECHK AND SHOWSUM ROUTINES
# SKEEP2 HOLDS BANK NUMBER IN LOW ORDER BITS DURING SHOWSUM DISPLAY
# SKEEP3 HOLDS PRESENT ADDRESS (00000 TO 01777 IN COMMON FIXED BANKS)
#                              (04000 TO 07777 IN FXFX BANKS)
# SKEEP3 HOLDS BUGGER WORD DURING SHOWSUM DISPLAY
# SKEEP4 HOLDS BANK NUMBER AND SUPER BANK NUMBER
# SKEEP5 COUNTS 2 SUCCESSIVE TC SELF WORDS
# SKEEP6 CONTROLS ROPECHK OR SHOWSUM OPTION
# SKEEP7 CONTROLS WHEN ROUNTINE IS IN COMMON FIXED OR FIXED FIXED BANKS

STSHOSUM        TC              GRABDSP                         
                TC              PREGBSY                         
                TC              +3                              
ROPECHK         CA              S-ZERO                          
                TS              SKEEP6                          # ROPECHK OPTION
                CA              S+ZERO                          
                TS              SKEEP4                          # BANK NUMBER
                CA              S+1                             
COMMFX          TS              SKEEP7                          
                CA              S+ZERO                          
                TS              SKEEP1                          
                TS              SKEEP3                          
                CA              S+1                             
                TS              SKEEP5                          # COUNTS DOWN 2 TC SELF WORDS
COMADRS         CA              SKEEP4                          
                TS              L                               # TO SET SUPER BANK
                MASK            HI5                             
                AD              SKEEP3                          
                TC              SUPDACAL                        # SUPER DATA CALL
                TC              ADSUM                           
                AD              SBIT11                          # 02000
                TC              ADRSCHK                         

FXFX            CS              A                               
                TS              SKEEP7                          
                EXTEND                                          
                BZF             +3                              
                CA              SBIT12                          # 04000, STARTING ADDRESS OF BANK 02
                TC              +2                              
                CA              SBNK03                          # 06000, STARTING ADDRESS OF BANK 03
                TS              SKEEP3                          
                CA              S+ZERO                          
                TS              SKEEP1                          
                CA              S+1                             
                TS              SKEEP5                          # COUNTS DOWN 2 TC SELF WORDS
FXADRS          INDEX           SKEEP3                          
                CA              0000                            
                TC              ADSUM                           
                TC              ADRSCHK                         

ADSUM           TS              SKEEP2                          
                AD              SKEEP1                          
                TS              SKEEP1                          
                CAF             S+ZERO                          
                AD              SKEEP1                          
                TS              SKEEP1                          
                CS              SKEEP2                          
                AD              SKEEP3                          
                TC              Q                               

ADRSCHK         LXCH            A                               
                CCS             SKEEP5                          # IS CHECKSUM FINISHED
                TC              +3                              # NO
                TC              +2                              # NO
                TC              SOPTION                         # GO TO ROPECHK SHOWSUM OPTION
                CCS             L                               # -0 MEANS A TC SELF WORD.
                TC              CONTINU                         
                TC              CONTINU                         
                TC              CONTINU                         
                CCS             SKEEP5                          
                TC              CONTINU         +1              
                CA              S-1                             
                TC              CONTINU         +1              # AD IN THE BUGGER WORD
CONTINU         CA              S+1                             # MAKE SURE TWO CONSECUTIVE TC SELF WORDS
                TS              SKEEP5                          
                CCS             SKEEP6                          # +1 IN SKEEP6, SHOWSUM VIA EXECUTIVE
                CCS             NEWJOB                          
                TC              CHANG1                          
                TC              +2                              
                TC              CHECKNJ                         # -0 IN SKEEP6 FOR ROPECHK

ADRS+1          INCR            SKEEP3                          
                CCS             SKEEP7                          
                TC              COMADRS                         
                TC              COMADRS                         
                TC              FXADRS                          
                TC              FXADRS                          

NXTBNK          CS              SKEEP4                          
                AD              LSTBNKCH                        # LAST BANK TO BE CHECKED
                EXTEND                                          
                BZF             ENDSUMS                         # END OF SUMMING OF BANKS.
                CA              SKEEP4                          
                AD              SBIT11                          
                TS              SKEEP4                          # 37 TO 40 INCRMTS SKEEP4 BY END RND CARRY
                TC              CHKSUPR                         
17TO20          CA              SBIT15                          
                ADS             SKEEP4                          # SET FOR BANK 20
                TC              GONXTBNK                        
CHKSUPR         MASK            HI5                             
                EXTEND                                          
                BZF             NXTSUPR                         # INCREMENT SUPER BANK
27TO30          AD              S13BITS                         
                EXTEND                                          
                BZF             +2                              # BANK SET FOR 30
                TC              GONXTBNK                        
                CA              SIXTY                           # FIRST SUPER BANK
                ADS             SKEEP4                          
                TC              GONXTBNK                        
NXTSUPR         AD              SUPRCON                         # SET BNK 30 + INCR SUPR BNK AND CANCEL
                ADS             SKEEP4                          # ERC BIT OF THE 37 TO 40 ADVANCE.
GONXTBNK        CCS             SKEEP7                          
                TC              COMMFX                          
                CA              S+1                             
                TC              FXFX                            
                CA              SBIT7                           # HAS TO BE LARGER THAN NO OF FXSW BANKS.
                TC              COMMFX                          

ENDSUMS         CCS             SKEEP6                          
                TC              ROPECHK         +2              # START SHOWSUM AGAIN
                TC              ERRORS                          # Available space.
                TC              ERRORS
                TC              MPNMBRS         -1              # ROPECHK IS COMPLETED

SOPTION         CA              SKEEP4                          
                MASK            HI5                             # = BANK BITS
                TC              LEFT5                           
                TS              L                               # BANK NUMBER BEFORE SUPER BANK
                CA              SKEEP4                          
                MASK            S8BITS                          # = SUPER BANK BITS
                EXTEND                                          
                BZF             SOPT                            # BEFORE SUPER BANK
                TS              SR                              # SUPER BANK NECESSARY
                CA              L                               
                MASK            SEVEN                           
                AD              SR                              
                TS              L                               # BANK NUMBER WITH SUPER BANK
SOPT            CCS             SKEEP6                          
                TC              SDISPLAY                        
VNCON           OCTAL           00501                           # USED IN SHOWSUM. DISPLAY 3 REGISTERS.
                EBANK=          NEWJOB                          
LSTBNKCH        BBCON*                                          # * CONSTANT, LAST BANK.                

# CHANGE TO 31777 IF BANK 23 IS LAST BANK USED
BNKCHK          CCS             SKEEP1                          # WHEN C(SKEEP6) = -0
                TC              +4                              
SCADR           FCADR           NOKILL                          # * CONSTANT, USED IN SHOWSUM ONLY
                TC              +2                              
                CA              S-1                             # FOR BANK 00
                TS              SKEEP1                          
                CS              L                               # = - BANK NUMBER
                AD              SKEEP1                          
                TC              -1CHK                           
                TC              NXTBNK                          

# INITIALIZE SKEEP6 TO +1 TO PERFORM SHOWSUM
# START OF ROUTINE THAT DISPLAYS SUM OF EACH BANK
SHOWSUM         CAF             S+1                             
                TS              SKEEP6                          # SHOWSUM OPTION
                CAF             S+ZERO                          
                TS              SMODE                           # PUT SELF-CHECK TO SLEEP
                CA              SELFADRS                        # INITIALIZE SELFRET TO GO TO SELFCHK.
                TS              SELFRET                         
                INHINT                                          
                CAF             PRIO2                           
                TC              NOVAC                           
                EBANK=          SELFRET                         
                2CADR           STSHOSUM                        

                RELINT                                          
                TC              ENDOFJOB                        

SDISPLAY        CA              L                               # = BANK NUMBER
                XCH             SKEEP2                          # SKEEP2 HOLDS BANK NUMBER DURING DISPLAY
                TS              SKEEP3                          # SKEEP3 HOLDS BUGGER WORD DURING DISPLAY
NOKILL          CAF             ADRS1                           # ADDRESS OF SKEEP1
                TS              MPAC            +2              
                CAF             VNCON                           # DISPLAY 3 REGISTERS
                TC              NVSUB                           
                TC              SBUSY                           
                TC              FLASHON                         
                TC              ENDIDLE                         
                TC              +3                              # FINISHED WITH SHOWSUM
                TC              NXTBNK                          
                TC              NOKILL                          # SO CAN LOAD WITHOUT KILLING SHOWSUM
                TC              FREEDSP                         
                CA              SELFADRS                        # INITIALIZE SKEEP1 TO GO TO SELFCHK.
                TS              SKEEP1                          
                TC              ENDOFJOB                        

SBUSY           CAF             SCADR                           
                TC              NVSUBUSY                        

                TC              SMODECHK                        

# MULTIPLY SUBROUTINE TAKES APPROXIMATELY 19 SECONDS.
# (37777) X (37777 THROUGH 00001)
# C(A) COUNTS DOWN.  C(L) COUNTS UP.
MPNMBRS         CAF             S+MAX                           
                TS              SKEEP2                          
                CAF             S+MAX                           
                EXTEND                                          
                MP              SKEEP2                          
                AD              L                               # C(A) = 37777
                AD              S-MAX                           
                TC              -0CHK                           
                TC              CHECKNJ                         # CHECK FOR NEW JOB
                CCS             SKEEP2                          
                TS              SKEEP2                          
                CCS             SKEEP2                          
                TC              MPNMBRS         +2              
# (-1) X (37777 THROUGH 00001)
                CAF             S+MAX                           
                TS              SKEEP2                          
MPHIGH1         CAF             S-1                             
                EXTEND                                          
                MP              SKEEP2                          # C(A) = -0
                TC              -0CHK                           
                CA              L                               
                AD              SKEEP2                          
                TC              -0CHK                           
                TC              CHECKNJ                         # CHECK FOR NEW JOB
                CCS             SKEEP2                          
                TS              SKEEP2                          
                CCS             SKEEP2                          
                TC              MPHIGH1                         

# INTERCHANGE MULTIPLIER AND MULTIPLICAND
# (37777 THROUGH 00001) X (37777)
# C(A) COUNTS DOWN.  C(L) COUNTS UP.
                CAF             S+MAX                           
                TS              SKEEP1                          
MPAGAIN         CA              SKEEP1                          
                EXTEND                                          
                MP              S+MAX                           
                AD              L                               # C(A) = 37777
                AD              S-MAX                           
                TC              -0CHK                           
                TC              CHECKNJ                         # CHECK FOR NEW JOB
                CCS             SKEEP1                          
                TS              SKEEP1                          
                CCS             SKEEP1                          
                TC              MPAGAIN                         
# (37777 THROUGH 00001) X (-1)
                CAF             S+MAX                           
                TS              SKEEP1                          
MPHIGH2         CA              SKEEP1                          
                EXTEND                                          
                MP              S-1                             
                TC              -0CHK                           
                CA              L                               
                AD              SKEEP1                          
                TC              -0CHK                           
                TC              CHECKNJ                         # CHECK FOR NEW JOB
                CCS             SKEEP1                          
                TS              SKEEP1                          
                CCS             SKEEP1                          
                TC              MPHIGH2                         

                TC              SMODECHK                        

# ONCE THROUGH DIVIDE SUBROUTINE TAKES APPROXIMATELY 0.01 SECOND.
# TOTAL TIME SPENT IN DIVIDE SUBROUTINE IS APPROXIMATELY 21.5 SECONDS
# DIVIDE +-/17777/ +-/37777/ BY +-/20000/. THE CONTENTS OF THE A REGISTER
# AND THE L REGISTER WILL HAVE OPPOSITE SIGNS BEFORE DIVISION. THE
# QUOTIENT SHOULD BE +-/37774/ DEPENDING ON THE SIGN OF A AND THE SIGN
# OF THE DIVISOR. THE REMAINDER = +-1 DEPENDING ON THE SIGN OF A
DVCHECK         CS              SBIT12                          # -(04000)
                TS              SKEEP4                          
DVLOOP          INCR            SKEEP4                          
DV1CHK          CA              SBIT14                          # 20000
                TS              SKEEP1                          
                CS              A                               
                TS              SKEEP2                          
DV1++           CS              S+MAX                           
                TS              L                               # 40000
                CA              S13BITS                         
                EXTEND                                          
                DV              SKEEP1                          # +37774, +1
                TS              SKEEP7                          # 37774
                CA              S-MAX                           
                XCH             L                               # ALSO PUT 40000 IN L
                TC              +1CHK                           
DV1+-           CA              S13BITS                         # 17777
                EXTEND                                          
                DV              SKEEP2                          # -37774, +1
                AD              SKEEP7                          
                TC              -0CHK                           
                CA              S+MAX                           
                XCH             L                               # ALSO PUT 37777 IN L
                TC              +1CHK                           
DV1-+           CS              S13BITS                         # 60000
                EXTEND                                          
                DV              SKEEP1                          # -37774, -1
                TS              SKEEP6                          
                AD              SKEEP7                          
                TC              -0CHK                           
                CA              S+MAX                           
                XCH             L                               # ALSO PUT 37777 IN L
                TC              -1CHK                           
DV1--           CS              S13BITS                         # 60000
                EXTEND                                          
                DV              SKEEP2                          # +37774, -1
                AD              SKEEP6                          
                TC              -0CHK                           
                CA              S+MAX                           
                XCH             L                               # ALSO PUT 37777 IN L FOR DV2
                TC              -1CHK                           
                CA              SKEEP6                          # -37774
                AD              S-2                             # -37776
                AD              S+MAX                           
                TC              +1CHK                           

# DIVIDE +17777 + 37777 BY +20000.  THE RESULT SHOULD BE +37777 WITH
# +17777 REMAINDER.
DV2CHK          CA              S13BITS                         
                EXTEND                                          
                DV              SKEEP1                          
                AD              S-MAX                           
                TC              -0CHK                           
                CS              SBIT14                          # -20000
                AD              L                               
                TC              -1CHK                           

# DIVIDE +37776 BY +37776.  THE RESULT SHOULD BE +37777 AND THE
# REMAINDER SHOULD BE +37776.
DV4CHK          CA              S+ZERO                          
                TS              L                               
                CA              DVCON                           
                TS              SKEEP1                          # 37776
                EXTEND                                          
                DV              SKEEP1                          
                CS              A                               
                AD              DVCON                           
                TC              -1CHK                           
                CA              L                               # 37776
                AD              S-MAX                           
                TC              -1CHK                           

# DIVIDE SAME (ZERO).  THE CONTENTS OF THE A REGISTER AND L REGISTER WILL
# HAVE OPPOSITE SIGNS BEFORE DIVISION.  THE QUOTIENT WILL BE + OR - MAX.,
# DEPENDING UPON THE SIGN OF THE L REGISTER AND THE SIGN OF THE DIVISOR.
# C(L) REMAINS THE SAME BECAUSE IT IS THE DIVIDEND.
DV5CHK          CA              S+ZERO                          
                TS              SKEEP1                          # +0
                TS              L                               
                CS              A                               
                TS              SKEEP2                          # -0
DV5++           EXTEND                                          
                DV              SKEEP1                          # +37777, +0
                TS              SKEEP7                          # 37777
                CA              L                               
                TC              +0CHK                           
DV5+-           CS              A                               
                EXTEND                                          
                DV              SKEEP2                          # 40000, +0
                TS              SKEEP6                          # 40000
                AD              SKEEP7                          
                TC              -0CHK                           
                CS              A                               
                XCH             L                               # ALSO PUT -0 IN L
                TC              +0CHK                           
DV5-+           EXTEND                                          
                DV              SKEEP1                          # 40000, -0
                AD              SKEEP7                          
                TC              -0CHK                           
                CA              L                               
                TC              -0CHK                           
DV5--           EXTEND                                          
                DV              SKEEP2                          # 37777, -0
                AD              SKEEP6                          
                TC              -0CHK                           
                CA              L                               
                TC              -0CHK                           
                CA              SKEEP6                          # CHECK QUOTIENT
                AD              DVCON                           
                TC              -1CHK                           

                TC              CHECKNJ                         # CHECK FOR NEW JOB
                CA              SKEEP4                          
                EXTEND                                          
                BZMF            DVLOOP                          
                INCR            SCOUNT          +2              
                TC              SELFCHK                         # START SELF-CHECK AGAIN

ENDSLFS1        EQUALS                                          

                SETLOC          ENDFAILS   

SBNKOPTN        TS              SKEEP1                          
                CS              A                               # GO TO BACKUP IDLE LOOP IF C(SMODE) IS
                AD              THREE                           # GREATER THAN OCTAL 12
                EXTEND                                          
                BZMF            TOSMODE         -2              
                CA              S+ZERO                          # ZERO SMODE FOR OPTIONS ABOVE 8.
                TS              SMODE                           
                CA              SKEEP1                          
                NDX             A                               
                TC              SOPTON11        -1              
SOPTON11        TC              DSKYCHK                         
SOPTON12        TC              RSTRTCHK

                CA              S+ZERO                          
                TS              SMODE                           
TOSMODE         TC              POSTJUMP                        
                CADR            SELFCHK

# THE FOLLOWING CONSTANTS ARE USED BY DSKYCHK.
DSKYCODE        OCTAL           05265                           # 00
                OCTAL           04143                           # 11
                OCTAL           05471                           # 22
                OCTAL           05573                           # 33
                OCTAL           04757                           # 44
                OCTAL           05736                           # 55
                OCTAL           05634                           # 66
                OCTAL           05163                           # 77
                OCTAL           05675                           # 88
                OCTAL           05777                           # 99
+-ZERO          OCTAL           07265                           
11DEC.          OCTAL           00013                           

# BITS 2 AND 6 TURN ON THE COMPUTER ACTIVITY AND VERB-NOUN FLASH.
S11CHAN         OCTAL           00042                           

DSKYCHK         CAF             TEN                             
                TS              SKEEP3                          
                INHINT                                          
                CAF             S+1                             # SET UP TEN MS INTERRUPT
                TC              WAITLIST                        
                2CADR           NXTNMBR                         

                RELINT                                          
                TC              TOSMODE                         # GO TO IDLE LOOP

SDSPTAB         TS              SKEEP3                          
                INHINT                                          
                NDX             SKEEP3                          
                CS              DSKYCODE                        
SBLANKS         TS              DSPTAB                          
                TS              DSPTAB          +1              
                TS              DSPTAB          +2              
                TS              DSPTAB          +3              
                TS              DSPTAB          +4              
                TS              DSPTAB          +5              
                TS              DSPTAB          +6              
                TS              DSPTAB          +7              
                TS              DSPTAB          +8D             
                TS              DSPTAB          +9D             
                TS              DSPTAB          +10D            
                CA              11DEC.                          
                TS              NOUT                            

DSKYWAIT        INHINT                                          
                CAF             BIT10                           # 5.12 SECOND WAIT
                TC              WAITLIST                        
                2CADR           NXTNMBR                         

                RELINT                                          
                TC              TASKOVER                        

NXTNMBR         CCS             SKEEP3                          
                TC              SDSPTAB                         # 9 THROUGH 0
                TC              -SIGN                           # -ZEROS
                TC              +SIGN                           # +ZEROS
                CCS             SKEEP2                          
                TC              NODSPLAY                        # PUTS BLANKS IN DSKY DISPLAY
                TC              LITESOUT                        # TURN OFF LIGHTS

-SIGN           CS              S+1                             
                TS              SKEEP3                          
                CA              S11CHAN                         # TURN ON VERB-NOUN FLASH
                EXTEND                                          # AND COMPUTER ACTIVITY LIGHTS.
                WOR             DSALMOUT                        
                CS              +-ZERO                          
                INHINT                                          
                TS              DSPTAB                          
                TS              DSPTAB          +3              
                TS              DSPTAB          +5              
                CAF             THREE                           
                TS              NOUT                            
                TC              DSKYWAIT                        
+SIGN           CS              ZERO                            
                TS              SKEEP3
                CA              S+1                             
                TS              SKEEP2                          
                INHINT                                          
                CS              +-ZERO                          
                TS              DSPTAB          +1              
                TS              DSPTAB          +4              
                TS              DSPTAB          +6              
                CAF             THREE                           
                TS              NOUT                            
                TC              DSKYWAIT                        

NODSPLAY        TS              SKEEP2                          # +0
                CS              BIT12                           # BLANKS
                INHINT                                          
                TC              SBLANKS                         # PUTS BLANKS IN ALL DISPLAYS

LITESOUT        CS              S11CHAN                         
                EXTEND                                          
                WAND            DSALMOUT                        # TURN OFF COMPUTER ACTIVITY LIGHT.
                TC              TASKOVER                        # END OF DSKYCHK

ALRMSTRT        INDEX           PHASE2
                TC              +0
                TC              TCTRCONT                        # Phase 1: TC trap
                TC              NOTCCONT                        # Phase 2: No TC
                TC              RPLKCONT                        # Phase 3: Rupt lock
                TC              NORPCONT                        # Phase 4: No rupts
                TC              WTCHCONT                        # Phase 5: Night watchman
                TC              PARCONT                         # Phase 6: Parity fail

RSTRTCHK        EXTEND                                          # Entry point to the hardware alarm / restart checks
                WRITE           77                              # Clear channel 77 by writing to it

# Check the TC Trap alarm -- only TC executed for too long
TCTRPCHK        TC              PHASCHNG
                OCT             00102

                INHINT
                CAF             THREE                           # Schedule a task to break out of the loop if the
                TC              WAITLIST                        # alarm doesn't work.
                2CADR           TCTRPFAL

                RELINT
                CAF             ADRS1                           # Trigger a TC Trap. We do this in erasable  memory
                TS              SKEEP1                          # so we can break out of it if the restart
                TC              SKEEP1                          # doesn't occur as expected.

TCTRPFAL        CAF             TCTRPXIT                        # It's been too long with no restart. Break the
                TS              SKEEP1                          # loop at SKEEP1.
                TC              TASKOVER
TCTRPXIT        TC              TCTRCONT

NOTCFAIL        CA              S+ZERO                          # It's been too long with no restart. Zero SKEEP2
                TS              SKEEP2                          # so the CA..ADS loop exits.
                TC              TASKOVER

TESTRBIT        EXTEND                                          # Read the restart cause from channel 77
                RXOR            77
                MASK            CTRMASK                         # Filter out counter alarms, which can be caused by
                                                                # any other type of restart if a counter request
                                                                # was interrupted.
                TCF             +0CHK                           # Make sure only the correct bit was set.

RSTRTRST        CAF             BIT10                           # Turn off the RESTART light
                EXTEND
                WOR             DSALMOUT
                CS              BIT10
                EXTEND
                WAND            DSALMOUT
                EXTEND
                WRITE           77                              # Clear the restart cause from channel 77.
                TC              Q

TCTRCONT        TC              PHASCHNG                        # Turn off the restart group so we don't come back
                OCT             00002                           # here for an unexpected reason.

                CAF             TCTRPBIT                        # Check for the TC trap bit
                TC              TESTRBIT
                TC              RSTRTRST

# Check the TC Trap alarm -- no TC executed for too long
NOTCCHK         TC              PHASCHNG
                OCT             00202

                INHINT
                CAF             THREE                           # Set up a waitlist task to break us out of the
                TC              WAITLIST                        # CA-ADS loop if the alarm doesn't occur
                2CADR           NOTCFAIL

                RELINT
                CA              S-2
                TS              SKEEP2                          # Put -2 into SKEEP2.

# There's many ways to do an infinite loop without TC or TCF. However, most of them appear to get transients
# on the TC0 and TCF0 lines during instruction changeover in T12. Since neither pulse is gated to the alarm
# circuit, these transients make the circuit think the computer executed an actual TC or TCF.
# It is unclear if this is an error in the simulator or an actual design flaw.
# Anyways, a CA and ADS loop *doesn't* generate transients on those lines, and so the alarm works as expected.
                CA              SKEEP2                          # Add -2 to Z to loop in place.
                ADS             Z
NOTCCONT        TC              PHASCHNG                        # Turn off the restart group so we don't come back
                OCT             00002                           # here for an unexpected reason.

                CAF             TCTRPBIT
                TC              TESTRBIT
                TC              RSTRTRST

# Check Rupt Lock -- execution stuck in an interrupt for ~140ms
RPTLKCHK        TC              PHASCHNG
                OCT             00302

                CAF             300MSEC                         # Set up a 300ms BUSYLOOP
                TS              SKEEP3
                CAF             ZERO
                TS              SKEEP2                          # SKEEP2 = 0 indicates that BUSYLOOP is a task
                CAF             ONE                             # SKEEP1 will be used to indicate that our task has
                TS              SKEEP1                          # exited without triggering a restart.
                INHINT
                TC              WAITLIST                        # Execute a 300ms loop as a waitlist task (inside
                2CADR           BUSYLOOP                        # the TIME3 interrupt).

                RELINT
RPTWAIT         CS              NEWJOB                          # Play hardball... check in with the night watchman
                                                                # without actually seeing if there's a job to do.
                CCS             SKEEP1                          # We just need to stay alive until a reset or
                TCF             RPTWAIT                         # BUSYLOOP exits.

RPLKCONT        TC              PHASCHNG
                OCT             00002

                CAF             RPTLKBIT
                TC              TESTRBIT
                TC              RSTRTRST

# Check Rupt Lock -- no interrupts for ~140ms
NORPTCHK        TC              PHASCHNG
                OCT             00402

                CAF             ONE                             # Configure BUSYLOOP to just return here
                TS              SKEEP2
                INHINT                                          # Lock interrupts before heading in...
                TC              BUSYLOOP
                RELINT
                
NORPCONT        TC              PHASCHNG
                OCT             00002

                CAF             RPTLKBIT
                TC              TESTRBIT
                TC              RSTRTRST

# Check the Night Watchman -- program fails to check NEWJOB for ~640ms
WATCHCHK        TC              PHASCHNG
                OCT             00502

                CA              S+ZERO                          # Indicate to WTCHCONT that entry to it is permissible
                TS              SKEEP5                          # once

                CA              2SEC                            # Set up a 2 second BUSYLOOP
                TS              SKEEP3
                TC              BUSYLOOP                        # SKEEP2 still = 1

WTCHCONT        CA              SKEEP5                          # Ensure we only get one night wachman alarm.
                TC              +0CHK                           # If this fails, the below logic caused a
                CA              ONE                             # restart when it shouldn't have.
                TS              SKEEP5

                CAF             WATCHBIT                        # Check to make sure night watchman was triggered
                TC              TESTRBIT

                TC              RSTRTRST                        # Try to clear it
                CAF             WATCHBIT                        # Check that we didn't successfully clear it -- it
                TC              TESTRBIT                        # should be asserted for 1.28 seconds

                RELINT
                CA              0.64SEC                         # Wait for 0.64 seconds (which will get us into the
                TS              SKEEP3                          # next night watchman window). Since we just aggravated
                TC              BUSYLOOP                        # it, we shouldn't get any alarms doing this.

                TC              RSTRTRST
                CAF             WATCHBIT                        # Check again that resetting the ch77 bit fails
                TC              TESTRBIT

                CS              NEWJOB                          # Appease the night watchman for this new window, and
                TC              BUSYLOOP                        # wait a further 0.64 seconds until the end of of it

                TC              RSTRTRST
                CAF             S+ZERO                          # Make sure we can actually clear it this time
                TC              TESTRBIT

# Check the parity alarm. There's a couple ways this can happen -- for example, if a scaler or prime
# power failure generating a STRT2 signal were to happen in the middle of an erasable memory cycle,
# before the loaded data was written back out, that location would contain all 0s and therefore have
# incorrect parity.
# An easier guaranteed way, which we'll use here, is to try to access memory in a bank that doesn't
# exist. The superbank bit provides a convenient means of doing this; only superbanks 40-43 exist,
# so trying to hit anything in 44-47 should trigger a parity alarm.
PARFLCHK        TC              PHASCHNG
                OCT             00602

                CS              NEWJOB
                CAF             SUPER100                        # Simply try to load data from the start of bank 44.
                TS              L
                CAF             BNK34ADR
                TC              SUPDACAL

PARCONT         TC              PHASCHNG
                OCT             00002

                CAF             PRITYBIT
                TC              TESTRBIT
                TC              RSTRTRST

ALRMDONE        TC              TOSMODE                         # All done with the hardware alarm checks.

# BUSYLOOP provides a simple means of aggravating certain hardware alarms; it fails to check NEWJOB
# and makes use of a TCF. Its inputs are:
# SKEEP2 = Run context. If positive, subroutine mode is used and control is returned to Q.
#                       If +0, waitlist task mode is used and exit is through TASKOVER. SKEEP1 is set to 0 on exit.
# SKEEP3 = Loop duration in TIME1 counts (10ms).
BUSYLOOP        CS              TIME1                           # Store the start time in SKEEP4
                TS              SKEEP4
BUSYLOP1        CA              TIME1
                AD              SKEEP4                          # Current time - start time
                AD              HALF                            # Account for possible TIME1 overflow
                AD              HALF
                XCH             L                               # Pass the (likely) overflowed value through L
                CS              SKEEP3  
                AD              L                               # Calculate time delta minus expiration duration
                EXTEND
                BZF             +2
                TCF             BUSYLOP1                        # Use a TCF to make sure we don't trigger TC trap
                CCS             SKEEP2                          # All done. Check if we're returning or exiting a
                TC              Q                               # waitlist task.
                CAF             ZERO
                TS              SKEEP1                          # Reset SKEEP1 to let the main test know we're done
                TC              TASKOVER

ENDSLFS2        EQUALS                                          
back to top