!JOB
!LIMIT (TIME,60),(CORE,30)
!ASSIGN M:BO,(FILE,REG1BO)
!AP      SD,SI,LO,BO
*        PURPOSE: TO EXERCISE REGISTER BLOCK 1.
*                 THIS PROGRAM DOES NOT BOTHER THE COC
*                 USAGE OF THE REGISTER BLOCK.
*        OUTPUTS: 'REG1 HERE' AT PROGRAM INITIATION.
*                 'REG1 ERROR DETECTED' IF A MISCOMPARE
*                 OCCURS.
*        A SNAP OF THE FAILING REGISTERS GOES TO THE
*        LINE PRINTER (GHOST AND BATCH) AND TO
*        THE USERS CONSOLE(ONLINE)
* THIS EXERCISER REQUIRES C0 PRIVLEDGE TO RUN
         SYSTEM SIG7FP
         SYSTEM   BPM
         BOUND    8
PSD0     GEN,12,20,32    X'C',ER020,0    MAPPED, SLAVE, REG BLK 0
PSD1     GEN,12,20,8,24  X'4',X010,7,X'10'  MAP, MSTR, BLK 1, INHIBITED
PSD2     GEN,12,20,32    X'C',START2,0    MAPPED, SLAVE, REG BLK 0
VAL1     DATA     X'F800F800'
LOOPCNT  DATA    100
VAL2     DATA     X'F800F800'
REGS     RES      16                REG SAVE AREA
TCON     TEXTC    'REG1 ON'
TCERR    TEXTC    'REG1 ERROR DETECTED'
RDINST   RD,0     0                 INST TO READ SENSE SWITCHES
START    M:TYPE       (MESS,TCON)
START2   CAL1,6   =X'08000000'      M:SYS; G/MASTER MODE
         M:WAIT   1
         LW,1     VAL1
         STW,1    VAL2
         LPSD,10  PSD1              GO TO REG BLK 1
X010     EQU      %
         DO       16
         LW,(%-X010)/3   VAL1
         MTH,1    VAL1
         MTW,1    VAL1
         FIN
X020     EQU      %
         DO 16
         CW,(%-X020)/5    VAL2      CHECK REG AGAINST VAL2
         BE       %+2               BE; OK, CHECK NEXT
         B        ER010             B; NO MATCH, ERROR
         MTH,1    VAL2
         MTW,1    VAL2
         FIN
         MTH,1    VAL1              INC LH OF VAL1
         MTW,1    VAL1              INC RH OF VAL1
         MTH,1    VAL2
         MTW,1    VAL2
         M:EXU    RDINST            READ SENSE SWITCHES
         BCS,4    EXIT              EXIT IF SS2 SET
         MTW,-1   LOOPCNT           DEC LOOP COUNTER
         BGZ      X010              BGZ; KEEP ITERATING
         LI,1     100               L/100; RESET LOOP COUNTER
         STW,1    LOOPCNT           S/LOOP COUNTER
         LPSD,10  PSD2              GO SLAVE, MAPPED TO START2
ER010    LCI      0                 CC'S FOR STM
         STM,0    REGS              SAVE REGS
         LPSD,10  PSD0              GO TO REG BLK 0
ER020    LM,0     REGS              RESTORE REGS
         M:SNAP   'ERR',(VAL1,VAL2) SNAP
         M:TYPE    (MESS,TCERR)
         B        START2            CONTINUE
EXIT     M:EXIT
         END      START
!ASSIGN M:BI,(FILE,REG1BO)
!LOAD (BI),(LMN,REG1),(PERM)
!ASSIGN M:BO,(FILE,CPVEXBON)
!AP SD,SI,LO,BO
TESTIO   EQU      1
*                                   TESTIO IS SET TO 1 TO INCLUDE
*                                   I/O TESTING.
*
RANDOM   EQU      1
*                                   RANDOM IS SET TO 1 TO INCLUDE
*                                   RANDOM FILES IF TESTIO IS 1.
*                                   NOT USED IF TESTIO IS 0.
*
TAPE     EQU      0
*                                   TAPE IS SET TO 1 TO ALLOW TAPE
*                                   PROCESSING.  IF SET, TAPE
*                                   PROCESSING IS TOGGLED BY BRK OR
*                                   INT.
*
TESTINST EQU      1
*                                   TESTINST IS SET TO 1 TO INCLUDE
*                                   INSTRUCTION TESTING.
*
IDSTAMP  EQU      0
*                                   IDSTAMP IS SET TO 1 TO INCLUDE
*                                   VARIOUS ID STAMPS AT THE BEGINNING
*                                   OF EACH PAGE IN USER BUFFER.
*
BUFOFFSET EQU     X'1E2'
*                                   BUFOFFSET IS SET TO WORD OFFSET
*                                   FOR I/O START ADDR FROM PAGE BOUND.
*                                   ORIGINAL EXERCISER USES X'1E2'.
*
RANGE    EQU      5
*                                   RANGE IS LOG BASE 2 OF NUMBER OF
*                                   WORDS OVER WHICH I/O START ADDR
*                                   VARIES RANDOMLY.  ORIGINAL
*                                   EXERCISER USES 5.
*
CHKSS2   EQU      1
*                                   CHKSS2 IS SET TO 1 TO CAUSE
*                                   PROGRAM TO EXIT IF SENSE SWITCH 2
*                                   IS SET.  IF CHKSS2 IS 0, SENSE
*                                   SWITCHES HAVE NO EFFECT ON PROGRAM.
NORMPAT  EQU      1
*                                   NORMPAT IS SET TO 1 IF ORIGINAL
*                                   EXERCISER PATTERN IS DESIRED.  IF
*                                   NORMPAT IS SET TO 0, SPECIAL
*                                   PATTERN FOR MPC PROBLEM IS USED.
         PAGE
******************************************************************************
*PURPOSE: TO EXERCISE THE SYSTEM UNDER CPV, AS A                       *
*                 USER PROGRAM, WHICH CAN RUN AS A GHOST, ONLINE        *
*                 OR BATCH.                                             *
****************************************************************************
*METHOD: RANDOM DATA IS GENERATED, THEN WRITTEN, READ AND               *
*                 CHECKED. THE I/O IS TO 3 FILES (A RANDOM FILE, A      *
*                 KEYED FILE AND A SEQUENTIAL FILE) WITH NO WAIT        *
*                 I/O. OPTIONALLY A TAPE MAY BE EXERCISED IF THE        *
*                 PROGRAM IS INTERRUPTED. BYTE BOUNDARIES AND BUFFER    *
*                 START, RELATIVE TO PAGE BOUNDARY, ARE VARIED. THE     *
*                 TAPE HANDLER ALSO ATTEMPTS TO SIMULATE SORT USAGE     *
*                 OF THE TAPE DRIVE.                                    *
*        AFTER THE I/O SECTION IS RUN, THE INSTRUCTION TESTS ARE        *
*                 EXECUTED ON THE RANDOM DATA IN THE FOLLOWING  ORDER:  *
*                 FAMILY OF BYTE                                        *
*                 LM,STM PUSH AND PULL                                  *
*                 FAMILY OF DOUBLE WORD                                 *
*                 MOVE BYTE STRING                                      *
*                 FAMILY OF WORD, SHIFT                                 *
*                 FAMILY OF HALFWORD                                    *
*                 FAMILY OF MULTIPLY, HW AND WORD                       *
*                 FAMILY OF DECIMAL                                     *
*        AFTER EACH INSTRUCTION TEST, THE DATA BUFFER IS CHECKED        *
*                 AND EVERY 2 MSEC THE ACCESS PROTECT IS SET FOR        *
*                 FOR THE DATA BUFFER TO VALUES 0-3 DEPENDING           *
*                 ON THE STATE OF A RANDOM NUMBER. WHEN A PROTECTION    *
*                 VIOLATION OCCURS, THE PROTECTION TYPE FOR THE         *
*                 DATA AREA IS RESET TO 0, AND CONTROL IS RETURNED      *
*                 TO THE INSTRUCTION TEST WHICH WAS ACTIVE.             *
************************************************************************
*OUTPUTS: TO THE OPERATORS CONSOLE(BATCH AND GHOST MODE) OR             *
*                 THE USERS CONSOLE(ON LINE MODE)                       *
*        ' ***CPVEXYY : BREAK OR INT AND I WILL EXERCISE A TAPE'*       *
*                 START OF PROGRAM, HITTING BREAK(ONLINE)               *
*                 OR KEYING IN !INT,SYSID (BATCH OR GHOST) WILL         *
*                 ADD A TAPE TO THE EXERCISE, OPTIONALLY.               *
*        'TESTING TAPE, INT OR BREAK TO EXCLUDE IT'                     *
*        'RELEASING TAPE, INT OR BREAK TO INCLUDE IT'                   *
*                 OUTPUTS WHEN TAPE HAS BEEN SELLECTED OR               *
*                 OR DESELECTED FOR THE TEST. THE TAPE HANDLER          *
*                 ATTEMPTS TO SIMULATE SORT USAGE OF THE TAPE UNIT.     *
*        ' *SOMETHING IS WRONG, SEE M:XCON IN BATCH MANUAL'*            *
*                 AN UNEXPECTED EVENT HAS OCCURRED AND THE EXER-        *
*                 CISER IS ABORTING. THIS COULD BE DUE TO A             *
*                 TIME OR DISC OR PRINT LIMIT BEING EXCEEDED            *
*                 OR DUE TO AN UNEXPECTED TRAP. THE XCON REGISTERS      *
*                 ARE SNAPPED TO THE LINE PRINTER, USING THE BATCH      *
*                 MANUAL TO INTERPRET THEM PLUS THE PROGRAM INFORM-     *
*                 ATION DUMP TO THE PRINTER WILL HELP IDENTIFY          *
*                 THE SOURCE OF THE PROBLEM.                            *
*        'AN IRRECOVERABLE DISC ERROR HAS OCCURRED'                     *
*         'WHILE WRITING DISC AND TAPE(IF TAPE SELECTED)'               *
*         'AFTER READING DISC, RANDOM FILE'                             *
*         'AFTER READING DISC, KEYED FILE'                              *
*         'AFTER READING DISC, SEQUENTIAL FILE'                         *
*                 MEANS AN IRRECOVERABLE I/O ERROR HAS OCCURRED,        *
*                 THE OPERATORS CONSOLE WILL ALSO REFLECT THIS ERROR    *
*                 WITH A DCXXX ERROR OR A DPXXX  ERROR. TAKING          *
*                 AN ERRORLOG WILL SHOW THE SPECIFIC SEEK,SENSE AND     *
*                 STATUS INFORMATION FOR THIS FAILURE.                  *
*        'AN IRRECOVERABLE TAPE ERROR HAD OCCURRED'                     *
*         'AFTER READING TAPE FORWARD READ'                             *
*         'AFTER READING TAPE REVERSE READ'                             *
*                 SEE DISK ERRORS ABOVE                                 *
*        'CPVEX   CVA INSTRUCTION FAILURE'                              *
*                 THE CVA INSTRUCTION IS USED AS A DATA CHECKER         *
*                 IT IS TESTED AS IT DATA CHECKS. IF A BAD SUM IS       *
*                 CREATED, THIS OUTPUT OCCURS.  THE CVA LOOP            *
*                 IS PRINTED ALONG WITH PROGRAM INFORMATION AND THE     *
*                 DATA BUFFER.                                          *
*        'CPVEX---DATA---ERROR'                                         *
*         'WHILE WRITING DISC AND TAPE(IF TAPE SELECTED)'               *
*         'AFTER READING DISC, RANDOM FILE'                             *
*         'AFTER READING DISC, KEYED FILE'                              *
*         'AFTER READING DISC, SEQUENTIAL FILE'                         *
*         'AFTER READING TAPE ,FORWARD READ'                            *
*         'AFTER READING TAPE , REVERSE READ'                           *
*         'AFTER RUNNING MEMORY BYTE PATTERNS'                          *
*         'AFTER MULTIPLE AND STACK INSTRUCTION EXERCISE'               *
*         'after doubleword instruction exercise on data'               *
*         'AFTER MOVE BYTE STRING EXERCISE ON DATA'                     *
*         'after family of word exercise on data'                       *
*         'after family of halfword exercise on data'                   *
*         'after halfword and word multiply exercise on data'           *
*         'AFTER DECIMAL EXERCISE ON DATA'                              *
*                 THE DATA CHECKER FOUND A DATA ERROR AFTER ONE OF      *
*                 ABOVE EXERCISES ON THE DATA BUFFER. IN THE            *
*                 CASE OF INSTRUCTION TESTS , THE INSTRUCTION           *
*                 LOOP WHICH LAST OPERATED ON THE DATA BUFFER IS OUTPUT.*
*                 FOR ALL DATA ERRORS THE BAD PORTION OF THE DATA       *
*                 BUFFER IS PRINTED, FOLLOWED BY BAD BITS, WHICH IS A   *
*                 SNAP WHICH HAS A BIT ON FOR EACH BAD                  *
*                 BIT IN THE BUFFER. THIS IS FOLLOWED BY A SNAP         *
*                 OF THE BUFFER AS IT SHOULD HAVE BEEN, THEN            *
*                 ALL THE PROGRAM INFORMATION.                          *
*        'ONE PASS COMPLETED'                                           *
*                 THE EXERCISER HAS ACCOMPLISHED ON PASS ON             *
*                 ALL RANDOM PATTERNS, BYTE BOUNDARIES AND INSTRUCTION  *
*                 TESTS.                                                *
************************************************************************
         REF      M:LO
         REF      M:DO
         REF      M:LL
         DEF      BOMBSAV,BIAS,REGSAVE,PROTFPT,TDONE,STARTAD,ENDAD
         DEF      CPLOC,PROTFL,DECSV,DECREM,ANDDATA,ORDATA,BBST,BBEND
         DEF      IOBTD,IOAD,CLRSV,CBUFF,CPVCNTR,BLSIZE
         DEF      MEMTOT,THIS,RECCNT
         DEF      START,CRASH,SETM,DCEXLP1,TTST1,TTST2,TTST3,NOCLOSE
         DEF      WAIT,BOMBACK,SHFTER,BOMBACK1,BOMBER,BOMFWD,BOMFWD1
         DEF      BOMEXIT,EBOMB,LMLP,ELMLP,ADLP,EADLP,MBSLP,EMBSLP
         DEF      WORDLP,EWORDLP,HLFLP,EHLFLP,MULLP,EMULLP,DECLP,DECLP1
         DEF      DECLP2,EDECLP,APASS,PROTAD,NEXP,CVA,CVALP,PRCVA
         DEF      LMK02,BBITS,FLOOP,FLCONT,DATAERLP,LMK07,SNAPDCBS
         DEF      CVAEXIT,CVAER,SUPERC,DEVERR,CPVCNTL,PROT1,PROT3
         DEF      PROTEX,CNTRLAB,CWAITR,IOCOMP,CLRIOBUFF
         SYSTEM   BPM
         SYSTEM   SIG7FDP
         DO1      RANDOM
F:DP     DSECT    1
F:DC     DSECT    1
F:DC1    DSECT    1
         DO1      TAPE
F:TP     DSECT    1
F:CPVCTL DSECT    1
         DO1      RANDOM
F:DP M:DCB (FILE,'DP'),(RANDOM),(DIRECT),;
         (OUTIN),(RECL,30720),(RSTORE,30),(TRIES,3)
F:DC M:DCB (FILE,'DC'),(KEYED),(DIRECT),;
         (OUTIN),(RECL,30720),(TRIES,3)
F:DC1 M:DCB (FILE,'DC1'),(CONSEC),(SEQUEN),;
         (OUTIN),(RECL,30720),(TRIES,3)
         DO1      TAPE
F:TP M:DCB (DEVICE,'MT'),(CONSEC),(SEQUEN),(OUTIN),;
         (RECL,30720),(TRIES,19)
F:CPVCTL M:DCB (FILE,'CPVEXCONTROL'),(CONSEC),(SEQUEN),;
         (IN),(RECL,80),(TRIES,10)
         CSECT    0
PROTFPT  DATA     0,0
PROTSV   DATA     0
MYSMPRT  CNAME
MYSMPRT  PROC
LF       STW,1    PROTSV
         STW,AF(2) PROTFPT
         STW,AF(3) PROTFPT+1
         LI,1     AF(1)
         STB,1    PROTFPT+1
         LI,1     10
         STB,1    PROTFPT
         LW,1     PROTSV
         CAL1,8   PROTFPT
         PEND
MYTEXTC  CNAME
         PROC
         LIST,1   1
         LOCAL    A,B
A        SET      %
LF       DATA,1   0
         DATA,1   X'15',' ',' '
         TEXT     AF(1)
B        SET      %
         ORG      A
         DATA,1   ((ABSVAL(B)-ABSVAL(A))*4)-1
         ORG      B
         LIST,0   1
         PEND
FCAL     M:WAIT   1234
OPTIONS  EQU      %
         DO       TESTIO
         TEXT     'TEST I/O'
         DO       RANDOM
         TEXT     ' INCLUDING '
         ELSE
         TEXT     ' EXCLUDING '
         FIN
         TEXT     'RANDOM FILES. '
         DO1      TAPE
         TEXT     'TAPE INCLUDED. '
         FIN
         TEXT     'INSTRUCTION TESTS'
         DO1      TESTINST=0
         TEXT     'NOT'
         TEXT     'INCLUDED. '
START    STW,6    HERE+1            SAVE LM NAME
         STW,7    HERE+2
         LI,4     -1
         STW,4    RECCNT            NO FILES OPEN
         LI,4     X'40'
         STB,4    HERE+1
         STW,6    HERE1+1
         STW,7    HERE1+2
         STB,4    HERE1+1
         STW,0    STKPT             STACK POINTER
         LD,0     *0                STACK DW
         SW,0     STKPT             DISTANCE FROM PT TO STK
         AH,0     1                 DISTANCE TO END OF STACK
         AW,0     STKPT
         STW,0    STKEND            END OF STACK
         LW,1     X'4F'
         AND,1    =X'1FFFF'         MASK JIT ADDR
         STW,1    MJITS             JIT START ADDR
         AI,1     511               JIT END ADDR
         STW,1    MJITE             SAVE END ADDR
         M:TYPE   (MESS,HERE)
         M:TRAP   (IGNORE,FX)
         M:XCON   CRASH
         DO1      TAPE
         M:INT    TAPEON
         M:GP     17
         BCR,8    %+3               GOT EM
         M:SNAP   'NEED MEM'
         B        SUPERC
         STW,9    STARTAD           SAVE START OF TEST MEM
         AI,9     (512*17)-1
         STW,9    ENDAD             SAVE END OF TEST MEM
         M:STIMER (TUN,1),TEXIT     RANDOM GENERATOR
         LI,3     1
         LI,4     2
TLOOP    AWM,3    4
         AWM,4    3
         AI,3     1
         MTW,0    TDONE             FINISHED
         BCR,3    TLOOP             NO
         M:STIMER (SEC,1),(CPVCNTL)
         B        BEGIN
TDONE    DATA     0
TEXIT    MTW,1    TDONE             SET FINISHED FLAG
         M:TRTN
CRASH    CI,8     X'70'             ABORTED ON PURPOSE
         BCS,4    SUPERC            YES
         M:TTIMER TUN,CANCEL
         STW,8    PROTFL            TURN OFF PROTECT TEST
         LI,8     0
         XW,8     PROTFL
         XW,8     STARTAD
         XW,9     ENDAD
         MYSMPRT  0,8,9             RESET PROTECT
         XW,8     STARTAD
         XW,9     ENDAD
         M:TRAP   (ABORT,NAO),(IGNORE,FX)
         M:TYPE   (MESS,HERE1)
         M:TYPE   (MESS,MCRASH)     A XCON HAPPENED
         M:OPEN   M:LO,(DEVICE,'LP')
         M:OPEN   M:DO,(DEVICE,'LP')
         M:OPEN   M:LL,(DEVICE,'LP')
         M:PRINT  (MESS,HERE)
         M:PRINT  (MESS,HERE)
         M:PRINT  (MESS,MCRASH)
         M:SNAP   'XCON-REG'
         CI,8     12                HUNG UP OR LIMIT
         BCS,4    SUPERC            YES
         B        BBITS
         DO       TAPE
         DEF      TAPEON,TAPEOFF
