Revision b32c97e8bb3647c6e7cbcfcb6d0f48ba43f0d6b4 authored by Ron Burkey on 11 May 2020, 15:50:09 UTC, committed by Ron Burkey on 11 May 2020, 15:50:09 UTC
1 parent b494620
Raw File
AGC_BLK2_INSTRUCTION_CHECK.agc
### FILE="Main.annotation"
## Copyright:   Public domain.
## Filename:    AGC_BLK2_INSTRUCTION_CHECK.agc
## Purpose:     Part of the source code for Retread 44 (revision 0). It was
##              the very first program for the Block II AGC, created as an
##              extensive rewrite of the Block I program Sunrise.
##              This file is intended to be a faithful transcription, except
##              that the code format has been changed to conform to the
##              requirements of the yaYUL assembler rather than the
##              original YUL assembler.
## Reference:   pp. 210-242
## Assembler:   yaYUL
## Contact:     Ron Burkey <info@sandroid.org>.
## Website:     www.ibiblio.org/apollo/index.html
## Mod history: 2016-12-13 MAS  Created from Aurora 12 version.
##              2016-12-16 MAS  Began.
##              2016-12-17 MAS  Completed transcription.
##              2016-12-18 MAS  Typos.
##              2016-12-18 MAS  Added notes about bugs discovered in the
##                              tests present here.
##              2016-12-20 MAS  Fixed a typo in a program label.
## 		2016-12-27 RSB	Proofed comment text using octopus/ProoferComments,
##				and fixed errors found.

## Page 210
                SETLOC          ABORT           +1

# ADDRESSES OF ERASABLE REGISTERS
ADRS1           ADRES           KEEP1
ADRS2           ADRES           KEEP2
ADRS3           ADRES           KEEP3
ADRS4           ADRES           SELF1
ADRS5           ADRES           SELF2
ADRS6           ADRES           S+MAX
ADRS7           ADRES           SELF3

# CONSTANTS USED THROUGHOUT THE INSTRUCTIONS CHECK
SBIT1           OCTAL           00001
SBIT2           OCTAL           00002
SBIT3           OCTAL           00004
SBIT4           OCTAL           00010
SBIT5           OCTAL           00020
SBIT6           OCTAL           00040
SBIT7           OCTAL           00100
SBIT8           OCTAL           00200
SBIT9           OCTAL           00400
SBIT10          OCTAL           01000
SBIT11          OCTAL           02000
SBIT12          OCTAL           04000
SBIT13          OCTAL           10000
SBIT14          OCTAL           20000
SBIT15          OCTAL           40000

## The 00000 below is lightly circled.
S+ZERO          OCTAL           00000
S+1             OCTAL           00001
S+2             OCTAL           00002
S+3             OCTAL           00003
S+4             OCTAL           00004
S+5             OCTAL           00005
S+6             OCTAL           00006
S+7             OCTAL           00007
S6BITS          OCTAL           00077
S7BITS          OCTAL           00177
S13BITS         OCTAL           17777
SODD            OCTAL           25252                           # SEVEN ONE BITS
S+MAX           OCTAL           37777
S-MAX           OCTAL           40000
ALARMCON        OCTAL           40400
SINOUT1         OCTAL           52500
SEVENS          OCTAL           52525                           # EIGHT ONE BITS
SINOUT2         OCTAL           52552
CYRCON          OCTAL           57761
SINOUT3         OCTAL           77725
S-15            OCTAL           77760
S-14            OCTAL           77761
S-7             OCTAL           77770
## Page 211
S-6             OCTAL           77771
S-5             OCTAL           77772
S-4             OCTAL           77773
S-3             OCTAL           77774
S-2             OCTAL           77775
S-1             OCTAL           77776
S-ZERO          OCTAL           77777

# NEXT TWO CONSTANTS ARE USED IN THE DEVIDE SUBROUTINE
DV1CON          OCTAL           14000
DV2CON          OCTAL           37776

# NEXT TWO CONSTANTS ARE ADDRESSESS USED BY EXTRACODE INDEX INSTRUCTIONS
ADRS+1          ADRES           S+1
ADRSDV1         ADRES           DV1CON

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

                CS              A                               
-1CHK           CCS             A                               
                TCF             ERRORS                          
                TCF             ERRORS                          
                CCS             A                               
                TCF             ERRORS                          
                TC              Q                               


ERRORS          XCH             Q                               
                TS              SFAIL                           # SAVE Q FOR FAILURE LOCATION
                INCR            ERCOUNT                         # KEEP TRACK OF NUMBER OF MALFUNCTIONS
                INHINT                                          # TURN ON PROGRAM ALARM LIGHT
                CS              ALARMCON
                MASK            DSPTAB          +11D
                AD              ALARMCON
                TS              DSPTAB          +11D
                RELINT

# IF C(SMODE) IS +NON-ZERO START CHECKING AGAIN AT TCCHK
# IF C(SMODE) IS + PUT +0 IN SMODE AND IDLE
## "CA SMODE" below is marked with a line drawn to a +, and "BZMF STOPCHK" is underlined and marked with a -
                CA              SMODE
                EXTEND
                BZMF            STOPCHK
                TC              SMODECHK
STOPCHK         CA              S+ZERO
                TS              SMODE
## Page 212
                TC              CHECKNJ
## The following CCS has its branch conditions written in: +>0, +0, -<0, and -0.
SMODECHK        CCS             SMODE                           
                TC              +3
                TC              SMODECHK        -1
                TC              +1
                TC              CHECKNJ
                CAF             STRTCHK
                TC              BANKJUMP                        # TO START OF CHECKING ROUTINES
STRTCHK         CADR            TCCHK

                SETLOC          26000

                CA              S+ZERO                          # INITIALIZE COUNT REGISTER
                TS              ERCOUNT
                TS              SCOUNT

# NORMAL USE OF TC AND TCF
TCCHK           TC              +2                              
                TC              CCSCHK                          
                TCF             +2
                TC              ERRORS                          
                TC              Q
                TC              ERRORS                          

## Written to the right of the next few lines is "Written for comp self test and in Gyro S.F. test", signed G&S.
# NORMAL USE OF CA, CS, AND CCS
CCSCHK          CA              S-3
                TS              KEEP1
                CCS             KEEP1
                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                          
                CCS             A                               # C(A) = +1, RESULT OF CCS + NUMBER
                TC              +4
                TC              ERRORS                          
                TC              ERRORS                          
                TC              ERRORS                          
                CCS             A                               # C(A) = +0, RESULT OF CCS + NUMBER
                TC              ERRORS                          
                TC              +3                              
                TC              ERRORS                          
                TC              ERRORS                          
                CS              A
                CCS             A                               # C(A) = -0, RESULT OF CCS +0
                TC              ERRORS                          
## Page 213
                TC              ERRORS                          
                TC              ERRORS                          
                CCS             A                               # RESULT OF CCS -0
                TC              ERRORS                          
                TC              +3                              
                TC              ERRORS                          
                TC              ERRORS                          

