*DECK CIU 
***  CIU - PLATO COMMUNICATIONS INTERFACE UNIT TEST 
***  1.0  IDENTIFICATION
**
*    1.1  PROGRAM NAME
* 
*         CIU - PLATO COMMUNICATIONS INTERFACE UNIT TEST
* 
*    1.2  AUTHOR
* 
*         G.W. GOSNELL      FEBRUARY 26, 1982 
* 
*    1.3  AUTHORS OF MODIFICATIONS
* 
*    1.4  COPYRIGHT 
* 
*         COPYRIGHT CONTROL DATA   1982 
*               ALL RIGHTS RESERVED 
* 
*          CONTAINED HEREIN ARE SOFTWARE PRODUCTS COPYRIGHTED 
*          BY CONTROL DATA CORPORATION.  REPRODUCTION WITHOUT 
*          PERMISSION IS PROHIBITED.  THE COPYRIGHT NOTICE MUST 
*          APPEAR ON ALL AUTHORIZED COMPLETE OR PARTIAL COPIES. 
* 
* 
***  2.0  INTRODUCTION
**
*    2.1  OVERVIEW
* 
*         CIU IS A TEST FOR THE PLATO COMMUNICATIONS INTERFACE
*         UNIT OR C.I.U.  THE PLATO C.I.U. IS FUNCTIONALLY TWO
*         SEPARATE DEVICES, AN INPUT CONTROLLER AND AN OUTPUT 
*         CONTROLLER.  THEREFORE, CIU CONTAINS A DISTINCT SET OF
*         MODULES FOR TESTING ONE CONTROLLER OR THE OTHER.
*         CIU01 BEGINS A CONFIDENCE TEST SERIES FOR THE OUTPUT
*         CONTROLLER.  THIS TEST SERIES TESTS THE ABILITY OF
*         THE OUTPUT CONTROLLER TO ACCEPT FUNCTIONS, THE
*         ADDRESSING CAPABILITY, THE OUTPUT DATA PATH, AND
*         THE MEMORY CONTROL LOGIC.  THE ACCURACY OF THE DATA 
*         PATH IS VERIFIED BY OBSERVING THE OUTPUT ON THE 
*         PLATO TERMINAL.  IT IS ASSUMED THAT TERMINAL HAS
*         ALREADY HAD CONTROLWARE LOADED. 
* 
*         CIU11 BEGINS THE CONFIDENCE TEST SERIES FOR THE INPUT 
*         CONTROLLER.  THIS TEST SERIES TESTS THE ABILITY OF THE
*         INPUT CONTROLLER TO ACCEPT FUNCTIONS, THE PORT SELECT 
*         AND DESELECT LOGIC, AND THE BUFFER MEMORY READ LOGIC. 
* 
*         CIU21 AND CIU31 ARE THE BEGINNING MODULES FOR THE ECHO
*         MODULES.  THE FUNCTION OF THESE TWO TEST SERIES IS TO 
*         VERIFY THE ACCURACY OF THE INPUT AND OUTPUT DATA PATHS
*         THROUGH THE C.I.U., THE SELECTED SITE CONTROL UNIT, 
*         AND THE SELECTED TERMINAL.  CIU31 BEGINS THE TEST 
*         SERIES THAT OUTPUTS ECHO PATTERNS TO THE SELECTED PLATO 
*         TERMINAL.  THE TERMINAL WILL RETURN THESE CODES TO THE
*         INPUT CONTROLLER.  THE TEST SERIES BEGINNING WITH CIU21 
*         WILL INPUT THESE CODES AND CHECK THEM FOR ACCURACY. 
* 
*         BECAUSE OF THE STRUCTURE OF MALET, THE CIU TEST CAN 
*         OPERATE ON EITHER THE INPUT OR OUTPUT CONTROLLER, BUT 
*         NOT AT THE SAME TIME.  THEREFORE TO EXECUTE THE ECHO
*         MODULES, IT IS NECESSARY TO WORK WITH TWO COPIES OF 
*         THE CIU TEST, ONE TO RUN THE ECHO INPUT TESTS AND THE 
*         OTHER TO RUN THE ECHO OUTPUT TESTS. 
* 
*         CIU ALSO CONTAINS REPAIR MODULES.  THESE MODULES ARE
*         USED FOR INPUTTING ECHO CODES, OUTPUTTING ECHO CODES, 
*         AND INPUTTING KEYBOARD DATA ENTERED BY THE OPERATOR 
*         AT THE PLATO TERMINAL.
* 
*         CIU CAN BE USED WITH THE IST 1, 2, OR 3 TERMINAL. 
*         BEFORE USING THE IST 2 OR 3, CONTROLWARE MUST HAVE
*         BEEN PREVIOUSLY LOADED. 
* 
*    2.2  CHARACTERISTICS 
* 
*         1.  PROGRAM NAME . . . . . . . . . . . . . . . . . CIU
*         2.  TEST/DIAG/UTILITY/SYSTEM . . . . . . . . . . .TEST
*         3.  VIRTUAL CODE/MICROCODE/PP CODE/OTHER . . . . MALET
*         4.  RUN TIME (DEFAULT) . . . . . . . . 4 MIN., 47 SEC.
*         5.  LEVEL OF ISOLATION . . . . . . . . . . . DETECTION
*         6.  ON-LINE/OFF-LINE/BOTH. . . . . . . . . . . . .BOTH
*         7.  ON-LINE SYSTEM . . . . . . . . . . . . .NOS,NOS/BE
*         8.  OFF-LINE SYSTEM. . . . . . . . . . . . . . . . SMM
*         9.  SOURCE CODE MAINTENANCE. . . . . . . . . . .UPDATE
* 
*         -NOTE- RUN TIME IS TOTAL TIME FOR ALL CONFIDENCE TEST 
*         MODULES.
* 
*    2.3  APPLICABLE DOCUMENTS
* 
*         17326210  BASIC SITE CONTROLLER (FC601) H.M.M.
*         17326100  COMPUTER INTERFACE UNIT (FC735) H.M.M.
* 
*    2.4  REQUIREMENTS/RESTRICTIONS 
* 
*         ALTHOUGH FUNCTIONS CAN BE TESTED ON THE C.I.U. ALONE, 
*         IN ORDER TO TEST THE DATA PATHS THROUGH THE C.I.U., IT
*         IS NECESSARY TO HAVE AN OPERATIONAL SITE CONTROL
*         UNIT AND AN IST TERMINAL WITH CONTROLWARE LOADED
*         ATTACHED TO A PORT ON THE C.I.U.
* 
***  3.0  DESIGN OVERVIEW 
**
*    3.1  MODULES OVERVIEW
* 
*         MODULES IN CIU CAN BE DIVIDED INTO TWO MAJOR CATEGORIES,
*         MODULES THAT TEST THE INPUT CONTROLLER AND MODULES THAT 
*         TEST THE OUTPUT CONTROLLER. 
* 
*                 OUTPUT CONTROLLER MODULES 
*                 ------ ---------- ------- 
* 
*         CIU01 - BASIC FUNCTIONS - TESTS THE ABILITY OF THE OUTPUT 
*                 CONTROLLER TO ACCEPT THE 0000 FUNCTION. 
*         CIU03 - ADDRESSING TEST - CHECKS THE ADDRESSING LOGIC.
*                 REQUIRES THE OPERATOR TO VERIFY THE ACCURACY AT THE 
*                 IST TERMINAL. 
*         CIU05 - CHARACTER OUTPUT TEST - CHECKS THE ABILITY OF THE 
*                 OUTPUT CONTROLLER TO OUTPUT DATA TO THE TERMINAL. 
*                 REQUIRES THE OPERATOR TO VERIFY THE OUTPUT. 
*         CIU07 - END OF RECORD TEST - CHECKS THE MEMORY CONTROL
*                 TIMING. 
* 
*         CIU31 - ECHO OUTPUT FIXED PATTERNS - OUTPUTS A SET OF FIXED 
*                 ECHO PATTERNS FOR INPUT BY CIU21. 
*         CIU33 - ECHO OUTPUT RANDOM PATTERNS - OUTPUTS A SET OF
*                 RANDOM ECHO PATTERNS FOR INPUT BY CIU23.
* 
*         CIU41 - ECHO OUTPUT REPAIR MODULE - REPAIR MODULE FOR 
*                 OUTPUTTING A SELECTED DATA PATTERN FOR INPUT BY 
*                 CIU40.
* 
*         THERE ARE TWO TEST SERIES AND ONE REPAIR MODULE FOR THE OUTPUT
*         CONTROLLER.  THE TEST SERIES START WITH CIU01 AND CIU31.
* 
*          MODULE           DESCRIPTION       ACCESS LEVEL  RUN TIME
*          ------           -----------       ------------  --------
*          CIU01 - BASIC FUNCTIONS OUTPUT          20        1 SEC. 
*          CIU03 - ADDRESSING TEST                 20        4 SEC. 
*          CIU05 - CHARACTER OUTPUT TEST           20       14 SEC. 
*          CIU07 - END OF RECORD TEST              20        7 SEC. 
*          CIU31 - ECHO OUTPUT FIXED               20      191 SEC. 
*          CIU33 - ECHO OUTPUT RANDOM              20      158 SEC. 
*          CIU41 - ECHO OUTPUT REPAIR              20        INDEF. 
* 
* 
*                 INPUT CONTROLLER MODULES
*                 ----- ---------- -------
* 
*         CIU11 - BASIC FUNCTIONS INPUT - TESTS THE ABILITY OF THE
*                 INPUT CONTROLLER TO ACCEPT FUNCTIONS. 
*         CIU13 - PORT SELECT AND STATUS - TESTS THE PORT SELECT
*                 AND STATUS INPUT LOGIC. 
*         CIU15 - PORT DESELECT AND STATUS - TESTS THE PORT DESELECT
*                 AND STATUS INPUT LOGIC. 
*         CIU17 - READ BUFFER MEMORY TEST - TESTS THE READ CONTROL
*                 LOGIC.
* 
*         CIU21 - ECHO INPUT FIXED PATTERNS - INPUTS A SET OF FIXED 
*                 ECHO PATTERNS OUTPUT BY CIU31 AND CHECKS DATA.
*         CIU23 - ECHO INPUT RANDOM PATTERNS - INPUTS A SET OF
*                 RANDOM ECHO PATTERNS OUTPUT BY CIU33 AND CHECKS 
*                 THE ACCURACY OF THE DATA. 
* 
*         CIU40 - ECHO INPUT REPAIR MODULE - REPAIR MODULE FOR
*                 INPUTTING A SELECTED DATA PATTERN OUTPUT BY CIU41.
*         CIU42 - OPERATOR INPUT REPAIR MODULE - REPAIR MODULE FOR
*                 INPUTTING AND DISPLAYING KEYBOARD DATA INPUT BY 
*                 OPERATOR AT THE IST TERMINAL. 
* 
*         THERE ARE TWO TEST SERIES AND TWO REPAIR MODULES FOR THE
*         INPUT CONTROLLER.  THE TEST SERIES START WITH CIU11 AND 
*         CIU21.
* 
*          MODULE           DESCRIPTION       ACCESS LEVEL  RUN TIME
*          ------           -----------       ------------  --------
*          CIU11 - BASIC FUNCTIONS INPUT           20        2 SEC. 
*          CIU13 - PORT SELECT AND STATUS          20       17 SEC. 
*          CIU15 - PORT DESELECT AND STATUS        20       15 SEC. 
*          CIU17 - READ BUFFER MEMORY TEST         20       58 SEC. 
*          CIU21 - ECHO INPUT FIXED PATTERNS       20      191 SEC. 
*          CIU23 - ECHO INPUT RANDOM PATTERNS      20      158 SEC. 
*          CIU40 - ECHO INPUT REPAIR MODULE        20        INDEF. 
*          CIU42 - OPERATOR INPUT REPAIR           20        INDEF. 
* 
*    3.2  EXECUTION HIERARCHY 
* 
*         CIU TESTS THE INPUT AND OUTPUT CONTROLLER BY FIRST CHECKING 
*         THE BASIC OPERATION AND THEN GOING TO MORE COMPLICATED
*         FUNCTIONS.  THE TEST SERIES CIU01 FOR THE OUTPUT CONTROLLER 
*         AND CIU11 FOR THE INPUT CONTROLLER CAN BE RUN IN ANY
*         ORDER.
* 
*         THE ECHO TESTS MUST FOLLOW A SPECIFIC SEQUENCE.  TO RUN THE 
*         ECHO TEST SERIES IT IS NECESSARY TO HAVE TWO COPIES OF CIU
*         RUNNING.  THE USER FIRST STARTS THE INPUT TEST SERIES WITH
*         R CIU21 AT ONE COPY OF CIU.  THE OPERATOR THEN STARTS THE 
*         OUTPUT TEST SERIES AT THE OTHER COPY WITH R CIU31.  THE 
*         INPUT MODULE MUST BE STARTED BEFORE THE OUTPUT MODULE.
* 
*         WHEN RUNNING THE ECHO INPUT TEST, IT MAY BE NECESSARY TO
*         FIRST CLEAR OUT THE BUFFER MEMORY OF EXTRANEOUS KEY CODES.
*         TO DO THIS, RUN CIU17 BEFORE STARTING THE ECHO MODULES. 
* 
*         THE FOLLOWING CHART SHOWS THE INTERDEPENDENCE OF THE ECHO 
*         MODULES:  
* 
*          READING MODULE                  WRITING MODULE 
*          --------------                  -------------- 
*          CIU21 - ECHO INPUT FIXED        CIU31 - ECHO OUTPUT FIXED
*          CIU23 - ECHO INPUT RANDOM       CIU33 - ECHO OUTPUT RANDOM 
*          CIU40 - ECHO INPUT REPAIR       CIU41 - ECHO OUTPUT REPAIR 
* 
***  4.0  PARAMETERS
**
*    4.1  PARAMETER REGISTER DEFINITIONS
* 
*         P0 = 00SS - SITE CONTROLLER ADDRESS (0 - 31 DECIMAL)
* 
*         P1 = 00PP - PORT/TERMINAL ADDRESS (0 - 31 DECIMAL)
* 
*         P2 = XXXX - DELAY IN MILLISECONDS FOR ECHO OUTPUT 
* 
*         P3 = 000X - NUMBER OF FV633 OPTIONS IN CIU (0 - 3)
* 
*         P4 = 00CC - CODE FOR CHARACTER TO OUTPUT IN MODULE 5
* 
*         P5 = XXXX - NONZERO TO LIST ALL CODES INPUT IN
*              MODULE 42
* 
*         P6 = 0PPP - 8 BIT PATTERN TO OUTPUT IN MODULE 41
* 
*** 
**
*    4.2  PARAMETER REGISTER USAGE
* 
*         BELOW IS A CROSS-REFERENCE OF MODULES IN CIU AND THE
*         PARAMETER REGISTERS THEY REFERENCE. 
* 
*           MODULE     P0   P1   P2   P3   P4   P5   P6 
*           ------     --   --   --   --   --   --   -- 
* 
*           CIU00 
*           CIU01 
*           CIU03 
*           CIU05       X    X              X 
*           CIU07 
*           CIU11 
*           CIU13                      X
*           CIU15                      X
*           CIU17 
*           CIU21       X    X
*           CIU23       X    X
*           CIU31       X    X    X 
*           CIU33       X    X    X 
*           CIU40       X    X
*           CIU41       X    X                        X 
*           CIU42       X    X                   X
* 
***  5.0  USAGE 
**
*    5.1  CONFIDENCE TESTING
* 
*         CONFIDENCE TESTING SHOULD START WITH THE TWO TEST SERIES
*         AT CIU01 FOR THE OUTPUT CONTROLLER AND CIU11 FOR THE
*         INPUT CONTROLLER.  THE SUCCESSFUL COMPLETION OF 
*         THESE TEST SERIES WILL CONFIRM THAT BOTH SECTIONS OF
*         THE C.I.U. CAN ACCEPT FUNCTIONS AND OPERATE TO THE
*         POINT WHERE THEY BE EXPECTED TO TRANSFER DATA.
* 
*         AT THIS POINT THE USER CAN RUN THE ECHO TEST SERIES 
*         AT CIU21 FOR THE INPUT CONTROLLER AND CIU31 FOR THE 
*         OUTPUT CONTROLLER.
* 
*         IF THE ECHO TEST SERIES COMPLETE NORMALLY, IT CAN BE
*         ASSUMED THAT THE C.I.U. CAN TRANSFER DATA PROPERLY
*         THROUGH THE PORT THAT THE SELECTED S.C.U. IS
*         ATTACHED.  THIS TESTS THE BULK OF THE C.I.U. LOGIC. 
*         HOWEVER, THE LOGIC THAT IS SPECIFIC TO THE OTHER
*         PORTS CANNOT BE CHECKED WITHOUT CONNECTING AN S.C.U.
*         AND A TERMINAL TO THOSE PORTS AND TESTING.
* 
*         SINCE THE INPUT CONTROLLER AND OUTPUT CONTROLLER ARE
*         CONSIDERED TWO SEPARATE DEVICES, IT IS NECESSARY TO 
*         ASSIGN THE APPROPRIATE DEVICE BEFORE RUNNING THE
*         TEST SERIES FOR THE INPUT OR OUTPUT CONTROLLER OF THE 
*         C.I.U.
* 
*    5.2  USING PARAMETER DRIVEN MODULES
* 
*         CIU CONTAINS NO PARAMETER DRIVEN MODULES. 
* 
*    5.3  USING REPAIR MODULES
* 
*         CIU CONTAINS THREE REPAIR MODULES.  TWO OF THESE MODULES, 
*         CIU40 AND CIU41, ARE ECHO INPUT AND OUTPUT REPAIR 
*         MODULES.  BY SELECTING PARAMETER P6 THE USER CAN SPECIFY
*         AN ECHO PATTERN TO OUTPUT TO THE C.I.U. WITH CIU41. 
*         CIU40 CAN BE USED IN ANOTHER COPY OF THE TEST TO INPUT
*         AND DISPLAY THE ECHO CODE.  THESE MODULES WOULD MOST
*         OFTEN BE USED FOR SCOPING AND SIMILAR TROUBLESHOOTING 
*         TECHNIQUES. 
* 
*         WHEN USING THE IST-3 IT SHOULD BE NOTED THAT NOT ALL
*         ECHO PATTERNS RETURN THE EXPECTED CODE.  THE FOLLOWING
*         CODES WILL NOT BE RETURNED IN THE FORMAT EXPECTED BY
*         THE IST-3:  300, 340, 364, 366, 370, AND 372. 
* 
*         THE OTHER REPAIR MODULE IS CIU42.  THIS MODULE ALLOWS 
*         THE OPERATOR TO ENTER KEYBOARD DATA AT THE IST AND
*         HAVE IT DISPLAYED OR PRINTED BY THE MODULE.  THE P5 
*         PARAMETER CAN BE SET TO NONZERO TO HAVE ALL INPUT DATA
*         FROM THE C.I.U. DISPLAYED OR WHEN DEFAULTED TO ZERO 
*         ONLY THE DATA RECEIVED FROM THE TERMINAL SELECTED BY
*         THE P0 AND P1 PARAMETERS WILL BE DISPLAYED.  THIS 
*         MODULE ALLOWS THE OPERATOR TO MANUALLY ENTER DATA FOR 
*         INPUT TO THE C.I.U. AND HAVE IT DISPLAYED TO BE 
*         CHECKED BY THE USER.  WITH P5 SET TO NONZERO, THIS
*         MODULE CAN BE USED TO CHECK FOR ADDRESSING PROBLEMS 
*         ON INPUT SINCE THE DATA FROM ALL PORTS WILL BE
*         DISPLAYED.
* 
***  6.0  MESSAGES
**
*         ALL VALUES DISPLAYED IN OUTPUT DATA TO THE USER DEFAULT 
*         TO BASE OCTAL IF A POST RADIX OF (B), (D) OR (H) IS 
*         NOT SPECIFIED IMMEDIATELY FOLLOWING THE VALUE.
* 
*    6.1  NORMAL MESSAGES 
* 
*         THE FOLLOWING MESSAGES ARE PRINTED AND DISPLAYED DURING 
*         THE NORMAL COURSE OF EXECUTING CIU. 
* 
*         1.  CIUNN XXX 
*             THIS INDICATES THAT MODULE NN IS NOW RUNNING.  XXX
*             IS THE DESCRIPTION OF MODULE NN.
* 
*         2.  WAITING ECHO FROM SITE XX PORT YY 
*             THIS MESSAGE IS OUTPUT BY ECHO INPUT MODULES TO 
*             INDICATE THAT THE MODULE IS INPUTTING DATA FROM 
*             THE C.I.U. AND LOOKING FOR DATA SPECIFICALLY FROM 
*             SITE XX AND PORT YY.
* 
*         3.  ECHOING TO SITE XX PORT YY
*             THIS MESSAGE IS OUTPUT BY ECHO OUTPUT MODULES TO
*             INDICATE THAT THE MODULE IS OUTPUTTING DATA TO
*             THE C.I.U. ON SITE NUMBER XX AND PORT NUMBER YY.
* 
*         4.  CODE XXXX RECEIVED
*             MESSAGE FROM CIU42 WITH P5 = 0 SHOWING KEY CODE 
*             FROM THE IST TERMINAL.
* 
*         5.  CODE XXXX RECEIVED SITE YY PORT ZZ
*             MESSAGE FROM CIU42 WITH P5 = NONZERO SHOWING
*             KEY CODE XXXX RECEIVED FROM SITE YY PORT ZZ.
* 
*         THE FOLLOWING MESSAGES ARE DISPLAYED BUT NOT PRINTED AS 
*         CIU IS EXECUTED.
* 
*         1.  CIUNN - EC = EEEE, LC = LLLL
*             MODULE NN IS LOOPING ON REPEAT CONDITION OR REPEAT
*             MODULE.  EEEE IS THE CURRENT ERROR COUNT AND LLLL 
*             IS THE LOOP COUNT.
* 
*         2.  RECEIVING PATTERN XXXX  PASS PPPP 
*             THIS MESSAGE IS DISPLAYED BY THE ECHO INPUT MODULES 
*             TO SHOW THE CURRENT PATTERN XXXX BEING INPUT AND
*             THE PASS NUMBER PPPP OF THE INPUT OPERATION.
* 
*         3.  RECEIVING CODE XXXX 
*             MESSAGE FROM CIU42 SHOWING THE KEY CODE CURRENTLY 
*             BEING INPUT.
* 
*    6.2  ERROR DISPLAY FORMAT
* 
*         THE FOLLOWING DISPLAY FORMAT IS USED BY CIU TO REPORT 
*         ERRORS TO THE USER. 
* 
*         ERROR FROM MODULE MMMM ERROR COUNT = EEEED
*                     REGISTER CONTENTS 
*           B0   B1   B2   B3   B4   B5   B6   B7 
*          XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
*           BA   LF   WT   WC   EA   EC   EM   ES 
*          XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX
*         EC - ZZZZ 
*         AAAA
* 
* 
*         MMMM = MODULE NUMBER IN EXECUTION WHEN ERROR OCCURED
*         EEEE = NUMBER OF ERRORS THAT OCCURED IN MODULE MMMM 
*                (D = DECIMAL)
*         XXXX = REGISTER CONTENTS AT TIME OF FAILURE 
*         -NOTE- FOR A DESCRIPTION OF THE VARIOUS REGISTERS AND 
*                WHAT THE CONTENTS MEAN, REFER TO THE SPECIFIC
*                MODULE.
*         ZZZZ = ERROR CODE NUMBER AND BRIEF DESCRIPTION
*                (EC = ERROR CODE)
*         AAAA = ADDITIONAL INFORMATION ABOUT ABOVE ERROR CODE
* 
*    6.3  ERROR MESSAGES
* 
*         ERROR CODE AND MESSAGE
* 
*         EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT 
*                 MALET DETECTED A PROBLEM WHEN ATTEMPTING TO 
*                 RESERVE AN I/O CHANNEL. 
*         EC - 02 ABORT ON FUNCTION *OCT AT LINE *OCT 
*                 MALET DETECTED A PROBLEM WHEN ATTEMPTING TO 
*                 EXECUTE FUNCTION *OCT.
*         EC - 03 ABORT ON STATUS COMMAND AT LINE *OCT
*                 MALET DETECTED A PROBLEM WHEN ATTEMPTING TO 
*                 INPUT A STATUS WORD.
*         EC - 04 ABORT ON .OUT. COMMAND AT LINE *OCT 
*                 MALET DETECTED A PROBLEM WHEN ATTEMPTING TO 
*                 EXECUTE AN OUTPUT COMMAND.
*         EC - 05 ABORT ON .IN. COMMAND AT LINE *OCT
*                 MALET DETECTED A PROBLEM WHEN ATTEMPTING TO 
*                 EXECUTE AN INPUT COMMAND. 
* 
*         -NOTE- THE PRODUCT OVERLAY ERROR MESSAGE WILL ALSO BE 
*         PRINTED OUT AS A PART OF THE ABOVE ERROR CODES. 
* 
*         EC - 20 STATUS ERROR ON SELECT PORT *DEC
*         SELECTED STATUS  EXP - 0001  REC - 0000 
*                 AFTER PERFORMING A PORT SELECT FUNCTION,
*                 THE SELECTED STATUS FUNCTION WAS PERFORMED
*                 AND THE STATUS INPUT FOR THAT PORT.  THE
*                 STATUS DID NOT SHOW PORT SELECTED.
* 
*         EC - 21 STATUS ERROR ON SELECT PORT *DEC
*         DESELECTED STATUS  EXP - 0000  REC - 0001 
*                 AFTER PERFORMING A PORT SELECT FUNCTION,
*                 ON PORT *DEC, THE DESELECTED STATUS 
*                 FUNCTION WAS PERFORMED AND THE STATUS INPUT 
*                 FOR THAT PORT.  THE STATUS SHOWED PORT WAS
*                 DESELECTED. 
* 
*         EC - 22 STATUS ERROR ON DESELECT PORT *DEC
*         SELECTED STATUS  EXP - 0000  REC - 0001 
*                 AFTER A DESELECT FUNCTION ON PORT *DEC, 
*                 THE SELECTED STATUS FUNCTION WAS PERFORMED
*                 AND THE STATUS INPUT SHOWED THE PORT WAS
*                 STILL SELECTED. 
* 
*         EC - 23 STATUS ERROR ON DESELECT PORT *DEC
*         DESELECTED STATUS  EXP - 0001  REC - 0000 
*                 AFTER A DESELECT FUNCTION ON PORT *DEC
*                 THE DESELECTED STATUS FUNCTION WAS PERFORMED
*                 AND THE STATUS INPUT SHOWED THE PORT WAS
*                 NOT DESELECTED. 
* 
*         EC - 24 STATUS ERROR ON SELECT ALL PORTS
*         SELECTED STATUS  EXP - 0001  REC - 0000 
*                 AFTER A FUNCTION 40 THE STATUS
*                 SHOWED PORT NOT SELECTED. 
* 
*         EC - 25 STATUS ERROR ON SELECT ALL PORTS
*         DESELECTED STATUS  EXP - 0000  REC - 0001 
*                 AFTER A FUNCTION 40 THE STATUS
*                 SHOWED PORT DESELECTED. 
* 
*         EC - 26 STATUS ERROR ON DESELECT ALL PORTS
*         SELECTED STATUS  EXP - 0000  REC - 0001 
*                 AFTER A FUNCTION 0000 THE STATUS
*                 SHOWED PORT SELECTED. 
* 
*         EC - 27 STATUS ERROR ON DESELECT ALL PORTS
*         DESELECTED STATUS  EXP - 0001  REC - 0000 
*                 AFTER A FUNCTION 0000 THE STATUS
*                 SHOWED PORT NOT DESELECTED. 
* 
*         EC - 31 STATUS ERROR FOR UNINSTALLED PORT *DEC
*         DESELECTED STATUS  EXP - 0001  REC - 0000 
*                 DESELECTED STATUS WAS TAKEN ON A PORT 
*                 THAT PARAMETER P3 INDICATED WAS NOT 
*                 IN C.I.U.  STATUS SHOWED PORT WAS 
*                 NOT DESELECTED.  POSSIBLE ERROR IN
*                 PARAMETER.
* 
*         EC - 32 STATUS ERROR FOR UNINSTALLED PORT *DEC
*         SELECTED STATUS  EXP - 0000  REC - 0001 
*                 SELECTED STATUS WAS TAKEN ON A PORT 
*                 THAT PARAMETER P3 INDICATED WAS NOT 
*                 INSTALLED.  STATUS SHOWED PORT WAS
*                 SELECTED.  POSSIBLE PARAMETER ERROR.
* 
*         EC - 33 DATA SEQUENCE ERROR 
*         DATA WORD 1 - *OCT
*         DATA WORD 2 - *OCT
*                 A TWO WORD INPUT WAS PERFORMED AND BIT
*                 11 WAS NOT SET IN THE FIRST WORD AND/OR 
*                 NOT CLEAR IN THE SECOND WORD. 
* 
*         EC - 34 EMPTY TOO SOON AFTER EOR
*                 AFTER OUTPUTTING TWO TRIPLETS WITH EOR
*                 BIT SET, A THIRD OUTPUT WAS DONE AND
*                 EMPTY WAS RETURNED IN LESS THAN 
*                 17.3 MILLISECONDS.
* 
*         EC - 35 FULL TOO LONG AFTER EOR 
*                 AFTER OUTPUTTING A TRIPLET WITH EOR BIT 
*                 SET, A TRIPLET WAS OUTPUT WITHOUT EOR 
*                 BIT AND EMPTY WAS NOT RETURNED FOR MORE 
*                 THAN 17.4 MILLISECONDS. 
* 
*    6.4  DAYFILE MESSAGES
* 
*         CIUNN - ERROR(S) IN MODULE = XXXX 
*         THIS INDICATES THE NUMBER OF ERRORS IN MODULE 
*         NN SINCE THE LAST RUN DIRECTIVE.  XXXX = DECIMAL
*         COUNT.
* 
***  7.0  GLOSSARY
**
*    7.1  DEFINITION OF TERMS 
* 
*         DATA TRIPLET - THREE PP DATA WORDS IN THE FORMAT
*         NEEDED TO OUTPUT TO THE C.I.U.
* 
*         DATA DOUBLET - TWO PP DATA WORDS RECEIVED FROM THE
*         C.I.U. IN THE FORMAT DETERMINED BY THE C.I.U. 
* 
*         IST TERMINAL - TERMINAL DESIGNED FOR PLATO
*         APPLICATION.
* 
*    7.2  ABBREVIATIONS 
* 
*         C.I.U. = COMMUNICATIONS INTERFACE UNIT (FC735)
*         S.C.U. = SITE CONTROL UNIT (FC601)
*         B = BINARY
*         D = DECIMAL 
*         EC = ERROR COUNT/ERROR CODE 
*         ES = ENGINEERING SWITCHES 
*         IB = INPUT BUFFER 
*         OB = OUTPUT BUFFER
*         SB = STATUS BUFFER
*         SE = STOP ON ERROR
*         SL = SCOPING LOOP 
*         WC = WORD COUNT 
*         WT = WORDS TRANSMITTED
* 
*    7.3  MISCELLANEOUS 
* 
   MODULE CIU00,6000(400,401),LOCK