TAPEON   M:PRINT  (MESS,MTAPEON)
         M:TYPE   (MESS,HERE1)
         M:TYPE   (MESS,MTAPEON)
         STW,0    TAPEEX
         LI,0     1
         XW,0     TAPEEX            TURN ON EX FLAG
         M:INT    TAPEOFF           ANOTHER INT TURNS IT OFF
         M:TRTN
TAPEOFF  M:TYPE   (MESS,HERE1)
         M:TYPE   (MESS,MTAPEOFF)
         M:PRINT  (MESS,MTAPEOFF)
         STW,0    TAPEEX
         LI,0     0
         XW,0     TAPEEX            TURN OFF EX FLAG
         M:INT    TAPEON            ANOTHER INT TURNS IT ON
         M:TRTN
         FIN
BEGIN    AI,3     1                 BUMP RANDOM COUNTERS
         AI,4     1
         DO       TAPE
         MTW,0    TAPEEX            USE TAPE
         BCR,3    SETM              NO
         STW,0    EXTAPE
         LI,0     1
         XW,0     EXTAPE            TURN ON FLAG
         FIN
SETM     EQU      %                 LETS SET UP MEM
         AND,3    =X'7F'            GENERATE SCS SHIFT INST
         OR,3     =X'200'
         LCI      0
         STM,0    REGSAVE
         LI,7     0                 SINGLE WORD CHECKSUM
         LI,6     0                 DOUBLE WORD CHECKSUM
         DO1      NORMPAT=0
         LI,3     0                 BYTE COUNTER FROM 0 TO 255
         LW,1     STARTAD
SETMEMLP EQU      %
         DO       IDSTAMP
*
IGNORE   EQU      16                IGNORE 1ST 16 WORDS OF EACH PAGE
*
         CI,1     511
         BANZ     %+2               B IF NOT ON PAGE BOUND
         AI,1     IGNORE
         FIN
         BAL,0    GENPAT            GET NEXT PATTERN WORD
         STW,2    *1                STORE IN MEM
         AW,7     2                 UPDATE SINGLE WORD CHECKSUM
         BNC      %+2
         AI,6     1                 UPDATE DOUBLE WORD CHECKSUM
         AI,1     1                 BUMP ADDR
         CW,1     ENDAD             DONE
         BLE      SETMEMLP          NO
         STD,6    DMEMTOT           SAVE CHECKSUM
         DO       IDSTAMP
*        PLACE IDENTIFICATION STAMP AT BEGINNING OF EACH PAGE
         M:TIME   TIME,TMS
         LI,8     2**(RANGE+1)-1
         AND,8    REGSAVE+4
         SCS,8    -2                BTD IN WORD 5 BITS 0-1
         AW,8     STARTAD
         AI,8     BUFOFFSET         IOAD IN WORD 5 BITS 15-31
         LCI      3
         STM,8    TIME+5            BINARY TIME IN WORDS 6-7
         M:TIME   TIME+1            EBCDIC TIME IN WORDS 1-4
         LCI      8
         LM,8     TIME
         LW,1     STARTAD
LMK03    EQU      %
         LW,8     1                 ADDRESS IN WORD 0
         LCI      8
         STM,8    *1
         LW,8     *X'4F'
         STB,8    *1                USER ID IN WORD 0 BYTE 0
         AI,1     512
         CW,1     ENDAD
         BL       LMK03
         FIN
         LCI      0
         LM,0     REGSAVE
         LI,6     30720
         STW,6    BLSIZE
         LW,6     3
         AND,6    =7                ITERATION COUNT
         LW,8     4
         AND,8    =3                GET BTD THIS PASS
         STW,8    IOBTD             SAVE IT
         LW,8     4
         SCS,8    -2                RIGHT 2
         AND,8    =2**(RANGE-1)-1
         AW,8     STARTAD           AD CORE START ADDR
         AI,8     BUFOFFSET         ADD BUFFER OFFSET FROM PAGE BOUND
         STW,8    IOAD              STORE IN BUFFER START ADDR
         DO       TAPE
         MTW,0    EXTAPE            USING TAPE
         BCR,3    DCEXLP1           NO
         LI,6     10                TAPE ITERATION COUNT
         STW,6    BLSIZE
         LI,6     30720
         CI,4     1
         BCS,4    %+2
         LI,6     0
         XW,6     BLSIZE
************************************************************************
*I/O TEST SECTION, ONE EACH OF RANDOM, SEQUENTIAL, AND KEYED           *
*IS TESTED. AND A OPTIONAL TAPE. BYTE BOUNDARIES ARE VARIED AND THE    *
*STARTING ADDRESS RELATIVE TO END OF PAGE                               *
************************************************************************
         M:OPEN   F:TP,(DEVICE,'MT'),(CONSEC),(SEQUEN),;
                  (OUTIN),(RECL,30720),(TRIES,19)
         M:REW    F:TP
         M:WEOF   F:TP
         M:PFIL   F:TP,(BOF)        POSITION BEFORE
         M:PFIL   F:TP,(EOF)        THEN AFTER
         M:PRECORD F:TP,(N,1),(REV),(ABN,PREN) REV OVER TAPE MARK
PREN     M:PRECORD F:TP,(N,1),(FWD),(ABN,DCEXLP1) FWD OVER TAPE MARK
         FIN
DCEXLP1  EQU      %
         DO       TAPE
         MTW,0    BLSIZE
         BCR,3    TTST1
         FIN
         DO1      TESTIO=0
         B        WAIT              BYPASS I/O
         DO1      IDSTAMP
         BAL,0    CLRSADD           CLEAR SEEK ADDR AREA
         M:OPEN F:DC,(FILE,'DC'),(KEYED),;
         (DIRECT),(OUTIN),(RECL,30720),(TRIES,3),(KEYM,3)
         M:OPEN F:DC1,(FILE,'DC1'),(CONSEC),;
         (SEQUEN),(OUTIN),(RECL,30720),(TRIES,3)
         DO1      RANDOM
         M:OPEN F:DP,(FILE,'DP'),(RANDOM),;
         (DIRECT),(OUTIN),(RECL,30720),(TRIES,3),(RSTORE,30)
         LI,2     0
         STW,2    RECCNT            WRITING FIRST RECORD
         DO1      RANDOM
         M:WRITE F:DP,(BUF,*IOAD),(BTD,*IOBTD),;
         (BLOCK,0),(SIZE,*BLSIZE)
         M:WRITE F:DC,(BUF,*IOAD),(BTD,*IOBTD),(KEY,ONE),;
         (ONEWKEY),(SIZE,*BLSIZE)
         M:WRITE F:DC1,(BUF,*IOAD),(BTD,*IOBTD),;
          (SIZE,*BLSIZE)
TTST1    EQU      %
         DO       TAPE
         MTW,0    EXTAPE            USE TAPE
         BCR,3    %+2               NO
         M:WRITE  F:TP,(BUF,*IOAD),(BTD,*IOBTD),(SIZE,30720)
         FIN
         LI,5     IOMESS1
         LI,2     1                 TELL CVA TO CHECK
         BAL,0    CVA
         BAL,0    CVA               CHECK ONCE MORE AFTER I/O DONE
         DO       TAPE
         MTW,0    BLSIZE
         BCR,3    TTST2
         FIN
         BAL,0    CLRIOBUFF
         M:READ F:DC,(BUF,*IOAD),(BTD,*IOBTD),;
         (KEY,ONE),(SIZE,*BLSIZE)
         LI,5     IOMESS2K
         LI,2     0                 NO CHECK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CHECK
         M:PRECORD F:DC1,(N,1),(REV)
         BAL,0    CLRIOBUFF
         M:READ F:DC1,(BUF,*IOAD),(BTD,*IOBTD),;
          (SIZE,*BLSIZE)
         LI,5     IOMESS2S
         LI,2     0                 NO CHECK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CHECK
         DO       RANDOM
         BAL,0    CLRIOBUFF
         M:READ F:DP,(BUF,*IOAD),(BTD,*IOBTD),;
         (BLOCK,0),(SIZE,*BLSIZE)
         LI,5     IOMESS2R
         LI,2     0                 NO CK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CHECK
         FIN
         DO       CHKSS2
         M:EXU    RDINST            READ SENSE SWITCHES
         BCS,4    SUPERC            EXIT IF SS2 SET
         FIN
         DO1      IDSTAMP
         BAL,0    CLRSADD           CLEAR SEEK ADDR AREA
         LI,2     1
         STW,2    RECCNT            WRITING SECOND RECORD
         M:WRITE F:DC,(BUF,*IOAD),(BTD,*IOBTD),;
         (KEY,TWO),(ONEWKEY),(SIZE,*BLSIZE)
         M:PFIL F:DC1,(EOF)
         M:WRITE F:DC1,(BUF,*IOAD),(BTD,*IOBTD),;
          (SIZE,*BLSIZE)
         DO       RANDOM
         M:WRITE F:DP,(BUF,*IOAD),(BTD,*IOBTD),;
         (BLOCK,15),(SIZE,*BLSIZE)
         FIN
TTST2    EQU      %
         DO       TAPE
         MTW,0    EXTAPE            TAPE TOO
         BCR,3    %+2               NO
         M:WRITE  F:TP,(BUF,*IOAD),(BTD,*IOBTD),(SIZE,30720)
         FIN
         LI,5     IOMESS1
         LI,2     1                 CK
         BAL,0    CVA
         BAL,0    CVA               CHECK ONCE MORE AFTER I/0 DONELETE
         DO       TAPE
         MTW,0    BLSIZE
         BCR,3    TTST3
         FIN
         BAL,0    CLRIOBUFF
         M:READ F:DC,(BUF,*IOAD),(BTD,*IOBTD),;
         (KEY,TWO),(SIZE,*BLSIZE)
         LI,5     IOMESS2K
         LI,2     0                 NO CK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CK
         M:PRECORD F:DC1,(N,1),(REV)
         BAL,0    CLRIOBUFF
         M:READ F:DC1,(BUF,*IOAD),(BTD,*IOBTD),;
          (SIZE,*BLSIZE)
         LI,5     IOMESS2S
         LI,2     0                 NO CK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CK
         DO       RANDOM
         BAL,0    CLRIOBUFF
         M:READ F:DP,(BUF,*IOAD),(BTD,*IOBTD),;
         (BLOCK,15),(SIZE,*BLSIZE)
         LI,5     IOMESS2R
         LI,2     0                 NO CK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CK
         FIN
TTST3    XW,8     CLOSEFL
         SCS,8    1
         BCR,8    NOCLOSE
         XW,2     RECCNT
         LI,2     -1
         XW,2     RECCNT            NO FILES OPEN
         M:CLOSE  F:DC
         M:CLOSE  F:DC1
         DO1      RANDOM
         M:CLOSE  F:DP
NOCLOSE  XW,8     CLOSEFL
         BDR,6    DCEXLP1           ITERATE
         DO       TAPE
         DEF      DCEXLP2,DCEXLP3
         MTW,0    EXTAPE            USING TAPE
         BCR,3    DISKNOTAPE
         LI,6     10                ITERATION COUNT
         M:WEOF   F:TP
         M:WEOF   F:TP
         M:PFIL   F:TP,(BOF)        BACK UP ONE
         M:PFIL   F:TP,(BOF)        AND  AGAIN
         M:PRECORD F:TP,(N,1),(FWD),(ABN,PREN2) FWD READ OVER TAPE MARK
PREN2    M:PRECORD F:TP,(N,1),(REV),(ABN,PREN3) REV READ OVER TAPE MARK
PREN3    M:PRECORD F:TP,(N,1),(REV) BACK UP A RECORD
         M:PRECORD F:TP,(N,1),(FWD) GO FORWARD ONE
DCEXLP2  EQU      %
         BAL,0    CLRIOBUFF
         M:READ F:TP,(BUF,*IOAD),(BTD,*IOBTD),(REV),(SIZE,30720)
         LI,5     IOMESS3
         LI,2     0                 NO CK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CHECK
         BAL,0    CLRIOBUFF
         M:READ F:TP,(BUF,*IOAD),(BTD,*IOBTD),(REV),(SIZE,30720)
         LI,2     0                 NO CK
         BAL,0    CVA
         LI,2     1                 CK
         BAL,0    CVA
         BDR,6    DCEXLP2           ITERATE
         LI,6     10                ITERATION
         MTW,0    EXTAPE            USING TAPE
         BCR,3    DCEXLP3
         M:PFIL   F:TP,(BOF)        BACK OVER FILE
         M:PFIL   F:TP,(EOF)        FORWARD OVER MARK
         M:PRECORD F:TP,(N,1),(REV),(ABN,PREN4) REV OVER TAPE MARK
PREN4    M:PRECORD F:TP,(N,1),(FWD),(ABN,PREN5) FWD OVER TAPE MARK
PREN5    M:PRECORD F:TP,(N,1),(FWD) FORWARD OVER RECORD
         M:PRECORD F:TP,(N,1),(REV) REVERSE OVER RECORD
DCEXLP3  EQU      %
         BAL,0    CLRIOBUFF
         M:READ F:TP,(BUF,*IOAD),(BTD,*IOBTD),(FWD),(SIZE,30720)
         LI,5     IOMESS4
         LI,2     0                  NO CK
         BAL,0    CVA
         LI,2     1                 CK
         BAL,0    CVA
         BAL,0    CLRIOBUFF
         M:READ F:TP,(BUF,*IOAD),(BTD,*IOBTD),(FWD),(SIZE,30720)
         LI,2     0                 NO CK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CK
         BDR,6    DCEXLP3           ITERATE
         FIN
DISKNOTAPE EQU %
         DO       TAPE
         MTW,0    EXTAPE            USING TAPE
         BCR,3    WAIT              NO
         M:PFIL   F:TP,(EOF) GO FORWARD ONE MARK
         MTW,0    TAPEEX            REQ FOR TAPE
         BCS,3    WAIT              YES
TCLOSE   MTW,-1   EXTAPE            NO TURN IT OFF
         M:CLOSE  F:TP,(REM)
         FIN
WAIT     M:WAIT   0                 LET SOMEONE ELSE IN
*****************************************************************
* INSTRUCTION TESTS BEGIN HERE, THE TESTS OPERATE ON THE DATA   *
* BUT IF THE INSTRUCTIONS AND PROTECTION TRAPS WORK CORRECTLY   *
* THEN THE DATA WILL BE THE SAME AFTER THE INSTRUCTION TESTS    *
* HAVE OPERATED ON IT. IF ONE OF THESE TESTS FAIL, THE LOOP     *
* WHICH OPERATED ON THE DATA LAST WILL BE SNAPPED.              *
*****************************************************************
         LI,8     1
         STW,8    PROTFL            TURN ON PROTECT TEST
         LCI      0
         STM,0    BOMBSAV           SAVE REGS
         DO1      TESTINST=0
         B        EDECLP+1          BYPASS INST TEST
         AND,4    =7   MASK OFF FOR BYTE AND DIRECTION
         CI,4     4                 BACKWARD?
         BCS,4    BOMBACK           YES
         B        BOMFWD            NO, FORWARD
BOMBACK  LW,1     ENDAD             BACKWARDS ADDRESSING BOMB
         SCS,1    2                 INTO BYTE ADDR
         AI,4     -4
         OR,1     4                 GET BYTE TO BE TESTED
         LW,2     STARTAD
         SCS,2    2
         OR,2     4
BOMBACK1 LCI      12                GET PATTERN
         LM,4     BOMBDAT
         LB,0     0,1
         STB,0    ORBYTE
         EOR,0    BOMBDAT
         STB,0    0,1
         BAL,0    BOMBER
         BAL,0    SHFTER
         BAL,0    BOMBER
         BAL,0    SHFTER
         BAL,0    BOMBER
         BAL,0    SHFTER
         BAL,0    BOMBER
         LB,0     ORBYTE
         STB,0    0,1
         MTB,1    0,1
         MTB,-1   0,1
         MTB,2    0,1
         MTB,-2   0,1
         MTB,4    0,1
         MTB,-4   0,1
         MTB,8    0,1
         MTB,7    0,1
         MTB,1    0,1
         MTB,0    0,1
         AI,1     -4                DECR ADDR
         CW,1     2                 DONE
         BGE      BOMBACK1          NO BRANCH
         B        BOMEXIT
BOMBSAV  RES      16
BOMBDAT  DATA X'60F8DFFF',X'1CF02000',X'F0E0BFFE',X'1FC04001'
         DATA X'7E067FFD',X'F8388002',X'3C0C03FB',X'3E700704'
         DATA X'FF180FF7',X'FFE01F08',X'FF303FEF',X'FF0EFC10'
ORBYTE   RES      1
BOMBER   STB,4    0,1               STORE BYTE PATTERN
         STB,5    0,1
         STB,6    0,1
         STB,7    0,1
         STB,8    0,1
         STB,9    0,1
         STB,10   0,1
         STB,11   0,1
         STB,12   0,1
         STB,13   0,1
         STB,14   0,1
         STB,15   0,1
         B        *0                RETURN
SHFTER   SCD,4    -4                SHIFT IN NEXT PATTERN
         SCD,6    -4
         SCD,8    -4
         SCD,10   -4
         SCD,12   -4
         SCD,14   -4
         B        *0                RETURN
BOMFWD   LW,1     STARTAD           FORWARD ADDRESSING BOMB
         SCS,1    2                 INTO BYTE ADDR
         OR,1     4                 GET WHICH BYTE
         LW,2     ENDAD             SAME WITH ENDING
         SCS,2    2
         OR,2     4
BOMFWD1  LCI      12                GET PATTERNS
         LM,4     BOMBDAT
         LB,0     0,1               GET CURRENT BYTE
         STB,0    ORBYTE            SAVE IT
         EOR,0    BOMBDAT           INVERT IT
         STB,0    0,1               PUT INVERTED IN TEST BYTE
         BAL,0    BOMBER            STORE PATTERN
         BAL,0    SHFTER            GET NEXT PATTERN
         BAL,0    BOMBER            STORE PATTERN
         BAL,0    SHFTER            ECT
         BAL,0    BOMBER
         BAL,0    SHFTER
         BAL,0    BOMBER
         LB,0     ORBYTE            GET ORIGINAL BYTE
         STB,0    0,1               PUT IT BACK
         MTB,1    0,1
         MTB,-1   0,1
         MTB,2    0,1
         MTB,-2   0,1
         MTB,4    0,1
         MTB,-4   0,1
         MTB,8    0,1
         MTB,7    0,1
         MTB,1    0,1
         MTB,0    0,1
         AI,1     4                 BUMP ADDRESS
         CW,1     2                 DONE
         BLE      BOMFWD1           NO, BRANCH
BOMEXIT  LI,5     AFTBOMB
         LI,6     WAIT+1
         LI,7     EBOMB
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
         LI,2     -1
EBOMB    BAL,0    CVA               CHK MEM
         DO       CHKSS2
         M:EXU    RDINST            READ SENSE SWITCHES
         BCS,4    SUPERC            EXIT IF SS2 SET
         FIN
         LW,1     STARTAD           STARTING ADDRESS
LMLP     LCI      8                 LOAD SORE MEM WITH
         LM,8     0,1               WITH LM/STM
         STM,8    0,1
         LW,2     1                 WITH STACK INSTRUCTIONS
         AI,2     7
         LW,3     =X'7FFF0000'
         LI,4     32767
         MSP,4    2
         LI,4     -32767
         MSP,4    2
         LI,4     8
         MSP,4    2
         LCI      7
         PLM,8    2
         PLW,15   2
         PSW,15   2
         LCI      7
         PSM,8    2
         AI,1     16
         CW,1     ENDAD             DONE?
         BL       LMLP
         LI,5     AFTLM             MESSAGE ADDR
         LI,6     LMLP-1
         LI,7     ELMLP
         LI,2     -1
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
ELMLP    BAL,0    CVA               CHECK IF DATA IS OK
         LW,1     STARTAD
ADLP     LW,2     1
         SCS,2    -1                INTO DWA
         LD,8     *1                EXERCISE DBLE WORD INST
         SD,8     0,2
         AD,8     *1
         STD,8    0,2
         LCD,8    *1
         AD,8     0,2
         AD,8     *1
         AD,8     0,2
         SD,8     *1
         SD,8     0,2
         AD,8     *1
         STD,8    0,2
         BCS,1    %+3               NEGATIVE
         LAD,8    *1
         B        %+3
         LAD,8    *1
         LCD,8    8
         STD,8    *1
         AI,1     2
         CW,1     ENDAD             DONE?
         BL       ADLP
         LI,5     AFTAD
         LI,6     ADLP-1
         LI,7     EADLP
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
         LI,2     -1