# NORMAL USE OF MASK
MSKCHK          CS              S-ZERO
                MASK            S-ZERO                          # 00000, 77777
                TC              -0CHK           -1
                CS              S+ZERO
                MASK            S+ZERO                          # 77777, 00000
                TC              -0CHK           -1
                CA              S+ZERO
                MASK            S+ZERO                          # 00000, 00000
                TC              -0CHK           -1
                CA              S-ZERO
                MASK            S-ZERO                          # 77777, 77777
                TC              -0CHK
# NO EDIT FEATURE OF MASK IS CHECKED
# BITS 9-14 OF WRITE LINES GO TO BITS 1-7 OF EDOP
                CA              S-ZERO                          # 77777
                TS              EDOP                            # 00177
                MASK            EDOP                            # 00177
                TS              KEEP1                           # 00177
                MASK            EDOP                            # 00177
                CS              A                               # 77600
                AD              KEEP1                           # 77777
                TC              -0CHK
# CHECK MASK OF AN SC REGISTER
                CA              S+1
                TS              L
                CA              S-ZERO
                MASK            L
                TC              -1CHK           -1

# NORMAL USE OF XCH, AD, AND TS
                CA              S+MAX                           # 37777
                TS              KEEP1
                AD              KEEP1                           # 01 - 37776
                TS              KEEP2                           # 37776
                TC              ERRORS
                TC              -1CHK           -1
                XCH             KEEP1                           # SKEEP1 NOW +0
                CS              A                               # 40000
                AD              A                               # 10 - 00001
                TS              KEEP3                           # 40001, C(A) = -1
                TC              ERRORS
## Page 214
                AD              KEEP3                           # C(A) = 40000
                AD              KEEP2                           # C(A) = -1
                AD              KEEP1                           # C(A) = -1
                TS              KEEP4                           # -1
                CS              KEEP4                           # +1
                TC              -1CHK           -1

# NORMAL USE OF INCR
# NOT CHECKING COUNTER INTERRUPT
                CA              S+MAX                           # 37777
                TS              KEEP1
                INCR            KEEP1                           # +0
                INCR            KEEP1                           # +1
                INCR            KEEP1                           # +2
                AD              S-MAX
                TC              -0CHK                           # CHECK C(A) HAS NOT CHANGED
                CS              KEEP1
                TS              KEEP1                           # -2
                INCR            KEEP1                           # -1
                CA              KEEP1
                TC              -1CHK
# CHECK     INCREMENT OF AN SC REGISTER
                CA              S-2
                TS              L
                INCR            L
                CA              L
                TC              -1CHK

# NORMAL USE OF ADS
                CA              SBIT13
                TS              KEEP1                           # 10000
                ADS             KEEP1                           # 20000
                ADS             KEEP1                           # OV WITH +0
                TS              KEEP2
                TC              ERRORS
                CS              KEEP1
                TC              -0CHK
# CHECKS ADS OF AN SC REGISTER
                CA              S13BITS                         # 17777
                TS              L
                AD              S+1                             # C(A) = 20000
                ADS             L
                AD              S-MAX
                TC              -0CHK
                CS              L
                AD              S+MAX
                TC              -0CHK

# NORMAL USE OF LXCH
                CA              S+1
## Page 215
                TS              KEEP1                           # +1
                LXCH            KEEP1                           # +1 IN L
                CS              A
                TS              KEEP2                           # -1 IN KEEP2
                LXCH            KEEP2                           # L = -1, KEEP2 = +1
                CS              KEEP2
                TC              -1CHK
                CA              L
                TC              -1CHK

# UNDERFLOW AND OVERFLOW IS LOST IN L REGISTER
                CA              S+MAX
                AD              A
                TS              L                               # OV WITH 37776
                TC              ERRORS
                CS              S+MAX
                AD              A                               # UV WITH 40001
                LXCH            A                               # C(A) = 37776, C(L) = 40001
                TS              KEEP1                           # 37776
                TC              +2
                TC              ERRORS
                CA              L
                TS              KEEP2                           # 40001
                TC              +2
                TC              ERRORS
                AD              KEEP1                           # -0
                TC              -0CHK

# NORMAL USE OF DXCH
                CA              S+MAX
                TS              KEEP2                           # 37777, K+1
                CS              A
                TS              L                               # 40000
                AD              S+1
                TS              KEEP1                           # 40001, K
                CS              A                               # 37776
                DXCH            KEEP1
# A = 40001, L = 37777 ....... KEEP1 = 37776, KEEP2 = 40000
                AD              L
                TC              -1CHK           -1
                CA              KEEP1
                AD              KEEP2
                TC              -1CHK

# NORMAL USE OF DAS (6 CHECKS)
# IF ADDRESS OF K DOES NOT = ZERO, C(L) = +0 AND C(A) = NET OVERFLOW
# C(A) = +0 IF NO OVERFLOW OR UNDERFLOW
# DAD++ WITH NO OVERFLOW
DAS++           CAF             S13BITS
                TS              KEEP1                           # 17777
## Page 216
                TS              KEEP2                           # 17777
                TS              L                               # 17777
                AD              S+1                             # 20000
                DAS             KEEP1
# C(KEEP1) = 37777, C(KEEP2) = 377776
                TC              -0CHK           -1
                XCH             L
                TC              -0CHK           -1
                CS              KEEP1
                AD              KEEP2
                TC              -1CHK
# DAS++ WITH OVERFLOW
DAS++OV         CA              S+MAX
                TS              KEEP1                           # 37777
                TS              KEEP2                           # 37777
                TS              L                               # 37777
                CA              S+1                             # +1
                DAS             KEEP1
# C(KEEP1) = +1, C(KEEP2) = 37776, C(A) = +1,
                TC              -1CHK           -1
                XCH             L
                TC              -0CHK           -1
                CS              KEEP1
                TC              -1CHK
                CA              S-MAX
                AD              KEEP2
                TC              -1CHK
# DAS MIXED SIGNS
DAS+--+         CA              S+MAX
                TS              KEEP1                           # 37777
                CS              A
                TS              KEEP2                           # 40000
                CS              A
                AD              S-1
                TS              L                               # 37776
                CS              A                               # 40001
                DAS             KEEP1
# C(KEEP1) = +1, C(KEEP2) = -1
                TC              -0CHK           -1
                XCH             L
                TC              -0CHK           -1
                CA              KEEP1
                TC              -1CHK           -1
                CA              KEEP2
                TC              -1CHK
# DAS-- WITH NO UNDERFLOW
DAS--           CS              S13BITS
                TS              KEEP1                           # 60000
                TS              KEEP2                           # 60000
                TS              L                               # 60000
## Page 217
                AD              S-1                             # 57777
                DAS             KEEP1
# C(KEEP1) = 40000, C(KEEP2) = 40001
                TC              -0CHK           -1
                XCH             L
                TC              -0CHK           -1
                CS              KEEP2
                AD              KEEP1
                TC              -1CHK
# DAS-- WITH UNDERFLOW
DAS--UV         CA              S-MAX
                TS              KEEP1                           # 40000
                TS              KEEP2                           # 40000
                TS              L                               # 40000
                CA              S-1                             # -1
                DAS             KEEP1
# C:KEEP1) = -1, C(KEEP2) = 40001, C(A) = -1
                TC              -1CHK
                XCH             L
                TC              -0CHK           -1
                CA              KEEP1
                TC              -1CHK
                CA              S+MAX
                AD              KEEP2
                TC              -1CHK           -1
