*DECK,CCM 
***  CCM - CCC MEMORY TEST
***  1.0  IDENTIFICATION
**
*    1.1  PROGRAM NAME
* 
*         CCM - CCC MEMORY TEST 
* 
*    1.2  AUTHORS 
* 
*         C.J. COPPICUS        DATE JANUARY 7, 1981 
* 
*    1.3  AUTHORS OF MODIFICATIONS
* 
*         B. DANESHVAR         DATE NOVEMBER 26, 1984 
*         D. H. WIESE          DATE DECEMBER 15, 1984 
* 
*      01/30/85              CHANGES TO CORRECT MISCELLANEOUS DOC-
*                            UMENTATION ERRORS AND ADD  ADDITIONAL
*                            EXPLANATIONS AS DEEMED NECESSARY.
*    1.4  COPYRIGHT 
* 
*              COPYRIGHT CONTROL DATA CORPORATION. 1984.
*                      ALL RIGHTS RESERVED
* 
*         CONTAINED HEREIN ARE SOFTWARE PRODUCTS COPYRIGHTED BY 
*         CONTROL DATA CORPORATION.  REPRODUCTION WITHOUT PERMISSION
*         IS PROHIBITED.  THE COPYRIGHT NOTICE MUST APPEAR IN ALL 
*         AUTHORIZED COMPLETE OR PARTIAL COPIES.
* 
*** 2.0   INTRODUCTION
**
*   2.1   OVERVIEW
* 
*         CCM IS A MEMORY TEST FOR THE CYBER CHANNEL COUPLER (CCC). 
*         THE CCM MEMORY TEST IS WRITTEN IN LOW LEVEL MALET.
*         THE  TEST WILL RESIDE IN A PERIPHERAL PROCESSOR (PP) AND TEST 
*         THE MEMORY IN THE CCC.  THE TEST DOES NOT USE  THE  PROCESSOR 
*         IN  THE  CCC  IN  WHICH  THE  MEMORY  IS  BEING  TESTED.  THE 
*         PROCESSOR IS PLACED IN A STOPPED CONDITION. 
* 
*   2.2   CHARACTERISTICS 
* 
*         1.  PROGRAM NAME......................................CCM 
*         2.  TEST/DIAG/UTILITY/SYSTEM.........................TEST 
*         3.  VIRTUAL CODE/MICROCODE/PP CODE/OTHER............MALET 
*         4.  RUN TIME (DEFAULT)........................... 45 SEC. 
*         5.  RUN TIME/QUICK LOOK (DEFAULT)....................N/A
*         6.  LEVEL OF ISOLATION..........................DETECTION 
*         7.  ON-LINE/OFF-LINE/BOTH............................BOTH 
*         8.  ON-LINE SYSTEM....................................NOS 
*         9.  OFF-LINE SYSTEM...................................MSL 
*         10. ASSEMBLY LANGUAGE...............................MALET 
*         11. SOURCE CODE MAINTENANCE........................UPDATE 
* 
*   2.3   FEATURES
* 
*         1.  WHEN TESTING THE MEMORY IN CCC, THE TEST WILL RESIDE IN A 
*             CYBER  170  PP  AND  TEST  THE  CCC  THROUGH  THE  DEVICE 
*             INTERFACE  CONNECTED  TO  THE  CHANNEL  ON  THE CYBER 170 
*             MAINFRAME.
*         2.  CCM SUPPORTS DEVICE CODES FOR:  
*             895 DISK SYSTEM 
*             MASSTOR STORAGE DEVICE
*             NON-IMPACT PRINTER (NIP)
* 
*   2.4   HARDWARE REQUIREMENTS 
* 
*         THIS TEST REQUIRES: 
*         1- CYBER 170/180
*         2- ONE CCC
*         3- ONE 844 OR 885 FOR LOADING THE TEST
* 
*   2.5   RESTRICTIONS
* 
*         1.  THE TEST REQUIRES THAT CONTROLWARE BE LOADED INTO THE CCC 
*             PRIOR TO EXECUTION.  THE CONTROLWARE WILL HOWEVER, BE DE- 
*             STOYED IN THE PROCESS OF RUNNING THE TEST.   IT WILL  NOT 
*             BE POSSIBLE TO REPEAT THE TEST WITHOUT RELOADING THE CON- 
*             WARE. THIS CAN BE DONE ON-LINE WITH THE  LOADBC  COMMAND, 
*             OR OFF-LINE WITH THE CW,XXX,CH , MSL COMMAND. 
*             CCM MODULE 30 AUTOLOADS CONTROLWARE TO THE CYBER CHANNEL
*             COUPLER FROM THE MALET SCRATCH FILE.
* 
*         2.  THE DATA PATH FROM THE CYBER 170  MAINFRAME  TO  THE  CCC 
*             MEMORY BEING TESTED IS ASSUMED TO BE WORKING. 
* 
*** 3.0   APPLICABLE DOCUMENTS
**
*         CCC ENGINEERING SPECIFICATION                       53542416
*         CCC CONTROLWARE SPEC.                               53371093
*         MALET REFERENCE MANUAL                              60456020
*         CML REFERENCE MANUAL                                60455980
*         MSL 150 REFERENCE MANUAL                            60456530
*         MALET CODING STANDARD                               ARH5000 
* 
*** 4.0   DESIGN OVERVIEW 
**
*   4.1   MODULES OVERVIEW
* 
*         CCM IS DIVIDED INTO THREE BASIC SECTIONS.  THE FIRST PART 
*         IS FOR PARAMETER CHECKING (MODULE CLM00).  THE SECOND TESTS 
*         THE DMA READ AND WRITE PATHS TO MEMORY BY UTILIZING THE PRE-
*         VIOUSLY LOADED CONTROLWARE.  THE THIRD PART TESTS THE CCC 
*         MEMORY BY PERFORMING MAINTENANCE READS AND WRITES USING 
*         SIX DIFFERANT PATTERNS. 
* 
*         IF THE CCC IS TO BE TESTED, CALLING CCM WILL CAUSE CLM00
*         TO EXECUTE FIRST, CHECKING THE PARAMETER ENTRIES. 
*                                             ACCESS          RUN 
*         MODULE       DESCRIPTION            LEVEL           TIME
*         ------       -----------            ------          ----
*         CCM00        PARAMETER VALIDATION     10           2 SEC
* 
*         TEST MODULE CCM01 VERIFIES THE DMA READ AND WRITE PATHS TO
*         MEMORY BY PASSING DATA TO AND FROM THE CCC MEMORY BY UTIL-
*         IZING THE CONTROLWARE FUNCTIONS.
* 
*         MODULE       DESCRIPTION            LEVEL           TIME
*         ------       -----------            ------          ----
*         CCM01        DMA READ AND WRITE TEST  10           2 SEC
* 
*         THE REMAINING MODULES OF THE TEST WILL PERFORM A TEST OF
*         THE CCC MEMORY BY PERFORMING MAINTENANCE READS AND WRITES 
*         USING THE PATTERNS LISTED BELOW.
* 
*         MODULE       DESCRIPTION            LEVEL           TIME
*         ------       -----------            ------          ----
*         CCM02        ONES AND ZEROS TEST      10           4 SEC
*         CCM03        ALTERNATING ONES TEST    10           4 SEC
*         CCM04        SLIDING ZERO TEST        10           9 SEC
*         CCM05        SLIDING ONE TEST         10           9 SEC
*         CCM06        ADDRESSING TEST          10           4 SEC
*         CCM07        RANDOM DATA TEST         10          16 SEC
* 
*         MODULE CCM30 IS A STANDALONE MODULE AND MUST BE EXECUTED
*         AS SUCH VIA A MALET RUN CCM(30) DIRECTIVE.
*         CCM MODULE 30 AUTOLOADS CONTROLWARE TO THE CYBER CHANNEL
*         COUPLER FROM THE MALET SCRATCH FILE TESTS FOR GENERAL 
*         STATUS EQUAL ZERO AND NO CHANNEL PARITY ERROR STATUS FROM 
*         THE CCC.
* 
*         MODULE       DESCRIPTION            LEVEL           TIME
*         ------       -----------            ------          ----
*         CCM30        AUTOLOAD CONTROLWARE TO  10           7 SEC
*                      CYBER CHANNEL COUPLER
* 
*         MODULE CCM31 IS A STANDALONE MODULE AND MUST BE EXECUTED
*         AS SUCH VIA A MALET RUN CCM(31) DIRECTIVE.
*         CCM MODULE 31 READS CCC MEMORY AND PRINTS THE DATA. 
* 
*         MODULE       DESCRIPTION            LEVEL           TIME
*         ------       -----------            ------          ----
*         CCM31        CCC MEMORY DUMP          10           - SEC
* 
*    4.2  EXECUTION SEQUENCE
* 
*         CCM MODULES ARE INDEPENDENT AND EXECUTION OF ONE MODULE 
*         IS NOT DEPENDENT ON EXECUTION OF ANOTHER.  CCC MEMORY IS
*         BEING TESTED BY FIRST WRITING IT WITH ONES AND ZEROS, AND 
*         THEN WITH RANDOM DATA.
* 
*         BY DEFAULT, ALL OF THE MODULES WILL EXECUTE IN ORDER.  IT 
*         SHOULD BE NOTED THAT MODULE CCM01 TESTS THE CONTROLWARE 
*         DMA READ AND WRITE FUNCTIONS.  THE CONTROLWARE MUST BE
*         LOADED FOR CCM01 TO RUN.  MODULES CCM02 THROUGH CCM07 WILL
*         WRITE OVER THE CONTROLWARE, SO SETTING REPEAT TEST WILL 
*         NOT WORK. 
* 
*         IT IS POSSIBLE TO REPEAT MODULE CCM01, AS LONG AS NO OTHER
*         MODULES HAVE BEEN RUN.
* 
*** 5.0   PARAMETERS
**
*   5.1   PARAMETERS REGISTER DEFINITIONS 
* 
*         THE FOLLOWING HEX PARAMETERS ARE USED BY CCM- 
* 
*         P0 - NOT USED.
* 
*         P1 - 000X - MEMORY SIZE OF THE CCC BEING TESTED.
*              0000 OR 0001 = 16K. (DEFAULT= 0000)
* 
*         P2 - P9 NOT USED. 
* 
*    5.2  PARAMETER REGISTER USAGE
* 
*         MODULE       P0  P1  P2  P3  P4  P5  P6  P7  P8  P9 
* 
*         CCM00            X
*         CCM01 
*         CCM02            X
*         CCM03            X
*         CCM04            X
*         CCM05            X
*         CCM06            X
*         CCM07            X
*         CCM30 
*         CCM31                              X    X    X    X 
* 
***   6.0 PROGRAM USE 
**
*         1.  EACH OF THE MODULES IN THE CCM TEST PROVIDE THE USER WITH 
*             THE  ABILITY  TO  REPEAT  CONDITIONS  WHICH  WILL  REPEAT 
*             WRITING AND READING THE DATA PATTERN. 
* 
*         2.  EACH OF THE MODULES IN THE CCM TEST PROVIDE THE USER WITH 
*             THE ABILITY TO REPEAT THE MODULE. 
* 
*         3.  THE DATA  ERROR DISPLAY WILL DISPLAY UP TO EIGHT (8) DATA 
*             ERRORS AT ONE ERROR STOP.  AT THE END OF EACH  CONDITION, 
*             ANY UNREPORTED DATA ERRORS WILL BE REPORTED.
* 
*         4.  ONE PARITY ERROR WILL BE REPORTED FOR EACH 40 HEXADECIMAL 
*             CCC MEMORY ADDRESSES READ.
* 
*         5.  THE PROCESSOR IN THE CCC BEING TESTED DOES NOT HAVE TO BE 
*             IN  A  WORKING  STATE  IN ORDER TO TEST THE MEMORY IN THE 
*             CCC.
* 
***   7.0 MESSAGES
**
*     7.1 NORMAL MESSAGES 
* 
*         1.  CCMNN MODULE NAME 
*             THIS MESSAGE INDICATES THAT MODULE NN IS NOW RUNNING. 
* 
*         CCM30 - CCC AUTOLOADER
* 
*         AUTOLOADING DD BLOCKS OF MHHHH TO CCC 
*               - DD IS THE NUMBER OF DECIMAL 500B PP WORD BLOCKS.
*               - MHHHH IS THE NAME OF THE CONTROLWARE. 
* 
*         MHHHH REV RR CONTROLWARE AUTOLOADED TO CCC
*               - MHHHH IS THE NAME OF THE CONTROLWARE. 
*               - RR IS THE CONTROLWARE REVISION LEVEL. 
* 
*         CCM30 READING DD BLOCKS OF MHHHH REV RR 
*               - DD IS THE NUMBER OF DECIMAL 500B PP WORD BLOCKS.
*               - MHHHH IS THE NAME OF THE CONTROLWARE. 
*               - RR IS THE CONTROLWARE REVISION LEVEL. 
* 
*         CCM31-CCC MEMORY DUMP ROUTINE 
*               WHERE YYYY IS THE HEX VALUE OF THE ADDRESS. 
*               WHERE XXXX IS THE HEX DATA FROM CCC MEMORY. 
* 
*                YYYY  YYYY  YYYY  YYYY 
*                ----  ----  ----  ---- 
*                XXXX  XXXX  XXXX  XXXX 
* 
*     7.2  ERROR FORMAT 
* 
*         THE FOLLOWING DISPLAY FORMAT IS USED BY CCM TO REPORT PRODUCT 
*         OVERLAY ERRORS WHEN TESTING THE MEMORY IN CCC TO THE USER.
* 
*         00  CCM - CCC MEMORY TEST 
*         01  CCMNN - (M----------------------------T)
*         02
*         03  CCMNN ABORTED ON (C-------------------M)
*         04   LAST FUNCTION = FFFFB  WT = WWWWB
*         05
*         06  CCMNN EXXXXB LYYYB  (E----------------M)
*         07
* 
*         WHERE-
*         NN    = MODULE NUMBER.
*         YYY   = THE EA REGISTER WHEN THE ERROR OCCURED. 
*         C---M = COMMAND ON WHICH THE ABORT OCCURRED.
*         E---M = VERBAL DESCRIPTION OF THE ERROR CODE. 
*         FFFF  = LAST FUNCTION ISSUED TO THE CCC.
*         M---T = MODULE TITLE
*         WWWW  = WORDS TRANSFERED DURING LAST DATA TRANSFER. 
*         XXXX  = THE ERROR CODE IN OCTAL.
* 
* 
*         THE  FOLLOWING DISPLAY FORMAT IS USED BY CCM TO REPORT
*         DMA READ/WRITE ERRORS TO THE USER.
* 
*         00  CCM01 - DMA READ/WRITE TEST 
*         01
*         02  CCM01 - CONTROLWARE NOT RUNNING 
*         03  CCM01 (Y---------------------Y) 
*         04  CCM01 STATUS ERROR = *OCTB
*         05  CCM01 DATA ERROR   ACT   EXP  WORD (OCT)
*         06                    BBBB  CCCC  DDDD
*         07                    BBBB  CCCC  DDDD
*          -                    BBBB  CCCC  DDDD
*          -                    BBBB  CCCC  DDDD
*         25                    BBBB  CCCC  DDDD
*         26                    BBBB  CCCC  DDDD
* 
*         WHERE-
*         BBBB  = THE EXPECTED CONTENTS OF THE MEMORY LOCATION. 
*         CCCC  = THE ACTUAL CONTENTS OF THE MEMORY LOCATION. 
*         DDDD  = THE FAILING WORD BUFFER LOCATION
*         Y--Y  = THE OPERATION BEING PERFORMED.
* 
* 
*         THE  FOLLOWING DISPLAY FORMAT IS USED BY CCM TO REPORT MEMORY 
*         DATA ERRORS TO THE USER.
* 
*         00  CCM - CCC MEMORY TEST 
*         01  CCMNN - (M----------------------------T)
*         02
*         03  CCMNN ABORTED ON (C-------------------M)
*         04  CCMNN EXXXXB LYYYB  (E----------------M)
*         05  ADRS   EXP.   ACT.   DIF. (HEX. VALUES) 
*         06  AAAA   BBBB   CCCC   DDDD 
*         07  AAAA   BBBB   CCCC   DDDD 
*         10  AAAA   BBBB   CCCC   DDDD 
*         11  AAAA   BBBB   CCCC   DDDD 
*         12  AAAA   BBBB   CCCC   DDDD 
*         13  AAAA   BBBB   CCCC   DDDD 
*         14  AAAA   BBBB   CCCC   DDDD 
*         15  AAAA   BBBB   CCCC   DDDD 
*         16
* 
* 
*         WHERE-
*         NN    = MODULE NUMBER.
*         YYY   = THE EA REGISTER WHEN THE ERROR OCCURED. 
*         AAAA  = THE FAILING ADDRESS IN THE CCC MEMORY.
*         BBBB  = THE EXPECTED CONTENTS OF THE MEMORY LOCATION. 
*         CCCC  = THE ACTUAL CONTENTS OF THE MEMORY LOCATION. 
*         C---M = COMMAND ON WHICH THE ABORT OCCURRED.
*         DDDD  = THE LOGICAL DIFFERENCE OF BBBB AND CCCC.
*         E---M = VERBAL DESCRIPTION OF THE ERROR CODE. 
*         M---T = MODULE TITLE
*         XXXX  = THE ERROR CODE IN OCTAL.
* 
*         THE FOLLOWING  DISPLAY  FORMAT  IS  USED  BY  CCM  TO  REPORT 
*         PARAMETER ENTRY ERRORS TO THE USER. 
* 
*         00  CCM - CCC MEMORY TEST 
*         01  CCMNN - (M----------------------------T)
*         02
*         03  CCMNN SUSPECTED PARAMETER ERROR  (OCTAL)
*         04  (E----------------D)
*         05  P0 - P4  PPPP PPPP PPPP PPPP PPPP 
*         06  P5 - P9  PPPP PPPP PPPP PPPP PPPP 
*         07  PARAMETERS DESCRIBED IN MODULE CCM99
*         10
* 
*         WHERE-
*         NN    = MODULE NUMBER.
*         E---D = DISCRIPTION OF THE ERROR. 
*         M---T = MODULE TITLE
*         PPPP = CONTENTS OF THE PARAMETER WORD.
* 
*     7.3 ERROR MESSAGES
* 
*         ERROR CODES          ERROR MESSAGE
*         ----------           ------------ 
*         0002                 CCMNN E=XXXX L=YYY CCC MEMORY
*                              DATA ERROR 
* 
*         0005                 CHANNEL PARITY ERROR 
* 
*         0006                 ABNORMAL GEN STAT GS=AAAA EXP=EEEE 
*                              WHERE AAAA IS THE GENERAL STATUS READ
*                              AND EEEE IS THE GENERAL STATUS EXPECTED. 
* 
*         0007                 SCRATCH FILE EMPTY OR MISSING
* 
*     7.4 DAYFILE MESSAGES
* 
*         1.  CCMNN ERROR(S) = XXXXD
*             NN   = THE NUMBER OF THE MODULE IN CCM. 
*             XXXX = THE NUMBER OF ERRORS DETECTED BY THE MODULE. 
*             THIS DAYFILE MESSAGE  INDICATES  THAT  MODULE NN DETECTED 
*             XXXX  DECIMAL  NUMBER  OF  ERRORS  BY  THE  TIME  IT  HAD 
*             COMPLETED EXECUTION.
* 
***  8.0  GLOSSARY
**
*    8.1  ABBREVIATIONS 
* 
*         CML       - CONCURRENT MAINTENANCE LIBRARY
*         CVL       - CUSTOMER ENGINEERING VALIDATION 
*         ERS       - EXTERNAL REFERENCE SPECIFICATION
*         CCM       - CYBER CHANNEL COUPLER MEMORY TEST 
*         CCC       - CYBER CHANNEL COUPLER 
*         MALET     - MAINTENANCE APPLICATION LANGUAGE FOR EQUIPMENT
*                     TESTING 
*         NAD       - NETWORK ACCESS DEVICE 
*         NO.       - NUMBER
*         PP        - PERIPHERAL PROCESSOR
*         PUB.      - PUBLICATION 
*         SPEC.     - SPECIFICATION 
*         RAM.      - RELIABILITY, AVAILABILITY AND MAINTAINABILITY 
*         NDM       - NAD RESIDENT MEMORY TEST ALSO USED IN CCC 
*         NDP       - NAD RESIDENT PROCESSOR TEST ALSO USED BY CCC
* 
* 
* 
   MODULE CCM00,6000(31,32,46,47,53,104,105,115)LOCK