EADLP    BAL,0    CVA               CHECK DATA PATTERNS
         DO       CHKSS2
         M:EXU    RDINST            READ SENSE SWITCHES
         BCS,4    SUPERC            EXIT IF SS2 SET
         FIN
         LW,1     STARTAD           MBS INSTRUCTION TEST
MBSLP    LW,2     1
         SCS,2    2                 INTO BA
         LW,8     2                 MBS REG SET UP
         LW,9     8
         AI,8     1                 BUMP SOURCE 1 LOC
         LI,0     X'80'             128 BYTES
         STB,0    9                 INTO COUNT
         LD,10    8                 ANOTHER MBS REG
         AI,10    128               NEXT MBS 32 WORDS
         AI,11    128
         LD,12    10                ANOTHER MBS REG
         AI,12    128
         AI,13    128
         LD,14    12                ANOTHER MBS REG
         AI,14    128
         AI,15    128
         MBS,8    -1                MOVE 32 WORDS TO SELF
         MBS,10   -1                MOVE NEXT 32
         MBS,12   -1                NEXT 32
         MBS,14   -1                TOTAL OF 128 WORDS MOVED
         STB,0    9                 NEW CNT
         STB,0    11
         STB,0    13
         STB,0    15
         AI,8     384
         AI,9     384
         AI,10    384
         AI,11    384
         AI,12    384
         AI,13    384
         AI,14    384
         AI,15    384
         MBS,8    -1
         MBS,10   -1
         MBS,12   -1
         MBS,14   -1
         AI,1     256               BUMP START AD
         CW,1     ENDAD             DONE?
         BL       MBSLP             NO
         LI,5     AFTMBS            MESSAGE IF ERROR
         LI,6     MBSLP-1
         LI,7     EMBSLP
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
         LI,2     -1
EMBSLP   BAL,0    CVA               DATA CK NO I/O
         LW,1     STARTAD           TEST FAMILY OF WORD
WORDLP   LW,8     *1
         SW,8     0,1
         AW,8     *1
         STW,8    0,1
         LCW,8    *1
         AW,8     0,1
         AW,8     *1
         AW,8     0,1
         SW,8     0,1
         SW,8     *1
         AW,8     0,1
         STW,8    0,1
         BCS,1    %+3               ITS NEGATIVE
         LAW,8    0,1
         B        %+3
         LAW,8    0,1
         LCW,8    8
         STW,8    *1
         LI,8     0
         XW,8     *1
         MTW,0     *1
         BCS,3     %-3
         AWM,8    0,1
         AND,8    *1
         OR,8     0,1
         LI,9     -1
         STS,8    *1
         LS,8     0,1
         STW,8    *1
         LI,9     0
         LI,8     0
         LS,8     *1
         EOR,8    0,1
         AI,8     0
         SLD,8    -32
         AW,9     8
         SLD,8    32
         AW,8     9
         SLS,9    -64
         AW,8     9
         SLS,9    63
         AW,8     9
         SLD,8    0
         SCS,8    63
         SCS,8    1
         SCS,8    -64
         SCS,8    0
         SCD,8    63
         SCD,8    1
         SCD,8    -64
         XW,8     9
         SAD,8    32
         AW,8     9
         SAD,8    -32
         MTW,0    8
         BCR,1    %+2
         AI,8     1
         AW,8     9
         SAS,9    32
         AW,8     9
         SAS,9    -64
         AW,8     9
         SAD,8    0
         STW,8    *1
         AI,8     524287
         AI,8     -524287
         AI,8     -524288
         AI,8     524287
         AI,8     1
         STW,8    *1
         MTW,1    0,1
         MTW,-1   *1
         MTW,2    0,1
         MTW,-2   *1
         MTW,4    0,1
         MTW,-4   *1
         MTW,8    0,1
         MTW,7    *1
         MTW,1    0,1
         MTW,0    *1
         AI,1     1
         CW,1     ENDAD
         BLE      WORDLP            NOT DONE
         LI,5     AFTWORD
         LI,6     WORDLP-1
         LI,7     EWORDLP
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
         LI,2     -1
EWORDLP  BAL,0    CVA               CK DATA NO I/O
         DO       CHKSS2
         M:EXU    RDINST            READ SENSE SWITCHES
         BCS,4    SUPERC            EXIT IF SS2 SET
         FIN
         LW,1     STARTAD           EXERCISE HALFWORD INSTR
HLFLP    LI,2     1
         LH,8     *1,2
         AH,8     *1,2
         SH,8     *1,2
         STH,8    *1,2
         LCH,8    *1
         AH,8     *1
         AH,8     *1
         AH,8     *1
         SH,8     *1
         SH,8     *1
         AH,8     *1
         STH,8    *1
         MTH,0    *1,2
         BCS,1    %+3
         LAH,8    *1,2
         B        %+4
         LAH,8    *1,2
         STH,8    8
         LCH,8    8
         STH,8    *1,2
         MTH,1    *1
         MTH,-1   *1
         MTH,2    *1,2
         MTH,-2   *1,2
         MTH,4    *1
         MTH,-4   *1
         MTH,8    *1,2
         MTH,7    *1,2
         MTH,1    *1,2
         AI,1     1
         CW,1     ENDAD DONE
         BLE      HLFLP
         LI,5     AFTHW
         LI,6     HLFLP-1
         LI,7     EHLFLP
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
         LI,2     -1
EHLFLP   BAL,0    CVA               CK DATA NO I/O
         LW,1     STARTAD           EXERCISE MULTIPLY
MULLP    LI,2     1
         LI,9     1
         MW,8     0,1
         BCR,1    %+2
         AI,8     1
         AW,9     8
         MW,8     *1
         DW,8     *1
         DW,9     0,1
         AW,9     8
         MW,9     *1
         MI,8     1
         BCR,1    %+2               POS
         AI,8     1
         AW,9     8
         MI,8     -1
         BCR,1    %+2               POS
         AI,8     1
         AW,9     8
         MI,8     -1
         XW,8     9
         MI,9     0
         AW,8     9
         STW,8    0,1
         LH,9     *1,2
         MH,9     *1,2
         DH,9     *1,2
         STH,9    *1,2
         LI,8     1
         MH,8     *1
         MH,9     *1
         DH,9     *1
         STH,9    *1
         AI,1     1
         CW,1     ENDAD             DONE?
         BLE      MULLP             NOPE
         LI,5     AFTMUL
         LI,6     MULLP-1
         LI,7     EMULLP
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
         LI,2     -1
EMULLP   BAL,0    CVA               CK DATA NO I/O
         DO       CHKSS2
         M:EXU    RDINST            READ SENSE SWITCHES
         BCS,4    SUPERC            EXIT IF SS2 SET
         FIN
         LW,1     STARTAD           EXERCISE DECIMAL INSTR
DECLP    LCI      8
         LM,8     0,1               GET 8 WORDS
         STM,8    DECSV             SAVE EM
         LW,7     BOMBSAV+4         GET RANDOM NUM
         AND,7    =7                MASK IT
         LI,6     0
         LW,9     DECSV,7           GET ONE OF THE 8
         BCR,1    %+3               BR IF POS
         LCW,9    9                 NEG INV IT
         LI,6     1                 REMEMBER SIGN
         LI,5     31                LOOP
         LI,8     0
         DW,8     =10
         AI,8     X'C0'             PUT ON SIGN
         MTW,0    6                 WAS IT + OR -
         BCR,3    %+2               BR IF IT WAS +
         AI,8     X'10'             MAKE IT -
DECLP1   STB,8    *1,5              STORE IT
         LI,8     0                 CONTIN
         DW,8     =10
         AI,8     X'F0'
         BDR,5    DECLP1            LOOP ON BIN TO DEC CONV
         LI,2     1                 DONE
         PACK,0   *1,2
         DSA      21
         UNPK,0   *1,2
         PACK,0   *1,2
         DST,0    *1,2
         DL,0     *1,2
         DS,0     *1,2
         DS,0     *1,2
         DS,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DS,0     *1,2
         DSA      -7
         UNPK,0   *1
         PACK,0   *1
         DST,0    *1
         DL,0     *1
         DS,0     *1
         DS,0     *1
         DS,0     *1
         DA,0     *1
         DA,0     *1
         DA,0     *1
         DA,0     *1
         DS,0     *1
         DSA      -7
         UNPK,0   *1,2
         PACK,0   *1,2
         DST,0    *1,2
         DL,0     *1,2
         DS,0     *1,2
         DS,0     *1,2
         DS,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DS,0     *1,2
         DSA      -7
         UNPK,0   *1,2
         PACK,0   *1,2
         DST,0    *1,2
         DL,0     *1,2
         DS,0     *1,2
         DS,0     *1,2
         DS,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DS,0     *1,2
         LI,2     9
         DM,8     *1,2
         BCR,3    %+2               ITS ZERO DON'T DIVIDE
         DD,8     *1,2
         STW,12   DECREM            SAVE REMAINDER
         STW,13   DECREM+1
         LI,12    0
         LI,13    0
         LI,6     0
         DA,8     DECREM
         BCR,1    %+2               BR IF POS
         LI,6     1
         LI,3     7
         LI,2     0
         LI,4     0
DECLP2   LI,12    0
         LI,13    0
         DD,4     =X'16C'
         SLS,13   -4                DUMP SIGN
         CI,13    X'10'
         BCR,4    %+3               IS IT 10 OR MORE
         AI,13    -16
         AI,13    10
         S,13     0,4               SHIFT IT TO PROPER WEIGHT
         OR,2     13
         AI,4     4                 4 MORE DIGITS
         BDR,3    DECLP2            FINISH DEC TO BIN CONV
         SLS,15   -4                DUMP SIGN
         SLS,15   28                MOVE UP FRONT
         OR,2     15
         MTW,0    6                 WAS IT POS
         BCR,3    %+2               BR IF YES
         LCW,2    2
         STW,2    DECSV,7           PUT IT BACK
         LCI      8
         LM,8     DECSV             PUT 8 WORDS BACK IN CORE
         STM,8    0,1
         AI,1     8                 BUMP ADDRESS
         CW,1     ENDAD             ARE WE DONE
         BL       DECLP             BR IF NO
         LI,2     -1                TELL CVA TO DATA CK NO I/O
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
         LI,5     AFTDEC
         LI,6     DECLP-1           START FOR DUMP
         LI,7     EDECLP            END FOR DUMP
EDECLP   BAL,0    CVA
         LCI      0
         LM,0     BOMBSAV           RESTORE REGS
         MTB,1    CPLOC             PASS COMPLETE?
         BCS,3    APASS             NO
         M:TYPE   (MESS,HERE1)
         M:TYPE   (MESS,CPASS)
         MTH,4    BIAS              BUMP BIAS AFTER PASS
APASS    MTB,-1   BIAS
         LI,8     0
         STW,8    PROTFL            TURN OFF PROTECT TEST
         LW,8     STARTAD
         LW,9     ENDAD
         MYSMPRT  0,8,9             RESET PROTECTION STATE
         M:TRAP   (ABORT,NAO),(IGNORE,FX)   RESET TRAP REQUEST
         DO       CHKSS2
         M:EXU    RDINST            READ SENSE SWITCHES
         BCS,4    SUPERC            EXIT IF SS2 SET
         FIN
         LCI      0
         LM,0     BOMBSAV
         B        BEGIN
PROTAD   STCF     14
         LI,15    0
         LCF      14
         BCR,1    NEXP              NOT A PROTECT TRAP
         BCS,14   NEXP              40 TRAP CC TEST
         LW,15    PROTFL
         LI,8     0
         STW,8    PROTFL            DISABLE PROTECT
         LW,8     STARTAD
         LW,9     ENDAD
         MYSMPRT  0,8,9             RESET PROTECTION STATE
NEXP     M:TRAP   (ABORT,NAO),(IGNORE,FX)    RESET TRAP REQUEST
         STW,15   PROTFL            TURN PROTECT ENABLE ON
         M:TRTN                     EXIT TRAP
STARTAD  DATA     0
ENDAD    DATA     0
REGSAVE  RES      16
MEMTOT   DATA     0
         BOUND    8
DMEMTOT  DATA     0,0
         DO1      IDSTAMP
TIME     RES      8                 TIME STAMP FOR GRANULES
RDINST   RD,0     0                 READ SENSE SWITCHES
RECCNT   DATA     0                 RECORD COUNT
TYCNN    DATA     0                 DEVICE ERR FLAG
DATAER  MYTEXTC   '**CPVEX--DATA ERROR-----'
CVAIER  MYTEXTC   '**CPVEX--CVA INSTRUCTION FAILURE***'
CPASS   MYTEXTC   'ONE PASS COMPLETED'
CPLOC    DATA     0
PROTFL   DATA     0
DECSV    RES      8
DECREM   RES      2
CLOSEFL DATA X'AAAAAAAA'
************************************************************************
*CVA    THIS IS THE DATA CHECKER. IT IS ENTERED WITH THE TYPE OF       *
*CHECK IT IS TO PERFORM IN R2. R2=0 SPIN THROUGH MEMORY UNTIL THE      *
*THE I/O IS COMPLETE, THEN CHECK FOR I/O ERRORS; R2=1 CHECK DATA
*UNTIL I/O IS COMPLETE, CHECK FOR DATA ERRORS, THEN CHECK FOR           *
*I/O ERRORS; R2=-1, CHECK FOR DATA ERRORS, NO I/O CHECK                *
*************************************************************************
CVA      LCI      0
         STM,0    REGSAVE           SAVE EM
         LW,1     STARTAD           GET STARTING ADDRESS
         LI,0     0                 ZERO OUT TOTAL
CVALP    AI,1     97                BUMP ADDR
         LI,3     -1                CVA SET UP
         LI,5     -1
         LI,7     -1
         LI,9     -1
         LI,11    -1
         LI,13    -1
         LI,15    -1
         CVA,2    -1,1
         CVA,3    -33,1
         CVA,4    -65,1
         CVA,5    -97,1
         CVA,6    -1,1
         CVA,7    -33,1
         CVA,8    -65,1
         CVA,9    -97,1
         CVA,10   -33,1
         CVA,11   -1,1
         CVA,12   -97,1
         CVA,13   -65,1
         CVA,14   -33,1
         CVA,15   -1,1
         CD,2     6                 CHECK RESULTS
         BCS,3    CVAER             DON'T MATCH
         CD,4     8
         BCS,3    CVAER
         CW,6     11
         BCS,3    CVAER
         CW,7     10
         BCS,3    CVAER
         CW,8     13
         BCS,3    CVAER
         CW,9     12
         BCS,3    CVAER
         CD,10    14
         BCS,3    CVAER
PRCVA    AW,0     5                 ADD TOTAL THESE 32 WORDS
         AW,0     4
         AW,0     3
         AW,0     2
         AI,1     31                GO TO NEXT 32 WORDS
         CW,1     ENDAD             ARE WE DONE
         BL       CVALP             NO
         MTW,0    REGSAVE+2         SHOULD WE CHECK
         BCR,3    CVAEXIT           O
         LI,4     0
         LI,5     0
         LW,1     ENDAD
         AI,1     1
         LI,2     -(17*512)
CVALP1   EQU      %
         DEF      CVALP1
         DO       IDSTAMP
         CI,2     511
         BANZ     %+2               B IF NOT PAGE BOUNDARY
         AI,2     IGNORE            SKIP IGNORE WORDS
         FIN
         AW,5     *1,2
         BNC      %+2               B IF NO CARRY
         AI,4     1
         BIR,2    CVALP1
         CW,5     DMEMTOT+1         CHECK 1 WORD CHECKSUM
         BNE      LMK02             B IF 1 WORD CHECKSUM BAD
         CD,4     DMEMTOT           CHECK 2 WORD CHECKSUM
         BE       CVAEXIT           OK THEY COMPARED
         LW,2     =' DW '           2 WORD CHECKSUM ERROR
         STW,2    DATAER+6          CHANGE DATAER MESSAGE
LMK02    EQU      %
         M:TTIMER TUN,CANCEL
         STW,8    PROTFL            TURN OFF PROTECT TEST
         LI,8     0
         XW,8     PROTFL
         XW,8     STARTAD
         XW,9     ENDAD
         MYSMPRT  0,8,9             RESET PROTECT
         XW,8     STARTAD
         XW,9     ENDAD
         M:TRAP   (ABORT,NAO),(IGNORE,FX)
         M:OPEN   M:LO,(DEVICE,'LP')
         M:OPEN   M:DO,(DEVICE,'LP')
         M:OPEN   M:LL,(DEVICE,'LP')
         M:PRINT  (MESS,HERE)
         M:PRINT  (MESS,HERE)
         M:PRINT  (MESS,DATAER)
         M:TYPE   (MESS,HERE1)
         M:TYPE   (MESS,DATAER)
         M:PRINT  (MESS,*REGSAVE+5)
         M:TYPE   (MESS,*REGSAVE+5)
BBITS    EQU      %
         DO1      RANDOM
         M:SNAP   'F:DP,DCB',(F:DP,F:DP+21)
         M:SNAP   'F:DC,DCB',(F:DC,F:DC+21)
         M:SNAP   'F:DC1DCB',(F:DC1,F:DC1+21)
         DO1      TAPE
         M:SNAP   'F:TP,DCB',(F:TP,F:TP+21)
         LW,1     STARTAD
         LI,6     0
         LW,7     ENDAD
         DO1      NORMPAT=0
         LI,3     0
FLOOP    EQU      %
         DO       IDSTAMP
         CI,1     511
         BANZ     %+2               B IF NOT PAGE BOUNDARY
         AI,1     IGNORE            SKIP IGNORE WORDS
         FIN
         BAL,0    GENPAT            GET NEXT PATTERN WORD
         EOR,2    *1
         BCR,3    FLCONT
         MTW,0    6
         BCS,3    %+2
         LW,6     1
         LW,7     1
FLCONT   AI,1     1
         CW,1     ENDAD
         BLE      FLOOP
         MTW,0    6
         BEZ      LMK07             B IF NO ERROR IN BUFFER
         STW,6    RBBST
         STW,7    RBBEND
         AI,6     -32
         AI,7     +32
         AND,6    =X'1FE00'         GO TO BEGINNING OF PAGE
         OR,7     =X'1FF'           GO TO END OF PAGE
         CW,6     STARTAD
         BG       %+2
         LW,6     STARTAD
         CW,7     ENDAD
         BL       %+2
         LW,7     ENDAD
         STW,6    BBST
         STW,7    BBEND
         M:SNAP   'BAD-BUFF',(*BBST,*BBEND)
         LW,1     STARTAD
         DO1      NORMPAT=0
         LI,3     0
DATAERLP EQU      %
         DO       IDSTAMP
         CI,1     511
         BANZ     LMK05             B IF NOT PAGE BOUNDARY
         LI,4     IGNORE
         BEZ      LMK05             B IF IGNORE = 0
         LI,2     0
         STW,2    *1                SET SKIPPED WORDS TO 0
         AI,1     1
         BDR,4    %-2