# DAS A.  DOUBLES THE CONTENTS OF THE A REGISTER AND THE L REGISTER.
                CA              S-MAX
                TS              KEEP2                           # 40000
                TS              L                               # 40000
                CS              A
                TS              KEEP1                           # 37777
                DAS             A
# C(A) = OV 37775, C(L) = 40001
                TS              KEEP3
                TC              ERRORS
                CA              L
                AD              KEEP3
                TC              -1CHK

# NORMAL USE OF INDEX WITHOUT EXTRACODE.
# INSTRUCTIONS CHECKED WITH INDEX UP TO FIRST SPACE SKIPPED
# ARE CA, TS, XCH, CCS, AD, TC, TCF, TS WITH OVERFLOW, AND MASK
# FIRST INITIALIZE ERASABLE REGISTERS USED FOR INDEX INSTRUCTION
                CA              S+ZERO
                TS              NDX+0
                CA              ADRS6                           # ADDRESS OF S+MAX
                TS              NDX+MAX
                CA              ADRS1
                TS              NDXKEEP1
                CA              ADRS2
## Page 218
                TS              NDXKEEP2
                CA              ADRS3
                TS              NDXKEEP3
                CA              ADRS4
                TS              NDXSELF1
                CA              ADRS5
                TS              NDXSELF2
NDXCHK          NDX             NDX+MAX                         # CA S+MAX
                CA              0000                            # A = 37777
                NDX             NDXKEEP1                        # TS KEEP1
                TS              0000                            # TS WITH NO OV, UV
                NDX             NDX+0                           # CS   A
                CS              0000                            # A = 40000
                NDX             NDXKEEP1                        # XCH KEEP1
                XCH             0000                            # A = +MAX, KEEP1 = - MAX
                NDX             NDX+0                           # CCS A
                CCS             0000                            # A = 37776
                TC              +4
                TC              ERRORS
                TC              ERRORS
                TC              ERRORS
                NDX             NDXKEEP1                        # AD KEEP1
                AD              0000                            # A = -1
SELF1           NDX             NDXSELF1                        # TC +2
                TC              0003
                TC              ERRORS                          # DID NOT PERFORM A TC
                NDX             NDXSELF1                        # TC +2
                TC              0006
                TC              CNTINU                          # CHECK C(Q)
SELF2           NDX             NDXSELF2                        # TCF +2
                TCF             003
                TC              ERRORS
                TC              Q                               # SHOULD GO TO SELF1 +2
CNTINU          TC              -1CHK
                CA              S+MAX
                AD              S+1
                NDX             NDXKEEP1                        # TS KEEP1 WITH OV
                TS              0000                            # A = +1, KEEP1 = +0
                TC              ERRORS
                AD              KEEP1                           # A = +1
                NDX             NDX+MAX                         # MASK S+MAX
                MASK            0000                            # A = +1
                TC              -1CHK           -1

# INDEX USED WITH ADS, NDX, AND INCR
                CA              S13BITS
                TS              KEEP1
                NDX             NDX+0                           # INDEX +0
                NDX             NDXKEEP1                        # ADS KEEP1
                ADS             0000                            # C(A) AND C(KEEP1) = 377776
## Page 219
                NDX             NDXKEEP1                        # INCR KEEP1
                INCR            0000                            # C(KEEP1) = 37777
                CS              A                               # 40001
                AD              KEEP1                           # A = +1
                TC              -1CHK           -1
# INDEX USED WITH LXCH, DAS, AND DXCH
                CA              S-MAX
                TS              KEEP2                           # KEEP2 HOLDS 40000, KEEP1 HOLDS 37777
                CA              S+1
                TS              KEEP3                           # +1
                NDX             NDXKEEP3                        # LXCH KEEP3
                LXCH            0000                            # C(L) = +1
                CA              S-2
                NDX             NDXKEEP1                        # DAS KEEP1
                DAS             0000
# BEFORE DAS, K = 37777   K+1 = 40000
#             A = -2      L   = +1
# AFTER  DAS, K = 37775   K+1 = 40001
#            A = +0    L  = +0
                NDX             NDXKEEP1                        # DXCH KEEP1
                DXCH            0000
                AD              L
                TC              -1CHK
                CS              KEEP1
                TC              -0CHK
                CA              KEEP2
                TC              -0CHK           -1
# INDEX INSTRUCTION USED WITH OVERFLOW
                CA              ADRS7                           # ADDRESS OF SELF3
                AD              SBIT14
                TS              KEEP7
SELF3           NDX             KEEP7
                2               0002
                TC              ERRORS
# CHECK INDEX OF AN SC REGISTER
                CA              ADRS1                           # 01371, ADDRESS OF KEEP1
                NDX             A
                TS              0000                            # PUT 01371 IN KEEP1
                CS              A
                AD              KEEP1
                TC              -0CHK

## Page 220
# START CHECKING EXTRACODE INSTRUCTIONS
# NORMAL USE OF DCA, DCS, AND SU
STRTXTRA        EXTEND
                DCA             SBIT1
# C(A) = +1, C(L) = +2
                TS              KEEP2                           # +1
                XCH             L
                TS              KEEP1                           # +2
                EXTEND
                SU              KEEP2                           # C(KEEP2) = +1
                TC              -1CHK           -1
                EXTEND
                DCS             KEEP1
# C(A) = -2, C(L) = -1
                EXTEND
                SU              L
                TC              -1CHK
# COMPLEMENTING OF THE DOUBLE PRECISION ACCUMULATOR
                CA              S+MAX
                TS              L                               # 37777
                AD              A                               # OV37776
                EXTEND
                DCS             A
                TS              KEEP1
                TC              ERRORS
                CA              KEEP1
                EXTEND
                SU              L
                TC              -1CHK           -1

## The following test is, in the words of AGC developer Hugh Blair-Smith, "wrong wrong wrong".
## The code appears to be assuming that the result of DCA L is  A <-- L and L <-- Q. However,
## in reality, the L <-- Q happens bfore L is copied into A, so the net result is A <-- Q 
## and L <-- Q. 
## Hugh's theory is that Retread made it up to revision 44 mostly before hardware was
## available to run it on. And the self-check code, which was tied to the hardware, was likely
## not exercised as part of its development. Moreover, it's possible that the digital simulator
## itself had an incorrect implementation of DCA based on a misunderstanding of the hareware
## design.
## There's a couple of ways to fix this test, but the most "correct" would probably be:
##   DCA  L      # A = L = -2
##   CS   A      # A = 2
##   AD   L      # A = -2 + 2 = -0
##   TC   -0CHK

# CHECKS DCA OF AN SC REGISTER
                CA              S-2                             # -2
                TS              Q
                CA              S+1
                TS              L                               # +1
                CA              SBIT8
                EXTEND
                DCA             L
                AD              L                               # -1
                TC              -1CHK

# NORMAL USE OF QXCH
                CA              QXCHCON1
                TS              KEEP1                           # STORE ADDRESS OF AUGCHK IN KEEP1
                TC              +2                              # Q NOW HOLDS ADDRESS OF QNMBR