***       CCM00 - PARAMETER VALIDATION
**
*    1.0  EXTERNAL MODULE DOCUMENTATION 
*         ----------------------------- 
* 
* 
*    1.1  PURPOSE 
* 
*         CCM00  CHECKS  THE  PARAMETER  WORD P1 TO VERIFY THAT A VALID 
*         MEMORY SIZE HAS BEEN ENTERED.  IF A PARAMETER ENTRY ERROR  IS 
*         DETECTED,  THE  MODULES  LOOPS  ON  A  PAUSE DIRECTIVE WITH A 
*         MESSAGE TO INFORM THE USER  SO  THAT  THE  PARAMETER  CAN  BE 
*         CORRECTED AND THE TEST RERUN. 
* 
* 
*     1.2 METHOD
* 
*         1.  DISPLAY AND PRINT THE RUNNING MESSAGE FOR THE MODULE. 
*         2.  VERIFY THAT PARAMETER WORD P1 CONTAINS A NUMBER FROM 0000 
*             TO  0001  AND  IF IT DOES NOT, REPORT A PARAMETER WORD P1 
*             ENTRY ERROR.
*         3.  VERIFY THAT  REPEAT  MODULE  IS  NOT SELECTED.  IF REPEAT 
*             MODULE IS SELECTED, PAUSE UNTIL REPEATE MODULE IS  TURNED 
*             OFF IN THE ES REGISTER. 
* 
*    1.3  ERRORS REPORTED 
* 
*         CCM00 NOT EXECUTED -AL=*OCT, NEED AL=10B
*         CCM00 SUSPECTED PARAMETER ERROR  (OCTAL)
*         P1 - UNUSED BITS SET
*         P0 - P4  *OCT *OCT *OCT *OCT *OCT 
*         P5 - P9  *OCT *OCT *OCT *OCT *OCT 
*         //CCM00 AL TOO LOW
*         //CCM00 PARAMETER ERROR 
* 
/    2.0  INTERNAL MODULE DOCUMENTATION 
* 
*    2.1  ENTRY CONDITIONS
* 
*         PARAMETER WORDS P0 TO P9 ARE DESCRIBED IN THE MODULE CCM99. 
*         THE  ACCESS  LEVEL  FOR  THE  TEST  IS  CONTAINED  IN  THE AL 
*         REGISTER. 
* 
*         EXIT CONDITIONS 
* 
*         NO SPECIAL  EXIT CONDITIONS IF THE PARAMETER WORDS ARE VALID, 
*         ACCESS LEVEL OF 10B AND REPEAT MODULE IS NOT ENABLED.  OTHER
*         THE PARAMETER WORD(S) OR ACCESS LEVEL MUST BE CORRECTED AND 
*         THE TEST RERUN OR REPEAT MODULE DISABLED. 
* 
* 
*    2.2  REGISTERS USED- 
* 
*         B0  - PAUSE MESSAGE NUMBER. 
*         ES  - STANDARD USAGE. 
*         AL  - STANDARD USAGE. 
* 
*         BUFFERS USED-NONE.
* 
*    2.3  SUBMODULES REFERENCED-NONE. 
* 
* -----------------DATA DIVISION----------------------------
* 
0  FORMAT CCM - CCC MEMORY TEST 
1  FORMAT CCM00 - PARAMETER VALIDATION
2  FORMAT CCM00 NOT EXECUTED -AL=*OCT, NEED AL=10B
4  FORMAT CCM00 SUSPECTED PARAMETER ERROR  (OCTAL)
5  FORMAT P1 - UNUSED BITS SET
6  FORMAT P0 - P4  *OCT *OCT *OCT *OCT *OCT 
7  FORMAT P5 - P9  *OCT *OCT *OCT *OCT *OCT 
10 FORMAT PARAMETERS DESCRIBED IN MODULE CCM99
11 FORMAT //CCM00 AL TOO LOW
12 FORMAT //CCM00 PARAMETER ERROR 
13 FORMAT //CCM00 RM SELECTED 
* 
* -----------------INITIALIZATION---------------------------
* 
* 
*         DISPLAY THE RUNNING MESSAGE FOR THE MODULE. 
* 
30 MSG 1 TO DISPLAY,PRINT    *DISPLAY RUNNING MESSAGE 
* 
/---------VALIDATE THE ACCESS LEVEL FOR THE TEST. 
* 
   IF(AL.GE.10) GOTO 40      *IF ACCESS LEVEL OK
   MSG 2 (AL) TO LINE 4 
   B0=11                     *ACCESS LEVEL PAUSE MESSAGE
   GOTO 70                   *REPORT ACCESS LEVEL ERROR 
* 
* -----------------TEST-------------------------------------
* 
*         VALIDATE PARAMETER WORD P1. 
* 
40 IF(P1.LE.1) GOTO 50       *IF PARAMETER WORD P1 OK 
   MSG 4 TO LINE 3           *PARAMETER ERROR MESSAGE 
   MSG 5 TO LINE 4           *P1 ERROR MESSAGE
   MSG 6 (P0,P1,P2,P3,P4) TO LINE 5  *PARAMETERS P0-P4
   MSG 7 (P5,P6,P7,P8,P9) TO LINE 6  *PARAMETERS P5-P9
   MSG 10 TO LINE 7          *CCM99 INFORMATION MESSAGE 
   B0=12                     *PARAMETER ERROR PAUSE MESSAGE 
   GOTO 70                   *REPORT PARAMETER ERROR
* 
*         VERIFY THAT REPEAT MODULE IS NOT SELSECTED. 
* 
50 IF(ES.AND.RM.EQ.0) EXIT   *EXIT IF RM NOT SELECTED 
   B0=13                     *RM PAUSE MESSAGE
   GOTO 74                   *REPORT RM ERROR 
* 
*         COMPLETE ERROR DISPLAY. 
* 
70 MSG 0 TO LINE 0           *ERROR DISPLAY TITLE LINE
   MSG 1 TO LINE 1           *ERROR DISPLAY MODULE NAME 
   PICTURE
* 
*         DISPLAY PAUSE MESSAGE, PAUSE, AND LOOP. 
* 
74 MSG B0 TO DISPLAY,PRINT   *POST PAUSE MESSAGE
   PAUSE                     *REPORT ERROR TO USER
   GOTO 74                   *LOOP
* 
   END 30                    *END OF THE MODULE 
COMPILE                      *CCM00 PARAMETER VALIDATION
   MODULE CCM01,6000(31,32,46,47,53,104,105,115)LOCK
***       CCM01 - DMA READ AND WRITE TEST 
**
*    1.0  EXTERNAL MODULE DOCUMENTATION 
*         ----------------------------- 
* 
*    1.1  PURPOSE-
* 
*         TEST THE DIRECT MEMORY ACCESS (DMA) PATH TO AND FROM THE  CCC 
*         MEMORY. 
* 
* 
*    1.2  METHOD- 
* 
*         1.  DISPLAY THE RUNNING MESSAGE FOR THE MODULE. 
*         2.  SET THE CONDITION NUMBER TO ZERO. 
*         3.  GENERATE THE DATA BUFFER OF THE DATA PATTERN TO  BE  USED 
*             TO  TEST  THE CCC MEMORY FOR THIS CONDITION.  THE PATTERN 
*             WILL BE   7777   OCTAL. 
*         4.  DISPLAY THE  RUNNING  MESSAGE  IF  SCOPING  LOOP  IS  NOT 
*             SELECTED, OR THE REPEAT CONDITION MESSAGE IF SCOPING LOOP 
*             IS SELECTED.
*         5.  RESERVE THE CHANNEL TO THE CCC. 
*         6.  GET A GENERAL STATUS (012 FUNC) AND CHECK  FOR 0000.  EI- 
*             AN ABORT OR A NON-ZERO INDICATES THAT CONTROLWARE IS  NOT 
*             LOADED AND RUNNING.  POST A MESSAGE IF CW IS NOT RUNNING. 
*         7.  WRITE THE  DATA INTO THE CCC MEMORY USING A DMA  FUNCTION 
*             TO THE CCC CONTROLWARE. 
*         8.  DISPLAY  THE  RUNNING  MESSAGE  IF  SCOPING  LOOP  IS NOT 
*             SELECTED, OR THE REPEAT CONDITION MESSAGE IF SCOPING LOOP 
*             IS SELECTED.
*         9.  RESERVE THE CHANNEL TO THE CCC. 
*         10. READ  A  BUFFER  OF 502 OCTAL WORDS OF DATA FROM THE  CCC 
*             MEMORY. 
*         11. IF A MEMORY PARITY ERROR CAUSES THE  COMMAND  THAT  READS 
*             THE  DATA  FROM  THE  CCC  TO  ABORT, REPORT A CCC MEMORY 
*             PARITY ERROR IF SCOPING LOOP IS NOT SELECTED. 
*         12. CHECK THE DATA READ FROM THE CCC MEMORY.
*         13. IF REPEAT CONDITION IS SELECTED, REPEAT STEPS  4  THROUGH 
*             12. 
*         14. REPEAT STEPS 4 THROUGH 13 USING A  DATA  PATTERN  OF  ALL 
*             ZEROS.
*         15. IF REPEAT MODULE IS SELECTED, REPEAT STEPS 1 THROUGH  15. 
*         16. IF  ANY ERRORS WERE DETECTED DURING  THE EXECUTION OF THE 
*             MODULE, SEND A MESSAGE INDICATING THE  NUMBER  OF  ERRORS 
*             DETECTED BY THE MODULE TO DISPLAY, PRINT, AND DAYFILE.
*         17. EXIT THE MODULE.
* 
*    1.3  ERROR REPORTED
* 
*         CCM01 - CONTROLWARE NOT RUNNING 
*         CCM01 EC=*DECD, LC=*DECD
*         CCM01 STATUS ERROR = *OCTB
*         CCM01 DATA ERROR   ACT   EXP  WORD (OCT)
*                           *OCTB *OCTB *OCTB 
*         CCM01 ERROR(S) IN *DECD 
* 
  
*    2.0  INTERNAL MODULE DOCUMENTATION 
* 
*    2.1  ENTRY CONDITIONS
* 
*         B4 REGISTER CONTAINS 000 OCTAL. 
*         B13 REGISTER CONTAINS THE MODULE NUMBER.
* 
* 
*    2.2  REGISTERS USED
* 
*         B1  - LINE COUNTER FOR ERROR DISPLAY
*         B2  - DMA WRITE FUNCTION CODE 
*         B3  - DMA READ  FUNCTION CODE 
*         B6  - SIZE OF BUFFER (502)
*         B11 - NUMBER OF PRODUCT OVERLAY COMMAND ABORTED.
*         B14 - MODULE ERROR COUNT. 
*         B15 - MODULE LOOP COUNT.
*         BA  - DATA BUFFER BASE ADDRESS. 
*         EA  - STANDARD USAGE. 
*         EC  - STANDARD USAGE. 
*         EM  - STANDARD USAGE. 
*         ES  - STANDARD USAGE. 
*         WC  - WORD COUNT FOR COMMANDS.
* 
* 
*         BUFFERS USED- 
*         IB(000) TO IB(502) - INPUT DATA BUFFER. 
*         OB(000) TO OB(502) - OUTPUT DATA BUFFER.
*         OB(504) MAX ERROR COUNT 
*         IB(504) STATUS
* 
*    2.3  SUBMODULES USED 
* 
*         CCM98A - PROCESS PRODUCT OVERLAY ERRORS.
*         CCM98D - POST ERROR DISPLAY 
* 
* -----------------DATA DIVISION----------------------------
* 
0  FORMAT CCM01 - DMA READ/WRITE TEST 
1  FORMAT CCM01 - CONTROLWARE NOT RUNNING 
2  FORMAT CCM01 EC=*DECD, LC=*DECD
3  FORMAT CCM01 STATUS ERROR = *OCTB *OCTB
4  FORMAT CCM01 DATA ERROR  ACT   EXP   WORD (OCT)
5  FORMAT                  *OCTB *OCTB *OCTB
6  FORMAT CCM01 ------DMA WRITE------ 
7  FORMAT CCM01 ------DMA READ------- 
10 FORMAT CCM01 -------COMPARE------- 
11 FORMAT CCM01 ERROR(S) IN *DECD 
12 FORMAT 
* 
*         EQUATES FOR THE MODULE. 
* 
* 
* -----------------INITIALIZATION---------------------------
* 
*         DISPLAY MODULE RUNNING MESSAGE. 
* 
30 MSG 0 TO DISPLAY,PRINT    *DISPLAY RUNNING MESSAGE 
   B5=0                      *INITIALIZE PASS COUNTER 
   OB(504)=20B               *INITIALIZE MAX ERROR COUNT
   B14=0                     *INITIALIZE ERROR COUNTER
   B4=0                      *B4 REGISTER EQUALS 0
   B9=P1
   IF(B9.EQ.0)B9=1           *IF DEFAULT MEMORY PARAMETER 
   B9=B9+1.LS.6 
   B13=1                     *MODULE NUMBER 
   DUP 7777 TO OB FOR 502    *GENERATE PATTERN
   B2=44                     *DMA WRITE CODE FOR 895
   B3=43                     *DMA READ CODE FOR 895 
   B12 = 1                   *SET NUMBER OF STATUS WORDS
   IF(DC.EQ.115) GOTO 34
   IF(DC.EQ.47) GOTO 32 
   IF(DC.EQ.46) GOTO 32 
   IF(DC.EQ.105) GOTO 32
* 
   GOTO 52                   *EXIT IF DC NOT 46/47/105/115
* 
32 B2=B2+23B                 *DMA WRITE FOR MASSTOR HPO/CART TAPE 
   B3=B3+23B                 *DMA READ FOR MASSTOR HPO/CART TAPE
   B12 = 2                   *SET NUMBER OF STATUS WORDS
* 
* 
* 
* -----------------TEST-------------------------------------
* 
34 GOSUB 70                  *RESERVE CCC CHANNEL 
   B1=6                      *LINE COUNTER
   B6=502                    *SET WORD COUNT
* 
   B11=0                     *CHECK FOR STATUS = 0
   FUNC 12, ABT 37
   B11=4
   INB B12 WORDS TO IB(503), ABT 74   *READ STATUS
   B8 = 1000B                *STATUS OK FOR CART TAPE/MASSTOR 
   IF(DC.EQ.115) B8 = 0      *STATUS OK FOR 895 
   IF(IB(503).EQ.B8) GOTO 35  *CONTINUE STATUS OK 
   IF(ES.AND.SL.NE.0)GOTO 35  *IF SCOPING LOOP ON 
   MSG 3 B12 WORDS FROM IB(503) TO LINE 4  *POST NON-ZERO STATUS
37 MSG 0 TO LINE 0
   MSG 1 TO LINE 2           *POST CW NOT LOADED
   HALT 
   GOTO 34                   *LOOP WAITING CNTLWARE 
* 
35 B11=0                     *FUNCTION NUMBER COMMAND 
   FUNC B2, ABT 74           *FUNCTION DMA WRITE CCC
* 
*         WRITE THE DATA PATTERN INTO CCC MEMORY. 
* 
   BA=B4                     *INIT. BASE ADDRESS OF BUFFER
   WC=B6                     *INITIALIZE WRITE WORD COUNT 
36 B11 = 5                   *MEMORY WRITE COMMAND NUMBER 
   OUTB CHAIN WC WORDS FROM OB(BA), ABT 74       *WRITE 
   B11 = 3                   *DCN COMMAND NUMBER
   DCN, ABT 74               *DISCONNECT CCC CHANNEL
   MSG 6 TO LINE 3
   GOSUB 54                  *CHECK FOR STATUS = 0
* 
*         READ AND CHECK DATA FROM CCC MEMORY.
* 
40 GOSUB 70                  *RESERVE CCC CHANNEL 
* 
   WC=B6                     *INITIALIZE WORD COUNT 
   BA=B4                     *INIT. BASE ADDRESS OF BUFFER
   B11=0                     *FUNCTION COMMAND NUMBER 
   FUNC B3, ABT 74           *FUNCTION DMA READ 
   B11 = 4                   *MEMORY READ COMMAND NUMBER
   INB WC WORDS TO IB(BA), ABT 74 
   MSG 7 TO LINE 3
   GOSUB 54                  *CHECK FOR STATUS = 0
* 
42 B11 = 1                   *COMPARE COMMAND NUMBER
   MSG 10 TO LINE 3 
   IF(WC.EQ.0)GOTO 43        *BYPASS CHECK IF WC=0
   COMPARE OB(BA) TO IB(BA) FOR WC,ABT 60  *CHECK DATA READ 
* 
* -----------------REPEAT/EXIT------------------------------
* 
*         PROCESS REPEAT CONDITION. 
* 
43 IF (B1.EQ.6) GOTO 45      *IF NO ERRORS ON LAST CHECK
44 HALT                      *DISPLAY LAST OF ERRORS
   BLANK
45 IF(ES.AND.RC.EQ.0) GOTO 50  *IF REPEAT CONDITION OFF 
* 
   IF(B14.GE.OB(504)) OB(504)=B14+20B  *INCR MAX ERR. CNT.
   B15=B15+1                 *UPDATE LOOP COUNT 
   GOTO 34                   *GO TO REPEAT THE CONDITION
* 
50 DUP 0000 TO OB FOR 502    *GENERATE PATTERN FOR 2ND PASS 
   GOTO 34 WHILE (B5+1.NE.2)  *LOOP TO DO TWO PASSES
* 
*         PROCESS REPEAT MODULE.
* 
   IF(ES.AND.RM.NE.0)GOTO 30   *IF REPEAT MODULE SELECTED 
   IF(B14.NE.0)MSG 11(B14) TO DISPLAY,PRINT,DAYFILE 
52 EXIT                      *EXIT THE MODULE 
* 
*         OBTAIN GENERAL STATUS 
* 
54 B11= 0                    *STATUS COMMAND NUMBER 
   FUNC 12, ABT 37
   B11=4                     *INB COMMAND NUMBER
   INB B12 WORDS TO IB(503), ABT 74   *READ STATUS
   IF(IB(503).EQ.B8) RETURN  *IF NO STATUS ERROR
* 
   IF(ES.AND.SL.NE.0) RETURN  *IF SCOPING LOOP ON 
   MSG 3 B12 WORDS FROM IB(503) TO LINE 4  *POST NON-ZERO STATUS
   B14=B14+1                 *UPDATE ERROR COUNT
   HALT 
* 
* -----------------ABORT PROCESSOR--------------------------
* 
* 
*         PROCESS ABORT ON COMPARE ERROR. 
* 
60 IF(ES.AND.SL.NE.0) GOTO 62  *IF SCOPING LOOP ON
* 
   MSG 0 TO LINE 0
   MSG 4 TO LINE 5           *REPORT DATA ERROR 
   B7=502-B6
   MSG 5 (IB(WC),OB(WC),B7)TO LINE B1 
   IF(WC.EQ.0) WC=WC+1       *IF ERROR ON WORD 0
   BA=BA+WC                  *UPDATE BEG ADDR 
   WC=B6-WC                  *RESET WORD COUNT
   B6=WC
   GOTO 42 WHILE(B1+1.LE.16)   *ALLOW 10 ERRORS 
* 
   HALT 
   B14=B14+1                 *UPDATE ERROR COUNTER
   B1=6B                     *RESET LINE COUNTER
   GOTO 42
* 
62 B14=B14+1                 *UPDATE ERROR COUNTER
   WC=502                    *RESET COMPARE WORD COUNT
   GOTO 42                   *RETURN TO COMPLETE DATA CHECK 
* 
*         POST RUNNING MESSAGE AND RESERVE CCC CHANNEL. 
* 
70 IF(ES.AND.SL.EQ.0)MSG 0 TO DISPLAY 
   IF(ES.AND.SL.NE.0)MSG 2(B14,B15) TO DISPLAY
   B11 = 10                  *RES COMMAND NUMBER
   RES,ABT 74                *RESERVE CCC CHANNEL 
   RETURN                    *EXIT THE SUBROUTINE 
* 
*         PROCESS COMMAND ABORTS IN THE MODULE. 
* 
74 B14=B14+1                 *UPDATE ERROR COUNT
   IF(ES.AND.SL.EQ.0) CALL 98A  *PROCESS ABORT ERROR
* 
   ENDSUB GOTO 44            *GO TO END OF THE CONDITION
* 
   END 30                    *END OF THE MODULE 
COMPILE                      *CCM01 DMA READ/WRITE TEST 
   MODULE CCM02,6000(31,32,46,47,53,104,105,115)LOCK