LMK05    EQU      %
         FIN
         BAL,0    GENPAT            GET NEXT PATTERN WORD
         EOR,2    *1
         STW,2    *1                PUT DIFFERENCE IN CORE
         AI,1     1
         CW,1     ENDAD             ARE WE DONE
         BLE      DATAERLP          NO
         M:SNAP   'BAD-BITS',(*RBBST,*RBBEND)
         MTW,0    RECCNT
         BLZ      LMK07             B IF NO FILES OPEN
         BAL,0    IOCOMP            WAIT FOR I/O TO COMPLETE
         BAL,0    CLRIOBUFF
         MTW,0    RECCNT            TEST RECORD COUNT
         BNEZ     %+3               B IF SECOND RECORD
         M:READ F:DC,(BUF,*IOAD),(BTD,*IOBTD),;
         (KEY,ONE),(SIZE,*BLSIZE)
         B        %+2
         M:READ F:DC,(BUF,*IOAD),(BTD,*IOBTD),;
         (KEY,TWO),(SIZE,*BLSIZE)
         BAL,0    IOCOMP            WAIT FOR I/O TO COMPLETE
         M:SNAP   'KEYED',(*BBST,*BBEND)
         M:PRECORD F:DC1,(N,1),(REV)
         BAL,0    CLRIOBUFF
         M:READ F:DC1,(BUF,*IOAD),(BTD,*IOBTD),;
          (SIZE,*BLSIZE)
         BAL,0    IOCOMP            WAIT FOR I/O TO COMPLETE
         M:SNAP   'CONSEQ',(*BBST,*BBEND)
         DO       RANDOM
         BAL,0    CLRIOBUFF
         MTW,0    RECCNT            TEST RECORD COUNT
         BNEZ     %+3               B IF SECOND RECORD
         M:READ F:DP,(BUF,*IOAD),(BTD,*IOBTD),;
         (BLOCK,0),(SIZE,*BLSIZE)
         B        %+2
         M:READ F:DP,(BUF,*IOAD),(BTD,*IOBTD),;
         (BLOCK,15),(SIZE,*BLSIZE)
         BAL,0    IOCOMP            WAIT FOR I/O TO COMPLETE
         M:SNAP   'RANDOM',(*BBST,*BBEND)
         FIN
LMK07    EQU      %
         MTW,0    REGSAVE+2         DOING INSTRUCTION TESTS?
         BCR,1    SNAPDCBS          NO BR
         M:PRINT  (MESS,MSINST)
         M:SNAP   'TEST-LP',(*REGSAVE+6,*REGSAVE+7)
SNAPDCBS EQU      %
         M:SNAP   'PROGRAM',(OPTIONS,PEND)
         M:SNAP   'MY-JIT',(*MJITS,*MJITE)
         M:SNAP   'FPT-AREA',(*FCAL,*LCAL)
         M:SNAP   'STACK',(*STKPT,*STKEND)
         B    SUPERC
ANDDATA  DATA     -1
ORDATA   DATA     0
BBST     DATA     0
BBEND    DATA     0
RBBST    DATA     0
RBBEND   DATA     0
MSINST  MYTEXTC   '**INSTRUCTION TEST LOOP FOLLOWS********'
CVAEXIT  MTW,0    REGSAVE+2         DATA CK NO I/O?
         BCS,1    CVADN             YES
         DO       TAPE
         MTW,0    BLSIZE
         BCR,3    TPCHK             NO DISK TRANS SIZE=0
         FIN
         MTB,0    F:DC+7            BUSY
         BCS,3    CVA+2             YES
         LI,0     DSKERR
         LH,1     F:DC+2
         SCS,1    -1
         AND,1    =15
         AI,1     -1
         BCS,2    DEVERR
         M:CHECK  F:DC,(ABN,DEVERR),(ERR,DEVERR)
         MTB,0    F:DC1+7           BUSY
         BCS,3    CVA+2             YES
         LI,0     DSKERR
         LH,1     F:DC1+2
         SCS,1    -1
         AND,1    =15
         AI,1     -1
         BCS,2    DEVERR
         M:CHECK  F:DC1,(ABN,DEVERR),(ERR,DEVERR)
         DO       RANDOM
         MTB,0    F:DP+7            BUSY
         BCS,3    CVA+2             YES
         LI,0     DSKERR
         LH,1     F:DP+2
         SCS,1    -1
         AND,1    =15
         AI,1     -1
         BCS,2    DEVERR
         M:CHECK  F:DP,(ABN,DEVERR),(ERR,DEVERR)
         FIN
         DO       TAPE
TPCHK    MTB,0    F:TP+7            BUSY
         BCS,3    CVA+2             YES
         LI,0     TAPERR
         LH,1     F:TP+2
         SCS,1    -1
         AND,1    =15
         AI,1     -1
         BCS,2    DEVERR
         M:CHECK  F:TP,(ABN,DEVERR),(ERR,DEVERR)
         FIN
CVADN    LCI      0
         LM,0     REGSAVE
         DO       TAPE
         MTW,0    EXTAPE            USING TAPE
         BCR,3    REQTST            NO
         MTW,0    TAPEEX            YES BUT DOES HE WANT IT
         BCR,3    TCLOSE            NO, RELEASE TAPE
         B        *0                YES HE WANTS TO EXIT
REQTST   MTW,0    TAPEEX            NO EXING BUT DOES HE WANT IT
         BCS,3    APASS+1           WELL GIVE IT TO HIM THEN
         FIN
         B        *0
CVAER    EQU      %
         DO       IDSTAMP
         B        PRCVA             DO NOT CHECK CVA
         ELSE
         MTW,0    REGSAVE+2         SHOULD WE CHECK
         BEZ      PRCVA             NO
         M:TTIMER TUN,CANCEL
         BCR,3    PRCVA             NO
         STW,8    PROTFL            TURN OFF PROTECT TEST
         LI,8     0
         XW,8     PROTFL
         XW,8     STARTAD
         XW,9     ENDAD
         MYSMPRT  0,8,9             RESET PROTECT
         XW,8     STARTAD
         XW,9     ENDAD
         M:TRAP   (ABORT,NAO),(IGNORE,FX)
         M:PRINT  (MESS,CVAIER)
         M:TYPE   (MESS,HERE1)
         M:TYPE   (MESS,CVAIER)
         M:PRINT  (MESS,*REGSAVE+5)
         B        BBITS
         FIN
SUPERC   CAL1,9   6                 SUPER CLOSE
         M:XCON   0                 NO MORE XCONS
         DO1      TAPE
    M:CLOSE F:TP,(REM)
         MTW,0    TYCNN
         BEZ      EXIT              EXIT IF NO DEV ERR
         M:WAIT   2                 SLEEP FOR 2 SEC
         M:EXU    RDINST            READ SENSE SWITCHES
         BCR,4    %-2               SLEEP IF SS2 RESET
EXIT     EQU      %
         M:EXIT
         DO       TAPE
EXTAPE   DATA     0
TAPEEX   DATA     0
         FIN
HERE     TEXTC    '*** CPVEXYY'
HERE1    DATA,1   11,X'15',' ',' '
         DATA     0
         DATA     0
MCRASH MYTEXTC  '**SOMETHING IS WRONG, SEE M:XCON IN BATCH MAN'
         DO       TAPE
MTAPEON MYTEXTC  '* TESTING TAPE INT OR BRK TO EXCLUDE IT'
MTAPEOFF MYTEXTC  '*RELEASING TAPE, BRK OR INT TO INCLUDE IT'
         FIN
IOMESS1  MYTEXTC  'WHILE WRITING DISK AND TAPE(IF TAPE SELECTED)'
         DO1      RANDOM
IOMESS2R  MYTEXTC  'AFTER READING DISC, RANDOM FILE'
IOMESS2S  MYTEXTC  'AFTER READING DISC, SEQUENTIAL FILE'
IOMESS2K  MYTEXTC  'AFTER READING DISC, KEYED FILE'
         DO       TAPE
IOMESS3  MYTEXTC  'AFTER READING TAPE, REVERSE READ'
IOMESS4  MYTEXTC  'AFTER READING TAPE, FORWARD READ'
         FIN
DSKERR MYTEXTC  'AN IRRECOVERABLE DISK ERROR HAS OCCURRED'
         DO1      TAPE
TAPERR  MYTEXTC   'AN IRRECOVERABLE TAPE ERROR HAS OCCURRED'
AFTBOMB MYTEXTC   'AFTER RUNNING MEMORY BYTE PATTERNS'
AFTLM   MYTEXTC   'AFTER MULTIPLE AND STACK INST EXERCISE'
AFTAD   MYTEXTC   'AFTER DOUBLE WORD INSTRUCTION EXERCISE ON DATA'
AFTMBS  MYTEXTC   'AFTER MOVE BYTE STRING EXERCISE ON DATA'
AFTWORD MYTEXTC   'AFTER FAMILY OF WORD EXERCISE ON DATA'
AFTHW   MYTEXTC   'AFTER FAMILY OF HALF WORD EXERCISE ON DATA'
AFTMUL  MYTEXTC   'AFTER HW AND WORD MULTIPLY EXERCISE'
AFTDEC  MYTEXTC   'AFTER DECIMAL INSTRUCTION EXERCISE'
PRINTW   DATA     0
STKPT    DATA     0
STKEND   DATA     0
IOBTD    DATA     0
IOAD     DATA     0
MJITS    DATA     0
MJITE    DATA     0
BIAS     DATA     0
DEVERR   STW,0    PRINTW
         M:TTIMER TUN,CANCEL
         STW,1    TYCNN             SET DEVICE ERR FLAG
         STW,8    PROTFL            TURN OFF PROTECT TEST
         LI,8     0
         XW,8     PROTFL
         XW,8     STARTAD
         XW,9     ENDAD
         MYSMPRT  0,8,9             RESET PROTECT
         XW,8     STARTAD
         XW,9     ENDAD
         M:TRAP   (ABORT,NAO),(IGNORE,FX)
         M:TYPE   (MESS,HERE1)
         M:OPEN   M:LO,(DEVICE,'LP')
         M:OPEN   M:DO,(DEVICE,'LP')
         M:OPEN   M:LL,(DEVICE,'LP')
         M:PRINT  (MESS,HERE)
         M:PRINT  (MESS,HERE)
         M:PRINT  (MESS,*PRINTW)
         M:TYPE   (MESS,*PRINTW)
         M:PRINT  (MESS,*REGSAVE+5)
         M:TYPE   (MESS,*REGSAVE+5)
         B        BBITS
CPVCNTL  LI,1     0
         MTW,0    PROTFL            SHOULD WE SET PROT
         BCR,3    PROTEX+1          NO BR
         LW,10    STARTAD
         LW,11    ENDAD
         LW,8     IOBTD             GET CURRENT BTD
         BCR,3    PROTEX            ITS 0 EXIT
         CI,8     2
         BCS,1    PROT1             ITS 1
         BCS,2    PROT3             ITS3
         MYSMPRT  2,10,11           SET PROTECT TO 2
         B        PROTEX
PROT1    EQU      %
         MYSMPRT  1,10,11
         B        PROTEX
PROT3    EQU      %
         MYSMPRT  3,10,11
PROTEX   M:TRAP   PROTAD,(TRAP,NAO),(IGNORE,FX)
         MTW,-1   CPVCNTR           BUMP COUNTER
         BCS,3    CNTRLAB           NO READ OF CONTROL
         LI,8     500
         STW,8    CPVCNTR           RESET COUNTER
         M:OPEN   F:CPVCTL,(ABN,CNTRLAB)
         M:READ   F:CPVCTL,(BUF,CBUFF),(SIZE,80),(WAIT),(ABN,CNTRLAB),;
         (ERR,CNTRLAB)
         LW,1     CBUFF
         CW,1     ='WAIT'
         BCR,3    CWAITR
         M:CLOSE F:CPVCTL
CNTRLAB  M:STIMER (SEC,1),CPVCNTL
         M:TRTN
CWAITR   M:CLOSE F:CPVCTL
         M:WAIT   25
         B        CPVCNTL
CBUFF    RES      80
CPVCNTR  DATA     5
BLSIZE   DATA     0
ONE      DATA     X'03000001'       A KEY
TWO      DATA     X'03000002'       AND ANOTHER
         DO       IDSTAMP
*        CLEAR PAGE BOUND+8 TO PAGE BOUND+IGNORE-1
         DEF      CLRSADD,LMK06,CLRSAEX
CLRSADD  EQU      %
         LCI      0
         STM,0    REGSAVE
         LW,2     =' LMK'
         LW,3     STARTAD
LMK06    EQU      %
         LI,1     IGNORE-8
         BLEZ     CLRSAEX           RETURN IF IGNORE <= 8
         LW,4     3
         AI,4     8
         STW,2    *4                CLEAR SEEK ADDR AREA
         AI,4     1
         BDR,1    %-2
         AI,3     512               INDEX TO NEXT PAGE
         CW,3     ENDAD
         BL       LMK06
CLRSAEX  EQU      %
         LCI      0
         LM,0     REGSAVE
         B        *0
         FIN
*        WAIT FOR I/O TO COMPLETE, IGNORE ERROR OR ABNORMAL
IOCOMP   EQU      %
         M:CHECK  F:DC,(ABN,LMK08),(ERR,LMK08)
LMK08    EQU      %
         M:CHECK  F:DC1,(ABN,LMK09),(ERR,LMK09)
LMK09    EQU      %
         DO1      RANDOM
         M:CHECK  F:DP,(ABN,LMK10),(ERR,LMK10)
LMK10    EQU      %
         B        *0
*        SUBROUTINE TO GENERATE NEXT WORD OF PATTERN IN R2
GENPAT   EQU      %
         DO       NORMPAT
         LW,2     1                 NORMAL PATTERN
         OR,2     =X'FF000000'
         AW,2     BIAS
         S,2      *REGSAVE+3
         LW,4     REGSAVE+4
         CI,4     X'40'
         BAZ      %+2
         EOR,2    =-1
         AND,2    ANDDATA
         OR,2     ORDATA
         ELSE
         LI,4     -4                BYTE PATTERN FOR MPC PROBLEM
         LB,5     3
         STB,5    3,4
         MTB,1    3
         BIR,4    %-3
         FIN
         B        *0
CLRIOBUFF EQU %
         LCI      3
         STM,5    CLRSV
         LW,6     IOAD
         SCS,6    2                 INTI BA
         AW,6     IOBTD             STARTING BYTE
         LW,7     6
         AI,7     30719             IO SIZE
         LW,5     THIS
         XW,5     THAT
         XW,5     NOTHIS
         XW,5     NOTHAT
         XW,5     THISONE
         STW,5    THIS
         CI,5     1
         BL       CLRLP
         CI,5     2
         BL       CLRLP1
         BG       CLRLP3
CLRLP2   STB,7    0,6
         STB,6    0,7
         AI,6     1
         AI,7     -1
         CW,6     7
         BLE      CLRLP2
         B        CLREX
CLRLP    STB,5    0,6
         STB,5    0,7
         AI,6     1
         AI,7     -1
         CW,6     7
         BLE      CLRLP
         B        CLREX
CLRLP1   STB,6    0,6
         STB,7    0,7
         AI,6     1
         AI,7     -1
         CW,6     7
         BLE      CLRLP1
         B        CLREX
CLRLP3   LB,5     *STARTAD
         B        CLRLP
CLREX    LCI      3
         LM,5     CLRSV
         B        *0
CLRSV RES 3
THIS   DATA  0
THAT   DATA  -1
NOTHIS   DATA     +1
NOTHAT   DATA     +2
THISONE  DATA     +3
LCAL     M:WAIT   4321
PEND     END      START
!ASSIGN M:BI,(FILE,CPVEXBON)
!LOAD (BI),(LMN,CPVEXN),(PERM),(TSS,256)
!ASSIGN M:BO,(FILE,CPVEXBOIO)
!AP SD,SI,LO,BO
TESTIO   EQU      1
*                                   TESTIO IS SET TO 1 TO INCLUDE
*                                   I/O TESTING.
*
RANDOM   EQU      1
*                                   RANDOM IS SET TO 1 TO INCLUDE
*                                   RANDOM FILES IF TESTIO IS 1.
*                                   NOT USED IF TESTIO IS 0.
*
TAPE     EQU      0
*                                   TAPE IS SET TO 1 TO ALLOW TAPE
*                                   PROCESSING.  IF SET, TAPE
*                                   PROCESSING IS TOGGLED BY BRK OR
*                                   INT.
*
TESTINST EQU      0
*                                   TESTINST IS SET TO 1 TO INCLUDE
*                                   INSTRUCTION TESTING.
*
IDSTAMP  EQU      0
*                                   IDSTAMP IS SET TO 1 TO INCLUDE
*                                   VARIOUS ID STAMPS AT THE BEGINNING
*                                   OF EACH PAGE IN USER BUFFER.
*
BUFOFFSET EQU     X'1E2'
*                                   BUFOFFSET IS SET TO WORD OFFSET
*                                   FOR I/O START ADDR FROM PAGE BOUND.
*                                   ORIGINAL EXERCISER USES X'1E2'.
*
RANGE    EQU      5
*                                   RANGE IS LOG BASE 2 OF NUMBER OF
*                                   WORDS OVER WHICH I/O START ADDR
*                                   VARIES RANDOMLY.  ORIGINAL
*                                   EXERCISER USES 5.
*
CHKSS2   EQU      1
*                                   CHKSS2 IS SET TO 1 TO CAUSE
*                                   PROGRAM TO EXIT IF SENSE SWITCH 2
*                                   IS SET.  IF CHKSS2 IS 0, SENSE
*                                   SWITCHES HAVE NO EFFECT ON PROGRAM.
NORMPAT  EQU      1
*                                   NORMPAT IS SET TO 1 IF ORIGINAL
*                                   EXERCISER PATTERN IS DESIRED.  IF
*                                   NORMPAT IS SET TO 0, SPECIAL
*                                   PATTERN FOR MPC PROBLEM IS USED.
         PAGE
