*DECK,BCX 
* 
*** BCX - BUFFER CONTROLLER COMMAND TEST -
*** BCX OVERVIEW
**
*   AUTHOR   - J.E. SIPPER
*              MAINTENANCE SOFTWARE ENGINEERING 
*              ENGINEERING SERVICES 
* 
*   DATE     - 78/02/20 
* 
*   OVERVIEW -
* 
*         BCX  IS  A  MALET VERSION OF THE OFF-LINE BCX TEST
*         THAT NORMALLY EXECUTES UNDER SMM OR FROM THE  BCMC
*         TESTER.   BCX  IS  DESIGNED  TO EXECUTE ON THE 66X
*         TAPE CONTROLLERS (7021) AND 844  DISK  CONTROLLERS
*         (7054/7154).   ITS  PRIMARY  FUNCTION IS TO VERIFY
*         THAT THE  BUFFER  CONTROLLER  PROCESSOR  IN  THESE
*         DEVICES IS CAPABLE OF EXECUTING ITS COMMAND SET OF
*         INSTRUCTIONS WITH CANNED OPERANDS.
* 
*         MALET BCX IS COMPOSED OF TWO PARTS  -  THE  MODULE
*         CODE EXECUTED BY THE PPU AND THE BUFFER CONTROLLER
*         CODE EXECUTED BY THE BC.  PRIOR TO EXECUTING  BCX,
*         THE USER MUST INSURE THAT THE TWO PARTS OF BCX ARE
*         ON LOCAL FILES SO THEY MAY BE READ  BY  THE  MALET
*         EXECUTIVE.  NORMALLY BOTH PARTS OF BCX WOULD BE ON
*         SEPERATE PERMANENT FILES, INITIALLY OBTAINED  FROM
*         THE  CML  (CONCURRENT  MAINTENANCE  LIBRARY) TAPE.
*         (MODULE CODE IS WITHIN FILE 1 UNDER THE DECK  NAME
*         OF BCX AND THE BC CODE IS ALL OF FILE 3 OF THE CML
*         TAPE). ASSUMING THAT THE PPU CODES  RESIDES  ON  A
*         PERMANENT  FILE,  BCX,  AND THE BC CODE RESIDES ON
*         BCXBC, THE FOLLOWING CONTROL CARDS WOULD  BE  USED
*         TO EXECUTE BCX. 
* 
*            ATTACH,BCX.            RFILE OF BCX
*            ATTACH,BCXBC.          BC PORTION OF BCX 
*            ATTACH,CWFILE.         CONTROLWARE FILE
*            MALET,R=BCX,S=BCXBC. 
* 
*         NOTE-  SINCE THE I/O CHANNEL REMAINS ACTIVE DURING
*                THE  TOTAL  DOWN-LOAD OPERATION WITH INTER-
*                MIXED  READS  OF  THE  SCRATCH   FILE,  THE
*                SCRATCH  FILE  CANNOT  BE  ON  THE SAME I/O
*                CHANNEL AS THE  BC  UNDER  TEST.  ONCE  BCX
*                COMPLETES  EXECUTION, THE USER MUST INSTALL
*                THE PROPER OPERATING CONTROLWARE BEFORE THE
*                DEVICE CAN BE USED BY THE SYSTEM.
* 
*                BCX03 CAN BE USED  TO  DOWNLOAD CONTROLWARE
*                AFTER RUNNING BCX02. 
* 
* 
*         THE MALET VERSION OF BCX HAS NOT CHANGED THE  CODE
*         THAT EXECUTES IN THE BUFFER CONTROLLER, NOR HAS IT
*         CHANGED  THE  COMMUNICATIONS  TECHNIQUE   USED  TO
*         CONTROL  THE  DIAGNOSTIC WHILE IT IS IN EXECUTION.
*         IF THE USER REQUIRES THE SOURCE  CODE  OF  THE  BC
*         CODE,  HE CAN USE THE OFF-LINE VERSION WHICH IS ON
*         MICROFICHE, PART NUMBER 12340365C.
* 
*         FRONT-END CHANGES HAVE BEEN MADE.  THIS INCLUDES A
*         SHORT  LOOP-BACK  PROGRAM  THAT ATTEMPTS TO VERIFY
*         THAT THE COUPLER PATH  TO  THE  BC  IS  FUNCTIONAL
*         PRIOR TO USING IT TO DOWNLOAD THE BCX CODE. 
*** BCX MODULES 
* 
**
*   1.0   MODULES 
* 
*         BCX  IS COMPOSED OF FOUR MODULES. BCX00 PERFORMS A
*         LOOP-BACK TEST ON  THE  COUPLER  IN  WORD  MODE  -
*         SINGLE WORD TRANSFERS BY THE PPU WITH FULL CHANNEL
*         PROTECTION FROM HANGS (ALL I/O  PERFORMED  BY  BCX
*         USES THIS TECHNIQUE). 
* 
*         BCX01  THEN  READS  THE BUFFER CONTROLLER BCX CODE
*         FROM THE SCRATCH FILE ASSIGNED  BY  THE  USER  AND
*         DOWNLOADS IT TO THE BUFFER CONTROLLER.  CHECKS ARE
*         MADE TO INSURE THAT  THE  DATA  CONTAINED  ON  THE
*         SCRATCH  FILE  IS  OF  THE  PROPER LENGTH PRIOR TO
*         DOWNLOADING IT. 
* 
*         BCX02 THEN COMMUNICATES WITH THE BUFFER CONTROLLER
*         AND PRESENTS A DISPLAY OF CURRENT INFORMATION FROM
*         THE BC ON THE PPU DISPLAY  IN  HEXIDECIMAL.   1000
*         OCTAL PASSES OF BCX ARE EXECUTED.  SHOULD AN ERROR
*         BE DETECTED,  STATUS  CONCERNING  THE  FAILURE  IS
*         DISPLAYED AND A PICTURE TAKEN.
* 
*         BCX03 READS THE CONTROLWARE FILE FROM THE  SCRATCH
*         FILE ASSIGNED BY THE USER.  IF  A  CORRECT SCRATCH
*         FILE HAS BEEN ASSIGNED,  THE CONTROLWARE  IS  THEN
*         DOWNLOADED TO  THE  BUFFER CONTROLLER.  CHECKS ARE
*         MADE TO  INSURE THAT THE  DATA  CONTAINED  IN  THE
*         SCRATCH FILE  IS  THE  CORRECT LENGTH BEFORE IT IS
*         DOWNLOADED. 
* 
*         BCX99  IS  A DOCUMENTATION MODULE THAT IS PROVIDED
*         TO ASSIST THE USER IN USING BCX.  THE  MODULE  MAY
*         BE  DISPLAYED ON THE SYSTEM CONSOLE K OR L DISPLAY
*         AND/OR A PICTURE OF IT SENT TO THE OUTPUT FILE. 
* 
*** BCX PARAMETERS AND MESSAGES 
* 
**
*   2.0   PARAMETERS
* 
*         BCX  IS  NOT PARAMETER DRIVEN AND DOES NOT USE ANY
*         OF THE  MALET PARAMETER REGISTERS P0 - P9.
* 
*   3.0   MESSAGES
* 
*         THE FOLLOWING ERROR MESSAGES ARE REPORTED BY BCX. 
* 
*           BCX00 - ABORT ON .FUNC 414. COMMAND - 
* 
*           BCX00 - ABORT ON .OUT. COMMAND -
* 
*           BCX00 - ABORT ON .FUNC 1. COMMAND - 
* 
*           BCX00 - ABORT ON .IN. COMMAND - 
* 
*           BCX00 - DATA COMPARE ERROR
*                   WORD=*OCT  EXP=*OCT  ACT=*OCT DIFF=*OCT 
* 
*           BCX00 - ALL WORDS NOT OUTPUT. EXP=0040 ACT=*OCT 
* 
*           BCX00 - ALL WORDS NOT INPUT.  EXP=0040 ACT=*OCT 
* 
*           BCX01 - ABORT ON .FUNC. COMMAND - 
* 
*           BCX01 - ABORT ON .OUT CHAIN. COMMAND -
* 
*           BCX01 - ABORT ON .OUT. COMMAND -
* 
*           BCX01 - ABORT ON .DCN. COMMAND -
* 
*           ABORT - SCRATCH FILE EMPTY - EOR/EOI FIRST READ 
* 
*           ABORT - SCRATCH FILE IS NOT BCX - TOO BIG 
* 
*           ABORT - SCRATCH FILE IS NOT BCX - TOO SMALL 
* 
*           ABORT - SCRATCH FILE IS NOT BCX - BAD DATA
* 
*           BCX02 - ABORT ON .FUNC. COMMAND. BC MAY BE STOPPED. 
* 
*           BCX02 - ABORT ON .IN. COMMAND - 
* 
*           BCX02 - ABORT ON .OUT. COMMAND -
* 
*           BCX03 - ABORT ON .FUNC. COMMAND - 
* 
*           BCX03 - ABORT ON .OUT CHAIN. COMMAND -
* 
*           BCX03 - ABORT ON .OUT. COMMAND -
* 
*           BCX03 - ABORT ON .DCN. COMMAND -
* 
*           ABORT - SCRATCH FILE EMPTY - EOR/EOI FIRST READ 
* 
*           ABORT - SCRATCH FILE IS NOT CONTROLWARE - TOO BIG 
* 
*           ABORT - SCRATCH FILE IS NOT CONTROLWARE - TOO SMALL 
* 
*           ABORT - SCRATCH FILE IS NOT CONTROLWARE - BAD DATA
* 
*** 
**
* 
*         THE FOLLOWING DISPLAY IS PRESENTED BY BCX02  WHILE
*         IT IS IN EXECUTION. 
* 
*                   BCX FUNCTION TABLE
* 
*            0-3 =  *H*H  *H*H  *H*H  *H*H
*            4-7 =  *H*H  *H*H  *H*H  *H*H
*            8-B =  *H*H  *H*H  *H*H  *H*H
*            C-F =  *H*H  *H*H  *H*H  *H*H
*              BCX PASS COUNT = *DEC
* 
*         IF AN ERROR IS DETECTED, THE DISPLAY IS UPDATED AS
*         FOLLOWS AND A PICTURE OF THE ERROR IS SENT TO  THE
*         OUTPUT FILE.
* 
*                   BCX FUNCTION TABLE
* 
*            0-3 =  *H*H  *H*H  *H*H  *H*H
*            4-7 =  *H*H  *H*H  *H*H  *H*H
*            8-B =  *H*H  *H*H  *H*H  *H*H
*            C-F =  *H*H  *H*H  *H*H  *H*H
*              BCX PASS COUNT = *DEC
*              ADDRESS OF ERROR (A) = *H*H
*              ACTUAL DATA     (B1) = *H*H
*              EXPECTED DATA   (B2) = *H*H
*              ERROR STOP CODE      = *H*H
*              ERROR COUNT = *DEC 
* 
* 
*         THE  FOLLOWING  ERROR  MESSAGES MAY BE REPORTED BY
*         THE LOW LEVEL  PRODUCT  OVERLAY  IF  I/O  FAILURES
*         OCCUR.
* 
*             ER4020  CH ACTIVE ON ENTRY
* 
*             ER4021  CH INACTIVE AFTER ACN 
* 
*             ER4022  CH ACTIVE AFTER DCN 
* 
*             ER4024  NO INACTIVE ON EQUIP FUNC 
* 
*             ER4026  NO EMPTY ON LAST BYTE OUTPUT
* 
*             ER4027  CH INACTIVE ON CHAINING 
* 
*             ER4030  CH ACTIVE AND EMPTY ON INPUT
* 
*             ER4032  CH ACTIVE AND FULL ON OUTPUT
* 
*** BCX ABBREVIATIONS 
* 
**
* 
*     4.0   ABBREVIATIONS 
* 
*           THE FOLLOWING ABBREVIATIONS ARE USED WITHIN BCX 
*           DOCUMENTATION.
* 
*             ACT    - ACTUAL 
*             BC     - BUFFER CONTROLLER
*             BCMC   - BUFFER CONTROLLER MAINTENANCE CONSOLE
*             CH     - CHANNEL
*             CML    - CONCURRENT MAINTENANCE LIBRARY 
*             COND   - CONDITION
*             DIFF   - DIFFERENCE 
*             EOR/EOI- END OF RECORD/END OF INFORMATION 
*             EXP    - EXPECTED 
*             I/O    - INPUT/OUTPUT 
*             PPU    - PERIPHERAL PROCESSING UNIT 
*             SMM    - SYSTEM MAINTENANCE MONITOR 
*             WC     - WORD COUNT 
*             *DEC   - DECIMAL DISPLAY OF DATA
*             *H     - HEXIDECIMAL DISPLAY OF DATA
* 
* 
* 
   MODULE BCX00,BC(02,03,04,05,42,52)   - VERIFY COUPLER