***       CCM02 - ONES AND ZEROS TEST 
**
*    1.0  EXTERNAL MODULE DOCUMENTATION 
*         ----------------------------- 
* 
*    1.1  PURPOSE-
* 
*         TEST  THE  CCC MEMORY USING DATA PATTERNS OF ALL ONES AND ALL 
*         ZEROS.
* 
* 
*    1.2  METHOD- 
* 
*         1.  DISPLAY THE RUNNING MESSAGE FOR THE MODULE. 
*         2.  SET THE CONDITION NUMBER TO ZERO. 
*         3.  GENERATE THE DATA BUFFER OF THE DATA PATTERN TO  BE  USED 
*             TO  TEST  THE CCC MEMORY FOR THIS CONDITION.  THE INITIAL 
*             DATA PATTERN GENERATED WILL BE  FFFF  HEXADECIMAL.
*         4.  DISPLAY THE  RUNNING  MESSAGE  IF  SCOPING  LOOP  IS  NOT 
*             SELECTED, OR THE REPEAT CONDITION MESSAGE IF SCOPING LOOP 
*             IS SELECTED.
*         5.  RESERVE THE CHANNEL TO THE CCC. 
*         6.  MASTER CLEAR THE PROCESSOR IN THE CCC.
*         7.  WRITE THE  DATA  PATTERN  INTO  ALL  LOCATIONS IN THE CCC 
*             MEMORY. 
*         8.  DISPLAY  THE  RUNNING  MESSAGE  IF  SCOPING  LOOP  IS NOT 
*             SELECTED, OR THE REPEAT CONDITION MESSAGE IF SCOPING LOOP 
*             IS SELECTED.
*         9.  RESERVE THE CHANNEL TO THE CCC. 
*         10. READ  A  BUFFER  OF 80 HEXADECIMAL WORDS OF DATA FROM THE 
*             CCC MEMORY.  THE INITIAL READ WILL START AT ADDRESS  ZERO 
*             IN THE CCC MEMORY.
*         11. IF A MEMORY PARITY ERROR CAUSES THE  COMMAND  THAT  READS 
*             THE  DATA  FROM  THE  CCC  TO  ABORT, REPORT A CCC MEMORY 
*             PARITY ERROR IF SCOPING LOOP IS NOT SELECTED. 
*         12. CHECK THE DATA READ FROM THE CCC MEMORY.
*         13. REPEAT STEPS 10 THROUGH 13 UNTIL ALL LOCATIONS IN THE CCC 
*             MEMORY HAVE BEEN READ AND CHECKED.
*         14. IF REPEAT CONDITION IS SELECTED, REPEAT STEPS  3  THROUGH 
*             14. 
*         15. REPEAT STEPS 3 THROUGH 14 USING A  DATA  PATTERN  OF  ALL 
*             ZEROS.
*         16. IF REPEAT MODULE IS SELECTED, REPEAT STEPS  1 THROUGH  16 
*         17. IF ANY ERRORS  WERE DETECTED DURING THE EXECUTION  OF THE 
*             MODULE, SEND A MESSAGE INDICATING THE  NUMBER  OF  ERRORS 
*             DETECTED BY THE MODULE TO DISPLAY, PRINT, AND DAYFILE.
*         18. EXIT THE MODULE.
* 
*    1.3  ERROR REPORTED
* 
*         CCM02 - ONES AND ZEROS TEST 
*         CCM02 ERROR(S) = *DECD
*         CCM02 EC=*DECD, LC=*DECD
* 
/    2.0  INTERNAL MODULE DOCUMENTATION 
* 
*    2.1  ENTRY CONDITIONS
* 
*         B4 REGISTER CONTAINS 100 OCTAL. 
*         B9 REGISTER CONTAINS THE NUMBER OF 80 HEXADECIMAL WORD BLOCKS 
*            REQUIRED  TO  WRITE  OR  READ  THE ENTIRE CCC MEMORY BEING 
*            TESTED.
*         B13 REGISTER CONTAINS THE MODULE NUMBER.
*         OB(70) AND OB(71) CONTAINS THE DATA PATTERNS TO BE TESTED.
* 
* 
*    2.2  REGISTERS USED
* 
*         B5  - DATA PATTERN COUNTER. 
*         B6  - UPPER 8 BITS OF THE CCC MEMORY ADDRESS. 
*         B7  - LOWER 8 BITS OF THE CCC MEMORY ADDRESS. 
*         B8  - CCC MEMORY BUFFER COUNTER.
*         B10 - DATA ERROR BUFFER POINTER.
*         B11 - NUMBER OF PRODUCT OVERLAY COMMAND ABORTED.
*         B14 - MODULE ERROR COUNT. 
*         B15 - MODULE LOOP COUNT.
*         BA  - DATA BUFFER BASE ADDRESS. 
*         EA  - STANDARD USAGE. 
*         EC  - STANDARD USAGE. 
*         EM  - STANDARD USAGE. 
*         ES  - STANDARD USAGE. 
*         WC  - WORD COUNT FOR COMMANDS.
* 
* 
*         BUFFERS USED- 
*         IB(100) TO IB(500) - INPUT DATA BUFFER. 
*         OB(100) TO OB(500) - OUTPUT DATA BUFFER.
*         OB(50)  MAX ERROR COUNT 
* 
* 
*    2.3  SUBMODULES USED 
* 
*         CCM98A - PROCESS PRODUCT OVERLAY ERRORS.
*         CCM98C - PROCESS MODULE DETECTED ERRORS.
*         CCM98D - POST ERROR DISPLAY 
* 
* -----------------DATA DIVISION----------------------------
* 
0  FORMAT CCM02 - ONES AND ZEROS TEST 
1  FORMAT CCM02 ERROR(S) = *DECD
2  FORMAT CCM02 EC=*DECD, LC=*DECD
* 
*         DATA PATTERNS FOR THE MODULES.
* 
   DATA (OB(70),H)FF00
* 
*         EQUATES FOR THE MODULE. 
* 
   EQUATE PMC=740, CDCN=3, BLOCK1=74, BLOCK2=100
   EQUATE SETADDR=500, HSTATUS=704, WRT=702, RDD=701
   EQUATE CCMP=1, CMEMRD=4, CMEMWR=5, CPMC=6, CRES=10B
   EQUATE SETADD2=502 
* 
* -----------------INITIALIZATION---------------------------
* 
*         DISPLAY MODULE RUNNING MESSAGE. 
* 
30 MSG 0 TO DISPLAY,PRINT    *DISPLAY RUNNING MESSAGE 
   B5=0                      *INITIALIZE PASS COUNTER 
   OB(50)=20B                *INITIALIZE MAX ERROR COUNT
   B14=0                     *INITIALIZE ERROR COUNTER
   B4=100                    *B4 REGISTER EQUALS 100
   B9=P1                     *BUILD MEMORY BLOCK COUNT
   IF(B9.EQ.0)B9=1           *IF DEFAULT MEMORY PARAMETER 
   B9=B9+1.LS.6 
   B13=2                     *MODULE NUMBER 
32 DUP OB(B5+70) TO OB(B4) FOR 400  *GENERATE PATTERN 
* 
* 
* -----------------TEST-------------------------------------
* 
* --------RESERVE CCC CH. AND MASTER CLEAR THE PROCESSOR. 
* 
34 GOSUB 70                  *RESERVE CCC CHANNEL 
* 
   B11=CPMC                  *PMC COMMAND NUMBER
   FUNC PMC, ABT 74          *MASTER CLEAR THE CCC
* 
*         INITIALIZE REGISTERS FOR WRITING CCC MEMORY.
* 
   OB(501) = 0               *CCC ADDRESS 
   OB(502) = 200             *CCC LENGTH
   B6=SETADDR                *SET ADDRESS FUNCTION
   GOSUB 52 
   B8=0 
35 B11=0                     *FUNCTION NUMBER COMMAND 
   FUNC WRT, ABT 74          *FUNCTION WRITE CCC
* 
*         WRITE THE DATA PATTERN INTO CCC MEMORY. 
* 
   BA=B4                     *INIT. BASE ADDRESS OF BUFFER
   WC=400                    *INITIALIZE WRITE WORD COUNT 
36 B11 = CMEMWR              *MEMORY WRITE COMMAND NUMBER 
   OUTB CHAIN WC WORDS FROM OB(BA), ABT 74       *WRITE 
   B8=B8+1
   IF(B8.EQ.BLOCK1) GOSUB 51
* 
   IF(B8.EQ.BLOCK2) GOTO 35 
* 
37 IF(B8.NE.B9) GOTO 36      *LOOP TO WRITE ALL OF MEMORY 
* 
   B11 = 3                   *DCN COMMAND NUMBER
   DCN, ABT 74               *DISCONNECT CCC CHANNEL
* 
*         READ AND CHECK ALL LOCATIONS IN CCC MEMORY. 
* 
   B10=0                     *INITIALIZE ERROR INDEX
   B8=0                      *INITIALIZE BUFFER COUNTER 
40 GOSUB 70                  *RESERVE CCC CHANNEL 
   OB(502)=200               *CCC LENGTH
   WC=400                    *INITIALIZE WORD COUNT 
   BA=B4                     *INIT. BASE ADDRESS OF BUFFER
   B6=B8.RS.5.OR.SETADDR
   OB(501)=B8.AND.37.LS.7 
   GOSUB 52 
* 
   B11=0                     *FUNCTION COMMAND NUMBER 
   FUNC RDD, ABT 74 
   B11=CMEMRD                *MEMORY READ COMMAND NUMBER
   INB WC WORDS TO IB(BA), ABT 74 
   GOSUB 54 
* 
42 B11=CCMP                  *COMPARE COMMAND NUMBER
   COMPARE OB(BA) TO IB(BA) FOR WC,ABT 60  *CHECK DATA READ 
   B8=B8+1
   IF(B8.EQ.BLOCK1) B8=BLOCK2 
44 IF(B8.NE.B9) GOTO 40      *LOOP TO READ ALL OF MEMORY
* 
*         DISPLAY ANY REMAINING DATA ERRORS.
* 
46 IF(B10.NE.0) ERROR 0/2 GOSUB 66  *PROCESS DATA ERRORS
* 
* -----------------REPEAT/EXIT------------------------------
* 
* 
*         PROCESS REPEAT CONDITION. 
* 
   IF(ES.AND.RC.EQ.0) GOTO 50  *IF REPEAT CONDITION OFF 
* 
   IF(B14.GE.OB(50)) OB(50)=B14+20B  *INCREASE MAX ERR. CNT.
   B15=B15+1                 *UPDATE LOOP COUNT 
   GOTO 34                   *GO TO REPEAT THE CONDITION
* 
50 GOTO 32 WHILE (B5+1.NE.2)  *LOOP TO DO TWO PASSES
* 
*         PROCESS REPEAT MODULE.
* 
   IF(ES.AND.RM.NE.0)GOTO 30   *IF REPEAT MODULE SELECTED 
   IF(B14.NE.0)MSG 1 (B14) TO DISPLAY,PRINT,DAYFILE 
   EXIT                      *EXIT THE MODULE 
* 
*         SUBROUTINE TO SET CCC ADDRESS AND LENGTH. 
* 
51 DCN, ABT 74
   GOSUB 70 
* 
   B8=BLOCK2
   B6=SETADD2 
52 B11=2                     *SET CCC ADD. COMMAND NUMBER 
   FUNC B6, ABT 74
   OUTB 2 WORDS FROM OB(501), ABT 74    *WRITE
54 B11= 0                    *STATUS COMMAND NUMBER 
   FUNC HSTATUS, ABT 74      *FUNCTION CCC FOR STATUS 
   B11=4                     *INB COMMAND NUMBER
   INB 1 WORDS TO IB(504), ABT 74          *READ STATUS 
   IF(IB(504).AND.3400.EQ.0) RETURN        *IF NO STAT. ERR.
* 
   B11=11 
   B14=B14+1                 *UPDATE ERROR COUNT
   ERROR 0/1 GOSUB 66        *PROCESS ERROR 
* 
   ENDSUB GOTO 46 
* 
* -----------------ABORT PROCESSOR--------------------------
* 
* 
*         PROCESS ABORT ON COMPARE ERROR. 
* 
60 GOTO 46 WHILE (B14+1.GE.OB(50))     *UPDATE ERROR COUNT
* 
   BA=WC.AND.7776+BA         *BUILD BUFFER INDEX
   IF(ES.AND.SL.NE.0) GOTO 62  *IF SCOPING LOOP ON
   IB(B10)=B8                *SAVE BUFFER COUNTER 
   IB(B10+1)=BA-B4           *SAVE BUFFER INDEX 
   COPY OB(BA) TO IB(B10+2) FOR 2  *SAVE EXPECTED DATA
   COPY IB(BA) TO IB(B10+4) FOR 2  *SAVE ACTUAL DATA
   B10=B10+10                *UPDATE BUFFER POINTER 
   IF(B10.EQ.B4) ERROR 0/2 GOSUB 66  *REPORT DATA ERRORS
* 
62 BA=BA+2                   *RESET BUFFER INDEX
   WC=500-BA                 *RESET COMPARE WORD COUNT
   GOTO 42                   *RETURN TO COMPLETE DATA CHECK 
* 
*         REPORT DATA ERRORS IF NOT SCOPING.
* 
66 IF(ES.AND.SL.NE.0) RETURN  *IF SCOPING LOOP ON 
* 
    CALL 98C                 *REPORT ERRORS 
* 
*         POST RUNNING MESSAGE AND RESERVE CCC CHANNEL. 
* 
70 IF(ES.AND.SL.EQ.0)MSG 0 TO DISPLAY 
   IF(ES.AND.SL.NE.0)MSG 2(B14,B15) TO DISPLAY
   B11=CRES                  *RES COMMAND NUMBER
   RES,ABT 74                *RESERVE CCC CHANNEL 
   RETURN                    *EXIT THE SUBROUTINE 
* 
*         PROCESS COMMAND ABORTS IN THE MODULE. 
* 
74 B14=B14+1                 *UPDATE ERROR COUNT
   IF(ES.AND.SL.EQ.0) CALL 98A  *PROCESS ABORT ERROR
* 
   ENDSUB GOTO 46            *GO TO END OF THE CONDITION
* 
   END 30                    *END OF THE MODULE 
COMPILE                      *CCM02 ONES AND ZEROS TEST 
   MODULE CCM03,6000(31,32,46,47,53,104,105,115)LOCK
***       CCM03 - ALTERNATING ONES TEST 
**
*    1.0  EXTERNAL MODULE DOCUMENTATION 
* 
* 
* 
*    1.1  PURPOSE-
* 
*         TEST  THE  CCC MEMORY USING DATA PATTERNS OF 5555 
*         HEXADECIMAL AND AAAA HEXADECIMAL. 
* 
* 
*    1.2  METHOD- 
* 
*         1.  DISPLAY THE RUNNING MESSAGE FOR THE MODULE. 
*         2.  SET THE CONDITION NUMBER TO ZERO. 
*         3.  GENERATE THE DATA BUFFER OF THE DATA PATTERN TO  BE  USED 
*             TO  TEST  THE CCC MEMORY FOR THIS CONDITION.  THE INITIAL 
*             DATA PATTERN GENERATED WILL BE  5555  HEXADECIMAL.
*         4.  DISPLAY THE  RUNNING  MESSAGE  IF  SCOPING  LOOP  IS  NOT 
*             SELECTED, OR THE REPEAT CONDITION MESSAGE IF SCOPING LOOP 
*             IS SELECTED.
*         5.  RESERVE THE CHANNEL TO THE CCC. 
*         6.  MASTER CLEAR THE PROCESSOR IN THE CCC.
*         7.  WRITE THE  DATA  PATTERN  INTO  ALL  LOCATIONS IN THE CCC 
*             MEMORY. 
*         8.  DISPLAY  THE  RUNNING  MESSAGE  IF  SCOPING  LOOP  IS NOT 
*             SELECTED, OR THE REPEAT CONDITION MESSAGE IF SCOPING LOOP 
*             IS SELECTED.
*         9.  RESERVE THE CHANNEL TO THE CCC. 
*         10. READ  A  BUFFER  OF 80 HEXADECIMAL WORDS OF DATA FROM THE 
*             CCC MEMORY.  THE INITIAL READ WILL START AT ADDRESS  ZERO 
*             IN THE CCC MEMORY.
*         11. IF A MEMORY PARITY ERROR CAUSES THE  COMMAND  THAT  READS 
*             THE  DATA  FROM  THE  CCC  TO  ABORT, REPORT A CCC MEMORY 
*             PARITY ERROR IF SCOPING LOOP IS NOT SELECTED. 
*         12. CHECK THE DATA READ FROM THE CCC MEMORY.
*         13. REPEAT STEPS 10 THROUGH 13 UNTIL ALL LOCATIONS IN THE CCC 
*             MEMORY HAVE BEEN READ AND CHECKED.
*         14. IF REPEAT CONDITION IS SELECTED, REPEAT STEPS  3  THROUGH 
*             14. 
*         15. REPEAT STEPS  3 THROUGH  14 USING A DATA PATTERN OF  AAAA 
*             HEXADECIMAL.
*         16. IF REPEAT MODULE IS SELECTED, REPEAT STEPS 1 THROUGH  16. 
*         17. IF  ANY ERRORS  WERE DETECTED DURING THE EXECUTION OF THE 
*             MODULE, SEND A MESSAGE INDICATING THE  NUMBER  OF  ERRORS 
*             DETECTED BY THE MODULE TO DISPLAY, PRINT, AND DAYFILE.
*         18. EXIT THE MODULE.
* 
*    1.3  ERROR REPORTED
* 
*         CCM03 - ALTERNATING ONES TEST 
*         CCM03 ERROR(S) = *DECD
*         CCM03 EC=*DECD, LC=*DECD
* 
/    2.0  INTERNAL MODULE DOCUMENTATION 
* 
*    2.1  ENTRY CONDITIONS
* 
*         B4 REGISTER CONTAINS 100 OCTAL. 
*         B9 REGISTER CONTAINS THE NUMBER OF 80 HEXADECIMAL WORD BLOCKS 
*            REQUIRED  TO  WRITE  OR  READ  THE ENTIRE CCC MEMORY BEING 
*            TESTED.
*         B13 REGISTER CONTAINS THE MODULE NUMBER.
*         OB(70) AND OB(71) CONTAINS THE DATA PATTERNS TO BE TESTED.
* 
*    2.2  REGISTER AND BUFFER USAGE 
* 
*         B5  - DATA PATTERN COUNTER. 
*         B6  - UPPER 8 BITS OF THE CCC MEMORY ADDRESS. 
*         B7  - LOWER 8 BITS OF THE CCC MEMORY ADDRESS. 
*         B8  - CCC MEMORY BUFFER COUNTER.
*         B10 - DATA ERROR BUFFER POINTER.
*         B11 - NUMBER OF PRODUCT OVERLAY COMMAND ABORTED.
*         B14 - MODULE ERROR COUNT. 
*         B15 - MODULE LOOP COUNT.
*         BA  - DATA BUFFER BASE ADDRESS. 
*         EA  - STANDARD USAGE. 
*         EC  - STANDARD USAGE. 
*         EM  - STANDARD USAGE. 
*         ES  - STANDARD USAGE. 
*         WC  - WORD COUNT FOR COMMANDS.
* 
*         BUFFERS USED- 
*         IB(100) TO IB(500) - INPUT DATA BUFFER. 
*         OB(100) TO OB(500) - OUTPUT DATA BUFFER.
*         OB(50)  MAX ERROR COUNT 
* 
*    2.3  SUBMODULES USED 
* 
*         CCM98A - PROCESS PRODUCT OVERLAY ERRORS.
*         CCM98C - PROCESS MODULE DETECTED ERRORS.
*         CCM98D - POST ERROR DISPLAY 
* 
* 
* -----------------DATA DIVISION--------------------------- 
* 
0  FORMAT CCM03 - ALTERNATING ONES TEST 
1  FORMAT CCM03 ERROR(S) = *DECD
2  FORMAT CCM03 EC=*DECD, LC=*DECD
* 
*         DATA PATTERNS FOR THE MODULES.
* 
   DATA (OB(70),H) 55AA 
* 
*         EQUATES FOR THE MODULE. 
* 
   EQUATE PMC=740, CDCN=3, BLOCK1=74, BLOCK2=100
   EQUATE SETADDR=500, HSTATUS=704, WRT=702, RDD=701
   EQUATE CCMP=1, CMEMRD=4, CMEMWR=5, CPMC=6, CRES=10B
   EQUATE SETADD2=502 
* 
* -----------------INITIALIZATION-------------------------- 
* 
* 
*         DISPLAY MODULE RUNNING MESSAGE. 
* 
30 MSG 0 TO DISPLAY,PRINT    *DISPLAY RUNNING MESSAGE 
   B5=0                      *INITIALIZE PASS COUNTER 
   OB(50)=20B                *INITIALIZE MAX ERROR COUNT
   B14=0                     *INITIALIZE ERROR COUNTER
   B4=100                    *B4 REGISTER EQUALS 100
   B9=P1                     *BUILD MEMORY BLOCK COUNT
   IF(B9.EQ.0)B9=1           *IF DEFAULT MEMORY PARAMETER 
   B9=B9+1.LS.6 
   B13=3                     *MODULE NUMBER 
32 DUP OB(B5+70) TO OB(B4) FOR 400  *GENERATE PATTERN 
* 
*         RESERVE CCC CH. AND MASTER CLEAR THE PROCESSOR. 
* 
* 
* -----------------TEST------------------------------------ 
* 
34 GOSUB 70                  *RESERVE CCC CHANNEL 
   B11=CPMC                  *PMC COMMAND NUMBER
   FUNC PMC, ABT 74          *MASTER CLEAR THE CCC