QNMBR           TC              ERRORS
                EXTEND
                QXCH            KEEP1                           # Q NOW HOLDS ADDRESS OF AUGCHK
                TC              Q                               # SHOULD GO TO QXCHCON2 +1, NOT QNMBR
                TC              ERRORS
QXCHCON1        ADRES           QXCHCON2        +1
## Page 221
QXCHCON2        ADRES           QNMBR
                CS              KEEP1                           # CHECK THAT KEEP1 HOLDS B(Q)
                AD              QXCHCON2
                TC              -0CHK
# CHECKS QXCH OF AN SC REGISTER
                CA              S+ZERO
                TC              +2
                TCF             +5
                EXTEND
                QXCH            A
                LXCH            Q
                TC              A
                CA              L
                TC              -0CHK           -1

# NORMAL USE OF AUG
AUGCHK          CA              S+ZERO
                TS              KEEP1                           # +0
                CS              A
                TS              KEEP2                           # -0
                EXTEND
                AUG             KEEP1                           # +1
                EXTEND
                AUG             KEEP1                           # +2
                TC              -0CHK                           # CHECK C(A) HAS NOT CHANGED
                EXTEND
                AUG             KEEP2                           # -1
                EXTEND
                AUG             KEEP2                           # -2
                EXTEND
                AUG             KEEP2                           # -3
                TC              -0CHK           -1
                CA              KEEP2
                AD              KEEP1
                TC              -1CHK
# CHECKS AUG OF AN SC REGISTER
                CA              S-ZERO
                EXTEND
                AUG             A
                TC              -1CHK

# NORMAL USE OF DIM
DIMCHK          CA              S+ZERO
                TS              KEEP1                           # +0
                EXTEND
                DIM             KEEP1
                CA              KEEP1
                TC              -0CHK           -1
                CS              A
                TS              KEEP1                           # -0
## Page 222
## There is a physical page break here, but the next page does not have a header or its own number.
                EXTEND
                DIM             KEEP1
                CA              KEEP1
                TC              -0CHK
                CA              S+2
                TS              KEEP1                           # +2
                EXTEND
                DIM             KEEP1                           # +1
                AD              S-1
                TC              -1CHK           -1              # CHECK C(A) HAS NOT CHANGED
                CA              KEEP1
                TC              -1CHK           -1
                EXTEND
                DIM             KEEP1
                TC              -0CHK           -1
                CA              KEEP1
                TC              -0CHK
                CS              S+2
                TS              KEEP2                           # -2
                EXTEND
                DIM             KEEP2                           # -1
                CA              KEEP2
                TC              -1CHK
                EXTEND
                DIM             KEEP2                           # -0
                TC              -0CHK           -1
                CA              KEEP2
                TC              -0CHK
# CHECKS DIM OF AN SC REGISTER
                CA              S-2
                EXTEND
                DIM             A
                TC              -1CHK

# NORMAL USE OF MSU
# MSU SAME (S+MAX AND S+MAX), RESULT +0
                CA              S+MAX
                TS              KEEP1
                EXTEND
                MSU             KEEP1
                TC              -0CHK           -1
# MSU SAME (+0 AND +0), RESULT +0
                TS              KEEP2
                EXTEND
                MSU             KEEP2
                TC              -0CHK           -1
# MSU SAME (-0 AND -0), RESULT +0
                CA              S-ZERO
                TS              KEEP3
                EXTEND
## Page 223
                MSU             KEEP3
                TC              -0CHK           -1
# MSU +0 AND 77777, RESULT = +1
                EXTEND
                MSU             KEEP3
                TC              -1CHK           -1
# MSU 77777 AND +0, RESULT = -1
                CS              A
                EXTEND
                MSU             KEEP2
                TC              -1CHK
# MSU +6 AND +7, RESULT = -1
                CA              S+7
                TS              KEEP4
                CA              S+6
                TS              KEEP5
                EXTEND
                MSU             KEEP4
                TC              -1CHK
# MSU +7 AND +6, RESULT = +1
                CA              S+7
                EXTEND
                MSU             KEEP5
                TC              -1CHK           -1
# MSU 77770 AND 77771, RESULT = -1
                CA              S-6
                TS              KEEP6
                CA              S-7
                TS              KEEP7
                EXTEND
                MSU             KEEP6
                TC              -1CHK
# MSU 77771 AND 77770, RESULT = +1
                CA              S-6
                EXTEND
                MSU             KEEP7
                TC              -1CHK           -1
# CHECKS MSU OF AN SC REGISTER ( -0 AND -0 = +0)
                CA              S-ZERO
                TS              L
                EXTEND
                MSU             L
                TC              -0CHK           -1

# NORMAL USE OF BZF
BZFCHK          TC              +2
                TC              BZMFCHK                         # CORRECT ADDRESS IN Q
                CAF             S+5
                EXTEND
                BZF             ERRORS

## Page 224
                CS              A
                EXTEND
                BZF             ERRORS
                CAF             S+ZERO
                EXTEND
                BZF             +2
                TC              ERRORS
                CS              A
                EXTEND
                BZF             +2
                TC              ERRORS
                TC              Q                               # SHOULD GO TO BZFCHK +1
                TC              ERRORS

BZMFCHK         TC              +2
                TC              MP1++                           # CORRECT ADDRESS IN Q
                CAF             SBIT9
                EXTEND
                BZMF            ERRORS
                CS              A
                EXTEND
                BZMF            +2
                TC              ERRORS
                CA              S+ZERO
                EXTEND
                BZMF            +2
                TC              ERRORS
                CS              A
                EXTEND
                BZMF            +2
                TC              ERRORS
                TC              Q                               # SHOULD GO TO BZMFCHK +1
                TC              ERRORS

# NORMAL USE OF MP
# 37777 X 2
MP1++           CA              S+MAX                           # 37777
                EXTEND
                MP              S+2                             # C(A) = +1, C(L. = 37776
                AD              L
                TS              KEEP1                           # 37777
MP1+-           EXTEND
                MP              S-2                             # C(A) = -1, C(L) = 40001
                AD              L
                TS              KEEP2                           # 40000
MP1-+           EXTEND
                MP              S+2                             # C(A) = -1, C(L) = 40001
                AD              L
                TS              KEEP3                           # 40000
MP1--           EXTEND
## Page 225
                MP              S-2                             # C(A) = +1, C(L) = 37776
                AD              L                               # 37777
                AD              KEEP3                           # 77777
                AD              KEEP2                           # 40000
                AD              KEEP1                           # 77777
                TC              -0CHK
# 37777 X 37777
MP2++           CA              S+MAX                           # 37777
                EXTEND                                          # CHECKS RSC PULSE
                MP              A                               # C(A) = 37776, C(L) = +1
                AD              L
                TS              KEEP1                           # 37777
MP2+-           EXTEND
                MP              S-MAX                           # C(A) = 40001, C(L) = -1
                AD              L
                TS              KEEP2                           # 40000
MP2-+           EXTEND
                MP              S+MAX                           # C(A) = 40001, C(L) = -1
                AD              L
                TS              KEEP3                           # 40000
MP2--           EXTEND
                MP              S-MAX                           # C(A) = 37776, C(L) = +1
                AD              L                               # 37777
                AD              KEEP3                           # 77777
                AD              KEEP2                           # 40000
                AD              KEEP1                           # 77777
                TC              -0CHK