******************************************************************************
*PURPOSE: TO EXERCISE THE SYSTEM UNDER CPV, AS A                       *
*                 USER PROGRAM, WHICH CAN RUN AS A GHOST, ONLINE        *
*                 OR BATCH.                                             *
****************************************************************************
*METHOD: RANDOM DATA IS GENERATED, THEN WRITTEN, READ AND               *
*                 CHECKED. THE I/O IS TO 3 FILES (A RANDOM FILE, A      *
*                 KEYED FILE AND A SEQUENTIAL FILE) WITH NO WAIT        *
*                 I/O. OPTIONALLY A TAPE MAY BE EXERCISED IF THE        *
*                 PROGRAM IS INTERRUPTED. BYTE BOUNDARIES AND BUFFER    *
*                 START, RELATIVE TO PAGE BOUNDARY, ARE VARIED. THE     *
*                 TAPE HANDLER ALSO ATTEMPTS TO SIMULATE SORT USAGE     *
*                 OF THE TAPE DRIVE.                                    *
*        AFTER THE I/O SECTION IS RUN, THE INSTRUCTION TESTS ARE        *
*                 EXECUTED ON THE RANDOM DATA IN THE FOLLOWING  ORDER:  *
*                 FAMILY OF BYTE                                        *
*                 LM,STM PUSH AND PULL                                  *
*                 FAMILY OF DOUBLE WORD                                 *
*                 MOVE BYTE STRING                                      *
*                 FAMILY OF WORD, SHIFT                                 *
*                 FAMILY OF HALFWORD                                    *
*                 FAMILY OF MULTIPLY, HW AND WORD                       *
*                 FAMILY OF DECIMAL                                     *
*        AFTER EACH INSTRUCTION TEST, THE DATA BUFFER IS CHECKED        *
*                 AND EVERY 2 MSEC THE ACCESS PROTECT IS SET FOR        *
*                 FOR THE DATA BUFFER TO VALUES 0-3 DEPENDING           *
*                 ON THE STATE OF A RANDOM NUMBER. WHEN A PROTECTION    *
*                 VIOLATION OCCURS, THE PROTECTION TYPE FOR THE         *
*                 DATA AREA IS RESET TO 0, AND CONTROL IS RETURNED      *
*                 TO THE INSTRUCTION TEST WHICH WAS ACTIVE.             *
************************************************************************
*OUTPUTS: TO THE OPERATORS CONSOLE(BATCH AND GHOST MODE) OR             *
*                 THE USERS CONSOLE(ON LINE MODE)                       *
*        ' ***CPVEXYY : BREAK OR INT AND I WILL EXERCISE A TAPE'*       *
*                 START OF PROGRAM, HITTING BREAK(ONLINE)               *
*                 OR KEYING IN !INT,SYSID (BATCH OR GHOST) WILL         *
*                 ADD A TAPE TO THE EXERCISE, OPTIONALLY.               *
*        'TESTING TAPE, INT OR BREAK TO EXCLUDE IT'                     *
*        'RELEASING TAPE, INT OR BREAK TO INCLUDE IT'                   *
*                 OUTPUTS WHEN TAPE HAS BEEN SELLECTED OR               *
*                 OR DESELECTED FOR THE TEST. THE TAPE HANDLER          *
*                 ATTEMPTS TO SIMULATE SORT USAGE OF THE TAPE UNIT.     *
*        ' *SOMETHING IS WRONG, SEE M:XCON IN BATCH MANUAL'*            *
*                 AN UNEXPECTED EVENT HAS OCCURRED AND THE EXER-        *
*                 CISER IS ABORTING. THIS COULD BE DUE TO A             *
*                 TIME OR DISC OR PRINT LIMIT BEING EXCEEDED            *
*                 OR DUE TO AN UNEXPECTED TRAP. THE XCON REGISTERS      *
*                 ARE SNAPPED TO THE LINE PRINTER, USING THE BATCH      *
*                 MANUAL TO INTERPRET THEM PLUS THE PROGRAM INFORM-     *
*                 ATION DUMP TO THE PRINTER WILL HELP IDENTIFY          *
*                 THE SOURCE OF THE PROBLEM.                            *
*        'AN IRRECOVERABLE DISC ERROR HAS OCCURRED'                     *
*         'WHILE WRITING DISC AND TAPE(IF TAPE SELECTED)'               *
*         'AFTER READING DISC, RANDOM FILE'                             *
*         'AFTER READING DISC, KEYED FILE'                              *
*         'AFTER READING DISC, SEQUENTIAL FILE'                         *
*                 MEANS AN IRRECOVERABLE I/O ERROR HAS OCCURRED,        *
*                 THE OPERATORS CONSOLE WILL ALSO REFLECT THIS ERROR    *
*                 WITH A DCXXX ERROR OR A DPXXX  ERROR. TAKING          *
*                 AN ERRORLOG WILL SHOW THE SPECIFIC SEEK,SENSE AND     *
*                 STATUS INFORMATION FOR THIS FAILURE.                  *
*        'AN IRRECOVERABLE TAPE ERROR HAD OCCURRED'                     *
*         'AFTER READING TAPE FORWARD READ'                             *
*         'AFTER READING TAPE REVERSE READ'                             *
*                 SEE DISK ERRORS ABOVE                                 *
*        'CPVEX   CVA INSTRUCTION FAILURE'                              *
*                 THE CVA INSTRUCTION IS USED AS A DATA CHECKER         *
*                 IT IS TESTED AS IT DATA CHECKS. IF A BAD SUM IS       *
*                 CREATED, THIS OUTPUT OCCURS.  THE CVA LOOP            *
*                 IS PRINTED ALONG WITH PROGRAM INFORMATION AND THE     *
*                 DATA BUFFER.                                          *
*        'CPVEX---DATA---ERROR'                                         *
*         'WHILE WRITING DISC AND TAPE(IF TAPE SELECTED)'               *
*         'AFTER READING DISC, RANDOM FILE'                             *
*         'AFTER READING DISC, KEYED FILE'                              *
*         'AFTER READING DISC, SEQUENTIAL FILE'                         *
*         'AFTER READING TAPE ,FORWARD READ'                            *
*         'AFTER READING TAPE , REVERSE READ'                           *
*         'AFTER RUNNING MEMORY BYTE PATTERNS'                          *
*         'AFTER MULTIPLE AND STACK INSTRUCTION EXERCISE'               *
*         'after doubleword instruction exercise on data'               *
*         'AFTER MOVE BYTE STRING EXERCISE ON DATA'                     *
*         'after family of word exercise on data'                       *
*         'after family of halfword exercise on data'                   *
*         'after halfword and word multiply exercise on data'           *
*         'AFTER DECIMAL EXERCISE ON DATA'                              *
*                 THE DATA CHECKER FOUND A DATA ERROR AFTER ONE OF      *
*                 ABOVE EXERCISES ON THE DATA BUFFER. IN THE            *
*                 CASE OF INSTRUCTION TESTS , THE INSTRUCTION           *
*                 LOOP WHICH LAST OPERATED ON THE DATA BUFFER IS OUTPUT.*
*                 FOR ALL DATA ERRORS THE BAD PORTION OF THE DATA       *
*                 BUFFER IS PRINTED, FOLLOWED BY BAD BITS, WHICH IS A   *
*                 SNAP WHICH HAS A BIT ON FOR EACH BAD                  *
*                 BIT IN THE BUFFER. THIS IS FOLLOWED BY A SNAP         *
*                 OF THE BUFFER AS IT SHOULD HAVE BEEN, THEN            *
*                 ALL THE PROGRAM INFORMATION.                          *
*        'ONE PASS COMPLETED'                                           *
*                 THE EXERCISER HAS ACCOMPLISHED ON PASS ON             *
*                 ALL RANDOM PATTERNS, BYTE BOUNDARIES AND INSTRUCTION  *
*                 TESTS.                                                *
************************************************************************
         REF      M:LO
         REF      M:DO
         REF      M:LL
         DEF      BOMBSAV,BIAS,REGSAVE,PROTFPT,TDONE,STARTAD,ENDAD
         DEF      CPLOC,PROTFL,DECSV,DECREM,ANDDATA,ORDATA,BBST,BBEND
         DEF      IOBTD,IOAD,CLRSV,CBUFF,CPVCNTR,BLSIZE
         DEF      MEMTOT,THIS,RECCNT
         DEF      START,CRASH,SETM,DCEXLP1,TTST1,TTST2,TTST3,NOCLOSE
         DEF      WAIT,BOMBACK,SHFTER,BOMBACK1,BOMBER,BOMFWD,BOMFWD1
         DEF      BOMEXIT,EBOMB,LMLP,ELMLP,ADLP,EADLP,MBSLP,EMBSLP
         DEF      WORDLP,EWORDLP,HLFLP,EHLFLP,MULLP,EMULLP,DECLP,DECLP1
         DEF      DECLP2,EDECLP,APASS,PROTAD,NEXP,CVA,CVALP,PRCVA
         DEF      LMK02,BBITS,FLOOP,FLCONT,DATAERLP,LMK07,SNAPDCBS
         DEF      CVAEXIT,CVAER,SUPERC,DEVERR,CPVCNTL,PROT1,PROT3
         DEF      PROTEX,CNTRLAB,CWAITR,IOCOMP,CLRIOBUFF
         SYSTEM   BPM
         SYSTEM   SIG7FDP
         DO1      RANDOM
F:DP     DSECT    1
F:DC     DSECT    1
F:DC1    DSECT    1
         DO1      TAPE
F:TP     DSECT    1
F:CPVCTL DSECT    1
         DO1      RANDOM
F:DP M:DCB (FILE,'DP'),(RANDOM),(DIRECT),;
         (OUTIN),(RECL,30720),(RSTORE,30),(TRIES,3)
F:DC M:DCB (FILE,'DC'),(KEYED),(DIRECT),;
         (OUTIN),(RECL,30720),(TRIES,3)
F:DC1 M:DCB (FILE,'DC1'),(CONSEC),(SEQUEN),;
         (OUTIN),(RECL,30720),(TRIES,3)
         DO1      TAPE
F:TP M:DCB (DEVICE,'MT'),(CONSEC),(SEQUEN),(OUTIN),;
         (RECL,30720),(TRIES,19)
F:CPVCTL M:DCB (FILE,'CPVEXCONTROL'),(CONSEC),(SEQUEN),;
         (IN),(RECL,80),(TRIES,10)
         CSECT    0
PROTFPT  DATA     0,0
PROTSV   DATA     0
MYSMPRT  CNAME
MYSMPRT  PROC
LF       STW,1    PROTSV
         STW,AF(2) PROTFPT
         STW,AF(3) PROTFPT+1
         LI,1     AF(1)
         STB,1    PROTFPT+1
         LI,1     10
         STB,1    PROTFPT
         LW,1     PROTSV
         CAL1,8   PROTFPT
         PEND
MYTEXTC  CNAME
         PROC
         LIST,1   1
         LOCAL    A,B
A        SET      %
LF       DATA,1   0
         DATA,1   X'15',' ',' '
         TEXT     AF(1)
B        SET      %
         ORG      A
         DATA,1   ((ABSVAL(B)-ABSVAL(A))*4)-1
         ORG      B
         LIST,0   1
         PEND
FCAL     M:WAIT   1234
OPTIONS  EQU      %
         DO       TESTIO
         TEXT     'TEST I/O'
         DO       RANDOM
         TEXT     ' INCLUDING '
         ELSE
         TEXT     ' EXCLUDING '
         FIN
         TEXT     'RANDOM FILES. '
         DO1      TAPE
         TEXT     'TAPE INCLUDED. '
         FIN
         TEXT     'INSTRUCTION TESTS'
         DO1      TESTINST=0
         TEXT     'NOT'
         TEXT     'INCLUDED. '
START    STW,6    HERE+1            SAVE LM NAME
         STW,7    HERE+2
         LI,4     -1
         STW,4    RECCNT            NO FILES OPEN
         LI,4     X'40'
         STB,4    HERE+1
         STW,6    HERE1+1
         STW,7    HERE1+2
         STB,4    HERE1+1
         STW,0    STKPT             STACK POINTER
         LD,0     *0                STACK DW
         SW,0     STKPT             DISTANCE FROM PT TO STK
         AH,0     1                 DISTANCE TO END OF STACK
         AW,0     STKPT
         STW,0    STKEND            END OF STACK
         LW,1     X'4F'
         AND,1    =X'1FFFF'         MASK JIT ADDR
         STW,1    MJITS             JIT START ADDR
         AI,1     511               JIT END ADDR
         STW,1    MJITE             SAVE END ADDR
         M:TYPE   (MESS,HERE)
         M:TRAP   (IGNORE,FX)
         M:XCON   CRASH
         DO1      TAPE
         M:INT    TAPEON
         M:GP     17
         BCR,8    %+3               GOT EM
         M:SNAP   'NEED MEM'
         B        SUPERC
         STW,9    STARTAD           SAVE START OF TEST MEM
         AI,9     (512*17)-1
         STW,9    ENDAD             SAVE END OF TEST MEM
         M:STIMER (TUN,1),TEXIT     RANDOM GENERATOR
         LI,3     1
         LI,4     2
TLOOP    AWM,3    4
         AWM,4    3
         AI,3     1
         MTW,0    TDONE             FINISHED
         BCR,3    TLOOP             NO
         M:STIMER (SEC,1),(CPVCNTL)
         B        BEGIN
TDONE    DATA     0
TEXIT    MTW,1    TDONE             SET FINISHED FLAG
         M:TRTN
CRASH    CI,8     X'70'             ABORTED ON PURPOSE
         BCS,4    SUPERC            YES
         M:TTIMER TUN,CANCEL
         STW,8    PROTFL            TURN OFF PROTECT TEST
         LI,8     0
         XW,8     PROTFL
         XW,8     STARTAD
         XW,9     ENDAD
         MYSMPRT  0,8,9             RESET PROTECT
         XW,8     STARTAD
         XW,9     ENDAD
         M:TRAP   (ABORT,NAO),(IGNORE,FX)
         M:TYPE   (MESS,HERE1)
         M:TYPE   (MESS,MCRASH)     A XCON HAPPENED
         M:OPEN   M:LO,(DEVICE,'LP')
         M:OPEN   M:DO,(DEVICE,'LP')
         M:OPEN   M:LL,(DEVICE,'LP')
         M:PRINT  (MESS,HERE)
         M:PRINT  (MESS,HERE)
         M:PRINT  (MESS,MCRASH)
         M:SNAP   'XCON-REG'
         CI,8     12                HUNG UP OR LIMIT
         BCS,4    SUPERC            YES
         B        BBITS
         DO       TAPE
         DEF      TAPEON,TAPEOFF
TAPEON   M:PRINT  (MESS,MTAPEON)
         M:TYPE   (MESS,HERE1)
         M:TYPE   (MESS,MTAPEON)
         STW,0    TAPEEX
         LI,0     1
         XW,0     TAPEEX            TURN ON EX FLAG
         M:INT    TAPEOFF           ANOTHER INT TURNS IT OFF
         M:TRTN
TAPEOFF  M:TYPE   (MESS,HERE1)
         M:TYPE   (MESS,MTAPEOFF)
         M:PRINT  (MESS,MTAPEOFF)
         STW,0    TAPEEX
         LI,0     0
         XW,0     TAPEEX            TURN OFF EX FLAG
         M:INT    TAPEON            ANOTHER INT TURNS IT ON
         M:TRTN
         FIN
BEGIN    AI,3     1                 BUMP RANDOM COUNTERS
         AI,4     1
         DO       TAPE
         MTW,0    TAPEEX            USE TAPE
         BCR,3    SETM              NO
         STW,0    EXTAPE
         LI,0     1
         XW,0     EXTAPE            TURN ON FLAG
         FIN
SETM     EQU      %                 LETS SET UP MEM
         AND,3    =X'7F'            GENERATE SCS SHIFT INST
         OR,3     =X'200'
         LCI      0
         STM,0    REGSAVE
         LI,7     0                 SINGLE WORD CHECKSUM
         LI,6     0                 DOUBLE WORD CHECKSUM
         DO1      NORMPAT=0
         LI,3     0                 BYTE COUNTER FROM 0 TO 255
         LW,1     STARTAD
SETMEMLP EQU      %
         DO       IDSTAMP
*
IGNORE   EQU      16                IGNORE 1ST 16 WORDS OF EACH PAGE
*
         CI,1     511
         BANZ     %+2               B IF NOT ON PAGE BOUND
         AI,1     IGNORE
         FIN
         BAL,0    GENPAT            GET NEXT PATTERN WORD
         STW,2    *1                STORE IN MEM
         AW,7     2                 UPDATE SINGLE WORD CHECKSUM
         BNC      %+2
         AI,6     1                 UPDATE DOUBLE WORD CHECKSUM
         AI,1     1                 BUMP ADDR
         CW,1     ENDAD             DONE
         BLE      SETMEMLP          NO
         STD,6    DMEMTOT           SAVE CHECKSUM
         DO       IDSTAMP
*        PLACE IDENTIFICATION STAMP AT BEGINNING OF EACH PAGE
         M:TIME   TIME,TMS
         LI,8     2**(RANGE+1)-1
         AND,8    REGSAVE+4
         SCS,8    -2                BTD IN WORD 5 BITS 0-1
         AW,8     STARTAD
         AI,8     BUFOFFSET         IOAD IN WORD 5 BITS 15-31
         LCI      3
         STM,8    TIME+5            BINARY TIME IN WORDS 6-7
         M:TIME   TIME+1            EBCDIC TIME IN WORDS 1-4
         LCI      8
         LM,8     TIME
         LW,1     STARTAD
LMK03    EQU      %
         LW,8     1                 ADDRESS IN WORD 0
         LCI      8
         STM,8    *1
         LW,8     *X'4F'
         STB,8    *1                USER ID IN WORD 0 BYTE 0
         AI,1     512
         CW,1     ENDAD
         BL       LMK03
         FIN
         LCI      0
         LM,0     REGSAVE
         LI,6     30720
         STW,6    BLSIZE
         LW,6     3
         AND,6    =7                ITERATION COUNT
         LW,8     4
         AND,8    =3                GET BTD THIS PASS
         STW,8    IOBTD             SAVE IT
         LW,8     4
         SCS,8    -2                RIGHT 2
         AND,8    =2**(RANGE-1)-1
         AW,8     STARTAD           AD CORE START ADDR
         AI,8     BUFOFFSET         ADD BUFFER OFFSET FROM PAGE BOUND
         STW,8    IOAD              STORE IN BUFFER START ADDR
         DO       TAPE
         MTW,0    EXTAPE            USING TAPE
         BCR,3    DCEXLP1           NO
         LI,6     10                TAPE ITERATION COUNT
         STW,6    BLSIZE
         LI,6     30720
         CI,4     1
         BCS,4    %+2
         LI,6     0
         XW,6     BLSIZE
************************************************************************
*I/O TEST SECTION, ONE EACH OF RANDOM, SEQUENTIAL, AND KEYED           *
*IS TESTED. AND A OPTIONAL TAPE. BYTE BOUNDARIES ARE VARIED AND THE    *
*STARTING ADDRESS RELATIVE TO END OF PAGE                               *
************************************************************************
         M:OPEN   F:TP,(DEVICE,'MT'),(CONSEC),(SEQUEN),;
                  (OUTIN),(RECL,30720),(TRIES,19)
         M:REW    F:TP
         M:WEOF   F:TP
         M:PFIL   F:TP,(BOF)        POSITION BEFORE
         M:PFIL   F:TP,(EOF)        THEN AFTER
         M:PRECORD F:TP,(N,1),(REV),(ABN,PREN) REV OVER TAPE MARK
PREN     M:PRECORD F:TP,(N,1),(FWD),(ABN,DCEXLP1) FWD OVER TAPE MARK
         FIN
DCEXLP1  EQU      %
         DO       TAPE
         MTW,0    BLSIZE
         BCR,3    TTST1
         FIN
         DO1      TESTIO=0
         B        WAIT              BYPASS I/O
         DO1      IDSTAMP
         BAL,0    CLRSADD           CLEAR SEEK ADDR AREA
         M:OPEN F:DC,(FILE,'DC'),(KEYED),;
         (DIRECT),(OUTIN),(RECL,30720),(TRIES,3),(KEYM,3)
         M:OPEN F:DC1,(FILE,'DC1'),(CONSEC),;
         (SEQUEN),(OUTIN),(RECL,30720),(TRIES,3)
         DO1      RANDOM
         M:OPEN F:DP,(FILE,'DP'),(RANDOM),;
         (DIRECT),(OUTIN),(RECL,30720),(TRIES,3),(RSTORE,30)
         LI,2     0
         STW,2    RECCNT            WRITING FIRST RECORD
         DO1      RANDOM
         M:WRITE F:DP,(BUF,*IOAD),(BTD,*IOBTD),;
         (BLOCK,0),(SIZE,*BLSIZE)
         M:WRITE F:DC,(BUF,*IOAD),(BTD,*IOBTD),(KEY,ONE),;
         (ONEWKEY),(SIZE,*BLSIZE)
         M:WRITE F:DC1,(BUF,*IOAD),(BTD,*IOBTD),;
          (SIZE,*BLSIZE)
TTST1    EQU      %
         DO       TAPE
         MTW,0    EXTAPE            USE TAPE
         BCR,3    %+2               NO
         M:WRITE  F:TP,(BUF,*IOAD),(BTD,*IOBTD),(SIZE,30720)
         FIN
         LI,5     IOMESS1
         LI,2     1                 TELL CVA TO CHECK
         BAL,0    CVA
         BAL,0    CVA               CHECK ONCE MORE AFTER I/O DONE
         DO       TAPE
         MTW,0    BLSIZE
         BCR,3    TTST2
         FIN
         BAL,0    CLRIOBUFF
         M:READ F:DC,(BUF,*IOAD),(BTD,*IOBTD),;
         (KEY,ONE),(SIZE,*BLSIZE)
         LI,5     IOMESS2K
         LI,2     0                 NO CHECK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CHECK
         M:PRECORD F:DC1,(N,1),(REV)
         BAL,0    CLRIOBUFF
         M:READ F:DC1,(BUF,*IOAD),(BTD,*IOBTD),;
          (SIZE,*BLSIZE)
         LI,5     IOMESS2S
         LI,2     0                 NO CHECK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CHECK
         DO       RANDOM
         BAL,0    CLRIOBUFF
         M:READ F:DP,(BUF,*IOAD),(BTD,*IOBTD),;
         (BLOCK,0),(SIZE,*BLSIZE)
         LI,5     IOMESS2R
         LI,2     0                 NO CK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CHECK
         FIN
         DO       CHKSS2
         M:EXU    RDINST            READ SENSE SWITCHES
         BCS,4    SUPERC            EXIT IF SS2 SET
         FIN
         DO1      IDSTAMP
         BAL,0    CLRSADD           CLEAR SEEK ADDR AREA
         LI,2     1
         STW,2    RECCNT            WRITING SECOND RECORD
         M:WRITE F:DC,(BUF,*IOAD),(BTD,*IOBTD),;
         (KEY,TWO),(ONEWKEY),(SIZE,*BLSIZE)
         M:PFIL F:DC1,(EOF)
         M:WRITE F:DC1,(BUF,*IOAD),(BTD,*IOBTD),;
          (SIZE,*BLSIZE)
         DO       RANDOM
         M:WRITE F:DP,(BUF,*IOAD),(BTD,*IOBTD),;
         (BLOCK,15),(SIZE,*BLSIZE)
         FIN