* 
*         INITIALIZE REGISTERS FOR WRITING CCC MEMORY.
* 
   OB(501) = 0               *CCC ADDRESS 
   OB(502) = 200             *CCC LENGTH
   B6=SETADDR 
   GOSUB 52 
* 
   B8=0 
35 B11=0                     *FUNCTION NUMBER COMMAND 
   FUNC WRT, ABT 74            *FUNCTION WRITE CCC
* 
*         WRITE THE DATA PATTERN INTO CCC MEMORY. 
* 
36 BA=B4                     *INIT. BASE ADDRESS OF BUFFER
   WC=400                    *INITIALIZE WRITE WORD COUNT 
   B11 = CMEMWR              *MEMORY WRITE COMMAND NUMBER 
   OUTB CHAIN WC WORDS FROM OB(BA), ABT 74       *WRITE 
   B8=B8+1
   IF(B8.EQ.BLOCK1) GOSUB 51
* 
   IF(B8.EQ.BLOCK2) GOTO 35 
* 
37 IF(B8.NE.B9) GOTO 36      *LOOP TO WRITE ALL OF MEMORY 
* 
   B11 = 3                   *DCN COMMAND NUMBER
   DCN, ABT 74               *DISCONNECT CCC CHANNEL
* 
*         READ AND CHECK ALL LOCATIONS IN CCC MEMORY. 
* 
   B10=0                     *INITIALIZE ERROR INDEX
   B8=0                      *INITIALIZE BUFFER COUNTER 
40 GOSUB 70                  *RESERVE CCC CHANNEL 
* 
   OB(502)=200               *CCC LENGTH
   WC=400                    *INITIALIZE WORD COUNT 
   BA=B4                     *INIT. BASE ADDRESS OF BUFFER
   B6=B8.RS.5.OR.SETADDR
   OB(501)=B8.AND.37.LS.7 
   GOSUB 52 
* 
   B11=0                     *FUNCTION COMMAND NUMBER 
   FUNC RDD, ABT 74 
   B11=CMEMRD                *MEMORY READ COMMAND NUMBER
   INB WC WORDS TO IB(BA), ABT 74 
   GOSUB 54 
42 B11=CCMP                  *COMPARE COMMAND NUMBER
   COMPARE OB(BA) TO IB(BA) FOR WC,ABT 60  *CHECK DATA READ 
* 
   B8=B8+1
   IF(B8.EQ.BLOCK1) B8=BLOCK2 
44 IF(B8.NE.B9) GOTO 40      *LOOP TO READ ALL OF MEMORY
* 
*         DISPLAY ANY REMAINING DATA ERRORS.
* 
46 IF(B10.NE.0) ERROR 0/2 GOSUB 66  *PROCESS DATA ERRORS
* 
* -----------------REPEAT/EXIT----------------------------- 
* 
* 
*         PROCESS REPEAT CONDITION. 
* 
   IF(ES.AND.RC.EQ.0) GOTO 50  *IF REPEAT CONDITION OFF 
* 
   IF(B14.GE.OB(50)) OB(50)=B14+20B  *INCREASE MAX ERR. CNT.
   B15=B15+1                 *UPDATE LOOP COUNT 
   GOTO 34                   *GO TO REPEAT THE CONDITION
50 GOTO 32 WHILE (B5+1.NE.2)  *LOOP TO DO TWO PASSES
* 
*         PROCESS REPEAT MODULE.
* 
   IF(ES.AND.RM.NE.0)GOTO 30   *IF REPEAT MODULE SELECTED 
   IF(B14.NE.0)MSG 1 (B14) TO DISPLAY,PRINT,DAYFILE 
   EXIT                      *EXIT THE MODULE 
* 
*         SUBROUTINE TO SET CCC ADDRESS AND LENGTH. 
* 
51 DCN, ABT 74
   GOSUB 70 
* 
   B8=BLOCK2
   B6=SETADD2 
52 B11=2                     *SET CCC ADDRESS COMMAND NUMBER
   FUNC B6, ABT 74
   OUTB 2 WORDS FROM OB(501), ABT 74    *WRITE
54 B11= 0                    *STATUS COMMAND NUMBER 
   FUNC HSTATUS, ABT 74      *FUNCTION CCC FOR STATUS 
   B11=4                     *INB COMMAND NUMBER
   INB 1 WORDS TO IB(504), ABT 74        *READ STATUS 
   IF(IB(504).AND.3400.EQ.0) RETURN      *IF NO STATUS ERROR
   B11=11 
   B14=B14+1                 *UPDATE ERROR COUNT
   ERROR 0/1 GOSUB 66        *PROCESS ERROR 
* 
   ENDSUB GOTO 46 
* 
* -----------------ABORT PROCESSOR------------------------- 
* 
* 
*         PROCESS ABORT ON COMPARE ERROR. 
* 
60 GOTO 46 WHILE (B14+1.GE.OB(50))     *UPDATE ERROR COUNT
* 
   BA=WC.AND.7776+BA           *BUILD BUFFER INDEX
   IF(ES.AND.SL.NE.0) GOTO 62  *IF SCOPING LOOP ON
   IB(B10)=B8                *SAVE BUFFER COUNTER 
   IB(B10+1)=BA-B4           *SAVE BUFFER INDEX 
   COPY OB(BA) TO IB(B10+2) FOR 2  *SAVE EXPECTED DATA
   COPY IB(BA) TO IB(B10+4) FOR 2  *SAVE ACTUAL DATA
   B10=B10+10                *UPDATE BUFFER POINTER 
   IF(B10.EQ.B4) ERROR 0/2 GOSUB 66  *REPORT DATA ERRORS
* 
62 BA=BA+2                   *RESET BUFFER INDEX
   WC=500-BA                 *RESET COMPARE WORD COUNT
   GOTO 42                   *RETURN TO COMPLETE DATA CHECK 
* 
*         REPORT DATA ERRORS IF NOT SCOPING.
* 
66 IF(ES.AND.SL.NE.0) RETURN   *IF SCOPING LOOP ON
* 
    CALL 98C                 *REPORT ERRORS 
* 
*         POST RUNNING MESSAGE AND RESERVE CCC CHANNEL. 
* 
70 IF(ES.AND.SL.EQ.0)MSG 0 TO DISPLAY 
   IF(ES.AND.SL.NE.0)MSG 2(B14,B15) TO DISPLAY
   B11=CRES                  *RES COMMAND NUMBER
   RES,ABT 74                *RESERVE CCC CHANNEL 
   RETURN                    *EXIT THE SUBROUTINE 
* 
*         PROCESS COMMAND ABORTS IN THE MODULE. 
* 
74 B14=B14+1                 *UPDATE ERROR COUNT
   IF(ES.AND.SL.EQ.0) CALL 98A  *PROCESS ABORT ERROR
* 
   ENDSUB GOTO 46            *GO TO END OF THE CONDITION
* 
   END 30                    *END OF THE MODULE 
COMPILE                      *CCM03 ALTERNATING ONES TEST 
   MODULE CCM04,6000(31,32,46,47,53,104,105,115)LOCK
***       CCM04 - SLIDING ZERO TEST TEST
**
*    1.0  EXTERNAL MODULE DOCUMENTATION 
*         ----------------------------- 
* 
* 
*    1.1  PURPOSE-
* 
*         TEST THE CCC MEMORY USING AN 8 BIT SLIDING ZERO DATA  PATTERN 
*         (FEFE,   FDFD,   FBFB,  F7F7,  EFEF,  DFDF  ,BFBF,  AND  7F7F 
*         HEXADECIMAL). 
* 
* 
*    1.2  METHOD- 
* 
*         1.  DISPLAY THE RUNNING MESSAGE FOR THE MODULE. 
*         2.  INITIALIZE THE CONDITION NUMBER BY SETTING IT TO ZERO.
*         3.  GENERATE THE DATA BUFFER OF THE DATA PATTERN TO  BE  USED 
*             TO  TEST  THE CCC MEMORY FOR THIS CONDITION.  THE INITIAL 
*             DATA PATTERN GENERATED WILL BE FEFE HEXADECIMAL.
*         4.  DISPLAY  THE  RUNNING  MESSAGE  IF  SCOPING  LOOP  IS NOT 
*             SELECTED, OR THE REPEAT CONDITION MESSAGE IF SCOPING LOOP 
*             IS SELECTED.
*         5.  RESERVE THE CHANNEL TO THE CCC. 
*         6.  MASTER CLEAR THE PROCESSOR IN THE CCC.
*         7.  WRITE THE DATA PATTERN INTO  ALL  LOCATIONS  IN  THE  CCC 
*             MEMORY. 
*         8.  DISPLAY THE  RUNNING  MESSAGE  IF  SCOPING  LOOP  IS  NOT 
*             SELECTED, OR THE REPEAT CONDITION MESSAGE IF SCOPING LOOP 
*             IS SELECTED.
*         9.  RESERVE THE CHANNEL TO THE CCC. 
*         10. READ A BUFFER OF 80 HEXADECIMAL WORDS OF  DATA  FROM  THE 
*             CCC  MEMORY.  THE INITIAL READ WILL START AT ADDRESS ZERO 
*             IN THE CCC MEMORY.
*         11. IF A  MEMORY PARITY ERROR CAUSES THE  COMMAND THAT  READS 
*             THE DATA FROM THE CCC  TO  ABORT,  REPORT  A  CCC  MEMORY 
*             PARITY ERROR IF SCOPING LOOP IS NOT SELECTED. 
*         12. CHECK THE DATA READ FROM THE CCC MEMORY.
*         13. REPEAT STEPS 10 THROUGH 13 UNTIL ALL LOCATIONS IN THE CCC 
*             MEMORY HAVE BEEN READ AND CHECKED.
*         14. IF  REPEAT CONDITION IS SELECTED, REPEAT STEPS  3 THROUGH 
*             14. 
*         15. INCREMENT THE CONDITION NUMBER BY ONE.
*         16. REPEAT STEPS  3 THROUGH  15 USING A DATA PATTERN OF FDFD, 
*             FBFB, F7F7, EFEF, DFDF, BFBF, AND 7F7F HEXADECIMAL. 
*         17. IF REPEAT MODULE IS SELECTED, REPEAT STEPS 1 THROUGH  17. 
*         18. IF  ANY ERRORS WERE DETECTED DURING THE  EXECUTION OF THE 
*             MODULE, SEND A MESSAGE INDICATING THE  NUMBER  OF  ERRORS 
*             DETECTED BY THE MODULE TO DISPLAY, PRINT, AND DAYFILE.
*         19. EXIT THE MODULE.
* 
*    1.3  ERROR REPORTED
* 
*         CCM04 - SLIDING ZERO TEST 
*         CCM04 ERROR(S) = *DECD
*         CCM04 EC=*DECD, LC=*DECD
* 
/    2.0  INTERNAL MODULE DOCUMENTATION 
* 
*    2.1  ENTRY CONDITIONS
* 
*         B4 REGISTER CONTAINS 100 OCTAL. 
*         B9 REGISTER CONTAINS THE NUMBER OF 80 HEXADECIMAL WORD BLOCKS 
*            REQUIRED  TO  WRITE  OR  READ  THE ENTIRE CCC MEMORY BEING 
*            TESTED.
*         B13 REGISTER CONTAINS THE MODULE NUMBER.
*         OB(70) TO OB(77) CONTAINS THE DATA PATTERNS TO BE TESTED. 
* 
*   2.2   REGISTERS AND BUFFER USAGE
* 
*         B5  - DATA PATTERN COUNTER. 
*         B6  - UPPER 8 BITS OF THE CCC MEMORY ADDRESS. 
*         B7  - LOWER 8 BITS OF THE CCC MEMORY ADDRESS. 
*         B8  - CCC MEMORY BUFFER COUNTER.
*         B10 - DATA ERROR BUFFER POINTER.
*         B11 - NUMBER OF PRODUCT OVERLAY COMMAND ABORTED.
*         B14 - MODULE ERROR COUNT. 
*         B15 - MODULE LOOP COUNT.
*         BA  - DATA BUFFER BASE ADDRESS. 
*         EA  - STANDARD USAGE. 
*         EC  - STANDARD USAGE. 
*         EM  - STANDARD USAGE. 
*         ES  - STANDARD USAGE. 
*         WC  - WORD COUNT FOR COMMANDS.
* 
*         BUFFERS USED- 
*         IB(100) TO IB(500) - INPUT DATA BUFFER. 
*         OB(100) TO OB(500) - OUTPUT DATA BUFFER.
*         OB(50)  MAX ERROR COUNT 
* 
*    2.3  SUBMODULES USED 
* 
*         CCM98A - PROCESS PRODUCT OVERLAY ERRORS.
*         CCM98C - PROCESS MODULE DETECTED ERRORS.
*         CCM98D - POST ERROR DISPLAY 
* 
* 
* -----------------DATA DIVISION--------------------------- 
* 
0  FORMAT CCM04 - SLIDING ZERO TEST 
1  FORMAT CCM04 ERROR(S) = *DECD
2  FORMAT CCM04 EC=*DECD, LC=*DECD
* 
*         DATA PATTERNS FOR THE MODULES.
* 
   DATA (OB(70),H) FEFD,FBF7,EFDF,BF7F
* 
*         EQUATES FOR THE MODULE. 
* 
   EQUATE PMC=740, CDCN=3, BLOCK1=74, BLOCK2=100
   EQUATE SETADDR=500, HSTATUS=704, WRT=702, RDD=701
   EQUATE CCMP=1, CMEMRD=4, CMEMWR=5, CPMC=6, CRES=10B
   EQUATE SETADD2=502 
* 
* -----------------INITIALIZATION-------------------------- 
* 
* 
*         DISPLAY MODULE RUNNING MESSAGE. 
* 
30 MSG 0 TO DISPLAY,PRINT    *DISPLAY RUNNING MESSAGE 
   B5=0                      *INITIALIZE PASS COUNTER 
   OB(50)=20B                *INITIALIZE MAX ERROR COUNT
   B14=0                     *INITIALIZE ERROR COUNTER
   B4=100                    *B4 REGISTER EQUALS 100
   B9=P1                     *BUILD MEMORY BLOCK COUNT
   IF(B9.EQ.0)B9=1           *IF DEFAULT MEMORY PARAMETER 
   B9=B9+1.LS.6 
   B13=4                     *MODULE NUMBER 
32 DUP OB(B5+70) TO OB(B4) FOR 400  *GENERATE PATTERN 
* 
* -----------------TEST------------------------------------ 
* 
* 
*         RESERVE CCC CH. AND MASTER CLEAR THE PROCESSOR. 
* 
34 GOSUB 70                  *RESERVE CCC CHANNEL 
   B11=CPMC                  *PMC COMMAND NUMBER
   FUNC PMC, ABT 74          *MASTER CLEAR THE CCC
* 
*         INITIALIZE REGISTERS FOR WRITING CCC MEMORY.
* 
   OB(501) = 0               *CCC ADDRESS 
   OB(502) = 200             *CCC LENGTH
   B6=SETADDR 
   GOSUB 52 
   B8=0 
35 B11=0                     *FUNCTION NUMBER COMMAND 
   FUNC WRT, ABT 74          *FUNCTION WRITE CCC
* 
*         WRITE THE DATA PATTERN INTO CCC MEMORY. 
* 
36 BA=B4                     *INIT. BASE ADDRESS OF BUFFER
   WC=400                    *INITIALIZE WRITE WORD COUNT 
   B11 = CMEMWR              *MEMORY WRITE COMMAND NUMBER 
   OUTB CHAIN WC WORDS FROM OB(BA), ABT 74       *WRITE 
   B8=B8+1
   IF(B8.EQ.BLOCK1) GOSUB 51
* 
   IF(B8.EQ.BLOCK2) GOTO 35 
* 
37 IF(B8.NE.B9) GOTO 36      *LOOP TO WRITE ALL OF MEMORY 
   B11 = 3                   *DCN COMMAND NUMBER
   DCN, ABT 74               *DISCONNECT CCC CHANNEL
* 
*         READ AND CHECK ALL LOCATIONS IN CCC MEMORY. 
* 
   B10=0                     *INITIALIZE ERROR INDEX
   B8=0                      *INITIALIZE BUFFER COUNTER 
40 GOSUB 70                  *RESERVE CCC CHANNEL 
   OB(502)=200               *CCC LENGTH
   WC=400                    *INITIALIZE WORD COUNT 
   BA=B4                     *INIT. BASE ADDRESS OF BUFFER
   B6=B8.RS.5.OR.SETADDR
   OB(501)=B8.AND.37.LS.7 
   GOSUB 52 
   B11=0                     *FUNCTION COMMAND NUMBER 
   FUNC RDD, ABT 74 
   B11=CMEMRD                *MEMORY READ COMMAND NUMBER
   INB WC WORDS TO IB(BA), ABT 74 
   GOSUB 54 
42 B11=CCMP                  *COMPARE COMMAND NUMBER
   COMPARE OB(BA) TO IB(BA) FOR WC,ABT 60  *CHECK DATA READ 
   B8=B8+1
   IF(B8.EQ.BLOCK1) B8=BLOCK2 
44 IF(B8.NE.B9) GOTO 40      *LOOP TO READ ALL OF MEMORY
* 
*         DISPLAY ANY REMAINING DATA ERRORS.
* 
46 IF(B10.NE.0) ERROR 0/2 GOSUB 66  *PROCESS DATA ERRORS
* 
* -----------------REPEAT/EXIT----------------------------- 
* 
* 
*         PROCESS REPEAT CONDITION. 
* 
   IF(ES.AND.RC.EQ.0) GOTO 50  *IF REPEAT CONDITION OFF 
   IF(B14.GE.OB(50)) OB(50)=B14+20B  *INCREASE MAX ERROR CNT
   B15=B15+1                 *UPDATE LOOP COUNT 
   GOTO 34                   *GO TO REPEAT THE CONDITION
* 
50 GOTO 32 WHILE (B5+1.NE.10B)   *LOOP TO DO EIGHT PASSES 
* 
*         PROCESS REPEAT MODULE.
* 
   IF(ES.AND.RM.NE.0)GOTO 30   *IF REPEAT MODULE SELECTED 
* 
   IF(B14.NE.0)MSG 1 (B14) TO DISPLAY,PRINT,DAYFILE 
   EXIT                        *EXIT THE MODULE 
* 
*         SUBROUTINE TO SET CCC ADDRESS AND LENGTH. 
* 
51 DCN, ABT 74
   GOSUB 70 
   B8=BLOCK2
   B6=SETADD2 
52 B11=2                     *SET CCC ADD. COMMAND NUMBER 
   FUNC B6, ABT 74
   OUTB 2 WORDS FROM OB(501), ABT 74    *WRITE
54 B11= 0                    *STATUS COMMAND NUMBER 
   FUNC HSTATUS, ABT 74      *FUNCTION CCC FOR STATUS 
   B11=4                     *INB COMMAND NUMBER
   INB 1 WORDS TO IB(504), ABT 74          *READ STATUS 
   IF(IB(504).AND.3400.EQ.0) RETURN        *IF NO STAT. ERR.
* 
   B11=11 
   B14=B14+1                 *UPDATE ERROR COUNT
   ERROR 0/1 GOSUB 66        *PROCESS ERROR 
* 
   ENDSUB GOTO 46 
* 
* -----------------ABORT PROCESSOR------------------------- 
* 
* 
*         PROCESS ABORT ON COMPARE ERROR. 
* 
60 GOTO 46 WHILE (B14+1.GE.OB(50))     *UPDATE ERROR COUNT
   BA=WC.AND.7776+BA         *BUILD BUFFER INDEX
   IB(B10)=B8                *SAVE BUFFER COUNTER 
   IB(B10+1)=BA-B4           *SAVE BUFFER INDEX 
   COPY OB(BA) TO IB(B10+2) FOR 2  *SAVE EXPECTED DATA
   COPY IB(BA) TO IB(B10+4) FOR 2  *SAVE ACTUAL DATA
   B10=B10+10                *UPDATE BUFFER POINTER 
   IF(B10.EQ.B4) ERROR 0/2 GOSUB 66  *REPORT DATA ERRORS
* 
62 BA=BA+2                   *RESET BUFFER INDEX
   WC=500-BA                 *RESET COMPARE WORD COUNT
   GOTO 42                   *RETURN TO COMPLETE DATA CHECK 
* 
*         REPORT DATA ERRORS IF NOT SCOPING.
* 
66 IF(ES.AND.SL.NE.0) RETURN   *IF SCOPING LOOP ON
* 
    CALL 98C                 *REPORT ERRORS 
* 
*         POST RUNNING MESSAGE AND RESERVE CCC CHANNEL. 
* 
70 IF(ES.AND.SL.EQ.0)MSG 0 TO DISPLAY 
   IF(ES.AND.SL.NE.0)MSG 2(B14,B15) TO DISPLAY
   B11=CRES                  *RES COMMAND NUMBER
   RES,ABT 74                *RESERVE CCC CHANNEL 
   RETURN                    *EXIT THE SUBROUTINE 