***  CIU00 - CIU INITIAL MODULE 
**
*     1.0 PURPOSE 
* 
*         CIU00 MODULE IS INCLUDED FOR COMPATABILITY
*         WITH THE  MSL/DEMOT  ENHANCEMENT. 
* 
* 
  
* 
20 EXIT 
* 
   END 20 
COMPILE              - CIU00 -
   MODULE CIU01,6000(401),LOCK
***  CIU01 - BASIC OUTPUT FUNCTION
**
*    1.0  PURPOSE 
* 
*         CIU01 INSURES THAT THE OUTPUT CONTROLLER SIDE OF
*         THE CIU CAN ACCEPT THE CLEAR (0000) FUNCTION. 
* 
*    2.0  METHOD
* 
*         1. CALL PARAMETER VALIDATION MODULE 
*         2. RESERVE THE OUTPUT CHANNEL 
*         3. PERFORM 0000 FUNCTION
*         4. REPEAT STEPS 2 - 3 1000D TIMES 
*         5. IF SCOPING LOOP, GO TO STEP 2. 
* 
*    3.0  ERRORS REPORTED 
* 
*         1. EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT
*         2. EC - 02 ABORT ON FUNCTION 0000 AT LINE *OCT
* 
  
* 
*    4.0  ENTRY CONDITIONS - NONE 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = ERROR CODE IF COMMAND ABORT
*         B1 = PASS COUNTER 
*         B2 = ERROR COUNTER
*         B3 = SCOPING LOOP COUNTER 
*         B7 = ERROR COUNTER
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98A = ERROR PROCESSOR FOR COMMAND ABORTS 
*         CIU98E = PARAMETER VALIDATION 
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT CIU01 - BASIC FUNCTION OUTPUT CONTROLLER
2  FORMAT ------------------------------------------------- 
3  FORMAT CIU01 - EC = *DECD, LC = *DECD
4  FORMAT CIU01 - ERROR(S) IN MODULE = *DECD
5  FORMAT CIU01 - CIU TERMINATED - FATAL ERRORS 
* 
* ------------------INITIALIZATION--------------------------- 
* 
20 CALL 98E                  *PARAMETER VAL.
   MSG 1 TO DISPLAY,PRINT 
* 
* ------------------TEST------------------------------------- 
* 
30 B0 = 1                    *CODE FOR ABORT
   RES,ABT 70                *RESERVE CHANNEL 
32 B0 = 2                    *CODE FOR ABORT
   FUNC 0000,ABT 70          *CLEAR FUNCTION
* 
* ------------------REPEAT/EXIT------------------------------ 
* 
   GOTO 30 WHILE(B1 + 1 .LT. 1000D)  *REPEAT 1000D TIMES
* 
   B3 = B3 + 1               *BUMP LOOP COUNTER IF SL 
   IF(ES .AND. SL .NE. 0)MSG 3(B2,B3) TO DISPLAY
   IF(ES .AND. SL .NE. 0)GOTO 30  *IF SCOPING LOOP
* 
   IF(B2 .NE. 0)MSG 4(B2) TO DAYFILE  *IF ERRORS IN MODULE
   EXIT 
* 
* ------------------ABORT PROCESSOR-------------------------- 
* 
70 ENDSUB 
   B7 = B7 + 1               *BUMP ABORT COUNTER
   B0 = B0 + 0100            *ADD MODULE NUMBER 
   B2 = B2 + 1               *BUMP ERROR COUNTER
   IF(ES .AND. SL .EQ. 0)GOTO 72  *IF NOT SCOPING LOOP
* 
   MSG 3(B2,B3) TO DISPLAY
   IF(B0 .EQ. 1)GOTO 30      *IF RESERVE COMMAND
* 
   GOTO 32
* 
72 CALL 98A 
   PICTURE
   HALT 
   MSG 2 TO PRINT 
   BLANK
   MSG 1 TO DISPLAY 
   IF(B2 .LT. 5)GOTO 30      *IF LESS THAN 5 ERRORS 
* 
   MSG 5 TO PRINT 
   MSG 4(B2) TO DAYFILE 
   END 20 
COMPILE         - CIU01 - 
   MODULE CIU03,6000(401),LOCK
***  CIU03 - ADDRESSING TEST
**
*    1.0  PURPOSE 
* 
*         CIU03 TEST THE ADDRESSING ABILITY OF THE CIU
*         OUTPUT CONTROLLER BY SENDING OUT THE SITE ADDRESS 
*         AND PORT ADDRESS TO ALL POSSIBLE PORTS ON THE 
*         CIU.  THE SITE AND PORT ADDRESSES WILL BE DISPLAYED 
*         ON ANY OPERATIONAL TERMINAL ATTACHED TO THE CIU.
*         THE OPERATOR CAN THEN VISUALLY VERIFY THAT THE
*         ADDRESS DISPLAYED MATCHES THE ADDRESS OF THE
*         TERMINAL.  OUTPUTTING TO ALL TERMINALS ALSO PUTS
*         A MAXIMUM LOAD ON THE VIDEO SIGNAL IN A MANNER
*         SIMILAR TO THE OUT OF SERVICE MESSAGE.
* 
*    2.0  METHOD
* 
*         1. RESERVE CHANNEL. 
*         2. PERFORM 2 FUNCTION 0000S TO INITIALIZE THE 
*            OUTPUT CONTROLLER. 
*         3. SET SITE AND PORT ADDRESSES TO 0.
*         4. RESERVE CHANNEL. 
*         5. SET SITE AND PORT ADDRESSES TO 0.
*         6. PLUG CURRENT SITE AND PORT INTO WORD 3 OF THE
*            OUTPUT TRIPLETS. 
*         7. IF ON SITE 31 PORT 15 (LAST PORT), SET END OF
*            RECORD BIT IN WORD 3 OF TRIPLET. 
*         8. CONVERT SITE AND PORT ADDRESSES TO TERMINAL CODE 
*            AND INSERT IN OUTPUT MESSAGE TRIPLETS. 
*         9. OUTPUT CURRENT MESSAGE TRIPLET TO CURRENT TERMINAL.
*         10. ADD 1 TO PORT ADDRESS.
*         11. IF NOT ON LAST SITE GO TO STEP 13.
*         12. IF ON LAST SITE AND LAST PORT GO TO STEP 16.
*         13. IF NOT ON LAST PORT OF CURRENT SITE, GO TO STEP 6.
*         14. SET PORT TO 0 AND ADD 1 TO SITE ADDRESS.
*         15. GO TO STEP 6. 
*         16. GO TO STEP 3 UNTIL ENTIRE MESSAGE HAS BEEN OUTPUT 
*             TO ALL POSSIBLE PORTS.
* 
*    3.0  ERRORS REPORTED 
* 
*         1. EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT
*         2. EC - 02 ABORT ON FUNCTION 0000 AT LINE *OCT
*         3. EC - 04 ABORT ON .OUT. COMMAND AT LINE *OCT
* 
  
* 
*    4.0  ENTRY CONDITIONS - NONE 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = CODE FOR COMMAND ABORT 
*         B1 = SITE ADDRESS COUNTER 
*         B2 = PORT ADDRESS COUNTER 
*         B3 = COUNTER FOR MESSAGE OUTPUT 
*         B4 = INDEX FOR CODE CONVERSION TABLE
*         B5 = INDEX FOR BUFFER OUTPUT
*         B6 = INTERMEDIATE REGISTER FOR CODE CONVERSION
*         B7 = ERROR COUNTER
* 
*         OB(0-40) CONTAIN THE FORMATTED DATA TRIPLETS NEEDED 
*         TO INITIALIZE THE TERMINAL AND SEND THE MESSAGE 
*           SITE = XX  PORT = XX. 
* 
*         DATA OUTPUT TO THE CIU IS IN THE FOLLOWING FORMAT:  
* 
*         WORD 1
*         BIT 11 = 1
*         BIT 10 = 0
*         BITS 0-9 = DATA 
* 
*         WORD 2
*         BITS 10-11 = 0
*         BITS 1-9 = DATA 
*         BIT 0 = UNUSED
* 
*         WORD 3
*         BIT 11 = 0
*         BIT 10 = END OF RECORD BIT
*         BITS 5-9 = SITE ADDRESS 
*         BITS 0-4 = PORT ADDRESS 
* 
*         THREE DATA CHARACTERS CAN BE OUTPUT IN EACH TRIPLET.
*         FOLLOWING ARE THE CHARACTERS SET UP IN THE OB(0-40):  
* 
*         OB(0-2) = CONTROL - CHARACTER, WRITE, BLANK 
*         OB(3-5) = DATA - UNCOVER, FORMFEED, UNCOVER 
*         OB(6-10) = DATA - ROM 1, S, I 
*         OB(11-13) = DATA - T, E, UNCOVER
*         OB(14-16) = DATA - ROM 0, SPACE, =
*         OB(17-21) = DATA - SPACE, V, V
*         OB(22-24) = DATA - SPACE, SPACE, UNCOVER
*         OB(25-27) = DATA - ROM 1, P, O
*         OB(30-32) = DATA - R, T, UNCOVER
*         OB(33-35) = DATA - ROM 0, SPACE, =
*         OB(36-40) = DATA - SPACE, V, V
* 
*         THE SITE AND PORT ADDRESS THAT THE TRIPLET WILL BE
*         SENT TO IS PLUGGED INTO THE 3RD WORD OF EACH TRIPLET. 
* 
*         OB(100-137) CONTAIN A TABLE OF CHARACTER CODES USED 
*         IN CONVERTING THE BINARY SITE AND PORT ADDRESSES TO 
*         THE CHARACTER CODES RECOGNIZED BY THE TERMINAL. 
* 
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98A = ERROR PROCESSOR FOR COMMAND ABORTS 
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT CIU03 - ADDRESSING TEST 
2  FORMAT ------------------------------------------------- 
4  FORMAT CIU03 - ERROR(S) IN MODULE = *DECD
5  FORMAT CIU03 - CIU TERMINATED - FATAL ERRORS 
* 
   DATA(OB(0),CON)4140,66,0,5771,1176,0,5212,622,0
   DATA(OB(11),CON)5240,1376,0,5205,1330,0,5553,666,0 
   DATA(OB(22),CON)5555,1376,0,5212,36,0,5222,1176,0
   DATA(OB(33),CON)5205,1330,0,5553,666,0 
   DATA(OB(100),CON)3333,3334,3335,3336,3337,3340,3341
   DATA(OB(107),CON)3342,3343,3344,3433 
   DATA(OB(113),CON)3434,3435,3436,3437,3440,3441,3442
   DATA(OB(122),CON)3443,3444,3533,3534,3535,3536,3537
   DATA(OB(131),CON)3540,3541,3542,3543,3544,3633,3634
* 
* ------------------INITIALIZATION--------------------------- 
* 
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
* 
* ------------------TEST------------------------------------- 
* 
30 B0 = 1                    *SET ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 2                    *SET ABORT CODE
   FUNC 0000, ABT 70         *INITIALIZE OUTPUT SIDE
   FUNC 0000, ABT 70         *WITH 2 0000 FCNS
   B3 = 2                    *INTIALIZE PASS CTR
32 RES,ABT 70                *RESERVE CHANNEL 
   B1 = 0                    *SET SITE ADDRESS
   B2 = 0                    *SET PORT ADDRESS
34 OB(B3) = B2               *SET PORT ADDRESS
   OB(B3) = B1 .LS. 5 .OR. OB(B3)  *ADD SITE ADDRESS
   IF(B1 .LT. 31D)GOTO 36    *IF SITE LESS THAN 31
* 
   IF(B2 .LT. 15D)GOTO 36    *IF PORT LESS THAN 15
* 
   IB(B3) = IB(B3) .OR. 2000  *SET LAST OUTPUT BIT
36 B0 = 4                    *SET ABORT CODE
   GOSUB 50                  *ADD SITE AND PORT 
   B5 = B3 - 2               *FIND START OF BUFFER
   OUT 3 WORDS FROM OB(B5), ABT 70
   B2 = B2 + 1               *BUMP PORT ADDRESS 
   IF(B1 .LT. 31D)GOTO 40    *IF LESS THAN 31 
* 
   IF(B2 .EQ. 16D)GOTO 42    *IF PORT = 16
* 
40 IF(B2 .LT. 32D)GOTO 34    *IF PORT LESS THAN 32
* 
   B2 = 0                    *RESET PORT
   B1 = B1 + 1               *BUMP SITE ADDRESS 
   GOTO 34
* 
* 
* ------------------REPEAT/EXIT------------------------------ 
* 
42 GOTO 32 WHILE(B3 + 3 .LT. 41)  *REPEAT ENTIRE MSG
* 
   IF(B7 .NE. 0)MSG 4(B7) TO DAYFILE  *IF ERRORS IN MOD 
   EXIT 
* 
50 IF(B3 .NE. 21)GOTO 51     *IF AT RIGHT WORD
* 
   B4 = B1 + 100             *BIAS FOR CODE TABLE 
   B4 = OB(B4)               *GET CODE FOR SITE 
   B4 = B4 .LS. 3            *GET FIRST DIGIT 
   B6 = B4 .AND. 7           *MASK OFF LOWER 3
   OB(17) = OB(17) .AND. 7770  *MASK OFF UPPER DIGIT
   OB(17) = OB(17) .OR. B6   *PUT INTO WORD 
   B6 = B4 .RS. 2            *POSITION REMAINDER
   OB(20) = B6 .AND. 3776    *PUT IN WORD 
51 IF(B3 .NE. 40)GOTO 52     *IF NOT LAST WORD
* 
   B4 = B2 + 100             *BIAS FOR TABLE
   B4 = OB(B4)               *PICK UP CODE FOR PORT 
   B4 = B4 .LS. 3            *GET FIRST DIGIT 
   B6 = B4 .AND. 7           *MASK OFF LOWER 3
   OB(36) = OB(36) .AND. 7770  *MASK OFF UPPER DIGIT
   OB(36) = OB(36) .OR. B6   *PUT INTO WORD 
   B6 = B4 .RS. 2            *POSITION REMAINDER
   OB(37) = B6 .AND. 3776    *PUT IN OUTPUT WORD
52 RETURN 
* 
* ------------------ABORT PROCESSOR-------------------------- 
* 
70 ENDSUB 
   B7 = B7 + 1               *BUMP ERROR COUNTER
   B0 = B0 + 0300            *ADD MODULE NUMBER 
   CALL 98A                  *POST ERROR MESSAGE
   PICTURE
   HALT 
   MSG 2 TO PRINT 
   BLANK
   MSG 1 TO DISPLAY 
   IF(B7 .LT. 5)GOTO 30      *IF LESS THAN 5 ERRORS 