TTST2    EQU      %
         DO       TAPE
         MTW,0    EXTAPE            TAPE TOO
         BCR,3    %+2               NO
         M:WRITE  F:TP,(BUF,*IOAD),(BTD,*IOBTD),(SIZE,30720)
         FIN
         LI,5     IOMESS1
         LI,2     1                 CK
         BAL,0    CVA
         BAL,0    CVA               CHECK ONCE MORE AFTER I/0 DONELETE
         DO       TAPE
         MTW,0    BLSIZE
         BCR,3    TTST3
         FIN
         BAL,0    CLRIOBUFF
         M:READ F:DC,(BUF,*IOAD),(BTD,*IOBTD),;
         (KEY,TWO),(SIZE,*BLSIZE)
         LI,5     IOMESS2K
         LI,2     0                 NO CK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CK
         M:PRECORD F:DC1,(N,1),(REV)
         BAL,0    CLRIOBUFF
         M:READ F:DC1,(BUF,*IOAD),(BTD,*IOBTD),;
          (SIZE,*BLSIZE)
         LI,5     IOMESS2S
         LI,2     0                 NO CK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CK
         DO       RANDOM
         BAL,0    CLRIOBUFF
         M:READ F:DP,(BUF,*IOAD),(BTD,*IOBTD),;
         (BLOCK,15),(SIZE,*BLSIZE)
         LI,5     IOMESS2R
         LI,2     0                 NO CK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CK
         FIN
TTST3    XW,8     CLOSEFL
         SCS,8    1
         BCR,8    NOCLOSE
         XW,2     RECCNT
         LI,2     -1
         XW,2     RECCNT            NO FILES OPEN
         M:CLOSE  F:DC
         M:CLOSE  F:DC1
         DO1      RANDOM
         M:CLOSE  F:DP
NOCLOSE  XW,8     CLOSEFL
         BDR,6    DCEXLP1           ITERATE
         DO       TAPE
         DEF      DCEXLP2,DCEXLP3
         MTW,0    EXTAPE            USING TAPE
         BCR,3    DISKNOTAPE
         LI,6     10                ITERATION COUNT
         M:WEOF   F:TP
         M:WEOF   F:TP
         M:PFIL   F:TP,(BOF)        BACK UP ONE
         M:PFIL   F:TP,(BOF)        AND  AGAIN
         M:PRECORD F:TP,(N,1),(FWD),(ABN,PREN2) FWD READ OVER TAPE MARK
PREN2    M:PRECORD F:TP,(N,1),(REV),(ABN,PREN3) REV READ OVER TAPE MARK
PREN3    M:PRECORD F:TP,(N,1),(REV) BACK UP A RECORD
         M:PRECORD F:TP,(N,1),(FWD) GO FORWARD ONE
DCEXLP2  EQU      %
         BAL,0    CLRIOBUFF
         M:READ F:TP,(BUF,*IOAD),(BTD,*IOBTD),(REV),(SIZE,30720)
         LI,5     IOMESS3
         LI,2     0                 NO CK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CHECK
         BAL,0    CLRIOBUFF
         M:READ F:TP,(BUF,*IOAD),(BTD,*IOBTD),(REV),(SIZE,30720)
         LI,2     0                 NO CK
         BAL,0    CVA
         LI,2     1                 CK
         BAL,0    CVA
         BDR,6    DCEXLP2           ITERATE
         LI,6     10                ITERATION
         MTW,0    EXTAPE            USING TAPE
         BCR,3    DCEXLP3
         M:PFIL   F:TP,(BOF)        BACK OVER FILE
         M:PFIL   F:TP,(EOF)        FORWARD OVER MARK
         M:PRECORD F:TP,(N,1),(REV),(ABN,PREN4) REV OVER TAPE MARK
PREN4    M:PRECORD F:TP,(N,1),(FWD),(ABN,PREN5) FWD OVER TAPE MARK
PREN5    M:PRECORD F:TP,(N,1),(FWD) FORWARD OVER RECORD
         M:PRECORD F:TP,(N,1),(REV) REVERSE OVER RECORD
DCEXLP3  EQU      %
         BAL,0    CLRIOBUFF
         M:READ F:TP,(BUF,*IOAD),(BTD,*IOBTD),(FWD),(SIZE,30720)
         LI,5     IOMESS4
         LI,2     0                  NO CK
         BAL,0    CVA
         LI,2     1                 CK
         BAL,0    CVA
         BAL,0    CLRIOBUFF
         M:READ F:TP,(BUF,*IOAD),(BTD,*IOBTD),(FWD),(SIZE,30720)
         LI,2     0                 NO CK
         BAL,0    CVA
         LI,2     1
         BAL,0    CVA               NOW CK
         BDR,6    DCEXLP3           ITERATE
         FIN
DISKNOTAPE EQU %
         DO       TAPE
         MTW,0    EXTAPE            USING TAPE
         BCR,3    WAIT              NO
         M:PFIL   F:TP,(EOF) GO FORWARD ONE MARK
         MTW,0    TAPEEX            REQ FOR TAPE
         BCS,3    WAIT              YES
TCLOSE   MTW,-1   EXTAPE            NO TURN IT OFF
         M:CLOSE  F:TP,(REM)
         FIN
WAIT     M:WAIT   0                 LET SOMEONE ELSE IN
*****************************************************************
* INSTRUCTION TESTS BEGIN HERE, THE TESTS OPERATE ON THE DATA   *
* BUT IF THE INSTRUCTIONS AND PROTECTION TRAPS WORK CORRECTLY   *
* THEN THE DATA WILL BE THE SAME AFTER THE INSTRUCTION TESTS    *
* HAVE OPERATED ON IT. IF ONE OF THESE TESTS FAIL, THE LOOP     *
* WHICH OPERATED ON THE DATA LAST WILL BE SNAPPED.              *
*****************************************************************
         LI,8     1
         STW,8    PROTFL            TURN ON PROTECT TEST
         LCI      0
         STM,0    BOMBSAV           SAVE REGS
         DO1      TESTINST=0
         B        EDECLP+1          BYPASS INST TEST
         AND,4    =7   MASK OFF FOR BYTE AND DIRECTION
         CI,4     4                 BACKWARD?
         BCS,4    BOMBACK           YES
         B        BOMFWD            NO, FORWARD
BOMBACK  LW,1     ENDAD             BACKWARDS ADDRESSING BOMB
         SCS,1    2                 INTO BYTE ADDR
         AI,4     -4
         OR,1     4                 GET BYTE TO BE TESTED
         LW,2     STARTAD
         SCS,2    2
         OR,2     4
BOMBACK1 LCI      12                GET PATTERN
         LM,4     BOMBDAT
         LB,0     0,1
         STB,0    ORBYTE
         EOR,0    BOMBDAT
         STB,0    0,1
         BAL,0    BOMBER
         BAL,0    SHFTER
         BAL,0    BOMBER
         BAL,0    SHFTER
         BAL,0    BOMBER
         BAL,0    SHFTER
         BAL,0    BOMBER
         LB,0     ORBYTE
         STB,0    0,1
         MTB,1    0,1
         MTB,-1   0,1
         MTB,2    0,1
         MTB,-2   0,1
         MTB,4    0,1
         MTB,-4   0,1
         MTB,8    0,1
         MTB,7    0,1
         MTB,1    0,1
         MTB,0    0,1
         AI,1     -4                DECR ADDR
         CW,1     2                 DONE
         BGE      BOMBACK1          NO BRANCH
         B        BOMEXIT
BOMBSAV  RES      16
BOMBDAT  DATA X'60F8DFFF',X'1CF02000',X'F0E0BFFE',X'1FC04001'
         DATA X'7E067FFD',X'F8388002',X'3C0C03FB',X'3E700704'
         DATA X'FF180FF7',X'FFE01F08',X'FF303FEF',X'FF0EFC10'
ORBYTE   RES      1
BOMBER   STB,4    0,1               STORE BYTE PATTERN
         STB,5    0,1
         STB,6    0,1
         STB,7    0,1
         STB,8    0,1
         STB,9    0,1
         STB,10   0,1
         STB,11   0,1
         STB,12   0,1
         STB,13   0,1
         STB,14   0,1
         STB,15   0,1
         B        *0                RETURN
SHFTER   SCD,4    -4                SHIFT IN NEXT PATTERN
         SCD,6    -4
         SCD,8    -4
         SCD,10   -4
         SCD,12   -4
         SCD,14   -4
         B        *0                RETURN
BOMFWD   LW,1     STARTAD           FORWARD ADDRESSING BOMB
         SCS,1    2                 INTO BYTE ADDR
         OR,1     4                 GET WHICH BYTE
         LW,2     ENDAD             SAME WITH ENDING
         SCS,2    2
         OR,2     4
BOMFWD1  LCI      12                GET PATTERNS
         LM,4     BOMBDAT
         LB,0     0,1               GET CURRENT BYTE
         STB,0    ORBYTE            SAVE IT
         EOR,0    BOMBDAT           INVERT IT
         STB,0    0,1               PUT INVERTED IN TEST BYTE
         BAL,0    BOMBER            STORE PATTERN
         BAL,0    SHFTER            GET NEXT PATTERN
         BAL,0    BOMBER            STORE PATTERN
         BAL,0    SHFTER            ECT
         BAL,0    BOMBER
         BAL,0    SHFTER
         BAL,0    BOMBER
         LB,0     ORBYTE            GET ORIGINAL BYTE
         STB,0    0,1               PUT IT BACK
         MTB,1    0,1
         MTB,-1   0,1
         MTB,2    0,1
         MTB,-2   0,1
         MTB,4    0,1
         MTB,-4   0,1
         MTB,8    0,1
         MTB,7    0,1
         MTB,1    0,1
         MTB,0    0,1
         AI,1     4                 BUMP ADDRESS
         CW,1     2                 DONE
         BLE      BOMFWD1           NO, BRANCH
BOMEXIT  LI,5     AFTBOMB
         LI,6     WAIT+1
         LI,7     EBOMB
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
         LI,2     -1
EBOMB    BAL,0    CVA               CHK MEM
         DO       CHKSS2
         M:EXU    RDINST            READ SENSE SWITCHES
         BCS,4    SUPERC            EXIT IF SS2 SET
         FIN
         LW,1     STARTAD           STARTING ADDRESS
LMLP     LCI      8                 LOAD SORE MEM WITH
         LM,8     0,1               WITH LM/STM
         STM,8    0,1
         LW,2     1                 WITH STACK INSTRUCTIONS
         AI,2     7
         LW,3     =X'7FFF0000'
         LI,4     32767
         MSP,4    2
         LI,4     -32767
         MSP,4    2
         LI,4     8
         MSP,4    2
         LCI      7
         PLM,8    2
         PLW,15   2
         PSW,15   2
         LCI      7
         PSM,8    2
         AI,1     16
         CW,1     ENDAD             DONE?
         BL       LMLP
         LI,5     AFTLM             MESSAGE ADDR
         LI,6     LMLP-1
         LI,7     ELMLP
         LI,2     -1
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
ELMLP    BAL,0    CVA               CHECK IF DATA IS OK
         LW,1     STARTAD
ADLP     LW,2     1
         SCS,2    -1                INTO DWA
         LD,8     *1                EXERCISE DBLE WORD INST
         SD,8     0,2
         AD,8     *1
         STD,8    0,2
         LCD,8    *1
         AD,8     0,2
         AD,8     *1
         AD,8     0,2
         SD,8     *1
         SD,8     0,2
         AD,8     *1
         STD,8    0,2
         BCS,1    %+3               NEGATIVE
         LAD,8    *1
         B        %+3
         LAD,8    *1
         LCD,8    8
         STD,8    *1
         AI,1     2
         CW,1     ENDAD             DONE?
         BL       ADLP
         LI,5     AFTAD
         LI,6     ADLP-1
         LI,7     EADLP
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
         LI,2     -1
EADLP    BAL,0    CVA               CHECK DATA PATTERNS
         DO       CHKSS2
         M:EXU    RDINST            READ SENSE SWITCHES
         BCS,4    SUPERC            EXIT IF SS2 SET
         FIN
         LW,1     STARTAD           MBS INSTRUCTION TEST
MBSLP    LW,2     1
         SCS,2    2                 INTO BA
         LW,8     2                 MBS REG SET UP
         LW,9     8
         AI,8     1                 BUMP SOURCE 1 LOC
         LI,0     X'80'             128 BYTES
         STB,0    9                 INTO COUNT
         LD,10    8                 ANOTHER MBS REG
         AI,10    128               NEXT MBS 32 WORDS
         AI,11    128
         LD,12    10                ANOTHER MBS REG
         AI,12    128
         AI,13    128
         LD,14    12                ANOTHER MBS REG
         AI,14    128
         AI,15    128
         MBS,8    -1                MOVE 32 WORDS TO SELF
         MBS,10   -1                MOVE NEXT 32
         MBS,12   -1                NEXT 32
         MBS,14   -1                TOTAL OF 128 WORDS MOVED
         STB,0    9                 NEW CNT
         STB,0    11
         STB,0    13
         STB,0    15
         AI,8     384
         AI,9     384
         AI,10    384
         AI,11    384
         AI,12    384
         AI,13    384
         AI,14    384
         AI,15    384
         MBS,8    -1
         MBS,10   -1
         MBS,12   -1
         MBS,14   -1
         AI,1     256               BUMP START AD
         CW,1     ENDAD             DONE?
         BL       MBSLP             NO
         LI,5     AFTMBS            MESSAGE IF ERROR
         LI,6     MBSLP-1
         LI,7     EMBSLP
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
         LI,2     -1
EMBSLP   BAL,0    CVA               DATA CK NO I/O
         LW,1     STARTAD           TEST FAMILY OF WORD
WORDLP   LW,8     *1
         SW,8     0,1
         AW,8     *1
         STW,8    0,1
         LCW,8    *1
         AW,8     0,1
         AW,8     *1
         AW,8     0,1
         SW,8     0,1
         SW,8     *1
         AW,8     0,1
         STW,8    0,1
         BCS,1    %+3               ITS NEGATIVE
         LAW,8    0,1
         B        %+3
         LAW,8    0,1
         LCW,8    8
         STW,8    *1
         LI,8     0
         XW,8     *1
         MTW,0     *1
         BCS,3     %-3
         AWM,8    0,1
         AND,8    *1
         OR,8     0,1
         LI,9     -1
         STS,8    *1
         LS,8     0,1
         STW,8    *1
         LI,9     0
         LI,8     0
         LS,8     *1
         EOR,8    0,1
         AI,8     0
         SLD,8    -32
         AW,9     8
         SLD,8    32
         AW,8     9
         SLS,9    -64
         AW,8     9
         SLS,9    63
         AW,8     9
         SLD,8    0
         SCS,8    63
         SCS,8    1
         SCS,8    -64
         SCS,8    0
         SCD,8    63
         SCD,8    1
         SCD,8    -64
         XW,8     9
         SAD,8    32
         AW,8     9
         SAD,8    -32
         MTW,0    8
         BCR,1    %+2
         AI,8     1
         AW,8     9
         SAS,9    32
         AW,8     9
         SAS,9    -64
         AW,8     9
         SAD,8    0
         STW,8    *1
         AI,8     524287
         AI,8     -524287
         AI,8     -524288
         AI,8     524287
         AI,8     1
         STW,8    *1
         MTW,1    0,1
         MTW,-1   *1
         MTW,2    0,1
         MTW,-2   *1
         MTW,4    0,1
         MTW,-4   *1
         MTW,8    0,1
         MTW,7    *1
         MTW,1    0,1
         MTW,0    *1
         AI,1     1
         CW,1     ENDAD
         BLE      WORDLP            NOT DONE
         LI,5     AFTWORD
         LI,6     WORDLP-1
         LI,7     EWORDLP
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
         LI,2     -1
EWORDLP  BAL,0    CVA               CK DATA NO I/O
         DO       CHKSS2
         M:EXU    RDINST            READ SENSE SWITCHES
         BCS,4    SUPERC            EXIT IF SS2 SET
         FIN
         LW,1     STARTAD           EXERCISE HALFWORD INSTR
HLFLP    LI,2     1
         LH,8     *1,2
         AH,8     *1,2
         SH,8     *1,2
         STH,8    *1,2
         LCH,8    *1
         AH,8     *1
         AH,8     *1
         AH,8     *1
         SH,8     *1
         SH,8     *1
         AH,8     *1
         STH,8    *1
         MTH,0    *1,2
         BCS,1    %+3
         LAH,8    *1,2
         B        %+4
         LAH,8    *1,2
         STH,8    8
         LCH,8    8
         STH,8    *1,2
         MTH,1    *1
         MTH,-1   *1
         MTH,2    *1,2
         MTH,-2   *1,2
         MTH,4    *1
         MTH,-4   *1
         MTH,8    *1,2
         MTH,7    *1,2
         MTH,1    *1,2
         AI,1     1
         CW,1     ENDAD DONE
         BLE      HLFLP
         LI,5     AFTHW
         LI,6     HLFLP-1
         LI,7     EHLFLP
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
         LI,2     -1
EHLFLP   BAL,0    CVA               CK DATA NO I/O
         LW,1     STARTAD           EXERCISE MULTIPLY
MULLP    LI,2     1
         LI,9     1
         MW,8     0,1
         BCR,1    %+2
         AI,8     1
         AW,9     8
         MW,8     *1
         DW,8     *1
         DW,9     0,1
         AW,9     8
         MW,9     *1
         MI,8     1
         BCR,1    %+2               POS
         AI,8     1
         AW,9     8
         MI,8     -1
         BCR,1    %+2               POS
         AI,8     1
         AW,9     8
         MI,8     -1
         XW,8     9
         MI,9     0
         AW,8     9
         STW,8    0,1
         LH,9     *1,2
         MH,9     *1,2
         DH,9     *1,2
         STH,9    *1,2
         LI,8     1
         MH,8     *1
         MH,9     *1
         DH,9     *1
         STH,9    *1
         AI,1     1
         CW,1     ENDAD             DONE?
         BLE      MULLP             NOPE
         LI,5     AFTMUL
         LI,6     MULLP-1
         LI,7     EMULLP
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
         LI,2     -1
EMULLP   BAL,0    CVA               CK DATA NO I/O
         DO       CHKSS2
         M:EXU    RDINST            READ SENSE SWITCHES
         BCS,4    SUPERC            EXIT IF SS2 SET
         FIN
         LW,1     STARTAD           EXERCISE DECIMAL INSTR
DECLP    LCI      8
         LM,8     0,1               GET 8 WORDS
         STM,8    DECSV             SAVE EM
         LW,7     BOMBSAV+4         GET RANDOM NUM
         AND,7    =7                MASK IT
         LI,6     0
         LW,9     DECSV,7           GET ONE OF THE 8
         BCR,1    %+3               BR IF POS
         LCW,9    9                 NEG INV IT
         LI,6     1                 REMEMBER SIGN
         LI,5     31                LOOP
         LI,8     0
         DW,8     =10
         AI,8     X'C0'             PUT ON SIGN
         MTW,0    6                 WAS IT + OR -
         BCR,3    %+2               BR IF IT WAS +
         AI,8     X'10'             MAKE IT -
DECLP1   STB,8    *1,5              STORE IT
         LI,8     0                 CONTIN
         DW,8     =10
         AI,8     X'F0'
         BDR,5    DECLP1            LOOP ON BIN TO DEC CONV
         LI,2     1                 DONE
         PACK,0   *1,2
         DSA      21
         UNPK,0   *1,2
         PACK,0   *1,2
         DST,0    *1,2
         DL,0     *1,2
         DS,0     *1,2
         DS,0     *1,2
         DS,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DS,0     *1,2
         DSA      -7
         UNPK,0   *1
         PACK,0   *1
         DST,0    *1
         DL,0     *1
         DS,0     *1
         DS,0     *1
         DS,0     *1
         DA,0     *1
         DA,0     *1
         DA,0     *1
         DA,0     *1
         DS,0     *1
         DSA      -7
         UNPK,0   *1,2
         PACK,0   *1,2
         DST,0    *1,2
         DL,0     *1,2
         DS,0     *1,2
         DS,0     *1,2
         DS,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DS,0     *1,2
         DSA      -7
         UNPK,0   *1,2
         PACK,0   *1,2
         DST,0    *1,2
         DL,0     *1,2
         DS,0     *1,2
         DS,0     *1,2
         DS,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DA,0     *1,2
         DS,0     *1,2
         LI,2     9
         DM,8     *1,2
         BCR,3    %+2               ITS ZERO DON'T DIVIDE
         DD,8     *1,2
         STW,12   DECREM            SAVE REMAINDER
         STW,13   DECREM+1
         LI,12    0
         LI,13    0
         LI,6     0
         DA,8     DECREM
         BCR,1    %+2               BR IF POS
         LI,6     1
         LI,3     7
         LI,2     0
         LI,4     0