* 
*         PROCESS COMMAND ABORTS IN THE MODULE. 
* 
74 B14=B14+1                 *UPDATE ERROR COUNT
   IF(ES.AND.SL.EQ.0) CALL 98A  *PROCESS ABORT ERROR
* 
   ENDSUB GOTO 46            *GO TO END OF THE CONDITION
* 
   END 30                       *END OF THE MODULE
COMPILE                      *CCM04 SLIDING ZERO TEST 
   MODULE CCM05,6000(31,32,46,47,53,104,105,115)LOCK
***       CCM05 - SLIDING ONE TEST TEST 
**
*    1.0  EXTERNAL MODULE DOCUMENTATION 
* 
* 
* 
*    1.1  PURPOSE 
* 
*         TEST THE CCC MEMORY USING AN 8 BIT SLIDING ONE  DATA  PATTERN 
*         (0101,   0202,   0404,  0808,  1010,  2020  ,4040,  AND  8080 
*         HEXADECIMAL). 
* 
* 
*    1.2  METHOD
* 
*         1.  DISPLAY THE RUNNING MESSAGE FOR THE MODULE. 
*         2.  INITIALIZE THE CONDITION NUMBER BY SETTING IT TO ZERO.
*         3.  GENERATE THE DATA BUFFER OF THE DATA PATTERN TO  BE  USED 
*             TO  TEST  THE CCC MEMORY FOR THIS CONDITION.  THE INITIAL 
*             DATA PATTERN GENERATED WILL BE 0101 HEXADECIMAL.
*         4.  DISPLAY  THE  RUNNING  MESSAGE  IF  SCOPING  LOOP  IS NOT 
*             SELECTED, OR THE REPEAT CONDITION MESSAGE IF SCOPING LOOP 
*             IS SELECTED.
*         5.  RESERVE THE CHANNEL TO THE CCC. 
*         6.  MASTER CLEAR THE PROCESSOR IN THE CCC.
*         7.  WRITE THE DATA PATTERN INTO  ALL  LOCATIONS  IN  THE  CCC 
*             MEMORY. 
*         8.  DISPLAY  THE  RUNNING  MESSAGE  IF  SCOPING  LOOP  IS NOT 
*             SELECTED, OR THE REPEAT CONDITION MESSAGE IF SCOPING LOOP 
*             IS SELECTED.
*         9.  RESERVE THE CHANNEL TO THE CCC. 
*         10. READ  A  BUFFER  OF 80 HEXADECIMAL WORDS OF DATA FROM THE 
*             CCC MEMORY.  THE INITIAL READ WILL START AT ADDRESS  ZERO 
*             IN THE CCC MEMORY.
*         11. IF A MEMORY PARITY ERROR CAUSES THE  COMMAND  THAT  READS 
*             THE  DATA  FROM  THE  CCC  TO  ABORT, REPORT A CCC MEMORY 
*             PARITY ERROR IF SCOPING LOOP IS NOT SELECTED. 
*         12. CHECK THE DATA READ FROM THE CCC MEMORY.
*         13. REPEAT STEPS 10 THROUGH 13 UNTIL ALL LOCATIONS IN THE CCC 
*             MEMORY HAVE BEEN READ AND CHECKED.
*         14. IF REPEAT CONDITION IS SELECTED, REPEAT STEPS  3  THROUGH 
*             14. 
*         15. INCREMENT THE CONDITION NUMBER BY ONE.
*         16. REPEAT  STEPS 3 THROUGH 15 USING A DATA PATTERN OF  0202, 
*             0404, 0808, 1010, 2020, 4040, AND 8080 HEXADECIMAL. 
*         17. IF REPEAT MODULE IS SELECTED, REPEAT STEPS 1 THROUGH  17. 
*         18. IF ANY ERRORS WERE DETECTED DURING THE EXECUTION  OF  THE 
*             MODULE,  SEND  A  MESSAGE INDICATING THE NUMBER OF ERRORS 
*             DETECTED BY THE MODULE TO DISPLAY, PRINT, AND DAYFILE.
*         19. EXIT THE MODULE.
* 
*    1.3  ERROR REPORTED
* 
*         CCM05 - SLIDING ONE TEST
*         CCM05 ERROR(S) = *DECD
*         CCM05 EC=*DECD, LC=*DECD
* 
/   2.0  INTERNAL MODULE DOCUMENTATION
* 
*   2.1   ENTRY CONDITIONS
* 
*         B4 REGISTER CONTAINS 100 OCTAL. 
*         B9 REGISTER CONTAINS THE NUMBER OF 80 HEXADECIMAL WORD BLOCKS 
*            REQUIRED TO WRITE OR READ  THE  ENTIRE  CCC  MEMORY  BEING 
*            TESTED.
*         B13 REGISTER CONTAINS THE MODULE NUMBER.
*         OB(70) TO OB(77) CONTAINS THE DATA PATTERNS TO BE TESTED. 
* 
*    2.2  REGISTER AND BUFFER USAGE 
* 
*         B5  - DATA PATTERN COUNTER. 
*         B6  - UPPER 8 BITS OF THE CCC MEMORY ADDRESS. 
*         B7  - LOWER 8 BITS OF THE CCC MEMORY ADDRESS. 
*         B8  - CCC MEMORY BUFFER COUNTER.
*         B10 - DATA ERROR BUFFER POINTER.
*         B11 - NUMBER OF PRODUCT OVERLAY COMMAND ABORTED.
*         B14 - MODULE ERROR COUNT. 
*         B15 - MODULE LOOP COUNT.
*         BA  - DATA BUFFER BASE ADDRESS. 
*         EA  - STANDARD USAGE. 
*         EC  - STANDARD USAGE. 
*         EM  - STANDARD USAGE. 
*         ES  - STANDARD USAGE. 
*         WC  - WORD COUNT FOR COMMANDS.
* 
*         BUFFERS USED- 
*         IB(100) TO IB(500) - INPUT DATA BUFFER. 
*         OB(100) TO OB(500) - OUTPUT DATA BUFFER.
*         OB(50)  MAX ERROR COUNT 
* 
*    2.3  SUBMODULES USED 
*         CCM98A - PROCESS PRODUCT OVERLAY ERRORS.
*         CCM98C - PROCESS MODULE DETECTED ERRORS.
*         CCM98D - POST ERROR DISPLAY 
*         CCM051 - OUTPUT DATA
* 
* -----------------DATA DIVISION--------------------------- 
* 
0  FORMAT CCM05 - SLIDING ONE TEST
1  FORMAT CCM05 ERROR(S) = *DECD
2  FORMAT CCM05 EC=*DECD, LC=*DECD
* 
*         DATA PATTERNS FOR THE MODULES.
* 
   DATA (OB(70),H) 0102,0408,1020,4080
* 
*         EQUATES FOR THE MODULE. 
* 
   EQUATE PMC=740, CDCN=3, BLOCK1=74, BLOCK2=100
   EQUATE SETADDR=500, HSTATUS=704, WRT=702, RDD=701
   EQUATE CCMP=1, CMEMRD=4, CPMC=6, CRES=10B
   EQUATE SETADD2=502 
* 
* -----------------INITIALIZATION-------------------------- 
* 
* 
*         DISPLAY MODULE RUNNING MESSAGE. 
* 
30 MSG 0 TO DISPLAY,PRINT    *DISPLAY RUNNING MESSAGE 
   B5=0                      *INITIALIZE PASS COUNTER 
   B3=0 
   OB(50)=20B                *INITIALIZE MAX ERROR COUNT
   B14=0                     *INITIALIZE ERROR COUNTER
   B4=100                    *B4 REGISTER EQUALS 100
   B9=P1                     *BUILD MEMORY BLOCK COUNT
   IF(B9.EQ.0)B9=1           *IF DEFAULT MEMORY PARAMETER 
   B9=B9+1.LS.6 
   B13=5                     *MODULE NUMBER 
32 DUP OB(B5+70) TO OB(B4) FOR 400  *GENERATE PATTERN 
* 
* -----------------TEST------------------------------------ 
* 
* 
*         RESERVE CCC CH. AND MASTER CLEAR THE PROCESSOR. 
* 
34 GOSUB 70                  *RESERVE CCC CHANNEL 
   B11=CPMC                  *PMC COMMAND NUMBER
   FUNC PMC, ABT 74          *MASTER CLEAR THE CCC
* 
*         INITIALIZE REGISTERS FOR WRITING CCC MEMORY.
* 
   OB(501) = 0               *CCC ADDRESS 
   OB(502) = 200             *CCC LENGTH
   B6=SETADDR 
   GOSUB 52 
* 
*         WRITE THE DATA PATTERN INTO CCC MEMORY. 
* 
   B1=0 
36 CALL 051 
   IF(B1.EQ.1) GOTO 74
   B13=05                    *MODULE NUMBER 
   IF(B1.EQ.2) GOTO 55
* 
*         READ AND CHECK ALL LOCATIONS IN CCC MEMORY. 
* 
   B10=0                     *INITIALIZE ERROR INDEX
   B8=0                      *INITIALIZE BUFFER COUNTER 
40 GOSUB 70                  *RESERVE CCC CHANNEL 
   OB(502)=200               *CCC LENGTH
   WC=400                    *INITIALIZE WORD COUNT 
   BA=B4                     *INIT. BASE ADDRESS OF BUFFER
   B6=B8.RS.5.OR.SETADDR
   OB(501)=B8.AND.37.LS.7 
   GOSUB 52 
   B11=0                     *FUNCTION COMMAND NUMBER 
   FUNC RDD, ABT 74 
   B11=CMEMRD                *MEMORY READ COMMAND NUMBER
   INB WC WORDS TO IB(BA), ABT 74 
   GOSUB 54 
42 B11=CCMP                  *COMPARE COMMAND NUMBER
   COMPARE OB(BA) TO IB(BA) FOR WC,ABT 60  *CHECK DATA READ 
   B8=B8+1
   IF(B8.EQ.BLOCK1) B8=BLOCK2 
44 IF(B8.NE.B9) GOTO 40      *LOOP TO READ ALL OF MEMORY
* 
*         DISPLAY ANY REMAINING DATA ERRORS.
* 
46 IF(B10.NE.0) ERROR 0/2 GOSUB 66  *PROCESS DATA ERRORS
* 
* 
* -----------------REPEAT/EXIT----------------------------- 
* 
*         PROCESS REPEAT CONDITION. 
* 
   IF(ES.AND.RC.EQ.0) GOTO 50  *IF REPEAT CONDITION OFF 
   IF(B14.GE.OB(50)) OB(50)=B14+20B  *INCREASE MAX ERROR COUNT
   B15=B15+1                 *UPDATE LOOP COUNT 
   GOTO 34                   *GO TO REPEAT THE CONDITION
50 GOTO 32 WHILE (B5+1.NE.10B)   *LOOP TO DO TWO PASSES 
* 
*         PROCESS REPEAT MODULE.
* 
   IF(ES.AND.RM.NE.0)GOTO 30   *IF REPEAT MODULE SELECTED 
   IF(B14.NE.0)MSG 1 (B14) TO DISPLAY,PRINT,DAYFILE 
   EXIT                      *EXIT THE MODULE 
* 
*         SUBROUTINE TO SET CCC ADDRESS AND LENGTH. 
* 
52 B11=2                     *SET CCC ADDRESS COMMAND NUMBER
   FUNC B6, ABT 74
   OUTB 2 WORDS FROM OB(501), ABT 74    *WRITE
54 B11= 0                    *STATUS COMMAND NUMBER 
   FUNC HSTATUS, ABT 74      *FUNCTION CCC FOR STATUS 
   B11=4                     *INB COMMAND NUMBER
   INB 1 WORDS TO IB(504), ABT 74          *READ STATUS 
   IF(IB(504).AND.3400.EQ.0) RETURN        *IF NO STATUS ERROR
   B11=11 
   B14=B14+1                 *UPDATE ERROR COUNT
55 ERROR 0/1 GOSUB 66        *PROCESS ERROR 
   ENDSUB GOTO 46 
* 
* -----------------ABORT PROCESSOR------------------------- 
* 
* 
*         PROCESS ABORT ON COMPARE ERROR. 
* 
60 GOTO 46 WHILE (B14+1.GE.OB(50))     *UPDATE ERROR COUNT
   BA=WC.AND.7776+BA         *BUILD BUFFER INDEX
   IF(ES.AND.SL.NE.0) GOTO 62  *IF SCOPING LOOP ON
   IB(B10)=B8                *SAVE BUFFER COUNTER 
   IB(B10+1)=BA-B4           *SAVE BUFFER INDEX 
   COPY OB(BA) TO IB(B10+2) FOR 2  *SAVE EXPECTED DATA
   COPY IB(BA) TO IB(B10+4) FOR 2  *SAVE ACTUAL DATA
   B10=B10+10                *UPDATE BUFFER POINTER 
   IF(B10.EQ.B4) ERROR 0/2 GOSUB 66  *REPORT DATA ERRORS
* 
62 BA=BA+2                   *RESET BUFFER INDEX
   WC=500-BA                 *RESET COMPARE WORD COUNT
   GOTO 42                   *RETURN TO COMPLETE DATA CHECK 
* 
*         REPORT DATA ERRORS IF NOT SCOPING.
* 
66 IF(ES.AND.SL.NE.0) RETURN   *IF SCOPING LOOP ON
    CALL 98C                 *REPORT ERRORS 
* 
*         POST RUNNING MESSAGE AND RESERVE CCC CHANNEL. 
* 
70 IF(ES.AND.SL.EQ.0)MSG 0 TO DISPLAY 
   IF(ES.AND.SL.NE.0)MSG 2(B14,B15) TO DISPLAY
   B11=CRES                  *RES COMMAND NUMBER
   RES,ABT 74                *RESERVE CCC CHANNEL 
   RETURN                    *EXIT THE SUBROUTINE 
* 
*         PROCESS COMMAND ABORTS IN THE MODULE. 
* 
74 B14=B14+1                 *UPDATE ERROR COUNT
   IF(ES.AND.SL.EQ.0) CALL 98A  *PROCESS ABORT ERROR
   ENDSUB GOTO 46            *GO TO END OF THE CONDITION
   END 30                    *END OF THE MODULE 
COMPILE                      *CCM05 SLIDING ONE TEST
   MODULE CCM051,6000(31,32,46,47,53,104,105,115)LOCK 
***       CCM051 - OUTPUT DATA
**
*    1.0  EXTERNAL MODULE DOCUMENTATION 
* 
*    1.1  PURPOSE 
* 
*         OUTPUT DATA TO CCC MEMORY 
* 
*    1.2  METHOD
* 
*         ALREADY DISCRIBED IN PRIMARY MODULES. 
* 
/    2.0  INTERNAL MODULE DOCUMENTATION 
* 
*    2.1  ENTRY CONDITIONS
* 
*         B12 IS SET TO DESIGNATE CALLING MODULE
*         B4 HAS THE BUFFER ADDRESS 
* 
*    2.2  REGISTER AND BUFFER USAGE 
* 
*         B1 - ERROR FLAG 
*         B3 - DATA GENERATOR INDEX 
*         B6 - ADDRESS FUNCTION 
*         B8 - CCC MEMORY BUFFER COUNTER
*         B11- NUMBER OF PRODUCT OVERLAY COMMAND ABORTED
*         B12- MODULE FLAG
* 
*         BUFFERS USED- 
*         OB(100) TO OB(500) - OUTPUT DATA BUFFER.
* 
* 
*    2.3  SUBMODULES USED- NONE 
* 
* 
* 
   EQUATE CMEMWR=5, CRES=10B, WRT=702, BLOCK1=74
   EQUATE BLOCK2=100, SETADD2=502, CMEMWR=5 
   EQUATE SETADD2=502, HSTATUS=704
* 
*           RESERVE THE CHANNEL 
* 
20 B13=051D 
   B11=CRES 
   RES, ABT 74
   B8=0 
* 
*           WRITE FUNCTION
* 
35 B11=0                     *FUNCTION NUMBER COMMAND 
   FUNC WRT, ABT 74          *FUNCTION WRITE CCC
* 
*           GENERATE DATA 
* 
36 IF(B12.EQ.1) GOSUB 54     *GENERATE DATA FOR CCM05 
   IF(B12.EQ.2) GOSUB 64     *GENERATE DATA FOR CCM06 
* 
*           OUTPUT DATA 
* 
   BA=B4                     *INIT. BASE ADDRESS OF BUFFER
   WC=400                    *INITIALIZE WRITE WORD COUNT 
   B11 = CMEMWR              *MEMORY WRITE COMMAND NUMBER 
   OUTB CHAIN WC WORDS FROM OB(BA), ABT 74       *WRITE 
   B8=B8+1
   IF(B8.EQ.BLOCK1) GOSUB 51  *IF FIRST BLOCK OF MEMORY COMPLETE
   IF(B8.EQ.BLOCK2) GOTO 35   * START SECOND BLOCK
37 IF(B8.NE.B9) GOTO 36 
* 
/----------DISCONNECT CHANNEL 
* 
   B11 = 3                   *DCN COMMAND NUMBER
   DCN, ABT 74               *DISCONNECT CCC CHANNEL
   EXIT 
* 
/-----------SET ADDRESS FOR SECOND BLOCK
* 
51 DCN, ABT 74
   RES, ABT 74
   B8=BLOCK2
   B6=SETADD2 
   B11=2                     *SET CCC ADDRESS COMMAND NUMBER
   FUNC B6, ABT 74
   OUTB 2 WORDS FROM OB(501), ABT 74    *WRITE
   B11= 0                    *STATUS COMMAND NUMBER 
   FUNC HSTATUS, ABT 74      *FUNCTION CCC FOR STATUS 
   B11=4                     *INB COMMAND NUMBER
   INB 1 WORDS TO IB(504), ABT 74          *READ STATUS 
   IF(IB(504).AND.3400.EQ.0) RETURN        *IF NO STATUS ERROR
   B1=2 
   B11=11 
   B14=B14+1                 *UPDATE ERROR COUNT
   ENDSUB 
   EXIT 
* 
*            GENERATE DATA FOR CCM05
* 
54 IF(B8.AND.177.EQ.0) RES,ABT 74     RES CCC CHANNEL 
   B6=B8.RS.1                *SET CCC ADDRESS 
   B7=B8.AND.1.LS.7 
   B0=0                      *INITIALIZE COUNTER
56 OB(B0+100)=B6             *UPPER 8 BITS OF ADDRESS 
   OB(B0+101)=B0.RS.1+B7     *LOWER 8 BITS OF ADDRESS 
   GOTO 56 WHILE (B0+2.NE.400)  *LOOP TO DO 80H ADDRESSES 
   RETURN                    *EXIT THE SUBROUTINE 
* 
*            GENERATE DATA FOR CCM06
* 
64 RANDOM TO OB(100) FOR 400,START OB(500)  *GENERATE DATA
   OB(500)=OB(477)           *SAVE SEED NUMBER
   B0=B4                     *INITIALIZE BUFFER POINTER 
66 OB(B0)=OB(B0).AND.377     *MASK DATA 
   GOTO 66 WHILE (B0+1.NE.500)  *LOOP TO DO BUFFER
   RETURN                    *EXIT THE SUBROUTINE 
* 
*             EXIT CONDITION
* 
74 B1=1 
75 EXIT 
   END 20 
COMPILE 
   MODULE CCM06,6000(31,32,46,47,53,104,105,115)LOCK