* 
   MSG 5 TO PRINT 
   MSG 4(B7) TO DAYFILE 
* 
   END 20 
COMPILE         - CIU03 - 
   MODULE CIU05,6000(401),LOCK
***  CIU05 - CHARACTER OUTPUT TEST
**
*    1.0  PURPOSE 
* 
*         CIU05 TESTS THE ABILITY OF THE CIU TO OUTPUT A SPECIFIED
*         CHARACTER TO A SPECIFIC TERMINAL.  A FULL SCREEN OF THE 
*         CHARACTER U OR A CHARACTER CODE ENTERED IN THE P4 
*         REGISTER WILL BE OUTPUT TO THE SITE AND PORT SPECIFIED
*         IN P0 AND P1 RESPECTIVELY.  CIU05 ASSUMES THAT THE SITE 
*         CONTROLLER AND TERMINAL ARE OPERATIONAL.
* 
*    2.0  METHOD
* 
*         1. POST RUNNING MESSAGE.
*         2. RESERVE CHANNEL. 
*         3. PERFORM TWO 0000 FUNCTIONS TO INITIALIZE THE OUTPUT
*            CONTROLLER.
*         4. CHECK P4 FOR A 00 OR 77 CODE, AND DEFAULT THESE TO 
*            THE CHARACTER U. 
*         5. PLUG THE SITE AND PORT ADDRESSES INTO THE DATA 
*            WORD TRIPLETS. 
*         6. PLUG THE CHARACTER CODES (U OR CODE SELECTED IN P4)
*            INTO THE DATA WORD TRIPLETS. 
*         7. OUTPUT THE FIRST TRIPLET TO INITIALIZE THE TERMINAL. 
*         8. OUTPUT THE SECOND TRIPLET TO INITIALIZE THE TERMINAL.
*         9. INITIALIZE THE LINE AND CHARACTER COUNTERS.
*         10. RESERVE THE CHANNEL.
*         11. OUTPUT A TRIPLET FROM OB(6).
*         12. RESERVE THE CHANNEL.
*         13. OUTPUT A TRIPLET FROM OB(11). 
*         14. GO TO STEP 12 UNTIL A FULL LINE HAS BEEN OUTPUT.
*         15. EXIT IF A FULL SCREEN HAS BEEN OUTPUT.
*         16. RESERVE THE CHANNEL.
*         17. OUTPUT A TRIPLET TO SET THE X COORDINATE ON THE 
*             TERMINAL TO 0.
*         18. OUTPUT A TRIPLET TO DO A LINE FEED. 
*         19. GO TO STEP 10.
* 
*    3.0  ERRORS REPORTED 
* 
*         1. EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT
*         2. EC - 02 ABORT ON FUNCTION 0000 AT LINE *OCT
*         3. EC - 04 ABORT ON .OUT. COMMAND AT LINE *OCT
* 
  
* 
*    4.0  ENTRY CONDITIONS - NONE 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = CODE FOR COMMAND ABORT.
*         B1 = HOLDS CHARACTER CODE TO BE OUTPUT. 
*         B2 = HOLDS TERMINAL ADDRESS.
*         B3 = INTERMEDIATE REGISTER FOR DATA CONVERSION. 
*         B4 = LINE COUNTER.
*         B5 = CHARACTER COUNTER. 
*         B7 = ERROR COUNTER. 
* 
*         OB(0-21) HOLD THE DATA TRIPLETS NEEDED TO OUTPUT THE
*         CHARACTERS TO THE TERMINAL. 
* 
*         OB(0-2) = CONTROL - CHARACTER, WRITE, BLANK 
*         OB(3-5) = DATA - UNCOVER, FORMFEED, UNCOVER 
*         OB(6-10) = DATA - ROM 0, DATA, DATA - DATA = CHAR. CODE 
*         OB(11-13) = DATA - DATA, DATA, DATA 
*         OB(14-16) = DATA - UNCOVER, LINEFEED, UNCOVER 
*         OB(17-21) = CONTROL - SET X = 0 
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98A - ABORT PROCESSOR
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT CIU05 - CHARACTER OUTPUT TEST 
2  FORMAT --------------------------------------------------
4  FORMAT CIU05 - ERROR(S) IN MODULE = *DECD
5  FORMAT CIU05 - CIU TERMINATED - FATAL ERRORS 
* 
   DATA(OB(0),CON)4140,66,2000  *CHAR,WRITE,BLANK 
   DATA(OB(3),CON)5771,1176,2000  *UNC,FORMFEED,UNC 
   DATA(OB(6),CON)5200,0,2000  *MEM0,DATA,DATA
   DATA(OB(11),CON)5000,0,2000  *DATA,DATA,DATA 
   DATA(OB(14),CON)5771,0576,2000  *UNC,LF,UNC
   DATA(OB(17),CON)4200,0,2000  *SET X = 0
* 
* --------------INITIALIZATION------------------------------- 
* 
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MSG
22 B0 = 1                    *SET ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 2                    *SET ABORT CODE
   FUNC 0000,ABT 70          *INITIALIZE OUTPUT SIDE
   FUNC 0000,ABT 70          *WITH 2 FCN 0
   B1 = P4 .AND. 77          *GET LOWER 6 BITS
   IF(B1 .EQ. 0)B1 = 25      *IF P4=0 DEFAULT TO A U
   IF(B1 .EQ. 77)B1 = 25     *IF P4=77 DEFAULT TO A U 
*   SET UP TERMINAL NUMBER
   B2 = P0 .LS. 5 .OR. P1    *B2 HAS TERMINAL ADDR
   OB(2) = OB(2) .OR. B2     *PLUG ADDRESSES
   OB(5) = OB(5) .OR. B2
   OB(10) = OB(10) .OR. B2
   OB(13) = OB(13) .OR. B2
   OB(16) = OB(16) .OR. B2
   OB(21) = OB(21) .OR. B2
*   SET DATA INTO WORDS 
   OB(7) = OB(7) .OR. B1
   OB(12) = OB(12) .OR. B1
   B3 = B1 .AND. 7 .LS. 6 
   OB(7) = OB(7) .OR. B3 .LS. 1 
   OB(12) = OB(12) .OR. B3 .LS. 1 
   B1 = B1 .LS. 3 
   OB(11) = OB(11) .OR. B1
   B1 = B1 .RS. 6 
   OB(6) = OB(6) .OR. B1
   OB(11) = OB(11) .OR. B1
*   SET UP TERMINAL 
   B0 = 4                    *SET ABORT CODE
   OUT 3 WORDS FROM OB(0), ABT 70 
   OUT 3 WORDS FROM OB(3), ABT 70 
* 
* ------------------TEST------------------------------------- 
* 
*   OUTPUT LOOP 
   B4 = 0                    *B4 = LINE COUNTER 
30 B5 = 0                    *B5 = CHARACTER COUNTER
   B0 = 1                    *SET ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 4                    *SET ABORT CODE
   OUT 3 WORDS FROM OB(6), ABT 70 
32 B0 = 1                    *SET ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 4                    *SET ABORT CODE
   OUT 3 WORDS FROM OB(11), ABT 70
   GOTO 32 WHILE(B5 + 1 .LT. 21D)  *REPEAT 63 MORE CHARS
* 
   B4 = B4 + 1               *BUMP LINE COUNTER 
   IF(B4 .EQ. 32D)GOTO 34    *IF FULL SCREEN
* 
   B0 = 1                    *SET ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 4                    *SET ABORT CODE
   OUT 3 WORDS FROM OB(17),ABT 70 
   OUT 3 WORDS FROM OB(14), ABT 70
   B3 = 0 
   GOTO 30                   *DO NEXT LINE
* 
* 
* ------------------REPEAT/EXIT------------------------------ 
* 
34 IF(B7 .NE. 0)MSG 4(B7) TO DAYFILE  *IF ERRORS
   EXIT 
* 
* ------------------ABORT PROCESSOR-------------------------- 
* 
70 ENDSUB 
   B7 = B7 + 1               *BUMP ERROR COUNTER
   B0 = B0 + 0500            *ADD MODULE NUMBER 
   CALL 98A                  *POST ERROR MESSAGE
   PICTURE
   HALT 
   MSG 2 TO PRINT 
   BLANK
   MSG 1 TO DISPLAY 
   IF(B7 .LT. 5)GOTO 22      *IF LESS THAN 5 ERRORS 
* 
   MSG 5 TO PRINT 
   MSG 4(B7) TO DISPLAY 
* 
   END 20 
COMPILE         - CIU05 - 
   MODULE CIU07,6000(401),LOCK
***  CIU07 - END OF RECORD TEST 
**
*    1.0  PURPOSE 
* 
*         CIU07 TESTS THE MEMORY CONTROL LOGIC USING THE
*         END OF RECORD BIT (BIT 10 OF WORD 3 OF THE DATA 
*         TRIPLET).  AFTER OUTPUTTING 2 TRIPLETS WITH THE END 
*         OF RECORD BIT SET THE 2 MEMORIES SHOULD BE BUSY 
*         FOR 17.5 MILLISECONDS, PREVENTING THE EMPTY FROM
*         BEING RETURNED FOR THAT TIME AFTER THE NEXT OUTPUT. 
* 
*    2.0  METHOD
* 
*         1. POST RUNNING MESSAGE.
*         2. RESERVE CHANNEL. 
*         3. DO TWO 0000 FUNCTIONS TO INITIALIZE THE OUTPUT 
*            CONTROLLER.
*         4. RESERVE THE CHANNEL. 
*         5. OUTPUT TWO TRIPLETS WITH THE END OF RECORD BITS SET. 
*         6. CHANGE THE ABORT TIMEOUT TO 17.3 MSEC. 
*         7. OUTPUT 1 WORD AND SHOULD ABORT TO STEP 9.
*         8. NO ABORT, SO SET ERROR 34 AND GO TO ERROR PROCESSOR. 
*         9. IF ERROR CODE WAS NOT 26 GO TO ERROR PROCESSOR.
*            (EXPECT ONLY -NO EMPTY ON LAST BYTE OUTPUT-) 
*         10. RESERVE THE CHANNEL.
*         11. OUTPUT ONE TRIPLET WITH END OF RECORD BIT SET.
*         12. RESET THE ABORT TIMEOUT TO 17.4 MSEC. 
*         13. OUTPUT ONE TRIPLET WITHOUT EOR BIT SET AND GO 
*             TO STEP 16 IF AN ABORT OCCURS.
*         14. REPEAT TO STEP 4 FOR 100 PASSES.
*         15. EXIT. 
*         16. IF ERROR CODE NOT 26 GO TO ERROR PROCESSOR. 
*         17. SET ERROR 35 AND GO TO ERROR PROCESSOR. 
* 
*    3.0  ERRORS REPORTED 
* 
*         1. EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT
*         2. EC - 02 ABORT ON FUNCTION 0000 AT LINE *OCT
*         3. EC - 04 ABORT ON .OUT. COMMAND AT LINE *OCT
*         4. EC - 34 EMPTY TOO SOON AFTER EOR 
*         5. EC - 35 FULL TOO LONG AFTER EOR
* 
  
* 
*    4.0  ENTRY CONDITIONS - NONE 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = CODE FOR COMMAND ABORT.
*         B1 = PASS COUNTER.
*         B7 = ERROR COUNTER. 
* 
*         OB(0-2) = DATA TRIPLET WITH EOR SET.
*         OB(3-5) = DATA TRIPLET WITHOUT EOR SET. 
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98A - ABORT PROCESSOR
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT CIU07 - END OF RECORD TEST
2  FORMAT ----------------------------------------- 
4  FORMAT CIU07 - ERROR(S) IN MODULE = *DECD
5  FORMAT CIU07 - CIU TERMINATED - FATAL ERRORS 
* 
   DATA(OB(0),CON)4000,0,3777 
   DATA(OB(3),CON)4000,0,0
* 
* ------------------INITIALIZATION--------------------------- 
* 
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
22 B0 = 1                    *CODE FOR ABORT
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 2                    *CODE FOR ABORT
   FUNC 0000B,ABT 70         *INITIALIZE
   FUNC 0000B,ABT 70         *OUTPUT CONTROLLER 
* 
* ------------------TEST------------------------------------- 
* 
30 B0 = 1                    *CODE FOR ABORT
   RES,ABT 70                *RESERVE CHANNE
   B0 = 4                    *CODE FOR ABORT
   OUT CHAIN 3 WORDS FROM OB(0),ABT 70  *OUT WITH EOR BIT 
   OUT CHAIN 3 WORDS FROM OB(0),ABT 70
   TIMEOUT TYPEB=17300D USEC  *CHANGE TIME TO 17.3 MSEC 
   OUTB 1 WORDS FROM OB(3),ABT 32  *DO NORMAL OUTPUT
   ERROR 0/34,GOTO 70        *ERROR 34
* 
32 IF(EC .AND. 77 .NE. 26)GOTO 70  *IF NOT EC 26
* 
34 B0 = 1                    *CODE FOR ABORT
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 4                    *CODE FOR ABORT
   OUT 3 WORDS FROM OB(0),ABT 70  *OUTPUT WITH EOR BIT
   TIMEOUT TYPEB=17400D USEC  *CHANGE TIME TO 17.4 MSEC 
   OUTB 1 WORDS FROM OB(3),ABT 36  *DO NORMAL OUTPUT
   GOTO 30 WHILE(B1 + 1 .LT. 100D)  *REPEAT 100 TIMES 
* 
   IF(B7 .NE. 0)MSG 4(B7) TO DAYFILE  *IF ERRORS
   GOTO 77
* 
36 IF(EC .AND. 77 .NE. 26)GOTO 70  *IF NOT EC 26
* 
   ERROR 0/35,GOTO 70        *ERROR 35
* 
* 
* ------------------ABORT PROCESSOR-------------------------- 
* 
70 ENDSUB 
   B7 = B7 + 1               *BUMP LINE COUNTER 
   B0 = B0 + 0400            *ADD MODULE NUMBER 
   CALL 98A 
   PICTURE
   HALT 
   MSG 2 TO PRINT 
   BLANK
   MSG 1 TO DISPLAY 
   IF(EC .AND. 77 .EQ. 34)GOTO 34  *IF EC 34
* 
   IF(EC .AND. 77 .EQ. 35)GOTO 30  *IF EC 35
* 
   IF(B7 .LT. 5)GOTO 22      *IF LESS THAN 5 ERRORS 
* 
   MSG 5 TO PRINT 
   MSG 4(B7) TO DAYFILE 
* 
77 END 20 
COMPILE         - CIU07 - 
   MODULE CIU11,6000(400),LOCK
***  CIU11 - BASIC INPUT FUNCTION 
**
*    1.0  PURPOSE 
* 
*         CIU11 TESTS THE ABILITY OF THE INPUT CONTROLLER 
*         TO ACCEPT FUNCTIONS (0000 AND 0040).  CIU11 ALSO
*         SUPPORTS SCOPING LOOPS. 
* 
*    2.0  METHOD
* 
*         1. CALL CIU98E FOR PARAMETER VALIDATION.
*         2. POST RUNNING MESSAGE.
*         3. RESERVE THE INPUT CHANNEL. 
*         4. PERFORM A 0000 FUNCTION. 
*         5. PERFORM A 0040 FUNCTION. 
*         6. IF SCOPING LOOP GO TO STEP 2.
*         7. REPEAT TO STEP 3 1000D TIMES.
*         8. EXIT.
* 
*    3.0  ERRORS REPORTED 
* 
*         1. EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT
*         2. EC - 02 ABORT ON FUNCTION AT LINE *OCT 
* 
  
* 
*    4.0  ENTRY CONDITIONS - NONE 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = CODE FOR COMMAND ABORT.
*         B1 = CODE FOR LOOP PROCESSOR. 
*         B2 = ERROR COUNTER. 
*         B3 = SCOPING LOOP COUNTER.
*         B7 = ABORT COUNTER. 
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98A = ABORT PROCESSOR
*         CIU98E = PARAMETER VALIDATION 
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT CIU11 - BASIC FUNCTIONS INPUT CONTROLLER
2  FORMAT --------------------------------------------------
3  FORMAT CIU11 - EC = *DECD, LC = *DECD
4  FORMAT CIU11 - ERROR(S) IN MODULE = *DECD
5  FORMAT CIU11 - CIU TERMINATED - FATAL ERRORS 
* 
* ------------------INITIALIZATION--------------------------- 
* 
* 
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
* 
* ------------------TEST------------------------------------- 
* 
30 B0 = 1 
32 RES, ABT 70               *RESERVE CHANNEL 
   B0 = 2 
   B1 = 1 
34 FUNC 0000, ABT 70         *DESELECT ALL PORTS
   B1 = 2 
36 FUNC 0040, ABT 70
* 
* ------------------REPEAT/EXIT------------------------------ 
* 
   B3 = B3 + 1               *BUMP PASS COUNTER 
   IF(ES .AND. SL .NE. 0)MSG 3(B2,B3) TO DISPLAY
   IF(ES.AND.SL.NE.0)GOTO 30  *IF SCOPING LOOP
* 
   IF(B3 .LT. 1000D) GOTO 30  *IF LT 1000 TIMES 
* 
   IF(B2 .NE. 0)MSG 4(B2) TO DAYFILE  *IF ERRORS
   EXIT 
* 
* ------------------ABORT PROCESSOR-------------------------- 
* 
70 ENDSUB 
   B2 = B2 + 1               *BUMP ERROR COUNTER
   B7 = B7 + 1               *BUMP ERROR POINTER
   IF(ES .AND. SL .EQ. 0)GOTO 72  *IF NOT SCOPING LOOP
* 
   MSG 3(B2,B3) TO DISPLAY
   RES, ABT 70
   IF(B0 .EQ. 1)GOTO 32      *IF ABORT ON RESERVE 
* 
   IF(B1 .EQ. 1)GOTO 34      *IF DESELECT ABORT 
* 
   GOTO 36                   *RETRY SELECT
* 
72 B0 = B0 + 1300            *ADD MODULE NUMBER TO ERR CODE 
   CALL 98A                  *PROCESS ERROR 
   PICTURE
   HALT 
   MSG 2 TO PRINT 
   BLANK
   MSG 1 TO DISPLAY 
   IF(B2 .LT. 5)GOTO 30      *IF LESS THAN 5 ERRORS 
* 
   MSG 5 TO PRINT 
   MSG 4(B2) TO DAYFILE 
   END 20 
COMPILE         - CIU11 - 
   MODULE CIU13,6000(400),LOCK
***  CIU13 - PORT SELECT AND STATUS TEST
**
*    1.0  PURPOSE 
* 
*         CIU13 TESTS THE PORT SELECT LOGIC OF THE INPUT CONTROLLER.
*         PORTS ARE FIRST SELECTED INDIVIDUALLY AND THE SELECTED AND
*         DESELECTED STATUS CHECKED AFTER WHICH THE PORTS ARE 
*         SELECTED WITH A SELECT ALL FUNCTION AND THE STATUS CHECKED. 
* 
*    2.0  METHOD
* 
*         1. POST RUNNING MESSAGE.
*         2. CHECK P3 TO DETERMINE THE HIGHEST AVAILABLE PORT.
*         3. RESERVE THE INPUT CHANNEL. 
*         4. FUNCTION 0000 TO DESELECT ALL PORTS. 
*         5. INITIALIZE FUNCTION AND STATUS CODES.
*         6. FUNCTION TO SELECT 1 PORT. 
*         7. FUNCTION TO REQUEST SELECTED STATUS FOR THAT PORT. 
*         8. INPUT 1 STATUS WORD. 
*         9. IF SELECTED STATUS OK GO TO STEP 11. 
*         10. SET ERROR 20 AND GO TO ABORT PROCESSOR. 
*         11. RESERVE THE CHANNEL.
*         12. FUNCTION TO REQUEST DESELECTED STATUS FOR THAT PORT.
*         13. INPUT 1 STATUS WORD.
*         14. IF DESELECTED STATUS OK GO TO STEP 16.
*         15. SET ERROR 21 AND GO TO ABORT PROCESSOR. 
*         16. INCREMENT FUNCTION AND STATUS CODES FOR NEXT PORT.
*         17. GO TO STEP 6 UNTIL ALL AVAILABLE PORTS ARE CHECKED. 
*         18. REPEAT TO STEP 3 FOR 500 TIMES. 
*         19. INITIALIZE THE PASS COUNTER.
*         20. RESERVE THE CHANNEL.
*         21. FUNCTION 40 TO SELECT ALL PORTS.
*         22. INITIALIZE THE STATUS REQUEST FUNCTION CODES. 
*         23. RESERVE THE CHANNEL.
*         24. FUNCTION TO REQUEST SELECTED STATUS FOR CURRENT PORT. 
*         25. INPUT 1 STATUS WORD.
*         26. IF SELECTED STATUS OK GO TO STEP 28.
*         27. SET ERROR 24 AND GO TO ABORT PROCESSOR. 
*         28. RESERVE THE CHANNEL.
*         29. FUNCTION TO REQUEST DESELECTED STATUS.
*         30. INPUT 1 STATUS WORD.
*         31. IF DESELECTED STATUS OK GO TO STEP 33.
*         32. SET ERROR 25 AND GO TO ABORT PROCESSOR. 
*         33. INCREMENT STATUS REQUEST FUNCTION CODES.
*         34. GO TO STEP 23 UNTIL ALL PORTS CHECKED.
*         35. REPEAT TO STEP 20 FOR 500 TIMES.
*         36. EXIT. 
* 
*    3.0  ERRORS REPORTED 
* 
*         1. EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT
*         2. EC - 02 ABORT ON FUNCTION AT LINE *OCT 
*         3. EC - 03 ABORT ON STATUS COMMAND AT LINE *OCT 
*         4. EC - 20 STATUS ERROR ON SELECT PORT *DEC 
*            SELECTED STATUS  EXP - 0001  REC - 0000
*         5. EC - 21 STATUS ERROR ON SELECT PORT *DEC 
*            DESELECTED STATUS  EXP - 0000  REC - 0001
*         6. EC - 24 STATUS ERROR ON SELECT ALL PORTS 
*            SELECTED STATUS  EXP - 0001  REC - 0000
*         7. EC - 25 STATUS ERROR ON SELECT ALL PORTS 
*            DESELECTED STATUS  EXP - 0000  REC - 0001
* 
  