*** BCX00 - VERIFY COUPLER DATA PATH - WORD MODE
* 
**  BCX00 - EXTERNAL DOCUMENTATION
*   OVERVIEW -
* 
*         BCX00 VERIFIES THAT THE COUPLER AND  BC  ARE  BOTH
*         OPERATIONAL  TO  A  POINT WHERE A SHORT BC PROGRAM
*         CAN BE DOWNLOADED INTO THE BC AND EXECUTED BY  THE
*         BC.    THE  BC  PROGRAM  DOWNLOADED  MONITORS  THE
*         COUPLER FOR A FUNCTION  FROM  THE  PPU.   WHEN  IT
*         DETECTS  ANY  FUNCTION,  IT  SENDS AN INACTIVE AND
*         WAITS FOR *COUPLER READY*, INDICATING THAT THE PPU
*         HAS  INITIATED  AN  INPUT.   THE  BC  PROGRAM THEN
*         OUTPUTS ITSELF  TO  THE  PPU  WHERE  THE  DATA  IS
*         COMPARED  WITH  THE DATA DOWNLOADED TO INSURE THAT
*         THE COUPLER/BC ARE NOT PICKING OR DROPPING BITS.
* 
*         THE FOLLOWING PROGRAM IS SENT TO THE BC.
* 
*            0000 - 
*            0900 - WAIT CH0 BIT 0 (FUNCTION)                            BCX001J
*            EF01 - 
*            1801 - 
*            0F00 -  OUTPUT 01 FORMAT ON CH0
*            0A00 -  SEND FUNCTION REPLY BIT 0 ON CH0 
*            0B00 - 
*            0906 -  WAIT BIT 6 OF CH0 (COUPLER READY)
*            EF01 - 
*            1610 -  A= COMPLEMENT OF WORD COUNT
*            F800 -  OUTPUT THIS PROGRAM TO PPU 
*            BB00 -  HANG 
*            FF00 -  DATA TEST PATTERNS 
*            FFFF - 
*            AA55 - 
*            AA55 - 
* 
*         DATA  TRANSFERS  PERFORMED  BY THE PPU TO/FROM THE
*         BUFFER CONTROLLER ARE DONE ONE WORD AT A  TIME  TO
*         INSURE  FULL CHANNEL PROTECTION FROM A HANG AND TO
*         VERIFY THAT SLOW-SPEED TRANSFERS CAN BE  COMPLETED
*         SUCCESSFULLY. 
* 
*         IF BCX00 CANNOT SUCCESSFULLY COMPLETE THE AUTOLOAD
*         FUNCTION OR  THE  OUTPUT  OF  THE  BC  PROGRAM,  A
*         SCOPING  LOOP CAN BE CREATED BY CLEARING THE MALET
*         STOP-ON-ERROR  SWITCH  AND  SETTING   THE   REPEAT
*         CONDITION  OR  REPEAT  MODULE SWITCH.  THIS ALLOWS
*         THE USER TO SCOPE THE PROBLEM TO DETERMINE WHY  IT
*         IS FAILING. 
* 
*         IF  THE AUTOLOAD AND OUTPUT COMPLETE SUCCESSFULLY,
*         BUT BCX00 FAILS ON THE FUNCTION 1 , INPUT OR  DATA
*         COMPARE,  THE  USER SHOULD USE THE BCMC TO LOOK AT
*         THE CONTENTS OF BC  MEMORY  TO  DETERMINE  IF  THE
*         PROGRAM THAT WAS DOWNLOADED ACTUALLY GOT TO MEMORY
*         WITHOUT DROPPING OR PICKING BITS. 
* 
*** DESCRIPTION - 
**
*         1. RESERVE CHANNEL. 
*         2. ISSUE AUTOLOAD FUNCTION. 
*         3. OUTPUT BC PROGRAM TO BUFFER CONTROLLER.
*         4. VERIFY THAT ALL WORDS WERE OUTPUT. 
*         5. WAIT 1 MSEC TO LET BC PROGRAM START RUNNING. 
*         6. ISSUE A FUNCTION OF 1 TO REQUEST THE BC TO 
*            SEND THE PROGRAM DOWNLOADED BACK TO THE PPU. 
*         7. INPUT THE BC PROGRAM FROM THE BC.
*         8. VERIFY THAT ALL WORDS WERE INPUT.
*         9. COMPARE THE DATA READ WITH DATA DOWNLOADED.
*        10. REPEAT STEPS 1-9 INDEFINITELY IF IN A SCOPING
*            LOOP SITUATION.  OTHERWISE REPEAT STEPS 1-9
*            FOR 1000B TIMES AND EXIT.
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERRORS.
* 
*         2. BCX00 - ABORT ON .FUNC 414. COMMAND -
*         3. BCX00 - ABORT ON .OUT. COMMAND - 
*         4. BCX00 - ABORT ON .FUNC 1. COMMAND -
*         5. BCX00 - ABORT ON .IN. COMMAND -
* 
*         6. BCX00 - DATA COMPARE ERROR 
*                    WORD=*OCT  EXP=*OCT  ACT=*OCT DIFF=*OCT
* 
*         7. BCX00 - ALL WORDS NOT OUTPUT. EXP=0040 ACT=*OCT
*         8. BCX00 - ALL WORDS NOT INPUT.  EXP=0040 ACT=*OCT
* 
*** BCX00 - INTERNAL DOCUMENTATION
* 
*   REGISTER USAGE -
* 
*         B1 = PASS COUNT 
*         B2 = LOGICAL DIFFERENCE ON DATA COMPARE 
*         B3 = BUFFER INDEX ON DATA COMPARE 
*         B4 = LINE NUMBER FOR DATA COMPARE DISPLAY 
*         B5 = MSG NUMBER TO REPORT IN CASE OF ERROR
*         B6 = PASS COUNT FOR SCOPING LOOPS 
*         B7 = ERROR COUNTER
*         WC = NUMBER OF WORDS TO COMPARE 
* 
 1 FORMAT BCX00 - VERIFY COUPLER PATH - WORD MODE 
 2 FORMAT BCX00 - DATA COMPARE ERROR
 3 FORMAT         WORD= *OCT  EXP= *OCT  ACT=*OCT  DIFF=*OCT
 4 FORMAT BCX00 - ERRS=*DEC LOOPS=*DEC
 5 FORMAT BCX00 - ALL WORDS NOT OUTPUT. EXP=0040 ACT=*OCT 
 6 FORMAT BCX00 - ALL WORDS NOT INPUT.  EXP=0040 ACT=*OCT 
 7 FORMAT BCX00 ERROR(S) IN MODULE = *DEC 