# C(A) = NON-ZERO, C(K) = ZERO
# RESULT IS ALWAYS POSITIVE ZERO
MP3++           CA              S+MAX                           # 37777
                EXTEND
                MP              S+ZERO
                AD              L
                TC              -0CHK           -1
MP3+-           CA              S+1
                EXTEND
                MP              S-ZERO
                AD              L
                TC              -0CHK           -1
MP3-+           CA              S-1
                EXTEND
                MP              S+ZERO
                AD              L
                TC              -0CHK           -1
MP3--           CA              S-ZERO
                EXTEND
                MP              S-ZERO
                AD              L
                TC              -0CHK           -1
# C(A) = ZERO, C(K) = NON-ZERO,
## Page 226
# RESULT IS + ZERO FOR A POSITIVE SIGN AND NEGATIVE
# ZERO FOR Z NEGATIVE SIGN
MP4++           CA              S+ZERO
                EXTEND
                MP              S+MAX
                AD              L
                TC              -0CHK           -1
MP4+-           EXTEND
                MP              S-1
                AD              L
                TC              -0CHK
MP4-+           CS              A
                EXTEND
                MP              S+5
                AD              L
                TC              -0CHK
MP4--           CS              A
                EXTEND
                MP              S-ZERO
                AD              L
                TC              -0CHK           -1
# MULTIPLY ZERO X ZERO
# RESULT IS ALWAYS PLUS ZERO
MP5++           CA              S+ZERO
                TS              KEEP1
                EXTEND
                MP              KEEP1
                AD              L
                TC              -0CHK           -1
MP5+-           EXTEND
                MP              S-ZERO
                AD              L
                TC              -0CHK           -1
MP5-+           CA              S-ZERO
                EXTEND
                MP              S+ZERO
                AD              L
                TC              -0CHK           -1
MP5--           CA              S-ZERO
                EXTEND
                MP              S-ZERO
                TC              -0CHK           -1

                CA              CONTINU
                TC              BANKJUMP
CONTINU         CADR            DV1++           -1              # CONTINUE WITH INSTRUCTION CHECK

                SETLOC          30000

                TC              CHECKNJ                         # CHECK FOR NEW JOB

## Page 227
# NORMAL USE OF DV ... REMAINDER HAS SIGN OF DIVIDEND
# 1/4 DIVIDED BY 3/8
# C(A) = 25252 WITH A + QUOTIENT AND 52525 WITH A - QUOTIENT.
# C(L) = REMAINDER = /100000/ WITH SIGN OF DIVIDEND.
DV1++           CA              DV1CON                          # 14000
                TS              KEEP7                           # 14000, +3/8
                TS              Q
                CS              A
                TS              KEEP6                           # 63000, -3/8
                CA              S+ZERO
                TS              L
                CA              SBIT13                          # 10000
                EXTEND
                DV              Q                               # CHECKS RSC PULSE
                TS              KEEP1                           # 25252
                CA              S+ZERO
DV1+-           LXCH            A
                EXTEND
                DV              KEEP6
                AD              KEEP1
                TC              -0CHK
                CA              S-ZERO
                LXCH            A
DV1-+           CS              A
                EXTEND
                DV              KEEP7
                TS              KEEP1                           # 52525
                CA              S-ZERO
DV1--           LXCH            A
                EXTEND
                DV              KEEP6
                AD              KEEP1
                TC              -0CHK
                CA              L
                AD              SBIT13
                TC              -0CHK
# 1/2 TO 15TH DIVIDED BY 1/2 TO 14TH
# C(A) SHOULD BE 1/2 AND CONTENTS OF L SHOULD BE ZERO
DV2++           CA              S+1
                TS              KEEP7                           # 00001, DIVISOR
                CS              A
                TS              KEEP6                           # 77776, DIVISOR
                CA              S+ZERO
                CA              SBIT14                          # 20000
                TS              L
                CA              S+ZERO
                EXTEND
                DV              KEEP7                           # C(A) = 1/2, C(L) = +0
                TS              KEEP1
DV2+-           LXCH            A
## Page 228
                EXTEND
                DV              KEEP6
                TS              KEEP2                           # -1/2
                AD              KEEP1
                TC              -0CHK
                CA              KEEP2
                LXCH            A
DV2-+           CS              A
                EXTEND
                DV              KEEP7
                TS              KEEP2
DV2--           LXCH            A
                EXTEND
                DV              KEEP6
                TS              KEEP1
                AD              KEEP2
                TC              -0CHK
                CS              KEEP1                           # MAKE SURE QUOTIENT IS 1/2
                AD              SBIT14
                TC              -0CHK
                CA              L
                TC              -0CHK
# SAME AS PREVIOUS DIVISION EXCEPT A AND L WILL HAVE OPPOSITE SIGNS
# BEFORE DIVISION.  SINCE A WILL ALWAYS BE ZERO, THE SIGN OF THE QUOTIENT
# WILL DEPEND ON THE SIGN OF L AND THE SIGN OF THE DIVISOR.
DV3++           CA              SBIT14                          # 20000
                TS              L
                CA              S-ZERO
                EXTEND
                DV              KEEP7
                TS              KEEP1                           # 20000
DV3+-           LXCH            A
                CS              A                               # A = -0
                EXTEND
                DV              KEEP6
                AD              KEEP1
                TC              -0CHK
                CS              SBIT14                          # -1/2
DV3-+           LXCH            A
                EXTEND
                DV              KEEP7
                TS              KEEP1
DV3--           LXCH            A
                CS              A                               # A = +0
                EXTEND
                DV              KEEP6
                AD              KEEP1
                TC              -0CHK
                CS              L
                TC              -0CHK           -1

## Page 229
# C(A) = 17777 AND C(L) = 37777.  THIS IS DIVIDED BY 20000.  THE RESULT
# SHOULD BE +-/37777/ AND THE REMAINDER +-/17777/
DV4++           CA              S+MAX
                TS              L
                CA              SBIT14
                TS              KEEP7                           # 20000
                CS              A
                TS              KEEP6                           # 57777
                CA              S13BITS                         # 17777
                EXTEND
                DV              KEEP7
                TS              KEEP1
DV4+-           LXCH            A
                EXTEND
                DV              KEEP6
                TS              KEEP2
                AD              KEEP1
                TC              -0CHK
                CA              KEEP2
                LXCH            A
DV4-+           CS              A
                EXTEND
                DV              KEEP7
                AD              KEEP1
                TC              -0CHK
                CA              KEEP2
DV4--           LXCH            A
                EXTEND
                DV              KEEP6
                TS              KEEP3
                AD              KEEP2
                TC              -0CHK
                CS              KEEP3
                AD              S+MAX
                TC              -0CHK
                CA              L
                AD              S13BITS
                TC              -0CHK
# C(A) = +-/17777/ AND C(L) = +-/37777/ WITH OPPOSITE SIGN BEFORE DEVISION
# THE QUOTIENT SHOULD BE +-/37774/ WITH THE SIGN DEPENDING ON THE SIGN OF
# A AND THE SIGN OF THE DEVISOR. THE C(L) = +-/1/ DEPENDING ON THE SIGN
# OF A.
DV5++           CS              S+MAX
                TS              L                               # 40000
                CA              S13BITS                         # 17777
                EXTEND
                DV              KEEP7
                TS              KEEP1                           # 37774
                XCH             L
                TC              -1CHK           -1