***       CCM06 - ADDRESSING TEST 
**
*    1.0  EXTERNAL MODULE DOCUMENTATION 
* 
*    1.1  PURPOSE-
* 
*         TEST THE ADDRESSING IN THE CCC MEMORY.
* 
*    1.2  METHOD- 
* 
*         1.  DISPLAY  THE  RUNNING  MESSAGE  IF  SCOPING  LOOP  IS NOT 
*             SELECTED, OR THE REPEAT CONDITION MESSAGE IF SCOPING LOOP 
*             IS SELECTED.
*         2.  RESERVE THE CHANNEL TO THE CCC. 
*         3.  MASTER CLEAR THE PROCESSOR IN THE CCC.
*         4.  IF THE NUMBER OF 80 HEXADECIMAL WORDS BLOCK WRITTEN  INTO 
*             THE  CCC  MEMORY  SO  FAR  EQUALS 0, OR 200 OCTAL, OR 400 
*             OCTAL, OR 600  OCTAL,  DISPLAY  THE  RUNNING  MESSAGE  IF 
*             SCOPING  LOOP  IS  NOT  SELECTED  OR THE REPEAT CONDITION 
*             MESSAGE IF SCOPING  LOOP  IS  SELECTED  AND  RESERVE  THE 
*             CHANNEL TO THE CCC. 
*         5.  GENERATE  THE  ADDRESSING  DATA  PATTERN   FOR   THE   80 
*             HEXADECIMAL MEMORY LOCATIONS TO BE WRITTEN IN THE CCC.
*         6.  WRITE THE ADDRESSING DATA PATTERN IN THE DATA BUFFER INTO 
*             THE 80 HEXADECIMAL MEMORY LOCATIONS IN THE CCC. 
*         7.  REPEAT STEPS  5  THROUGH  7  UNTIL THE  ENTIRE  MEMORY IS 
*             WRITTEN IN THE CCC. 
*         8.  IF THE NUMBER OF 80 HEXADECIMAL WORDS BLOCK READ FROM THE 
*             CCC  MEMORY  SO FAR EQUALS 0, OR 200 OCTAL, OR 400 OCTAL, 
*             OR 600 OCTAL, DISPLAY THE RUNNING MESSAGE IF SCOPING LOOP 
*             IS  NOT  SELECTED  OR  THE  REPEAT  CONDITION  MESSAGE IF 
*             SCOPING LOOP IS SELECTED AND RESERVE THE CHANNEL  TO  THE 
*             CCC.
*         9.  GENERATE  THE  ADDRESSING  DATA  PATTERN   FOR   THE   80 
*             HEXADECIMAL MEMORY LOCATIONS TO BE READ FROM THE CCC. 
*         10. READ A BUFFER OF DATA FROM THE CCC MEMORY.   THE  INITIAL 
*             READ WILL START AT ADDRESS ZERO IN THE CCC MEMORY.
*         11. IF A MEMORY PARITY ERROR CAUSES THE  COMMAND  THAT  READS 
*             THE  DATA  FROM  THE  CCC  TO  ABORT, REPORT A CCC MEMORY 
*             PARITY ERROR IF SCOPING LOOP IS NOT SELECTED. 
*         12. CHECK  THE  ADDRESSING  DATA  PATTERN  READ  FROM THE CCC 
*             MEMORY. 
*         13. REPEAT STEPS 8 THROUGH  13 UNTIL ALL LOCATIONS IN THE CCC 
*             MEMORY HAVE BEEN READ AND CHECKED.
*         14. IF  REPEAT  CONDITION IS SELECTED, REPEAT STEPS 2 THROUGH 
*             14. 
*         15. IF REPEAT MODULE IS SELECTED, REPEAT STEPS 1 THROUGH  15. 
*         16. IF ANY ERRORS WERE DETECTED DURING THE EXECUTION  OF  THE 
*             MODULE,  SEND  A  MESSAGE INDICATING THE NUMBER OF ERRORS 
*             DETECTED BY THE MODULE TO DISPLAY, PRINT, AND DAYFILE.
*         17. EXIT THE MODULE.
* 
*    1.3  ERROR REPORTED
* 
*         CCM06 - ADDRESSING TEST 
*         CCM06 ERROR(S) = *DECD
*         CCM06 EC=*DECD, LC=*DECD
* 
/    2.0  INTERNAL MODULE DOCUMENTATION 
* 
*    2.1  ENTRY CONDITIONS
* 
*         B4 REGISTER CONTAINS 100 OCTAL. 
*         B9 REGISTER CONTAINS THE NUMBER OF 80 HEXADECIMAL WORD BLOCKS 
*            REQUIRED TO WRITE OR READ  THE  ENTIRE  CCC  MEMORY  BEING 
*            TESTED.
*         B13 REGISTER CONTAINS THE MODULE NUMBER.
* 
*    2.2  REGISTER AND BUFFER USAGE 
* 
*         B1  - ABORT FLAG
*         B5  - DATA PATTERN COUNTER. 
*         B6  - UPPER 8 BITS OF THE CCC MEMORY ADDRESS. 
*         B7  - LOWER 8 BITS OF THE CCC MEMORY ADDRESS. 
*         B8  - CCC MEMORY BUFFER COUNTER.
*         B10 - DATA ERROR BUFFER POINTER.
*         B11 - NUMBER OF PRODUCT OVERLAY COMMAND ABORTED.
*         B12 - MODULE FLAG 
*         B14 - MODULE ERROR COUNT. 
*         B15 - MODULE LOOP COUNT.
*         BA  - DATA BUFFER BASE ADDRESS. 
*         EA  - STANDARD USAGE. 
*         EC  - STANDARD USAGE. 
*         EM  - STANDARD USAGE. 
*         ES  - STANDARD USAGE. 
*         WC  - WORD COUNT FOR COMMANDS.
* 
*         BUFFERS USED- 
*         IB(100) TO IB(500) - INPUT DATA BUFFER. 
*         OB(100) TO OB(500) - OUTPUT DATA BUFFER.
*         OB(50)  MAX ERROR COUNT 
* 
*    2.3  SUBMODULES CALLED-
* 
*         CCM98A - PROCESS PRODUCT OVERLAY ERRORS.
*         CCM98C - PROCESS MODULE DETECTED ERRORS.
*         CCM98D - POST ERROR DISPLAY 
*         CCM051 - OUTPUT DATA
* 
* -----------------DATA DIVISION--------------------------- 
* 
0  FORMAT CCM06 - ADDRESSING TEST 
1  FORMAT CCM06 ERROR(S) = *DECD
2  FORMAT CCM06 EC=*DECD, LC=*DECD
* 
*         EQUATES FOR THE MODULE. 
* 
   EQUATE PMC=740, CDCN=3, BLOCK1=74, BLOCK2=100
   EQUATE SETADDR=500, HSTATUS=704, WRT=702, RDD=701
   EQUATE CCMP=1, CMEMRD=4, CPMC=6, CRES=10B
   EQUATE SETADD2=502 
* 
* -----------------INITIALIZATION-------------------------- 
* 
* 
*         DISPLAY MODULE RUNNING MESSAGE. 
* 
30 MSG 0 TO DISPLAY,PRINT    *DISPLAY RUNNING MESSAGE 
   OB(50)=20B                *INITIALIZE MAX ERROR COUNT
   B14=0                     *INITAILIZE ERROR COUNT
   B4=100                    *B4 REGISTER EQUALS 100
   B9=200                    *BUILD MEMORY BLOCK COUNT
   B13=6                     *MODULE NUMBER 
* 
* -----------------TEST------------------------------------ 
* 
* 
*         RESERVE CCC CH. AND MASTER CLEAR THE PROCESSOR. 
* 
32 GOSUB 70                  *RESERVE CCC CHANNEL 
   B11=CPMC                  *PMC COMMAND NUMBER
   FUNC PMC, ABT 74          *MASTER CLEAR THE CCC
* 
*         INITIALIZE REGISTERS FOR WRITING CCC MEMORY.
* 
   B8=0                      *INITIALIZE BUFFER COUNTER 
   OB(501)=0                 *CCC ADDRESS 
   OB(502)=200               *CCC LENGTH
   B6=SETADDR 
   GOSUB 52                  *SET ADDRESS IN CCC
   B1=0 
   B12=1
35 CALL 051                  *INIT. BASE ADDRESS OF BUFFER
   IF(B1.EQ.1) GOTO 74
   B13=06                    *MODULE NUMBER 
   IF(B1.EQ.2) GOTO 55
  
* 
*         READ AND CHECK ALL LOCATIONS IN CCC MEMORY. 
* 
   B10=0                     *INITIALIZE ERROR INDEX
   B8=0                      *INITIALIZE BUFFER COUNTER 
36 GOSUB 70                  *RESERVE CCC CHANNEL 
   OB(502)=200               *CCC LENGTH
   GOSUB 54 
   WC=400                    *INITIALIZE WORD COUNT 
   BA=B4                     *INIT. BASE ADDRESS OF BUFFER
   B6=B8.RS.5.OR.SETADDR
   OB(501)=B8.AND.37.LS.7 
   GOSUB 52 
   B11=0                     *FUNCTION COMMAND NUMBER 
   FUNC RDD, ABT 74 
   B11=CMEMRD                *MEMORY READ COMMAND NUMBER
   INB WC WORDS TO IB(BA), ABT 74 
   GOSUB 53 
40 B11=CCMP                  *COMPARE COMMAND NUMBER
   COMPARE OB(BA) TO IB(BA) FOR WC,ABT 60  *CHECK DATA READ 
   B8=B8+1
   IF(B8.EQ.BLOCK1) B8=BLOCK2 
41 IF(B8.NE.B9) GOTO 36      *LOOP TO READ ALL OF MEMORY
* 
*         DISPLAY ANY REMAINING DATA ERRORS.
* 
42 IF(B10.NE.0) ERROR 0/2 GOSUB 66  *PROCESS DATA ERRORS
* 
*         PROCESS REPEAT CONDITION. 
* 
   IF(ES.AND.RC.EQ.0) GOTO 44  *IF REPEAT CONDITION OFF 
   IF(B14.GE.OB(50)) OB(50)=B14+20B  *INCREASE MAX ERROR COUNT
   B15=B15+1                 *UPDATE LOOP COUNT 
   GOTO 32                   *GO TO REPEAT THE CONDITION
* 
* -----------------REPEAT/EXIT----------------------------- 
* 
* 
*         PROCESS REPEAT MODULE.
* 
44 IF(ES.AND.RM.NE.0)GOTO 30   *IF REPEAT MODULE SELECTED 
   IF(B14.NE.0)MSG 1 (B14) TO DISPLAY,PRINT,DAYFILE 
   EXIT                      *EXIT THE MODULE 
* 
*         SUBROUTINE TO SET CCC ADDRESS AND LENGTH. 
* 
52 B11=2                     *SET CCC ADDRESS COMMAND NUMBER
   FUNC B6, ABT 74
   OUTB 2 WORDS FROM OB(501), ABT 74    *WRITE
53 B11= 0                    *STATUS COMMAND NUMBER 
   FUNC HSTATUS, ABT 74      *FUNCTION CCC FOR STATUS 
   B11=4                     *INB COMMAND NUMBER
   INB 1 WORDS TO IB(504), ABT 74          *READ STATUS 
   IF(IB(504).AND.3400.EQ.0) RETURN        *IF NO STATUS ERROR
   B11=11 
   B14=B14+1                 *UPDATE ERROR COUNT
55 ERROR 0/1 GOSUB 66        *PROCESS ERROR 
   ENDSUB GOTO 42 
* 
*         GENERATE ADDRESSING DATA PATTERN. 
* 
54 IF(B8.AND.177.EQ.0) GOSUB 70  *RESERVE CCC CHANNEL 
   B6=B8.RS.1                *SET CCC ADDRESS 
   B7=B8.AND.1.LS.7 
   B0=0                      *INITIALIZE COUNTER
56 OB(B0+100)=B6             *UPPER 8 BITS OF ADDRESS 
   OB(B0+101)=B0.RS.1+B7     *LOWER 8 BITS OF ADDRESS 
   GOTO 56 WHILE (B0+2.NE.400)  *LOOP TO DO 80H ADDRESSES 
   RETURN                    *EXIT THE SUBROUTINE 
* 
* -----------------ABORT PROCESSOR------------------------- 
* 
*         PROCESS ABORT ON COMPARE ERROR. 
* 
60 GOTO 42 WHILE (B14+1.GE.OB(50))     *UPDATE ERROR COUNT
   BA=WC.AND.7776+BA         *BUILD BUFFER INDEX
   IF(ES.AND.SL.NE.0) GOTO 62  *IF SCOPING LOOP ON
   IB(B10)=B8                *SAVE BUFFER COUNTER 
   IB(B10+1)=BA-B4           *SAVE BUFFER INDEX 
   COPY OB(BA) TO IB(B10+2) FOR 2  *SAVE EXPECTED DATA
   COPY IB(BA) TO IB(B10+4) FOR 2  *SAVE ACTUAL DATA
   B10=B10+10                *UPDATE BUFFER POINTER 
   IF(B10.EQ.B4) ERROR 0/2 GOSUB 66  *REPORT DATA ERRORS
* 
62 BA=BA+2                   *RESET BUFFER INDEX
   WC=500-BA                 *RESET COMPARE WORD COUNT
   GOTO 40                   *RETURN TO COMPLETE DATA CHECK 
* 
*         REPORT DATA ERRORS IF NOT SCOPING.
* 
66 IF(ES.AND.SL.NE.0) RETURN   *IF SCOPING LOOP ON
    CALL 98C                 *REPORT ERRORS 
* 
*         POST RUNNING MESSAGE AND RESERVE CCC CHANNEL. 
* 
70 IF(ES.AND.SL.EQ.0)MSG 0 TO DISPLAY 
   IF(ES.AND.SL.NE.0)MSG 2(B14,B15) TO DISPLAY
   B11=CRES                  *RES COMMAND NUMBER
   RES,ABT 74                *RESERVE CCC CHANNEL 
   RETURN                    *EXIT THE SUBROUTINE 
* 
*         PROCESS COMMAND ABORTS IN THE MODULE. 
* 
74 B14=B14+1                 *UPDATE ERROR COUNT
   IF(ES.AND.SL.EQ.0) CALL 98A  *PROCESS ABORT ERROR
   ENDSUB GOTO 42            *GO TO END OF THE CONDITION
   END 30                    *END OF THE MODULE 
COMPILE                      *CCM06 ADDRESSING TEST 
   MODULE CCM07,6000(31,32,46,47,53,104,105,115)LOCK
***       CCM07 - RANDOM DATA TEST
**
*    1.0  EXTERNAL MODULE DOCUMENTATION 
* 
*    1.1  PURPOSE 
* 
*         TEST THE CCC MEMORY USING RANDOM DATA PATTERNS. 
* 
*    1.2  METHOD
* 
*         1.  DISPLAY THE RUNNING MESSAGE FOR THE MODULE. 
*         2.  SET THE CONDITION NUMBER TO ZERO. 
*         3.  INTILIALIZE THE RANDOM NUMBER GENERATOR  SEED  NUMBER  IN 
*             THE B3 REGISTER FROM THE REAL TIME CLOCK. 
*         4.  DISPLAY THE  RUNNING  MESSAGE  IF  SCOPING  LOOP  IS  NOT 
*             SELECTED, OR THE REPEAT CONDITION MESSAGE IF SCOPING LOOP 
*             IS SELECTED.
*         5.  RESERVE THE CHANNEL TO THE CCC. 
*         6.  MASTER CLEAR THE PROCESSOR IN THE CCC.
*         7.  IF  THE NUMBER OF 80 HEXADECIMAL WORDS BLOCK WRITTEN INTO 
*             THE CCC MEMORY SO FAR EQUALS 0,  OR  200  OCTAL,  OR  400 
*             OCTAL,  OR  600  OCTAL,  DISPLAY  THE  RUNNING MESSAGE IF 
*             SCOPING LOOP IS NOT  SELECTED  OR  THE  REPEAT  CONDITION 
*             MESSAGE  IF  SCOPING  LOOP  IS  SELECTED  AND RESERVE THE 
*             CHANNEL TO THE CCC. 
*         8.  GENERATE  THE  RANDOM DATA PATTERN FOR THE 80 HEXADECIMAL 
*             MEMORY LOCATIONS TO BE WRITTEN INTO THE CCC.
*         9.  WRITE THE RANDOM DATA PATTERN IN THE DATA BUFFER INTO THE 
*             80 HEXADECIMAL MEMORY LOCATIONS IN THE CCC. 
*        10.  REPEAT  STEPS  8  THROUGH  9  UNTIL THE ENTIRE MEMORY IS
*             WRITTEN IN THE CCC. 
*        11.  IF THE NUMBER OF 80 HEXADECIMAL WORDS BLOCK READ FROM THE 
*             CCC MEMORY SO FAR EQUALS 0, OR 200 OCTAL, OR  400  OCTAL, 
*             OR 600 OCTAL, DISPLAY THE RUNNING MESSAGE IF SCOPING LOOP 
*             IS NOT  SELECTED  OR  THE  REPEAT  CONDITION  MESSAGE  IF 
*             SCOPING  LOOP  IS SELECTED AND RESERVE THE CHANNEL TO THE 
*             CCC.
*        12.  GENERATE  THE RANDOM DATA PATTERN FOR THE 80 HEXADECIMAL
*             MEMORY LOCATIONS TO BE READ FROM THE CCC. 
*        13.  READ  A  BUFFER OF DATA FROM THE CCC MEMORY.  THE INITIAL 
*             READ WILL START AT ADDRESS ZERO IN THE CCC MEMORY.
*        14.  IF  A  MEMORY PARITY ERROR CAUSES THE COMMAND THAT READS
*             THE DATA FROM THE CCC  TO  ABORT,  REPORT  A  CCC  MEMORY 
*             PARITY ERROR IF SCOPING LOOP IS NOT SELECTED. 
*        15.  CHECK THE RANDOM DATA PATTERN READ FROM THE CCC MEMORY. 
*        16.  REPEAT STEPS 11 THROUGH 15 UNTIL ALL LOCATIONS IN THE CCC 
*             MEMORY HAVE BEEN READ AND CHECKED.
*        17.  IF  REPEAT  CONDITION IS SELECTED, REPEAT STEPS 4 THROUGH 
*             16. 
*        18.  INCREMENT  THE  CONDITION  NUMBER  BY  ONE  AND  IF  THE
*             CONDITION NUMBER IS NOT EQUAL TO THREE,  REPEAT  STEPS  2 
*             THROUGH 20. 
*        19.  IF REPEAT MODULE IS SELECTED, REPEAT STEPS 1 THROUGH  18. 
*        20.  IF  ANY ERRORS WERE DETECTED DURING THE EXECUTION OF THE
*             MODULE, SEND A MESSAGE INDICATING THE  NUMBER  OF  ERRORS 
*             DETECTED BY THE MODULE TO DISPLAY, PRINT, AND DAYFILE.
*        21.  EXIT THE MODULE.
* 
*    1.3  ERRORS REPORTED 
* 
*         CCM07 - RANDOM DATA TEST
*         CCM07 ERROR(S) = *DECD
*         CCM07 EC=*DECD, LC=*DECD
* 
/    2.0  INTERNAL MODULE DOCUMENTATION 
* 
*         ENTRY CONDITIONS
* 
*         B4 REGISTER CONTAINS 100 OCTAL. 
*         B9 REGISTER CONTAINS THE NUMBER OF 80 HEXADECIMAL WORD BLOCKS 
*            REQUIRED  TO  WRITE  OR  READ  THE ENTIRE CCC MEMORY BEING 
*            TESTED.
*         B13 REGISTER CONTAINS THE MODULE NUMBER.
* 
*    2.2  REGISTERS USED- 
* 
*         B1  - ABORT FLAG
*         B3  - RANDOM SEED 
*         B5  - DATA PATTERN COUNTER. 
*         B6  - UPPER 8 BITS OF THE CCC MEMORY ADDRESS. 
*         B7  - LOWER 8 BITS OF THE CCC MEMORY ADDRESS. 
*         B8  - CCC MEMORY BUFFER COUNTER.
*         B10 - DATA ERROR BUFFER POINTER.
*         B11 - NUMBER OF PRODUCT OVERLAY COMMAND ABORTED.
*         B12 - MODULE FLAG 
*         B14 - MODULE ERROR COUNT. 
*         B15 - MODULE LOOP COUNT.
*         BA  - DATA BUFFER BASE ADDRESS. 
*         EA  - STANDARD USAGE. 
*         EC  - STANDARD USAGE. 
*         EM  - STANDARD USAGE. 
*         ES  - STANDARD USAGE. 
*         WC  - WORD COUNT FOR COMMANDS.
* 
*         BUFFERS USED- 
*         IB(100) TO IB(500) - INPUT DATA BUFFER. 
*         OB(100) TO OB(500) - OUTPUT DATA BUFFER.
*         OB(50)  MAX ERROR COUNT 
* 
*    2.3  SUBMODULES USED 
* 
*         CCM98A - PROCESS PRODUCT OVERLAY ERRORS.
*         CCM98C - PROCESS MODULE DETECTED ERRORS.
*         CCM98D - POST ERROR DISPLAY 
*         CCM051 - OUTPUT DATA
* 
* -----------------DATA DIVISION--------------------------- 
* 
0  FORMAT CCM07 - RANDOM DATA TEST
1  FORMAT CCM07 ERROR(S) = *DECD
2  FORMAT CCM07 EC=*DECD, LC=*DECD
* 
*         EQUATES FOR THE MODULE. 
* 
   EQUATE PMC=740, CDCN=3, BLOCK1=74, BLOCK2=100
   EQUATE SETADDR=500, HSTATUS=704, WRT=702, RDD=701
   EQUATE CCMP=1, CMEMRD=4, CMEMWR=5, CPMC=6, CRES=10B
   EQUATE SETADD2=502 
* 
* -----------------INITIALIZATION-------------------------- 
* 
*         DISPLAY MODULE RUNNING MESSAGE. 
* 
30 MSG 0 TO DISPLAY,PRINT    *DISPLAY RUNNING MESSAGE 
   OB(50)=20B                *INITIALIZE MAX ERROR COUNT
   B12=2
   B14=0                     *INITIALIZE ERROR COUNT
   B4=100                    *B4 REGISTER EQUALS 100
   B9=P1                     *BUILD MEMORY BLOCK COUNT
   IF(B9.EQ.0)B9=1           *IF DEFAULT MEMORY PARAMETER 
   B9=B9+1.LS.6 
   B13=7                     *MODULE NUMBER 
   B5=0                      *INITIALIZE PASS COUNTER 