10 FORMAT BCX00 - ABORT ON .FUNC 414. COMMAND - 
11 FORMAT BCX00 - ABORT ON .OUT. COMMAND -
12 FORMAT BCX00 - ABORT ON .FUNC 1. COMMAND - 
13 FORMAT BCX00 - ABORT ON .IN. COMMAND - 
   DATA (OB,H) 0000,0900,EF01,1801,0F00,0A00,0B00,0906                   BCX001J
  ,EF01,1610,F800,BB00,FF00,FFFF,AA55,AA55
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
   TIMEOUT TYPEB=500D USEC
21 B1 = 0 
   WC = 40
22 RES                       *GET CHANNEL 
   B5 = 10
   FUNC 414, ABT 70          *AUTOLOAD BC 
   B5 = 11
   OUT 40 WORDS FROM OB, ABT 70   *OUTPUT BC PROGRAM TO BC
   B5 = 5 
   IF(WT.NE.40) GOTO 40      *IF ALL WORDS NOT TRANSMITTED
   DELAY 1 MSEC 
   B5 = 12
   FUNC 1, ABT 70            *REQUEST BC TO RETURN PROGRAM
   B5 = 13
   IN 40 WORDS TO IB, ABT 70   *READ PROGRAM FROM BC
   B5 = 6 
   IF(WT.NE.40) GOTO 40      *IF ALL WORDS NOT TRANSMITTED
   B5 = 2 
   COMPARE IB TO OB FOR WC, ABT 40  *COMPARE DATA 
23 B6 = B6+1                        *BUMP PASS COUNT
   IF(ES.AND.SL.EQ.0) GOTO 24       *IF NOT SCOPING 
   MSG 4 (B7,B6) TO DISPLAY 
   GOTO 22                          *EXECUTE SCOPING LOOP 
24 GOTO 22 WHILE (B1+1.NE.1000B)    *REPEAT 1000B TIMES 
   IF(ES.AND.CM.NE.0) GOTO 21  *IF REPEAT COND. OR MODULE 
   IF(B7.NE.0) GOTO 72         *IF MODULE ERRORS
   EXIT 
/ 
/---------IN, OUT AND DATA COMPARE ERROR PROCESSOR
/ 
40 B7 = B7 + 1                *BUMP ERROR COUNTER 
   B3 = 0 
   B4 = 2 
   MSG B5(WT) TO LINE 0       *REPORT  ERROR MSG
41 B2 = OB(B3).XOR.IB(B3) 
   MSG 3(B3, OB(B3), IB(B3), B2) TO LINE B4 
   B4 = B4 + 1                *BUMP DISPLAY LINE NUMBER 
   GOTO 41 WHILE (B3+1.NE.40) 
   WC = 40                    *RESET NUMBER OF WORDS TO TEST
   IF(ES.AND.SL.NE.0)GOTO 23  *IF SCOPING 
   GOTO 71                    *REPORT ERRORS