DECLP2   LI,12    0
         LI,13    0
         DD,4     =X'16C'
         SLS,13   -4                DUMP SIGN
         CI,13    X'10'
         BCR,4    %+3               IS IT 10 OR MORE
         AI,13    -16
         AI,13    10
         S,13     0,4               SHIFT IT TO PROPER WEIGHT
         OR,2     13
         AI,4     4                 4 MORE DIGITS
         BDR,3    DECLP2            FINISH DEC TO BIN CONV
         SLS,15   -4                DUMP SIGN
         SLS,15   28                MOVE UP FRONT
         OR,2     15
         MTW,0    6                 WAS IT POS
         BCR,3    %+2               BR IF YES
         LCW,2    2
         STW,2    DECSV,7           PUT IT BACK
         LCI      8
         LM,8     DECSV             PUT 8 WORDS BACK IN CORE
         STM,8    0,1
         AI,1     8                 BUMP ADDRESS
         CW,1     ENDAD             ARE WE DONE
         BL       DECLP             BR IF NO
         LI,2     -1                TELL CVA TO DATA CK NO I/O
         LW,3     BOMBSAV+3
         LW,4     BOMBSAV+4
         LI,5     AFTDEC
         LI,6     DECLP-1           START FOR DUMP
         LI,7     EDECLP            END FOR DUMP
EDECLP   BAL,0    CVA
         LCI      0
         LM,0     BOMBSAV           RESTORE REGS
         MTB,1    CPLOC             PASS COMPLETE?
         BCS,3    APASS             NO
         M:TYPE   (MESS,HERE1)
         M:TYPE   (MESS,CPASS)
         MTH,4    BIAS              BUMP BIAS AFTER PASS
APASS    MTB,-1   BIAS
         LI,8     0
         STW,8    PROTFL            TURN OFF PROTECT TEST
         LW,8     STARTAD
         LW,9     ENDAD
         MYSMPRT  0,8,9             RESET PROTECTION STATE
         M:TRAP   (ABORT,NAO),(IGNORE,FX)   RESET TRAP REQUEST
         DO       CHKSS2
         M:EXU    RDINST            READ SENSE SWITCHES
         BCS,4    SUPERC            EXIT IF SS2 SET
         FIN
         LCI      0
         LM,0     BOMBSAV
         B        BEGIN
PROTAD   STCF     14
         LI,15    0
         LCF      14
         BCR,1    NEXP              NOT A PROTECT TRAP
         BCS,14   NEXP              40 TRAP CC TEST
         LW,15    PROTFL
         LI,8     0
         STW,8    PROTFL            DISABLE PROTECT
         LW,8     STARTAD
         LW,9     ENDAD
         MYSMPRT  0,8,9             RESET PROTECTION STATE
NEXP     M:TRAP   (ABORT,NAO),(IGNORE,FX)    RESET TRAP REQUEST
         STW,15   PROTFL            TURN PROTECT ENABLE ON
         M:TRTN                     EXIT TRAP
STARTAD  DATA     0
ENDAD    DATA     0
REGSAVE  RES      16
MEMTOT   DATA     0
         BOUND    8
DMEMTOT  DATA     0,0
         DO1      IDSTAMP
TIME     RES      8                 TIME STAMP FOR GRANULES
RDINST   RD,0     0                 READ SENSE SWITCHES
RECCNT   DATA     0                 RECORD COUNT
TYCNN    DATA     0                 DEVICE ERR FLAG
DATAER  MYTEXTC   '**CPVEX--DATA ERROR-----'
CVAIER  MYTEXTC   '**CPVEX--CVA INSTRUCTION FAILURE***'
CPASS   MYTEXTC   'ONE PASS COMPLETED'
CPLOC    DATA     0
PROTFL   DATA     0
DECSV    RES      8
DECREM   RES      2
CLOSEFL DATA X'AAAAAAAA'
************************************************************************
*CVA    THIS IS THE DATA CHECKER. IT IS ENTERED WITH THE TYPE OF       *
*CHECK IT IS TO PERFORM IN R2. R2=0 SPIN THROUGH MEMORY UNTIL THE      *
*THE I/O IS COMPLETE, THEN CHECK FOR I/O ERRORS; R2=1 CHECK DATA
*UNTIL I/O IS COMPLETE, CHECK FOR DATA ERRORS, THEN CHECK FOR           *
*I/O ERRORS; R2=-1, CHECK FOR DATA ERRORS, NO I/O CHECK                *
*************************************************************************
CVA      LCI      0
         STM,0    REGSAVE           SAVE EM
         LW,1     STARTAD           GET STARTING ADDRESS
         LI,0     0                 ZERO OUT TOTAL
CVALP    AI,1     97                BUMP ADDR
         LI,3     -1                CVA SET UP
         LI,5     -1
         LI,7     -1
         LI,9     -1
         LI,11    -1
         LI,13    -1
         LI,15    -1
         CVA,2    -1,1
         CVA,3    -33,1
         CVA,4    -65,1
         CVA,5    -97,1
         CVA,6    -1,1
         CVA,7    -33,1
         CVA,8    -65,1
         CVA,9    -97,1
         CVA,10   -33,1
         CVA,11   -1,1
         CVA,12   -97,1
         CVA,13   -65,1
         CVA,14   -33,1
         CVA,15   -1,1
         CD,2     6                 CHECK RESULTS
         BCS,3    CVAER             DON'T MATCH
         CD,4     8
         BCS,3    CVAER
         CW,6     11
         BCS,3    CVAER
         CW,7     10
         BCS,3    CVAER
         CW,8     13
         BCS,3    CVAER
         CW,9     12
         BCS,3    CVAER
         CD,10    14
         BCS,3    CVAER
PRCVA    AW,0     5                 ADD TOTAL THESE 32 WORDS
         AW,0     4
         AW,0     3
         AW,0     2
         AI,1     31                GO TO NEXT 32 WORDS
         CW,1     ENDAD             ARE WE DONE
         BL       CVALP             NO
         MTW,0    REGSAVE+2         SHOULD WE CHECK
         BCR,3    CVAEXIT           O
         LI,4     0
         LI,5     0
         LW,1     ENDAD
         AI,1     1
         LI,2     -(17*512)
CVALP1   EQU      %
         DEF      CVALP1
         DO       IDSTAMP
         CI,2     511
         BANZ     %+2               B IF NOT PAGE BOUNDARY
         AI,2     IGNORE            SKIP IGNORE WORDS
         FIN
         AW,5     *1,2
         BNC      %+2               B IF NO CARRY
         AI,4     1
         BIR,2    CVALP1
         CW,5     DMEMTOT+1         CHECK 1 WORD CHECKSUM
         BNE      LMK02             B IF 1 WORD CHECKSUM BAD
         CD,4     DMEMTOT           CHECK 2 WORD CHECKSUM
         BE       CVAEXIT           OK THEY COMPARED
         LW,2     =' DW '           2 WORD CHECKSUM ERROR
         STW,2    DATAER+6          CHANGE DATAER MESSAGE
LMK02    EQU      %
         M:TTIMER TUN,CANCEL
         STW,8    PROTFL            TURN OFF PROTECT TEST
         LI,8     0
         XW,8     PROTFL
         XW,8     STARTAD
         XW,9     ENDAD
         MYSMPRT  0,8,9             RESET PROTECT
         XW,8     STARTAD
         XW,9     ENDAD
         M:TRAP   (ABORT,NAO),(IGNORE,FX)
         M:OPEN   M:LO,(DEVICE,'LP')
         M:OPEN   M:DO,(DEVICE,'LP')
         M:OPEN   M:LL,(DEVICE,'LP')
         M:PRINT  (MESS,HERE)
         M:PRINT  (MESS,HERE)
         M:PRINT  (MESS,DATAER)
         M:TYPE   (MESS,HERE1)
         M:TYPE   (MESS,DATAER)
         M:PRINT  (MESS,*REGSAVE+5)
         M:TYPE   (MESS,*REGSAVE+5)
BBITS    EQU      %
         DO1      RANDOM
         M:SNAP   'F:DP,DCB',(F:DP,F:DP+21)
         M:SNAP   'F:DC,DCB',(F:DC,F:DC+21)
         M:SNAP   'F:DC1DCB',(F:DC1,F:DC1+21)
         DO1      TAPE
         M:SNAP   'F:TP,DCB',(F:TP,F:TP+21)
         LW,1     STARTAD
         LI,6     0
         LW,7     ENDAD
         DO1      NORMPAT=0
         LI,3     0
FLOOP    EQU      %
         DO       IDSTAMP
         CI,1     511
         BANZ     %+2               B IF NOT PAGE BOUNDARY
         AI,1     IGNORE            SKIP IGNORE WORDS
         FIN
         BAL,0    GENPAT            GET NEXT PATTERN WORD
         EOR,2    *1
         BCR,3    FLCONT
         MTW,0    6
         BCS,3    %+2
         LW,6     1
         LW,7     1
FLCONT   AI,1     1
         CW,1     ENDAD
         BLE      FLOOP
         MTW,0    6
         BEZ      LMK07             B IF NO ERROR IN BUFFER
         STW,6    RBBST
         STW,7    RBBEND
         AI,6     -32
         AI,7     +32
         AND,6    =X'1FE00'         GO TO BEGINNING OF PAGE
         OR,7     =X'1FF'           GO TO END OF PAGE
         CW,6     STARTAD
         BG       %+2
         LW,6     STARTAD
         CW,7     ENDAD
         BL       %+2
         LW,7     ENDAD
         STW,6    BBST
         STW,7    BBEND
         M:SNAP   'BAD-BUFF',(*BBST,*BBEND)
         LW,1     STARTAD
         DO1      NORMPAT=0
         LI,3     0
DATAERLP EQU      %
         DO       IDSTAMP
         CI,1     511
         BANZ     LMK05             B IF NOT PAGE BOUNDARY
         LI,4     IGNORE
         BEZ      LMK05             B IF IGNORE = 0
         LI,2     0
         STW,2    *1                SET SKIPPED WORDS TO 0
         AI,1     1
         BDR,4    %-2
LMK05    EQU      %
         FIN
         BAL,0    GENPAT            GET NEXT PATTERN WORD
         EOR,2    *1
         STW,2    *1                PUT DIFFERENCE IN CORE
         AI,1     1
         CW,1     ENDAD             ARE WE DONE
         BLE      DATAERLP          NO
         M:SNAP   'BAD-BITS',(*RBBST,*RBBEND)
         MTW,0    RECCNT
         BLZ      LMK07             B IF NO FILES OPEN
         BAL,0    IOCOMP            WAIT FOR I/O TO COMPLETE
         BAL,0    CLRIOBUFF
         MTW,0    RECCNT            TEST RECORD COUNT
         BNEZ     %+3               B IF SECOND RECORD
         M:READ F:DC,(BUF,*IOAD),(BTD,*IOBTD),;
         (KEY,ONE),(SIZE,*BLSIZE)
         B        %+2
         M:READ F:DC,(BUF,*IOAD),(BTD,*IOBTD),;
         (KEY,TWO),(SIZE,*BLSIZE)
         BAL,0    IOCOMP            WAIT FOR I/O TO COMPLETE
         M:SNAP   'KEYED',(*BBST,*BBEND)
         M:PRECORD F:DC1,(N,1),(REV)
         BAL,0    CLRIOBUFF
         M:READ F:DC1,(BUF,*IOAD),(BTD,*IOBTD),;
          (SIZE,*BLSIZE)
         BAL,0    IOCOMP            WAIT FOR I/O TO COMPLETE
         M:SNAP   'CONSEQ',(*BBST,*BBEND)
         DO       RANDOM
         BAL,0    CLRIOBUFF
         MTW,0    RECCNT            TEST RECORD COUNT
         BNEZ     %+3               B IF SECOND RECORD
         M:READ F:DP,(BUF,*IOAD),(BTD,*IOBTD),;
         (BLOCK,0),(SIZE,*BLSIZE)
         B        %+2
         M:READ F:DP,(BUF,*IOAD),(BTD,*IOBTD),;
         (BLOCK,15),(SIZE,*BLSIZE)
         BAL,0    IOCOMP            WAIT FOR I/O TO COMPLETE
         M:SNAP   'RANDOM',(*BBST,*BBEND)
         FIN
LMK07    EQU      %
         MTW,0    REGSAVE+2         DOING INSTRUCTION TESTS?
         BCR,1    SNAPDCBS          NO BR
         M:PRINT  (MESS,MSINST)
         M:SNAP   'TEST-LP',(*REGSAVE+6,*REGSAVE+7)
SNAPDCBS EQU      %
         M:SNAP   'PROGRAM',(OPTIONS,PEND)
         M:SNAP   'MY-JIT',(*MJITS,*MJITE)
         M:SNAP   'FPT-AREA',(*FCAL,*LCAL)
         M:SNAP   'STACK',(*STKPT,*STKEND)
         B    SUPERC
ANDDATA  DATA     -1
ORDATA   DATA     0
BBST     DATA     0
BBEND    DATA     0
RBBST    DATA     0
RBBEND   DATA     0
MSINST  MYTEXTC   '**INSTRUCTION TEST LOOP FOLLOWS********'
CVAEXIT  MTW,0    REGSAVE+2         DATA CK NO I/O?
         BCS,1    CVADN             YES
         DO       TAPE
         MTW,0    BLSIZE
         BCR,3    TPCHK             NO DISK TRANS SIZE=0
         FIN
         MTB,0    F:DC+7            BUSY
         BCS,3    CVA+2             YES
         LI,0     DSKERR
         LH,1     F:DC+2
         SCS,1    -1
         AND,1    =15
         AI,1     -1
         BCS,2    DEVERR
         M:CHECK  F:DC,(ABN,DEVERR),(ERR,DEVERR)
         MTB,0    F:DC1+7           BUSY
         BCS,3    CVA+2             YES
         LI,0     DSKERR
         LH,1     F:DC1+2
         SCS,1    -1
         AND,1    =15
         AI,1     -1
         BCS,2    DEVERR
         M:CHECK  F:DC1,(ABN,DEVERR),(ERR,DEVERR)
         DO       RANDOM
         MTB,0    F:DP+7            BUSY
         BCS,3    CVA+2             YES
         LI,0     DSKERR
         LH,1     F:DP+2
         SCS,1    -1
         AND,1    =15
         AI,1     -1
         BCS,2    DEVERR
         M:CHECK  F:DP,(ABN,DEVERR),(ERR,DEVERR)
         FIN
         DO       TAPE
TPCHK    MTB,0    F:TP+7            BUSY
         BCS,3    CVA+2             YES
         LI,0     TAPERR
         LH,1     F:TP+2
         SCS,1    -1
         AND,1    =15
         AI,1     -1
         BCS,2    DEVERR
         M:CHECK  F:TP,(ABN,DEVERR),(ERR,DEVERR)
         FIN
CVADN    LCI      0
         LM,0     REGSAVE
         DO       TAPE
         MTW,0    EXTAPE            USING TAPE
         BCR,3    REQTST            NO
         MTW,0    TAPEEX            YES BUT DOES HE WANT IT
         BCR,3    TCLOSE            NO, RELEASE TAPE
         B        *0                YES HE WANTS TO EXIT
REQTST   MTW,0    TAPEEX            NO EXING BUT DOES HE WANT IT
         BCS,3    APASS+1           WELL GIVE IT TO HIM THEN
         FIN
         B        *0
CVAER    EQU      %
         DO       IDSTAMP
         B        PRCVA             DO NOT CHECK CVA
         ELSE
         MTW,0    REGSAVE+2         SHOULD WE CHECK
         BEZ      PRCVA             NO
         M:TTIMER TUN,CANCEL
         BCR,3    PRCVA             NO
         STW,8    PROTFL            TURN OFF PROTECT TEST
         LI,8     0
         XW,8     PROTFL
         XW,8     STARTAD
         XW,9     ENDAD
         MYSMPRT  0,8,9             RESET PROTECT
         XW,8     STARTAD
         XW,9     ENDAD
         M:TRAP   (ABORT,NAO),(IGNORE,FX)
         M:PRINT  (MESS,CVAIER)
         M:TYPE   (MESS,HERE1)
         M:TYPE   (MESS,CVAIER)
         M:PRINT  (MESS,*REGSAVE+5)
         B        BBITS
         FIN
SUPERC   CAL1,9   6                 SUPER CLOSE
         M:XCON   0                 NO MORE XCONS
         DO1      TAPE
    M:CLOSE F:TP,(REM)
         MTW,0    TYCNN
         BEZ      EXIT              EXIT IF NO DEV ERR
         M:WAIT   2                 SLEEP FOR 2 SEC
         M:EXU    RDINST            READ SENSE SWITCHES
         BCR,4    %-2               SLEEP IF SS2 RESET
EXIT     EQU      %
         M:EXIT
         DO       TAPE
EXTAPE   DATA     0
TAPEEX   DATA     0
         FIN
HERE     TEXTC    '*** CPVEXYY'
HERE1    DATA,1   11,X'15',' ',' '
         DATA     0
         DATA     0
MCRASH MYTEXTC  '**SOMETHING IS WRONG, SEE M:XCON IN BATCH MAN'
         DO       TAPE
MTAPEON MYTEXTC  '* TESTING TAPE INT OR BRK TO EXCLUDE IT'
MTAPEOFF MYTEXTC  '*RELEASING TAPE, BRK OR INT TO INCLUDE IT'
         FIN
IOMESS1  MYTEXTC  'WHILE WRITING DISK AND TAPE(IF TAPE SELECTED)'
         DO1      RANDOM
IOMESS2R  MYTEXTC  'AFTER READING DISC, RANDOM FILE'
IOMESS2S  MYTEXTC  'AFTER READING DISC, SEQUENTIAL FILE'
IOMESS2K  MYTEXTC  'AFTER READING DISC, KEYED FILE'
         DO       TAPE
IOMESS3  MYTEXTC  'AFTER READING TAPE, REVERSE READ'
IOMESS4  MYTEXTC  'AFTER READING TAPE, FORWARD READ'
         FIN
DSKERR MYTEXTC  'AN IRRECOVERABLE DISK ERROR HAS OCCURRED'
         DO1      TAPE
TAPERR  MYTEXTC   'AN IRRECOVERABLE TAPE ERROR HAS OCCURRED'
AFTBOMB MYTEXTC   'AFTER RUNNING MEMORY BYTE PATTERNS'
AFTLM   MYTEXTC   'AFTER MULTIPLE AND STACK INST EXERCISE'
AFTAD   MYTEXTC   'AFTER DOUBLE WORD INSTRUCTION EXERCISE ON DATA'
AFTMBS  MYTEXTC   'AFTER MOVE BYTE STRING EXERCISE ON DATA'
AFTWORD MYTEXTC   'AFTER FAMILY OF WORD EXERCISE ON DATA'
AFTHW   MYTEXTC   'AFTER FAMILY OF HALF WORD EXERCISE ON DATA'
AFTMUL  MYTEXTC   'AFTER HW AND WORD MULTIPLY EXERCISE'
AFTDEC  MYTEXTC   'AFTER DECIMAL INSTRUCTION EXERCISE'
PRINTW   DATA     0
STKPT    DATA     0
STKEND   DATA     0
IOBTD    DATA     0
IOAD     DATA     0
MJITS    DATA     0
MJITE    DATA     0
BIAS     DATA     0
DEVERR   STW,0    PRINTW
         M:TTIMER TUN,CANCEL
         STW,1    TYCNN             SET DEVICE ERR FLAG
         STW,8    PROTFL            TURN OFF PROTECT TEST
         LI,8     0
         XW,8     PROTFL
         XW,8     STARTAD
         XW,9     ENDAD
         MYSMPRT  0,8,9             RESET PROTECT
         XW,8     STARTAD
         XW,9     ENDAD
         M:TRAP   (ABORT,NAO),(IGNORE,FX)
         M:TYPE   (MESS,HERE1)
         M:OPEN   M:LO,(DEVICE,'LP')
         M:OPEN   M:DO,(DEVICE,'LP')
         M:OPEN   M:LL,(DEVICE,'LP')
         M:PRINT  (MESS,HERE)
         M:PRINT  (MESS,HERE)
         M:PRINT  (MESS,*PRINTW)
         M:TYPE   (MESS,*PRINTW)
         M:PRINT  (MESS,*REGSAVE+5)
         M:TYPE   (MESS,*REGSAVE+5)
         B        BBITS