32 B3=RT                     *RANDOM NUMBER SEED
* 
*         RESERVE CCC CH. AND MASTER CLEAR THE PROCESSOR. 
* 
34 GOSUB 70                  *RESERVE CCC CHANNEL 
   B11=CPMC                  *PMC COMMAND NUMBER
   FUNC PMC, ABT 74          *MASTER CLEAR THE CCC
* 
*         INITIALIZE REGISTERS FOR WRITING CCC MEMORY.
* 
   OB(500)=B3                *INITIALIZE SEED NUMBER
   B8=0                      *INITIALIZE BUFFER COUNTER 
   GOSUB 70 
   OB(501)=0
   OB(502)=200
   B6=SETADDR 
   GOSUB 52 
   B1=0 
   CALL 051 
   IF(B1.EQ.1) GOTO 74
   B13=07                    *MODULE NUMBER 
   IF(B1.EQ.2) GOTO 55
* 
/---------READ AND CHECK ALL LOCATIONS IN CCC MEMORY. 
* 
   B10=0                     *INITIALIZE ERROR INDEX
   B8=0                      *INITIALIZE BUFFER COUNTER 
   OB(500)=B3                *INTIALIZE SEED NUMBER 
40 GOSUB 70                  *RESERVE CCC CHANNEL 
   GOSUB 54                  *GENERATE DATA PATTERN 
   B6=B8.RS.5.OR.SETADDR
   OB(501)=B8.AND.37.LS.7 
   GOSUB 52 
   B11=0                     *FUNCTION COMMAND NUMBER 
   FUNC RDD, ABT 74 
   WC=400                    *INITIALIZE WORD COUNT 
   BA=B4                     *INIT. BASE ADDRESS OF BUFFER
   B11=CMEMRD                *MEMORY READ COMMAND NUMBER
   INB WC WORDS TO IB(BA), ABT 74 
   GOSUB 53 
42 B11=CCMP                  *COMPARE COMMAND NUMBER
   COMPARE OB(BA) TO IB(BA) FOR WC,ABT 60  *CHECK DATA READ 
   B8=B8+1
   IF(B8.EQ.BLOCK1) B8=BLOCK2 
44 IF(B8.NE.B9) GOTO 40      *LOOP TO READ ALL OF MEMORY
* 
*         DISPLAY ANY REMAINING DATA ERRORS.
* 
46 IF(B10.NE.0) ERROR 0/2 GOSUB 66  *PROCESS DATA ERRORS
* 
*         PROCESS REPEAT CONDITION. 
* 
   IF(ES.AND.RC.EQ.0) GOTO 50  *IF REPEAT CONDITION OFF 
   IF(B14.GE.OB(50)) OB(50)=B14+20B  *INCREASE MAX ERROR COUNT
   B15=B15+1                 *UPDATE LOOP COUNT 
   GOTO 34                   *GO TO REPEAT THE CONDITION
50 GOTO 32 WHILE (B5+1.NE.3)  *LOOP THREE TIMES 
* 
* -----------------REPEAT/EXIT----------------------------- 
* 
* 
*         PROCESS REPEAT MODULE.
* 
   IF(ES.AND.RM.NE.0)GOTO 30   *IF REPEAT MODULE SELECTED 
   IF(B14.NE.0)MSG 1 (B14) TO DISPLAY,PRINT,DAYFILE 
   GOTO 76                   *END THE MODULE AND TEST SERIES
* 
*         SUBROUTINE TO SET CCC ADDRESS AND LENGTH. 
* 
52 B11=2                     *SET CCC ADDRESS COMMAND NUMBER
   FUNC B6, ABT 74
   OUTB 2 WORDS FROM OB(501), ABT 74    *WRITE
53 B11= 0                    *STATUS COMMAND NUMBER 
   FUNC HSTATUS, ABT 74      *FUNCTION CCC FOR STATUS 
   B11=4                     *INB COMMAND NUMBER
   INB 1 WORDS TO IB(504), ABT 74          *READ STATUS 
   IF(IB(504).AND.3400.EQ.0) RETURN        *IF NO STATUS ERROR
   B11=11 
   B14=B14+1                 *UPDATE ERROR COUNT
55 ERROR 0/1 GOSUB 66        *PROCESS ERROR 
   ENDSUB GOTO 46 
* 
/---------GENERATE RANDOM DATA PATTERN. 
* 
54 RANDOM TO OB(100) FOR 400,START OB(500)  *GENERATE DATA
   OB(500)=OB(477)           *SAVE SEED NUMBER
   B0=B4                     *INITIALIZE BUFFER POINTER 
56 OB(B0)=OB(B0).AND.377     *MASK DATA 
   GOTO 56 WHILE (B0+1.NE.500)  *LOOP TO DO BUFFER
   RETURN                    *EXIT THE SUBROUTINE 
* 
* -----------------ABORT PROCESSOR------------------------- 
* 
* 
*         PROCESS ABORT ON COMPARE ERROR. 
* 
60 GOTO 46 WHILE (B14+1.GE.OB(50))     *UPDATE ERROR COUNT
   BA=WC.AND.7776+BA           *BUILD BUFFER INDEX
   IF(ES.AND.SL.NE.0) GOTO 62  *IF SCOPING LOOP ON
   IB(B10)=B8                *SAVE BUFFER COUNTER 
   IB(B10+1)=BA-B4           *SAVE BUFFER INDEX 
   COPY OB(BA) TO IB(B10+2) FOR 2  *SAVE EXPECTED DATA
   COPY IB(BA) TO IB(B10+4) FOR 2  *SAVE ACTUAL DATA
   B10=B10+10                *UPDATE BUFFER POINTER 
   IF(B10.EQ.B4) ERROR 0/2 GOSUB 66  *REPORT DATA ERRORS
* 
62 BA=BA+2                   *RESET BUFFER INDEX
   WC=500-BA                 *RESET COMPARE WORD COUNT
   GOTO 42                   *RETURN TO COMPLETE DATA CHECK 
* 
*         REPORT DATA ERRORS IF NOT SCOPING.
* 
66 IF(ES.AND.SL.NE.0) RETURN   *IF SCOPING LOOP ON
    CALL 98C                 *REPORT ERRORS 
* 
*         POST RUNNING MESSAGE AND RESERVE CCC CHANNEL. 
* 
70 IF(ES.AND.SL.EQ.0)MSG 0 TO DISPLAY 
   IF(ES.AND.SL.NE.0)MSG 2(B14,B15) TO DISPLAY
   B11=CRES                  *RES COMMAND NUMBER
   RES,ABT 74                *RESERVE CCC CHANNEL 
   RETURN                    *EXIT THE SUBROUTINE 
* 
*         PROCESS COMMAND ABORTS IN THE MODULE. 
* 
74 B14=B14+1                 *UPDATE ERROR COUNT
   IF(ES.AND.SL.EQ.0) CALL 98A  *PROCESS ABORT ERROR
   ENDSUB GOTO 46               *GO TO END OF THE CONDITION 
76 END 30                       *END OF THE MODULE
COMPILE                      *CCM07 RANDOM DATA TEST
   MODULE CCM30,6000(31,32,46,47,53,104,105,115)LOCK
***       CCM30 - AUTOLOAD CONTROLWARE TO CYBER CHANNEL COUPLER 
**
*    1.0   EXTERNAL MODULE DOCUMENTATION
* 
*    1.1   PURPOSE- 
*          CCM30 AUTOLOADS CONTROLWARE FROM THE SYSTEM SCRATCH FILE 
*          TO THE CYBER CHANNEL COUPLER FROM CYBER HOST.
* 
*    1.2   METHOD-
*          1. DISPLAY AND PRINT THE RUNNING MESSAGE FOR THE MODULE. 
* 
*          2. CALL SUBROUTINE TO READ SCRATCH FILE AND PUT CONTROLWARE
*             NAME IN B5, B6, AND B7. 
* 
*          3. POST CONTROLWARE NAME AND NUMBER OF BLOCKS. 
* 
*          4. SYSREW THE MALET SCRATCH FILE.
* 
*          5. SYSRD A 500B WORD BLOCK OF THE MALET SCRATCH FILE.
* 
*          6. CHECK FOR 77 TABLE AND STRIP OFF IF PRESENT.
* 
*          7. RESERVE THE CHANNEL AND CYBER CHANNEL COUPLER.
* 
*          8. FUNCTION AUTOLOAD CONTROLWARE.
* 
*          9. OUTPUT THE 500B WORDS VIA OUTB CHAINING COMMAND.
* 
*         10. SYSRD 500B WORD BLOCK OF CONTROLWARE FROM THE MALET 
*             SCRATCH FILE. 
* 
*         11. REPEAT STEPS 9 AND 10 UNTIL SYSRD STATUS IS END OF RECORD.
* 
*         12. OUTPUT THE LAST BLOCK OF CONTROLWARE VIA THE OUTB COMMAND.
* 
*         13. CHECK FOR ABNORMAL GENERAL STATUS.
* 
*         14. RELEASE THE CHANNEL AND CYBER CHANNEL COUPLER.
* 
* 
*    1.3   ERRORS REPORTED
*          1. SCRATCH FILE EMPTY OR MISSING 
*          2. CHANNEL PARITY ERROR
*          3. ABNORMAL GENERAL STATUS 
* 
  
*    2.0   INTERNAL MODULE DOCUMENTATION
* 
*    2.1   ENTRY- 
*          CCM30 ASSUMES THAT THE SCRATCH FILE CONTAINS THE CONTROLWARE 
*          TO BE AUTOLOADED.  THE FORMAT OF THE CONTROLWARE BINARY MUST 
*          BE IDENTICAL TO ITS RELEASED FORMAT.  (WITH OR WITHOUT A 
*          LABEL AND DATA IN THE RIGHT-MOST 8 OF A 12-BIT WORD).
* 
*    2.2   EXIT-
*          CCM30 TERMINATES WITH AN END STATEMENT.  REGISTER CONTENTS 
*          ARE NOT USED BY OTHER MODULES. 
* 
*    2.3   SUBMODULES REFERENCED- 
*          NONE.
* 
*    2.4   REGISTERS USED-
*          CCM30 USES REGISTERS B0 TO B10.  REGISTERS ARE USED AS 
*          FOLLOWS--
*            B0 - NUMBER OF 500B BLOCKS OF CONTROLWARE
*            B1 - EXPECTED GENERAL STATUS 
*            B5 - CONTROLWARE NAME
*            B6 - CONTROLWARE NAME
*            B7 - CONTROLWARE REVISION LEVEL
*            B10- STATUS OF THE SYSRD 
* 
*    2.5   BUFFERS USED-
*          CCM30 USES THE INPUT BUFFER FOR CONTROLWARE READ FROM THE
*          SYSTEM SCRATCH FILE.  THE  OUTPUT  BUFFER IS USED FOR
*          AUTOLOADING CONTROLWARE TO THE CYBER CHANNEL COUPLER.
* 
* 
*------------------DATA DIVISION----------------------------
* 
1  FORMAT AUTOLOAD CONTROLWARE TO CYBER CHANNEL COUPLER 
2  FORMAT CCM30 - CCC AUTOLOADER
3  FORMAT AUTOLOADING *DD BLOCKS OF M*H*H TO CCC
4  FORMAT M*H*H REV *D CONTROLWARE AUTOLOADED TO CCC
5  FORMAT CCM30 READING *DD BLOCKS OF M*H*H REV *D
6  FORMAT CCM30 EC=*OCT SCRATCH FILE EMPTY OR MISSING 
7  FORMAT CCM30 EC=*OCT CHANNEL PARITY ERROR
10 FORMAT CCM30 EC=*OCT ABNORMAL GEN STAT GS=*OCT EXP=*OCT
* 
   EQUATE GENSTAT=12,AUTOLD=0414B 
   EQUATE CSTATUS=0704B 
* 
*------------------INITIALIZATION---------------------------
* 
20 MSG 2 TO PRINT,DISPLAY 
   GOSUB 50                       *READ BLOCKS AND GET TYPE 
   B0 = 0                         *RESET BLOCK COUNTER
   B10 = 0                        *SYSRD STATUS 
   WC = 500 
* 
*------------------AUTOLOAD CONTROLWARE---------------------
* 
24 SYSREW                         *REWIND SCRATCH FILE
   SYSRD, STATUS TO B10 
   IF(IB(0).NE.7700) GOTO 26
   WC = 360B
   COPY IB(120B) TO OB(0) FOR WC  *STRIP OFF 77 TABLE 
   GOTO 27
26 WC = 500B
   COPY IB(0) TO OB(0) FOR WC 
27 RES, ABT 74                    *RESERVE THE CHANNEL AND CCC
   FUNC AUTOLD, ABT 74
* 
30 OUTB CHAIN WC WORDS FROM OB(0), ABT 74   *WRITE DATA 
   SYSRD, STATUS TO B10           *READ BLOCK OF DATA TO PP 
   WC = WT
   COPY IB(0) TO OB(0) FOR WC     *XFER DATA FROM IB TO OB
   IF (WC.EQ.0) GOTO 34           *IF WORD COUNT ZERO 
   B0 = B0+1                      *UPDATE BLOCK COUNT 
   MSG 3 (B0,B5,B6,B7) TO DISPLAY   *DISPLAY BLOCK COUNT
   IF (B10.EQ.0) GOTO 30          *WRITE DATA 
   OUTB WC WORDS FROM OB(0), ABT 74  *WRITE DATA LAST BLOCK 
   MSG 4(B5,B6,B7) TO PRINT,DISPLAY 
   GOTO 40
34 DCN, ABT 74
   MSG 4(B5,B6,B7) TO PRINT,DISPLAY 
* 
*--------------------CHECK AUTOLOAD STATUS------------------------- 
* 
40 RES, ABT 74                    *RES CHANNEL AND CCC
   FUNC GENSTAT, ABT 74 
   INB 1 WORDS TO IB (0), ABT 74      *READ STATUS WORD 
   B1 = 0 
   IF(DC.EQ.53) B1 = 1000         *EXPECTED STATUS FOR 698 TAPE 
   IF(DC.EQ.47) B1 = 1000         *EXPECTED STATUS FOR CARTRIDGE TAPE 
   IF(DC.EQ.46) B1 = 1000         *EXPECTED STATUS FOR CARTRIDGE TAPE 
   IF(IB(0).NE.B1), ERROR 10/06, GOTO 74  *ABNORMAL GENERAL STATUS
   FUNC CSTATUS, ABT 74 
   INB 1 WORDS TO IB (0), ABT 74      *READ STATUS WORD 
   IF(IB(0).AND.2000.NE.0), ERROR 7/05, GOTO 74  *CHANNEL PARITY ERROR
   MSG 4(B5,B6,B7) TO PRINT,DISPLAY 
   MSG 4(B5,B6,B7) TO LINE 2
   GOTO 77                          *EXIT 
* 
*------------------READ CONTROLWARE SUBROUTINE--------------
* 
50 SYSREW                         *REWIND SCRATCH FILE
   SYSRD, STATUS TO B10 
   B0 = B0+1
   IF(B10.NE.2) GOTO 52           *IF NOT EOI ON FIRST READ 
   ERROR 6/7
   MSG 1 TO LINE 2
   MSG EM (EC) TO LINE 3                *EMPTY OR MISSING MESSAGE 
   MSG EM (EC) TO PRINT 
   GOTO 76
52 IF(IB(0).NE.7700) GOTO 54
   WC = 360B
   COPY IB(120B) TO OB(0) FOR WC  *STRIP OFF 77 TABLE 
   GOTO 55
54 WC = 500B
   COPY IB(0) TO OB(0) FOR WC 
55 B5 = OB(30)                    *NAME OF CONTROLWARE
   B6 = OB(31)                    *NAME OF CONTROLWARE
   B7 = OB(33)                    *REV OF CONTROLWARE 
56 SYSRD, STATUS TO B10           *READ BLOCK OF DATA TO PP 
   WC = WT
   IF (WC.EQ.0) GOTO 60           *IF WORD COUNT ZERO 
   B0 = B0+1                      *UPDATE BLOCK COUNT 
   MSG 5 (B0,B5,B6,B7) TO DISPLAY    *DISPLAY BLOCK COUNT 
   IF (B10.EQ.0) GOTO 56          *CONTINUE READING 
60 MSG 5 (B0,B5,B6,B7) TO PRINT,DISPLAY 
   RETURN 
* 
*------------------MODULE ERRORS PROCESSOR------------------
* 
74 MSG 1 TO LINE 1
   MSG 2 TO LINE 2
   MSG EM (EC,IB,B1) TO LINE 4    *DISPLAY ERROR MESSAGE
76 PICTURE
   HALT 
   BLANK
77 END 20 
COMPILE                      CCM30 - LOADS CCC
   MODULE CCM31,6000(31,32,46,47,53,104,105,115),LOCK 
***  CCM31 - CCC MEMORY DUMP ROUTINE
**
*    1.0  EXTERNAL MODULE DOCUMENTATION 
* 
*    1.1  PURPOSE 
* 
*         MODULE CCM31 WILL DUMP THE CCC MEMORY TO THE  PRINT  FILE  IN 
*         40  HEX WORD BLOCKS.  PARAMETER  P7  CONTROLS THE  NUMBER  OF 
*         BLOCKS  AND  PARAMETERS  P8 AND P9 THE STARTING BYTE ADDRESS. 
*         PARAMETER P6 CONTROLS WHETHER THE OUTPUT IS TO THE PRINT FILE 
*         OR THE PPU DISPLAY. 
* 
*    1.2  METHOD
* 
*         1.   INITIALIZE CCC ADDRESS FROM P9 AND  NUMBER OF  BLOCKS
*              FROM P7. TEST P7 PLUS P8 PLUS P9 NOT GREATER THAN MEMORY 
*              SIZE.
*         2.   RES THE I/O CHANNEL. 
*         3.   FUNCTION THE CCC TO LOAD ADDRESS AND LENGTH. 
*         4.   OUTB 2 WORDS OF ADDRESS AND LENGTH.
*         5.   FUNCTION THE CCC TO READ CCC MEMORY. 
*         6.   INB 200 OCTAL WORD TO IB(0). 
*         7    IF P6 IS EQUAL TO ZERO DO STEPS 8 AND 9. 
*         8.   POST MESSAGE TO PRINT OF THE HEX WORD ADDRESS. 
*         9.   POST MESSAGES TO PRINT OF 40 HEX WORD DATA OF CCC
*              MEMORY.
*         10.  IF P6 IS NOT EQUAL TO ZERO DO STEPS 11 AND 12. 
*         11.  POST MESSAGE OF THE HEX WORD ADDRESS TO LINE 1 OF THE
*              PPU DISPLAY. 
*         12.  POST MESSAGE OF 40 HEX WORD DATA OF CCC MEMORY TO LINES
*              2 THROUGH 17D OF THE PPU DISPLAY.
*         13.  IF P6 IS EQUAL TO TEN PAUSE. 
*         14.  IF  P7  IS  NOT EQUAL TO ZERO REPEAT STEPS 2-14 UNTIL P7 
*              OR 2000B BLOCKS ARE PRINTED. 
*         15.  PAUSE THE MODULE.
*         16.  IF GO IS GIVEN EXIT THE MODULE.
* 
*    1.3  ERRORS REPORTED 
* 
* 
*         CCM31 ABORT ON .FUNC LOADADD. COMMAND 
*         CCM31 ABORT ON .FUNC READ. COMMAND
*         CCM31 ABORT ON .OUTB.  COMMAND
*         CCM31 ABORT ON .INB CHAIN.  COMMAND 
*         CCM31 ABORT ON .RES.  COMMAND 
* 
  