/ 
/--------ABORT PROCESSOR------------------------- 
/ 
70 B7 = B7 + 1                  *BUMP ERROR COUNTER 
   MSG B5 TO LINE 0             *REPORT ABORT CONDITION 
   MSG EM TO LINE 1             *PRODUCT OVERLAY ERROR MSG
   IF(ES.AND.SL.NE.0) GOTO 23   *IF SCOPING 
71 PICTURE
   HALT 
   BLANK
   MSG 1 TO DISPLAY             *REPOST RUNNING MESSAGE 
   IF(ES.AND.CM.NE.0) GOTO 21 
72 MSG 7(B7) TO DAYFILE 
   END 20 
COMPILE   - BCX00 - 
   MODULE BCX01,BC(02,03,04,05,42,52)   - DOWNLOAD BCX
*** BCX01 - DOWNLOAD BCX
* 
**  BCX01 - EXTERNAL DOCUMENTATION
* 
*   OVERVIEW -
* 
*         THIS MODULE REWINDS THE *SCRATCH* FILE,  READS  IT
*         AND VERIFIES THAT IT CONTAINS BCX.  ERROR MESSAGES
*         ARE REPORTED AND TESTING TEMINATED IF THE FILE  IS
*         EMPTY,  TOO  BIG,  TOO SMALL OR CONTAINS THE WRONG
*         DATA. 
* 
*         THE MODULE REWINDS THE *SCRATCH*  FILE,  READS  IT
*         500  PPU  WORDS  AT A TIME AND DOWNLOADS IT TO THE
*         BUFFER CONTROLLER UNDER TEST USING CHAINING  WRITE
*         OPERATIONS.   AN  ERROR  MESSAGE  IS POSTED IF THE
*         *SCRATCH* FILE IS EMPTY (EOR/EOI ON  FIRST  READ).
*         DOWNLOADING  IS COMPLETED WHEN A SHORTBLOCK OR END
*         OF RECORD/INFORMATION IS REACHED ON THE  *SCRATCH*
*         FILE. 
* 
*   DESCRIPTION - 
* 
*         1. REWIND SCRATCH.
*         2. READ SCRATCH. ABORT IF EOR/EOI ON FIRST READ.
*         3. READ  SCRATCH FILE UNTIL A SHORT BLOCK IS READ.
*            ABORT IF THE SCRATCH FILE IS  TOO  BIG  OR  TOO
*            SMALL  TO BE BCX, OR IF A SPECIFIC DATA WORD IS
*            IN ERROR.
*         4. REWIND SCRATCH.
*         5. READ SCRATCH.
*         6. POST ERROR MESSAGE AND TERMINATE IF EOR/EOI. 
*         7. RESERVE. 
*         8. FUNCTION 414 (AUTOLOAD). 
*         9. SET WC = WORDS READ FROM SCRATCH.
*        10. COPY INPUT BUFFER TO OUTPUT BUFFER.
*        11. OUTPUT TO BUFFER CONTROLLER WITH CHAINING. 
*        12. READ SCRATCH.
*        13. GO TO STEP 9 IF NOT EOR/EOI  AND  NOT  A  SHORT
*            BLOCK (LAST OF THE DATA).
*        14. DISCONNECT THE CHANNEL  IF  EOR/EOI  OR  IF  NO
*            WORDS  WERE READ FROM SCRATCH.  OTHERWISE, COPY
*            INPUT BUFFER TO OUTPUT BUFFER  AND  OUTPUT  THE
*            LAST  BLOCK  TO  THE  BUFFER CONTROLLER WITHOUT
*            CHAINING.
*        15. RELEASE. 
*        16. REPEAT MODULE OR EXIT. 
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERRORS.
* 
*         2. ABORT - SCRATCH FILE EMPTY - EOR/EOI FIRST READ
*         3. ABORT - SCRATCH FILE IS NOT BCX - TOO BIG
*         4. ABORT - SCRATCH FILE IS NOT BCX - TOO SMALL
*         5. ABORT - SCRATCH FILE IS NOT BCX - BAD DATA 
*         6. BCX01 - ABORT ON .FUNC. COMMAND -
*         7. BCX01 - ABORT ON .OUT CHAIN. COMMAND - 
*         8. BCX01 - ABORT ON .OUT. COMMAND - 
*         9. BCX01 - ABORT ON .DCN. COMMAND - 
*** BCX01 - INTERNAL DOCUMENTATION
* 
*   REGISTER USAGE -
* 
*         B0 = COUNT OF BLOCKS READ FROM SCRATCH FILE 
*         B1 = STATUS ON SYSRD COMMANDS 
*         B5 = ERROR MESSAGE INDEX IN CASE OF ABORT 
*         B6 = PASS COUNT 
*         B7 = ERROR COUNT
* 
  
 1 FORMAT BCX01 - DOWNLOAD BCX
 2 FORMAT ABORT - SCRATCH FILE EMPTY - EOR/EOI FIRST READ 
 3 FORMAT BCX01 - LOOPS=*DEC  ERRS=*DEC 
 4 FORMAT BCX01 ERROR(S) IN MODULE = *DEC 
 5 FORMAT ABORT - SCRATCH FILE IS NOT BCX - TOO BIG 
 6 FORMAT ABORT - SCRATCH FILE IS NOT BCX - TOO SMALL 
 7 FORMAT ABORT - SCRATCH FILE IS NOT BCX - BAD DATA
10 FORMAT BCX01 - ABORT ON .FUNC. COMMAND - 
11 FORMAT BCX01 - ABORT ON .OUT CHAIN. COMMAND -
12 FORMAT BCX01 - ABORT ON .OUT. COMMAND -
13 FORMAT BCX01 - ABORT ON .DCN. COMMAND -
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
/ 
/--------READ AND VERIFY THAT SCRATCH FILE CONTAINS BCX.
/ 
   SYSREW 
   SYSRD, STATUS TO B1
   IF(B1.EQ.0) GOTO 21       *IF NOT EOR/EOI ON FIRST READ
   MSG 2 TO DISPLAY,PRINT    *POST EOR/EOI ERROR MESSAGE
   GOTO 72                   *TERMINATE TESTING 
21 IF(WT.NE.500) GOTO 24     *IF NOT A FULL BUFFER
   B0 = B0 + 1               *BUMP BUFFERS READ 
   IF(B0.LT.32) GOTO 23      *IF NOT TOO BIG YET
22 MSG 5 TO DISPLAY,PRINT    *POST TOO BIG ERROR MESSAGE
   GOTO 72                   *TERMINATE TESTING 
23 SYSRD, STATUS TO B1
   GOTO 21
/ 
/         A SHORT RECORD HAS BEEN READ.  VERIFY WORD COUNT. 
/ 
24 IF(B0.EQ.31) GOTO 26      *IF NOT TOO SMALL
25 MSG 6 TO DISPLAY,PRINT    *POST TOO SMALL ERROR MESSAGE
   GOTO 72                   *TERMINATE TESTING 
26 IF(WT.EQ.276) GOTO 27     *IF LAST BLOCK CORRECT LENGTH
   IF(WT.LT.276) GOTO 25     *POST TOO SMALL ERROR MESSAGE
   GOTO 22                   *POST TOO BIG ERROR MESSAGE
27 IF(IB(273).EQ.274) GOTO 30  *IF DATA WORD CORRECT
   MSG 7 TO DISPLAY,PRINT    *POST BAD DATA ERROR MESSAGE 
   GOTO 72                   *TERMINATE TESTING 