* 
*    4.0  ENTRY CONDITIONS - NONE 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = CODE FOR COMMAND ABORT.
*         B1 = SELECT PORT XX FUNCTION CODE.
*         B2 = SELECTED STATUS REQUEST FUNCTION CODE. 
*         B3 = PORT COUNTER.
*         B4 = DESELECTED STATUS REQUEST FUNCTION CODE. 
*         B5 = PASS COUNTER.
*         B6 = HIGHEST AVAILABLE PORT NUMBER. 
*         B7 = ERROR COUNTER. 
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98A = ERROR PROCESSOR
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT CIU13 - PORT SELECT AND STATUS
2  FORMAT --------------------------------------------------
4  FORMAT CIU13 - ERROR(S) IN MODULE = *DECD
5  FORMAT CIU13 - CIU TERMINATED - FATAL ERRORS 
* 
* --------------INITIALIZATION------------------------------- 
* 
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
22 B6 = P3 .LS. 3 + 7        *CALC HIGHEST AVAIL PORT 
   B5 = 0 
* 
* ------------------TEST------------------------------------- 
* 
30 B0 = 1 
   RES, ABT 70               *RESERVE CHANNEL 
   B0 = 2 
   FUNC 0000, ABT 70         *DESELECT ALL PORTS
   B1 = 140 
   B2 = 740 
   B3 = 0 
   B4 = 700 
32 B0 = 1                    *CODE FOR ABORT
   RES, ABT 70
   B0 = 2                    *CODE FOR ABORT
   FUNC B1, ABT 70           *SELECT PORT 
   FUNC B2, ABT 70           *SELECTED STATUS 
   B0 = 3                    *MESSAGE NUMBER IF ABORT 
   STATUS 1 WORDS TO SB, ABT 70 
   IF(SB .AND. 1 .EQ. 1)GOTO 34  *IF STATUS BIT SET 
* 
   ERROR 0/20,GOTO 70 
* 
34 B0 = 1                    *CODE FOR ABORT
   RES, ABT 70               *RESERVE THE CHANNEL 
   B0 = 2                    *ERROR CODE IF ABORT 
   FUNC B4, ABT 70           *DESELECTED STATUS 
   B0 = 3                    *MESSAGE NUMBER IF ABORT 
   STATUS 1 WORDS TO SB, ABT 70 
   IF(SB .AND. 1 .EQ. 0)GOTO 36  *IF STATUS BIT NOT SET 
* 
   ERROR 0/21,GOTO 70 
* 
36 B1 = B1 + 1
   B2 = B2 + 1
   B4 = B4 + 1
   GOTO 32 WHILE (B3 + 1 .LE. B6)  *REPEAT FOR ALL PORTS
* 
   GOTO 30 WHILE (B5 + 1 .LT. 500D)  *REPEAT 500 TIMES
* 
   B5 = 0                    *INITIALIZE PASS COUNTER 
40 B0 = 1                    *CODE FOR ABORT
   RES, ABT 70               *RESERVE CHANNEL 
   B0 = 2                    *CODE FOR ABORT
   FUNC 0040, ABT 70         *SELECT ALL CHANNELS 
   B2 = 740                  *INITIALIZE SELECT STATUS
   B3 = 0                    *INITIALIZE PORT COUNTER 
   B4 = 700                  *INITIALIZE DESELECT STATUS
42 B0 = 1                    *CODE FOR ABORT
   RES, ABT 70
   B0 = 2                    *CODE FOR ABORT
   FUNC B2, ABT 70           *SELECTED STATUS FUNCTION
   B0 = 3                    *ABORT CODE
   STATUS 1 WORDS TO SB, ABT 70 
   IF(SB .AND. 1 .EQ. 1)GOTO 44  *IF SEL. STAT. OK
* 
   ERROR 0/24,GOTO 70        *ERROR 24
* 
44 B0 = 1                    *CODE FOR ABORT
   RES, ABT 70               *RESERVE THE CHANNEL 
   B0 = 2                    *ABORT ERROR CODE
   FUNC B4, ABT 70           *DESELECTED STATUS FCN 
   B0 = 3                    *ABORT CODE
   STATUS 1 WORDS TO SB, ABT 70 
   IF(SB .AND. 1 .EQ. 0)GOTO 46  *IF DESEL. STAT OK 
* 
   ERROR 0/25,GOTO 70        *ERROR 25
* 
46 B2 = B2 + 1               *BUMP SELECTED STATUS CTR
   B4 = B4 + 1               *BUMP DESELECTED STATUS CTR
   GOTO 42 WHILE (B3 + 1 .LE. B6)  *REPEAT FOR ALL PORTS
* 
* ------------------REPEAT/EXIT------------------------------ 
* 
   GOTO 40 WHILE (B5 + 1 .LT. 500D)  *REPEAT 500 TIMES
* 
   IF(B7 .NE. 0)MSG 4(B7) TO DAYFILE  *IF ERRORS
   EXIT 
* 
* ------------------ABORT PROCESSOR-------------------------- 
* 
70 ENDSUB 
   B7 = B7 + 1               *BUMP ERROR POINTER
   B0 = B0 + 1500            *ADD MODULE NUMBER TO ERR CODE 
   CALL 98A                  *PROCESS ERROR 
   PICTURE
   HALT 
   MSG 2 TO PRINT 
   BLANK
   MSG 1 TO DISPLAY 
   IF(EC .AND. 77 .EQ. 20)GOTO 34  *IF EC 20
* 
   IF(EC .AND. 77 .EQ. 21)GOTO 36  *IF EC 21
* 
   IF(EC .AND. 77 .EQ. 24)GOTO 44  *IF EC 24
* 
   IF(EC .AND. 77 .EQ. 25)GOTO 46  *IF EC 25
* 
   IF(B7 .LT. 5)GOTO 22      *IF LESS THAN 5 ERRORS 
* 
   MSG 5 TO PRINT 
   MSG 4(B7) TO DAYFILE 
   END 20 
COMPILE         - CIU13 - 
   MODULE CIU15,6000(400),LOCK
***  CIU15 - PORT DESELECT AND STATUS TEST
**
*    1.0  PURPOSE 
* 
*         CIU15 TESTS THE PORT DESELECT LOGIC OF THE INPUT CONTROLLER.
*         PORTS ARE FIRST DESELECTED INDIVIDUALLY AND THE SELECTED AND
*         DESELECTED STATUS CHECKED AFTER WHICH THE PORTS ARE 
*         DESELECTED WITH A DESELECT ALL FUNCTION AND THE STATUS CHECKED. 
* 
*    2.0  METHOD
* 
*         1. POST RUNNING MESSAGE.
*         2. CHECK P3 TO DETERMINE THE HIGHEST AVAILABLE PORT.
*         3. RESERVE THE INPUT CHANNEL. 
*         4. FUNCTION 0040 TO SELECT ALL PORTS. 
*         5. INITIALIZE FUNCTION AND STATUS CODES.
*         6. FUNCTION TO DESELECT 1 PORT. 
*         7. FUNCTION TO REQUEST SELECTED STATUS FOR THAT PORT. 
*         8. INPUT 1 STATUS WORD. 
*         9. IF SELECTED STATUS OK GO TO STEP 11. 
*         10. SET ERROR 22 AND GO TO ABORT PROCESSOR. 
*         11. RESERVE THE CHANNEL.
*         12. FUNCTION TO REQUEST DESELECTED STATUS FOR THAT PORT.
*         13. INPUT 1 STATUS WORD.
*         14. IF DESELECTED STATUS OK GO TO STEP 16.
*         15. SET ERROR 23 AND GO TO ABORT PROCESSOR. 
*         16. INCREMENT FUNCTION AND STATUS CODES FOR NEXT PORT.
*         17. GO TO STEP 6 UNTIL ALL AVAILABLE PORTS ARE CHECKED. 
*         18. REPEAT TO STEP 3 FOR 500 TIMES. 
*         19. INITIALIZE THE PASS COUNTER.
*         20. RESERVE THE CHANNEL.
*         21. FUNCTION 40 TO SELECT ALL PORTS.
*         22. FUNCTION 0000 TO DESELECT ALL PORTS.
*         23. INITIALIZE THE STATUS REQUEST FUNCTION CODES. 
*         24. RESERVE THE CHANNEL.
*         25. FUNCTION TO REQUEST SELECTED STATUS FOR CURRENT PORT. 
*         26. INPUT 1 STATUS WORD.
*         27. IF SELECTED STATUS OK GO TO STEP 29.
*         28. SET ERROR 26 AND GO TO ABORT PROCESSOR. 
*         29. RESERVE THE CHANNEL.
*         30. FUNCTION TO REQUEST DESELECTED STATUS.
*         31. INPUT 1 STATUS WORD.
*         32. IF DESELECTED STATUS OK GO TO STEP 34.
*         33. SET ERROR 27 AND GO TO ABORT PROCESSOR. 
*         34. INCREMENT STATUS REQUEST FUNCTION CODES.
*         35. GO TO STEP 24 UNTIL ALL PORTS CHECKED.
*         36. REPEAT TO STEP 21 FOR 500 TIMES.
*         37. CHECK P3 AND EXIT IF NO UNINSTALLED PORTS.
*         38. RESERVE THE CHANNEL.
*         39. FUNCTION 40 TO SELECT ALL PORTS.
*         40. DETERMINE THE FIRST UNINSTALLED PORT. 
*         41. INITIALIZE THE STATUS FUNCTION CODES. 
*         42. RESERVE THE CHANNEL.
*         43. FUNCTION FOR DESELECTED STATUS ON CURRENT PORT. 
*         44. INPUT 1 STATUS WORD.
*         45. IF STATUS IS DESELECTED, GO TO STEP 47. 
*         46. SET ERROR 31 AND GO TO ERROR PROCESSOR. 
*         47. RESERVE THE CHANNEL.
*         48. FUNCTION FOR SELECTED STATUS. 
*         49. INPUT 1 STATUS WORD.
*         50. IF STATUS IS NOT SELECTED, GO TO STEP 53. 
*         51. SET ERROR 32 AND GO TO ERROR PROCESSOR. 
*         52. RESERVE THE CHANNEL.
*         53. INCREMENT STATUS FUNCTION CODES.
*         54. REPEAT TO STEP 42 FOR ALL UNINSTALLED PORTS.
*         55. EXIT. 
* 
*    3.0  ERRORS REPORTED 
* 
*         EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT 
*         EC - 02 ABORT ON FUNCTION *OCT AT LINE *OCT 
*         EC - 03 ABORT ON STATUS COMMAND AT LINE *OCT
*         EC - 22 STATUS ERROR ON DESELECT PORT *DEC
*          SELECTED STATUS  EXP - 0000  REC - 0001
*         EC - 23 STATUS ERROR ON DESELECT PORT *DEC
*          DESELECTED STATUS  EXP - 0001  REC - 0000
*         EC - 26 STATUS ERROR ON DESELECT ALL PORTS
*          SELECTED STATUS  EXP - 0000  REC - 0001
*         EC - 27 STATUS ERROR ON DESELECT ALL PORTS
*          DESELECTED STATUS  EXP - 0001  REC - 0000
*         EC - 31 STATUS ERROR FOR UNINSTALLED PORT *DEC
*          DESELECTED STATUS  EXP - 0001  REC - 0000
*         EC - 32 STATUS ERROR FOR UNINSTALLED PORT *DEC
*          SELECTED STATUS  EXP - 0000  REC - 0001
* 
  
* 
*    4.0  ENTRY CONDITIONS - NONE 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = CODE FOR COMMAND ABORT.
*         B1 = DESELECT PORT XX FUNCTION CODE.
*         B2 = SELECTED STATUS REQUEST FUNCTION CODE. 
*         B3 = PORT COUNTER.
*         B4 = DESELECTED STATUS REQUEST FUNCTION CODE. 
*         B5 = PASS COUNTER.
*         B6 = HIGHEST AVAILABLE PORT NUMBER. 
*         B7 = ERROR COUNTER. 
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98A = ERROR PROCESSOR
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT CIU15 - PORT DESELECT AND STATUS
2  FORMAT --------------------------------------------------
4  FORMAT CIU15 - ERROR(S) IN MODULE = *DECD
5  FORMAT CIU15 - CIU TERMINATED - FATAL ERRORS 
* 
* ------------------INITIALIZATION--------------------------- 
* 
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
22 B5 = 0 
   B6 = P3 .LS. 3 + 7        *CALC HIGHEST AVAIL PORT 
* 
* ------------------TEST------------------------------------- 
* 
30 B0 = 1 
   RES, ABT 70               *RESERVE CHANNEL 
   B0 = 2 
   FUNC 0040, ABT 70         *SELECT ALL PORTS
   B1 = 100 
   B2 = 740 
   B3 = 0 
   B4 = 700 
32 RES, ABT 70
   FUNC B1, ABT 70           *DESELECT A PORT 
   FUNC B2, ABT 70           *SELECTED STATUS 
   B0 = 3                    *MESSAGE NUMBER IF ABORT 
   STATUS 1 WORDS TO SB, ABT 70 
   IF(SB .AND. 1 .EQ. 0)GOTO 34  *IF SEL. STAT NOT
* 
   ERROR 0/22,GOTO 70 
* 
34 B0 = 1                    *CODE FOR ABORT
   RES, ABT 70               *RESERVE THE CHANNEL 
   B0 = 2                    *ERROR CODE IF ABORT 
   FUNC B4, ABT 70           *DESELECTED STATUS 
   B0 = 3                    *MESSAGE NUMBER IF ABORT 
   STATUS 1 WORDS TO SB, ABT 70 
   IF(SB .AND. 1 .EQ. 1)GOTO 36  *IF DESEL. STAT
* 
   ERROR 0/23,GOTO 70 
* 
36 B1 = B1 + 1
   B2 = B2 + 1
   B4 = B4 + 1
   GOTO 32 WHILE (B3 + 1 .LE. B6)  *REPEAT FOR ALL PORTS
* 
   GOTO 30 WHILE (B5 + 1 .LT. 500D)  *REPEAT 500 TIMES
* 
   B5 = 0                    *INITIALIZE PASS COUNTER 
40 B0 = 1                    *CODE FOR ABORT
   RES, ABT 70               *RESERVE CHANNEL 
   B0 = 2                    *CODE FOR ABORT
   FUNC 0040, ABT 70         *SELECT ALL PORTS
   FUNC 0000, ABT 70         *DESELECT ALL CHANNELS 
   B2 = 740                  *INITIALIZE SELECT STATUS
   B3 = 0                    *INITIALIZE PORT COUNTER 
   B4 = 700                  *INITIALIZE DESELECT STATUS
42 B0 = 1                    *CODE FOR ABORT
   RES, ABT 70
   B0 = 2                    *CODE FOR ABORT
   FUNC B2, ABT 70           *SELECTED STATUS FUNCTION
   B0 = 3                    *ABORT CODE
   STATUS 1 WORDS TO SB, ABT 70 
   IF(SB .AND. 1 .EQ. 0)GOTO 44  *IF SEL STAT OK
* 
   ERROR 0/26,GOTO 70        *ERROR 26
* 
44 B0 = 1                    *CODE FOR ABORT
   RES, ABT 70               *RESERVE THE CHANNEL 
   B0 = 2                    *ERROR CODE IF ABORT 
   FUNC B4, ABT 70           *DESELECTED STATUS FCN 
   B0 = 3                    *ABORT CODE
   STATUS 1 WORDS TO SB, ABT 70 
   IF(SB .AND. 1 .EQ. 1)GOTO 46  *IF DESEL STAT OK
* 
   ERROR 0/27,GOTO 70        *ERROR 27
* 
46 B2 = B2 + 1               *BUMP SELECTED STATUS CTR
   B4 = B4 + 1               *BUMP DESELECTED STATUS CTR
   GOTO 42 WHILE (B3 + 1 .LE. B6)  *REPEAT FOR ALL PORTS
* 
   GOTO 40 WHILE (B5 + 1 .LT. 500D)  *REPEAT 500 TIMES
* 
   IF(P3 .EQ. 3)GOTO 56      *IF NO UNINSTALLED PORTS 
* 
   B0 = 1                    *CODE FOR ABORT
   RES, ABT 70               *RESERVE CHANNEL 
   B0 = 2                    *CODE IF ABORT 
   FUNC 0040, ABT 70         *SELECT ALL PORTS
   B6 = B6 + 1               *FIRST UNINSTALLED PORT
   B1 = 700 + B6             *DESELECTED STATUS FCN 
   B2 = 740 + B6             *SELECTED STATUS FCN 
50 B0 = 1                    *CODE FOR ABORT
   RES, ABT 70               *RESERVE CHANNEL 
   B0 = 2                    *CODE FOR ABORT
   FUNC B1, ABT 70           *DESELECTED STATUS FCN 
   B0 = 3                    *CODE FOR ABORT
   STATUS 1 WORDS TO SB, ABT 70 
   IF(SB .AND. 1 .EQ. 1)GOTO 52  *IF DESEL STAT 
* 
   ERROR 0/31,GOTO 70        *ERROR 31
* 
52 B0 = 1                    *CODE FOR ABORT
   RES, ABT 70               *RESERVE THE CHANNEL 
   B0 = 2                    *CODE FOR ABORT
   FUNC B2,ABT 70            *SELECTED STATUS FCN 
   B0 = 3                    *CODE FOR ABORT
   STATUS 1 WORDS TO SB, ABT 70 
   IF(SB .AND. 1 .EQ. 0)GOTO 54  *IF NOT SEL STAT 
* 
   ERROR 0/32,GOTO 70        *ERROR 32
* 
54 B0 = 1                    *CODE FOR ABORT
   RES, ABT 70               *RESERVE THE CHANNEL 
   B1 = B1 + 1               *BUMP STATUS FCN 
   B2 = B2 + 1               *BUMP STATUS FCN 
   GOTO 50 WHILE(B6 + 1 .LE. 31D)  *REPEAT FOR ALL PORTS
* 
* 
* ------------------REPEAT/EXIT------------------------------ 
* 
56 IF(B7 .NE. 0)MSG 4(B7) TO DAYFILE  *IF ERRORS
   EXIT 
* 
* ------------------ABORT PROCESSOR-------------------------- 
* 
70 ENDSUB 
   B7 = B7 + 1               *BUMP ERROR POINTER
   B0 = B0 + 1700            *ADD MODULE NUMBER TO ERR CODE 
   CALL 98A                  *PROCESS ERROR 
   PICTURE
   HALT 
   MSG 2 TO PRINT 
   BLANK
   MSG 1 TO DISPLAY 
   IF(EC .AND. 77 .EQ. 22)GOTO 34  *IF EC 22
* 
   IF(EC .AND. 77 .EQ. 23)GOTO 36  *IF EC 23
* 
   IF(EC .AND. 77 .EQ. 26)GOTO 44  *IF EC 26
* 
   IF(EC .AND. 77 .EQ. 27)GOTO 46  *IF EC 27
* 
   IF(EC .AND. 77 .EQ. 31)GOTO 52  *IF EC 31
* 
   IF(EC .AND. 77 .EQ. 32)GOTO 54  *IF EC 32
* 
   IF(B7 .LT. 5)GOTO 22      *IF LESS THAN 5 ERRORS 
* 
   MSG 5 TO PRINT 
   MSG 4(B7) TO DAYFILE 
   END 20 
COMPILE         - CIU15 - 
   MODULE CIU17,6000(400),LOCK
***  CIU17 - READ BUFFER MEMORY TEST
**
*    1.0  PURPOSE 
* 
*         CIU17 TESTS THE ABILITY OF THE INPUT CONTROLLER TO
*         TRANSFER DATA FROM THE BUFFER MEMORY.  THE TEST 
*         WILL READ 1008 TIMES 4 (7700 OCTAL) TWO WORD DATA 
*         DOUBLETS, FOUR DOUBLETS FOR EACH OF THE POSSIBLE 1008 
*         PORTS.  THE CONTENT OF THE DATA RETURNED WILL NOT BE
*         CHECKED SINCE THE DATA CONTAINED IS INDEFINITE. 
*         THIS MODULE MAY ALSO BE USED TO CLEAR THE BUFFER
*         MEMORY OF GARBAGE AND EXTRANEOUS KEY PRESSES SINCE
*         THE MEMORY SLOTS ARE FILLED WITH ZEROES WHEN READ.
*         CIU17 ALSO SUPPORTS SCOPING LOOPS.
* 
*    2.0  METHOD
* 
*         1. POST RUNNING MESSAGE.
*         2. INITIALIZE LOOP COUNTER. 
*         3. RESERVE THE CHANNEL. 
*         4. FUNCTION 40 TO SELECT ALL PORTS. 
*         5. RESERVE THE CHANNEL. 
*         6. INPUT 2 WORDS TO THE INPUT BUFFER. 
*         7. IF SCOPING LOOP GO TO STEP 3.
*         8. REPEAT FOR 7700B TIMES (1008 X 4). 
*         9. EXIT.
* 
*    3.0  ERRORS REPORTED 
* 
*         1. EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT
*         2. EC - 02 ABORT ON FUNCTION *OCT AT LINE *OCT
*         3. EC - 05 ABORT ON .IN. COMMAND AT LINE *OCT 
* 
  
* 
*    4.0  ENTRY CONDITIONS - NONE 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = CODE FOR COMMAND ABORT.
*         B1 = PASS COUNTER.
*         B2 = ERROR COUNTER. 
*         B3 = SCOPING LOOP COUNTER.
*         B7 = ABORT COUNTER. 
* 
*         IB(0-1) RECEIVES THE 2 WORD DATA DOUBLETS.  THE DOUBLETS
*         HAVE THE FOLLOWING FORMAT:  
* 
*         WORD 1- 
*           BIT 11 = 1
*           BIT 10 = NOT USED 
*           BIT 5-9 = SITE ADDRESS
*           BIT 0-4 = PORT ADDRESS
* 
*         WORD 2- 
*           BIT 11 = 0
*           BIT 1-10 = DATA 
*           BIT 0 = 1 FOR DATA PARITY ERROR OR 0 FOR NO ERROR 
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98A = ERROR PROCESSOR
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT CIU17 - READ BUFFER MEMORY
2  FORMAT --------------------------------------------------
3  FORMAT CIU17 - EC = *DECD, LC = *DECD
4  FORMAT CIU17 - ERROR(S) IN MODULE = *DECD
5  FORMAT CIU17 - CIU TERMINATED - FATAL ERRORS 
* 
* ------------------INITIALIZATION--------------------------- 
* 
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
   B1 = 1                    *SET LOOP COUNTER
   B0 = 1                    *CODE FOR ABORT
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 2                    *CODE FOR ABORT
   FUNC 0040,ABT 70          *SELECT ALL PORTS
* 
* ------------------TEST------------------------------------- 
* 
30 B0 = 1                    *CODE FOR ABORT
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 5                    *CODE FOR ABORT
   IN 2 WORDS TO IB, ABT 70 
   B3 = B3 + 1               *BUMP LOOP COUNTER 
   IF(ES .AND. SL .NE. 0)MSG 3(B2,B3) TO DISPLAY
   IF(ES .AND. SL .NE. 0)GOTO 30  *IF SCOPING LOOP
* 
   GOTO 30 WHILE(B1 + 1 .LE. 7700B)  *REPEAT 1008 X 4 TIMES 