## Page 230
DV5+-           CA              S-MAX
                TS              L                               # 40000
                CA              S13BITS                         # 17777
                EXTEND
                DV              KEEP6                           # C(A) = -37774, C(L) = +1
                AD              KEEP1
                TC              -0CHK
                XCH             L
                TC              -1CHK           -1
DV5-+           CA              S+MAX
                TS              L                               # 37777
                CS              S13BITS                         # 60000
                EXTEND
                DV              KEEP7                           # C(A) = -37774, C(L) = -1
                TS              KEEP2
                AD              KEEP1
                TC              -0CHK
                XCH             L
                TC              -1CHK
DV5--           CA              S+MAX
                TS              L                               # 37777
                CS              S13BITS                         # 60000
                EXTEND
                DV              KEEP6                           # C(A) = 37774, C(L) = -1
                AD              KEEP2
                TC              -0CHK
                XCH             L
                TC              -1CHK
                CA              KEEP2                           # -37774
                AD              S-2                             # -37776
                AD              S+MAX                           # +1
                TC              -1CHK           -1              # CHECK THAT QUOTIENT IS +-/37774/

# DIVIDE SAME (37776).  THE RESULT SHOULD BE MAXIMUM AND THE REMAINDER
# SHOULD BE THE SAME VALUE AS THE DIVISOR WITH THE SAME SIGN AS THE
# DIVIDEND
DV6++           CA              S+ZERO
                TS              L
                CS              DV2CON                          # 37776
                TS              KEEP6                           # 40001
                CS              A
                TS              KEEP7                           # 37776
                EXTEND
                DV              KEEP7
                CS              A
                AD              L
                TC              -1CHK
                CA              S+ZERO
DV6+-           LXCH            A
                EXTEND
## Page 231
                DV              KEEP6
                AD              L
                TC              -1CHK
                CA              S-ZERO
DV6-+           LXCH            A
                CS              A
                EXTEND
                DV              KEEP7
                CS              A
                AD              L
                TC              -1CHK           -1
                CA              S-ZERO
DV6--           LXCH            A
                EXTEND
                DV              KEEP6
                AD              L
                TC              -1CHK           -1
                CS              L
                AD              KEEP6
                TC              -0CHK
# DIVIDE SAME (ZERO).  THE RESULT SHOULD BE MAXIMUM AND THE REMAINDER
# SHOULD BE THE SAME VALUE AS THE DIVISOR WITH THE SAME SIGN AS THE
# DIVIDEND.
DV7++           CS              S+ZERO
                TS              KEEP6                           # -0
                CS              A
                TS              KEEP7                           # +0
                TS              L
                EXTEND
                DV              KEEP7
                AD              S-MAX
                TC              -0CHK
DV7+-           LXCH            A                               # C(A) = C(L) = +0
                EXTEND
                DV              KEEP6
                AD              S+MAX
                TC              -0CHK
                CS              A
DV7-+           LXCH            A
                CS              A                               # C(A) = C(L) = -0
                EXTEND
                DV              KEEP7
                AD              S+MAX
                TC              -0CHK
                CS              A
DV7--           LXCH            A                               # C(A) = C(L) = -0
                EXTEND
                DV              KEEP6
                AD              S-MAX
                TC              -0CHK
## Page 232
                CS              L
                TC              -0CHK           -1

# DEVIDE SAME (ZERO). THE CONTENTS OF THE A REGISTER AND L REGISTER WILL
# HAVE OPPOSITE SIGNS BEFORE DEVISION. THE SIGN OF THE QUOTIENT WILL
# DEPEND ON THE SIGN OF THE L REGISTER BEFORE DEVISION AND THE SIGN OF
# THE DEVISOR. THE SIGN OF THE REMAINDER IS THE SAME SIGN AS THE SIGN OF
# THE L REGISTER BEFORE DEVISION. C(L)  REMAINS SAME
DV8++           CA              S+ZERO
                TS              KEEP7                           # +0
                TS              L
                CS              A
                TS              KEEP6                           # -0
                EXTEND                                          # A = -0, L = +0
                DV              KEEP7                           # A = L = +0
                TS              KEEP1
                CA              L                               # C(A) = C(L) = +0
                TC              -0CHK           -1
DV8+-           CS              A
                EXTEND                                          # A = -0, L = +0
                DV              KEEP6                           # A = -0, L = +0
                AD              KEEP1
                TC              -0CHK
                CS              A
                XCH             L                               # PUT -0 IN L
                TC              -0CHK           -1              # CHECK C(L)
DV8-+           EXTEND                                          # A = +0, L = -0
                DV              KEEP7                           # A = L = -0
                TS              KEEP2
                AD              KEEP1
                TC              -0CHK
                CS              A
                XCH             L                               # PUT -0 IN L
                TC              -0CHK                           # CHECK C(L)
DV8--           EXTEND                                          # A = +0, L = -0
                DV              KEEP6                           # A = +0, L = -0
                AD              KEEP2
                TC              -0CHK
                CA              S+MAX                           # CHECK QUOTIENT IS CORRECT
                AD              KEEP2
                TC              -0CHK
                XCH             L
                TC              -0CHK                           # CHECK C(L)

# INPUT-OUTPUT INSTRUCTIONS
# NORMAL USE OF READ AND WRITE
IN-OUT1         CA              S-1
                EXTEND
                WRITE           L                               # 77776
                CS              A                               # 00001
## Page 233
                EXTEND
                READ            L                               # 77776
                TC              -1CHK
                CA              S-MAX
                AD              S-MAX                           # C(A) = 10 - 00001
                EXTEND
                WRITE           Q
                CS              A                               # 01 - 37776
                EXTEND
                READ            Q                               #  10 - 00001
                TS              KEEP1
                TC              ERRORS
                CA              KEEP1
                AD              S+MAX
                TC              -1CHK           -1

# NORMAL USE OF RAND, RAND = READ AND MASK
RANDCHK         CA              S+ZERO
                TS              L
                EXTEND
                RAND            L                               # 00000, 00000
                TC              -0CHK           -1
                CA              S-ZERO
                EXTEND
                RAND            L                               #  77777, 00000
                TC              -0CHK           -1
                CS              A
                TS              L
                CS              A
                EXTEND
                RAND            L                               # 00000, 77777
                TC              -0CHK           -1
                CA              S-ZERO
                EXTEND
                RAND            L                               # 77777, 77777
                TC              -0CHK
## The following test is slightly wrong. Its proper operation relies on the Q register
## storing an overflow condition. However, it is run without interrupts inhibited, so
## it's possible for an interrupt to occur and destroy Q's overflow (via QRUPT). The
## test designers were likely either unaware of this possibility, or thought that
## overlfow in Q would inhibit interrupts like it would in A. Or, perhaps, the
## digital simulator could have been wrong as discussed above for "DCA L".
## A correct version of the test would have an INHINT immediately prior to "XCH Q",
## and a RELINT sometime after "RAND Q".
RANDOV          CA              S+MAX
                AD              S+2                             #  01 - 00001
                XCH             Q
                CA              S-ZERO                          #  77777
                EXTEND
                RAND            Q                               #  01 - 00001
                TS              KEEP1
                TC              ERRORS
                TC              -1CHK           -1
                CS              KEEP1
                TC              -1CHK