* 
/--------DOWNLOAD SCRATCH FILE TO BC
* 
30 SYSREW                    *REWIND SCRATCH FILE 
   SYSRD, STATUS TO B1       *READ FIRST RECORD FROM SCRATCH
   IF(B1.EQ.0) GOTO 31       *IF NOT EOR/EOI
   MSG 2 TO DISPLAY,PRINT    *POST EOR/EOI ERROR MESSAGE
   GOTO 72                   *TERMINATE TESTING 
31 RES                       *GET CHANNEL 
   B5 = 10
   WC=WT                                                                 BCX002G
   FUNC 414, ABT 70          *AUTOLOAD BC 
   GOTO 40                                                               BCX002G
32 WC = WT                   *WORDS TO WRITE = WORDS READ 
40 COPY IB TO OB FOR WC      *MOVE INPUT BUFFER TO OUTPUT                BCX002G
   B5 = 11
   OUT CHAIN, ABT 70         *PERFORM CHAINING WRITE TO BC
   SYSRD, STATUS TO B1       *GET NEXT BLOCK FROM SCRATCH 
   IF(B1.EQ.2) GOTO 33       *IF EOI - NO WORDS READ
   IF(WT.EQ.500) GOTO 32     *IF NOT A SHORTBLOCK 
   IF(WT.EQ.0) GOTO 33       *IF NO WORDS REMAINING 
   WC = WT
   COPY IB TO OB FOR WC      *MOVE INPUT BUFFER TO OUTPUT 
   B5 = 12
   OUT, ABT 70               *SEND SHORTBLOCK TO BC 
   GOTO 34
33 B5 = 13
   DCN, ABT 70               *TERMINATE OUTPUT IF NO WORDS
34 REL                       *RELEASE CHANNEL 
   B6 = B6 + 1               *BUMP SUCCESSFUL PASS COUNT
   IF(ES.AND.SL.EQ.0) GOTO 35  *IF NOT SCOPING
   MSG 3 (B6,B7) TO DISPLAY    *POST SCOPING MESSAGE
   GOTO 30                     *RESTART 
35 IF(ES.AND.CM.NE.0) GOTO 30  *IF REPEAT CONDITION/MODULE
   IF(B7.EQ.0) GOTO 36         *IF NO ERRORS
   MSG 4 (B7) TO DAYFILE       *REPORT ERRORS TO DAYFILE
36 EXIT 
/ 
/--------ABORT PROCESSOR------------------------- 
/ 
70 B7 = B7 + 1                 *BUMP ERROR COUNTER
   IF(ES.AND.SL.EQ.0) GOTO 71  *SCOPE LOOP NOT SELECTED 
   MSG 3 (B6,B7) TO DISPLAY    *ERROR MESSAGE 
   GOTO 30                     *RESTART 
71 MSG B5 TO LINE 0            *REPORT ABORT CONDITION
   MSG EM TO LINE 1            *PRODUCT OVERLAY ERROR MSG 
   PICTURE
   HALT 
   MSG 1 TO DISPLAY            *REPLACE RUNNING MESSAGE 
   GOTO 35                     *REPEAT MODULE OR EXIT 
72 END 20 
COMPILE   - BCX01 - 
   MODULE BCX02,BC(02,03,04,05,42,52)  - RUN BCX
*** BCX02 - RUN BCX 
* 
**  BCX02 - EXTERNAL DOCUMENTATION
* 
*   OVERVIEW -
* 
*         THIS MODULE RUNS BCX AFTER IT HAS BEEN  DOWNLOADED
*         INTO  THE  BC  BY  MODULE  BCX01.  A 60 OCTAL WORD
*         FUNCTION TABLE IS  USED  TO  EXCHANGE  INFORMATION
*         BETWEEN  THE PPU AND THE BC.  A FUNCTION CODE OF 1
*         ISSUED BY THE PPU TO THE BC CAUSES THE BC TO  SEND
*         THE  FUNCTION  TABLE TO THE PPU SO THAT PASS COUNT
*         AND ERROR STATUS CAN BE MONITORED. A FUNCTION CODE
*         OF  0 TO THE BC CAUSES THE BC TO READ THE FUNCTION
*         TABLE FROM THE PPU SO THAT THE BC CAN PERFORM  THE
*         REQUESTED  ACTION (THE ONLY ACTION THAT IS REQUES-
*         TED BY THE PPU IS TO RUN A PASS OF BCX).
* 
*         WHILE  BCX  IS IN EXECUTION, 20 OCTAL WORDS OF THE
*         FUNCTION TABLE IS DISPLAYED  AS  WELL  AS  A  PASS
*         COUNT.   IF  AN  ERROR IS DETECTED IN THE FUNCTION
*         TABLE, ERROR STATUS FROM THE BC IS ALSO DISPLAYED.
*         1000 OCTAL PASSES OF BCX ARE EXECUTED.
* 
*   DESCRIPTION - 
* 
*         1. DELAY 64 MSEC TO ALLOW BC TO RUN.
*         2. GET CHANNEL. 
*         3. ISSUE FUNCTION OF 1. 
*         4. INPUT FUNCTION TABLE FROM BC.
*         5. RELEASE CHANNEL. 
*         6. COPY FUNCTION TABLE FROM IB TO OB. 
*         7. DISPLAY 20 OCTAL WORDS OF THE TABLE. 
*         8. SET THE GO BIT IN THE TABLE. 
*         9. IF  THE  FUNCTION  TABLE INDICATES AN ERROR HAS
*            OCCURRED, DISPLAY ERROR INFORMATION AND HALT.
*        10. GET CHANNEL. 
*        11. ISSUE FUNCTION OF 0. 
*        12. OUTPUT FUNCTION TABLE TO BC. 
*        13. RELEASE CHANNEL. 
*        14. UPDATE PASS COUNT ON DISPLAY.
*        15. REPEAT STEPS 1-14 FOR 1000 OCTAL PASSES. 
*        16. REPEAT MODULE OR EXIT. 
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERRORS.
* 
*         2. BCX02 - ABORT ON .FUNC. COMMAND. BC MAY BE 
*                    STOPPED. 
*         3. BCX02 - ABORT ON .IN. COMMAND. 
*         4. BCX02 - ABORT ON .OUT. COMMAND.
* 
*** BCX02 - INTERNAL DOCUMENTATION
* 
*   REGISTER USAGE -
* 
*         B1 = PASS COUNT 
*         B5 = MESSAGE INDEX IN CASE OF AN ABORT
*         B7 = ERROR COUNTER
* 
 1 FORMAT BCX02 - BCX IS EXECUTING
 2 FORMAT         BCX FUNCTION TABLE
 3 FORMAT  0-3 =  *H*H  *H*H  *H*H  *H*H
 4 FORMAT  4-7 =  *H*H  *H*H  *H*H  *H*H
 5 FORMAT  8-B =  *H*H  *H*H  *H*H  *H*H
 6 FORMAT  C-F =  *H*H  *H*H  *H*H  *H*H
 7 FORMAT    BCX PASS COUNT = *DEC
10 FORMAT    ADDRESS OF ERROR (A) = *H*H
11 FORMAT    ACTUAL DATA     (B1) = *H*H
12 FORMAT    EXPECTED DATA   (B2) = *H*H
13 FORMAT    ERROR STOP CODE      = *H*H
14 FORMAT    ERROR COUNT = *DEC 
15 FORMAT BCX02 - ABORT ON .FUNC. COMMAND. BC MAY BE STOPPED. 
16 FORMAT BCX02 - ABORT ON .IN. COMMAND.
17 FORMAT BCX02 - ABORT ON .OUT. COMMAND. 
20 FORMAT BCX02 ERROR(S) IN MODULE = *DEC 
30 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
   B1 = 0                    *CLEAR PASS COUNT
   WC = 60