* 
   IF(B2 .NE. 0)MSG 4(B2) TO DAYFILE  *IF ERRORS
   IF(B7 .NE. 0)MSG 4(B7) TO DAYFILE  *IF ERRORS
   GOTO 76
* 
70 ENDSUB 
   B2 = B2 + 1               *BUMP ERROR COUNTER
   IF(ES .AND. SL .NE. 0)GOTO 30  *IF SCOPING LOOP
* 
   B7 = B7 + 1               *BUMP ABORT COUNTER
   B0 = B0 + 2100            *ADD MODULE NUMBER 
   CALL 98A                  *ERROR PROCESSOR 
   HALT 
   MSG 2 TO PRINT 
   BLANK
   MSG 1 TO DISPLAY 
   IF(B2 .LT. 5)GOTO 30      *IF LT 5 ERRORS
* 
   MSG 5 TO PRINT 
   MSG 4(B2) TO DISPLAY 
76 END 20 
COMPILE         - CIU17 - 
   MODULE CIU21,6000(400),LOCK
***  CIU21 - ECHO INPUT TEST-FIXED PATTERNS 
**
*    1.0  PURPOSE 
* 
*         CIU21 WITH CIU31 TEST THE DATA PATH FROM THE PPU
*         THROUGH THE CIU AND SCU TO THE TERMINAL.  AT THE
*         TERMINAL, THE DATA IS ECHOED BACK TO TEST THE PATH
*         THROUGH THE SCU AND CIU TO THE INPUT PPU.  CIU21
*         IS THE MODULE THAT RECEIVES THE ECHO PATTERNS FROM
*         THE CIU AND CHECKS THEM FOR ERRORS.  CIU21 AND
*         CIU31 USE 5 FIXED DATA PATTERNS AND DATA ERRORS 
*         ARE REPORTED AT THE END OF THE TEST.
* 
*    2.0  METHOD
* 
*         1.  POST RUNNING MESSAGE. 
*         2.  RESERVE THE CHANNEL.
*         3.  FUNCTION 40 TO SELECT ALL PORTS.
*         4.  FORM SELECTED STATUS FUNCTION CODE FOR PORT 
*             SELECTED IN P0. 
*         5.  FUNCTION FOR SELECTED STATUS ON THAT PORT.
*         6.  INPUT 1 STATUS WORD.
*         7.  IF STATUS DOES NOT SHOW PORT SELECTED, SET
*             ERROR CODE 24 AND GO TO ERROR PROCESSOR ROUTINE.
*         8.  OUTPUT WAITING ECHO MESSAGE TO USER.
*         9.  FORM ADDRESS WORD FROM P0 SITE AND P1 PORT. 
*         10. RESET WORD COUNTER. 
*         11. RESERVE THE CHANNEL.
*         12. INPUT 2 WORDS TO THE INPUT BUFFER.
*         13. IF FIRST WORD DOES NOT HAVE BIT 11 SET, SET 
*             ERROR CODE 33 AND ABORT.
*         14. IF SECOND WORD DOES NOT HAVE BIT 11 CLEAR,
*             SET ERROR 33 AND ABORT. 
*         15. IF SITE/PORT ADDRESS OF DATA INPUT DOES NOT MATCH 
*             DESIRED PORT, GO TO STEP 11.
*         16. IF MORE THAN 47B ERRORS ALREADY, DO NOT CHECK DATA
*             AND GO TO STEP 26.
*         17. IF DATA DOES NOT HAVE PARTIY ERROR GO TO STEP 20. 
*         18. SEND PARITY ERROR MESSAGE TO DISPLAY. 
*         19. BUMP LINE AND ERROR COUNTERS. 
*         20. IF INPUT DATA EQUALS EXPECTED DATA IN OB WORD 
*             GO TO STEP 26.
*         21. SEND ECHO ERROR MESSAGE TO DISPLAY. 
*         22. IF FIRST ERROR SAVE THE EXPECTED DATA.
*         23. IF FIRST ERROR SAVE THE ACTUAL DATA.
*         24. BUMP THE LINE AND ERROR COUNTERS. 
*         25. POST CHAR./PASS MESSAGE TO DISPLAY. 
*         26. GO TO STEP 11 UNTIL 500 WORDS OF CURRENT PAT. DONE. 
*         27. GO TO STEP 10 UNTIL 5 PASSES DONE.
*         28. IF NO ERRORS, EXIT. 
*         29. POST ECHO ERROR MESSAGE TO PRINT. 
*         30. SEND ENTER GO TO PRINT MESSAGE TO PRINT.
*         31. HALT. 
*         32. PICTURE THE DISPLAY.
*         33. HALT. 
*         34. EXIT. 
* 
*    3.0  ERRORS REPORTED 
* 
*         EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT 
* 
*         EC - 02 ABORT ON FUNCTION *OCT AT LINE *OCT 
* 
*         EC - 03 ABORT ON STATUS COMMAND AT LINE *OCT
* 
*         EC - 05 ABORT ON .IN. COMMAND AT LINE *OCT
* 
*         EC - 24 STATUS ERROR ON SELECT ALL PORTS
*         SELECTED STATUS  EXP - 0001  REC - 0000 
* 
*         EC - 33 DATA SEQUENCE ERROR 
*         DATA WORD 1 - *OCT
*         DATA WORD 2 - *OCT
* 
*         PARITY ERROR IN RECEIVED DATA 
* 
*         ECHO ERROR-RECD *OCT EXPD *OCT
* 
  
* 
*    4.0  ENTRY CONDITIONS - NONE 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = CODE FOR COMMAND ABORT.
*         B1 = EXPECTED DATA WORD.
*         B2 = DATA WORD PASS COUNTER.
*         B3 = SELECTED STATUS REQUEST FUNCTION CODE. 
*         B4 = PASS COUNTER.
*         B5 = DATA WORD COUNTER. 
*         B6 = SITE/PORT ADDRESS WORD.
*         B7 = ABORT COUNTER. 
*         B8 = PASS COUNTER FOR K/L DISPLAY.
*         B10 = K/L DISPLAY LINE COUNTER. 
*         B11 = DATA ERROR COUNTER. 
* 
*         THE FIRST 400 WORDS OF THE OUTPUT BUFFER ARE
*         USED TO HOLD THE GENERATED RANDOM DATA PATTERN. 
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98A = ABORT/ERROR PROCESSOR. 
* 
*    7.0  MISCELLANEOUS.
* 
*         IN OPERATION, CIU21 IS RUN UNDER 1 COPY OF THE TEST 
*         AND CIU31 IS UNDER ANOTHER COPY.  BECAUSE OF THE
*         DESIGN OF THE EQUIPMENT THERE IS NO WAY FOR THE 2 
*         MODULES TO COMMUNICATE.  AS A RESULT, CIU21 IS
*         DEPENDENT ON CIU31 TO OUTPUT THE CORRECT NUMBER OF
*         ECHO CHARACTERS FOR CIU21 TO KNOW WHEN TO TERMINATE.
*         IF CIU21 DOES NOT RECEIVE ALL THE CHARACTERS, IT
*         WILL NOT TERMINATE, AND WILL LOOP LOOKING FOR MORE
*         CHARACTERS UNTIL MODULE TIME LIMIT OR UNTIL THE 
*         USER STOPS THE MODULE.
* 
*         CIU21 MUST BE STARTED BEFORE CIU31.  ALSO THERE MUST
*         NOT BE EXTRANEOUS KEYS IN THE BUFFER MEMORY BEFORE
*         CIU21 IS STARTED, OTHERWISE THESE GARBAGE CHARACTERS
*         WILL BE ASSUMED TO BE ECHO CHARACTERS.  TO FLUSH
*         THE BUFFER MEMORY, THE USER SHOULD RUN CIU17 BEFORE 
*         RUNNING CIU21 FOR THE FIRST TIME. 
* 
*         CIU21 DOES NOT PRINT DATA ERROR MESSAGES AS THEY OCCUR
*         BECAUSE INTERRUPTING THE TEST TO PRINT A MESSAGE WILL 
*         CAUSE CIU21 TO GET OUT OF SYNC WITH CIU31.  INSTEAD 
*         THE FIRST 50B ERRORS ARE SAVED AND PRINTED AT THE 
*         END OF THE MODULE.  ALSO IF THE USER STOPS THE
*         MODULE WHILE RUNNING, CIU21 AND CIU31 WILL GET OUT
*         OF SYNC.
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT CIU21 - ECHO INPUT TEST-FIXED PATTERNS
2  FORMAT --------------------------------------------------
3  FORMAT WAITING ECHO FROM SITE *DEC PORT *DEC 
4  FORMAT ENTER GO TO PRINT NEXT *DEC ERRORS
5  FORMAT PARITY ERROR IN RECEIVED DATA 
6  FORMAT ECHO ERROR-RECD *OCT EXPD *OCT
7  FORMAT RECEIVING PATTERN *OCT  PASS *DEC 
10 FORMAT CIU21 - ERROR(S) IN MODULE = *DECD
11 FORMAT CIU21 - CIU TERMINATED - FATAL ERRORS 
* 
   DATA(OB(0),CON)776,552,400,524,754  *ECHO PATTERNS 
* 
* ------------------INITIALIZATION--------------------------- 
* 
* 
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
22 B0 = 1                    *SET ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 2                    *ABORT CODE
   FUNC 0040,ABT 70          *SELECT ALL PORTS
   B3 = P0 + 740             *FORM STATUS REQUEST 
   FUNC B3,ABT 70            *FUNCTION FOR STATUS 
   B0 = 3                    *ABORT CODE
   STATUS 1 WORDS TO SB 
   IF(SB .AND. 1 .NE. 1)ERROR 0/24,GOTO 70
*                            *IF PORT NOT SEL. ERROR 24 
   MSG 3(P0,P1) TO DISPLAY,PRINT
   B6 = P0 .LS. 5            *GET SITE NUMBER 
   B6 = B6 .OR. P1 .OR. 4000  *FORM ADDRESS WORD
   B3 = 1 
   B4 = 0 
* 
* ------------------TEST------------------------------------- 
* 
30 B0 = 1                    *ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 5                    *ABORT CODE
   IN 2 WORDS TO IB,ABT 70  *READ 
   IF(IB .AND. 4000 .NE. 4000)ERROR 0/33,GOTO 70
*                            *IF NOT 1ST WORD ERROR 33
   IF(IB(1) .AND. 4000 .NE. 0)ERROR 0/33,GOTO 70
*                            *IF NOT 2ND WORD ERROR 33
   IF(IB .NE. B6)GOTO 30     *IF NOT SELECTED PORT
*                            *IGNORE DATA KEYS
* PROCESS DATA PATTERN
   IF(B10 .GT. 47)GOTO 34  *IF GT 47 ERRORS 
* 
   IF(IB(1) .AND. 1 .NE. 1)GOTO 32  *IF NO PARITY ERROR 
* 
   MSG 5 TO LINE B10
   B10 = B10 + 1             *BUMP LINE COUNTER 
   B11 = B11 + 1             *BUMP DATA ERROR COUNTER 
32 B1 = IB(1) 
   IF(OB(B4) .EQ. B1)GOTO 34  *IF EXP = REC DATA
* 
   MSG 6(B1,OB(B4)) TO LINE B10 
   IF(B11 .EQ. 0)OB(10) = B1  *IF 1ST ERROR 
   IF(B11 .EQ. 0)OB(11) = OB(B4)  *IF 1ST ERROR 
   B10 = B10 + 1             *BUMP LINE COUNTER 
   B11 = B11 + 1             *BUMP DATA ERROR COUNTER 
* 
* ------------------REPEAT/EXIT------------------------------ 
* 
34 B8 = B8 + 1
   MSG 7(OB(B4),B8) TO LINE 47
   GOTO 30 WHILE(B3 + 1 .LT. 500D)  *REPEAT 500 TIMES 
* 
   B3 = 1 
   GOTO 30 WHILE(B4 + 1 .LT. 5)  *REPEAT 5 TIMES
* 
   IF(B11 .EQ. 0)GOTO 36     *IF NO ERRORS
* 
   MSG 6(OB(10),OB(11))TO PRINT 
   MSG 4(B11) TO PRINT
   HALT 
   PICTURE
   HALT 
   MSG 10(B11) TO DAYFILE 
36 EXIT 
* 
* 
* ------------------ABORT PROCESSOR-------------------------- 
* 
70 ENDSUB 
   B7 = B7 + 1               *BUMP ERROR POINTER
   B0 = B0 + 2500            *ADD MODULE NUMBER TO ERR CODE 
   CALL 98A                  *PROCESS ERROR 
   PICTURE
   HALT 
   MSG 2 TO PRINT 
   BLANK
   MSG 1 TO DISPLAY 
   IF(B7 .LT. 5)GOTO 22      *IF LESS THAN 5 ERRORS 
* 
   MSG 11 TO PRINT
   MSG 10(B7) TO DAYFILE
   END 20 
COMPILE         - CIU21 - 
   MODULE CIU23,6000(400),LOCK
***  CIU23 - ECHO INPUT TEST-RANDOM PATTERNS
**
*    1.0  PURPOSE 
* 
*         CIU23 WITH CIU33 TEST THE DATA PATH FROM THE PPU
*         THROUGH THE CIU AND SCU TO THE TERMINAL.  AT THE
*         TERMINAL, THE DATA IS ECHOED BACK TO TEST THE PATH
*         THROUGH THE SCU AND CIU TO THE INPUT PPU.  CIU23
*         IS THE MODULE THAT RECEIVES THE ECHO PATTERNS FROM
*         THE CIU AND CHECKS THEM FOR ERRORS.  CIU23 AND
*         CIU33 USE RANDOM DATA PATTERNS GENERATED FROM 
*         WITHIN EACH MODULE.  BOTH MODULES GENERATE THE
*         SAME DATA PATTERNS. 
* 
*    2.0  METHOD
* 
*         1.  POST RUNNING MESSAGE. 
*         2.  RESERVE THE CHANNEL.
*         3.  FUNCTION 40 TO SELECT ALL PORTS.
*         4.  FORM SELECTED STATUS FUNCTION CODE FOR PORT 
*             SELECTED IN P0. 
*         5.  FUNCTION FOR SELECTED STATUS ON THAT PORT.
*         6.  INPUT 1 STATUS WORD.
*         7.  IF STATUS DOES NOT SHOW PORT SELECTED, SET
*             ERROR CODE 24 AND GO TO ERROR PROCESSOR ROUTINE.
*         8.  OUTPUT WAITING ECHO MESSAGE TO USER.
*         9.  FORM ADDRESS WORD FROM P0 SITE AND P1 PORT. 
*         10. GENERATE RANDOM DATA FOR 400 WORDS IN OUTPUT BUFFER.
*         11. MASK OFF 7 BITS OF OUTPUT BUFFER WORD AND LEFT
*             SHIFT 1 PLACE.
*         12. SET BIT 8 IN OUTPUT BUFFER WORD.
*         13. REMOVE CERTAIN NON ECHO CODES FROM OB WORD. 
*         14. GO TO STEP 11 UNTIL ALL 400 WORDS DONE. 
*         15. RESET WORD COUNTER. 
*         16. RESERVE THE CHANNEL.
*         17. INPUT 2 WORDS TO THE INPUT BUFFER.
*         18. IF FIRST WORD DOES NOT HAVE BIT 11 SET, SET 
*             ERROR CODE 33 AND ABORT.
*         19. IF SECOND WORD DOES NOT HAVE BIT 11 CLEAR,
*             SET ERROR 33 AND ABORT. 
*         20. IF SITE/PORT ADDRESS OF DATA INPUT DOES NOT MATCH 
*             DESIRED PORT, GO TO STEP 16.
*         21. IF MORE THAN 47B ERRORS ALREADY, DO NOT CHECK DATA
*             AND GO TO STEP 30.
*         22. IF DATA DOES NOT HAVE PARTIY ERROR GO TO STEP 25. 
*         23. SEND PARITY ERROR MESSAGE TO DISPLAY. 
*         24. BUMP LINE AND ERROR COUNTERS. 
*         25. IF INPUT DATA EQUALS GENERATED DATA IN OB WORD
*             GO TO STEP 30.
*         26. SEND ECHO ERROR MESSAGE TO DISPLAY. 
*         27. IF FIRST ERROR SAVE THE EXPECTED DATA.
*         28. IF FIRST ERROR SAVE THE ACTUAL DATA.
*         29. BUMP THE LINE AND ERROR COUNTERS. 
*         30. GO TO STEP 16 UNTIL ALL 400 WORDS DONE. 
*         31. GO TO STEP 10 UNTIL 8 PASSES DONE.
*         32. IF NOT ERRORS, EXIT.
*         33. POST ECHO ERROR MESSAGE TO PRINT. 
*         34. SEND ENTER GO TO PRINT MESSAGE TO PRINT.
*         35. HALT. 
*         36. PICTURE THE DISPLAY.
*         37. HALT. 
*         38. EXIT. 
* 
*    3.0  ERRORS REPORTED 
* 
*         EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT 
* 
*         EC - 02 ABORT ON FUNCTION *OCT AT LINE *OCT 
* 
*         EC - 03 ABORT ON STATUS COMMAND AT LINE *OCT
* 
*         EC - 05 ABORT ON .IN. COMMAND AT LINE *OCT
* 
*         EC - 24 STATUS ERROR ON SELECT ALL PORTS
*         SELECTED STATUS  EXP - 0001  REC - 0000 
* 
*         EC - 33 DATA SEQUENCE ERROR 
*         DATA WORD 1 - *OCT
*         DATA WORD 2 - *OCT
* 
*         PARITY ERROR IN RECEIVED DATA 
* 
*         ECHO ERROR-RECD *OCT EXPD *OCT
* 
  
* 
*    4.0  ENTRY CONDITIONS - NONE 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = CODE FOR COMMAND ABORT.
*         B1 = EXPECTED DATA WORD.
*         B2 = DATA WORD PASS COUNTER.
*         B3 = SELECTED STATUS REQUEST FUNCTION CODE. 
*         B4 = PASS COUNTER.
*         B5 = DATA WORD COUNTER. 
*         B6 = SITE/PORT ADDRESS WORD.
*         B7 = ABORT COUNTER. 
*         B8 = PASS COUNTER FOR K/L DISPLAY.
*         B10 = K/L DISPLAY LINE COUNTER. 
*         B11 = DATA ERROR COUNTER. 
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98A - ERROR PROCESSOR
* 
*    7.0  MISCELLANEOUS.
* 
*         IN OPERATION, CIU23 IS RUN UNDER 1 COPY OF THE TEST 
*         AND CIU33 IS UNDER ANOTHER COPY.  BECAUSE OF THE
*         DESIGN OF THE EQUIPMENT THERE IS NO WAY FOR THE 2 
*         MODULES TO COMMUNICATE.  AS A RESULT, CIU23 IS
*         DEPENDENT ON CIU33 TO OUTPUT THE CORRECT NUMBER OF
*         ECHO CHARACTERS FOR CIU23 TO KNOW WHEN TO TERMINATE.
*         IF CIU23 DOES NOT RECEIVE ALL THE CHARACTERS, IT
*         WILL NOT TERMINATE, AND WILL LOOP LOOKING FOR MORE
*         CHARACTERS UNTIL MODULE TIME LIMIT OR UNTIL THE 
*         USER STOPS THE MODULE.
* 
*         CIU23 MUST BE STARTED BEFORE CIU33.  ALSO THERE MUST
*         NOT BE EXTRANEOUS KEYS IN THE BUFFER MEMORY BEFORE
*         CIU23 IS STARTED, OTHERWISE THESE GARBAGE CHARACTERS
*         WILL BE ASSUMED TO BE ECHO CHARACTERS.  TO FLUSH
*         THE BUFFER MEMORY, THE USER SHOULD RUN CIU17 BEFORE 
*         RUNNING CIU23 FOR THE FIRST TIME. 
* 
*         CIU23 DOES NOT PRINT DATA ERROR MESSAGES AS THEY OCCUR
*         BECAUSE INTERRUPTING THE TEST TO PRINT A MESSAGE WILL 
*         CAUSE CIU23 TO GET OUT OF SYNC WITH CIU33.  INSTEAD 
*         THE FIRST 50B ERRORS ARE SAVED AND PRINTED AT THE 
*         END OF THE MODULE.  ALSO IF THE USER STOPS THE
*         MODULE WHILE RUNNING, CIU23 AND CIU33 WILL GET OUT
*         OF SYNC.
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT CIU23 - ECHO INPUT TEST-RANDOM PATTERNS 
2  FORMAT --------------------------------------------------
3  FORMAT WAITING ECHO FROM SITE *DEC PORT *DEC 
4  FORMAT ENTER GO TO PRINT NEXT *DEC ERRORS
5  FORMAT PARITY ERROR IN RECEIVED DATA 
6  FORMAT ECHO ERROR-RECD *OCT EXPD *OCT
7  FORMAT RECEIVING PATTERN *OCT  PASS *DEC 
10 FORMAT CIU23 - ERROR(S) IN MODULE = *DECD
11 FORMAT CIU23 - CIU TERMINATED - FATAL ERRORS 
* 
* ------------------INITIALIZATION--------------------------- 
* 
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
22 B0 = 1                    *SET ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 2                    *ABORT CODE
   FUNC 0040,ABT 70          *SELECT ALL PORTS
   B3 = P0 + 740             *FORM STATUS REQUEST 
   FUNC B3,ABT 70            *FUNCTION FOR STATUS 
   B0 = 3                    *ABORT CODE
   STATUS 1 WORDS TO SB 
   IF(SB .AND. 1 .NE. 1)ERROR 0/24,GOTO 70
*                            *IF PORT NOT SEL. ERROR 24 
   MSG 3(P0,P1) TO DISPLAY,PRINT
   B6 = P0 .LS. 5            *GET SITE NUMBER 
   B6 = B6 .OR. P1 .OR. 4000  *FORM ADDRESS WORD
* 
* ------------------TEST------------------------------------- 
* 
30 RANDOM TO OB FOR 400, START B4  *GET DATA
32 OB(B5) = OB(B5) .AND. 177 .LS. 1 
   OB(B5) = OB(B5) .OR. 400 
   IF(OB(B5) .EQ. 700)OB(B5) = 600  *IF 700 CODE
   IF(OB(B5) .EQ. 740)OB(B5) = 640  *IF 740 CODE
   IF(OB(B5) .EQ. 764)OB(B5) = 664  *IF 764 CODE
   IF(OB(B5) .EQ. 766)OB(B5) = 666  *IF 766 CODE
   IF(OB(B5) .EQ. 770)OB(B5) = 670  *IF 770 CODE
   IF(OB(B5) .EQ. 772)OB(B5) = 672  *IF 772 CODE
   GOTO 32 WHILE(B5 + 1 .LT. 400)  *REPEAT FOR 400 WORDS
* 
   B5 = 0 
   B3 = 0 