# NORMAL USE OF WAND, WAND = WRITE AND MASK
WANDCHK         CA              S+ZERO
## Page 234
                TS              L
                EXTEND
                WAND            L                               # 00000, 00000
                AD              L
                TC              -0CHK           -1
                CA              S-ZERO
                EXTEND
                WAND            L                               # 77777, 00000
                AD              L
                TC              -0CHK           -1
                CS              A
                TS              L
                CS              A
                EXTEND
                WAND            L                               # 00000, 77777
                AD              L
                TC              -0CHK           -1
                CA              S-ZERO
                TS              L
                EXTEND
                WAND            L                               # 77777, 77777
                AD              L
                TC              -0CHK
## The following test is slightly wrong. (See the discussion for RANDOV above.)
WANDUF          CA              S+MAX
                AD              S+2                             # 01 - 00001
                XCH             Q
                CA              S-ZERO                          # 77777
                EXTEND
                WAND            Q
                TS              KEEP2
                TC              ERRORS
                CA              Q
                TS              KEEP1
                TC              ERRORS
                CS              KEEP1
                TC              -1CHK
                CS              KEEP2
                TC              -1CHK

# NORMAL USE OF ROR, READ AND SUPERIMPOSE
RORCHK          CA              S+ZERO
                TS              L
                EXTEND
                ROR             L                               # 00000, 00000
                TC              -0CHK           -1
                CA              L
                TC              -0CHK           -1
                CA              S-ZERO
                EXTEND
                ROR             L                               # 77777, 00000

## Page 235
                TC              -0CHK
                CA              L
                TC              -0CHK           -1
                CS              A
                TS              L
                CS              A
                EXTEND
                ROR             L                               # 00000, 77777
                TC              -0CHK
                CA              L
                TC              -0CHK
                CA              S-ZERO
                EXTEND
                ROR             L                               # 77777, 77777
                TC              -0CHK
## The following test is slightly wrong. (See the discussion for RANDOV above.)
ROROV           CA              S-MAX
                AD              S-2                             # 10 - 37776
                XCH             Q
                CA              S+MAX
                AD              S+1                             # 01 - 00000
                EXTEND
                ROR             Q                               # 11 - 37776
                TS              KEEP1
                TC              +2
                TC              ERRORS
                CA              KEEP1
                TC              -1CHK

# NORMAL USE OF WOR, WOR = WRITE AND SUPERIMPOSE
WORCHK          CA              S+ZERO
                TS              L
                EXTEND
                WOR             L                               # 00000, 00000
                TC              -0CHK           -1
                CA              L
                TC              -0CHK           -1
                CA              S-ZERO
                EXTEND
                WOR             L                               # 77777, 00000
                TC              -0CHK
                CA              L
                TC              -0CHK
                CS              A
                TS              L
                CS              A
                EXTEND
                WOR             L                               # 00000, 77777
                TC              -0CHK
                CA              L
                TC              -0CHK
## Page 236
                CA              S-MAX
                EXTEND
                WOR             L                               # 77777, 77777
                TC              -0CHK
                CA              L
                TC              -0CHK
## The following test is slightly wrong. (See the discussion for RANDOV above.)
WOROV           CA              S-MAX
                AD              S-2                             # 10 - 37776
                XCH             Q
                CA              S+MAX
                AD              S+1                             # 01 - 00000
                EXTEND
                WOR             Q                               # 11 - 37776
                TS              KEEP2                           # SHOULD NOT SKIP
                TCF             +2
                TC              ERRORS
                XCH             Q
                TS              KEEP3
                TC              +2
                TC              ERRORS
                CA              KEEP3                           # CHECK C(Q)
                TC              -1CHK
                CA              KEEP2
                TC              -1CHK                           # CHECK C(A)

# NORMAL USE OF RXOR
RXORCHK         CA              S+ZERO
                TS              L
                EXTEND
                RXOR            L                               # 00000, 00000
                TC              -0CHK           -1
                CA              S-ZERO
                EXTEND
                RXOR            L                               # 77777, 00000
                TC              -0CHK
                CA              L
                TC              -0CHK           -1
                CS              A
                TS              L
                CS              A
                EXTEND
                RXOR            L                               # 00000, 77777
                TC              -0CHK
                CA              S-ZERO
                EXTEND
                RXOR            L                               # 77777, 77777
                TC              -0CHK           -1
                CA              L
                TC              -0CHK
                CS              A
## Page 237
                TS              Q
## The following test is slightly wrong. (See the discussion for RANDOV above.)
RXORUV          CA              S+MAX
                AD              S+2                             # 01 - 00001
                EXTEND
                RXOR            Q                               # 10 - 37776, C(Q) = -0
                TS              KEEP1
                TC              ERRORS
                CA              KEEP1
                TC              -1CHK

                TC              CHECKNJ                         # CHECK FOR NEW JOB
                TC              XTRANDX

# NEXT THREE CONSTANTS ARE ADDRESSESS USED BY EXTRACODE INSTRUCTIONS
ADRSBZMF        ADRES           NDXBZMF
ADRSDCA         ADRES           NDXDCA
ADRSQXCH        ADRES           NDXAUG

# NORMAL USE OF INDEX WITH EXTRACODE INSTRUCTIONS
# INDEX INSTRUCTION USED WITH INDEX AND BZF
XTRANDX         CA              S+ZERO
                EXTEND
                NDX             S+ZERO
                NDX             ADRSBZMF
                BZF             00000                           # BZF +2
                TC              ERRORS
# INDEX INSTRUCTION USED WITH BZMF
NDXBZMF         EXTEND
                NDX             ADRSDCA
                BZMF            0000                            # BZMF+2
                TC              ERRORS
# INDEX INSTRUCTION USED WITH DCA
NDXDCA          EXTEND
                INDEX           ADRS+1                          # DCA S+1
                DCA             0000                            # C(A) = +1, C(L) = +2
                CS              A
                AD              L
                TC              -1CHK           -1
# INDEX INSTRUCTION USED WITH DCS
                EXTEND
                INDEX           ADRS+1                          # DCS S+1
                DCS             0000                            # C(A) = -1, C(L) = -2
                CS              A
                AD              L
                TC              -1CHK
# INDEX INSTRUCTION USED WITH MP AND SU
                CA              S+MAX                           # 37777
                EXTEND
                NDX             ADRS+1
                MP              0001                            # C(A) = 1, C(L) = 37776
## Page 238
                TC              -1CHK           -1
                CA              S+MAX                           # 37777
                EXTEND
                NDX             S+1
                SU              0000
                TC              -1CHK           -1
# INDEX INSTRUCTION USED WITH DV
NDXDV           CA              DV1CON                          # PUT 14000 (3/8) IN KEEP3
                TS              KEEP3
                CA              S+ZERO
                TS              L
                CA              SBIT13                          # 10000
                EXTEND
                NDX             ADRS3
                DV              0000                            # C(A) = 25252, C(L) = 10000
                TS              KEEP1
                CA              S-ZERO
                XCH             L
                CS              A
                EXTEND
                NDX             ADRS3
                DV              0000
                AD              KEEP1
                TC              -0CHK