31 MSG 2 TO LINE 1
32 DELAY 100 MSEC 
   RES                       *GET CHANNEL 
   B5 = 15
   FUNC 1, ABT 70            *REQUEST FUNCTION TABLE FROM BC
   B5 = 16
   IN, ABT 70                *READ FUNCTION TABLE FROM BC 
   REL
   COPY IB TO OB FOR 60 
   MSG 3, 8D WORDS FROM IB TO LINE 3
   MSG 4, 8D WORDS FROM IB(10) TO LINE 4
   MSG 5, 8D WORDS FROM IB(20) TO LINE 5
   MSG 6, 8D WORDS FROM IB(30) TO LINE 6
   OB = 0                    *UPDATE FUNCTION TABLE 
   OB(1) = 1                 *SET GO BIT
   IF(IB.EQ.4) GOTO 40       *IF BCX ERROR
   B1 = IB(4).LS.8D+IB(5)    *FORM BC PASS COUNT
33 RES                       *GET CHANNEL 
   B5 = 15
   FUNC 0, ABT 70            *REQUEST BC TO READ TABLE
   B5 = 17
   OUT, ABT 70               *SEND TABLE TO BC
   REL                       *DROP CHANNEL
34 MSG 7 (B1) TO DISPLAY
   MSG 7 (B1) TO LINE 10     *PASS COUNT
   IF(B1.LT.1000) GOTO 32    *IF NOT 1000B PASSES 
   B1 = 0 
   IF(ES.AND.CM.NE.0) GOTO 31  *IF REPEAT CONDITION/MODULE
   IF(B7.EQ.0) GOTO 35       *IF NO ERRORS
   MSG 20 (B7) TO DAYFILE    *REPORT ERRORS TO DAYFILE
35 GOTO 77                   *END TEST SERIES 
* 
/---------BCX DIAGNOSTIC ERROR DETECTED-----------
* 
40 MSG 7 (B1) TO LINE 10              *PASS COUNT 
   MSG 10 (IB(2),IB(3)) TO LINE 11    *ADDRESS
   MSG 11 (IB(4),IB(5)) TO LINE 12    *ACTUAL 
   MSG 12 (IB(6),IB(7)) TO LINE 13    *EXPECTED 
   MSG 13 (IB(10),IB(11)) TO LINE 14  *STOP CODE
   B7 = B7 + 1                        *BUMP ERROR COUNT 
   MSG 14 (B7) TO LINE 16             *POST ERROR COUNT 
   PICTURE
   HALT 
   BLANK
   MSG 2 TO LINE 1
   GOTO 33
/ 
/--------ABORT PROCESSOR------------------------- 
/ 
70 B7 = B7 + 1                  *BUMP ERROR COUNTER 
   MSG 7 (B1) TO LINE 10        *PASS COUNT 
   MSG B5 TO LINE 11            *REPORT ABORT CONDITION 
   MSG EM TO LINE 12            *PRODUCT OVERLAY ERROR MSG
   PICTURE
   HALT 
   BLANK
   GOTO 31
77 END 30 
COMPILE   - BCX02 - 
   MODULE BCX03,BC(02,03,04,05,42,52)   - DOWNLOAD CONTROLWARE
*** BCX03 - DOWNLOAD CONTROLWARE
* 
**  BCX03 - EXTERNAL DOCUMENTATION
* 
*   OVERVIEW -
* 
*         THIS MODULE REWINDS THE *SCRATCH*  FILE,  READS IT
*         AND VERIFIES THAT IT CONTAINS CONTROLWARE.   ERROR
*         MESSAGES ARE REPORTED AND TESTING TEMINATED IF THE
*         FILE IS EMPTY, TOO  BIG, TOO SMALL OR CONTAINS THE
*         WRONG DATA. 
* 
*         THE MODULE REWINDS THE  *SCRATCH*  FILE,  READS IT
*         500  PPU  WORDS  AT A TIME AND DOWNLOADS IT TO THE
*         BUFFER CONTROLLER UNDER TEST USING  CHAINING WRITE
*         OPERATIONS.  AN  ERROR  MESSAGE  IS  POSTED IF THE
*         *SCRATCH* FILE IS  EMPTY (EOR/EOI ON FIRST  READ).
*         DOWNLOADING  IS COMPLETED WHEN A SHORTBLOCK OR END
*         OF RECORD/INFORMATION IS REACHED ON THE  *SCRATCH*
*         FILE. 
* 
*   DESCRIPTION - 
* 
*         1. REWIND SCRATCH.
*         2. READ SCRATCH. ABORT IF EOR/EOI ON FIRST READ.
*         3. READ  SCRATCH FILE UNTIL A SHORT BLOCK IS READ.
*            ABORT IF THE SCRATCH FILE  IS  TOO  BIG  OR TOO
*            SMALL TO  BE CONTROLWARE, OR IF A SPECIFIC DATA
*            WORD IS IN ERROR.
*         4. REWIND SCRATCH.
*         5. READ SCRATCH.
*         6. POST ERROR MESSAGE AND TERMINATE IF EOR/EOI. 
*         7. STRIP OFF 77 TABLE IF ONE. 
*         8. RESERVE. 
*         9. FUNCTION 414 (AUTOLOAD). 
*        10. SET WC = WORDS READ FROM SCRATCH.
*        11. COPY INPUT BUFFER TO OUTPUT BUFFER.
*        12. OUTPUT TO BUFFER CONTROLLER WITH CHAINING. 
*        13. READ SCRATCH.
*        14. GO TO STEP 10 IF NOT EOR/EOI  AND  NOT  A SHORT
*            BLOCK (LAST OF THE DATA).
*        15. DISCONNECT THE CHANNEL  IF  EOR/EOI  OR  IF  NO
*            WORDS  WERE READ FROM SCRATCH.  OTHERWISE, COPY
*            INPUT BUFFER TO OUTPUT BUFFER  AND  OUTPUT  THE
*            LAST  BLOCK  TO  THE  BUFFER CONTROLLER WITHOUT
*            CHAINING.
*        16. RELEASE. 
*        17. REPEAT MODULE OR EXIT. 
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERRORS.
* 
*         2. ABORT - SCRATCH FILE EMPTY - EOR/EOI FIRST READ
*         3. ABORT - SCRATCH FILE IS NOT CONTROLWARE - TOO BIG
*         4. ABORT - SCRATCH FILE IS NOT CONTROLWARE - TOO SMALL
*         5. ABORT - SCRATCH FILE IS NOT CONTROLWARE - BAD DATA 
*         6. BCX03 - ABORT ON .FUNC. COMMAND -
*         7. BCX03 - ABORT ON .OUT CHAIN. COMMAND - 
*         8. BCX03 - ABORT ON .OUT. COMMAND - 
*         9. BCX03 - ABORT ON .DCN. COMMAND - 
*** BCX03 - INTERNAL DOCUMENTATION
* 
*   REGISTER USAGE -
* 
*         B0 = COUNT OF BLOCKS READ FROM SCRATCH FILE 
*         B1 = STATUS ON SYSRD COMMANDS 
*         B2 = FLAG TO DENOTE 77 TABLE
*         B4 = MESSAGE NUMBER FOR CONTROLWARE TYPE
*         B5 = ERROR MESSAGE INDEX IN CASE OF ABORT 
*         B6 = PASS COUNT 
*         B7 = ERROR COUNT
* 
  
 1 FORMAT BCX03 - DOWNLOAD CONTROLWARE
 2 FORMAT ABORT - SCRATCH FILE EMPTY - EOR/EOI FIRST READ 
 3 FORMAT BCX03 - LOOPS=*DEC  ERRS=*DEC 
 4 FORMAT BCX03 ERROR(S) IN MODULE = *DEC 
 5 FORMAT ABORT - SCRATCH FILE IS NOT CONTROLWARE - TOO BIG 
 6 FORMAT ABORT - SCRATCH FILE IS NOT CONTROLWARE - TOO SMALL 
 7 FORMAT ABORT - SCRATCH FILE IS NOT CONTROLWARE - BAD DATA