CPVCNTL  LI,1     0
         MTW,0    PROTFL            SHOULD WE SET PROT
         BCR,3    PROTEX+1          NO BR
         LW,10    STARTAD
         LW,11    ENDAD
         LW,8     IOBTD             GET CURRENT BTD
         BCR,3    PROTEX            ITS 0 EXIT
         CI,8     2
         BCS,1    PROT1             ITS 1
         BCS,2    PROT3             ITS3
         MYSMPRT  2,10,11           SET PROTECT TO 2
         B        PROTEX
PROT1    EQU      %
         MYSMPRT  1,10,11
         B        PROTEX
PROT3    EQU      %
         MYSMPRT  3,10,11
PROTEX   M:TRAP   PROTAD,(TRAP,NAO),(IGNORE,FX)
         MTW,-1   CPVCNTR           BUMP COUNTER
         BCS,3    CNTRLAB           NO READ OF CONTROL
         LI,8     500
         STW,8    CPVCNTR           RESET COUNTER
         M:OPEN   F:CPVCTL,(ABN,CNTRLAB)
         M:READ   F:CPVCTL,(BUF,CBUFF),(SIZE,80),(WAIT),(ABN,CNTRLAB),;
         (ERR,CNTRLAB)
         LW,1     CBUFF
         CW,1     ='WAIT'
         BCR,3    CWAITR
         M:CLOSE F:CPVCTL
CNTRLAB  M:STIMER (SEC,1),CPVCNTL
         M:TRTN
CWAITR   M:CLOSE F:CPVCTL
         M:WAIT   25
         B        CPVCNTL
CBUFF    RES      80
CPVCNTR  DATA     5
BLSIZE   DATA     0
ONE      DATA     X'03000001'       A KEY
TWO      DATA     X'03000002'       AND ANOTHER
         DO       IDSTAMP
*        CLEAR PAGE BOUND+8 TO PAGE BOUND+IGNORE-1
         DEF      CLRSADD,LMK06,CLRSAEX
CLRSADD  EQU      %
         LCI      0
         STM,0    REGSAVE
         LW,2     =' LMK'
         LW,3     STARTAD
LMK06    EQU      %
         LI,1     IGNORE-8
         BLEZ     CLRSAEX           RETURN IF IGNORE <= 8
         LW,4     3
         AI,4     8
         STW,2    *4                CLEAR SEEK ADDR AREA
         AI,4     1
         BDR,1    %-2
         AI,3     512               INDEX TO NEXT PAGE
         CW,3     ENDAD
         BL       LMK06
CLRSAEX  EQU      %
         LCI      0
         LM,0     REGSAVE
         B        *0
         FIN
*        WAIT FOR I/O TO COMPLETE, IGNORE ERROR OR ABNORMAL
IOCOMP   EQU      %
         M:CHECK  F:DC,(ABN,LMK08),(ERR,LMK08)
LMK08    EQU      %
         M:CHECK  F:DC1,(ABN,LMK09),(ERR,LMK09)
LMK09    EQU      %
         DO1      RANDOM
         M:CHECK  F:DP,(ABN,LMK10),(ERR,LMK10)
LMK10    EQU      %
         B        *0
*        SUBROUTINE TO GENERATE NEXT WORD OF PATTERN IN R2
GENPAT   EQU      %
         DO       NORMPAT
         LW,2     1                 NORMAL PATTERN
         OR,2     =X'FF000000'
         AW,2     BIAS
         S,2      *REGSAVE+3
         LW,4     REGSAVE+4
         CI,4     X'40'
         BAZ      %+2
         EOR,2    =-1
         AND,2    ANDDATA
         OR,2     ORDATA
         ELSE
         LI,4     -4                BYTE PATTERN FOR MPC PROBLEM
         LB,5     3
         STB,5    3,4
         MTB,1    3
         BIR,4    %-3
         FIN
         B        *0
CLRIOBUFF EQU %
         LCI      3
         STM,5    CLRSV
         LW,6     IOAD
         SCS,6    2                 INTI BA
         AW,6     IOBTD             STARTING BYTE
         LW,7     6
         AI,7     30719             IO SIZE
         LW,5     THIS
         XW,5     THAT
         XW,5     NOTHIS
         XW,5     NOTHAT
         XW,5     THISONE
         STW,5    THIS
         CI,5     1
         BL       CLRLP
         CI,5     2
         BL       CLRLP1
         BG       CLRLP3
CLRLP2   STB,7    0,6
         STB,6    0,7
         AI,6     1
         AI,7     -1
         CW,6     7
         BLE      CLRLP2
         B        CLREX
CLRLP    STB,5    0,6
         STB,5    0,7
         AI,6     1
         AI,7     -1
         CW,6     7
         BLE      CLRLP
         B        CLREX
CLRLP1   STB,6    0,6
         STB,7    0,7
         AI,6     1
         AI,7     -1
         CW,6     7
         BLE      CLRLP1
         B        CLREX
CLRLP3   LB,5     *STARTAD
         B        CLRLP
CLREX    LCI      3
         LM,5     CLRSV
         B        *0
CLRSV RES 3
THIS   DATA  0
THAT   DATA  -1
NOTHIS   DATA     +1
NOTHAT   DATA     +2
THISONE  DATA     +3
LCAL     M:WAIT   4321
PEND     END      START
!ASSIGN M:BI,(FILE,CPVEXBOIO)
!LOAD (BI),(LMN,CPVEXIO),(PERM),(TSS,256)
!ASSIGN M:BO,(FILE,LCEXBO)
!AP      SD,SI,BO,LO
*PURPOSE: TO SCAN ALL OF REAL MEMORY, THROUGH EACH
*                 VIRTUAL PAGE AVAILABLE TO THE USER.
*METHOD:  THE REAL ADDRESSES ARE SET INTO EACH AVAIL-
*         ABLE PAGE BY THE CVM CAL. CVA'S AND LOAD MULTIPLES
*         ARE THEN USED TO CREATED MEMORY INTERFERRENCE
*OUTPUTS: 'MEMORY SCANNER HERE'
*                 START OF PROGRAM
*         'MEMORY SCANNER ONE PASS COMPLETE'
*                 ALL VIRTUAL USER PAGES HAVE BEEN USED
*                 TO SCAN MEMORY
*THIS PROGRAM REQUIRES AT LEAST A '80' PRIVLEDGE TO RUN.
         SYSTEM   BPM
         SYSTEM   SIG7P
F:CPVCTL DSECT    1
F:CPVCTL M:DCB (FILE,'CPVEXCONTROL'),(CONSEC),(SEQUEN),;
         (IN),(RECL,80),(TRIES,10)
         CSECT    0
START    EQU      %
   M:TYPE (MESS,COREXHE)
     M:STIMER    (SEC,1),CPVCNTL
         M:TRAP   (IGNORE,FX)
         M:GP     1
         LW,1     9
         STW,1    GFPAGE
         STW,1    STPAGE
         M:FP     1
CVAL1    LI,2     0
         LI,3     7
CVAL2    STW,1    GPAGE+1
         STW,1    GFPAGE
         STW,2    GPAGE
         STB,3    GPAGE
         CAL1,8   GPAGE
         BCS,8    DWAIT
         DO       2
         LI,9     -1
         LOCAL    CVAST
CVAST    EQU      %
         DO1      16
         CVA,8    32*ABSVAL(%-CVAST),1
         LCI      8
         LOCAL    LMST
LMST     EQU      %
         DO1      64
         LM,8     8*ABSVAL(%-LMST),1
         FIN
         M:GVP    *GFPAGE
         M:FVP    *GFPAGE
         AI,2     512
         M:EXU    RDINST            READ SENSE SWITCHES
         BCS,4    EXIT              EXIT IF SS2 SET
         B        CVAL2
DWAIT    M:WAIT   0
         AI,1     512
         CI,1     X'20000'
         BL       %+2
         LW,1     STPAGE
         MTB,1    PASSER
         BCS,3    %+2
         M:TYPE   (MESS,MSPASS)
         B        CVAL1
STPAGE   DATA     0
COREXHE TEXTC '**MEMORY SCANNER HERE***'
MSPASS   TEXTC    'MEMORY SCANNER- ONE PASS'
GPAGE    DATA     0
         DATA     0
GFPAGE   DATA     0
PASSER   DATA     0
CPVCNTL  LI,1     0
         M:OPEN   F:CPVCTL,(ABN,CNTRLAB)
         M:READ   F:CPVCTL,(BUF,CBUFF),(SIZE,80),(WAIT),(ABN,CNTRLAB),;
         (ERR,CNTRLAB)
         LW,1     CBUFF
         CW,1     ='WAIT'
         BCR,3    CWAITR
         M:CLOSE F:CPVCTL
CNTRLAB  M:STIMER (SEC,1),CPVCNTL
         M:TRTN
CWAITR   M:CLOSE F:CPVCTL
         M:WAIT   25
         B        CPVCNTL
CBUFF    RES      80
RDINST   RD,0     0                 INST TO READ SENSE SWITCHES
EXIT     M:EXIT
         END      START
!ASSIGN M:BI,(FILE,LCEXBO)
!LOAD (BI),(LMN,LCEX),(PERM)
!ASSIGN M:BO,(FILE,AGJOBBO)
!AP      SD,SI,LO,BO
*GHOST INITIATOR
*PURPOSE- TO AUTOMATICALLY INITIATE LOAD MODULES WHICH ARE
*        IDENTIFIED BY RECORDS IN AN EDIT CREATED FILE,WHICH
*        HAS THE LM NAMES, AND THE LM'S ARE IN THE :SYS
*        ACCOUNT. THE POINTER FILE NAME MUST BE 'AUTOG'
*        IN THE ACCOUNT UNDER WHICH THIS PROGRAM IS RUNNING.
*        THE POINTER FILE 'AUTOG' MUST HAVE THE FOLLOWING
*        RECORD FORMATS:( %FILENAME COMMENT......)
*                 1.000 %FILENAMEX THIS GHOST BANGS MEMORY
*                 2.000 %FILENAMEY THIS GHOST USES NOWAIT IO
*                 3.000 %FILENAMEZ THIS GHOST TESTS SYMBIONT
*                 4.000  BECAUSE COL 1 IS NOT %, INITIATOR TERMINATES
*
*PREREQUISITES-THIS PROGRAM AND THE PROGRAMS POINTED TO BY
*        'AUTOG' MUST BE IN LOAD MODULE FORMAT, THE GHOST JOBS
*        WHICH WILL BE INITIATED MUST BE IN :SYS
*        THIS PROGRAM AND THE 'AUTOG' FILE CAN BE IN
*        ANY ACCOUNT THAT HAS SUFFICIENT PRIVLEDGE TO INITIATE
*        GHOSTS AND IN THIS MODE CAN BE RUN AS A BATCH OR
*        ONLINE JOB. THIS PROGRAM AND 'AUTOG' CAN
*        ALSO BE IN :SYS ACCOUNT WHICH WILL ALLOW THIS
*        PROGRAM TO BE GJOB'D FROM THE OPERATOR CONSOLE.
*OUTPUTS-THIS PROGRAM WILL OUTPUT TO M:LL THE FOLLOWING
*        STATEMENTS:
*                 AUTO GHOST INITIATER HERE USING FILE 'AUTOG'
*                 (MEANS PROGRAM HAS STARTED)
*                 FOLLOWING FILE INITIATED
*                 (MEANS CC1,2 RESET AFTER INITIATE CAL)
*                 FOLLOWING FILE FAILED TO INITIATE
*                 (MEANS CC1 OR 2 SET AFTER GHOST INITIATE CAL)
*                 ALL DONE BYE
*                 (MEANS EOF OR NOT % IN COL1 OF RECORD ENCOUNTERED)
         SYSTEM   BPM
         SYSTEM   SIG9P
         SYSTEM   RTPROCS
F:GFILE  DSECT    1
F:GFILE  M:DCB    (FILE,'AUTOG'),(CONSEC),(SEQUEN),(IN);
                  ,(RECL,80),(TRIES,10)
         CSECT    0
START    M:PRINT  (MESS,MSINIT)
         M:TYPE   (MESS,MSINIT)
         M:SYS
START1   EQU      %
         M:EXU    RDINST            READ SENSE SWITCHES
         BCS,4    EXIT              EXIT IF SS2 SET
         LI,1     240
         LI,2     X'40'
         STB,2    STAGE,1
         BDR,1    %-1               CLEAR INPUT AREA
         M:READ   F:GFILE,(BUF,INBUF),(SIZE,80),(WAIT),(ABN,EXIT)
         LB,0     INBUF             GET FIRST BYTE
         CI,0     '%'               IS IT %?
         BNE      EXIT              NO
         LI,6     F:GFILE           GET DCB ADDR
         SCS,6    1
         LH,6     4,6               GET # BYTES TX'D
         SCS,6    -1
         STB,6    OUTMESS
         LI,2     1
MVLP     LB,3     INBUF,2           GET LMN FILE NAME FROM REC
         STB,3    STAGE,2
         STB,3    OUTMESS,2
         CI,3     ' '               IS IT A BLANK
         BE       GOTFN             BLANK FOUND FILE NAME
         AI,2     1                 NO
         BDR,6    MVLP              CONTINUE LOOKING
         B        EXIT              NEVER FOUND FILE NAME
GOTFN    STB,2    STAGE             PUT # BYTES OF FILE NAME IN FPT
         MTB,-1   STAGE             BUMP IT BACK ONE
MSLOOP   AI,2     1
         LB,3     INBUF,2
         STB,3    OUTMESS,2
         BDR,6    MSLOOP            FINISH MOVING COMMENTS FOR REPORT
         M:WAIT   1
         NOP
         M:GJOB   (LMN,STAGE),(PRI,X'FE'),STATUS
         BCR,12   OK                IT MADE IT
         M:EXU    WDINST            CLEAR INHIBITS
         M:PRINT  (MESS,MSBAD)      NO, IT DIN'T
         M:PRINT  (MESS,OUTMESS)
         B        START1            GO BACK AND START AGAIN
OK       EQU      %
         M:EXU    WDINST            CLEAR INHIBITS
         M:PRINT  (MESS,MSOK)
         M:PRINT  (MESS,OUTMESS)
         B        START1            GO BACK AND START AGAIN
EXIT     M:PRINT  (MESS,MSDONE)
         M:EXIT
RDINST   RD,0     0
WDINST   WD,0     X'27'             TURN OFF INHIBITS
MSINIT   TEXTC    'AUTOGHOST HERE, USING FILE AUTOG.'
MSBAD    TEXTC    '*******THIS FILE WILL NOT INITIATE***'
MSOK     TEXTC    '**FOLLOWING FILE INITIATED**'
MSDONE   TEXTC    '**********ALL DONE,BYE**********'
STAGE    RES      20
INBUF    RES      20
OUTMESS  RES      20
         END      START
!ASSIGN M:BI,(FILE,AGJOBBO)
!LOAD (BI),(LMN,AGJOB),(PERM),(EF,(MONSTK,:SYS)),(PRIV,J)
!PCL
 COPY AGJOB OVER AGJOB
 COPY REG1 OVER REG1
 COPY TOGGLE OVER TOGGLE
COPY CPVEXIO OVER CPVXI01
COPY CPVEXIO OVER CPVXI02
COPY CPVEXIO OVER CPVXI03
COPY CPVEXIO OVER CPVXI04
COPY CPVEXIO OVER CPVXI05
COPY CPVEXIO OVER CPVXI06
COPY CPVEXIO OVER CPVXI07
COPY CPVEXIO OVER CPVXI08
COPY CPVEXIO OVER CPVXI09
COPY CPVEXIO OVER CPVXI10
COPY CPVEXN  OVER CPVXN01
COPY CPVEXN  OVER CPVXN02
COPY CPVEXN  OVER CPVXN03
COPY CPVEXN  OVER CPVXN04
COPY CPVEXN  OVER CPVXN05
COPY CPVEXN  OVER CPVXN06
COPY CPVEXN  OVER CPVXN07
COPY CPVEXN  OVER CPVXN08
COPY CPVEXN  OVER CPVXN09
COPY CPVEXN  OVER CPVXN10
COPY CPVEXN  OVER CPVXN11
COPY CPVEXN  OVER CPVXN12
COPY CPVEXN  OVER CPVXN13
COPY CPVEXN  OVER CPVXN14
COPY CPVEXN  OVER CPVXN15
COPY CPVEXN  OVER CPVXN16
COPY CPVEXN  OVER CPVXN17
COPY CPVEXN  OVER CPVXN18
COPY CPVEXN  OVER CPVXN19
COPY CPVEXN  OVER CPVXN20
COPY CPVEXN  OVER CPVXN21
COPY CPVEXN  OVER CPVXN22
COPY CPVEXN  OVER CPVXN23
COPY CPVEXN  OVER CPVXN24
COPY CPVEXN  OVER CPVXN25
COPY CPVEXN  OVER CPVXN26
COPY CPVEXN  OVER CPVXN27
COPY CPVEXN  OVER CPVXN28
COPY CPVEXN  OVER CPVXN29
COPY CPVEXN  OVER CPVXN30
COPY CPVEXN  OVER CPVXN31
COPY CPVEXN  OVER CPVXN32
COPY CPVEXN  OVER CPVXN33
COPY CPVEXN  OVER CPVXN34
COPY CPVEXN  OVER CPVXN35
COPY CPVEXN  OVER CPVXN36
COPY CPVEXN  OVER CPVXN37
COPY CPVEXN  OVER CPVXN38
COPY CPVEXN  OVER CPVXN39
COPY CPVEXN  OVER CPVXN40
 COPY LCEX OVER LCEX
 COPY LCEX OVER LCEX1
 COPY CR(BCD) OVER AUTOG(LN)
%CPVXI01  AN I/O TESTER WITH RANDOM DATA
%LCEX A MEMORY SCANNER WICH LOOKS AT MEMORY THRU EACH MAP PAGE
%CPVXI02  SAME AS CPVEX1 BUT DIFFERENT DATA CREATED RANDOMLY
%CPVXI03  SAME BUT DIFFERENT DATA
%CPVXI04  RAN EX
%CPVXI05  DITTO
%CPVXI06  DITTO
%CPVXI07  DITTO
%CPVXI08  DITTO
%CPVXI09  DITTO
%CPVXI10  DITTO
%LCEX1 ANOTHER MEMORY SCANNER
%CPVXN01  AN I/O, CPU TESTER WITH RANDOM DATA
%CPVXN02  DITTO
%CPVXN03  DITTO
%CPVXN04  DITTO
%CPVXN05  DITTO
%CPVXN06  DITTO
%CPVXN07  DITTO
%CPVXN08  DITTO
%CPVXN09  DITTO
%CPVXN10  DITTO
%CPVXN11  DITTO
%CPVXN12  DITTO
%CPVXN13  DITTO
%CPVXN14  DITTO
%CPVXN15  DITTO
%CPVXN16  DITTO
%CPVXN17  DITTO
%CPVXN18  DITTO
%CPVXN19  DITTO
%CPVXN20  DITTO
%CPVXN21  DITTO
%CPVXN22  DITTO
%CPVXN23  DITTO
%CPVXN24  DITTO
%CPVXN25  DITTO
%CPVXN26  DITTO
%CPVXN27  DITTO
%CPVXN28  DITTO
%CPVXN29  DITTO
%CPVXN30  DITTO
%CPVXN31  DITTO
%CPVXN32  DITTO
%CPVXN33  DITTO
%CPVXN34  DITTO
%CPVXN35  DITTO
%CPVXN36  DITTO
%CPVXN37  DITTO
%CPVXN38  DITTO
%CPVXN39  DITTO
%CPVXN40  DITTO
!MESSAGE EXERCISER ASSEMBLY COMPLETE