# INDEX USED WITH MSU (C(A) = +0, C(K) = -0) (RESULT = -1)
NDXMSU          CA              S+ZERO
                TS              KEEP1
                CS              A
                EXTEND
                NDX             ADRS1                           # MSU KEEP1
                MSU             0000                            # C(A) = -1
                TC              -1CHK
# INDEX USED WITH QXCH
NDXQXCH         CA              ADRSQXCH
                TS              KEEP1
                TC              +2
                TC              ERRORS
                EXTEND
                NDX             ADRS1                           # QXCH KEEP1
                QXCH            0000
                TC              Q
                TC              ERRORS
# INDEX USED WITH AUG
NDXAUG          CS              S+ZERO
                TS              KEEP1                           # 00000
                EXTEND
                NDX             ADRS1                           # AUG KEEP1
                AUG             0000
                CA              KEEP1
                TC              -1CHK

## Page 239
# INDEX USED WITH DIM
NDXDIM          CA              S+2
                TS              KEEP1
                EXTEND
                NDX             ADRS1                           # DIM KEEP1
                DIM             0000
                CS              KEEP1
                TC              -1CHK

# NORMAL USE OF INDEX WITH IN-OUT INSTRUCTIONS
# INDEX USED WITH WRITE AND READ
NDXINOUT        CA              S-1
                EXTEND
                NDX             S+1                             # WRITE L
                WRITE           0000
                CS              A
                EXTEND
                NDX             S+1                             # READ L
                READ            0000
                TC              -1CHK
# INDEX USED WITH RAND
                CA              S+1                             # 00001
                TS              L
                CA              S-ZERO                          # 77777
                EXTEND
                NDX             S+1                             # RAND L
                RAND            00000
                TC              -1CHK           -1
# INDEX USED WITH WAND
                CA              S-MAX                           # 40000
                AD              S+1                             # 40001
                TS              L
                CA              S+MAX                           # 37777
                EXTEND
                NDX             S+1                             # WAND L
                WAND            0000                            # C(A) = C(L) = +1
                TC              -1CHK           -1
                CS              L
                TC              -1CHK
# INDEX USED WITH ROR
                CA              S+1
                TS              Q
                CA              S+ZERO
                EXTEND
                NDX             S+2                             # ROR Q
                ROR             0000
                TC              -1CHK           -1
# INDEX USED WITH WOR
                CA              S-7
                TS              L                               # 77770
## Page 240
                CA              S+MAX
                AD              S-1                             # 37776
                EXTEND
                NDX             S+1                             # WOR L
                WOR             0000                            # C(A) = C(L) = -1
                TC              -1CHK
                CA              L
                TC              -1CHK
# INDEX USED WITH RXOR
                CA              S-1
                TS              L                               # 77776
                CA              S+MAX                           # 37777
                EXTEND
                NDX             S+1                             # RXOR L
                RXOR            0000                            # C(A) = 40001
                AD              S+MAX
                TC              -1CHK           -1
# CHECKS EXTRACODE INDEX OF AN SC REGISTER
                CA              S+2
                TS              KEEP1
                CA              ADRS1                           # ADDRESS OF KEEP1
                TS              L
                CA              S+1
                EXTEND
                NDX             L
                SU              0000
                TC              -1CHK

# CHECK OF SPECIAL AND CENTRAL REGISTERS
# CHANGE OF SIGN BY ADDING SAME NUMBER (ADDER)
ADDCHK          CA              SBIT14                          # 20000
                AD              A                               # 01 -00000
                TS              A
                TC              ERRORS
                AD              A                               # 10 - 00000
                TS              A
                TC              ERRORS
                AD              A                               # 00001
                TS              A
                TC              +2
                TC              ERRORS
                TC              -1CHK           -1

# NORMAL OPERATION OF CYCLE RIGHT REGISTER
CYRCHK          CA              CYRCON                          # 57761
                TS              KEEP5                           # COUNTDOWN REGISTER
                CA              S-MAX                           # 40000
                TS              CYR
CYRLOOP         CCS             CYR
                TC              CYRCNTDN
## Page 241
                TC              ERRORS
                TC              ENDCYR
                TC              ERRORS
CYRCNTDN        INCR            KEEP5
                TC              CYRLOOP
ENDCYR          CA              KEEP5                           # 57777
                AD              CYR                             # C(CYR) = 20000
                CCS             A                               # -0 = END OF CYCLE RIGHT CHECK
                TC              ERRORS
                TC              ERRORS
                TC              ERRORS

# NORMAL OPERATION OF CYCLE LEFT REGISTER
CYLCHK          CA              S-15                            # 77760, -15
                TS              KEEP5                           # COUNT REGISTER
                CA              S-MAX                           # 40000
                TS              CYL
CYLLOOP         CCS             CYL
                TC              CYLCNTDN
                TC              ERRORS
                TC              ENDCYL
                TC              ERRORS
CYLCNTDN        INCR            KEEP5
                TC              CYLLOOP
ENDCYL          CA              CYL                             # C(CYL) SHOULD = +1
                TC              -1CHK           -1
                CA              KEEP5
                TC              -1CHK

# NORMAL OPERATION OF SHIFT RIGHT REGISTER
SRCHK           CA              S-14                            # 77761, -14
                TS              KEEP5                           # COUNT REGISTER
                CA              S-MAX                           # 40000
                TS              SR
SRLOOP          CCS             SR
                TC              ERRORS
                TC              ERRORS
                TC              SRCNTDN
                CA              KEEP5                           # HAS SHIFTED 14 TIMES
                TC              -1CHK
                TC              EDOPCHK                         # NEXT SUBROUTINE
SRCNTDN         INCR            KEEP5                           # INCREMENT COUNT REGISTER
                TC              SRLOOP

# NORMAL OPERATION OF EDOP REGISTER.  BITS 8 - 14 OF G REGISTER GO TO
# BITS 1 - 7 OF EDOP.
EDOPCHK         CA              S-15                            # 77760, -15
                TS              KEEP5                           # COUNT REGISTER
                CA              S7BITS                          # 00177
                TS              CYL
## Page 242
EDOPLOOP        CA              CYL
                TS              EDOP
                TS              CYR                             # SHIFT LEFT 7 TIMES
                CA              CYR
                CA              CYR
                CA              CYR
                CA              CYR
                CA              CYR
                CA              CYR
                CA              CYR
                MASK            S7BITS
                CS              A
                TS              KEEP1                           # COMPLEMEMT OF C(EDOP)
                CA              S-ZERO
                MASK            EDOP
                AD              KEEP1
                TC              -0CHK
                INCR            KEEP5                           # INCREMEMT COUNT REGISTER
                CCS             EDOP
                TC              EDOPLOOP
                TC              ENDEDOP
                TC              ERRORS
                TC              ERRORS
ENDEDOP         CA              KEEP5                           # SHOULD HAVE PERFORMED EDOPLOOP 14 TIMES
                TC              -1CHK

                INCR            SCOUNT                          # INCREMENT UPON SUCCESSFUL COMLETION

                TC              SMODECHK


back to top