10 FORMAT BCX03 - ABORT ON .FUNC. COMMAND - 
11 FORMAT BCX03 - ABORT ON .OUT CHAIN. COMMAND -
12 FORMAT BCX03 - ABORT ON .OUT. COMMAND -
13 FORMAT BCX03 - ABORT ON .DCN. COMMAND -
14 FORMAT MA710 A13 LOADED
15 FORMAT MA401 A07 LOADED
16 FORMAT MB434 A14 LOADED
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
/ 
/--------READ AND VERIFY THAT SCRATCH FILE CONTAINS CONTROLWARE.
/ 
   SYSREW 
   SYSRD, STATUS TO B1
   IF(B1.EQ.0) GOTO 21       *IF NOT EOR/EOI ON FIRST READ
   MSG 2 TO DISPLAY,PRINT    *POST EOR/EOI ERROR MESSAGE
   GOTO 72                   *TERMINATE TESTING 
21 IF(WT.NE.500) GOTO 24     *IF NOT A FULL BUFFER
   B0 = B0 + 1               *BUMP BUFFERS READ 
   IF(IB.EQ.7700B) B2=77B    *SET FLAG FOR 77 TABLE 
   IF(B0.LT.32) GOTO 23      *IF NOT TOO BIG YET
22 MSG 5 TO DISPLAY,PRINT    *POST TOO BIG ERROR MESSAGE
   GOTO 72                   *TERMINATE TESTING 
23 SYSRD, STATUS TO B1
   GOTO 21
/ 
/         A SHORT RECORD HAS BEEN READ.  VERIFY WORD COUNT. 
/ 
24 IF(B0.EQ.31) GOTO 26      *IF NOT TOO SMALL
25 MSG 6 TO DISPLAY,PRINT    *POST TOO SMALL ERROR MESSAGE
   GOTO 72                   *TERMINATE TESTING 
26 IF(B2.EQ.77B) GOTO 54     *IF 77 TABLE 
   IF(WT.EQ.276) GOTO 27     *IF LAST BLOCK CORRECT LENGTH
   IF(WT.LT.276) GOTO 25     *POST TOO SMALL ERROR MESSAGE
   GOTO 22                   *POST TOO BIG ERROR MESSAGE
27 IF(IB(273).EQ.12) B4=14   *MA710 
   IF(IB(273).EQ.32) B4=15   *MA401 
   IF(IB(273).EQ.112) B4=16  *MB434 
   IF(B2.EQ.77) GOTO 60      *IF 77 TABLE CHECK NEXT LENGTH 
   IF(B4.NE.0) GOTO 30       *IF CORRECT DATA FOUND 
   MSG 7 TO DISPLAY,PRINT    *POST BAD DATA ERROR MESSAGE 
   GOTO 72                   *TERMINATE TESTING 
* 
/--------DOWNLOAD SCRATCH FILE TO BC
* 
30 SYSREW                    *REWIND SCRATCH FILE 
   SYSRD, STATUS TO B1       *READ FIRST RECORD FROM SCRATCH
   IF(B1.EQ.0) GOTO 31       *IF NOT EOR/EOI
   MSG 2 TO DISPLAY,PRINT    *POST EOR/EOI ERROR MESSAGE
   GOTO 72                   *TERMINATE TESTING 
31 IF(IB.EQ.7700B) GOTO 50   *IF 77 TABLE 
   RES                       *GET CHANNEL 
   B5 = 10
   WC=WT
   FUNC 414, ABT 70          *AUTOLOAD BC 
   GOTO 40
32 WC = WT                   *WORDS TO WRITE = WORDS READ 
40 COPY IB TO OB FOR WC      *MOVE INPUT BUFFER TO OUTPUT 
41 B5 = 11
   OUT CHAIN, ABT 70         *PERFORM CHAINING WRITE TO BC
   SYSRD, STATUS TO B1       *GET NEXT BLOCK FROM SCRATCH 
   IF(B1.EQ.2) GOTO 33       *IF EOI - NO WORDS READ
   IF(WT.EQ.500) GOTO 32     *IF NOT A SHORTBLOCK 
   IF(WT.EQ.0) GOTO 33       *IF NO WORDS REMAINING 
   WC = WT
   COPY IB TO OB FOR WC      *MOVE INPUT BUFFER TO OUTPUT 
   B5 = 12
   OUT, ABT 70               *SEND SHORTBLOCK TO BC 
   GOTO 34
33 B5 = 13
   DCN, ABT 70               *TERMINATE OUTPUT IF NO WORDS
34 REL                       *RELEASE CHANNEL 
   B6 = B6 + 1               *BUMP SUCCESSFUL PASS COUNT
   IF(ES.AND.SL.EQ.0) GOTO 35  *IF NOT SCOPING
   MSG 3 (B6,B7) TO DISPLAY    *POST SCOPING MESSAGE
   GOTO 30                     *RESTART 
35 IF(ES.AND.CM.NE.0) GOTO 30  *IF REPEAT CONDITION/MODULE
   IF(B7.EQ.0) GOTO 36         *IF NO ERRORS
   MSG 4 (B7) TO DAYFILE       *REPORT ERRORS TO DAYFILE
   GOTO 72
36 MSG B4 TO LINE 5          *CONTROLWARE LOADED
   PICTURE
   GOTO 72
* 
50 WC = 360B
   COPY IB(120) TO OB FOR WC   *STRIP OFF 77 TABLE
   RES
   B5 = 10
   FUNC 414, ABT 70          *AUTOLOAD BC 
   GOTO 41                   *CONTINUE
* 
54 IF(WT.EQ.416) GOTO 27     *IF LAST BLOCK CORRECT LENGTH
   IF(WT.LT.416) GOTO 25     *POST TOO SMALL ERROR MESSAGE
   GOTO 22                   *POST TOO BIG ERROR MESSAGE
60 IF(IB(413).EQ.12) B4=14   *MA710 
   IF(IB(413).EQ.32) B4=15   *MA401 
   IF(IB(413).EQ.112) B4=16  *MB434 
   IF(B4.NE.0) GOTO 30       *IF CORRECT DATA FOUND 
   MSG 7 TO DISPLAY, PRINT   *POST BAD DATA ERROR MESSAGE 
   GOTO 72
/ 
/--------ABORT PROCESSOR------------------------- 
/ 
70 B7 = B7 + 1                 *BUMP ERROR COUNTER
   IF(ES.AND.SL.EQ.0) GOTO 71  *SCOPE LOOP NOT SELECTED 
   MSG 3 (B6,B7) TO DISPLAY    *ERROR MESSAGE 
   GOTO 30                     *RESTART 