34 B0 = 1                    *ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 5                    *ABORT CODE
   IN 2 WORDS TO IB,ABT 70   *READ
   IF(IB .AND. 4000 .NE. 4000)ERROR 0/33,GOTO 70
*                            *IF NOT 1ST WORD, ERROR 33 
   IF(IB(1) .AND. 4000 .NE. 0)ERROR 0/33,GOTO 70
*                            *IF NOT 2ND WORD, ERROR 33 
   IF(IB .NE. B6)GOTO 34     *IF NOT DESIRED PORT 
*                            *IGNORE OTHER KEYS 
* PROCESS DATA PATTERN
   IF(B10 .GT. 47)GOTO 40  *IF GT 47 ERRORS 
* 
   IF(IB(1) .AND. 1 .NE. 1)GOTO 36  *IF NO PARITY ERROR 
* 
   MSG 5 TO LINE B10
   B10 = B10 + 1             *BUMP LINE COUNTER 
   B11 = B11 + 1             *BUMP DATA ERROR COUNTER 
36 B1 = IB(1) 
   IF(OB(B3) .EQ. B1)GOTO 40  *IF NO ERROR
* 
   MSG 6(B1,OB(B3)) TO LINE B10 
   IF(B11 .EQ. 0)IB(10) = B1  *IF 1ST ERROR 
   IF(B11 .EQ. 0)IB(11) = OB(B3)  *IF 1ST ERROR 
   B10 = B10 + 1             *BUMP LINE COUNTER 
   B11 = B11 + 1             *BUMP DATA ERROR COUNTER 
* 
* ------------------REPEAT/EXIT------------------------------ 
* 
40 B8 = B8 + 1
   MSG 7(OB(B3),B8) TO LINE 47
   GOTO 34 WHILE(B3 + 1 .LT. 400)  *REPEAT 400 TIMES
* 
   GOTO 30 WHILE(B4 + 1 .LT. 10)   *REPEAT 10 TIMES 
* 
   IF(B11 .EQ. 0)GOTO 42     *IF NO ERRORS
* 
   MSG 6(OB(10),OB(11))TO PRINT 
   MSG 4(B11) TO PRINT
   HALT 
   PICTURE
   HALT 
   MSG 10(B11) TO DAYFILE 
42 GOTO 76
* 
* 
* ------------------ABORT PROCESSOR-------------------------- 
* 
70 ENDSUB 
   B7 = B7 + 1               *BUMP ERROR POINTER
   B0 = B0 + 2700            *ADD MODULE NUMBER TO ERR CODE 
   CALL 98A                  *PROCESS ERROR 
   PICTURE
   HALT 
   MSG 2 TO PRINT 
   BLANK
   MSG 1 TO DISPLAY 
   IF(B7 .LT. 5)GOTO 22      *IF LESS THAN 5 ERRORS 
* 
   MSG 11 TO PRINT
   MSG 10(B7) TO DAYFILE
* 
76 END 20 
COMPILE         - CIU23 - 
   MODULE CIU31,6000(401),LOCK
***  CIU31 - ECHO OUTPUT TEST-FIXED PATTERNS
**
*    1.0  PURPOSE 
* 
*         CIU21 WITH CIU31 TEST THE DATA PATH FROM THE PPU
*         THROUGH THE CIU AND SCU TO THE TERMINAL.  AT THE
*         TERMINAL, THE DATA IS ECHOED BACK TO TEST THE PATH
*         THROUGH THE SCU AND CIU TO THE INPUT PPU.  CIU31
*         IS THE MODULE THAT TRANSMITS THE ECHO PATTERNS TO 
*         THE CIU.  CIU21 AND CIU31 USE 5 FIXED DATA
*         PATTERNS. 
* 
*    2.0  METHOD
* 
*         1.  POST RUNNING MESSAGE. 
*         2.  DELAY 5 SECONDS TO ALLOW CIU21 TO START.
*         3.  RESERVE THE OUTPUT CHANNEL. 
*         4.  PERFORM 2 FUNCTION 0000S TO INITIALIZE
*             THE OUTPUT CONTROLLER.
*         5.  GENERATE ADDRESS WORD FROM P0 AND P1. 
*         6.  PLUG ADDRESS INTO OUTPUT DATA TRIPLETS. 
*         7.  POST ECHOING MESSAGE. 
*         8.  INITIALIZE MAIN LOOP COUNTER. 
*         9.  INITIALIZE MESSAGE LOOP COUNTER.
*         10. PUT CURRENT PATTERN INTO OUTPUT MESSAGE.
*         11. RESERVE THE CHANNEL.
*         12. OUTPUT 3 WORDS OF TERMINAL MESSAGE. 
*         13. GO TO STEP 5  UNTIL ENTIRE MESSAGE HAS
*             BEEN OUTPUT.
*         14. PUT CURRENT ECHO PATTERN INTO ECHO DATA.
*         15. INITIALIZE ECHO LOOP COUNTER. 
*         16. RESERVE THE CHANNEL.
*         17. OUTPUT 3 WORDS OF ECHO DATA TRIPLET.
*         18. SET DELAY TO 70D MSEC. DEFAULT. 
*         19. IF P2 NONZERO, SET DELAY TO P2 VALUE. 
*         20. RELEASE THE CHANNEL.
*         21. DELAY X MILLISECONDS. 
*         22. GO TO STEP 16 500 TIMES.
*         23. GO TO STEP 9 FIVE TIMES FOR ALL 
*             5 DATA PATTERNS.
*         24. EXIT. 
* 
*    3.0  ERRORS REPORTED 
* 
*         1. EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT
*         2. EC - 02 ABORT ON FUNCTION 0000 AT LINE *OCT
*         3. EC - 04 ABORT ON .OUT. COMMAND AT LINE *OCT
* 
  
* 
*    4.0  ENTRY CONDITIONS - NONE 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = CODE FOR COMMAND ABORT.
*         B1 = SITE/PORT ADDRESS WORD.
*         B2 = MAIN LOOP COUNTER. 
*         B3 = ECHO PATTERN POINTER.
*         B4 = MESSAGE POSITION POINTER.
*         B5 = ECHO LOOP COUNTER. 
*         B6 = DELAY COUNTER. 
*         B7 = ERROR COUNTER. 
* 
*         OB(0-2) = CONTROL - CHARACTER, WRITE, BLANK 
*         OB(3-5) = DATA - UNCOVER, FORMFEED, UNCOVER 
*         OB(6-10) = DATA - ROM 0, E, C 
*         OB(11-13) = DATA - H, O, I
*         OB(14-16) = DATA - N, G,
*         OB(17-21) = DATA - P, A, T
*         OB(22-24) = DATA - T, E, R
*         OB(25-27) = DATA - N,  ,
*         OB(30-32) = TRIPLET FOR ECHO PATTERN
*         OB(33-34) = DATA - 7, 7, 6
*         OB(35-36) = DATA - 5, 5, 2
*         OB(37-40) = DATA - 4, 0, 0
*         OB(41-42) = DATA - 5, 2, 4
*         OB(43-44) = DATA - 7, 5, 4
*         OB(45-47) = CONTROL - ECHO CONTROL FUNCTION 
*         OB(50-54) = ECHO PATTERNS - 776, 552, 400, 524, 754 
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98A - ERROR PROCESSOR
* 
*    7.0  MISCELLANEOUS.
* 
*         -NOTE- P2 IS USED FOR SETTING THE DELAY BETWEEN ECHO
*         CODE OUTPUTS.  IF THE DELAY IS TOO SHORT, CIU21 MAY 
*         GET ERRORS BECAUSE OF MISSING ECHO CODES.  ONE OF THE 
*         REASONS CODES CAN BE LOST IS BECAUSE OF EXCESSIVE 
*         OVERHEAD WITH A CIU WITH A LOT OF COMMUNICATIONS
*         EQUIPMENT ATTACHED.  SPURIOUS INPUT DATA FROM OPEN
*         LINES, KEY PUMPERS, ETC. MAY CAUSE THE LOSS OF ECHO 
*         CODES BECAUSE THE INPUT MODULE BECOMES BOGGED DOWN
*         AND CANNOT KEEP UP WITH THE OUTPUT MODULE.  IN THIS 
*         CASE, THE DELAY MAY NEED TO BE INCREASED.  ON THE 
*         OTHER HAND, A CIU WITH LITTLE EQUIPMENT MAY BE ABLE 
*         TO RUN WITH A SHORTER DELAY, SPEEDING UP THE TEST 
*         EXECUTION TIME.  AS A ROUGH GUIDELINE, A CIU WITH 
*         ONE TERMINAL HAS BEEN RUN WITH P2 = 20D AND A FULL
*         BLOWN CIU HAS RUN ERROR FREE WITH P2 = 70D.  IF P2
*         IS NOT SPECIFIED, THE DELAY WILL DEFAULT TO 70D 
*         MILLISECONDS. 
* 
*         IN OPERATION, CIU21 IS RUN UNDER 1 COPY OF THE TEST 
*         AND CIU31 IS UNDER ANOTHER COPY.  BECAUSE OF THE
*         DESIGN OF THE EQUIPMENT THERE IS NO WAY FOR THE 2 
*         MODULES TO COMMUNICATE.  AS A RESULT, CIU21 IS
*         DEPENDENT ON CIU31 TO OUTPUT THE CORRECT NUMBER OF
*         ECHO CHARACTERS FOR CIU21 TO KNOW WHEN TO TERMINATE.
*         IF CIU21 DOES NOT RECEIVE ALL THE CHARACTERS, IT
*         WILL NOT TERMINATE, AND WILL LOOP LOOKING FOR MORE
*         CHARACTERS UNTIL MODULE TIME LIMIT OR UNTIL THE 
*         USER STOPS THE MODULE.
* 
*         CIU21 MUST BE STARTED BEFORE CIU31.  ALSO THERE MUST
*         NOT BE EXTRANEOUS KEYS IN THE BUFFER MEMORY BEFORE
*         CIU21 IS STARTED, OTHERWISE THESE GARBAGE CHARACTERS
*         WILL BE ASSUMED TO BE ECHO CHARACTERS.  TO FLUSH
*         THE BUFFER MEMORY, THE USER SHOULD RUN CIU17 BEFORE 
*         RUNNING CIU21 FOR THE FIRST TIME. 
* 
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT CIU31 - ECHO OUTPUT TEST-FIXED PATTERNS 
2  FORMAT ------------------------------------------------- 
3  FORMAT ECHOING TO SITE *DEC PORT *DEC
4  FORMAT CIU31 - ERROR(S) IN MODULE = *DECD
5  FORMAT CIU31 - CIU TERMINATED - FATAL ERRORS 
* 
   DATA(OB(0),CON)4140,0066,2000  *CHAR,WRITE,BLANK 
   DATA(OB(3),CON)5771,1176,2000  *UNC,FORMFEED,UNC 
   DATA(OB(6),CON)5200,1206,2000  *MEM 0,E,C
   DATA(OB(11),CON)5101,1622,2000  *H,O,I 
   DATA(OB(14),CON)5160,1732,2000  *N,G,
   DATA(OB(17),CON)5200,0250,2000  *P,A,T 
   DATA(OB(22),CON)5240,1244,2000  *T,E,R 
   DATA(OB(25),CON)5165,1332,2000  *N, ,
   DATA(OB(30),CON)5000,0000,2000  *PATTERN 
   DATA(OB(33),CON)5424,0502  *7,7,6
   DATA(OB(35),CON)5404,0072  *5,5,2
   DATA(OB(37),CON)5373,0666  *4,0,0
   DATA(OB(41),CON)5403,1276  *5,2,4
   DATA(OB(43),CON)5424,0076  *7,5,4
   DATA(OB(45),CON)4300,0000,2000  *ECHO
   DATA(OB(50),CON)776,552,400,524,754
* 
* 
* ------------------INITIALIZATION--------------------------- 
* 
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
22 DELAY 1000D MSEC          *WAIT 5 SECONDS FOR CIU21
   GOTO 22 WHILE(B1 + 1 .LT. 5)  *REPEAT 5 TIMES
* 
   B0 = 1                    *ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 2                    *ABORT CODE
   FUNC 0000, ABT 70         *INITIALIZE OUTPUT 
   FUNC 0000, ABT 70         *CONTROLLER
* SET UP TERMINAL ADDRESSES 
   B1 = P0 .LS. 5 .OR. P1    *GENERATE ADDRESS
   OB(2) = OB(2) .OR. B1     *PLUG INTO OUTPUT
   OB(5) = OB(5) .OR. B1
   OB(10) = OB(10) .OR. B1
   OB(13) = OB(13) .OR. B1
   OB(16) = OB(16) .OR. B1
   OB(21) = OB(21) .OR. B1
   OB(24) = OB(24) .OR. B1
   OB(27) = OB(27) .OR. B1
   OB(32) = OB(32) .OR. B1
   OB(47) = OB(47) .OR. B1
   MSG 3(P0,P1) TO DISPLAY,PRINT
* ECHO LOOP 
   B2 = 1                    *LOOP COUNTER
* 
* ------------------TEST------------------------------------- 
* 
30 B5 = 0                    *LOOP COUNTER
   B4 = B2 + B2 + 31         *INDEX TO MESSAGE
   OB(30) = OB(B4)           *MOVE TO MESSAGE 
   B4 = B4 + 1
   OB(31) = OB(B4)
32 B0 = 1                    *ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 4                    *ABORT CODE
   OUT 3 WORDS FROM OB(B5),ABT 70 
   GOTO 32 WHILE(B5 + 3 .LT. 33)  *REPEAT FOR ENTIRE MSG
* 
   B3 = B2 + 47              *PUT PATTERN IN OUTPUT 
   OB(46) = OB(B3)
   B5 = 1                    *LOOP COUNTER
34 B0 = 1                    *ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 4                    *ABORT CODE
   OUT 3 WORDS FROM OB(45),ABT 70 
* 
   REL, ABT 70               *RELEASE CHANNEL 
   B6 = 70D                  *DEFAULT DELAY TO 70D MSEC.
   IF(P2 .NE. 0)B6 = P2      *IF P2 SET, SET DELAY
36 DELAY 1000D USEC 
   GOTO 36 WHILE(B6 - 1 .GT. 0)  *REPEAT FOR DELAY TIME 
* 
* 
* ------------------REPEAT/EXIT------------------------------ 
* 
40 GOTO 34 WHILE(B5 + 1 .LT. 500D)  *REPEAT 500 TIMES 
* 
   GOTO 30 WHILE(B2 + 1 .LT. 6)  *REPEAT FOR ALL PATS 
* 
   IF(B7 .NE. 0)MSG 4(B7) TO DAYFILE  *IF ERRORS
   EXIT 
* 
* 
* ------------------ABORT PROCESSOR-------------------------- 
* 
70 ENDSUB 
   B7 = B7 + 1               *BUMP ERROR POINTER
   B0 = B0 + 3700            *ADD MODULE NUMBER TO ERR CODE 
   CALL 98A                  *PROCESS ERROR 
   PICTURE
   HALT 
   MSG 2 TO PRINT 
   BLANK
   MSG 1 TO DISPLAY 
   IF(B7 .LT. 5)GOTO 22      *IF LESS THAN 5 ERRORS 
* 
   MSG 5 TO PRINT 
   MSG 4(B7) TO DAYFILE 
* 
   END 20 
COMPILE         - CIU31 - 
   MODULE CIU33,6000(401),LOCK
***  CIU33 - ECHO OUTPUT TEST-RANDOM PATTERNS 
**
*    1.0  PURPOSE 
* 
*         CIU23 WITH CIU33 TEST THE DATA PATH FROM THE PPU
*         THROUGH THE CIU AND SCU TO THE TERMINAL.  AT THE
*         TERMINAL, THE DATA IS ECHOED BACK TO TEST THE PATH
*         THROUGH THE SCU AND CIU TO THE INPUT PPU.  CIU33
*         IS THE MODULE THAT TRANSMITS THE ECHO PATTERNS TO 
*         THE CIU.  BOTH OF THE MODULES CIU23 AND CIU33 USE 
*         RANDOM DATA PATTERNS GENERATED FROM WITHIN EACH 
*         MODULE.  BOTH MODULES GENERATE THE SAME DATA
*         PATTERNS. 
* 
*    2.0  METHOD
* 
*         1.  POST RUNNING MESSAGE. 
*         2.  DELAY 5 SECONDS TO ALLOW CIU23 TO START.
*         3.  RESERVE THE OUTPUT CHANNEL. 
*         4.  PERFORM 2 FUNCTION 0000S TO INITIALIZE
*             THE OUTPUT CONTROLLER.
*         5.  GENERATE ADDRESS WORD FROM P0 AND P1. 
*         6.  PLUG ADDRESS INTO OUTPUT DATA TRIPLETS. 
*         7.  POST ECHOING MESSAGE. 
*         8.  RESERVE THE CHANNEL.
*         9.  OUTPUT 3 WORDS OF ECHOING MESSAGE TO PLATO
*             TERMINAL. 
*         10. GO TO STEP 9 UNITL ENTIRE MESSAGE OUTPUT. 
*         11. GENERATE 400 WORDS OF RANDOM DATA IN IB.
*         12. MASK AND SHIFT DATA FOR OUTPUT. 
*         13. IF CODE IS ILLEGAL CHANGE TO A LEGAL CODE.
*         14. GO TO STEP 12 UNITL ALL 400 WORDS DONE. 
*         15. RESERVE THE CHANNEL.
*         16. OUTPUT 3 WORDS OF ECHO DATA TRIPLET.
*         17. SET DELAY TO DEFAULT OF 70D MSEC. 
*         18. IF P2 NONZERO, CHANGE DELAY TO P2.
*         19. RELEASE THE CHANNEL.
*         20. DELAY X MILLISECONDS. 
*         21. GO TO STEP 15 400 TIMES.
*         22. RESET LOOP COUNTERS.
*         23. GO TO STEP 11 TEN TIMES.
*         24. EXIT. 
* 
*    3.0  ERRORS REPORTED 
* 
*         1. EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT
*         2. EC - 02 ABORT ON FUNCTION 0000 AT LINE *OCT
*         3. EC - 04 ABORT ON .OUT. COMMAND AT LINE *OCT
* 
  
* 
*    4.0  ENTRY CONDITIONS - NONE 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = CODE FOR COMMAND ABORT.
*         B1 = SITE/PORT ADDRESS WORD.
*         B2 = MESSAGE LOOP COUNTER.
*         B3 = ECHO PATTERN POINTER.
*         B4 = MAIN LOOP COUNTER. 
*         B5 = ECHO LOOP COUNTER. 
*         B6 = DELAY COUNTER. 
*         B7 = ERROR COUNTER. 
* 
*         OB(0-2) = CONTROL - CHARACTER, WRITE, BLANK 
*         OB(3-5) = DATA - UNCOVER, FORMFEED, UNCOVER 
*         OB(6-10) = DATA - ROM 0, E, C 
*         OB(11-13) = DATA - H, O, I
*         OB(14-16) = DATA - N, G,
*         OB(17-21) = DATA - R, A, N
*         OB(22-24) = DATA - D, O, M
*         OB(25-27) = DATA -  , P, A
*         OB(30-32) = DATA - T, T, E
*         OB(33-35) = DATA - R, N, S
*         OB(36-40) = TRIPLET FOR ECHO PATTERN
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98A - ERROR PROCESSOR
* 
*    7.0  MISCELLANEOUS.
* 
*         -NOTE- P2 IS USED FOR SETTING THE DELAY BETWEEN ECHO
*         CODE OUTPUTS.  IF THE DELAY IS TOO SHORT, CIU23 MAY 
*         GET ERRORS BECAUSE OF MISSING ECHO CODES.  ONE OF THE 
*         REASONS CODES CAN BE LOST IS BECAUSE OF EXCESSIVE 
*         OVERHEAD WITH A CIU WITH A LOT OF COMMUNICATIONS
*         EQUIPMENT ATTACHED.  SPURIOUS INPUT DATA FROM OPEN
*         LINES, KEY PUMPERS, ETC. MAY CAUSE THE LOSS OF ECHO 
*         CODES BECAUSE THE INPUT MODULE BECOMES BOGGED DOWN
*         AND CANNOT KEEP UP WITH THE OUTPUT MODULE.  IN THIS 
*         CASE, THE DELAY MAY NEED TO BE INCREASED.  ON THE 
*         OTHER HAND, A CIU WITH LITTLE EQUIPMENT MAY BE ABLE 
*         TO RUN WITH A SHORTER DELAY, SPEEDING UP THE TEST 
*         EXECUTION TIME.  AS A ROUGH GUIDELINE, A CIU WITH 
*         ONE TERMINAL HAS BEEN RUN WITH P2 = 20D AND A FULL
*         BLOWN CIU HAS RUN ERROR FREE WITH P2 = 70D.  IF P2
*         IS NOT SPECIFIED, THE DELAY WILL DEFAULT TO 70D 
*         MILLISECONDS. 
* 
*         IN OPERATION, CIU23 IS RUN UNDER 1 COPY OF THE TEST 
*         AND CIU33 IS UNDER ANOTHER COPY.  BECAUSE OF THE
*         DESIGN OF THE EQUIPMENT THERE IS NO WAY FOR THE 2 
*         MODULES TO COMMUNICATE.  AS A RESULT, CIU23 IS
*         DEPENDENT ON CIU33 TO OUTPUT THE CORRECT NUMBER OF
*         ECHO CHARACTERS FOR CIU23 TO KNOW WHEN TO TERMINATE.
*         IF CIU23 DOES NOT RECEIVE ALL THE CHARACTERS, IT
*         WILL NOT TERMINATE, AND WILL LOOP LOOKING FOR MORE
*         CHARACTERS UNTIL MODULE TIME LIMIT OR UNTIL THE 
*         USER STOPS THE MODULE.
* 
*         CIU23 MUST BE STARTED BEFORE CIU33.  ALSO THERE MUST
*         NOT BE EXTRANEOUS KEYS IN THE BUFFER MEMORY BEFORE
*         CIU23 IS STARTED, OTHERWISE THESE GARBAGE CHARACTERS
*         WILL BE ASSUMED TO BE ECHO CHARACTERS.  TO FLUSH
*         THE BUFFER MEMORY, THE USER SHOULD RUN CIU17 BEFORE 
*         RUNNING CIU23 FOR THE FIRST TIME. 
* 
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT CIU33 - ECHO OUTPUT TEST-RANDOM PATTERNS
2  FORMAT ------------------------------------------------- 
3  FORMAT ECHOING TO SITE *DEC PORT *DEC
4  FORMAT CIU33 - ERROR(S) IN MODULE = *DECD
5  FORMAT CIU33 - CIU TERMINATED - FATAL ERRORS 
* 
   DATA(OB(0),CON)4140,0066,2000  *CHAR,WRITE,BLANK 
   DATA(OB(3),CON)5771,1176,2000  *UNC,FORMFEED,UNC 
   DATA(OB(6),CON)5210,1206,2000  *MEM 0,E,C
   DATA(OB(11),CON)5101,1622,2000  *H,O,I 
   DATA(OB(14),CON)5160,1732,2000  *N,G,
   DATA(OB(17),CON)5220,0234,2000  *R,A,N 
   DATA(OB(22),CON)5041,1632,2000  *D,O,M 
   DATA(OB(25),CON)5552,0002,2000  * ,P,A 
   DATA(OB(30),CON)5242,1012,2000  *T,T,E 
   DATA(OB(33),CON)5221,1446,2000  *R,N,S 
   DATA(OB(36),CON)4300,0000,2000  *ECHO