*    2.0  INTERNAL MODULE DOCUMENTATION 
* 
*    2.1  ENTRY CONDITIONS
* 
*         PARAMETER WORD P7 IS THE NUMBER OF 40  HEX  WORD  BLOCKS  TO
*         READ  WITH  THE  MAXIMUM  BEING 2000B AND  PARAMETERS P8 AND
*         P9 THE STARTING HEX WORD ADDRESS FOR THE READ. PARAMETER  P6
*         CONTROLS PRINT OR DISPLAY.
* 
*    2.2  REGISTER AND BUFFER USAGE 
* 
*         B0   = NUMBER OF BLOCKS TO DUMP (FROM P7) 
*         B1   = LOAD ADDRESS FUNCTION PLUS ADDRESS 
*         B2   = LINE NUMBER FOR DISPLAY DATA 
*         B3   = FLAG FOR FIRST/SECOND HALF DATA
*         B4   = LWA OF THE BUFFER (INCREMENTING) 
*         B5   = ADDRESS OF IB OR OB TO SAVE DATA (INCREMENTING)
*         B6   = ADDRESS OF IB WHERE CCC MEMORY (8 BIT DATA IS
*                CONTAINED. (INCREMENTING)) 
*         B7   = PACKED DATA TO BE MOVED
*         B8   = INTERNAL INDEX TO ADDRESSES
*         B9   = IB OR OB LOCATION OF DATA FOR PRINT (INCREMENTING) 
*         B10  = LWA + 1 OF THE BUFFERS 
*         B11  = BLOCK COUNTER
*         B12  = C0MMAND INDEX FOR COMMAND ABORTS 
*         B13  = MODULE ERROR COUNTER 
*         B14  = LOAD ADDRESS FUNCTION PLUS ADDRESS 
*         B15  = MODULE NUMBER
* 
*         OB   = OUTPUT DATA BUFFER (400-401) ADDRESS AND LENGTH
*         IB   = INPUT DATA BUFFER (0-377) DATA FROM CCC
* 
*    2.3  SUBMODULES USED 
* 
*         - NONE
* 
* 
* -----------------DATA DIVISION----------------------------
* 
 0 FORMAT CCM31-CCC MEMORY DUMP ROUTINE 
 1 FORMAT CCM31 ABORT ON .FUNC LOADADD. COMMAND 
 2 FORMAT CCM31 ABORT ON .RES. COMMAND
 3 FORMAT CCM31 ABORT ON .INB. COMMAND
 4 FORMAT CCM31 ABORT ON .FUNC READ. COMMAND
 5 FORMAT CCM31 ABORT ON .OUTB. COMMAND 
 7 FORMAT 
10 FORMAT    *H*H  *H*H  *H*H  *H*H 
11 FORMAT    ----  ----  ----  ---- 
* 
   EQUATE LADDC = 1, FLADD = 500B, RESC = 2, INBC = 3 
   EQUATE READC = 4, FREAD = 701B, OUTBC = 4
* 
* -----------------INITIALIZATION---------------------------
* 
30 B15 = 31D                 *MODULE NUMBER 
   MSG 0 TO DISPLAY,PRINT    *POST MODULE TITLE 
32 B11 = 0                   *INITIALIZE INTERNAL COUNTER 
   B6 = 0                    *SET IB FWA FOR READ 
   B8 = 410                  *RESET INDEX 
   B9 = 0                    *SET BUFFER INDEX
   B10 = 200B                *SET LWA + 1 
   B0 = P7                   *SET NUMBER OF BLOCKS
   B3 = P8.AND.17B.LS.6      *CHECK ADDRESS 
   B4 = P9.RS.6              *CHECK ADDRESS 
   B4 = B3+B4                *CHECK ADDRESS 
   IF (B0+B4.GT.2000) B0 = 2000B-B4  *MAXIMUM BLOCKS TO DUMP
   OB(407) = P8.AND.17.LS.4  *SET STARTING CCC ADDRESS FOR DISPLAY
   OB(410) = P9.RS.8         *SET STARTING CCC ADDRESS FOR DISPLAY
   OB(407) = OB(407) + OB(410)  *SET STARTING CCC ADDRESS FOR DISPLAY 
   OB(410) = P9.AND.377      *SET STARTING CCC ADDRESS FOR DISPLAY
34 B8 = B8 - 1               *SET ADDRESS TO FIRST PART OF DISPLAY MSG
   OB(B8+2) = OB(B8)         *SET NEXT ADDRESS TO FIRST PART
   B8 = B8 + 1               *INCREMENT THE ADDRESS TO SECOND PART
   OB(B8+2) = OB(B8) + 1     *SET ADDRESS TO SECOND PART
   IF (OB(B8+2).GE.400) GOSUB 57
   GOTO 34 WHILE (B8+2.LE.416)  *UPDATE ALL ADDRESSES 
36 B1 = OB(407).RS.4         *SET STARTING CCC ADDRESS
   OB(400) = OB(407).AND.17.LS.8  *SET STARTING CCC ADDRESS 
   OB(400) = OB(400) + OB(410)  *SET STARTING CCC ADDRESS 
   OB(401) = 400B            *SET LENGTH
* 
* -----------------READ DATA FROM CCC-------------------
* 
   B1 = B1 + FLADD           *SET FUNCTION AND STARTING ADDRESS 
   B12 = RESC                *RES COMMAND INDEX 
   RES, ABT 70               *RESERVE I/O CHANNEL 
   B3 = 0                    *CLEAR FIRST/SECOND HALF FLAG
   B12 = LADDC               *LOAD ADD COMMAND INDEX
   FUNC B1, ABT 70           *LOAD ADD MEMORY FUNCTION
   B12 = OUTBC               *OUTB COMMAND INDEX
   OUTB 2 WORDS FROM OB(400), ABT 70  *OUTPUT PARAMETERS TO CCC 
   B12 = READC               *READ FUNC COMMAND INDEX 
   FUNC FREAD, ABT 70        *READ MEMORY FUNCTION
* 
   B12 = INBC                *INB COMMAND INDEX 
42 INB 200 WORDS TO IB(0), ABT 70  *INPUT DATA FROM CCC 
   IF (P6.EQ.0) GOTO 50      *PRINT DATA
* 
* -----------------DISPLAY DATA-----------------------------
* 
   B2 = 0 
*IF -DEF,CMSE17X,2
44 MSG 7 TO LINE B2          *INSERT BLANK LINES BETWEEN BLOCKS 
   B2 = B2 + 1               *INCREMENT LINE NUMBER 
   MSG 10 8 WORDS FROM OB(407) TO LINE B2  *HEX ADDRESS MESSAGE 
   B2 = B2 + 1               *INCREMENT LINE NUMBER 
   MSG 11 TO LINE B2         *HEX ADDRESS MESSAGE 
   B2 = B2 + 1               *INCREMENT LINE NUMBER 
46 MSG 10 8 WORDS FROM IB (B9) TO LINE B2  *PRINT 64 DECIMAL WORDS
   B2 = B2 + 1               *INCREMENT LINE NUMBER 
   IF (P6.NE.0) GOTO 53      *DO NOT PRINT DATA 
* 
* -----------------PRINT DATA-------------------------------
* 
50 MSG 7 TO PRINT            *INSERT BLANK LINES BETWEEN BLOCKS 
   MSG 10 8 WORDS FROM OB(407) TO PRINT  *HEX ADDRESS MESSAGE 
   MSG 11 TO PRINT           *HEX ADDRESS MESSAGE 
52 MSG 10 8 WORDS FROM IB (B9) TO PRINT  *PRINT 64 DECIMAL WORDS
* 
53 B8 = 410                  *RESET INDEX 
54 OB(B8) = OB(B8) + 4       *INCREMENT THE ADDRESS FOR MESSAGE 
   IF (OB(B8).GT.377B) GOSUB 57 
56 GOTO 54 WHILE (B8+2.LE.416)  *UPDATE ALL ADDRESSES 
   B9 = B9 + 10              *INCREMENT THE BUFFER ADDRESS FOR MESSAGE
   IF (B9.GE.B10) GOTO 60    *IF DONE WITH THIS BLOCK 
   IF (P6.EQ.0) GOTO 52      *PRINT DATA
   GOTO 46                   *DISPLAY DATA
* 
57 B8 = B8 - 1
   OB(B8) = OB(B8) + 1
   B8 = B8 + 1
   OB(B8)=OB(B8).AND.7
   RETURN 
* 
60 IF (P6.NE.0) PICTURE      *PAUSE AFTER EACH BLOCK DURING DISPLAY 
   IF (P6.EQ.10) PAUSE       *PAUSE AFTER EACH BLOCK DURING DISPLAY 
   B9 = 0                    *RESET BUFFER INDEX
   B8 = 410                  *RESET INDEX 
   IF (B0.EQ.0) GOTO 64      *DO ONLY 1 BLOCK 
61 GOTO 36 WHILE (B11+1.LT.B0)  *DO ALL BLOCKS
   GOTO 64
* 
* -----------------PAUSE/EXIT-------------------------------
* 
64 PAUSE                     *PAUSE SO LAST LINE IS NOT PRINTED TWICE 
   GOTO 76                   *END MODULE ON A GO
* 
* -----------------ABORT PROCESSOR--------------------------
* 
70 B13 = B13 + 1             *INCREMENT ERROR COUNT 
   MSG 0 TO LINE 0           *MODULE TITLE TO ERROR DISPLAY 
   MSG B12 TO LINE 1         *COMMAND THAT ABORTED
   MSG EM TO LINE 2          *PRODUCT OVERLAY ERROR 
   PICTURE
   HALT 
   BLANK
* 
76 END 30 
COMPILE                           *CCM31 CCC MEMORY DUMP ROUTINE
   MODULE CCM98A,6000(31,32,46,47,53,104,105,115)LOCK 
***       CCM98A - POST DRIVER ERROR DISPLAY
**
*         CCM98A - POST DRIVER ERROR DISPLAY
*         ----------------------------------
* 
* 
*         PURPOSE-
*         START  BUILDING  THE  ERROR DISPLAY BY PLACING THE TEST TITLE 
*         AND MODULE TITLE LINES IN THE ERROR DISPLAY,  AND  BUILD  THE 
*         ERROR DISPLAY FOR DRIVER DETECTED ERRORS. 
* 
* 
*         METHOD- 
*         1.  MOVE THE  TEST  TITLE AND MODULE TITLE LINES TO THE ERROR 
*             DISPLAY BEING BUILT.
*         2.  SET THE B3 REGISTER TO 4 IF THE KL DISPLAY IS BEING USED, 
*             OR 3 IF THE TERMINAL IS BEING USED. 
*         3.  EXIT TO  MODULE CCM98B IF THE ERROR TO BE REPORTED IS NOT 
*             A DRIVER DETECTED ERROR.
*         4.  MOVE THE  LAST FUNCTION LINE, HARDWARE/CONTROLWARE STATUS 
*             LINE, AND ERROR MESSAGE LINE TO THE ERROR DISPLAY.
*         5.  EXIT TO MODULE CCM98C.
* 
* 
* 
0  FORMAT CCM - CCC MEMORY TEST 
1  FORMAT CCM01 - DMA READ/WRITE TEST 
2  FORMAT CCM02 - ONES AND ZEROS TEST 
3  FORMAT CCM03 - ALTERNATING ONES TEST 
4  FORMAT CCM04 - SLIDING ZERO TEST 
5  FORMAT CCM05 - SLIDING ONE TEST
6  FORMAT CCM06 - ADDRESSING TEST 
7  FORMAT CCM07 - RANDOM DATA TEST
10 FORMAT  LAST FUNCTION = *OCTB  WT = *OCTB
* 
/---------BUILD THE ERROR DISPLAY.
* 
30 MSG 0 TO LINE 0           *TEST TITLE MESSAGE
   MSG B13 TO LINE 1         *MODULE TITLE MESSAGE
   MSG 10 (LF,WT) TO LINE 4  *LAST FUNCTION MESSAGE 
   MSG EM TO LINE 6          *ERROR DESCRIPTION MESSAGE 
   EXIT TO 98D               *GO TO POST THE COMMAND ABORTED
   END 30                    *END OF THE MODULE 
COMPILE                      *CCM98A  POST DRIVER ERROR DISPLAY 
   MODULE CCM98C,6000(31,32,46,47,53,104,105,115)LOCK 
***       CCM98C - POST DATA ERROR DISPLAY
**
*         CCM98C - POST DATA ERROR DISPLAY
*         --------------------------------
* 
* 
*         PURPOSE-
*         BUILD  THE  CCC  PARITY  ERROR DISPLAY AND THE CCC DATA ERROR 
*         DISPLAY.
* 
* 
*         METHOD- 
*         1.  IF THE EM REGISTER CONTAINS ZERO, GO TO STEP 5. 
*         2.  MOVE THE   MEMORY  PARITY  ERROR  MESSAGE  TO  THE  ERROR 
*             DISPLAY.
*         3.  DETERMINE THE  RANGE  OF  CCC  ADDRESSES  FOR  THE MEMORY 
*             PARITY ERROR AND MOVE THE MESSAGE TO  THE  ERROR  DISPLAY 
*             FOR THE CCC MEMORY PARITY ERROR ADDRESSES.
*         4.  EXIT TO MODULE CCM98C.
*         5.  BUILD ERROR DISPLAY LINE FOR ONE CCC MEMORY DATA
*             ERROR AND MOVE THE DISPLAY LINE TO THE ERROR DISPLAY. 
*         6.  REPEAT STEP   5   UNTIL   ALL   MEMORY  DATA  ERRORS  ARE 
*             DISPLAYED.
*         7.  CLEAR THE MEMORY DATA ERROR BUFFER POINTER. 
*         8.  EXIT TO MODULE CCM98D.
* 
* 
* 
0  FORMAT CCM - CCC MEMORY TEST 
1  FORMAT CCM01 - DMA READ/WRITE TEST 
2  FORMAT CCM02 - ONES AND ZEROS TEST 
3  FORMAT CCM03 - ALTERNATING ONES TEST 
4  FORMAT CCM04 - SLIDING ZERO TEST 
5  FORMAT CCM05 - SLIDING ONE TEST
6  FORMAT CCM06 - ADDRESSING TEST 
7  FORMAT CCM07 - RANDOM DATA TEST
10 FORMAT CCM*DE E*OCTB L*OCB  CCC MEMORY DATA ERROR
11 FORMAT CCM*DE E*OCTB L*OCB  CCC MEMORY PARITY ERROR
12 FORMAT PARITY ERROR IN ADDRESS *H*H-*H*H 
13 FORMAT ADRS   EXP.   ACT.   DIF. (HEX. VALUES) 
14 FORMAT *H*H   *H*H   *H*H   *H*H 
* 
/---------BUILD THE ERROR DISPLAY.
* 
30 MSG 0 TO LINE 0           *TEST TITLE MESSAGE
   MSG B13 TO LINE 1         *MODULE TITLE MESSAGE
   IF(EC.EQ.2) GOTO 32       *PROCESS DATA ERROR
   IF(IB(504).AND.2400.NE.0) EXIT TO 98D
   B11=13 
   MSG 11 (B13,EC,EA) TO LINE 4  *ERROR DESCRIPTION MESSAGE 
   B7=OB(501)                *BUILD CCC ERROR ADDRESS 
   B6=B6.AND 17.LS.4
   B6=B7.RS.8.OR.B6 
   B7=B7.AND.377
   B0=B7+177
   MSG 12 (B6,B7,B6,B0) TO LINE 5  *PARITY ERROR ADDRESS
   EXIT TO 98D               *GO TO POST THE COMMAND ABORTED
* 
/---------BUILD MEMORY DATA ERROR DISPLAY.
* 
32 MSG 10 (B13,EC,EA) TO LINE 4  *ERROR DESCRIPTION MESSAGE 
   MSG 13 TO LINE 5              *DATA DESCRIPTION MESSAGE
* 
/---------BUILD DISPLAY FOR THE DATA ERRORS.
* 
   B0=0                      *INITIALIZE BUFFER POINTER 
   B1=6                      *INITIALIZE DISPLAY LINE NUMBER
34 B2=IB(B0).AND.1.LS.7      *SAVE BIT 2**7 OF CCC ADDRESS
   IB(B0)=IB(B0).RS.1        *UPPER 8 BITS OF CCC ADDRESS 
   IB(B0+1)=IB(B0+1).RS.1.+.B2  *LOWER 8 BITS OF CCC ADDRESS
   IB(B0+6)=IB(B0+2).XOR.IB(B0+4)  *UPPER BYTE OF DIFFERENCE
   IB(B0+7)=IB(B0+3).XOR.IB(B0+5)  *LOWER BYTE OF DIFFERENCE
   MSG 14, 8 WORDS FROM IB(B0) TO LINE B1  *DATA ERROR LINE 
   B1=B1+1                       *UPDATE DISPLAY LINE NUMBER
   GOTO 34 WHILE (B0+10.NE.B10)  *LOOP TO DISPLAY ERRORS
   B10=0                      *RESET DATA ERROR BUF. POINTER
   EXIT TO 98D               *GO TO POST THE COMMAND ABORTED
   END 30                    *END OF THE MODULE 
COMPILE                      *CCM98C POST CCC DATA ERROR DISPLAY
   MODULE CCM98D,6000(31,32,46,47,53,104,105,115)LOCK 
***       CCM98D - POST COMMAND ABORTED ERROR DISPLAY 
**
*         CCM98D - POST COMMAND ABORTED ERROR DISPLAY 
*         ------------------------------------------- 
* 
* 
*         PURPOSE-
*         INSERT  THE  DISPLAY  LINE FOR THE MALET COMMAND ABORTED INTO 
*         THE ERROR DISPLAY AND REPORT THE ERROR TO THE USER. 
* 
* 
*         METHOD- 
*         1.  DETERMINE THE LINE IN THE ERROR DISPLAY TO POST THE MALET 
*             COMMAND ABORTED ON. 
*         2.  MOVE THE MALET  COMMAND  ABORTED  MESSAGE  TO  THE  ERROR 
*             DISPLAY.
*         3.  REPORT THE ERROR TO THE USER AND WAIT FOR A GO. 
*         4.  SENT A LINE CONTAINING ALL DASHES TO THE PRINT FILE.
*         5.  RETURN TO THE CALLING MODULE. 
* 
* 
* 
0  FORMAT CCM*DE ABORTED ON FUNCTION
1  FORMAT CCM*DE ABORTED ON .COMPARE. COMMAND 
2  FORMAT CCM*DE ABORTED ON FUNCTION
3  FORMAT CCM*DE ABORTED ON .DISCONNECT. COMMAND
4  FORMAT CCM*DE ABORTED ON INB COMMAND 
5  FORMAT CCM*DE ABORTED ON OUTB CHAIN COMMAND
6  FORMAT CCM*DE ABORTED ON FUNCTION
10 FORMAT CCM*DE ABORTED ON .RES. COMMAND 
11 FORMAT CCM*DE ABORTED WITH CHANNEL PARITY ERROR
12 FORMAT CCM*DE ABORTED ON DEADMAN TIMEOUT 
13 FORMAT CCM*DE ABORTED ON MEMORY PARITY ERROR 
27 FORMAT --------------------------------------------------
* 
/---------POST COMMAND ABORTED AND REPORT THE ERROR.
* 
30 IF(B11.NE.11) GOTO 32
   IF(OB(504).AND.400.EQ.400) B11=12
32 MSG B11 (B13) TO LINE 3   *COMMAND ABORTED MESSAGE 
   PICTURE
   HALT                      *REPORT THE ERROR
   MSG 27 TO PRINT
   BLANK                     *CLEAR THE DISPLAY BUFFER
   EXIT                      *RETURN TO CALLING MODULE
   END 30                    *END OF THE MODULE 
COMPILE                      *CCM98D POST ERROR DISPLAY 
   MODULE CCM99,6000(31,32,46,47,53,104,105,115)LOCK
1  FORMAT COPYRIGHT CONTROL DATA CORP. 1980 
/ 
/   PARAMETER DESCRIPTION.
/ 
/         P0 - NOT USED.
/ 
/         P1 - 000X - MEMORY OF THE CCC BEING TESTED. 
/              0000 OR 0001 = 16K.  (DEFAULT IS 0000) 
/ 
/         P2 - NOT USED.
/ 
/         P3 - NOT USED.
/ 
/         P4 - NOT USED.
/ 
/         P5 - NOT USED.
/ 
/         P6 - NOT USED.
/ 
/         P7 - NOT USED.
/ 
/         P8 - NOT USED.
/ 
/         P9 - NOT USED.
/ 
/ 
/    WARNING - THE CCM TEST WILL DESTROY THE CCC CONTROLWARE
/              IN THE CCC MEMORY BEING TESTED.
/ 
2  END 2                     *END OF THE MODULE 
COMPILE,SOURCE               *CCM99 PARAMETER DOCUMENTATION 
   MODULE CCM99A,6000,(31,32,46,47,53,104,105,115)LOCK
/ 
/                                                       RUN 
/       MODULE      MODULE NAME            ACCESS      TIME 
/       NUMBER    AND DESCRIPTION           LEVEL       CCC 
/       ------    ---------------          ------     ------
/ 
/         01   DMA READ AND WRITE TEST       10       2  SEC
/         02   ONES AND ZEROS TEST           10       4  SEC
/         03   ALTERNATING ONES TEST         10       4  SEC
/         04   SLIDING ZERO TEST             10       9  SEC
/         05   SLIDING ONE TEST              10       9  SEC
/         06   ADDRESSING TEST               10       4  SEC
/         07   RANDOM DATA TEST              10       16 SEC
/         30   AUTOLOAD CONTROLWARE TO CCC   10       7  SEC
/         31   CCC MEMORY DUMP               10        - SEC
/      NOTE - THE RUN TIME FOR MODULE CCM31 IS DEPENDENT
/             ON THE NUMBER OF BLOCKS OF CCC MEMORY 
/             THAT IS PRINTED.
/ 
1  END 1                     *END OF THE MODULE 
COMPILE,SOURCE               *CCM99A DESCRIPTION DOCUMENTATION