71 MSG B5 TO LINE 0            *REPORT ABORT CONDITION
   MSG EM TO LINE 1            *PRODUCT OVERLAY ERROR MSG 
   PICTURE
   HALT 
   MSG 1 TO DISPLAY            *REPLACE RUNNING MESSAGE 
   GOTO 35                     *REPEAT MODULE OR EXIT 
72 END 20 
COMPILE   - BCX03 - 
   MODULE BCX99,BC(02,03,04,05,42,52)  - DOCUMENTATION
*** BCX99 - DOCUMENTATION 
* 
**  BCX99 - EXTERNAL DOCUMENTATION
* 
*   OVERVIEW -
* 
*         BCX99  IS  PROVIDED TO GIVE THE USER A DESCRIPTION
*         OF BCX THAT CAN BE LOADED TO  THE  SYSTEM  CONSOLE
*         DISPLAY  AND/OR A PICTURE OF IT SENT TO THE OUTPUT
*         FILE. 
* 
/         BCX IS A MALET VERSION OF THE  OFF-LINE  BCX  TEST
/         THAT  NORMALLY EXECUTES UNDER SMM OR FROM THE BCMC
/         TESTER.  BCX IS DESIGNED TO  EXECUTE  ON  THE  66X
/         TAPE  CONTROLLER  (7021)  AND 844 DISK CONTROLLERS
/         (7054/7154).  ITS FRIMARY FUNCTION  IS  TO  VERIFY
/         THAT  THE  BUFFER  CONTROLLER  PROCESSOR  IN THESE
/         DEVICES IS CAPABLE OF EXECUTING ITS COMMAND SET OF
/         INSTRUCTIONS WITH CANNED OPERANDS.
/ 
/         MALET  BCX  IS  COMPOSED OF TWO PARTS - THE MODULE
/         CODE EXECUTED BY THE PPU AND THE BUFFER CONTROLLER
/         CODE  EXECUTED BY THE BC.  PRIOR TO EXECUTING BCX,
/         THE USER MUST INSURE THAT THE TWO PARTS OF BCX ARE
/         ON  LOCAL  FILES  SO THEY MAY BE READ BY THE MALET
/         EXECUTIVE.  NORMALLY BOTH PARTS OF BCX WOULD BE ON
/         SEPERATE  PERMANENT FILES, INITIALLY OBTAINED FROM
/         THE CML  TAPE  (CONCURRENT  MAINTENANCE  LIBRARY).
/         ASSUMING  THAT THE PPU CODE RESIDES ON A PERMANENT
/         FILE, BCX, AND THE BC CODE RESIDES ON  BCXBC,  THE
/         FOLLOWING  CONTROL  CARDS WOULD BE USED TO EXECUTE
/         BCX.
/ 
/         ATTACH,BCX.             PPU PORTION OF BCX
/         ATTACH,BCXBC.           BC PORTION OF BCX 
/         ATTACH,CWFILE.          CONTROLWARE FILE
/         MALET,R=BCX,S=BCXBC.
/ 
/         NOTE- SINCE THE I/O CHANNEL REMAINS ACTIVE  DURING
/               THE  TOTAL  DOWN-LOAD  OPERATION WITH INTER-
/               MIXED READS OF THE SCRATCH FILE, THE SCRATCH
/               FILE  CANNOT  BE  ON THE SAME I/O CHANNEL AS
/               THE BC UNDER TEST.  ONCE BCX  COMPLETES  ITS
/               EXECUTION, THE USER MUST REINSTATE OPERATING
/               SYSTEM CONTROLWARE INTO THE BC BEFORE IT CAN
/               BE  UTILIZED  BY  THE  SYSTEM.  BCX DOES NOT
/               PERFORM THIS TASK.
/ 
/               BCX03 CAN BE USED  TO  DOWNLOAD  CONTROLWARE
/               AFTER RUNNING BCX02.
/ 
/         BCX IS COMPOSED OF FOUR MODULES.  BCX00 PERFORMS A
/         LOOP-BACK  TEST  ON  THE  COUPLER  IN  WORD MODE -
/         SINGLE WORD TRANSFERS BY THE PPU WITH FULL CHANNEL
/         PROTECTION  FROM  HANGS  (ALL I/O PERFORMED BY BCX
/         USES THIS TECHNIQUE). 
/ 
/         BCX01 THEN READS THE BUFFER CONTROLLER PORTION  OF
/         BCX  CODE  FROM  THE  SCRATCH FILE ASSIGNED BY THE
/         USER AND DOWNLOADS IT TO  THE  BUFFER  CONTROLLER.
/         CHECKS  ARE MADE TO INSURE THAT THE DATA CONTAINED
/         ON THE SCRATCH FILE IS OF THE PROPER LENGTH  PRIOR
/         TO DOWNLOADING IT.
/ 
/         BCX02 THEN COMMUNICATES WITH THE BUFFER CONTROLLER
/         AND PRESENTS A DISPLAY OF CURRENT INFORMATION FROM
/         THE  BC  ON THE PPU DISPLAY IN HEXIDECIMAL.  1000B
/         OCTAL PASSES OF BCX ARE EXECUTED.  SHOULD AN ERROR
/         BE  DETECTED,  STATUS  CONCERNING  THE  FAILURE IS
/         ADDED TO THE DISPLAY AND A PICTURE OF IT TAKEN. 
/ 
/         BCX03 READS THE CONTROLWARE FILE FROM THE  SCRATCH
/         FILE ASSIGNED BY THE USER.  IF  A  CORRECT SCRATCH
/         FILE HAS BEEN ASSIGNED,  THE CONTROLWARE  IS  THEN
/         DOWNLOADED TO  THE  BUFFER CONTROLLER.  CHECKS ARE
/         MADE TO  INSURE THAT THE  DATA  CONTAINED  IN  THE
/         SCRATCH FILE  IS  THE  CORRECT LENGTH BEFORE IT IS
/         DOWNLOADED. 
/ 
/         BCX99 IS THE FOURTH MODULE  AND  IS  DOCUMENTATION
/         THAT YOU ARE READING TO ASSIST THE USER IN RUNNING
/         AND UNDERSTANDING BCX.
/ 
/         BCX IS NOT PARAMETER DRIVEN - IT DOES NOT USE  ANY
/         OF THE MALET PARAMETER REGISTERS P0 - P9. NORMALLY
/         THE USER WILL RUN MODULES 00 THRU 02  IN  SEQUENCE
/         WITH A RUN DIRECTIVE AS FOLLOWS- RUN BCX
/ 
/         IF BCX00 CANNOT SUCCESSFULLY COMPLETE THE AUTOLOAD
/         FUNCTION OR THE OUTPUT OF THE BC PROGRAM, A  SCOPE
/         LOOP CAN BE CREATED BY CLEARING THE MALET STOP-ON-
/         ERROR SWITCH AND SETTING THE REPEAT  CONDITION  OR
/         REPEAT  MODULE  SWITCH.   THIS  ALLOWS THE USER TO
/         SCOPE THE PROBLEM TO DETERMINE WHY IT IS FAILING. 
/ 
/         IF THE AUTOLOAD AND OUTPUT COMPLETE  SUCCESSFULLY,
/         BUT  BCX00  FAILS  ON THE FUNCTION 1 OR INPUT, THE
/         USER SHOULD USE THE BCMC TO LOOK AT  THE  CONTENTS
/         OF  BC MEMORY TO DETERMINE IF THE PROGRAM THAT WAS
/         DOWNLOADED ACTUALLY GOT TO MEMORY WITHOUT DROPPING
/         OR PICKING BITS.
20 PAUSE
   END 20 
COMPILE,SOURCE   - BCX99 -