* 
* ------------------INITIALIZATION--------------------------- 
* 
* 
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
22 DELAY 1000D MSEC          *WAIT 5 SECONDS FOR CIU23
   GOTO 22 WHILE(B1 + 1 .LT. 5)  *REPEAT FOR 5 SEC. 
* 
   B0 = 1                    *ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 2                    *ABORT CODE
   FUNC 0000, ABT 70         *INITIALIZE OUTPUT 
   FUNC 0000, ABT 70         *CONTROLLER
* SET UP TERMINAL ADDRESSES 
   B1 = P0 .LS. 5 .OR. P1    *GENERATE ADDRESS
   OB(2) = OB(2) .OR. B1     *PLUG INTO OUTPUT
   OB(5) = OB(5) .OR. B1
   OB(10) = OB(10) .OR. B1
   OB(13) = OB(13) .OR. B1
   OB(16) = OB(16) .OR. B1
   OB(21) = OB(21) .OR. B1
   OB(24) = OB(24) .OR. B1
   OB(27) = OB(27) .OR. B1
   OB(32) = OB(32) .OR. B1
   OB(35) = OB(35) .OR. B1
   OB(40) = OB(40) .OR. B1
   MSG 3(P0,P1) TO DISPLAY,PRINT
   B0 = 1                    *CODE FOR ABORT
   RES, ABT 70               *RESERVE CHANNEL 
   B0 = 4                    *CODE FOR ABORT
24 OUT 3 WORDS FROM OB(B2),ABT 70  *SEND MESSAGE
   GOTO 24 WHILE(B2 + 3 .LT. 36)  *REPEAT FOR WHOLE MSG 
* 
* ------------------TEST------------------------------------- 
* 
* 
30 RANDOM TO IB FOR 400, START B4 
32 IB(B3) = IB(B3) .AND. 177 .LS. 1  *ADJUST DATA 
   IF(IB(B3) .EQ. 300)IB(B3) = 200
   IF(IB(B3) .EQ. 340)IB(B3) = 240
   IF(IB(B3) .EQ. 364)IB(B3) = 264
   IF(IB(B3) .EQ. 366)IB(B3) = 266
   IF(IB(B3) .EQ. 370)IB(B3) = 270
   IF(IB(B3) .EQ. 372)IB(B3) = 272
   GOTO 32 WHILE(B3 + 1 .LT. 400)  *REPEAT FOR 400 WORDS
* 
34 B0 = 1                    *CODE FOR ABORT
   RES, ABT 70               *RESERVE CHANNEL 
   B0 = 4                    *CODE FOR ABORT
   OB(37) = IB(B5)           *PUT IN OUTPUT WORDS 
   OUT 3 WORDS FROM OB(36), ABT 70
* 
   REL, ABT 70               *RELEASE CHANNEL 
   B6 = 70D                  *DEFAULT DELAY TO 70D MSEC.
   IF(P2 .NE. 0)B6 = P2      *IF P2 NONZERO, SET DELAY TO P2
36 DELAY 1000D USEC 
   GOTO 36 WHILE(B6 - 1 .GT. 0)  *REPEAT FOR 20 MSEC
* 
* 
* ------------------REPEAT/EXIT------------------------------ 
* 
40 GOTO 34 WHILE(B5 + 1 .LT. 400)  *REPEAT FOR 400 WORDS
* 
   B5 = 0 
   B3 = 0 
   GOTO 30 WHILE(B4 + 1 .LT. 10)  *REPEAT FOR 10 PASSES 
   IF(B7 .NE. 0)MSG 4(B7) TO DAYFILE  *IF ERRORS
   GOTO 76
* 
* 
* ------------------ABORT PROCESSOR-------------------------- 
* 
70 ENDSUB 
   B7 = B7 + 1               *BUMP ERROR POINTER
   B0 = B0 + 4100            *ADD MODULE NUMBER TO ERR CODE 
   CALL 98A                  *PROCESS ERROR 
   PICTURE
   HALT 
   MSG 2 TO PRINT 
   BLANK
   MSG 1 TO DISPLAY 
   IF(B7 .LT. 5)GOTO 22      *IF LESS THAN 5 ERRORS 
* 
   MSG 5 TO PRINT 
   MSG 4(B7) TO DAYFILE 
76 END 20 
COMPILE         - CIU33 - 
   MODULE CIU40,6000(400),LOCK
***  CIU40 - ECHO INPUT REPAIR MODULE 
**
*    1.0  PURPOSE 
* 
*         CIU40 IS A REPAIR MODULE THAT CAN BE USED WITH
*         CIU41 TO SEND AND RECEIVE ECHO CODES WITH THE 
*         PARAMETER SELECTED TERMINAL.  THE CODE TO SEND
*         WITH CIU41 IS SELECTED BY THE P6 PARAMETER.  THE
*         CODE WILL BE INPUT BY MDOULE CIU40 WITHOUT ERROR
*         CHECKING.  HOWEVER, THE CODE RECEIVED WILL BE 
*         DISPLAYED AT THE K/L DISPLAY BY CIU40.
* 
*    2.0  METHOD
* 
*         1.  POST RUNNING MESSAGE. 
*         2.  RESERVE THE INPUT CHANNEL.
*         3.  FUNCTION 0040 TO SELECT ALL INPUT PORTS.
*         4.  FORM SELECTED STATUS FUNCTION CODE
*             FOR SITE SELECTED IN P0.
*         5.  FUNCTION FOR SELECTED STATUS. 
*         6.  INPUT 1 WORD OF STATUS. 
*         7.  IF NO SELECTED STATUS, SET ERROR 24 
*             AND ABORT.
*         8.  POST WAITING ECHO MESSAGE.
*         9.  FORM ADDRESS WORD FROM P0 AND P1. 
*         10. RESERVE THE INPUT CHANNEL.
*         11. INPUT 2 WORDS TO THE INPUT BUFFER.
*         12. IF ADDRESS INPUT DOES NOT MATCH ADDRESS 
*             WORD GO TO STEP 10. 
*         13. POST RECEIVED CODE TO DISPLAY.
*         14. REPEAT TO STEP 10 INDEFINITELY. 
* 
* 
*    3.0  ERRORS REPORTED 
* 
*         1. EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT
*         2. EC - 02 ABORT ON FUNCTION *OCT AT LINE *OCT
*         3. EC - 03 ABORT ON STATUS COMMAND AT LINE *OCT 
*         4. EC - 05 ABORT ON .IN. COMMAND AT LINE *OCT 
*         5. EC - 24 STATUS ERROR ON SELECT ALL PORTS 
*            SELECTED STATUS  EXP - 0001  REC - 0000
* 
  
* 
*    4.0  ENTRY CONDITIONS - NONE 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = CODE FOR COMMAND ABORT.
*         B3 = SELECTED STATUS FUNCTION CODE. 
*         B6 = SITE/PORT ADDRESS. 
*         B7 = ERROR COUNTER. 
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98A - ERROR PROCESSOR. 
* 
*    7.0  MISCELLANEOUS.
* 
*         TO USE CIU40 AND CIU41, IT IS NECESSARY TO START
*         CIU40 UNDER ONE COPY OF CIU AND THEN TO START 
*         CIU41 UNDER ANOTHER COPY OF THE TEST. 
* 
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT CIU40 - ECHO INPUT REPAIR MODULE
2  FORMAT --------------------------------------------------
3  FORMAT WAITING ECHO FROM SITE *DEC PORT *DEC 
4  FORMAT RECEIVING CODE - *OCT 
5  FORMAT CIU40 - ERROR(S) IN MODULE = *DECD
6  FORMAT CIU40 - CIU TERMINATED - FATAL ERRORS 
* 
* ------------------INITIALIZATION--------------------------- 
* 
* 
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
22 B0 = 1                    *SET ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 2                    *ABORT CODE
   FUNC 0040,ABT 70          *SELECT ALL PORTS
   B3 = P0 + 740             *FORM STATUS REQUEST 
   FUNC B3,ABT 70            *FUNCTION FOR STATUS 
   B0 = 3                    *ABORT CODE
   STATUS 1 WORDS TO SB 
   IF(SB .AND. 1 .NE. 1)ERROR 0/24,GOTO 70
*                            *IF NO SEL STATUS, ERROR 24
   MSG 3(P0,P1) TO DISPLAY,PRINT
   B6 = P0 .LS. 5            *GET SITE NUMBER 
   B6 = B6 .OR. P1 .OR. 4000  *FORM ADDRESS WORD
* 
* ------------------TEST------------------------------------- 
* 
30 B0 = 1                    *ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 5                    *ABORT CODE
   IN 2 WORDS TO IB,ABT 70   *READ
   IF(B6 .NE. IB)GOTO 30     *IF NOT FROM SEL PORT
*                            *REPEAT INDEFINITELY 
   MSG 4(IB(1)) TO LINE 47
   GOTO 30                   *REPEAT INDEFINITELY 
* 
* 
* ------------------ABORT PROCESSOR-------------------------- 
* 
70 ENDSUB 
   B7 = B7 + 1               *BUMP ERROR POINTER
   B0 = B0 + 5000            *ADD MODULE NUMBER TO ERR CODE 
   CALL 98A                  *PROCESS ERROR 
   PICTURE
   HALT 
   MSG 2 TO PRINT 
   BLANK
   MSG 1 TO DISPLAY 
   IF(B7 .LT. 5)GOTO 22      *IF LESS THAN 5 ERRORS 
* 
   MSG 6 TO PRINT 
   MSG 5(B7) TO DAYFILE 
* 
   END 20 
COMPILE         - CIU40 - 
   MODULE CIU41,6000(401),LOCK
***  CIU41 - ECHO OUTPUT REPAIR MODULE
**
*    1.0  PURPOSE 
* 
*         CIU41 IS A REPAIR MODULE THAT CAN BE USED WITH
*         CIU40 TO SEND AND RECEIVE ECHO CODES WITH THE 
*         PARAMETER SELECTED TERMINAL.  THE CODE TO SEND
*         WITH CIU41 IS SELECTED BY THE P6 PARAMETER.  THE
*         CODE WILL BE INPUT BY MDOULE CIU40 WITHOUT ERROR
*         CHECKING.  HOWEVER, THE CODE RECEIVED WILL BE 
*         DISPLAYED AT THE K/L DISPLAY BY CIU40.
* 
*    2.0  METHOD
* 
*         1.  POST RUNNING MESSAGE. 
*         2.  RESERVE THE OUTPUT CHANNEL. 
*         3.  PERFORM 2 FUNCTION 0000 TO INITIALIZE 
*             THE OUTPUT CONTROLLER.
*         4.  GENERATE THE TERMINAL ADDRESS FROM
*             P0 AND P1.
*         5.  PLUG THE ADDRESS INTO THE TERMINAL
*             MESSAGE TRIPLETS. 
*         6.  MASK THE P6 ECHO CODE AND PLUG INTO 
*             ECHO CONTROL TRIPLET. 
*         7.  POST ECHOING MESSAGE. 
*         8.  INITIALIZE MESSAGE LOOP COUNTER.
*         9.  RESERVE THE OUTPUT CHANNEL. 
*         10. OUTPUT A MESSAGE TRIPLET. 
*         11. GO TO STEP 9 UNTIL WHOLE MESSAGE HAS
*             BEEN OUTPUT TO TERMINAL.
*         12. RESERVE THE OUTPUT CHANNEL. 
*         13. OUTPUT THE ECHO CODE. 
*         14. REPEAT TO STEP 12 INDEFINITELY. 
* 
*    3.0  ERRORS REPORTED 
* 
*         1. EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT
*         2. EC - 02 ABORT ON FUNCTION *OCT AT LINE *OCT
*         3. EC - 04 ABORT ON .OUT. COMMAND AT LINE *OCT
* 
  
* 
*    4.0  ENTRY CONDITIONS - NONE 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = CODE FOR COMMAND ABORT.
*         B1 = TERMINAL ADDRESS.
*         B5 = MESSAGE LOOP COUNTER.
*         B7 = ERROR COUNTER. 
* 
*         OB(0-2) = CONTROL - CHARACTER, WRITE, BLANK 
*         OB(3-5) = DATA - UNCOVER, FORMFEED, UNCOVER 
*         OB(6-10) = DATA - ROM 0, E, C 
*         OB(11-13) = DATA - H, O,
*         OB(14-16) = DATA - R, E, P
*         OB(17-21) = DATA - A, I, R
*         OB(22-24) = DATA -  , M. O
*         OB(25-27) = DATA - D, U, L
*         OB(30-32) = E,  , 
*         OB(33-35) = TRIPLET FOR ECHO PATTERN
*         OB(33-34) = DATA - 7, 7, 6
*         OB(35-36) = DATA - 5, 5, 2
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98A - ERROR PROCESSOR
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT CIU41 - ECHO OUTPUT REPAIR MODULE 
2  FORMAT ------------------------------------------------- 
3  FORMAT ECHOING TO SITE *DEC PORT *DEC
4  FORMAT CIU41 - ERROR(S) IN MODULE = *DECD
5  FORMAT CIU41 - CIU TERMINATED - FATAL ERRORS 
* 
   DATA(OB(0),CON)4140,0066,2000  *CHAR,WRITE,BLANK 
   DATA(OB(3),CON)5771,1176,2000  *UNC,FORMFEED,UNC 
   DATA(OB(6),CON)5210,1206,2000  *MEM 0,E,C
   DATA(OB(11),CON)5101,1732,2000  *H,O,
   DATA(OB(14),CON)5220,1240,2000  *R,E,P 
   DATA(OB(17),CON)5011,0244,2000  *A,I,R 
   DATA(OB(22),CON)5551,1236,2000  * ,M,O 
   DATA(OB(25),CON)5042,1230,2000  *D,U,L 
   DATA(OB(30),CON)5055,1332,2000  *E, ,
   DATA(OB(33),CON)4300,0000,2000  *ECHO
* 
* ------------------INITIALIZATION--------------------------- 
* 
* 
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
22 B0 = 1                    *ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 2                    *ABORT CODE
   FUNC 0000, ABT 70         *INITIALIZE OUTPUT 
   FUNC 0000, ABT 70         *CONTROLLER
* SET UP TERMINAL ADDRESSES 
   B1 = P0 .LS. 5 .OR. P1    *GENERATE ADDRESS
   OB(2) = OB(2) .OR. B1     *PLUG INTO OUTPUT
   OB(5) = OB(5) .OR. B1
   OB(10) = OB(10) .OR. B1
   OB(13) = OB(13) .OR. B1
   OB(16) = OB(16) .OR. B1
   OB(21) = OB(21) .OR. B1
   OB(24) = OB(24) .OR. B1
   OB(27) = OB(27) .OR. B1
   OB(32) = OB(32) .OR. B1
   OB(35) = OB(35) .OR. B1
   OB(34) = P6 .AND. 377
   OB(34) = OB(34) .LS. 1 
   MSG 3(P0,P1) TO DISPLAY,PRINT
* 
* ------------------TEST------------------------------------- 
* 
   B5 = 0                    *LOOP COUNTER
30 B0 = 1                    *ABORT CODE
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 4                    *ABORT CODE
   OUT 3 WORDS FROM OB(B5),ABT 70 
   GOTO 30 WHILE(B5 + 3 .LT. 33)  *REPEAT FOR WHOLE MESSAGE 
* 
32 B0 = 1                    *CODE FOR ABORT
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 4                    *CODE FOR ABORT
   OUT 3 WORDS FROM OB(33),ABT 70 
   GOTO 32                   *REPEAT INDEFINITELY 
* 
* 
* ------------------ABORT PROCESSOR-------------------------- 
* 
70 ENDSUB 
   B7 = B7 + 1               *BUMP ERROR POINTER
   B0 = B0 + 5100            *ADD MODULE NUMBER TO ERR CODE 
   CALL 98A                  *PROCESS ERROR 
   PICTURE
   HALT 
   MSG 2 TO PRINT 
   BLANK
   MSG 1 TO DISPLAY 
   IF(B7 .LT. 5)GOTO 22      *IF LESS THAN 5 ERRORS 
* 
   MSG 5 TO PRINT 
   MSG 4(B7) TO DAYFILE 
* 
   END 20 
COMPILE         - CIU41 - 
   MODULE CIU42,6000(400),LOCK
***  CIU42 - OPERATOR INPUT REPAIR MODULE 
**
*    1.0  PURPOSE 
* 
*         CIU42 IS A REPAIR MODULE THAT WILL INPUT DATA 
*         FROM THE CIU AND PRINT THE INPUT DATA AT THE
*         USERS OUTPUT DEVICE.  IN THIS WAY THE USER CAN
*         SELECT A PLATO TERMINAL WITH THE APPROPRIATE
*         PARAMETERS, START CIU42, ENTER KEYS AT THE
*         PLATO TERMINAL AND HAVE THE KEYCODE DATA
*         SHOWN ON THE USERS TERMINAL OR K/L DISPLAY. 
*         IN THIS WAY THE USER CAN TROUBLESHOOT THE 
*         INPUT DATA PATH.  IF THE P5 PARAMETER IS
*         SET TO ZERO, ONLY DATA FROM THE SELECTED
*         TERMINAL WILL BE PRINTED.  IF P5 IS NONZERO,
*         DATA RECEIVED FROM ANY TERMINAL WILL BE 
*         SHOWN ALONG WITH THE SITE AND PORT NUMBERS. 
*         THE MODULE WILL TERMINATE UPON RECEIVING
*         A SHIFT-STOP CODE FROM THE SELECTED 
*         TERMINAL. 
* 
*    2.0  METHOD
* 
*         1.  POST RUNNING MESSAGE. 
*         2.  POST WAITING INPUT MESSAGE. 
*         3.  IF P5 = 0 POST SITE/PORT MESSAGE. 
*         4.  IF P5 = NONZERO POST SITE MESSAGE.
*         5.  FORM SITE/PORT ADDRESS WORD.
*         6.  RESERVE THE INPUT CHANNEL.
*         7.  FUNCTION 0040 TO SELECT ALL PORTS.
*         8.  RESERVE THE INPUT CHANNEL.
*         9.  INPUT 2 WORDS TO THE INPUT BUFFER.
*         10. IF BIT 11 OF FIRST WORD NOT SET,
*             SET ERROR CODE 33 AND ABORT.
*         11. IF BIT 11 OF SECOND WORD NOT CLEAR, 
*             SET ERROR CODE 33 AND ABORT.
*         12. IF P5 = NONZERO GO TO STEP 14.
*         13. IF DATA NOT FROM SELECTED TERMINAL, 
*             GO TO STEP 8. 
*         14. IF SCOPING LOOP SET GO TO STEP 8. 
*         15. STORE DATA PARITY ERROR FLAG. 
*         16. MASK PARITY ERROR FROM DATA.
*         17. IF P5 = NONZERO GO TO STEP 21.
*         18. IF NO P.E. POST DATA MESSAGE. 
*         19. IF P.E. POST DATA WITH P.E. MESSAGE.
*         20. GO TO STEP 24.
*         21. GET SITE AND PORT FROM DATA FOR 
*             MESSAGE.
*         22. IF NO P.E. POST DATA/SITE/PORT MESSAGE. 
*         23. IF P.E. POST DATA/SITE/PORT WITH P.E. 
*             MESSAGE.
*         24. IF DATA IS SHIFT-STOP CODE, EXIT. 
*         25. GO TO STEP 8. 
* 
*    3.0  ERRORS REPORTED 
* 
*         1. EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT
*         2. EC - 02 ABORT ON FUNCTION *OCT AT LINE *OCT
*         3. EC - 05 ABORT ON .IN. COMMAND AT LINE *OCT 
*         4. EC - 33 DATA SEQUENCE ERROR
*            DATA WORD 1 - *OCT 
*            DATA WORD 2 - *OCT 
*         5. CODE *OCT RECEIVED WITH PARITY ERROR 
*         6. CODE *OCT RECD SITE *DEC PORT *DEC WITH P.E. 
* 
  
* 
*    4.0  ENTRY CONDITIONS - NONE 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = CODE FOR COMMAND ABORT.
*         B5 = PARITY ERROR FLAG. 
*         B6 = TERMINAL ADDRESS WORD. 
*         B7 = ERROR COUNTER. 
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98A - ABORT PROCESSOR. 
* 
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT CIU42 - OPERATOR INPUT REPAIR MODULE
2  FORMAT --------------------------------------------------
3  FORMAT CODE *OCT RECEIVED
4  FORMAT CODE *OCT RECEIVED WITH PARITY ERROR
5  FORMAT WAITING FOR INPUT SITE *DEC PORT *DEC 
6  FORMAT WAITING FOR INPUT 
10 FORMAT CODE *OCT RECD SITE *DEC PORT *DEC
11 FORMAT CODE *OCT RECD SITE *DEC PORT *DEC WITH P.E.
12 FORMAT CIU42 - ERROR(S) IN MODULE = *DECD
13 FORMAT CIU42 - CIU TERMINATED - FATAL ERRORS 
* 
* ------------------INITIALIZATION--------------------------- 
* 
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
   IF(P5 .EQ. 0)MSG 5(P0,P1) TO LINE 0
   IF(P5 .NE. 0)MSG 6 TO LINE 0 
   PICTURE
22 B6 = P0 .LS. 5            *GET SITE NUMBER 
   B6 = B6 .OR. P1 .OR. 4000  *FORM ADDRESS WORD
   B0 = 1                    *CODE FOR ABORT
   RES, ABT 70               *RESERVE CHANNEL 
   B0 = 2                    *CODE FOR ABORT
   FUNC 0040,ABT 70          *SELECT ALL PORTS
* 
* ------------------TEST------------------------------------- 
* 
30 B0 = 1                    *CODE FOR ABORT
   RES,ABT 70                *RESERVE CHANNEL 
   B0 = 5                    *CODE FOR ABORT
   IN 2 WORDS TO IB,ABT 70   *INPUT DATA
   IF(IB .AND. 4000 .NE. 4000)ERROR 0/33,GOTO 70  *ERROR 33 
*                            *IF 1ST WORD BIT 11 NOT SET
   IF(IB(1) .AND. 4000 .NE. 0)ERROR 0/33,GOTO 70  *ERROR 33 
*                            *IF 2ND WORD BIT 11 NOT CLEAR
   IF(P5 .NE 0)GOTO 32       *IF P5 NONZERO 
* 
   IF(IB .NE. B6)GOTO 30     *IF NOT OUR DATA 
* 
* 
* ------------------REPEAT/EXIT------------------------------ 
* 
32 IF(ES .AND. SL .NE. 0)GOTO 30  *IF SCOPING LOOP
* 
   B5 = IB(1) .AND. 1        *SAVE PARITY ERROR FLAG
   IB(1) = IB(1) .RS. 1      *DROP PE FLAG
   IF(P5 .NE. 0)GOTO 34      *IF P5 = 0 
* 
   IF(B5 .EQ. 0)MSG 3(IB(1)) TO LINE 0
   IF(B5 .EQ. 1)MSG 4(IB(1)) TO LINE 0
   PICTURE
   GOTO 36
* 
34 B1 = IB .AND 1740 .RS. 5  *GET SITE
   B2 = IB .AND. 37          *GET PORT
   IF(B5 .EQ. 0)MSG 10(IB(1),B1,B2) TO LINE 0 
   IF(B5 .NE. 0)MSG 11(IB(1),B1,B2) TO LINE 0 
   PICTURE
36 IF(IB(1) .EQ. 72)EXIT  *EXIT ON SHIFT STOP 
* 
   GOTO 30
* 
* 
* ------------------ABORT PROCESSOR-------------------------- 
* 
70 ENDSUB 
   B7 = B7 + 1               *BUMP ERROR POINTER
   B0 = B0 + 5200            *ADD MODULE NUMBER TO ERR CODE 
   CALL 98A                  *PROCESS ERROR 
   PICTURE
   HALT 
   MSG 2 TO PRINT 
   BLANK
   MSG 1 TO DISPLAY 
   IF(B7 .LT. 5)GOTO 22      *IF LESS THAN 5 ERRORS 
* 
   MSG 13 TO PRINT
   MSG 12(B7) TO DAYFILE
* 
   END 20 
COMPILE         - CIU42 - 
   MODULE CIU98A,6000(400,401),LOCK 
***  CIU98A - ERROR MESSAGE PROCESSOR 
**
*    1.0  PURPOSE 
* 
*         CIU98A IS A SUBMODULE THAT IS CALLED TO PROCESS 
*         COMMAND ABORTS OR OTHER ERRORS.  IF CIU98A WAS
*         CALLED BECAUSE OF A COMMAND ABORT, THE
*         APPROPRIATE ERROR MESSAGE WILL BE PRODUCED ALONG
*         WITH THE REGISTER CONTENTS.  IF THE ERROR WAS 
*         NOT CAUSED BY A COMMAND ABORT, CIU98A WILL EXIT 
*         TO CIU98C TO PROCESS THE ERROR.  AFTER THE ERROR
*         MESSAGE IS PRODUCED, THE MODULE WILL RETURN TO
*         THE CALLING MODULE. 
* 
*    2.0  METHOD
* 
*         1.  SET B8 TO THE CALLING MODULE NUMBER.
*         2.  SET B9 TO THE ERROR CODE. 
*         3.  PRODUCE FIRST LINE OF ERROR MESSAGE.
*         4.  INCREMENT LINE NUMBER.
*         5.  PRODUCE 2ND LINE OF MESSAGE.
*         6.  INCREMENT LINE NUMBER.
*         7.  PRODUCE 3RD LINE OF MESSAGE.
*         8.  INCREMENT LINE NUMBER.
*         9.  PRODUCE 4TH LINE OF MESSAGE.
*         10. INCREMENT LINE NUMBER.
*         11. PRODUCE 5TH LINE OF MESSAGE.
*         12. INCREMENT LINE NUMBER.
*         13. PRODUCE 6TH LINE OF MESSAGE.
*         14. INCREMENT LINE NUMBER.
*         15. PRODUCE 7TH LINE OF MESSAGE.
*         16. INCREMENT LINE NUMBER.
*         17. IF ERROR WAS NOT FROM A COMMAND 
*             ABORT EXIT TO CIU98C. 
*         18. IF ERROR CODE OF 1 PRODUCE .RES.
*             MESSAGE.
*         19. IF ERROR CODE OF 2 PRODUCE
*             FUNCTION MESSAGE. 
*         20. IF ERROR CODE OF 3 PRODUCE STATUS 
*             MESSAGE.
*         21. IF ERROR CODE OF 4 PRODUCE .OUT.
*             MESSAGE.
*         22. IF ERROR CODE OF 5 PRODUCE .IN. 
*             MESSAGE.
* 
*    3.0  ERRORS REPORTED 
* 
*         1. EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT
*         2. EC - 02 ABORT ON FUNCTION *OCT AT LINE *OCT
*         3. EC - 03 ABORT ON STATUS COMMAND AT LINE *OCT 
*         4. EC - 04 ABORT ON .OUT. COMMAND AT LINE*OCT 
*         5. EC - 05 ABORT ON .IN. COMMAND AT LINE *OCT 
* 
*         6. ERROR FROM MODULE *DEC ERROR COUNT = *DECD 
*                        REGISTER CONTENTS
*              B0   B1   B2   B3   B4   B5   B6   B7
*             *OCT *OCT *OCT *OCT *OCT *OCT *OCT *OCT 
*              BA   LF   WT   WC   EA   EC   EM   ES
*             *OCT *OCT *OCT *OCT *OCT *OCT *OCT *OCT 
* 
  
* 
*    4.0  ENTRY CONDITIONS
* 
*         B0 = MMEE - WHERE MM IS THE CALLING MODULE
*              NUMBER AND EE IS THE ERROR CODE. 
*         B7 = ERROR COUNT. 
*         EC = ERROR CODE FROM PRODUCT OVERLAY. 
*         EM = ERROR MESSAGE INDEX FROM PRODUCT OVERLAY.
*         EA = LINE NUMBER OF ERROR.
*         LF = LAST FUNCTION CODE ISSUED. 
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B0 = MODULE NUMBER AND ERROR CODE.
*         B7 = ERROR COUNT. 
*         B8 = MODULE NUMBER. 
*         B9 = ERROR CODE.
*         B10 = LINE COUNTER. 
* 
*    6.0  SUBMODULES USED.
* 
*         CIU98C - MODULE ERROR PROCESSING. 
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT ERROR FROM MODULE *DEC ERROR COUNT = *DECD
2  FORMAT             REGISTER CONTENTS 
3  FORMAT   B0   B1   B2   B3   B4   B5   B6   B7 
4  FORMAT   BA   LF   WT   WC   EA   EC   EM   ES 
5  FORMAT  *OCT *OCT *OCT *OCT *OCT *OCT *OCT *OCT
6  FORMAT 
7  FORMAT EC - 01 ABORT ON .RES. COMMAND AT LINE *OCT 
10 FORMAT EC - 02 ABORT ON FUNCTION *OCT AT LINE *OCT 
11 FORMAT EC - 03 ABORT ON STATUS COMMAND AT LINE *OCT
12 FORMAT EC - 04 ABORT ON .OUT. COMMAND AT LINE *OCT 
13 FORMAT EC - 05 ABORT ON .IN. COMMAND AT LINE *OCT
* 
* ------------------TEST------------------------------------- 
* 
30 B8 = B0 .AND. 7700 .RS. 6   *GET MODULE NUMBER 
   B9 = B0 .AND. 77          *GET EC FOR COMMAND ABORT
   B10 = 1                   *LINE NUMBER FOR MESSAGE 
   MSG 1(B8,B7)TO LINE B10
   B10 = B10 + 1             *BUMP LINE NUMBER
   MSG 2 TO LINE B10
   B10 = B10 + 1             *BUMP LINE NUMBER
   MSG 3 TO LINE B10
   B10 = B10 + 1             *BUMP LINE NUMBER
   MSG 5(B0,B1,B2,B3,B4,B5,B6,B7)TO LINE B10  *POST B BOXES 
   B10 = B10 + 1             *BUMP LINE NUMBER
   MSG 4 TO LINE B10
   B10 = B10 + 1             *BUMP LINE NUMBER
   MSG 5(BA,LF,WT,WC,EA,EC,EM,ES)TO LINE B10  *POST REGS
   B10 = B10 + 1             *BUMP LINE NUMBER
   MSG 6 TO LINE B10
   B10 = B10 + 1             *BUMP LINE NUMBER
* 
* ------------------REPEAT/EXIT------------------------------ 
* 
   IF(EC .LT. 4000)EXIT TO 98C   *IF NOT COMMAND ABORT
* 
   IF(B9 .EQ. 1)MSG 7(EA)TO LINE B10   *IF EC = 01
   IF(B9 .EQ. 2)MSG 10(LF,EA)TO LINE B10   *IF EC = 02
   IF(B9 .EQ. 3)MSG 11(EA)TO LINE B10   *IF EC = 03 
   IF(B9 .EQ. 4)MSG 12(EA)TO LINE B10   *IF EC = 04 
   IF(B9 .EQ. 5)MSG 13(EA)TO LINE B10   *IF EC = 05 
   B10 = B10 + 1             *BUMP LINE NUMBER
   MSG EM TO LINE B10        *POST REASON FOR ABORT 
   EXIT 
* 
   END 30 
COMPILE         - CIU98A -
   MODULE CIU98C,6000(400,401),LOCK 
***  CIU98C - ERROR MESSAGE PROCESSOR 
**
*    1.0  PURPOSE 
* 
*         CIU98C IS A SUBMODULE ENTERED FROM CIU98A.  CIU98C
*         WILL PROCESS ERRORS THAT DID NOT COME FROM THE
*         PRODUCT OVERLAY.  THE ERROR CODE WILL BE ENTERED
*         BY THE MODULE DETECTING THE ERROR.  CIU98A WILL 
*         PRODUCE THE FIRST PART OF THE MESSAGE (REGISTER 
*         CONTENTS ETC.) AND EXIT TO CIU98C TO PRODUCE THE
*         REST OF THE MESSAGE AFTER WHICH CIU98C WILL RETURN
*         TO THE ORIGINAL MODULE. 
* 
*    2.0  METHOD
* 
*         1.  CHECK THE EC REGISTER FOR THE ERROR CODE. 
*         2.  POST THE CORRESPONDING ERROR MESSAGE. 
*         3.  RETURN TO THE CALLING MODULE. 
* 
*    3.0  ERRORS REPORTED 
* 
*         1.  EC - 20 STATUS ERROR ON SELECT PORT *DEC
*             SELECTED STATUS  EXP - 0001  REC - 0000 
* 
*         2.  EC - 21 STATUS ERROR ON SELECT PORT *DEC
*             DESELECTED STATUS  EXP - 0000  REC - 0001 
* 
*         3.  EC - 22 STATUS ERROR ON DESELECT PORT *DEC
*             SELECTED STATUS  EXP - 0000  REC - 0001 
* 
*         4.  EC - 23 STATUS ERROR ON DESELECT PORT *DEC
*             DESELECTED STATUS  EXP - 0001  REC - 0000 
* 
*         5.  EC - 24 STATUS ERROR ON SELECT ALL PORTS
*             SELECTED STATUS  EXP - 0001  REC - 0000 
* 
*         6.  EC - 25 STATUS ERROR ON SELECT ALL PORTS
*             DESELECTED STATUS  EXP - 0000  REC - 0001 
* 
*         7.  EC - 26 STATUS ERROR ON DESELECT ALL PORTS
*             SELECTED STATUS  EXP - 0000  REC - 0001 
* 
*         8.  EC - 27 STATUS ERROR ON DESELECT ALL PORTS
*             DESELECTED STATUS  EXP - 0001  REC - 0000 
* 
*         9.  EC - 31 STATUS ERROR FOR UNINSTALLED PORT *DEC
*             DESELECTED STATUS  EXP - 0001  REC - 0000 
* 
*         10. EC - 32 STATUS ERROR FOR UNINSTALLED PORT *DEC
*             SELECTED STATUS  EXP - 0000  REC - 0001 
* 
*         11. EC - 33 DATA SEQUENCE ERROR 
*             DATA WORD 1 - *OCT
*             DATA WORD 2 - *OCT
* 
*         12. EC - 34 EMPTY TOO SOON AFTER EOR
* 
*         13. EC - 35 FULL TOO LONG AFTER EOR 
* 
  
* 
*    4.0  ENTRY CONDITIONS
* 
*         EC = ERROR CODE 
*         B3 = NUMBER OF PORT IN ERROR
*         B10 = CURRENT LINE COUNT
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         B3 = PORT NUMBER NEEDED FOR CERTAIN MESSAGES. 
*         B10 = CURRENT LINE NUMBER.
* 
*    6.0  SUBMODULES USED.
* 
*         NONE
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT EC - *OCT STATUS ERROR ON SELECT PORT *DEC
2  FORMAT EC - *OCT STATUS ERROR ON DESELECT ALL PORTS
4  FORMAT EC - *OCT STATUS ERROR FOR UNINSTALLED PORT *DEC
5  FORMAT EC - *OCT STATUS ERROR ON DESELECT PORT *DEC
7  FORMAT EC - *OCT STATUS ERROR ON SELECT ALL PORTS
10 FORMAT SELECTED STATUS  EXP - 0001  REC - 0000 
11 FORMAT SELECTED STATUS  EXP - 0000  REC - 0001 
12 FORMAT DESELECTED STATUS  EXP - 0001  REC - 0000 
13 FORMAT DESELECTED STATUS  EXP - 0000  REC - 0001 
14 FORMAT EC - 33 DATA SEQUENCE ERROR 
15 FORMAT DATA WORD 1 - *OCT
16 FORMAT DATA WORD 2 - *OCT
17 FORMAT EC - 34 EMPTY TOO SOON AFTER EOR
20 FORMAT EC - 35 FULL TOO LONG AFTER EOR 
* 
* ------------------TEST------------------------------------- 
* 
30 IF(EC .NE. 20)GOTO 32     *IF NOT EC 20
* 
   MSG 1(EC,B3) TO LINE B10 
   B10 = B10 + 1             *BUMP LINE POINTER 
   MSG 10 TO LINE B10 
* 
32 IF(EC .NE. 21)GOTO 34     *IF NOT EC 21
* 
   MSG 1(EC,B3) TO LINE B10 
   B10 = B10 + 1
   MSG 13 TO LINE B10 
* 
34 IF(EC .NE. 22)GOTO 36     *IF NOT EC 22
* 
   MSG 5(EC,B3) TO LINE B10 
   B10 = B10 + 1
   MSG 11 TO LINE B10 
* 
36 IF(EC .NE. 23)GOTO 40     *IF NOT EC 23
* 
   MSG 5(EC,B3) TO LINE B10 
   B10 = B10 + 1
   MSG 12 TO LINE B10 
* 
40 IF(EC .NE. 24)GOTO 42     *IF NOT EC 24
* 
   MSG 7(EC) TO LINE B10
   B10 = B10 + 1             *BUMP LINE COUNTER 
   MSG 10 TO LINE B10 
* 
42 IF(EC .NE. 25)GOTO 44     *IF NOT EC 25
* 
   MSG 7(EC) TO LINE B10
   B10 = B10 + 1             *BUMP LINE COUNTER 
   MSG 13 TO LINE B10 
* 
44 IF(EC .NE. 26)GOTO 46     *IF NOT EC 26
* 
   MSG 2(EC) TO LINE B10
   B10 = B10 + 1             *BUMP LINE COUNTER 
   MSG 11 TO LINE B10 
* 
46 IF(EC .NE. 27)GOTO 50     *IF NOT EC 27
* 
   MSG 2(EC) TO LINE B10
   B10 = B10 + 1             *BUMP LINE COUNTER 
   MSG 12 TO LINE B10 
* 
50 IF(EC .NE. 31)GOTO 52     *IF NOT EC 31
* 
   MSG 4(EC,B6) TO LINE B10 
   B10 = B10 + 1
   MSG 12 TO LINE B10 
* 
52 IF(EC .NE. 32)GOTO 54     *IF NOT EC 32
* 
   MSG 4(EC,B6) TO LINE B10 
   B10 = B10 + 1
   MSG 11 TO LINE B10 
* 
54 IF(EC .NE. 33)GOTO 56     *IF NOT EC 33
* 
   MSG 14 TO LINE B10 
   B10 = B10 + 1
   MSG 15(IB) TO LINE B10 
   B10 = B10 + 1
   MSG 16(IB(1)) TO LINE B10
* 
56 IF(EC .NE. 34)GOTO 60     *IF NOT EC 34
* 
   MSG 17 TO LINE B10 
* 
60 IF(EC .NE. 35)GOTO 62     *IF NOT EC 35
* 
   MSG 20 TO LINE B10 
* 
62 EXIT 
* 
   END 30 
COMPILE         - CIU98C -
   MODULE CIU98E,6000(400,401),LOCK 
***  CIU98E - PARAMETER VALIDATION
**
*    1.0  PURPOSE 
* 
*         CIU98E IS A SUBMODULE THAT CAN BE CALLED TO 
*         CHECK THE VALIDITY OF THE PARAMETERS ENTERED
*         BY THE USER.  P0, P1, P2, AND P3 ARE CHECKED. 
* 
*    2.0  METHOD
* 
*         1.  IF P0 IS BETWEEN 0 AND 31D GO TO STEP 4.
*         2.  POST P0 ERROR MESSAGE.
*         3.  GO TO STEP 11.
*         4.  IF P1 IS BETWEEN 0 AND 31D GO TO STEP 7.
*         5.  POST P1 ERROR MESSAGE.
*         6.  GO TO STEP 11.
*         7.  IF P3 IS BETWEEN 0 AND 3 GO TO STEP 10. 
*         8.  POST P3 ERROR MESSAGE.
*         9.  GO TO STEP 11.
*         10. EXIT. 
*         11. POST CORRECT ERROR MESSAGE. 
*         12. HALT. 
*         13. BLANK.
*         14. GO TO STEP 1. 
* 
*    3.0  ERRORS REPORTED 
* 
*         1. PARAMETER P0 ILLEGAL - MUST BE 0 - 31D 
*         2. PARAMETER P1 ILLEGAL - MUST BE 0 - 31D 
*         3. PARAMETER P3 ILLEGAL - MUST BE 0 - 3 
*         4. CORRECT PARAMETER AND RERUN
  
* 
* 
*    4.0  ENTRY CONDITIONS
* 
*         PARAMETER REGISTERS CONTAIN THE PARAMETERS
*         SET BY THE USER.
* 
*    5.0  REGISTER AND BUFFER USAGE 
* 
*         P0 = SITE ADDRESS 
*         P1 = PORT ADDRESS 
*         P2 = DELAY BETWEEN ECHO CODES 
*         P3 = NUMBER OF FV633 OPTIONS
*         B10 = LINE COUNTER
*         B11 = PARAMETER ERROR POINTER 
* 
*    6.0  SUBMODULES USED.
* 
*         NONE
* 
* 
* ------------------DATA DIVISION---------------------------- 
* 
1  FORMAT PARAMETER P0 ILLEGAL - MUST BE 0 - 31D
2  FORMAT PARAMETER P1 ILLEGAL - MUST BE 0 - 31D
4  FORMAT PARAMETER P3 ILLEGAL - MUST BE 0 - 3
5  FORMAT CORRECT PARAMETER AND RERUN 
* 
* ------------------TEST------------------------------------- 
* 
30 IF(P0 .LT. 32D)GOTO 32    *IF P0 = 0-31D 
* 
   MSG 1 TO LINE B10
   B10 = B10 + 1
   B11 = 1
* 
32 IF(P1 .LT. 32D)GOTO 36    *IF P1 = 0-31D 
* 
   MSG 2 TO LINE B10
   B10 = B10 + 1
   B11 = 1
* 
36 IF(P3 .LT. 4)GOTO 40      *IF P3 = 0-3 
* 
   MSG 4 TO LINE B10
   B10 = B10 + 1
   B11 = 1
* 
* 
* ------------------REPEAT/EXIT------------------------------ 
* 
40 IF(B11 .NE. 0)GOTO 70     *IF PARAM ERROR
* 
   EXIT 
* 
* 
* ------------------ERROR PROCESSOR-------------------------- 
* 
70 MSG 5 TO LINE B10
   PICTURE
   HALT 
   BLANK
   GOTO 30
* 
   END 30 
COMPILE         - CIU98E -
   MODULE CIU99,6000(400,401),LOCK
***  CIU99 - PARAMETERS 
**
* 
/                            RESTRICTIONS AND LIMITATIONS.
/ 
/                            PARAMETER DESCRIPTION. 
/ 
/  P0 = 00XX - SITE ADDRESS OF TERMINAL 
/ 
/  P1 = 00XX - PORT ADDRESS OF TERMINAL 
/ 
/  P2 = XXXX - ECHO DELAY TIME (MILLISECONDS) 
/              DEFAULT = 70D
/ 
/  P3 = 000X - NUMBER OF FV633 OPTIONS INSTALLED
/ 
/  P4 = OOXX - CHARACTER TO OUTPUT IN MODULE 5
/ 
/  P5 = XXXX - NONZERO TO LIST ALL CODES INPUT
/              IN MODULE 42 
/ 
/  P6 = 0XXX - 8 BIT PATTERN TO OUTPUT IN 
/              MODULE 41
1  END 1
COMPILE,SOURCE  - CIU99 - 
   MODULE CIU99A,6000(400,401),LOCK 
***  CIU99A - LIST OF MODULES 
**
* 
/  MODULE           MODULE            ACCESS    RUN 
/  NUMBER        DESCRIPTION          LEVEL    TIME 
/  ------        -----------          ------   ---- 
/ 
/  1.  CONFIDENCE TEST MODULES. 
/ 
/   00  INITIAL MODULE                  --       - SEC. 
/   01  BASIC FUNCTIONS OUTPUT          20       1 SEC. 
/   03  ADDRESSING TEST                 20       4 SEC. 
/   05  CHARACTER OUTPUT TEST           20      14 SEC. 
/   07  END OF RECORD TEST              20       7 SEC. 
/ 
/   11  BASIC FUNCTIONS INPUT           20       2 SEC. 
/   13  PORT SELECT AND STATUS          20      17 SEC. 
/   15  PORT DESELECT AND STATUS        20      15 SEC. 
/   17  READ BUFFER MEMORY TEST         20      58 SEC. 
/ 
/   21  ECHO INPUT FIXED PATTERNS       20     191 SEC. 
/   23  ECHO  INPUT RANDOM PATTERNS     20     158 SEC. 
/   31  ECHO OUTPUT FIXED PATTERNS      20     191 SEC. 
/   33  ECHO OUTPUT RANDOM PATTERNS     20     158 SEC. 
/ 
/  2.  PARAMETER DRIVEN MODULES.
/ 
/   NONE
/ 
/  3.  REPAIR MODULES.
/ 
/   40  ECHO INPUT REPAIR MODULE        20     INDEF. 
/   41  ECHO OUTPUT REPAIR MODULE       20     INDEF. 
/   42  OPERATOR INPUT REPAIR MODULE    20     INDEF. 
1  END 1
COMPILE,SOURCE  - CIU99A -
