*DECK,TFF 
***       TFF - 2550 COUPLER DIAGNOSTIC 
**        TFF - 2550 COUPLER DIAGNOSTIC 
* 
*         AUTHOR - RON NETH        APRIL, 1979
*          EDP SPECIALIST - SOUTHEAST REGION
*          ENGINEERING SERVICES 
*          RCVCOM   EXT 3819
* 
*         COPYRIGHT CONTROL DATA CORP. 1978 
*         COPYRIGHT CONTROL DATA CORP. 1979 
* 
*** 1.0   INTRODUCTION
**  1.0   INTRODUCTION
*         ------------
* 
*         TFF IS A 2550 COUPLER DIAGNOSTIC DESIGNED TO TEST THE 
*         DATA PATH BETWEEN THE PERIPHERAL PROCESSOR AND THE
*         2550 AND ALSO TO TEST THE DATA TRANSFER OPERATIONS OF 
*         THE CYBER COUPLER (DK106).  TFF IS INTENDED TO SUPPLEMENT 
*         THE OFF-LINE DIAGNOSTICS WHICH ARE LOADED VIA THE 
*         CASSETTE TAPE.
* 
*** 1.1   RESTRICTIONS
**  1.1   RESTRICTIONS
*         ------------
* 
*         THERE ARE NO RESTRICTIONS WHICH AFFECT THE EXECUTION OF 
*         THIS DIAGNOSTIC.  HOWEVER THIS DIAGNOSTIC IS DESIGNED TO
*         TEST ONLY THE DATA CHANNEL AND CYBER COUPLER AND NOT THE
*         COMPLETE 2550 OR CLA-S.  MODULES 6 THRU 13 ASSUME THAT
*         THE 2550 CPU IS CAPABLE OF EXECUTING INSTRUCTIONS CORRECTLY.
* 
*** 2.0   APPLICABLE DOCUMENTS
**  2.0   APPLICABLE DOCUMENTS
*         --------------------
* 
*         THIS TEST IS SELF DOCUMENTING (IE. THE TEST CONTAINS ITS OWN
*         DOCUMENTATION).  A LISTING OF THE TEST IS ALL THAT IS NEEDED
*         TO RUN THE TEST.
* 
*** 3.0   PROGRAM DESCRIPTION 
**  3.0   PROGRAM DESCRIPTION 
*         ------------------- 
* 
*         TFF IS COMPOSED OF THREE GROUPS OF MODULES.  THE FIRST GROUP
*         CAN BE USED TOGETHER AS A CONFIDENCE LEVEL DIAGNOSTIC OR
*         THE MODULES CAN BE USED INDEPENDENTLY TO PERFORM REPAIR.
*         THE SECOND GROUP CONSISTS OF SPECIAL PURPOSE MODULES AND
*         THE THIRD GROUP CONTAINS THE UTILITY MODULES. 
* 
*** 3.1   TFF MODULES 
**  3.1   TFF MODULES 
*         ----------- 
* 
*         PART 1 - DIAGNOSTIC PASS
* 
*         1. TFF01 - CHANNEL COUPLER TEST 
* 
*         2. TFF02 - 2550 MEMORY ADDRESS REGISTER 0 TEST
* 
*         3. TFF03 - 2550 MEMORY ADDRESS REGISTER 1 TEST
* 
*         4. TFF04 - 2550 ADDRESSING TEST 
* 
*         5. TFF05 - 2550 MEMORY DATA PATTERNS TEST 
* 
*         6. TFF06 - PPU/2550 BASIC COMMUNICATION 
* 
*         7. TFF07 - PPU/2550 DATA TRANSFERS
* 
*         8. TFF08 - VARIABLE LENGTH DATA TRANSFERS 
* 
*         9. TFF09 - RANDOM DATA TRANSFERS
* 
*        10. TFF10 - RANDOM DATA TRANSFERS - WITH INTERRUPTS
* 
*        11. TFF11 - PPU/2550 DATA TRANSFERS WITH CHAINING
* 
*        12. TFF12 - BUFFER FLAG BITS TEST
* 
*        13. TFF13 - CHAIN ADDRESS ZERO TEST
* 
*         PART 2 - SPECIAL PURPOSE MODULES
* 
*         1. TFF30 - DEADMAN TIMER TEST  (AL = 21 REQUIRED) 
* 
*         PART 3 - UTILITY MODULES
* 
*         1. TFF40 - UPLINE DUMP UTILITY
* 
*** 3.1.1 ERROR PROCESSING
**  3.1.1 ERROR PROCESSING
*         ----------------
* 
*         ALL PRODUCT OVERLAY DETECTED ERRORS AND ALL ERRORS
*         DETECTED BY THE TFF MODULES WILL BE DISPLAYED ON THE
*         MALET PPU DISPLAY AND THE MALET OUTPUT FILE.
* 
*** 3.1.2 DESCRIPTION DETAILED
**  3.1.2 DESCRIPTION DETAILED
*         --------------------
* 
***       OPERATIONAL PROCEDURE 
**        OPERATIONAL PROCEDURE 
*         --------------------- 
* 
*         THIS TEST USES STANDARD MALET OPERATING PROCEDURES AS 
*         DESCRIBED IN THE CML 3.X REFERENCE MANUAL.
* 
***       LOADING PROCEDURE 
**        LOADING PROCEDURE 
*         ----------------- 
* 
*         THE TEST IS LOADED FROM THE MALET RANDOM FILE (RFILE).
*         THE 2550 IS DOWNLINE LOADED BY MODULES 6 THRU 13 WITH 
*         SMALL PROGRAMS CONTAINED WITHIN THE MALET MODULES.  NO
*         CONTROLWARE/FIRMWARE IS REQUIRED IN THE 2550. 
* 
***       RUNNING PROCEDURE 
**        RUNNING PROCEDURE 
*         ----------------- 
* 
*         TFF IS RUN WITH THE STANDARD MALET RUN DIRECTIVE. 
* 
*         RUN TFF      TO EXECUTE THE DIAGNOSTIC PASS OF THE TEST 
*         RUN TFF(XX)  TO EXECUTE ONLY MODULE XX
*         RUN TFFXX    TO EXECUTE A DIAGNOSTIC PASS STARTING WITH 
*                      MODULE XX
* 
***       PARAMETERS
**        PARAMETERS
*         ----------
* 
*         PARAMETER REGISTERS ARE SET BY THE USER WITH THE *PARAM*
*         DIRECTIVE.  ANY REGISTER NOT SET WILL DEFAULT TO 0000.
*         REGISTER P0 AND P1 MUST BE SET BY THE USER TO DEFINE
*         THE 2550 MEMORY SIZE AND THE EXISTENCE OF A ALTERNATE COUPLER.
* 
*         PARAMETER REGISTER SETTINGS 
* 
*         P0 - 2550 MEMORY SIZE 
* 
*              P0 = 16 = 16K OF MEMORY
*                 = 32 = 32K OF MEMORY
*                 = 48 = 48K OF MEMORY
*                 = 65 = 65K OF MEMORY
*                 = 80 = 80K OF MEMORY
*                 = 96 = 96K OF MEMORY
*                 = 112 = 112K OF MEMORY
*                 = 131 = 131K OF MEMORY
* 
* 
*         P1 - RUN TEST ON ALTERNATE(SECONDARY) COUPLER 
* 
*             P1 .EQ. 0 - TEST PRIMARY COUPLER
*                .NE. 0 - TEST ALTERNATE COUPLER
* 
*             - NOTE - THE PROPER CHANNEL MUST BE SPECIFIED ON THE
*                      MALET ASSIGN DIRECTIVE OR FALSE ERRORS MAY 
*                      OCCUR (CHANNEL SPECIFIED IS NOT CABLED TO
*                      COUPLER BEING TESTED). 
* 
* 
*         P7 - NUMBER OF WORDS TO UPLINE DUMP REQUIRED BY MODULE 40 
* 
*             P7 CAN RANGE FROM 1 TO 114 DECIMAL
* 
* 
*         P8 - UPPER 9 ADDRESS BITS FOR UPLINE DUMP 
* 
*             P8 = XXX = UPPER 9 ADDRESS BITS IN OCTAL
* 
* 
*         P9 - LOWER 8 ADDRESS BITS FOR UPLINE DUMP 
* 
*             P9 = XXX = LOWER 8 ADDRESS BITS IN OCTAL
* 
* 
***       MESSAGES
**        MESSAGES
*         --------
* 
* 
***       NORMAL MESSAGES 
**        NORMAL MESSAGES 
*         --------------- 
* 
*         THE NORMAL MESSAGES FOR THIS TEST CONSIST OF THE MODULE 
*         RUNNING MESSAGE. THIS MESSAGE WILL APPEAR AT THE CONTROL
*         POINT ON THE SYSTEM DISPLAY AND ON LINE 50 OF THE MALET PPU 
*         DISPLAY.  THE RUNNING MESSAGE IS ALSO SENT TO THE OUTPUT
*         FILE.  THE RUNNING MESSAGE HAS THE FOLLOWING FORMAT.
* 
*         TFFXX - MODULE DESCRIPTION
* 
*         A TYPICAL RUNNING MESSAGE IS: 
* 
*         TFF02 - 2550 MEMORY ADDRESS REGISTER 0 TEST 
* 
*         MODULES TFF04 AND TFF05 WILL DISPLAY A MESSAGE AT THE 
*         MALET CONTROL POINT ON THE SYSTEM B DISPLAY TO INDICATE 
*         WHAT BLOCK OF ADDRESSES IS CURRENTLY UNDER TEST.  THESE 
*         MESSAGES HAVE THE FOLLOWING FORMAT. 
* 
*         TFF04 - READING ADDRESS XXXXX 
* 
*         TFF04 - WRITING ADDRESS XXXXX 
* 
* 
***       ERROR MESSAGES
**        ERROR MESSAGES
*         --------------
* 
*         TYPE 1 - I/O ABORTS 
* 
*         ANY I/O COMMAND (FUNC,INPUT,OUTPUT, OR STATUS) THAT 
*         ABORTS WILL DISPLAY AND PRINT A TWO LINE MESSAGE THAT 
*         DESCRIBES THE COMMAND THAT ABORTED AND THE REASON FOR 
*         THE ABORT.  THE FOLLOWING IS A TYPICAL EXAMPLE. 
* 
*         TFF04 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010)
*          E4024 L055 NO INACTIVE ON EQUIP FUNC 
* 
*         THE FOLLOWING LIST DESCRIBES ALL OF THE POSSIBLE FORMS
*         FOR LINE 1 OF THE ABOVE MESSAGE.  LINE 2 IS THE LOW LEVEL 
*         PRODUCT OVERLAY ERROR MESSAGE A DESCRIPTION OF WHICH CAN BE 
*         FOUND IN THE MALET REFERENCE MANUAL PUB NO. 60456020. 
* 
*         1. TFFXX - ABORT ON CLEAR COUPLER FUNCTION     (E400) 
*         2. TFFXX - ABORT ON CLEAR NPU FUNCTION         (E200) 
*         3. TFFXX - ABORT ON STOP CP FUNCTION           (E100) 
*         4. TFFXX - ABORT ON START CP FUNCTION          (E040) 
*         5. TFFXX - ABORT ON INPUT MEMORY ADDRESS 0 FUNC(E000) 
*         6. TFFXX - ABORT ON INPUT MEMORY ADDRESS 1 FUNC(E001) 
*         7. TFFXX - ABORT ON INPUT DATA FUNCTION        (E003) 
*         8. TFFXX - ABORT ON INPUT NPU STATUS FUNCTION  (E004) 
*         9. TFFXX - ABORT ON INPUT COUPLER STATUS FUNC  (E005) 
*        10. TFFXX - ABORT ON READ ORDER WORD FUNCTION   (E006) 
*        11. TFFXX - ABORT ON INPUT PROGRAM FUNCTION     (E007) 
*        12. TFFXX - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010) 
*        13. TFFXX - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011) 
*        14. TFFXX - ABORT ON OUTPUT DATA FUNCTION       (E014) 
*        15. TFFXX - ABORT ON OUTPUT PROGRAM FUNCTION    (E015) 
*        16. TFFXX - ABORT ON LOAD ORDER WORD FUNCTION   (E016) 
*        17. TFFXX - ABORT ON .IN. OR .STATUS. COMMAND
*        18. TFFXX - ABORT ON .OUT. COMMAND 
* 
* 
*         TYPE 2 - WORDS TRANSMITTED ERRORS 
* 
*         WORDS TRANSMITTED ERRORS ARE REPORTED WHEN THE
*         NUMBER OF WORDS TRANSFERRED ACROSS THE DATA CHANNEL 
*         DOES NOT MATCH THE EXPECTED NUMBER OF WORDS TRANSFERRED.
* 
*         TFFXX - OUTPUT WT ERROR ACT = *OCT EXP = *OCT 
*         TFFXX - INPUT WT ERROR ACT = *OCT EXP = *OCT
* 
* 
*         TYPE 3 - DATA ERRORS
*         DATA ERRORS IN MODULES 1 THRU 4 ARE REPORTED
*         WITH A 1 LINE MESSAGE TO THE MALET PPU DISPLAY
*         AND THE OUTPUT FILE.  THESE MESSAGES HAVE THE 
*         FOLLOWING FORMAT. 
* 
*         TFF01 ORDER WORD ERR- EXP=*OCT ACT=*OCT PASS=*DEC 
*         TFF02 MAR 0 ERROR- EXP=*OCT ACT=*OCT PASS=*DEC
*         TFF03 MAR 1 ERROR- EXP=*OCT ACT=*OCT PASS=*DEC
*         TFF04 ADDR ERR-ADD=*HE*H EXP=*H*H HEX ACT=*H*H HEX
* 
*         IN ADDITION TO THE ABOVE ERRORS MODULE 5 WILL POST
*         A ONE LINE MESSAGE (UP TO 40 DECIMAL LINES) FOR 
*         EACH ERROR ENCOUNTERED IN THE 400B WORD INPUT BUFFER. 
*         THIS MESSAGE WILL HAVE THE FOLLOWING FORMAT.
* 
*         TFF05 DATA ERR-ADD=*HE*H EXP=*H*H HEX ACT=*H*H HEX
* 
* 
*         DATA ERRORS ARE REPORTED WITH A TWO LINE MESSAGE TO 
*         THE MALET PPU DISPLAY AND THE OUTPUT FILE.  THESE 
*         MESSAGES HAVE THE FOLLOWING FORMAT. 
* 
*         DATA ERROR - ACT=*H*HHEX EXP=*H*HHEX DIFF=*H*HHEX 
*         TFFXX - WC = *OCT PASS = *DEC BAD BYTE = *OCT 
* 
*                              - NOTE - 
*         IT IS POSSIBLE TO GET A DATA ERROR WHERE THE ACTUAL DATA
*         DISPLAYED IS EQUAL TO THE EXPECTED DATA AND THE DIFFERENCE
*         IS EQUAL TO ZERO.  THIS CAN OCCUR IF BITS 8 THRU 11 SHOULD
*         FAIL WHEN INPUTING FROM THE NPU.  THE DATA ERROR MESSAGE
*         DISPLAYS THE ACTUAL,EXPECTED, AND DIFFERENCE IN HEX FORMAT
*         WHICH USES ONLY THE LOWER 8 BITS OF A 12 BIT WORD.  HOWEVER,
*         WHEN THE INPUT BUFFER IS COMPARED TO THE OUTPUT BUFFER ALL
*         12 BITS ARE CHECKED WHICH LEADS TO THE ABOVE MENTIONED
*         ERROR POSSIBILITY.  THIS TYPE OF FAILURE CAN OCCUR IN MODULES 
*         4 THRU 13.
* 
*         TYPE 4 - 2550 TIMEOUT ERRORS
* 
*         TIMEOUT ERRORS ARE REPORTED WHEN THE 2550 FAILS 
*         TO RESPOND WITH THE CORRECT BIT SET IN COUPLER
*         STATUS WITHIN A CERTAIN TIME PERIOD.  THE ERROR 
*         REPORTING HAS THE FOLLOWING FORMAT. 
* 
*         TFFXX - NPU NOT RESPONDING
*         TFFXX - LAST COUPLER STATUS = *OCT  PASS = *DEC 
*         BITX------BITX DESCRIPTION
*         BITY------BITY DESCRIPTION
*         CUMULATIVE COUPLER STATUS FROM PPU = *OCT 
*         BITX------BITX DESCRIPTION
*         BITY------BITY DESCRIPTION
*         CUMULATIVE COUPLER STATUS FROM NPU = *OCT 
*         BITX------BITX DESCRIPTION
*         BITY------BITY DESCRIPTION
* 
*         BITX AND BITY ETC. ARE BITS THAT ARE SET IN COUPLER 
*         STATUS AS SEEN BY THE PPU AND THE NPU.
* 
* 
*         TYPE 5 - DEADMAN TIMER ERRORS 
* 
*         MODULE TFF30 WILL REPORT THE FOLLOWING ERRORS 
*         IF THE DEADMAN TIMER IS NOT WITHIN SPECS. 
* 
*         TFF30 - DEADMAN TIMER DID NOT EXPIRE IN 4 SECONDS 
*         TFF30 - DEADMAN TIMER EXPIRED IN LESS THAN 2 SECS 
*         TFF30 - COUPLER STATUS ERR  EXP = 2000 ACT = *OCT 
* 
***       MODULE DESCRIPTIONS 
**        MODULE DESRIPTIONS
*         ------------------- 
* 
   MODULE TFF01,6000(64),LOCK  *CHANNEL/COUPLER TEST
***       TFF01 - 2550 CHANNEL/COUPLER TEST 
**        TFF01 - 2550 CHANNEL/COUPLER TEST 
*         --------------------------------- 
* 
*   OVERVIEW -
* 
*         TFF01 VERIFIES BASIC COMMUNICATIONS WITH THE 2550 USING THE 
*         LOAD ORDER WORD/READ ORDER WORD FUNCTIONS.  FOUR FIXED DATA 
*         PATTERNS ARE USED TO PERFORM THE TEST - 7777, 0000, 2525 AND
*         5252.  EACH PATTERN IS TESTED IN ORDER, THEN REPEATED UNTIL 
*         EACH PATTERN HAS BEEN TESTED 100 DECIMAL TIMES. 
* 
*         TFF01 SUPPORTS REPEAT CONDITION, REPEAT MODULE AND SCOPING
*         LOOPS.
* 
*   DESCRIPTION - 
* 
*         1. POST RUNNING MESSAGE.
*         2. SET WORD COUNT TO 1 AND LOOP COUNT TO 100D.
*         3. RESERVE THE I/O CHANNEL. 
*         4. SET BEGINNING ADDRESS TO POINT TO CURRENT DATA PATTERN.
*         5. FUNCTION 200B, CLEAR NPU.  GO TO STEP 16 IF THIS 
*            FUNCTION ABORTS. 
*         6. FUNCTION 400B, CLEAR COUPLER.  GO TO STEP 16 IF THIS 
*            FUNCTION ABORTS. 
*         7. FUNCTION 16B, LOAD ORDER WORD.  GO TO STEP 16 IF THIS
*            FUNCTION ABORTS. 
*         8. OUTPUT THE CURRENT DATA PATTERN WORD.  GO TO STEP 16 IF
*            THIS COMMAND ABORTS. 
*         9. FUNCTION 6B, READ ORDER WORD.  GO TO STEP 16 IF THIS 
*            FUNCTION ABORTS. 
*        10. INPUT ONE WORD.  GO TO STEP 16 IF THIS COMMAND ABORTS. 
*        11. GO TO STEP 17 IF THE ORDER WORD THAT WAS INPUT DOES NOT
*            COMPARE WITH THE ORDER WORD OUTPUT.
*        12. GO TO STEP 3 IF REPEAT CONDITION IS SELECTED TO LOCK ON
*            THE CURRENT DATA PATTERN.
*        13. REPEAT STEPS 3 THRU 12 FOR ALL FOUR DATA PATTERNS. 
*        14. RESET THE DATA PATTERN COUNTER AND REPEAT STEPS 3 THRU 13
*            100D TIMES.
*        15. RESET THE PASS COUNTER AND GO TO STEP 3 IF REPEAT MODULE 
*            OR REPEAT CONDITION IS SELECTED.  OTHERWISE, EXIT. 
*        16. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            CAUSE OF THE ABORT.  HALT, THEN GO TO STEP 3.
*        17. WE ARRIVE AT THIS STEP IF THE INPUT/OUTPUT ORDER WORDS DO
*            NOT COMPARE.  POST AN ERROR MESSAGE THAT DEFINES THE 
*            EXPECTED ORDER WORD, THE ACTUAL WORD READ AND THE CURRENT
*            PASS COUNT.  HALT, THEN GO TO STEP 3 IF REPEAT CONDITION 
*            IS SELECTED TO LOCK ON THE CURRENT DATA PATTERN. OTHERWISE 
*            GO TO STEP 13 TO TEST THE NEXT DATA PATTERN. 
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. TFF01 - ABORT ON CLEAR COUPLER FUNCTION   (E400) - 
*         3. TFF01 - ABORT ON LOAD ORDER WORD FUNCTION (E016) - 
*         4. TFF01 - ABORT ON READ ORDER WORD FUNCTION (E006) - 
*         5. TFF01 - ABORT ON CLEAR NPU FUNCTION       (E200) - 
*         6. TFF01 - ABORT ON .OUT. COMMAND - 
*         7. TFF01 - ABORT ON .IN. COMMAND -
*         8. TFF01 ORDER WORD ERR- EXP=XXXX ACT=XXXX PASS=XXXX
* 
*   REGISTER USAGE -
* 
*         B0 = CURRENT PASS COUNT 
*         B1 = MAXIMUM PASS COUNT 
*         B2 = DATA PATTERN COUNTER 
*         B5 = MESSAGE NUMBER TO POST IN CASE OF AN ABORT.
*         B6 = LOOP COUNTER FOR SCOPING LOOPS DISPLAY 
*         B7 = ERROR COUNTER
* 
*   MODULES CALLED -
* 
*         NONE
* 
 1 FORMAT TFF01 - 2550 CHANNEL/COUPLER TEST 
 2 FORMAT TFF01 ORDER WORD ERR- EXP=*OCT ACT=*OCT PASS=*DEC 
 3 FORMAT TFF01 - ABORT ON CLEAR COUPLER FUNCTION   (E400) -
 4 FORMAT TFF01 - ABORT ON LOAD ORDER WORD FUNCTION (E016) -
 5 FORMAT TFF01 - ABORT ON READ ORDER WORD FUNCTION (E006) -
 6 FORMAT TFF01 - ABORT ON .OUT. COMMAND -
 7 FORMAT TFF01 - ABORT ON .IN. COMMAND - 
10 FORMAT TFF01 - LOOPS=*DEC ERRS=*DEC
11 FORMAT TFF01 ERROR(S) IN MODULE = *DEC 
12 FORMAT TFF TERMINATED - BASIC 2550 COMMUNICATIONS ERRORS 
13 FORMAT --------------------------------------------------
14 FORMAT TFF01 - ABORT ON CLEAR NPU FUNCTION       (E200) -
   DATA (OB(0),CON)7777,0000,2525,5252
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
   WC = 1                    *SET WORD COUNT REGISTER 
   B1 = 100D                 *SET TERMINATING PASS COUNT
21 RES                       *RESERVE THE I/O CHANNEL 
   BA = B2                   *SET POINTER TO DATA PATTERN 
   B5 = 14
   FUNC 200B, ABT 40         *CLEAR NPU 
   B5 = 3 
   FUNC 400B, ABT 40         *CLEAR COUPLER 
   B5 = 4 
   FUNC 16B, ABT 40          *LOAD ORDER WORD 
   B5 = 6 
   OUT, ABT 40               *OUTPUT THE CURRENT ORDER WORD 
   B5 = 5 
   FUNC 6B, ABT 40           *READ ORDER WORD 
   B5 = 7 
   IN, ABT 40                *INPUT THE ORDER WORD
   IF(IB(BA).NE.OB(BA)) GOTO 30  *IF INPUT/OUTPUT MISMATCH
   IF(ES.AND.RC.EQ.0) GOTO 22    *IF NOT REPEAT CONDITION 
   IF(ES.AND.SL.EQ.0) GOTO 21    *IF NOT SCOPING
   B6 = B6 + 1                   *BUMP LOOP COUNTER 
   MSG 10(B6,B7) TO DISPLAY      *POST SCOPING LOOP MESSAGE 
   GOTO 21
22 GOTO 21 WHILE (B2+1.NE.4)     *REPEAT ALL PATTERNS 
   B2 = 0                        *RESET PATTERN COUNTER 
   GOTO 21 WHILE (B0+1.NE.B1)    *REPEAT 100D TIMES 
   B0 = 0                        *RESET LOOP COUNTER
   IF(ES.AND.CM.EQ.0) GOTO 23    *IF NOT REPEAT COND/MODULE 
   IF(ES.AND.SL.EQ.0) GOTO 21    *IF NOT SCOPING
   B6 = B6 + 1                   *BUMP LOOP COUNTER 
   MSG 10(B6,B7) TO DISPLAY      *POST SCOPING LOOP MESSAGE 
   GOTO 21
23 IF(B7.EQ.0) GOTO 24           *IF NO ERRORS IN MODULE
   MSG 11(B7) TO DAYFILE         *REPORT ERRORS TO DAYFILE
24 EXIT 
* 
*-------- DATA ERROR PROCESSOR
* 
30 MSG 2(OB(BA),IB(BA),B0) TO LINE 1
   B7 = B7 + 1               *BUMP ERROR COUNTER
   IF(ES.AND.SL.EQ.0) GOTO 31   *IF NOT SCOPING 
   MSG 10(B6,B7) TO DISPLAY 
   GOTO 32
31 PICTURE
   HALT 
   MSG 13 TO PRINT
   BLANK
   MSG 1 TO DISPLAY 
32 IF(ES.AND.RC.NE.0) GOTO 21    *IF REPEAT CONDITION 
   GOTO 22                       *TEST NEXT PATTERN 
* 
*-------- ABORT PROCESSOR 
* 
40 MSG B5 TO LINE 1          *INDICATE THE COMMAND ABORTED
   MSG EM TO LINE 2          *POST THE REASON FOR THE ABORT 
   B7 = B7 + 1               *BUMP ERROR COUNTER
   IF(ES.AND.SL.EQ.0) GOTO 41   *IF NOT SCOPING 
   MSG 10(B6,B7) TO DISPLAY 
   GOTO 21
41 PICTURE
   HALT 
   MSG 13 TO PRINT
   BLANK
   MSG 1 TO DISPLAY 
   IF(B7.LT.5) GOTO 21       *IF LESS THAN 5 ERRORS 
   MSG 12 TO LINE 3 
   MSG 12 TO PRINT           *REPORT ERRORS AND TERMINATE 
   MSG 11(B7) TO DAYFILE
   END 20 
COMPILE   - TFF01 - 
   MODULE TFF02,6000(64),LOCK  *MAR 0 TEST
***       TFF02 - 2550 MEMROY ADDRESS REGISTER 0 TEST 
**        TFF02 - 2550 MEMORY ADDRESS REGISTER 0 TEST 
*         ------------------------------------------- 
* 
*   OVERVIEW -
* 
*         TFF02 VERIFIES BASIC COMMUNICATIONS WITH THE 2550 MEMORY
*         ADDRESS REGISTER 0 USING THE LOAD MEMORY ADDRESS 0 AND
*         INPUT MEMORY ADDRESS 0 FUNCTIONS.  FOUR FIXED DATA PATTERNS 
*         ARE USED TO PERFORM THE TEST - 0777, 0000, 0525 AND 0252. 
*         EACH PATTERN IS TESTED IN ORDER, THEN REPEATED UNTIL EACH 
*         PATTERN HAS BEEN TESTED 100 DECIMAL TIMES.
* 
*         TFF02 SUPPORTS REPEAT CONDITION, REPEAT MODULE AND SCOPING
*         LOOPS.
* 
*   DESCRIPTION - 
* 
*         1. POST RUNNING MESSAGE.
*         2. SET WORD COUNT TO 1 AND LOOP COUNT TO 100D.
*         3. RESERVE THE I/O CHANNEL. 
*         4. SET BEGINNING ADDRESS TO POINT TO CURRENT DATA PATTERN.
*         5. FUNCTION 400B, CLEAR COUPLER.  GO TO STEP 15 IF THIS 
*            FUNCTION ABORTS. 
*         6. FUNCTION 10B, LOAD MEMORY ADDRESS 0.  GO TO STEP 15 IF 
*            THIS FUNCTION ABORTS.
*         7. OUTPUT THE CURRENT DATA PATTERN WORD.  GO TO STEP 15 IF
*            THIS COMMAND ABORTS. 
*         8. FUNCTION 0B, INPUT MEMORY ADDRESS 0.  GO TO STEP 15 IF 
*            THIS FUNCTION ABORTS.
*         9. INPUT ONE WORD.  GO TO STEP 15 IF THIS COMMAND ABORTS. 
*        10. GO TO STEP 16 IF THE MEMORY ADDRESS THAT WAS INPUT DOES
*            NOT COMPARE WITH THE MEMORY ADDRESS OUTPUT.
*        11. GO TO STEP 3 IF REPEAT CONDITION IS SELECTED TO LOCK ON
*            THE CURRENT DATA PATTERN.
*        12. REPEAT STEPS 3 THRU 11 FOR ALL FOUR DATA PATTERNS. 
*        13. RESET THE DATA PATTERN COUNTER AND REPEAT STEPS 3 THRU 12
*            100D TIMES.
*        14. RESET THE PASS COUNTER AND GO TO STEP 3 IF REPEAT MODULE 
*            OR REPEAT CONDITION IS SELECTED.  OTHERWISE, EXIT. 
*        15. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            CAUSE OF THE ABORT.  HALT, THEN GO TO STEP 3.
*        16. WE ARRIVE AT THIS STEP IF THE INPUT/OUTPUT MEMORY ADDRESS
*            DOES NOT COMPARE.  POST AN ERROR MESSAGE THAT DEFINES THE
*            EXPECTED MEMORY ADDRESS, THE ACTUAL ADDRESS READ AND THE 
*            PASS COUNT.  HALT, THEN GO TO STEP 3 IF REPEAT CONDITION 
*            IS SELECTED TO LOCK ON THE CURRENT DATA PATTERN. OTHERWISE 
*            GO TO STEP 12 TO TEST THE NEXT DATA PATTERN. 
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. TFF02 - ABORT ON CLEAR COUPLER FUNCTION     (E400) 
*         3. TFF02 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010) 
*         4. TFF02 - ABORT ON INPUT MEMORY ADDRESS 0 FUNC(E000) 
*         5. TFF02 - ABORT ON .OUT. COMMAND - 
*         6. TFF02 - ABORT ON .IN. COMMAND -
*         7. TFF02 MAR 0 ERROR - EXP=XXXX ACT=XXXX PASS=XXXX
* 
*   REGISTER USAGE -
* 
*         B0 = CURRENT PASS COUNT 
*         B1 = MAXIMUM PASS COUNT 
*         B2 = DATA PATTERN COUNTER 
*         B5 = MESSAGE NUMBER TO POST IN CASE OF AN ABORT.
*         B6 = LOOP COUNTER FOR SCOPING LOOPS DISPLAY 
*         B7 = ERROR COUNTER
* 
*   MODULES CALLED -
* 
*         NONE
* 
 1 FORMAT TFF02 - 2550 MEMORY ADDRESS REGISTER 0 TEST 
 2 FORMAT TFF02 MAR 0 ERROR- EXP=*OCT ACT=*OCT PASS=*DEC
 3 FORMAT TFF02 - ABORT ON CLEAR COUPLER FUNCTION     (E400)
 4 FORMAT TFF02 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010)
 5 FORMAT TFF02 - ABORT ON INPUT MEMORY ADDRESS 0 FUNC(E000)
 6 FORMAT TFF02 - ABORT ON .OUT. COMMAND -
 7 FORMAT TFF02 - ABORT ON .IN. COMMAND - 
10 FORMAT TFF02 - LOOPS=*DEC ERRS=*DEC
11 FORMAT TFF02 ERROR(S) IN MODULE = *DEC 
12 FORMAT TFF TERMINATED - BASIC 2550 COMMUNICATIONS ERRORS 
13 FORMAT --------------------------------------------------
   DATA (OB(0),CON)0777,0000,0525,0252
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
   WC = 1                    *SET WORD COUNT REGISTER 
   B1 = 100D                 *SET TERMINATING PASS COUNT
21 RES                       *RESERVE THE I/O CHANNEL 
   BA = B2                   *SET POINTER TO DATA PATTERN 
   B5 = 3 
   FUNC 400B, ABT 40         *CLEAR COUPLER 
   B5 = 4 
   FUNC 10B, ABT 40          *LOAD MEMORY ADDRESS 0 
   B5 = 6 
   OUT, ABT 40               *OUTPUT CURRENT DATA PATTERN 
   B5 = 5 
   FUNC 0B, ABT 40           *INPUT MEMORY ADDRESS 0
   B5 = 7 
   IN, ABT 40                *INPUT MEMORY ADDRESS 0 DATA 
   IF(IB(BA).AND.777.NE.OB(BA)) GOTO 30   *IF I/O MISMATCH
   IF(ES.AND.RC.EQ.0) GOTO 22    *IF NOT REPEAT CONDITION 
   IF(ES.AND.SL.EQ.0) GOTO 21    *IF NOT SCOPING
   B6 = B6 + 1                   *BUMP LOOP COUNTER 
   MSG 10(B6,B7) TO DISPLAY      *POST SCOPING LOOP MESSAGE 
   GOTO 21
22 GOTO 21 WHILE (B2+1.NE.4)     *REPEAT ALL PATTERNS 
   B2 = 0                        *RESET PATTERN COUNTER 
   GOTO 21 WHILE (B0+1.NE.B1)    *REPEAT 100D TIMES 
   B0 = 0                        *RESET LOOP COUNTER
   IF(ES.AND.CM.EQ.0) GOTO 23    *IF NOT REPEAT COND/MODULE 
   IF(ES.AND.SL.EQ.0) GOTO 21    *IF NOT SCOPING
   B6 = B6 + 1                   *BUMP LOOP COUNTER 
   MSG 10(B6,B7) TO DISPLAY      *POST SCOPING LOOP MESSAGE 
   GOTO 21
23 IF(B7.EQ.0) GOTO 24           *IF NO ERRORS IN MODULE
   MSG 11(B7) TO DAYFILE         *REPORT ERRORS TO DAYFILE
24 EXIT 
* 
*-------- DATA ERROR PROCESSOR
* 
30 MSG 2(OB(BA),IB(BA),B0) TO LINE 1
   B7 = B7 + 1               *BUMP ERROR COUNTER
   IF(ES.AND.SL.EQ.0) GOTO 31   *IF NOT SCOPING 
   MSG 10(B6,B7) TO DISPLAY 
   GOTO 32
31 PICTURE
   HALT 
   MSG 13 TO PRINT
   BLANK
   MSG 1 TO DISPLAY 
32 IF(ES.AND.RC.NE.0) GOTO 21    *IF REPEAT CONDITION 
   GOTO 22                       *TEST NEXT PATTERN 
* 
*-------- ABORT PROCESSOR 
* 
40 MSG B5 TO LINE 1          *INDICATE THE COMMAND ABORTED
   MSG EM TO LINE 2          *POST THE REASON FOR THE ABORT 
   B7 = B7 + 1               *BUMP ERROR COUNTER
   IF(ES.AND.SL.EQ.0) GOTO 41   *IF NOT SCOPING 
   MSG 10(B6,B7) TO DISPLAY 
   GOTO 21
41 PICTURE
   HALT 
   MSG 13 TO PRINT
   BLANK
   MSG 1 TO DISPLAY 
   IF(B7.LT.5) GOTO 21       *IF LESS THAN 5 ERRORS 
   MSG 12 TO LINE 3 
   MSG 12 TO PRINT           *REPORT ERRORS AND TERMINATE 
   MSG 11(B7) TO DAYFILE
   END 20 
COMPILE   - TFF02 - 
   MODULE TFF03,6000(64),LOCK  *MAR 1 TEST
***       TFF03 - 2550 MEMORY ADDRESS REGISTER 1 TEST 
**        TFF03 - 2550 MEMORY ADDRESS REGISTER 1 TEST 
*         ------------------------------------------- 
* 
*   OVERVIEW -
* 
*         TFF03 VERIFIES BASIC COMMUNICATIONS WITH THE 2550 MEMORY
*         ADDRESS REGISTER 1 USING THE LOAD MEMORY ADDRESS 1 AND
*         INPUT MEMORY ADDRESS 1 FUNCTIONS.  FOUR FIXED DATA PATTERNS 
*         ARE USED TO PERFORM THE TEST - 0377, 0000, 0125 AND 0252. 
*         EACH PATTERN IS TESTED IN ORDER, THEN REPEATED UNTIL EACH 
*         PATTERN HAS BEEN TESTED 100 DECIMAL TIMES.
* 
*         TFF03 SUPPORTS REPEAT CONDITION, REPEAT MODULE AND SCOPING
*         LOOPS.
* 
*   DESCRIPTION - 
* 
*         1. POST RUNNING MESSAGE.
*         2. SET WORD COUNT TO 1 AND LOOP COUNT TO 100D.
*         3. RESERVE THE I/O CHANNEL. 
*         4. SET BEGINNING ADDRESS TO POINT TO CURRENT DATA PATTERN.
*         5. FUNCTION 400B, CLEAR COUPLER.  GO TO STEP 15 IF THIS 
*            FUNCTION ABORTS. 
*         6. FUNCTION 11B, LOAD MEMORY ADDRESS 1.  GO TO STEP 15 IF 
*            THIS FUNCTION ABORTS.
*         7. OUTPUT THE CURRENT DATA PATTERN WORD.  GO TO STEP 15 IF
*            THIS COMMAND ABORTS. 
*         8. FUNCTION 1B, INPUT MEMORY ADDRESS 1.  GO TO STEP 15 IF 
*            THIS FUNCTION ABORTS.
*         9. INPUT ONE WORD.  GO TO STEP 15 IF THIS COMMAND ABORTS. 
*        10. GO TO STEP 16 IF THE MEMORY ADDRESS THAT WAS INPUT DOES
*            NOT COMPARE WITH THE MEMORY ADDRESS OUTPUT.
*        11. GO TO STEP 3 IF REPEAT CONDITION IS SELECTED TO LOCK ON
*            THE CURRENT DATA PATTERN.
*        12. REPEAT STEPS 3 THRU 11 FOR ALL FOUR DATA PATTERNS. 
*        13. RESET THE DATA PATTERN COUNTER AND REPEAT STEPS 3 THRU 12
*            100D TIMES.
*        14. RESET THE PASS COUNTER AND GO TO STEP 3 IF REPEAT MODULE 
*            OR REPEAT CONDITION IS SELECTED.  OTHERWISE, EXIT. 
*        15. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            CAUSE OF THE ABORT.  HALT, THEN GO TO STEP 3.
*        16. WE ARRIVE AT THIS STEP IF THE INPUT/OUTPUT MEMORY ADDRESS
*            DOES NOT COMPARE.  POST AN ERROR MESSAGE THAT DEFINES THE
*            EXPECTED MEMORY ADDRESS, THE ACTUAL ADDRESS READ AND THE 
*            PASS COUNT.  HALT, THEN GO TO STEP 3 IF REPEAT CONDITION 
*            IS SELECTED TO LOCK ON THE CURRENT DATA PATTERN. OTHERWISE 
*            GO TO STEP 12 TO TEST THE NEXT DATA PATTERN. 
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. TFF03 - ABORT ON CLEAR COUPLER FUNCTION     (E400) 
*         3. TFF03 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011) 
*         4. TFF03 - ABORT ON INPUT MEMORY ADDRESS 1 FUNC(E001) 
*         5. TFF03 - ABORT ON .OUT. COMMAND - 
*         6. TFF03 - ABORT ON .IN. COMMAND -
*         7. TFF03 MAR 1 ERROR - EXP=XXXX ACT=XXXX PASS=XXXX
* 
*   REGISTER USAGE -
* 
*         B0 = CURRENT PASS COUNT 
*         B1 = MAXIMUM PASS COUNT 
*         B2 = DATA PATTERN COUNTER 
*         B5 = MESSAGE NUMBER TO POST IN CASE OF AN ABORT.
*         B6 = LOOP COUNTER FOR SCOPING LOOPS DISPLAY 
*         B7 = ERROR COUNTER
* 
*   MODULES CALLED -
* 
*         NONE
* 
 1 FORMAT TFF03 - 2550 MEMORY ADDRESS REGISTER 1 TEST 
 2 FORMAT TFF03 MAR 1 ERROR- EXP=*OCT ACT=*OCT PASS=*DEC
 3 FORMAT TFF03 - ABORT ON CLEAR COUPLER FUNCTION     (E400)
 4 FORMAT TFF03 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011)
 5 FORMAT TFF03 - ABORT ON INPUT MEMORY ADDRESS 1 FUNC(E001)
 6 FORMAT TFF03 - ABORT ON .OUT. COMMAND -
 7 FORMAT TFF03 - ABORT ON .IN. COMMAND - 
10 FORMAT TFF03 - LOOPS=*DEC ERRS=*DEC
11 FORMAT TFF03 ERROR(S) IN MODULE = *DEC 
12 FORMAT TFF TERMINATED - BASIC 2550 COMMUNICATIONS ERRORS 
13 FORMAT --------------------------------------------------
   DATA (OB(0),CON)0377,0000,0125,0252
20 MSG 1 TO DISPLAY,PRINT    *POST RUNNING MESSAGE
   WC = 1                    *SET WORD COUNT REGISTER 
   B1 = 100D                 *SET TERMINATING PASS COUNT
21 RES                       *RESERVE THE I/O CHANNEL 
   BA = B2                   *SET POINTER TO DATA PATTERN 
   B5 = 3 
   FUNC 400B, ABT 40         *CLEAR COUPLER 
   B5 = 4 
   FUNC 11B, ABT 40          *LOAD MEMORY ADDRESS 1 
   B5 = 6 
   OUT, ABT 40               *OUTPUT CURRENT DATA PATTERN 
   B5 = 5 
   FUNC 1B, ABT 40           *INPUT MEMORY ADDRESS 1
   B5 = 7 
   IN, ABT 40                *INPUT MEMORY ADDRESS 1 DATA 
   IF(IB(BA).NE.OB(BA)) GOTO 30  *IF INPUT/OUTPUT MISMATCH
   IF(ES.AND.RC.EQ.0) GOTO 22    *IF NOT REPEAT CONDITION 
   IF(ES.AND.SL.EQ.0) GOTO 21    *IF NOT SCOPING
   B6 = B6 + 1                   *BUMP LOOP COUNTER 
   MSG 10(B6,B7) TO DISPLAY      *POST SCOPING LOOP MESSAGE 
   GOTO 21
22 GOTO 21 WHILE (B2+1.NE.4)     *REPEAT ALL PATTERNS 
   B2 = 0                        *RESET PATTERN COUNTER 
   GOTO 21 WHILE (B0+1.NE.B1)    *REPEAT 100D TIMES 
   B0 = 0                        *RESET LOOP COUNTER
   IF(ES.AND.CM.EQ.0) GOTO 23    *IF NOT REPEAT COND/MODULE 
   IF(ES.AND.SL.EQ.0) GOTO 21    *IF NOT SCOPING
   B6 = B6 + 1                   *BUMP LOOP COUNTER 
   MSG 10(B6,B7) TO DISPLAY      *POST SCOPING LOOP MESSAGE 
   GOTO 21
23 IF(B7.EQ.0) GOTO 24           *IF NO ERRORS IN MODULE
   MSG 11(B7) TO DAYFILE         *REPORT ERRORS TO DAYFILE
24 EXIT 
* 
*-------- DATA ERROR PROCESSOR
* 
30 MSG 2(OB(BA),IB(BA),B0) TO LINE 1
   B7 = B7 + 1               *BUMP ERROR COUNTER
   IF(ES.AND.SL.EQ.0) GOTO 31   *IF NOT SCOPING 
   MSG 10(B6,B7) TO DISPLAY 
   GOTO 32
31 PICTURE
   HALT 
   MSG 13 TO PRINT
   BLANK
   MSG 1 TO DISPLAY 
32 IF(ES.AND.RC.NE.0) GOTO 21    *IF REPEAT CONDITION 
   GOTO 22                       *TEST NEXT PATTERN 
* 
*-------- ABORT PROCESSOR 
* 
40 MSG B5 TO LINE 1          *INDICATE THE COMMAND ABORTED
   MSG EM TO LINE 2          *POST THE REASON FOR THE ABORT 
   B7 = B7 + 1               *BUMP ERROR COUNTER
   IF(ES.AND.SL.EQ.0) GOTO 41   *IF NOT SCOPING 
   MSG 10(B6,B7) TO DISPLAY 
   GOTO 21
41 PICTURE
   HALT 
   MSG 13 TO PRINT
   BLANK
   MSG 1 TO DISPLAY 
   IF(B7.LT.5) GOTO 21       *IF LESS THAN 5 ERRORS 
   MSG 12 TO LINE 3 
   MSG 12 TO PRINT           *REPORT ERRORS AND TERMINATE 
   MSG 11(B7) TO DAYFILE
   END 20 
COMPILE   - TFF03 - 
   MODULE TFF04,6000(64),LOCK  *ADDRESSING TEST 
***       TFF04 - 2550 MEMORY ADDRESSING TEST 
**        TFF04 - 2550 MEMORY ADDRESSING TEST 
*         ----------------------------------- 
* 
*   OVERVIEW -
* 
*         TFF04 VERIFIES THE 2550 MEMORY ADDRESSING LOGIC BY
*         USING THE LOAD MEMORY ADDRESS 0 AND LOAD MEMORY 
*         ADDRESS 1 FUNCTIONS TO ADDRESS THE 2550 MEMORY. 
*         THE OUTPUT PROGRAM FUNCTION IS THEN USED TO WRITE 
*         THE ADDRESS.  AFTER ALL MEMORY LOCATIONS HAVE BEEN
*         WRITTEN THE INPUT PROGRAM FUNCTION IS USED TO READ
*         THE MEMORY.  THE CONTENTS OF EACH ADDRESS IS CHECKED
*         TO INSURE THAT IT CONTAINS THE ADDRESS, FOR ADDRESSES 
*         ABOVE 65K (BIT 16 OF ADDRESS SET) THE MEMORY WILL 
*         CONTAIN THE COMPLEMENT OF THE LOWER 16 BITS OF THE
*         ADDRESS.
* 
*   DESCRIPTION - 
* 
*         1. POST RUNNING MESSAGE.
*         2. VALIDATE MEMORY SIZE (P0) AND SET LWA+1 INTO B6. 
*            IF INVALID MEMORY SIZE SPECIFIED IN P0 POST MESSAGE
*            AND EXIT.
*         3. RESERVE THE I/O CHANNEL. 
*         4. SET THE WRITE FLAG.
*         5. FUNCTION 400B, CLEAR COUPLER.  GO TO STEP 34 
*            IF THIS FUNCTION ABORTS. 
*         6. FUNCTION 200B, CLEAR NPU.  GO TO STEP 34 IF
*            THIS FUNCTION ABORTS.
*         7. RESERVE THE I/O CHANNEL, AND POST WRITING ADDRESS
*            MESSAGE TO DISPLAY.
*         8. SET THE OUTPUT BUFFER TO CURRENT ADDRESS.
*         9. FUNCTION 11B, LOAD MEMORY ADDRESS 1.  GO TO STEP 34
*            IF THIS FUNCTION ABORTS. 
*        10. OUTPUT LOWER 8 BITS OF ADDRESS.  GO TO STEP 34 IF THIS 
*            COMMAND ABORTS.
*        11. FUNCTION 10B, LOAD MEMORY ADDRESS 0.  GO TO STEP 34 IF 
*            THIS FUNCTION ABORTS.
*        12. OUTPUT UPPER 9 BITS OF ADDRESS.  GO TO STEP 34 IF THIS 
*            COMMAND ABORTS.
*        13. IF BIT 16 OF ADDRESS IS SET COMPLEMENT DATA IN OUTPUT
*            BUFFER.
*        14. FUNCTION 15B, OUTPUT PROGRAM.  GO TO STEP 34 IF THIS 
*            FUNCTION ABORTS. 
*        15. OUTPUT 2 WORDS (ADDRESS) FROM OUTPUT BUFFER.  GO TO
*            STEP 34 IF THIS COMMAND ABORTS.
*        16. INCREMENT LOWER 8 BITS OF ADDRESS BY 1 AND GO TO STEP 8 IF 
*            LOWER 8 BITS ARE LESS THAN 400B. ELSE GO TO STEP 17. 
*        17. SET LOWER 8 ADDRESS BITS TO ZERO, INCREMENT UPPER 9
*            ADDRESS BITS BY 1. 
*        18. IF UPPER ADDRESS BITS NOT EQUAL TO LWA+1 GO TO STEP 7, 
*            ELSE STEP 19.
*** 
**
*        19. SET UPPER AND LOWER ADDRESS BITS TO ZERO.
*        20. RESERVE THE I/O CHANNEL. 
*        21. CLEAR THE WRITE FLAG, AND POST READING ADDRESS MESSAGE 
*            TO DISPLAY.
*        22. PUT THE CURRENT ADDRESS IN THE OUTPUT BUFFER.
*        23. FUNC 11B, LOAD MEMORY ADDRESS 1.  GO TO STEP 34 IF THIS
*            FUNCTION ABORTS. 
*        24. OUTPUT LOWER 8 BITS OF ADDRESS.  GO TO STEP 34 IF THIS 
*            COMMAND ABORTS.
*        25. FUNCTION 10B, LOAD MEMORY ADDRESS 0.  GO TO STEP 34 IF 
*            THIS FUNCTION ABORTS.
*        26. OUTPUT UPPER 9 BITS OF ADDRESS.  GO TO STEP 34 IF THIS 
*            COMMAND ABORTS.
*        27. IF BIT 16 OF ADDRESS IS SET COMPLEMENT DATA IN OUTPUT
*            BUFFER.
*        28. FUNCTION 7B, INPUT PROGRAM.  GO TO STEP 34 IF THIS 
*            FUNCTION ABORTS. 
*        29. INPUT 2 WORDS TO INPUT BUFFER.  GO TO STEP 34 IF THIS
*            COMMAND ABORTS.
*        30. COMPARE INPUT AND OUTPUT BUFFERS.  GO TO STEP 35 IF A
*            MISCOMPARE OCCURS. 
*        31. INCREMENT LOWER 8 BITS OF ADDRESS BY 1, AND GO TO STEP 
*            22 IF THEIR VALUE IS LESS THAN 400B.  ELSE GO TO STEP 32.
*        32. SET LOWER 8 ADDRESS BITS TO ZERO, INCREMENT UPPER 9
*            ADDRESS BITS BY 1. 
*        33. IF UPPER ADDRESS BITS NOT EQUAL TO LWA+1 GO TO STEP 20,
*            OTHERWISE EXIT.
*        34. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            CAUSE OF THE ABORT.  HALT, THEN GO TO STEP 3 IF THE
*            WRITE FLAG IS SET, ELSE GO TO STEP 20. 
*        35. WE ARRIVE AT THIS STEP IF A ADDRESS COMPARE ERROR HAS
*            BEEN DETECTED.  POST MESSAGES SHOWING ADDRESS AND ACTUAL 
*            AND EXPECTED DATA.  HALT, RESERVE THE I/0 CHANNEL, 
*            THEN GO TO STEP 31.
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. TFF04 ADDR ERR-ADD=XXXXX EXP=XXXX HEX ACT=XXXX HEX 
*         3. TFF04 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010) 
*         4. TFF04 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011) 
*         5. TFF04 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015) 
*         6. TFF04 - ABORT ON INPUT PROGRAM FUNCTION     (E007) 
*         7. TFF04 - ABORT ON .OUT. COMMAND 
*         8. TFF04 - ABORT ON .IN. COMMAND
*         9. TFF04 - ABORT ON CLEAR COUPLER FUNCTION     (E400) 
*        10. TFF04 - ABORT ON CLEAR NPU FUNCTION         (E200) 
*        11. TFF04 NOT EXECUTED ILLEGAL MEMORY SIZE  P0 = *OCT
* 
*   REGISTER USUAGE - 
* 
*         B0 = INDEX FOR MEMORY SIZE - READ/WRITE FLAG
*         B1 = UPPER 9 BITS OF MEMORY ADDRESS 
*         B2 = LOWER 8 BITS OF MEMORY ADDRESS 
*         B3 = 2 - NUMBER OF WORDS TO COMPARE 
*         B5 = MESSAGE NUMBER TO POST IN CASE OF AN ABORT 
*         B6 = UPPER 9 BITS OF HIGHEST ADDRESS TO TEST + 1
*         B7 = ERROR COUNTER
* 
*   MODULES CALLED -
* 
*         NONE
* 
 1 FORMAT TFF04 - 2550 ADDRESSING TEST
 2 FORMAT TFF04 ADDR ERR-ADD=*HE*H EXP=*H*H HEX ACT=*H*H HEX
 3 FORMAT TFF04 - READING ADDRESS *HE*H 
 4 FORMAT TFF04 - WRITING ADDRESS *HE*H 
 5 FORMAT TFF04 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010)
 6 FORMAT TFF04 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011)
 7 FORMAT TFF04 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015)
10 FORMAT TFF04 - ABORT ON INPUT PROGRAM FUNCTION     (E007)
11 FORMAT TFF04 - ABORT ON .OUT. COMMAND
12 FORMAT TFF04 - ABORT ON .IN. COMMAND 
13 FORMAT TFF04 - ABORT ON CLEAR COUPLER FUNCTION     (E400)
14 FORMAT TFF04 - ABORT ON CLEAR NPU FUNCTION         (E200)
15 FORMAT TFF04 NOT EXECUTED ILLEGAL MEMORY SIZE  P0 = *OCT 
16 FORMAT TFF04 - ERROR(S) IN MODULE = *DEC 
17 FORMAT --------------------------------------------------
   DATA(OB(10),CON)16,32,48,65,80,96,112,131
   DATA(OB(20),CON)100,200,300,400,500,600,700,1000 
20 MSG 1 TO DISPLAY,PRINT          *POST RUNNING MESSAGE
21 B0 = 0                          *INITIALIZE REGISTERS
   B1 = 0 
   B2 = 0 
   B3 = 2 
22 IF(P0 .EQ. OB(B0 + 10))GOTO 23  *VALIDATE PARAM P0 
   GOTO 22 WHILE(B0 + 1 .LT. 10)   *LOOP FOR ALL VALUES 
   MSG 15(P0)TO LINE 1             *POST PARAM ERROR MESSAGE
   PICTURE
   B7 = B7 + 1                     *BUMP ERROR COUNTER
   GOTO 46                         *EXIT ON PARAMETER ERROR 
23 B6 = OB(B0 + 20)                *B6 = LWA + 1
24 RES                             *RESERVE THE I/O CHANNEL 
   B0 = 1                          *SET THE WRITE FLAG
   B5 = 13                         *MESSAGE NUMBER IF ABORT 
   FUNC 400B, ABT 60               *CLEAR COUPLER FUNCTION
   B5 = 14                         *MESSAGE NUMBER IF ABORT 
   FUNC 200B ,ABT 60               *CLEAR THE NPU 
30 RES                             *RESERVE THE I/O CHANNEL 
   MSG 4(B1,B2)TO DISPLAY          *WRITING ADDRESS MESSAGE 
32 OB(1) = B1                      *UPPER 9 BITS OF ADDRESS 
   OB(2) = B2                      *LOWER 8 BITS OF ADDRESS 
   GOSUB 50                        *WRITE THE ADDRESS 
   GOTO 32 WHILE (B2 + 1 .NE. 400)  *LOOP FOR 400B ADDRESSES
   B2 = 0                        *CLEAR LOWER 8 ADDRESS BITS
   GOTO 30 WHILE(B1 + 1 .NE. B6)  *LOOP FOR ALL ADDRESSES 
   B1 = 0                    *CLEAR UPPER 9 ADDRESS BITS
   B2 = 0                    *CLEAR LOWER 8 ADDRESS BITS
40 RES                       *RESERVE THE I/O CHANNEL 
   B0 = 0                    *CLEAR THE WRITE FLAG
   MSG 3 (B1,B2) TO DISPLAY  *POST READING ADDRESS MESSAGE
42 OB(1) = B1 .AND. 777      *UPPER 9 ADDRESS BITS
   OB(2) = B2                *LOWER 8 ADDRESS BITS
   GOSUB 54                  *READ THE ADDRESS
   COMPARE IB(1) TO OB(1) FOR B3, ABT 70
44 GOTO 42 WHILE (B2 + 1 .NE. 400)  *LOOP FOR 400B ADDRESSES
   B2 = 0                           *CLEAR LOWER 8 ADDR BITS
   GOTO 40 WHILE(B1 + 1 .NE. B6)    *LOOP FOR ALL ADDRESSES 
46 IF(B7 .EQ. 0)GOTO 47             *IF NO ERRORS IN MODULE 
   MSG 16(B7) TO DAYFILE          *REPORT ERRORS TO DAYFILE 
47 EXIT 
* 
*-------- WRITE SUBROUTINE
* 
50 B5 = 6                           *MESSAGE NUMBER IF ABORT
   FUNC 11B, ABT 60                 *LOAD MEMORY ADDRESS 1
   B5 = 11                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(2), ABT 60   *LOWER BITS OF ADDR 
   B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 10B, ABT 60                 *LOAD MEMORY ADDRESS 0
   B5 = 11                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(1), ABT 60   *UPPER BITS OF ADDR 
   IF(B1 .AND. 400B .EQ. 0)GOTO 52  *IF BIT 16 NOT SET
   OB(1) = OB(1) .XOR. 777          *COMPLEMENT UPPER 9 BITS
   OB(2) = OB(2) .XOR. 377          *COMPLEMENT LOWER 8 BITS
52 B5 = 7                           *MESSAGE NUMBER IF ABORT
   FUNC 15B, ABT 60                 *OUTPUT PROGRAM FUNCTION
   B5 = 11                          *MESSAGE NUMBER IF ABORT
   OUT 2 WORDS FROM OB(1), ABT 60   *OUTPUT DATA(ADDRESS) 
   RETURN 
* 
*-------- READ SUBROUTINE 
* 
54 B5 = 6                           *MESSAGE NUMBER IF ABORT
   FUNC 11B, ABT 60                 *LOAD MEMORY ADDRESS 1
   B5 = 11                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(2), ABT 60   *LOWER BITS OF ADDR 
   B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 10B, ABT 60                 *LOAD MEMORY ADDRESS 0
   B5 = 11                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(1), ABT 60   *UPPER BITS OF ADDR 
   IF(B1 .AND. 400B .EQ. 0)GOTO 56  *IF BIT 16 NOT SET
   OB(1) = OB(1) .XOR. 777          *COMPLEMENT UPPER 9 BITS
   OB(2) = OB(2) .XOR. 377          *COMPLEMENT LOWER 8 BITS
56 B5 = 10                          *MESSAGE NUMBER IF ABORT
   FUNC 7B, ABT 60                  *INPUT PROGRAM FUNCTION 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   IN 2 WORDS TO IB(1), ABT 60      *INPUT DATA(ADDRESS)
   RETURN 
* 
*-------- ABORT PROCESSOR 
* 
60 ENDSUB                      *END ALL ACTIVE SUBROUTINES
   MSG B5 TO LINE 1            *INDICATE THE COMMAND ABORTED
   MSG EM TO LINE 2            *POST REASON FOR THE ABORT 
   B7 = B7 + 1                 *BUMP ERROR COUNTER
   PICTURE
   HALT 
   MSG 17 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 46        *IF MORE THAN 5 ERRORS 
   MSG 1 TO DISPLAY            *DISPLAY RUNNING MESSAGE 
   IF(B0 .NE. 0)GOTO 24        *IF WRITE FLAG SET 
   GOTO 40                     *IF WRITE FLAG CLEAR 
* 
*-------- ADDRESS ERROR PROCESSOR 
* 
70 MSG 2(B1,B2,OB(1),OB(2),IB(1),IB(2))TO LINE 1
   B7 = B7 + 1                 *BUMP ERROR COUNTER
   B3 = 2                      *RESET WORDS TO COMPARE
   PICTURE
   HALT 
   MSG 17 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 46        *IF MORE THAN 5 ERRORS 
   MSG 1 TO DISPLAY            *POST RUNNING MESSAGE
   RES                         *RESERVE THE I/O CHANNEL 
   GOTO 44                     *CONTINUE READING
   END 20 
COMPILE   - TFF04 - 
   MODULE TFF05,6000(64),LOCK  *DATA PATTERNS TEST
***       TFF05 - 2550 MEMORY DATA PATTERNS TEST
**        TFF05 - 2550 MEMORY DATA PATTERNS TEST
*         --------------------------------------
* 
*   OVERVIEW -
* 
*         TFF05 VERIFIES THE 2550 MEMORY LOGIC BY 
*         USING THE LOAD MEMORY ADDRESS 0 AND LOAD MEMORY 
*         ADDRESS 1 FUNCTIONS TO ADDRESS THE 2550 MEMORY. 
*         THE OUTPUT PROGRAM FUNCTION IS THEN USED TO WRITE 
*         THE ADDRESS.  AFTER ALL MEMORY LOCATIONS HAVE BEEN
*         WRITTEN THE INPUT PROGRAM FUNCTION IS USED TO READ
*         THE MEMORY.  THE CONTENTS OF EACH ADDRESS IS CHECKED
*         TO INSURE THAT IT CONTAINS THE PROPER DATA PATTERN. 
*         FOUR FIXED DATA PATTERNS ARE USED TO PERFORM THE
*         TEST - 7777, 0000, AAAA, AND 5555 HEX.
* 
*   DESCRIPTION - 
* 
*         1. POST RUNNING MESSAGE.
*         2. VALIDATE MEMORY SIZE (P0) AND SET LWA+1 INTO B6. 
*            IF INVALID MEMORY SIZE SPECIFIED IN P0 POST MESSAGE
*            AND EXIT.
*         3. RESERVE THE I/O CHANNEL. 
*         4. SET THE WRITE FLAG.
*         5. FUNCTION 400B, CLEAR COUPLER.  GO TO STEP 34 
*            IF THIS FUNCTION ABORTS. 
*         6. FUNCTION 200B, CLEAR NPU.  GO TO STEP 34 IF
*            THIS FUNCTION ABORTS.
*         7. PUT THE DATA PATTERN INTO THE OUTPUT BUFFER. 
*         8. RESERVE THE I/O CHANNEL, AND POST WRITING ADDRESS
*            MESSAGE TO DISPLAY.
*         9. SET THE OUTPUT BUFFER TO CURRENT ADDRESS.
*        10. FUNCTION 11B, LOAD MEMORY ADDRESS 1.  GO TO STEP 34
*            IF THIS FUNCTION ABORTS. 
*        11. OUTPUT LOWER 8 BITS OF ADDRESS.  GO TO STEP 34 IF THIS 
*            COMMAND ABORTS.
*        12. FUNCTION 10B, LOAD MEMORY ADDRESS 0.  GO TO STEP 34 IF 
*            THIS FUNCTION ABORTS.
*        13. OUTPUT UPPER 9 BITS OF ADDRESS.  GO TO STEP 34 IF THIS 
*            COMMAND ABORTS.
*        14. FUNCTION 15B, OUTPUT PROGRAM.  GO TO STEP 34 IF THIS 
*            FUNCTION ABORTS. 
*        15. OUTPUT 400 WORDS FROM OUTPUT BUFFER.  GO TO STEP 34
*            IF THIS COMMAND ABORTS.
*        16. INCREMENT LOWER 8 BITS OF ADDRESS BY 200 AND GO TO STEP 9
*            IF VALUE OF LOWER 8 BITS IS LESS THAN 400B.
*            ELSE GO TO STEP 17.
*        17. SET LOWER 8 ADDRESS BITS TO ZERO, INCREMENT UPPER 9
*            ADDRESS BITS BY 1. 
*        18. IF UPPER ADDRESS BITS NOT EQUAL TO LWA+1 GO TO STEP 8, 
*            ELSE STEP 19.
*** 
**
*        19. SET UPPER AND LOWER ADDRESS BITS TO ZERO.
*        20. RESERVE THE I/O CHANNEL. 
*        21. CLEAR THE WRITE FLAG, AND POST READING ADDRESS MESSAGE 
*            TO DISPLAY.
*        22. PUT THE CURRENT ADDRESS IN THE OUTPUT BUFFER.
*        23. FUNC 11B, LOAD MEMORY ADDRESS 1.  GO TO STEP 34 IF THIS
*            FUNCTION ABORTS. 
*        24. OUTPUT LOWER 8 BITS OF ADDRESS.  GO TO STEP 34 IF THIS 
*            COMMAND ABORTS.
*        25. FUNCTION 10B, LOAD MEMORY ADDRESS 0.  GO TO STEP 34 IF 
*            THIS FUNCTION ABORTS.
*        26. OUTPUT UPPER 9 BITS OF ADDRESS.  GO TO STEP 34 IF THIS 
*            COMMAND ABORTS.
*        27. FUNCTION 7B, INPUT PROGRAM.  GO TO STEP 34 IF THIS 
*            FUNCTION ABORTS. 
*        28. INPUT 400 WORDS TO INPUT BUFFER.  GO TO STEP 34 IF THIS
*            COMMAND ABORTS.
*        29. COMPARE INPUT AND OUTPUT BUFFERS.  GO TO STEP 35 IF A
*            MISCOMPARE OCCURS. 
*        30. INCREMENT LOWER 8 BITS OF ADDRESS BY 200, AND GO TO STEP 
*            22 IF THEIR VALUE IS LESS THAN 400B.  ELSE GO TO STEP 31.
*        31. SET LOWER 8 ADDRESS BITS TO ZERO, INCREMENT UPPER 9
*            ADDRESS BITS BY 1. 
*        32. IF UPPER ADDRESS BITS NOT EQUAL TO LWA+1 GO TO STEP 20,
*            ELSE STEP 33.
*        33. INCREMENT DATA PATTERN POINTER BY 1 AND CHECK FOR
*            END OF PATTERNS.  IF NOT END OF PATTERNS GO TO STEP 7, 
*            OTHERWISE EXIT.
*        34. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            CAUSE OF THE ABORT.  HALT, THEN GO TO STEP 3 IF THE
*            WRITE FLAG IS SET, ELSE GO TO STEP 20. 
*        35. WE ARRIVE AT THIS STEP IF A DATA COMPARE ERROR HAS 
*            BEEN DETECTED.  POST MESSAGES SHOWING ADDRESS AND ACTUAL 
*            AND EXPECTED DATA.  HALT, RESERVE THE I/0 CHANNEL, 
*            THEN GO TO STEP 31.
*            NOTE- ONLY THE FIRST 40 ERRORS OF ANY BUFFER ARE REPORTED. 
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. TFF05 DATA ERR-ADD=XXXXX EXP=XXXX HEX ACT=XXXX HEX 
*         3. TFF05 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010) 
*         4. TFF05 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011) 
*         5. TFF05 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015) 
*         6. TFF05 - ABORT ON INPUT PROGRAM FUNCTION     (E007) 
*         7. TFF05 - ABORT ON .OUT. COMMAND 
*         8. TFF05 - ABORT ON .IN. COMMAND
*         9. TFF05 - ABORT ON CLEAR COUPLER FUNCTION     (E400) 
*        10. TFF05 - ABORT ON CLEAR NPU FUNCTION         (E200) 
*        11. TFF05 NOT EXECUTED ILLEGAL MEMORY SIZE  P0 = *OCT
* 
*   REGISTER USUAGE - 
* 
*         B0 = INDEX FOR MEMORY SIZE - READ/WRITE FLAG
*              LINE NUMBER FOR DATA ERROR MESSAGES
*         B1 = UPPER 9 BITS OF MEMORY ADDRESS 
*         B2 = LOWER 8 BITS OF MEMORY ADDRESS 
*         B3 = 400 - NUMBER OF WORDS TO COMPARE 
*         B4 = DATA PATTERN POINTER 
*         B5 = MESSAGE NUMBER TO POST IN CASE OF AN ABORT 
*         B6 = UPPER 9 BITS OF HIGHEST ADDRESS TO TEST + 1
*         B7 = ERROR COUNTER
* 
*   MODULES CALLED -
* 
*         NONE
* 
 1 FORMAT TFF05 - 2550 MEMORY DATA PATTERNS 
 2 FORMAT TFF05 DATA ERR-ADD=*HE*H EXP=*H*H HEX ACT=*H*H HEX
 3 FORMAT TFF05 - READING ADDRESS *HE*H 
 4 FORMAT TFF05 - WRITING ADDRESS *HE*H 
 5 FORMAT TFF05 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010)
 6 FORMAT TFF05 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011)
 7 FORMAT TFF05 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015)
10 FORMAT TFF05 - ABORT ON INPUT PROGRAM FUNCTION     (E007)
11 FORMAT TFF05 - ABORT ON .OUT. COMMAND
12 FORMAT TFF05 - ABORT ON .IN. COMMAND 
13 FORMAT TFF05 - ABORT ON CLEAR COUPLER FUNCTION     (E400)
14 FORMAT TFF05 - ABORT ON CLEAR NPU FUNCTION         (E200)
15 FORMAT TFF05 NOT EXECUTED ILLEGAL MEMORY SIZE  P0 = *OCT 
16 FORMAT TFF05 - ERROR(S) IN MODULE = *DEC 
25 FORMAT TFF05 - WT ERROR ACT=*OCT EXP=*OCT
17 FORMAT --------------------------------------------------- 
   DATA(OB(10),CON)16,32,48,65,80,96,112,131
   DATA(OB(20),CON)100,200,300,400,500,600,700,1000 
   DATA(OB(470),CON)377,,252,125
20 MSG 1 TO DISPLAY,PRINT          *POST RUNNING MESSAGE
21 B3 = 400                        *INITIALIZE REGISTERS
22 IF(P0 .EQ. OB(B0 + 10))GOTO 23  *VALIDATE PARAM P0 
   GOTO 22 WHILE(B0 + 1 .LT. 10)   *LOOP FOR ALL VALUES 
   MSG 15(P0)TO LINE 1             *POST PARAM ERROR MESSAGE
   PICTURE
   B7 = B7 + 1                     *BUMP ERROR COUNTER
   GOTO 46                         *EXIT PARAMETER ERROR
23 B6 = OB(B0 + 20)                *B6 = LWA + 1
24 RES                             *RESERVE THE I/O CHANNEL 
   B0 = 1                          *SET THE WRITE FLAG
   B5 = 13                         *MESSAGE NUMBER IF ABORT 
   FUNC 400B, ABT 60               *CLEAR COUPLER FUNCTION
   B5 = 14                         *MESSAGE NUMBER IF ABORT 
   FUNC 200B ,ABT 60               *CLEAR THE NPU 
27 DUP OB(B4+470) TO OB FOR B3     *PUT PATTERN IN OUTBUF 
   B1 = 0                           *UPPER 9 ADDRESS BITS 
30 RES                              *RESERVE THE I/O CHANNEL
   MSG 4(B1,B2)TO DISPLAY           *WRITING ADDRESS MESSAGE
32 OB(400) = B1                     *UPPER 9 BITS OF ADDRESS
   OB(401) = B2                     *LOWER 8 BITS OF ADDRESS
   GOSUB 50                         *WRITE THE ADDRESS
   GOTO 32 WHILE (B2 + 200 .NE. 400)  *LOOP 400B ADDRESSES
   B2 = 0                           *LOWER 8 ADDRESS BITS 
   GOTO 30 WHILE(B1 + 1 .NE. B6)    *LOOP FOR ALL ADDRESSES 
   B1 = 0                           *UPPER 9 ADDRESS BITS 
40 RES                              *RESERVE THE I/O CHANNEL
   B0 = 0                           *CLEAR THE WRITE FLAG 
   MSG 3 (B1,B2) TO DISPLAY         *READING ADDRESS MESSAGE
42 OB(400) = B1                     *UPPER 9 ADDRESS BITS 
   OB(401) = B2                     *LOWER 8 ADDRESS BITS 
   GOSUB 54                        *READ THE ADDRESS
   COMPARE IB TO OB FOR B3, ABT 70
44 GOTO 42 WHILE (B2 + 200 .NE. 400)  *LOOP 400B ADDRESSES
   B2 = 0                          *LOWER 8 ADDRESS BITS
   GOTO 40 WHILE(B1 + 1 .NE. B6)   *LOOP FOR ALL ADDRESSES
   GOTO 27 WHILE(B4 + 1 .NE. 4)    *LOOP FOR ALL PATTERNS 
46 IF(B7 .EQ. 0)GOTO 47            *IF NO ERRORS IN MODULE
   MSG 16(B7) TO DAYFILE           *REPORT ERRORS TO DAYFILE
47 EXIT 
* 
*-------- WRITE SUBROUTINE
* 
50 B5 = 6                          *MESSAGE NUMBER IF ABORT 
   FUNC 11B, ABT 60                *LOAD MEMORY ADDRESS 1 
   B5 = 11                         *MESSAGE NUMBER IF ABORT 
   OUT 1 WORDS FROM OB(401), ABT 60  *LOWER BITS OF ADDR
   B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 10B, ABT 60                 *LOAD MEMORY ADDRESS 0
   B5 = 11                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(400), ABT 60  *UPPER BITS OF ADDR
52 B5 = 7                           *MESSAGE NUMBER IF ABORT
   FUNC 15B, ABT 60                 *OUTPUT PROGRAM FUNCTION
   B5 = 11                          *MESSAGE NUMBER IF ABORT
   OUT 400 WORDS FROM OB, ABT 60    *OUTPUT DATA PATTERN
   IF(WT.EQ.400)GOTO 51 
   GOTO 53
51 RETURN 
* 
*-------- READ SUBROUTINE 
* 
54 B5 = 6                           *MESSAGE NUMBER IF ABORT
   FUNC 11B, ABT 60                 *LOAD MEMORY ADDRESS 1
   B5 = 11                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(401), ABT 60  *LOWER BITS OF ADDR
   B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 10B, ABT 60                 *LOAD MEMORY ADDRESS 0
   B5 = 11                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(400), ABT 60  *UPPER BITS OF ADDR
56 B5 = 10                          *MESSAGE NUMBER IF ABORT
   FUNC 7B, ABT 60                  *INPUT PROGRAM FUNCTION 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   IN 400 WORDS TO IB, ABT 60       *INPUT DATA PATTERN 
   IF(WT.EQ.400) GOTO 57
53 B5 = 400 
   MSG 25(WT,B5)TO LINE 1 
   GOTO 61
57 RETURN 
* 
*-------- ABORT PROCESSOR 
* 
60 ENDSUB                        *END ALL ACTIVE SUBROUTINES
   MSG B5 TO LINE 1              *COMMAND THAT ABORTED
   MSG EM TO LINE 2              *POST REASON FOR THE ABORT 
61 B0 = B0+100
   GOTO 74
* 
*-------- DATA ERROR PROCESSOR
* 
70 B0 = 1                        *LINE NUMBER FOR MSG 
71 B3 = B3 .AND. 7776            *ADJUST FAILURE POINTER
   OB(401) = B3 .RS. 1 + B2      *FAILING ADDRESS 
   MSG 2(B1,OB(401),OB,OB(1),IB(B3),IB(B3+1))TO LINE B0 
   B0 = B0 + 1                     *INCREMENT LINE NUMBER 
   IF(B0 .GT. 40D) GOTO 74         *IF 40D ERRORS REPORTED
   B3 = B3 + 1                     *NEXT WORD TO CHECK
   GOTO 73
72 IF(IB(B3) .NE. OB(B3)) GOTO 71  *IF ERROR
73 GOTO 72 WHILE(B3 + 1 .LT. 400)  *LOOP FOR COMPLETE BUFFER
74 PICTURE
   HALT 
   MSG 17 TO PRINT
   BLANK
   GOTO 46 WHILE (B7+1.GE.5)
   MSG 1 TO DISPLAY                *POST RUNNING MESSAGE
   IF(B0.EQ.101) GOTO 24
   IF(B0.EQ.100) GOTO 40
   B3 = 400                        *RESET WORDS TO COMPARE
   B0 = 0                          *CLEAR THE LINE NUMBER 
   RES                             *RESERVE THE I/O CHANNEL 
   GOTO 44                         *CONTINUE READING
   END 20 
COMPILE   - TFF05 - 
   MODULE TFF06,6000(64),LOCK  *PPU/NPU BASIC COMMUNICATION 
***       TFF06 - PPU/2550 BASIC COMMUNICATION TEST 
**        TFF06 - PPU/2550 BASIC COMMUNICATION TEST 
*         ----------------------------------------- 
* 
*   OVERVIEW -
* 
*         TFF06 VERIFIES BASIC COMMUNICATIONS BETWEEN THE PERIPHERAL
*         PROCESSOR (PPU) AND THE COMMUNICATIONS PROCESSOR (NPU). 
*         THIS VERIFICATION IS ACCOMPLISHED BY LOADING A SMALL PROGRAM
*         INTO THE NPU WHICH WILL READ THE ORDERWORD REGISTER AND 
*         TRANSFER IT TO THE NPU STATUS REGISTER.  THE LOAD MEMORY
*         ADDRESS 0 AND 1 FUNCTIONS AND OUTPUT PROGRAM FUNCTION ARE 
*         USED TO LOAD THE PROGRAM INTO THE NPU.  THE PROGRAM IS THEN 
*         STARTED WITH THE START CP FUNCTION.  COMMUNICATION WITH THE 
*         NPU IS PERFORMED BY LOADING DATA PATTERNS INTO THE ORDERWORD
*         REGISTER WHICH THE NPU THEN TRANSFERS TO THE NPU STATUS 
*         REGISTER.  THE NPU STATUS REGISTER IS THEN READ BY THE PPU
*         AND CHECKED TO SEE IF THE DATA COMPARES TO WHAT WAS LOADED
*         INTO THE ORDERWORD REGISTER.  THE FOLLOWING OCTAL DATA
*         PATTERNS ARE USED TO TEST THE COMMUNICATION - 7777, 
*         0000,0001,0002,0004,0010,0020,0040,0100,0200,0400,
*         1000,2000,4000,2525, AND 5252.  EACH PATTERN IS TESTED IN 
*         ORDER, THEN REPEATED UNTIL EACH PATTERN HAS BEEN TESTED 100D
*         TIMES.
* 
*   DESCRIPTION - 
* 
*         1. POST RUNNING MESSAGE, CALL TFF98A IF P1 NOT EQUAL TO ZERO. 
*         2. RESERVE THE I/O CHANNEL. 
*         3. FUNCTION 400B, CLEAR COUPLER.  GO TO STEP 28 IF THIS 
*            FUNCTION ABORTS. 
*         4. FUNCTION 200B, CLEAR NPU.  GO TO STEP 28 IF THIS FUNCTION
*            ABORTS.
*         5. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 28 IF THIS 
*            FUNCTION ABORTS. 
*         6. INPUT COUPLER STATUS.  GO TO STEP 28 IF THIS COMMAND 
*            ABORTS.
*         7. IF BIT 2 OF COUPLER STATUS (NPU REGISTER LOADED) IS SET
*            GO TO STEP 8.  OTHERWISE, GO TO STEP 10. 
*         8. FUNCTION 4, INPUT NPU STATUS.  GO TO STEP 28 IF THIS 
*            FUNCTION ABORTS. 
*         9. INPUT NPU STATUS.  GO TO STEP 28 IF THIS COMMAND ABORTS. 
*        10. FUNCTION 11B, LOAD MEMORY ADDRESS 1.  GO TO STEP 28 IF 
*            THIS FUNCTION ABORTS.
*        11. OUTPUT LOWER 8 BITS OF ADDRESS.  GO TO STEP 28 IF THIS 
*            COMMAND ABORTS.
*        12. FUNCTION 10B, LOAD MEMORY ADDRESS 0.  GO TO STEP 28 IF 
*            THIS FUNCTION ABORTS.
*        13. OUTPUT UPPER 9 BITS OF ADDRESS.  GO TO STEP 28 IF THIS 
*            COMMAND ABORTS.
*        14. FUNCTION 15B, OUTPUT PROGRAM.  GO TO STEP 28 IF THIS 
*            FUNCTION ABORTS. 
*        15. OUTPUT 54 WORDS FROM OUTPUT BUFFER(THIS IS THE PROGRAM 
*            THAT WILL EXECUTE IN THE 2550).  GO TO STEP 28 IF THIS 
*            COMMAND ABORTS.
*        16. FUNCTION 40B, START CP (START PROGRAM RUNNING).  GO TO 
*            STEP 28 IF THIS FUNCTION ABORTS. 
*        17. RESERVE THE I/O CHANNEL. 
*        18. FUNCTION 16B, OUTPUT ORDERWORD.  GO TO STEP 28 IF THIS 
*            FUNCTION ABORTS. 
*        19. OUTPUT DATA TO ORDERWORD REGISTER.  GO TO STEP 28 IF THIS
*            COMMAND ABORTS.
*        20. RESERVE THE I/O CHANNEL. 
*        21. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 28 IF THIS 
*            FUNCTION ABORTS. 
*        22. INPUT COUPLER STATUS.  GO TO STEP 28 IF THIS COMMAND 
*            ABORTS.
*        23. IF BIT 2 OF COUPLER STATUS (NPU REGISTER LOADED) IS SET
*            GO TO STEP 24.  OTHERWISE, BUMP THE TIMEOUT COUNTER, 
*            IF TIMEOUT COUNTER IS NOT EXPIRED GO TO STEP 20, IF
*            TIMEOUT COUNTER IS EXPIRED POST MESSAGE, CALL MODULE 98B 
*            FOR STATUS ANALYSIS, HALT, THEN GO TO STEP 2.
*        24. FUNCTION 4, INPUT NPU STATUS.  GO TO STEP 28 IF THIS 
*            FUNCTION ABORTS. 
*        25. INPUT NPU STATUS.  GO TO STEP 28 IF THIS COMMAND ABORTS. 
*        26. COMPARE NPU STATUS WITH ORDERWORD SENT.  GO TO STEP 29 IF
*            A MISCOMPARE OCCURS. 
*        27. INCREMENT DATA PATTERN POINTER AND CHECK FOR END OF DATA 
*            PATTERNS.  GO TO STEP 17 IF NOT END OF PATTERNS, OTHERWISE 
*            RESET THE DATA PATTERN POINTER AND REPEAT STEPS 17 THRU 27 
*            100D TIMES.
*        28. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            CAUSE OF THE ABORT.  HALT, THEN GO TO STEP 2.
*        29. WE ARRIVE AT THIS STEP IF A MISCOMPARE OCCURS BETWEEN
*            WHAT WAS SENT TO THE ORDERWORD REGISTER AND WHAT WAS 
*            RETURNED IN THE NPU STATUS REGISTER.  POST MESSAGES
*            SHOWING THE ACTUAL AND EXPECTED DATA.  HALT, THEN GO TO
*            STEP 27. 
* 
*         - NOTE -
*         THE FOLLOWING DESCRIPTION APPLIES TO THE TEST PROGRAM 
*         WHICH IS DOWNLINE LOADED INTO THE 2550 BY MODULE TFF06. 
* 
*         1. LOAD THE Q REGISTER WITH 650 (INPUT COUPLER STATUS 
*            FUNCTION). 
*         2. START I/O (COUPLER STATUS TO THE A REGISTER).
*         3. LEFT SHIFT THE A REGISTER 7 PLACES (ORDERWORD REGISTER 
*            LOADED STATUS BIT IS NOW BIT 15).
*         4. GO TO STEP 6 IF A REGISTER IS NEGATIVE (ORDERWORD
*            REGISTER IS LOADED). 
*         5. GO TO STEP 1 (ORDERWORD REGISTER NOT LOADED).
*         6. LOAD THE Q REGISTER WITH 660 (INPUT ORDERWORD FUNCTION). 
*         7. START I/O (ORDERWORD REGISTER TO A REGISTER).
*         8. LOAD THE Q REGISTER WITH 648 (LOAD NPU STATUS REGISTER 
*            FUNCTION). 
*         9. START I/O (A REGISTER TO NPU STATUS REGISTER). 
*        10. GO TO STEP 1.
* 
*   ERRORS REPORTED - 
* 
*          1. ALL PRODUCT OVERLAY ERROR MESSAGES. 
*          2. DATA ERR- EXP=*OCTB ACT=*OCTB DIFF=*OCTB PASS=*DEC
*          3. TFF06 - ABORT ON CLEAR COUPLER FUNCTION     (E400)
*          4. TFF06 - ABORT ON CLEAR NPU FUNCTION         (E200)
*          5. TFF06 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010)
*          6. TFF06 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011)
*          7. TFF06 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015)
*         10. TFF06 - ABORT ON START CP FUNCTION          (E040)
*         11. TFF06 - ABORT ON LOAD ORDERWORD FUNCTION    (E016)
*         12. TFF06 - ABORT ON INPUT COUPLER STATUS FUNC  (E005)
*         13. TFF06 - ABORT ON INPUT NPU STATUS FUNCTION  (E004)
*         14. TFF06 - ABORT ON .IN. OR .STATUS. COMMAND 
*         15. TFF06 - ABORT ON .OUT. COMMAND
*         16. TFF06 - NPU NOT RESPONDING
*         17. TFF06 - LAST COUPLER STATUS = *OCT
* 
*   REGISTER USUAGE - 
* 
*         B2 = PASS COUNTER 
*         B3 = TIMEOUT COUNTER FOR NPU REGISTER LOADED
*         B4 = DATA PATTERN POINTER 
*         B5 = MESSAGE NUMBER TO POST IN CASE OF AN ABORT 
*              LOGICAL DIFFERENCE IF DATA ERROR 
*         B6 = CUMULATIVE NPU STATUS FLAG 
*         B7 = ERROR COUNTER
* 
*   MODULES CALLED -
* 
*         98A - CHANGE NPU CODE FOR SECONDARY COUPLER 
*         98B - ANALYZE COUPLER STATUS
* 
1  FORMAT TFF06 - PPU/2550 BASIC COMMUNICATION
2  FORMAT DATA ERR- EXP=*OCTB ACT=*OCTB DIFF=*OCTB PASS=*DEC
3  FORMAT TFF06 - ABORT ON CLEAR COUPLER FUNCTION     (E400)
4  FORMAT TFF06 - ABORT ON CLEAR NPU FUNCTION         (E200)
5  FORMAT TFF06 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010)
6  FORMAT TFF06 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011)
7  FORMAT TFF06 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015)
10 FORMAT TFF06 - ABORT ON START CP FUNCTION          (E040)
11 FORMAT TFF06 - ABORT ON LOAD ORDERWORD FUNCTION    (E016)
12 FORMAT TFF06 - ABORT ON INPUT COUPLER STATUS FUNC  (E005)
13 FORMAT TFF06 - ABORT ON INPUT NPU STATUS FUNCTION  (E004)
14 FORMAT TFF06 - ABORT ON .IN. OR .STATUS. COMMAND 
15 FORMAT TFF06 - ABORT ON .OUT. COMMAND
16 FORMAT TFF06 - ERROR(S) IN MODULE = *DEC 
17 FORMAT TFF06 - NPU NOT RESPONDING
20 FORMAT TFF06 - LAST COUPLER STATUS = *OCT
22 FORMAT TFF06 - OUTPUT WT ERROR ACT=*OCT EXP=*OCT 
21 FORMAT --------------------------------------------------- 
   DATA(OB,H)C000,0000            *LOAD A WITH ZERO 
   DATA(OB(4),H)6400,00FF         *STORE A IN LOC FF
   DATA(OB(10),H)E000,0650        *COUPLER STATUS FUNC
   DATA(OB(14),H)0B04             *COUPLER STATUS TO A
   DATA(OB(16),H)0822             *TRANSFER A TO Q
   DATA(OB(20),H)0446,D100,00FF   *OR A WITH LOC FF 
   DATA(OB(26),H)0814             *TRANSFER Q TO A
   DATA(OB(30),H)0FC7             *LEFT SHIFT A 7 PLACES
   DATA(OB(32),H)0131             *SKIP 1 IF A NEG
   DATA(OB(34),H)18F5             *JUMP BACK 10 LOCATIONS 
   DATA(OB(36),H)E000,0660        *INPUT ORDERWORD FUNC 
   DATA(OB(42),H)0B04             *ORDERWORD TO A 
   DATA(OB(44),H)E000,0648        *A TO NPU REG FUNC
   DATA(OB(50),H)0B04             *A TO NPU REGISTER
   DATA(OB(52),H)18EE             *REPEAT PROGRAM 
   DATA(OB(450),CON)7777,,1,2,4,10,20,40,100,200,400
   DATA(OB(463),CON)1000,2000,4000,2525,5252
24 MSG 1 TO DISPLAY,PRINT        *POST RUNNING MESSAGE
   IF(P1 .EQ. 0)GOTO 25          *IF NOT SECOND COUPLER 
   COPY OB TO IB FOR 500B        *SAVE NPU CODE IN IB 
   CALL 98A                      *HAVE CODE CHANGED 
* 
*-------- DOWNLINE LOAD 2550
* 
25 RES                           *RESERVE THE I/O CHANNEL 
   IB(504) = 0                   *CLEAR CUMULATIVE STATUS 
   B5 = 3                        *MESSAGE NUMBER IF ABORT 
   FUNC 400B, ABT 60             *CLEAR COUPLER FUNCTION
   B5 = 4                        *MESSAGE NUMBER IF ABORT 
   FUNC 200B, ABT 60             *CLEAR NPU FUNCTION
   B5 = 12                       *MESSAGE NUMBER IF ABORT 
   FUNC 5B, ABT 60               *COUPLER STATUS FUNCTION 
   B5 = 14                       *MESSAGE NUMBER IF ABORT 
   IN 1 WORDS TO IB, ABT 60      *INPUT COUPLER STATUS
   IF(IB .AND. 4 .NE. 4)GOTO 26  *IF NPU REGISTER NOT LOADED
   B5 = 13                       *MESSAGE NUMBER IF ABORT 
   FUNC 4B, ABT 60               *NPU STATUS FUNCTION 
   B5 = 14                       *MESSAGE NUMBER IF ABORT 
   IN 1 WORDS TO IB(1), ABT 60   *INPUT NPU REGISTER
26 B5 = 6                        *MESSAGE NUMBER IF ABORT 
   FUNC 11B, ABT 60                 *LOAD MAR 1 FUNCTION
   B5 = 15                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(401), ABT 60  *LOWER ADDRESS BITS
   B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 10B, ABT 60                 *LOAD MAR 0 FUNCTION
   B5 = 15                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(400), ABT 60  *UPPER ADDRESS BITS
   B5 = 7                           *MESSAGE NUMBER IF ABORT
   FUNC 15B, ABT 60                 *OUTPUT PROGRAM FUNCTION
   B5 = 15                          *MESSAGE NUMBER IF ABORT
   OUT 54 WORDS FROM OB, ABT 60     *OUTPUT TEST PROGRAM
   IF(WT.EQ.54) GOTO 36 
   B5 = 54
   MSG 22(WT,B5)TO LINE 1 
   GOTO 61
36 B5 = 10          *MESSAGE NUMBER IF ABORT
   FUNC 40B, ABT 60                 *START 2550 RUNNING 
27 B4 = 0                           *DATA PATTERN POINTER 
* 
*-------- COMMUNICATION TEST
* 
30 RES                              *RESERVE THE I/O CHANNEL
   B5 = 11                          *MESSAGE NUMBER IF ABORT
   FUNC 16B, ABT 60                 *LOAD ORDERWORD FUNCTION
   B5 = 15                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(B4+450),ABT 60  *OUTPUT DATA PATTERN 
   B3 = 0                           *STATUS TIMEOUT COUNTER 
31 RES                              *RESERVE THE I/O CHANNEL
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   FUNC 5B, ABT 60                  *COUPLER STATUS FUNCTION
   B5 = 14                          *MESSAGE NUMBER IF ABORT
   STATUS 1 WORDS TO SB, ABT 60     *INPUT COUPLER STATUS 
   IB(504) = IB(504) .OR. SB        *CUMULATIVE STATUS
   IF(SB .AND. 4 .EQ. 4)GOTO 32     *IF NPU REGISTER LOADED 
   GOTO 31 WHILE(B3 + 1 .NE. 1000D)  *LOOP 1000 TIMES 
   GOTO 64                          *NPU REGISTER NOT LOADED
32 B5 = 13                          *MESSAGE NUMBER IF ABORT
   FUNC 4B, ABT 60                  *NPU STATUS FUNCTION
   B5 = 14                          *MESSAGE NUMBER IF ABORT
   IN 1 WORDS TO IB(1), ABT 60      *INPUT NPU REGISTER 
   IF(IB(1) .NE. OB(B4+450))GOTO 70  *IF COMPARE ERROR
33 GOTO 30 WHILE(B4 + 1 .NE. 20)    *LOOP FOR ALL PATTERNS
   GOTO 27 WHILE(B2 + 1 .NE. 100D)  *REPEAT 100D TIMES
34 IF(B7 .EQ. 0)GOTO 40             *IF NO ERRORS IN MODULE 
   MSG 16(B7) TO DAYFILE            *REPORT ERRS TO DAYFILE 
40 EXIT 
* 
*-------- ABORT PROCESSOR 
* 
60 MSG B5 TO LINE 1               *COMMAND THAT ABORTED 
   MSG EM TO LINE 2               *REASON FOR THE ABORT 
61 B7 = B7 + 1                    *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 21 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 34           *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY               *POST RUNNING MESSAGE 
   IF(B0.EQ.100)GOTO 33 
   GOTO 25                        *RELOAD PROGRAM IN 2550 
64 MSG 17 TO LINE 1               *NPU TIMEOUT MESSAGE
   MSG 20(SB) TO LINE 2           *LAST STATUS MESSAGE
   B6 = 1                         *NPU STATUS FLAG
   CALL 98B                       *ANALYZE STATUS 
   GOTO 61
* 
*-------- DATA ERROR PROCESSOR
* 
70 B5 = OB(B4+450) .XOR. IB(1)    *CALCULATE DIFFERENCE 
   MSG 2(OB(B4+450),IB(1),B5,B2)TO LINE 1 
   B0 = 100 
   GOTO 61
   END 24 
COMPILE   - TFF06 - 
   MODULE TFF07,6000(64),LOCK  *PPU/2550 DATA TRANSFERS 
***       TFF07 - PPU/2550 DATA TRANSFERS 
**        TFF07 - PPU/2550 DATA TRANSFERS 
*         ------------------------------- 
* 
*   OVERVIEW -
* 
*         TFF07 VERIFIES BASIC DATA TRANSFERS BETWEEN THE PERIPHERAL
*         PROCESSOR (PPU) AND THE COMMUNICATIONS PROCESSOR (NPU). 
*         THIS VERIFICATION IS ACCOMPLISHED BY LOADING A SMALL PROGRAM
*         INTO THE NPU WHICH WILL SET UP A BUFFER IN THE NPU MEMORY AND 
*         THEN LOAD THE MEMORY ADDRESS REGISTER WITH THE ADDRESS OF THE 
*         BUFFER.  THE OUTPUT PROGRAM FUNCTION IS USED TO LOAD THE
*         PROGRAM INTO THE NPU.  THE PROGRAM IS STARTED WITH THE START
*         CP FUNCTION.  THE DATA TRANSFERS BEGIN WHEN THE NPU LOADS THE 
*         MEMORY ADDRESS REGISTER (MAR) WITH THE ADDRESS OF THE BUFFER. 
*         AFTER A BUFFER OF DATA HAS BEEN SENT TO THE NPU BUFFER, THE 
*         NPU RELOADS THE MEMORY ADDRESS REGISTER AND THE PPU THEN
*         INPUTS THE BUFFER.  THE DATA IS THEN CHECKED AND THE PROCESS
*         REPEATED 256D TIMES.  PATTERNS INCREMENT FROM 0000B TO 377B.
*         THE BUFFER IN THE NPU STARTS AT LOCATION 1000 HEX AND IS
*         81 HEX LOCATIONS LONG.  BUFFER CHAINING AND INTERRUPTS ARE
*         NOT TESTED BY THIS MODULE.
* 
*   DESCRIPTION - 
* 
*         1. POST RUNNING MESSAGE, CALL TFF98A IF P1 NOT EQUAL TO ZERO. 
*         2. RESERVE THE I/O CHANNEL. 
*         3. FUNCTION 200B, CLEAR NPU.  GO TO STEP 13 IF THIS FUNCTION
*            ABORTS.
*         4. FUNCTION 400B, CLEAR COUPLER.  GO TO STEP 13 IF THIS 
*            FUNCTION ABORTS. 
*         5. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 13 IF THIS 
*            FUNCTION ABORTS. 
*         6. INPUT COUPLER STATUS.  GO TO STEP 13 IF THIS COMMAND 
*            ABORTS.
*         7. IF BIT 2 OF COUPLER STATUS (NPU REGISTER LOADED) IS SET GO 
*            TO STEP 8.  OTHERWISE, GO TO STEP 10.
*         8. FUNCTION 4, INPUT NPU STATUS.  GO TO STEP 13 IF THIS 
*            FUNCTION ABORTS. 
*         9. INPUT NPU STATUS.  GO TO STEP 13 IF THIS COMMAND ABORTS. 
*        10. FUNCTION 15B, OUTPUT PROGRAM.  GO TO STEP 13 IF THIS 
*            FUNCTION ABORTS. 
*        11. OUTPUT 146B WORDS FROM OUTPUT BUFFER (THIS IS THE PROGRAM
*            THAT EXECUTES IN THE 2550).  GO TO STEP 13 IF THIS COMMAND 
*            ABORTS.
*        12. EXIT TO MODULE TFF071. 
*        13. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            REASON FOR THE ABORT.  HALT, THEN GO TO STEP 2.
* 
*         - NOTE -
* 
*         THE FOLLOWING DESCRIPTION APPLIES TO THE TEST PROGRAM 
*         WHICH IS DOWNLINE LOADED INTO THE 2550 BY THIS MODULE.
* 
*         1. CLEAR ALL PROGRAM PROTECT BITS FOR ADDRESS 1000 THRU 
*            3FFF.
*         2. INPUT THE ORDERWORD REGISTER.  IF THE ORDERWORD IS EQUAL 
*            TO 1, GO TO STEP 3.  ELSE REPEAT THIS STEP.
*         3. INPUT COUPLER STATUS.
*         4. LOAD THE BUFFER LENGTH REGISTER WITH 80 HEX. 
*         5. SET UP FWA OF BUFFER WITH LCD/FCD OF FF04. 
*         6. SET DONT BUFFER CHAIN FLAG IN BUFFER FWA + 1.
*         7. LOAD THE MEMORY ADDRESS REGISTER WITH THE BUFFER 
*            ADDRESS (1000 HEX).
*         8. INPUT THE ORDERWORD REGISTER.  IF THE ORDERWORD IS EQUAL 
*            TO 2, GO TO STEP 9.  ELSE REPEAT THIS STEP.
*         9. LOAD THE MEMORY ADDRESS REGISTER WITH THE BUFFER 
*            ADDRESS (1000 HEX), THEN GO TO STEP 2. 
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. TFF07 - ABORT ON CLEAR COUPLER FUNCTION     (E400) 
*         3. TFF07 - ABORT ON CLEAR NPU FUNCTION         (E200) 
*         4. TFF07 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015) 
*         5. TFF07 - ABORT ON INPUT NPU STATUS FUNCTION  (E004) 
*         6. TFF07 - ABORT ON INPUT COUPLER STATUS FUNC  (E005) 
*         7. TFF07 - ABORT ON .OUT. COMMAND 
*         8. TFF07 - ABORT ON .IN. COMMAND
*         9. TFF07 - OUTPUT WT ERROR ACT=*OCT EXP=*OCT
* 
*   REGISTER USAGE -
* 
*         B5 = MESSAGE NUMBER IF ABORT
*         B7 = ERROR COUNTER
* 
*   MODULES CALLED -
* 
*         TFF98A
* 
1  FORMAT TFF07 - PPU/2550 DATA TRANSFERS 
3  FORMAT TFF07 - ABORT ON CLEAR COUPLER FUNCTION     (E400)
4  FORMAT TFF07 - ABORT ON CLEAR NPU FUNCTION         (E200)
5  FORMAT TFF07 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015)
6  FORMAT TFF07 - ABORT ON INPUT NPU STATUS FUNCTION  (E004)
7  FORMAT TFF07 - ABORT ON INPUT COUPLER STATUS FUNC  (E005)
12 FORMAT TFF07 - ABORT ON .OUT. COMMAND
13 FORMAT TFF07 - ABORT ON .IN. COMMAND 
14 FORMAT TFF07 - OUTPUT WT ERROR ACT=*OCT EXP=*OCT 
16 FORMAT TFF07 - ERROR(S) IN MODULE = *DEC 
17 FORMAT --------------------------------------------------- 
   DATA(OB,H)E000,1000       *LOAD Q WITH 1000
   DATA(OB(4),H)0700         *CLEAR PROTECT BIT 
   DATA(OB(6),H)0D01         *ADD 1 TO Q
   DATA(OB(10),H)0814        *TRANSFER Q TO A 
   DATA(OB(12),H)B000,3FFF   *TEST IF A = 3FFF
   DATA(OB(16),H)0101        *SKIP 1 IF A = 0 
   DATA(OB(20),H)18F9        *JUMP BACK 6 LOCATIONS 
   DATA(OB(22),H)E000,0660   *LOAD Q WITH INPUT ORDERWORD 
   DATA(OB(26),H)0B04        *START I/O(ORDERWORD TO A) 
   DATA(OB(30),H)0FCF        *LEFT SHIFT A 15 
   DATA(OB(32),H)0131        *SKIP 1 IF A NEGATIVE
   DATA(OB(34),H)18FA        *JUMP BACK 5 LOCATIONS 
   DATA(OB(36),H)E000,0650   *LOAD Q COUPLER STATUS FUNC
   DATA(OB(42),H)0B04        *START I/O(COUPLER STATUS TO A)
   DATA(OB(44),H)6400,00FF   *SAVE STATUS AT 00FF 
   DATA(OB(50),H)E000,0658   *LOAD Q WITH BUFFER LENGTH FUNC
   DATA(OB(54),H)C000,0080   *LOAD A WITH 80(BUFFER LENGTH) 
   DATA(OB(60),H)0B04        *START I/O(A TO BUFFER LENGTH) 
   DATA(OB(62),H)C000,FF04   *LOAD A WITH FF04(LCD/FCD) 
   DATA(OB(66),H)6400,1000   *STORE A AT 1000(BUFFER FWA) 
   DATA(OB(72),H)C000,8001   *LOAD A WITH 8001(DONT CHAIN)
   DATA(OB(76),H)6400,1001   *STORE A AT FWA+1 OF BUFFER
   DATA(OB(102),H)E000,066C  *LOAD Q WITH LOAD MAR FUNC 
   DATA(OB(106),H)C000,1000  *LOAD A WITH 1000(FWA OF BUFFER) 
   DATA(OB(112),H)0B04       *START I/O(A TO MAR) 
   DATA(OB(114),H)E000,0660  *LOAD Q INPUT ORDERWORD FUNC 
   DATA(OB(120),H)0B04       *START I/O(ORDERWORD TO A) 
   DATA(OB(122),H)0FCE       *LEFT SHIFT A 14 PLACES
   DATA(OB(124),H)0131       *SKIP 1 IF A NEGATIVE
   DATA(OB(126),H)18FA       *JUMP BACK 5 LOCATIONS 
   DATA(OB(130),H)E000,066C  *LOAD Q WITH 066C(LOAD MAR)
   DATA(OB(134),H)C000,1000  *LOAD A WITH BUFFER ADDRESS
   DATA(OB(140),H)0B04       *START I/O(A TO MAR) 
   DATA(OB(142),H)1400,0009  *JUMP TO START OF PROGRAM
20 MSG 1 TO DISPLAY,PRINT         *POST RUNNING MESSAGE 
   IF (P1.EQ.0) GOTO 21           *NO SECOND COUPLER
   B0 = 10                        *INDEX FOR THIS MODULE
   COPY OB TO IB FOR 500B         *SAVE NPU CODE IN IB
   CALL 98A                       *HAVE CODE CHANGED
* 
*-------- DOWNLINE LOAD 2550
* 
21 RES                            *RESERVE THE I/O CHANNEL
   B5 = 4                         *MESSAGE NUMBER IF ABORT
   FUNC 200, ABT 60               *CLEAR NPU FUNCTION 
   B5 = 3                         *MESSAGE NUMBER IF ABORT
   FUNC 400, ABT 60               *CLEAR COUPLER FUNCTION 
   B5 = 7                         *MESSAGE NUMBER IF ABORT
   FUNC 5, ABT 60                 *COUPLER STATUS FUNCTION
   B5 = 13                        *MESSAGE NUMBER IF ABORT
   IN 1 WORDS TO IB, ABT 60       *INPUT COUPLER STATUS 
   IF(IB .AND. 4 .NE. 4) GOTO 22  *NPU REGISTER NOT LOADED
   B5 = 6                         *MESSAGE NUMBER IF ABORT
   FUNC 4, ABT 60                 *NPU STATUS FUNCTION
   B5 = 13                        *MESSAGE NUMBER IF ABORT
   IN 1 WORDS TO IB, ABT 60       *INPUT NPU REGISTER 
22 B5 = 5                         *MESSAGE NUMBER IF ABORT
   FUNC 15, ABT 60                *OUTPUT PROGRAM FUNCTION
   B5 = 12                        *MESSAGE NUMBER IF ABORT
   OUT 146 WORDS FROM OB, ABT 60  *OUTPUT TEST PROGRAM
   IF(WT .EQ. 146)GOTO 23 
   B5 = 146 
   MSG 14(WT,B5)TO LINE 1 
   GOTO 61
23 IF (B7 .EQ. 0)GOTO 47          *IF NO ERRORS IN MODULE 
   MSG 16(B7) TO DAYFILE          *REPORT ERRORS TO DAYFILE 
   IF(B7 .LT. 5)GOTO 47           *IF NPU LOADED
   EXIT 
47 EXIT TO 071
* 
*-------- ABORT PROCESSOR 
* 
60 MSG B5 TO LINE 1               *COMMAND THAT ABORTED 
   MSG EM TO LINE 2               *POST REASON FOR THE ABORT
61 B7 = B7 + 1                    *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 17 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 23           *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY               *POST RUNNING MESSAGE 
   GOTO 21                        *RESTART THE TEST 
   END 20 
COMPILE   - TFF07 - 
   MODULE TFF071,6000(64),LOCK  *PPU/2550 DATA TRANSFERS
***       TFF071 - PPU/2550 DATA TRANSFERS
**        TFF071 - PPU/2550 DATA TRANSFERS
*         --------------------------------
* 
*   DESCRIPTION - (TFF071)
* 
*         1. RESERVE THE I/O CHANNEL. 
*         2. FUNCTION 100B, STOP CP.  GO TO STEP 24 IF THIS FUNCTION
*            ABORTS.
*         3. FUNCTION 40B, START CP.  GO TO STEP 24 IF THIS FUNCTION
*            ABORTS.
*         4. DUPE 374B WORDS OF DATA PATTERN TO OUTPUT BUFFER.
*         5. SET BIT 11 OF LAST WORD OF DATA PATTERN IN OUTPUT BUFFER.
*            THIS BIT INDICATES END OF TRANSMISSION.
*         6. RESERVE THE I/O CHANNEL. 
*         7. FUNCTION 16B, LOAD ORDERWORD.  GO TO STEP 24 IF THIS 
*            FUNCTION ABORTS. 
*         8. OUTPUT THE ORDERWORD.  GO TO STEP 24 IF THIS COMMAND 
*            ABORTS.
*         9. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 24 IF THIS 
*            FUNCTION ABORTS. 
*        10. INPUT COUPLER STATUS TO STATUS BUFFER.  GO TO STEP 24 IF 
*            THIS COMMAND ABORTS. 
*        11. IF COUPLER STATUS IS EQUAL TO 10B (MEMORY ADDRESS REGISTER 
*            LOADED) GO TO STEP 12.  ELSE GO TO STEP 9, 100B TIMES, 
*            THEN POST ERROR MESSAGE, HALT, THEN GO TO STEP 1.
*        12. FUNCTION 14B, OUTPUT DATA.  GO TO STEP 24 IF THIS FUNCTION 
*            ABORTS.
*        13. OUTPUT 374B WORDS OF DATA FROM OUTPUT BUFFER.  GO TO 
*            STEP 24 IF THIS COMMAND ABORTS.
*        14. RESERVE THE I/O CHANNEL. 
*        15. FUNCTION 16B, LOAD ORDERWORD.  GO TO STEP 24 IF THIS 
*            FUNCTION ABORTS. 
*        16. OUTPUT THE ORDERWORD.  GO TO STEP 24 IF THIS COMMAND 
*            ABORTS.
*        17. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 24 IF THIS 
*            FUNCTION ABORTS. 
*        18. INPUT COUPLER STATUS TO STATUS BUFFER.  GO TO STEP 24 IF 
*            THIS COMMAND ABORTS. 
*        19. IF COUPLER STATUS EQUAL TO 10B (MEMORY ADDRESS REGISTER
*            LOADED) GO TO STEP 24.  ELSE GO TO STEP 17, 100B TIMES,
*            POST NPU NOT RESPONDING MESSAGE, CALL MODULE 98B FOR 
*            STATUS ANALYSIS, HALT, THEN GO TO STEP 1.
*        20. FUNCTION 3, INPUT DATA.  GO TO STEP 24 IF THIS FUNCTION
*            ABORTS.
*        21. INPUT 374B WORDS (DATA PATTERN).  GO TO STEP 24 IF THIS
*            COMMAND ABORTS.
*        22. COMPARE INPUT AND OUTPUT BUFFERS.  GO TO STEP 25 IF A
*            MISCOMPARE OCCURS. 
*        23. INCREMENT THE DATA PATTERN, IF NOT END OF DATA PATTERNS
*            GO TO STEP 4, OTHERWISE EXIT.
*        24. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            REASON FOR THE ABORT.  HALT, THEN GO TO STEP 1.
*        25. WE ARRIVE AT THIS STEP IF A MISCOMPARE OCCURS BETWEEN WHAT 
*            WAS SENT TO THE NPU AND WHAT WAS RETURNED.  POST MESSAGES
*            SHOWING THE ACTUAL AND EXPECTED DATA AND THE DIFFERENCES.
*            HALT, THEN GO TO STEP 23.
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. DATA ERROR - ACT=*H*HHEX EXP=*H*HHEX DIFF=*H*HHEX
*         3. TFF071- WC = *OCT PASS = *DEC BAD BYTE = *OCT
*         6. TFF071- ABORT ON STOP CP FUNCTION           (E100) 
*         5. TFF071- ABORT ON START CP FUNCTION          (E040) 
*         6. TFF071- ABORT ON INPUT COUPLER STATUS FUNC  (E005) 
*         7. TFF071- ABORT ON OUTPUT DATA FUNCTION       (E014) 
*         8. TFF071- ABORT ON INPUT DATA FUNCTION        (E003) 
*         9. TFF071- ABORT ON .OUT. COMMAND 
*        10. TFF071- ABORT ON .IN. OR .STATUS. COMMAND
*        11. TFF071 - NPU NOT RESPONDING
*        12. TFF071- OUTPUT WT ERROR ACT=*OCT EXP=*OCT
*        13. TFF071- INPUT WT ERROR ACT=*OCT EXP=*OCT 
*        14. TFF071 - LAST COUPLER STATUS = *OCT  PASS = *DEC 
*        15. TFF071- ABORT ON LOAD ORDERWORD FUNCTION    (E016) 
*        16. TFF071- ABORT ON CLEAR NPU FUNCTION         (E200) 
* 
*   REGISTER USAGE -
* 
*         B0 = RETRY COUNTER/WORDS TO COMPARE (374B)
*         B1 = LOOP COUNTER/DATA PATTERN
*         B2 = LOGICAL DIFFERENCE ON DATA ERROR UPPER 8 BITS
*         B3 = LOGICAL DIFFERENCE ON DATA ERROR LOWER 8 BITS
*         B4 = RUNNING MESSAGE COUNTER
*         B5 = MESSAGE NUMBER IF ABORT
*         B6 = 1 - NPU CUMULATIVE STATUS FLAG 
*         B7 = ERROR COUNTER
* 
*   CALLS - 
* 
*         TFF98B - COUPLER STATUS ANALYSIS
* 
1  FORMAT TFF071- DATA XFERS PASS=*DEC
2  FORMAT DATA ERROR - ACT=*H*HHEX EXP=*H*HHEX DIFF=*H*HHEX 
3  FORMAT TFF071- WC = *OCT PASS = *DEC  BAD BYTE = *OCT
4  FORMAT TFF071- OUTPUT WT ERROR ACT=*OCT EXP=*OCT 
5  FORMAT TFF071- ABORT ON STOP CP FUNCTION           (E100)
6  FORMAT TFF071- ABORT ON START CP FUNCTION          (E040)
7  FORMAT TFF071- ABORT ON INPUT COUPLER STATUS FUNC  (E005)
10 FORMAT TFF071- ABORT ON OUTPUT DATA FUNCTION       (E014)
11 FORMAT TFF071- ABORT ON INPUT DATA FUNCTION        (E003)
12 FORMAT TFF071- ABORT ON .OUT. COMMAND
13 FORMAT TFF071- ABORT ON .IN. OR .STATUS. COMMAND 
14 FORMAT TFF071 - NPU NOT RESPONDING 
15 FORMAT TFF071 - LAST COUPLER STATUS = *OCT  PASS = *DEC
16 FORMAT TFF071- ERROR(S) IN MODULE = *DEC 
17 FORMAT TFF071- INPUT WT ERROR ACT=*OCT EXP=*OCT
20 FORMAT TFF071- ABORT ON LOAD ORDERWORD FUNCTION    (E016)
21 FORMAT --------------------------------------------------- 
22 FORMAT TFF071- ABORT ON CLEAR NPU FUNCTION         (E200)
* 
*-------- START 2550 RUNNING
* 
24 RES                            *RESERVE THE I/O CHANNEL
   B5 = 5                         *MESSAGE NUMBER IF ABORT
   FUNC 100, ABT 60               *STOP CP FUNCTION 
   B5 = 22                        *MESSAGE NUMBER IF ABORT
   FUNC 200B, ABT 60              *CLEAR NPU FUNCTION 
   DELAY 4 MSEC 
   B5 = 6                         *MESSAGE NUMBER IF ABORT
   FUNC 40, ABT 60                *START 2550 RUNNING 
   IB(504) = 0                    *CLEAR STATUS WORD
   DELAY 90 MSEC                  *NPU INITIALIZATION 
* 
*-------- DATA TRANSFER TEST
* 
   OB(500) = 1
   OB(501) = 2
   WC = 374 
30 DUP B1 TO OB FOR 374           *PUT PATTERN IN OUTBUF
   OB(373) = OB(373) .OR. 4000    *SET BIT 11 OF LAST WORD
   IF(B1 .NE. B4) GOTO 31         *IF NO MSG THIS PASS
   MSG 1(B1)TO DISPLAY,PRINT      *POST RUNING MSG
   B4 = B4 + 50D                  *NEXT PASS FOR MSG
31 RES                            *RESERVE THE I/O CHANNEL
   B5 = 20                        *MESSAGE NUMBER IF ABORT
   FUNC 16B, ABT 60               *LOAD ORDERWORD FUNCTION
   B5 = 12                        *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(500), ABT 60  *OUTPUT ORDERWORD
   B0 = 0                           *CLEAR RETRY COUNTER
32 GOSUB 50                         *GET COUPLER STATUS 
   IF(SB .AND. 10 .EQ. 10)GOTO 33   *IF MAR LOADED
   GOTO 32 WHILE(B0 + 1 .NE. 100)   *TRY STATUS 100 TIMES 
   GOTO 62                          *MAR NOT LOADED 
33 B5 = 10                          *MESSAGE NUMBER IF ABORT
   FUNC 14B, ABT 60                 *OUTPUT DATA FUNCTION 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 374 WORDS FROM OB, ABT 60    *OUTPUT DATA
   IF(WT .EQ. 374)GOTO 40 
   B5 = 374 
   MSG 4(WT,B5)TO LINE 1
   GOTO 61
40 RES                              *RESERVE THE I/O CHANNEL
   B5 = 20                          *MESSAGE NUMBER IF ABORT
   FUNC 16B, ABT 60                 *LOAD ORDERWORD FUNCTION
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(501), ABT 60    *OUTPUT ORDERWORD
   B0 = 0                           *CLEAR RETRY COUNTER
42 GOSUB 50                         *GET COUPLER STATUS 
   IF(SB .AND. 10 .EQ. 10)GOTO 43   *IF MAR LOADED
   GOTO 42 WHILE(B0 + 1 .NE. 100)   *TRY STATUS 100 TIMES 
   GOTO 62                          *MAR NOT LOADED 
43 B5 = 11                          *MESSAGE NUMBER IF ABORT
   FUNC 3, ABT 60                   *INPUT DATA FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 500 WORDS TO IB, ABT 60       *INPUT DATA 
   B0 = 374                         *WORDS TO COMPARE 
   IF(WT .EQ. 374)GOTO 44 
   MSG 17(WT,B0)TO LINE 1 
   GOTO 61
44 COMPARE IB TO OB FOR B0, ABT 70  *CHECK THE DATA 
45 GOTO 30 WHILE (B1 + 1 .NE. 400)  *LOOP 400 TIMES 
46 IF(B7 .EQ. 0)GOTO 47             *IF NO ERRORS IN MODULE 
   MSG 16(B7) TO DAYFILE          *REPORT ERRORS TO DAYFILE 
47 EXIT 
* 
*-------- COUPLER STATUS SUBROUTINE 
* 
50 B5 = 7                           *MESSAGE NUMBER IF ABORT
   DELAY 20 MSEC
   FUNC 5, ABT 60                   *COUPLER STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   STATUS 1 WORDS TO SB, ABT 60     *INPUT COUPLER STATUS 
   IB(504) = IB(504) .OR. SB
   RETURN                           *EXIT SUBROUTINE
* 
*-------- ABORT PROCESSOR 
* 
60 ENDSUB                           *END ACTIVE SUBROUTINES 
   MSG B5 TO LINE 1                 *COMMAND THAT ABORTED 
   MSG EM TO LINE 2                 *REASON FOR THE ABORT 
61 B7 = B7 + 1                      *BUMP ERROR COUNTER 
   B1 = B1 + 1                      *BUMP PASS COUNT
   PICTURE
   HALT 
   MSG 21 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 46             *IF MORE THAN 5 ERRORS
   MSG 1(B1) TO DISPLAY             *POST RUNNING MSG 
   GOTO 24                          *RESTART THE TEST 
62 MSG 14 TO LINE 1                 *POST REG NOT LOADED MSG
   MSG 15(SB,B1) TO LINE 2          *POST COUPLER STATUS MSG
   B6 = 1                           *NPU STATUS FLAG
   CALL 98B                         *STATUS ANALYSIS
   GOTO 61
* 
*-------- DATA ERROR PROCESSOR
* 
70 B0 = B0 .AND. 7776               *CORRECT ERROR POINTER
   B2 = OB(B0) .XOR. IB(B0)         *CALCULATE DIFFERENCE 
   B3 = OB(B0+1) .XOR. IB(B0+1) 
   MSG 2(IB(B0),IB(B0+1),OB(B0),OB(B0+1),B2,B3)TO LINE 1
   B0 = B0 .RS. 1 
   MSG 3(WC,B1,B0)TO LINE 2 
   B7 = B7 + 1                      *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 21 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 46             *IF MORE THAN 5 ERRORS
   MSG 1(B1) TO DISPLAY             *POST RUNNING MSG 
   GOTO 45                          *CONTINUE THE TEST
   END 24 
COMPILE   - TFF071 -
   MODULE TFF08,6000(64),LOCK  *VARIABLE LENGTH TRANSFERS 
***       TFF08 - VARIABLE LENGTH DATA TRANSFERS
**        TFF08 - VARIABLE LENGTH DATA TRANSFERS
*         --------------------------------------
* 
*   OVERVIEW -
* 
*         TFF08 VERIFIES VARIABLE LENGTH TRANSFERS BETWEEN THE
*         PERIPHERAL PROCESSOR (PPU) AND THE COMMUNICATIONS PROCESSOR.
*         THIS VERIFICATION IS ACCOMPLISHED BY LOADING A SMALL PROGRAM
*         INTO THE NPU WHICH WILL SET UP A BUFFER IN THE NPU MEMORY AND 
*         THEN LOAD THE MEMORY ADDRESS REGISTER WITH THE ADDRESS OF THE 
*         BUFFER.  THE OUTPUT PROGRAM FUNCTION IS USED TO LOAD THE
*         PROGRAM INTO THE NPU.  THE PROGRAM IS STARTED WITH THE START
*         CP FUNCTION.  THE DATA TRANSFERS BEGIN WHEN THE NPU LOADS THE 
*         MEMORY ADDRESS REGISTER (MAR) WITH THE ADDRESS OF THE BUFFER. 
*         AFTER A BUFFER OF DATA HAS BEEN SENT TO THE NPU BUFFER THE
*         NPU RELOADS THE MEMORY ADDRESS REGISTER AND THE PPU THEN
*         INPUTS THE BUFFER.  THE DATA IS THEN CHECKED AND THE PROCESS
*         REPEATED 400B TIMES.  THE DATA PATTERNS USED IN THIS MODULE 
*         ARE 0000B TO 374B.  THE BUFFER IN THE NPU START AT LOCATION 
*         1000 HEX AND IS 81 HEX LOCATIONS LONG.  BUFFER CHAINING AND 
*         INTERRUPTS ARE NOT TESTED BY THIS MODULE.  THE DATA TRANSFERS 
*         INCREMENT IN LENGTH FROM 1 THRU 374B PPU WORDS. 
* 
*   DESCRIPTION - 
* 
*         1. POST RUNNING MESSAGE, CALL TFF98A IF P1 NOT EQUAL TO ZERO. 
*         2. RESERVE THE I/O CHANNEL. 
*         3. FUNCTION 200B, CLEAR NPU.  GO TO STEP 13 IF THIS FUNCTION
*            ABORTS.
*         4. FUNCTION 400B, CLEAR COUPLER.  GO TO STEP 13 IF THIS 
*            FUNCTION ABORTS. 
*         5. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 13 IF THIS 
*            FUNCTION ABORTS. 
*         6. INPUT COUPLER STATUS.  GO TO STEP 13 IF THIS COMMAND 
*            ABORTS.
*         7. IF BIT 2 OF COUPLER STATUS (NPU REGISTER LOADED) IS SET GO 
*            TO STEP 8.  OTHERWISE, GO TO STEP 10.
*         8. FUNCTION 4, INPUT NPU STATUS.  GO TO STEP 13 IF THIS 
*            FUNCTION ABORTS. 
*         9. INPUT NPU STATUS.  GO TO STEP 13 IF THIS COMMAND ABORTS. 
*        10. FUNCTION 15B, OUTPUT PROGRAM.  GO TO STEP 13 IF THIS 
*            FUNCTION ABORTS. 
*        11. OUTPUT 146B WORDS FROM OUTPUT BUFFER (THIS IS THE PROGRAM
*            THAT EXECUTES IN THE 2550).  GO TO STEP 13 IF THIS COMMAND 
*            ABORTS.
*        12. EXIT TO MODULE TFF081. 
*        13. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            REASON FOR THE ABORT.  HALT, THEN GO TO STEP 2.
* 
*         - NOTE -
* 
*         THE FOLLOWING DESCRIPTION APPLIES TO THE TEST PROGRAM 
*         WHICH IS DOWNLINE LOADED INTO THE 2550 BY THIS MODULE.
* 
*         1. CLEAR ALL PROGRAM PROTECT BITS FOR ADDRESS 1000 THRU 
*            3FFF.
*         2. INPUT THE ORDERWORD REGISTER.  IF THE ORDERWORD IS EQUAL 
*            TO 1, GO TO STEP 3.  ELSE REPEAT THIS STEP.
*         3. INPUT COUPLER STATUS.
*         4. LOAD THE BUFFER LENGTH REGISTER WITH 80 HEX. 
*         5. SET UP FWA OF BUFFER WITH LCD/FCD OF FF04. 
*         6. SET DONT BUFFER CHAIN FLAG IN BUFFER FWA + 1.
*         7. LOAD THE MEMORY ADDRESS REGISTER WITH THE BUFFER 
*            ADDRESS (1000 HEX).
*         8. INPUT THE ORDERWORD REGISTER.  IF THE ORDERWORD IS EQUAL 
*            TO 2, GO TO STEP 9.  ELSE REPEAT THIS STEP.
*         9. LOAD THE MEMORY ADDRESS REGISTER WITH THE BUFFER 
*            ADDRESS (1000 HEX), THEN GO TO STEP 2. 
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. TFF08 - ABORT ON CLEAR COUPLER FUNCTION     (E400) 
*         3. TFF08 - ABORT ON CLEAR NPU FUNCTION         (E200) 
*         4. TFF08 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015) 
*         5. TFF08 - ABORT ON INPUT NPU STATUS FUNCTION  (E004) 
*         6. TFF08 - ABORT ON INPUT COUPLER STATUS FUNC  (E005) 
*         7. TFF08 - ABORT ON .OUT. COMMAND 
*         8. TFF08 - ABORT ON .IN. COMMAND
*         9. TFF08 - OUTPUT WT ERROR ACT=*OCT EXP=*OCT
* 
*   REGISTER USAGE -
* 
*         B5 = MESSAGE NUMBER IF ABORT
*         B7 = ERROR COUNTER
* 
*   MODULES CALLED -
* 
*         TFF98A
* 
1  FORMAT TFF08 - VARIABLE LENGTH DATA TRANSFERS
3  FORMAT TFF08 - ABORT ON CLEAR COUPLER FUNCTION     (E400)
4  FORMAT TFF08 - ABORT ON CLEAR NPU FUNCTION         (E200)
5  FORMAT TFF08 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015)
6  FORMAT TFF08 - ABORT ON INPUT NPU STATUS FUNCTION  (E004)
7  FORMAT TFF08 - ABORT ON INPUT COUPLER STATUS FUNC  (E005)
12 FORMAT TFF08 - ABORT ON .OUT. COMMAND
13 FORMAT TFF08 - ABORT ON .IN. COMMAND 
14 FORMAT TFF08 - OUTPUT WT ERROR ACT=*OCT EXP=*OCT 
16 FORMAT TFF08 - ERROR(S) IN MODULE = *DEC 
17 FORMAT --------------------------------------------------- 
   DATA(OB,H)E000,1000       *LOAD Q WITH 1000
   DATA(OB(4),H)0700         *CLEAR PROTECT BIT 
   DATA(OB(6),H)0D01         *ADD 1 TO Q
   DATA(OB(10),H)0814        *TRANSFER Q TO A 
   DATA(OB(12),H)B000,3FFF   *TEST IF A = 3FFF
   DATA(OB(16),H)0101        *SKIP 1 IF A = 0 
   DATA(OB(20),H)18F9        *JUMP BACK 6 LOCATIONS 
   DATA(OB(22),H)E000,0660   *LOAD Q READ ORDERWORD 
   DATA(OB(26),H)0B04        *START I/O(ORDERWORD TO A) 
   DATA(OB(30),H)0FCF        *LEFT SHIFT A 15 
   DATA(OB(32),H)0131        *SKIP 1 IF A NEGATIVE
   DATA(OB(34),H)18FA        *JUMP BACK 5 LOCATIONS 
   DATA(OB(36),H)E000,0650   *LOAD Q COUPLER STATUS FUNC
   DATA(OB(42),H)0B04        *START I/O(COUPLER STATUS TO A)
   DATA(OB(44),H)6400,00FF   *SAVE STATUS AT 00FF 
   DATA(OB(50),H)E000,0658   *LOAD Q WITH BUFFER LENGTH FUNC
   DATA(OB(54),H)C000,0080   *LOAD A WITH 80(BUFFER LENGTH) 
   DATA(OB(60),H)0B04        *START I/O(A TO BUFFER LENGTH) 
   DATA(OB(62),H)C000,FF04   *LOAD A WITH FF04(LCD/FCD) 
   DATA(OB(66),H)6400,1000   *STORE A AT 1000(BUFFER FWA) 
   DATA(OB(72),H)C000,8001   *LOAD A WITH 8001(DONT CHAIN)
   DATA(OB(76),H)6400,1001   *STORE A AT FWA+1 OF BUFFER
   DATA(OB(102),H)E000,066C  *LOAD Q WITH LOAD MAR FUNC 
   DATA(OB(106),H)C000,1000  *LOAD A WITH 1000(FWA OF BUFFER) 
   DATA(OB(112),H)0B04       *START I/O(A TO MAR) 
   DATA(OB(114),H)E000,0660  *LOAD Q INPUT ORDERWORD FUNC 
   DATA(OB(120),H)0B04       *START I/O(ORDERWORD TO A) 
   DATA(OB(122),H)0FCE       *LEFT SHIFT A 14 PLACES
   DATA(OB(124),H)0131       *SKIP 1 IF A NEGATIVE
   DATA(OB(126),H)18FA       *JUMP BACK 5 LOCATIONS 
   DATA(OB(130),H)E000,066C  *LOAD Q WITH 066C(LOAD MAR)
   DATA(OB(134),H)C000,1000  *LOAD A WITH BUFFER ADDRESS
   DATA(OB(140),H)0B04       *START I/O(A TO MAR) 
   DATA(OB(142),H)1400,0009  *JUMP TO START OF PROGRAM
20 MSG 1 TO DISPLAY,PRINT           *POST RUNNING MESSAGE 
   IF (P1.EQ.0) GOTO 21             *NOT SECOND COUPLER 
   B0 = 10                          *INDEX FOR THIS MODULE
   COPY OB TO IB FOR 500B           *SAVE NPU CODE IN IB
   CALL 98A                         *HAVE CODE CHANGED
* 
*-------- DOWNLINE LOAD 2550
* 
21 RES                              *RESERVE THE I/O CHANNEL
   B5 = 4                           *MESSAGE NUMBER IF ABORT
   FUNC 200, ABT 60                 *CLEAR NPU FUNCTION 
   B5 = 3                           *MESSAGE NUMBER IF ABORT
   FUNC 400, ABT 60                 *CLEAR COUPLER FUNCTION 
   B5 = 7                           *MESSAGE NUMBER IF ABORT
   FUNC 5, ABT 60                   *COUPLER STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 1 WORDS TO IB, ABT 60         *INPUT COUPLER STATUS 
   IF(IB .AND. 4 .NE. 4) GOTO 22    *NPU REGISTER NOT LOADED
   B5 = 6                           *MESSAGE NUMBER IF ABORT
   FUNC 4, ABT 60                   *NPU STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 1 WORDS TO IB, ABT 60         *INPUT NPU REGISTER 
22 B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 15, ABT 60                  *OUTPUT PROGRAM FUNCTION
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 146 WORDS FROM OB, ABT 60    *OUTPUT TEST PROGRAM
   IF(WT .EQ. 146)GOTO 23 
   B5 = 146 
   MSG 14(WT,B5)TO LINE 1 
   GOTO 61
23 IF (B7 .EQ. 0)GOTO 47            *IF NO ERRORS IN MODULE 
   MSG 16(B7) TO DAYFILE           *REPORT ERRORS TO DAYFILE
   IF(B7 .LT. 5)GOTO 47            *IF NPU LOADED 
   EXIT 
47 EXIT TO 081
* 
*-------- ABORT PROCESSOR 
* 
60 MSG B5 TO LINE 1                 * COMMAND THAT ABORTED
   MSG EM TO LINE 2                 * REASON FOR THE ABORT
61 B7 = B7 + 1                      *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 17 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 23             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 21                          *RESTART THE TEST 
   END 20 
COMPILE   - TFF08 - 
   MODULE TFF081,6000(64),LOCK  *VARIABLE LENGTH TRANSFERS
***       TFF081 - VARIABLE LENGTH DATA TRANSFERS 
**        TFF081 - VARIABLE LENGTH DATA TRANSFERS 
*         --------------------------------------- 
* 
*   DESCRIPTION - (TFF081)
* 
*         1. RESERVE THE I/O CHANNEL. 
*         2. FUNCTION 100B, STOP CP.  GO TO STEP 24 IF THIS FUNCTION
*            ABORTS.
*         3. FUNCTION 40B, START CP.  GO TO STEP 24 IF THIS FUNCTION
*            ABORTS.
*         4. DUPE BUFFER SIZE WORDS OF DATA PATTERN TO OUTPUT BUFFER. 
*         5. SET BIT 11 OF LAST WORD OF DATA PATTERN IN OUTPUT BUFFER.
*            THIS BIT INDICATES END OF TRANSMISSION.
*         6. RESERVE THE I/O CHANNEL. 
*         7. FUNCTION 16B, LOAD ORDERWORD.  GO TO STEP 24 IF THIS 
*            FUNCTION ABORTS. 
*         8. OUTPUT THE ORDERWORD.  GO TO STEP 24 IF THIS COMMAND 
*            ABORTS.
*         9. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 24 IF THIS 
*            FUNCTION ABORTS. 
*        10. INPUT COUPLER STATUS TO STATUS BUFFER.  GO TO STEP 24 IF 
*            THIS COMMAND ABORTS. 
*        11. IF COUPLER STATUS IS EQUAL TO 10B (MEMORY ADDRESS REGISTER 
*            LOADED) GO TO STEP 12.  ELSE GO TO STEP 9, 100B TIMES, 
*            THEN POST ERROR MESSAGE, HALT, THEN GO TO STEP 1.
*        12. FUNCTION 14B, OUTPUT DATA.  GO TO STEP 24 IF THIS FUNCTION 
*            ABORTS.
*        13. OUTPUT BUFFER SIZE WORDS OF DATA FROM OUTPUT BUFFER. 
*            GO TO STEP 24 IF THIS COMMAND ABORTS.
*        14. RESERVE THE I/O CHANNEL. 
*        15. FUNCTION 16B, LOAD ORDERWORD.  GO TO STEP 24 IF THIS 
*            FUNCTION ABORTS. 
*        16. OUTPUT THE ORDERWORD.  GO TO STEP 24 IF THIS COMMAND 
*            ABORTS.
*        17. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 24 IF THIS 
*            FUNCTION ABORTS. 
*        18. INPUT COUPLER STATUS TO STATUS BUFFER.  GO TO STEP 24 IF 
*            THIS COMMAND ABORTS. 
*        19. IF COUPLER STATUS EQUAL TO 10B (MEMORY ADDRESS REGISTER
*            LOADED) GO TO STEP 24.  ELSE GO TO STEP 17, 100B TIMES,
*            POST NPU NOT RESPONDING MESSAGE, CALL MODULE 98B FOR 
*            STATUS ANALYSIS, HALT, THEN GO TO STEP 1.
*        20. FUNCTION 3, INPUT DATA.  GO TO STEP 24 IF THIS FUNCTION
*            ABORTS.
*        21. INPUT BUFFER SIZE WORDS (DATA PATTERN).  GO TO STEP 24 
*            IF THIS COMMAND ABORTS.
*        22. COMPARE INPUT AND OUTPUT BUFFERS.  GO TO STEP 25 IF A
*            MISCOMPARE OCCURS. 
*        23. INCREMENT THE DATA PATTERN AND THE BUFFER SIZE, IF NOT 
*            END OF DATA PATTERNS GO TO STEP 4, OTHERWISE EXIT. 
*        24. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            REASON FOR THE ABORT.  HALT, THEN GO TO STEP 1.
*        25. WE ARRIVE AT THIS STEP IF A MISCOMPARE OCCURS BETWEEN WHAT 
*            WAS SENT TO THE NPU AND WHAT WAS RETURNED.  POST MESSAGES
*            SHOWING THE ACTUAL AND EXPECTED DATA AND THE DIFFERENCES.
*            HALT, THEN GO TO STEP 23.
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. DATA ERROR - ACT=*H*HHEX EXP=*H*HHEX DIFF=*H*HHEX
*         3. TFF081- WC = *OCT PASS = *DEC BAD BYTE = *OCT
*         4. TFF081- ABORT ON STOP CP FUNCTION           (E100) 
*         5. TFF081- ABORT ON START CP FUNCTION          (E040) 
*         6. TFF081- ABORT ON INPUT COUPLER STATUS FUNC  (E005) 
*         7. TFF081- ABORT ON OUTPUT DATA FUNCTION       (E014) 
*         8. TFF081- ABORT ON INPUT DATA FUNCTION        (E003) 
*         9. TFF081- ABORT ON .OUT. COMMAND 
*        10. TFF081- ABORT ON .IN. OR .STATUS. COMMAND
*        11. TFF081 - NPU NOT RESPONDING
*        12. TFF081 - LAST COUPLER STATUS = *OCT  PASS = *DEC 
*        13. TFF081- OUTPUT WT ERROR ACT=*OCT EXP=*OCT
*        14. TFF081- INPUT WT ERROR ACT=*OCT EXP=*OCT 
*        15. TFF081- ABORT ON LOAD ORDERWORD FUNCTION    (E016) 
*        16. TFF081- ABORT ON CLEAR NPU FUNCTION         (E200) 
* 
*   REGISTER USAGE -
* 
*         B0 = RETRY COUNTER/WORDS TO COMPARE 
*         B1 = DATA PATTERN/BUFFER SIZE 
*         B2 = LOGICAL DIFFERENCE ON DATA ERROR UPPER 8 BITS
*         B3 = LOGICAL DIFFERENCE ON DATA ERROR LOWER 8 BITS
*         B4 = RUNNING MESSAGE COUNTER
*         B5 = MESSAGE NUMBER IF ABORT
*         B6 = 1 - NPU CUMULATIVE STATUS FLAG 
*         B7 = ERROR COUNTER
* 
*   CALLS - 
* 
*         TFF98B - COUPLER STATUS ANALYSIS
* 
1  FORMAT TFF081-VARY LENGTH PASS=*DEC
2  FORMAT DATA ERROR - ACT=*H*HHEX EXP=*H*HHEX DIFF=*H*HHEX 
3  FORMAT TFF081- WC = *OCT PASS = *DEC BAD BYTE = *OCT 
4  FORMAT TFF081- OUTPUT WT ERROR ACT=*OCT EXP=*OCT 
5  FORMAT TFF081- ABORT ON STOP CP FUNCTION           (E100)
6  FORMAT TFF081- ABORT ON START CP FUNCTION          (E040)
7  FORMAT TFF081- ABORT ON INPUT COUPLER STATUS FUNC  (E005)
10 FORMAT TFF081- ABORT ON OUTPUT DATA FUNCTION       (E014)
11 FORMAT TFF081- ABORT ON INPUT DATA FUNCTION        (E003)
12 FORMAT TFF081- ABORT ON .OUT. COMMAND
13 FORMAT TFF081- ABORT ON .IN. OR .STATUS. COMMAND 
14 FORMAT TFF081 - NPU NOT RESPONDING 
15 FORMAT TFF081 - LAST COUPLER STATUS = *OCT  PASS = *DEC
16 FORMAT TFF081- ERROR(S) IN MODULE = *DEC 
17 FORMAT TFF081- INPUT WT ERROR ACT=*OCT EXP=*OCT
20 FORMAT TFF081- ABORT ON LOAD ORDERWORD FUNCTION   (E016) 
21 FORMAT --------------------------------------------------- 
22 FORMAT TFF081- ABORT ON CLEAR NPU FUNCTION         (E200)
* 
*-------- START 2550 RUNNING
* 
24 RES                              *RESERVE THE I/O CHANNEL
   B4 = 1 
   B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 100, ABT 60                 *STOP CP FUNCTION 
   B5 = 22                          *MESSAGE NUMBER IF ABORT
   FUNC 200B, ABT 60                *CLEAR NPU FUNCTION 
   DELAY 4 MSEC 
   B5 = 6                           *MESSAGE NUMBER IF ABORT
   FUNC 40, ABT 60                  *START 2550 RUNNING 
   IB(504) = 0                      *CLEAR STATUS WORD
   DELAY 90 MSEC                    *NPU INITIALIZATION 
* 
*-------- DATA TRANSFER TEST
* 
   OB(500) = 1
   OB(501) = 2
   B1 = 1 
30 DUP B1 TO OB FOR B1              *PUT PATTERN IN OUTBUF
   B5 = B1 - 1                      *LAST WORD OF BUFFER
   OB(B5) = OB(B5) .OR. 4000        *SET BIT 11 OF LAST WORD
   IF(B1 .NE. B4) GOTO 31           *IF NO MSG THIS PASS
   MSG 1(B1)TO DISPLAY,PRINT        *POST RUNNING MSG 
   B4 = B4 + 50D                    *NEXT PASS FOR MSG
31 RES                              *RESERVE THE I/O CHANNEL
   B5 = 20                          *MESSAGE NUMBER IF ABORT
   FUNC 16B, ABT 60                 *LOAD ORDERWORD FUNCTION
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(500), ABT 60    *OUTPUT THE ORDERWORD
   B0 = 0                           *CLEAR THE RETRY COUNTER
32 GOSUB 50                         *GET STATUS 
   IF(SB .AND. 10 .EQ. 10)GOTO 33   *IF MAR LOADED
   GOTO 32 WHILE(B0 + 1 .NE. 100)   *TRY STATUS 100 TIMES 
   GOTO 62                          *MAR NOT LOADED 
33 B5 = 10                          *MESSAGE NUMBER IF ABORT
   FUNC 14B, ABT 60                 *OUTPUT DATA FUNCTION 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT B1 WORDS FROM OB, ABT 60     *OUTPUT DATA
   IF(WT .EQ. B1)GOTO 40
   MSG 4(WT,B1)TO LINE 1
   GOTO 61
40 RES                              *RESERVE THE I/O CHANNEL
   B5 = 20                          *MESSAGE NUMBER IF ABORT
   FUNC 16B, ABT 60                 *LOAD ORDERWORD FUNCTION
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(501), ABT 60  *OUTPUT THE ORDERWORD
   B0 = 0                           *CLEAR THE RETRY COUNTER
42 GOSUB 50                         *GET STATUS 
   IF(SB .AND. 10 .EQ. 10)GOTO 43   *IF MAR LOADED
   GOTO 42 WHILE(B0 + 1 .NE. 100)   *TRY COUPLER STATUS 100 TIMES 
   GOTO 62                          *MAR NOT LOADED 
43 B5 = 11                          *MESSAGE NUMBER IF ABORT
   FUNC 3, ABT 60                   *INPUT DATA FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 500 WORDS TO IB, ABT 60       *INPUT DATA 
   IF(WT .EQ. B1)GOTO 44
   MSG 17(WT,B1)TO LINE 1 
   GOTO 61
44 B0 = B1                          *WORDS TO COMPARE 
   COMPARE IB TO OB FOR B0, ABT 70  *CHECK THE DATA 
45 GOTO 30 WHILE (B1 + 1 .NE. 375)  *LOOP 374B TIMES
46 IF(B7 .EQ. 0)GOTO 47             *IF NO ERRORS IN MODULE 
   MSG 16(B7) TO DAYFILE           *REPORT ERRORS TO DAYFILE
47 EXIT 
* 
*-------- COUPLER STATUS SUBROUTINE 
* 
50 B5 = 7                           *MESSAGE NUMBER IF ABORT
   DELAY 20 MSEC
   FUNC 5, ABT 60                   *COUPLER STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   STATUS 1 WORDS TO SB, ABT 60     *INPUT COUPLER STATUS 
   IB(504) = IB(504) .OR. SB
   RETURN                           *EXIT SUBROUTINE
* 
*-------- ABORT PROCESSOR 
* 
60 ENDSUB                           *END ACTIVE SUBROUTINES 
   MSG B5 TO LINE 1                 *COMMAND THAT ABORTED 
   MSG EM TO LINE 2                 *REASON FOR THE ABORT 
61 B7 = B7 + 1                      *BUMP ERROR COUNTER 
   B1 = B1 + 1                      *BUMP PASS COUNT
   PICTURE
   HALT 
   MSG 21 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 46             *IF MORE THAN 5 ERRORS
   MSG 1(B1) TO DISPLAY             *POST RUNNING MSG 
   GOTO 24                          *RESTART THE TEST 
62 MSG 14 TO LINE 1                 *POST REG NOT LOADED MSG
   MSG 15(SB,B1) TO LINE 2          *POST COUPLER STATUS MSG
   B6 = 1                           *NPU STATUS FLAG
   CALL 98B                         *STATUS ANALYSIS
   GOTO 61
* 
*-------- DATA ERROR PROCESSOR
* 
70 B0 = B0 .AND. 7776               *CORRECT ERROR POINTER
   B2 = OB(B0) .XOR. IB(B0)         *CALCULATE DIFFERENCE 
   B3 = OB(B0+1) .XOR. IB(B0+1) 
   MSG 2(IB(B0),IB(B0+1),OB(B0),OB(B0+1),B2,B3)TO LINE 1
   B0 = B0 .RS. 1 
   MSG 3(B1,B1,B0)TO LINE 2 
   B7 = B7 + 1                      *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 21 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 46             *IF MORE THAN 5 ERRORS
   MSG 1(B1) TO DISPLAY             *POST RUNNING MSG 
   GOTO 45                          *CONTINUE THE TEST
   END 24 
COMPILE   - TFF081 -
   MODULE TFF09,6000(64),LOCK  *RANDOM DATA TRANSFERS 
***       TFF09 - RANDOM DATA TRANSFERS 
**        TFF09 - RANDOM DATA TRANSFERS 
*         ----------------------------- 
* 
*   OVERVIEW -
* 
*         TFF09 VERIFIES RANDOM DATA TRANSFERS BETWEEN THE PERIPHERAL 
*         PROCESSOR (PPU) AND THE COMMUNICATIONS PROCESSOR (NPU). 
*         THIS VERIFICATION IS ACCOMPLISHED BY LOADING A SMALL PROGRAM
*         INTO THE NPU WHICH WILL SET UP A BUFFER IN THE NPU MEMORY AND 
*         THEN LOAD THE MEMORY ADDRESS REGISTER WITH THE ADDRESS OF THE 
*         BUFFER.  THE OUTPUT PROGRAM FUNCTION IS USED TO LOAD THE
*         PROGRAM INTO THE NPU.  THE PROGRAM IS STARTED WITH THE START
*         CP FUNCTION.  THE DATA TRANSFERS BEGIN WHEN THE NPU LOADS THE 
*         MEMORY ADDRESS REGISTER (MAR) WITH THE ADDRESS OF THE BUFFER. 
*         AFTER A BUFFER OF DATA HAS BEEN SENT TO THE NPU BUFFER THE
*         NPU RELOADS THE MEMORY ADDRESS REGISTER AND THE PPU THEN
*         INPUTS THE BUFFER.  THE DATA IS THEN CHECKED AND THE PROCESS
*         REPEATED 400B TIMES.  THE DATA PATTERNS AND BUFFER SIZES USED 
*         IN THIS MODULE ARE RANDOM NUMBERS BETWEEN 1 AND 374B. 
*         THE BUFFER IN THE NPU STARTS AT LOCATION 1000 HEX AND IS
*         81 HEX LOCATIONS LONG.  BUFFER CHAINING AND INTERRUPTS ARE
*         NOT TESTED BY THIS MODULE.
* 
*   DESCRIPTION - 
* 
*         1. POST RUNNING MESSAGE, CALL TFF98A IF P1 NOT EQUAL TO ZERO. 
*         2. RESERVE THE I/O CHANNEL. 
*         3. FUNCTION 200B, CLEAR NPU.  GO TO STEP 13 IF THIS FUNCTION
*            ABORTS.
*         4. FUNCTION 400B, CLEAR COUPLER.  GO TO STEP 13 IF THIS 
*            FUNCTION ABORTS. 
*         5. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 13 IF THIS 
*            FUNCTION ABORTS. 
*         6. INPUT COUPLER STATUS.  GO TO STEP 13 IF THIS COMMAND 
*            ABORTS.
*         7. IF BIT 2 OF COUPLER STATUS (NPU REGISTER LOADED) IS SET GO 
*            TO STEP 8.  OTHERWISE, GO TO STEP 10.
*         8. FUNCTION 4, INPUT NPU STATUS.  GO TO STEP 13 IF THIS 
*            FUNCTION ABORTS. 
*         9. INPUT NPU STATUS.  GO TO STEP 13 IF THIS COMMAND ABORTS. 
*        10. FUNCTION 15B, OUTPUT PROGRAM.  GO TO STEP 13 IF THIS 
*            FUNCTION ABORTS. 
*        11. OUTPUT 146B WORDS FROM OUTPUT BUFFER (THIS IS THE PROGRAM
*            THAT EXECUTES IN THE 2550).  GO TO STEP 13 IF THIS COMMAND 
*            ABORTS.
*        12. EXIT TO MODULE TFF091. 
*        13. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            REASON FOR THE ABORT.  HALT, THEN GO TO STEP 2.
* 
*         - NOTE -
* 
*         THE FOLLOWING DESCRIPTION APPLIES TO THE TEST PROGRAM 
*         WHICH IS DOWNLINE LOADED INTO THE 2550 BY THIS MODULE.
* 
*         1. CLEAR ALL PROGRAM PROTECT BITS FOR ADDRESS 1000 THRU 
*            3FFF.
*         2. INPUT THE ORDERWORD REGISTER.  IF THE ORDERWORD IS EQUAL 
*            TO 1, GO TO STEP 3.  ELSE REPEAT THIS STEP.
*         3. INPUT COUPLER STATUS.
*         4. LOAD THE BUFFER LENGTH REGISTER WITH 80 HEX. 
*         5. SET UP FWA OF BUFFER WITH LCD/FCD OF FF04. 
*         6. SET DONT BUFFER CHAIN FLAG IN BUFFER FWA + 1.
*         7. LOAD THE MEMORY ADDRESS REGISTER WITH THE BUFFER 
*            ADDRESS (1000 HEX).
*         8. INPUT THE ORDERWORD REGISTER.  IF THE ORDERWORD IS EQUAL 
*            TO 2, GO TO STEP 9.  ELSE REPEAT THIS STEP.
*         9. LOAD THE MEMORY ADDRESS REGISTER WITH THE BUFFER 
*            ADDRESS (1000 HEX), THEN GO TO STEP 2. 
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. TFF09 - ABORT ON CLEAR COUPLER FUNCTION     (E400) 
*         3. TFF09 - ABORT ON CLEAR NPU FUNCTION         (E200) 
*         4. TFF09 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015) 
*         5. TFF09 - ABORT ON INPUT NPU STATUS FUNCTION  (E004) 
*         6. TFF09 - ABORT ON INPUT COUPLER STATUS FUNC  (E005) 
*         7. TFF09 - ABORT ON .OUT. COMMAND 
*         8. TFF09 - ABORT ON .IN. COMMAND
*         9. TFF09 - OUTPUT WT ERROR EXP=*OCT ACT=*OCT
* 
*   REGISTER USAGE -
* 
*         B5 = MESSAGE NUMBER IF ABORT
*         B7 = ERROR COUNTER
* 
*   MODULES CALLED -
* 
*         TFF98A
* 
1  FORMAT TFF09 - RANDOM DATA TRANSFERS 
3  FORMAT TFF09 - ABORT ON CLEAR COUPLER FUNCTION     (E400)
4  FORMAT TFF09 - ABORT ON CLEAR NPU FUNCTION         (E200)
5  FORMAT TFF09 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015)
6  FORMAT TFF09 - ABORT ON INPUT NPU STATUS FUNCTION  (E004)
7  FORMAT TFF09 - ABORT ON INPUT COUPLER STATUS FUNC  (E005)
12 FORMAT TFF09 - ABORT ON .OUT. COMMAND
13 FORMAT TFF09 - ABORT ON .IN. COMMAND 
14 FORMAT TFF09 - OUTPUT WT ERROR EXP=*OCT ACT=*OCT 
16 FORMAT TFF09 - ERROR(S) IN MODULE = *DEC 
17 FORMAT --------------------------------------------------- 
   DATA(OB,H)E000,1000       *LOAD Q WITH 1000
   DATA(OB(4),H)0700         *CLEAR PROTECT BIT 
   DATA(OB(6),H)0D01         *ADD 1 TO Q
   DATA(OB(10),H)0814        *TRANSFER Q TO A 
   DATA(OB(12),H)B000,3FFF   *TEST IF A = 3FFF
   DATA(OB(16),H)0101        *SKIP 1 IF A = 0 
   DATA(OB(20),H)18F9        *JUMP BACK 6 LOCATIONS 
   DATA(OB(22),H)E000,0660   *LOAD Q READ ORDERWORD FUNC
   DATA(OB(26),H)0B04        *START I/O(ORDERWORD TO A) 
   DATA(OB(30),H)0FCF        *LEFT SHIFT A 15 
   DATA(OB(32),H)0131        *SKIP 1 IF A NEGATIVE
   DATA(OB(34),H)18FA        *JUMP BACK 5 LOCATIONS 
   DATA(OB(36),H)E000,0650   *LOAD Q COUPLER STATUS FUNC
   DATA(OB(42),H)0B04        *START I/O(COUPLER STATUS TO A)
   DATA(OB(44),H)6400,00FF   *SAVE STATUS AT 00FF 
   DATA(OB(50),H)E000,0658   *LOAD Q WITH BUFFER LENGTH FUNC
   DATA(OB(54),H)C000,0080   *LOAD A WITH 80(BUFFER LENGTH) 
   DATA(OB(60),H)0B04        *START I/O(A TO BUFFER LENGTH) 
   DATA(OB(62),H)C000,FF04   *LOAD A WITH FF04(LCD/FCD) 
   DATA(OB(66),H)6400,1000   *STORE A AT 1000(BUFFER FWA) 
   DATA(OB(72),H)C000,8001   *LOAD A WITH 8001(DONT CHAIN)
   DATA(OB(76),H)6400,1001   *STORE A AT FWA+1 OF BUFFER
   DATA(OB(102),H)E000,066C  *LOAD Q WITH LOAD MAR FUNC 
   DATA(OB(106),H)C000,1000  *LOAD A WITH 1000(FWA OF BUFFER) 
   DATA(OB(112),H)0B04       *START I/O(A TO MAR) 
   DATA(OB(114),H)E000,0660  *LOAD Q INPUT ORDERWORD FUNC 
   DATA(OB(120),H)0B04       *START I/O(ORDERWORD TO A) 
   DATA(OB(122),H)0FCE       *LEFT SHIFT A 14 PLACES
   DATA(OB(124),H)0131       *SKIP 1 IF A NEGATIVE
   DATA(OB(126),H)18FA       *JUMP BACK 5 LOCATIONS 
   DATA(OB(130),H)E000,066C  *LOAD Q WITH 066C(LOAD MAR)
   DATA(OB(134),H)C000,1000  *LOAD A WITH BUFFER ADDRESS
   DATA(OB(140),H)0B04       *START I/O(A TO MAR) 
   DATA(OB(142),H)1400,0009  *JUMP TO START OF PROGRAM
20 MSG 1 TO DISPLAY,PRINT           *POST RUNNING MESSAGE 
   IF (P1.EQ.0) GOTO 21             *NOT SECOND COUPLER 
   B0 = 10                          *INDEX FOR THIS MODULE
   COPY OB TO IB FOR 500B           *SAVE NPU CODE IN IB
   CALL 98A                         *HAVE CODE CHANGED
* 
*-------- DOWNLINE LOAD 2550
* 
21 RES                              *RESERVE THE I/O CHANNEL
   B5 = 4                           *MESSAGE NUMBER IF ABORT
   FUNC 200, ABT 60                 *CLEAR NPU FUNCTION 
   B5 = 3                           *MESSAGE NUMBER IF ABORT
   FUNC 400, ABT 60                 *CLEAR COUPLER FUNCTION 
   B5 = 7                           *MESSAGE NUMBER IF ABORT
   FUNC 5, ABT 60                   *COUPLER STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 1 WORDS TO IB, ABT 60         *INPUT COUPLER STATUS 
   IF(IB .AND. 4 .NE. 4) GOTO 22    *NPU REGISTER NOT LOADED
   B5 = 6                           *MESSAGE NUMBER IF ABORT
   FUNC 4, ABT 60                   *NPU STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 1 WORDS TO IB, ABT 60         *INPUT NPU REGISTER 
22 B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 15, ABT 60                  *OUTPUT PROGRAM FUNCTION
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 146 WORDS FROM OB, ABT 60    *OUTPUT TEST PROGRAM
   IF(WT .EQ. 146)GOTO 23 
   B5 = 146 
   MSG 14(WT,B5)TO LINE 1 
   GOTO 61
23 IF (B7 .EQ. 0)GOTO 47           *IF NO ERRORS IN MODULE
   MSG 16(B7) TO DAYFILE           *REPORT ERRORS TO DAYFILE
   IF(B7 .LT. 5)GOTO 47            *IF NPU LOADED 
   EXIT 
47 EXIT TO 091
* 
*-------- ABORT PROCESSOR 
* 
60 MSG B5 TO LINE 1                 *COMMAND THAT ABORTED 
   MSG EM TO LINE 2                 *REASON FOR THE ABORT 
61 B7 = B7 + 1                      *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 17 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 23             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 21                          *RESTART THE TEST 
   END 20 
COMPILE   - TFF09 - 
   MODULE TFF091,6000(64),LOCK  *RANDOM DATA TRANSFERS
***       TFF091 - RANDOM DATA TRANSFERS
**        TFF091 - RANDOM DATA TRANSFERS
*         ------------------------------
* 
*   DESCRIPTION - (TFF091)
* 
*         1. RESERVE THE I/O CHANNEL. 
*         2. FUNCTION 100B, STOP CP.  GO TO STEP 24 IF THIS FUNCTION
*            ABORTS.
*         3. FUNCTION 40B, START CP.  GO TO STEP 24 IF THIS FUNCTION
*            ABORTS.
*         4. GENERATE RANDOM  PATTERN IN OUTPUT BUFFER. 
*         5. SET BIT 11 OF LAST WORD OF DATA PATTERN IN OUTPUT BUFFER.
*            THIS BIT INDICATES END OF TRANSMISSION.
*         6. RESERVE THE I/O CHANNEL. 
*         7. FUNCTION 16B, LOAD ORDERWORD.  GO TO STEP 24 IF THIS 
*            FUNCTION ABORTS. 
*         8. OUTPUT THE ORDERWORD.  GO TO STEP 24 IF THIS COMMAND 
*            ABORTS.
*         9. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 24 IF THIS 
*            FUNCTION ABORTS. 
*        10. INPUT COUPLER STATUS TO STATUS BUFFER.  GO TO STEP 24 IF 
*            THIS COMMAND ABORTS. 
*        11. IF COUPLER STATUS IS EQUAL TO 10B (MEMORY ADDRESS REGISTER 
*            LOADED) GO TO STEP 12.  ELSE GO TO STEP 9, 100B TIMES, 
*            THEN POST ERROR MESSAGE, HALT, THEN GO TO STEP 1.
*        12. FUNCTION 14B, OUTPUT DATA.  GO TO STEP 24 IF THIS FUNCTION 
*            ABORTS.
*        13. OUTPUT RANDOM DATA FROM OUTPUT BUFFER.  GO TO STEP 24
*            IF THIS COMMAND ABORTS.
*        14. RESERVE THE I/O CHANNEL. 
*        15. FUNCTION 16B, LOAD ORDERWORD.  GO TO STEP 24 IF THIS 
*            FUNCTION ABORTS. 
*        16. OUTPUT THE ORDERWORD.  GO TO STEP 24 IF THIS COMMAND 
*            ABORTS.
*        17. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 24 IF THIS 
*            FUNCTION ABORTS. 
*        18. INPUT COUPLER STATUS TO STATUS BUFFER.  GO TO STEP 24 IF 
*            THIS COMMAND ABORTS. 
*        19. IF COUPLER STATUS EQUAL TO 10B (MEMORY ADDRESS REGISTER
*            LOADED) GO TO STEP 24.  ELSE GO TO STEP 17, 100B TIMES,
*            POST NPU NOT RESPONDING MESSAGE, CALL MODULE 98B FOR 
*            STATUS ANALYSIS, HALT, THEN GO TO STEP 1.
*        20. FUNCTION 3, INPUT DATA.  GO TO STEP 24 IF THIS FUNCTION
*            ABORTS.
*        21. INPUT NUMBER OF WORDS SENT IN STEP 11.  GO TO STEP 24 IF 
*            THIS COMMAND ABORTS. 
*        22. COMPARE INPUT AND OUTPUT BUFFERS.  GO TO STEP 25 IF A
*            MISCOMPARE OCCURS. 
*        23. INCREMENT THE PASS COUNT, IF NOT 400B PASSES GO
*            TO STEP 4, OTHERWISE EXIT. 
*        24. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            REASON FOR THE ABORT.  HALT, THEN GO TO STEP 1.
*        25. WE ARRIVE AT THIS STEP IF A MISCOMPARE OCCURS BETWEEN WHAT 
*            WAS SENT TO THE NPU AND WHAT WAS RETURNED.  POST MESSAGES
*            SHOWING THE ACTUAL AND EXPECTED DATA AND THE DIFFERENCES.
*            HALT, THEN GO TO STEP 23.
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. DATA ERROR - ACT=*H*HHEX EXP=*H*HHEX DIFF=*H*HHEX
*         3. TFF091- WC = *OCT PASS = *DEC BAD BYTE = *OCT
*         4. TFF091- ABORT ON STOP CP FUNCTION           (E100) 
*         5. TFF091- ABORT ON START CP FUNCTION          (E040) 
*         6. TFF091- ABORT ON INPUT COUPLER STATUS FUNC  (E005) 
*         7. TFF091- ABORT ON OUTPUT DATA FUNCTION       (E014) 
*         8. TFF091- ABORT ON INPUT DATA FUNCTION        (E003) 
*         9. TFF091- ABORT ON .OUT. COMMAND 
*        10. TFF091- ABORT ON .IN. OR .STATUS. COMMAND
*        11. TFF091 - NPU NOT RESPONDING
*        12. TFF091 - LAST COUPLER STATUS = *OCT  PASS = *DEC 
*        13. TFF091- OUTPUT WT ERROR ACT=*OCT EXP=*OCT
*        14. TFF091- INPUT WT ERROR ACT=*OCT EXP=*OCT 
*        15. TFF091- ABORT ON LOAD ORDERWORD FUNCTION    (E016) 
*        16. TFF091- ABORT ON CLEAR NPU FUNCTION         (E200) 
* 
*   REGISTER USAGE -
* 
*         B0 = RETRY COUNTER/WORDS TO COMPARE (374B)
*         B1 = LOOP COUNTER/DATA PATTERN
*         B2 = LOGICAL DIFFERENCE ON DATA ERROR UPPER 8 BITS
*         B3 = LOGICAL DIFFERENCE ON DATA ERROR LOWER 8 BITS
*         B5 = MESSAGE NUMBER IF ABORT
*         B6 = 1 - NPU CUMULATIVE STATUS FLAG 
*         B7 = ERROR COUNTER
* 
*   CALLS - 
* 
*         TFF98B - COUPLER STATUS ANALYSIS
* 
1  FORMAT TFF091- RANDOM DATA TRANSFERS 
2  FORMAT DATA ERROR - ACT=*H*HHEX EXP=*H*HHEX DIFF=*H*HHEX 
3  FORMAT TFF091- WC = *OCT PASS = *DEC BAD BYTE = *OCT 
4  FORMAT TFF091- OUTPUT WT ERROR ACT=*OCT EXP=*OCT 
5  FORMAT TFF091- ABORT ON STOP CP FUNCTION           (E100)
6  FORMAT TFF091- ABORT ON START CP FUNCTION          (E040)
7  FORMAT TFF091- ABORT ON INPUT COUPLER STATUS FUNC  (E005)
10 FORMAT TFF091- ABORT ON OUTPUT DATA FUNCTION       (E014)
11 FORMAT TFF091- ABORT ON INPUT DATA FUNCTION        (E003)
12 FORMAT TFF091- ABORT ON .OUT. COMMAND
13 FORMAT TFF091- ABORT ON .IN. OR .STATUS. COMMAND 
14 FORMAT TFF091 - NPU NOT RESPONDING 
15 FORMAT TFF091 - LAST COUPLER STATUS = *OCT  PASS = *DEC
16 FORMAT TFF091- ERROR(S) IN MODULE = *DEC 
17 FORMAT TFF091- INPUT WT ERROR ACT=*OCT EXP=*OCT
20 FORMAT TFF091- ABORT ON LOAD ORDERWORD FUNCTION    (E016)
21 FORMAT --------------------------------------------------- 
22 FORMAT TFF091- ABORT ON CLEAR NPU FUNCTION         (E200)
* 
*-------- START 2550 RUNNING
* 
23 MSG 1 TO DISPLAY,PRINT           *POST RUNNING MSG 
24 RES                              *RESERVE THE I/O CHANNEL
   B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 100, ABT 60                 *STOP CP FUNCTION 
   B5 = 22                          *MESSAGE NUMBER IF ABORT
   FUNC 200B, ABT 60                *CLEAR NPU FUNCTION 
   DELAY 4 MSEC 
   B5 = 6                           *MESSAGE NUMBER IF ABORT
   FUNC 40, ABT 60                  *START 2550 RUNNING 
   IB(504) = 0                      *CLEAR STATUS WORD
   DELAY 90 MSEC                    *NPU INITIALIZATION 
* 
*-------- DATA TRANSFER TEST
* 
   OB(500) = 1
   OB(501) = 2
30 B2 = 0                           *COUNTER FOR BUFFER SIZE
   WC = RT .AND. 377                *RANDOM WORD COUNT
   IF(WC .EQ. 0) GOTO 30            *IF 0 WORD COUNT RETRY
   RANDOM TO OB FOR WC              *RANDOM DATA IN BUFFER
   IF(WC .GE. 375) WC = 374         *LEGAL SIZE WORD COUNT
31 OB(B2) = OB(B2) .AND. 377        *USE ONLY LOWER 8 BITS
   GOTO 31 WHILE(B2 + 1 .NE. WC)    *LOOP FOR BUFFER SIZE 
   B2 = WC - 1                      *LAST WORD OF BUFFER
   OB(B2) = OB(B2) .OR. 4000        *SET BIT 11 OF LAST WORD
   RES                              *RESERVE THE I/O CHANNEL
   B5 = 20                          *MESSAGE NUMBER IF ABORT
   FUNC 16B, ABT 60                 *LOAD ORDERWORD FUNCTION
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(500), ABT 60  *OUTPUT THE ORDERWORD
   B0 = 0                           *CLEAR THE RETRY COUNTER
32 GOSUB 50                         *GET COUPLER STATUS 
   IF(SB .AND. 10 .EQ. 10)GOTO 33   *IF MAR LOADED
   GOTO 32 WHILE(B0 + 1 .LT. 100)   *TRY STATUS 100 TIMES 
   GOTO 62                          *ERROR MAR NOT LOADED 
33 B5 = 10                          *MESSAGE NUMBER IF ABORT
   FUNC 14B, ABT 60                 *OUTPUT DATA FUNCTION 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT WC WORDS FROM OB, ABT 60     *OUTPUT DATA
   IF(WT .EQ. WC)GOTO 40
   MSG 4(WT,WC)TO LINE 1
   GOTO 61
40 RES                              *RESERVE THE I/O CHANNEL
   B5 = 20                          *MESSAGE NUMBER IF ABORT
   FUNC 16B, ABT 60                 *LOAD ORDERWORD FUNCTION
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(501), ABT 60  *OUTPUT THE ORDERWORD
   B0 = 0                           *CLEAR THE RETRY COUNTER
42 GOSUB 50                         *GET COUPLER STATUS 
   IF(SB .AND. 10 .EQ. 10)GOTO 43   *IF MAR LOADED
   GOTO 42 WHILE(B0 + 1 .LT. 100)   *TRY STATUS 100 TIMES 
   GOTO 62                          *ERROR MAR NOT LOADED 
43 B5 = 11                          *MESSAGE NUMBER IF ABORT
   FUNC 3, ABT 60                   *INPUT DATA FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN WC WORDS TO IB, ABT 60        *INPUT DATA 
   IF(WT .EQ. WC)GOTO 44
   MSG 17(WT,WC)TO LINE 1 
   GOTO 61
44 B0 = WC                             *WORDS TO COMPARE
   COMPARE IB TO OB FOR B0, ABT 70     *CHECK THE DATA
45 GOTO 30 WHILE (B1 + 1 .NE. 400)     *LOOP 400 TIMES
46 IF(B7 .EQ. 0)GOTO 47             *IF NO ERRORS IN MODULE 
   MSG 16(B7) TO DAYFILE           *REPORT ERRORS TO DAYFILE
47 EXIT 
* 
*-------- COUPLER STATUS SUBROUTINE 
* 
50 B5 = 7                           *MESSAGE NUMBER IF ABORT
   DELAY 20 MSEC
   FUNC 5, ABT 60                   *COUPLER STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   STATUS 1 WORDS TO SB, ABT 60     *INPUT COUPLER STATUS 
   IB(504) = IB(504) .OR. SB
   RETURN                           *EXIT SUBROUTINE
* 
*-------- ABORT PROCESSOR 
* 
60 ENDSUB                           *END ACTIVE SUBROUTINES 
   MSG B5 TO LINE 1                 *COMMAND THAT ABORTED 
   MSG EM TO LINE 2                 *REASON FOR THE ABORT 
61 B7 = B7 + 1                      *BUMP ERROR COUNTER 
   B1 = B1 + 1                      *BUMP PASS COUNT
   PICTURE
   HALT 
   MSG 21 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 46             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 24                          *RESTART THE TEST 
62 MSG 14 TO LINE 1                 *POST REG NOT LOADED MSG
   MSG 15(SB,B1) TO LINE 2          *POST COUPLER STATUS MSG
   B6 = 1                           *NPU STATUS FLAG
   CALL 98B                         *STATUS ANALYSIS
   GOTO 61
* 
*-------- DATA ERROR PROCESSOR
* 
70 B0 = B0 .AND. 7776               *CORRECT ERROR POINTER
   B2 = OB(B0) .XOR. IB(B0)         *CALCULATE DIFFERENCE 
   B3 = OB(B0+1) .XOR. IB(B0+1) 
   MSG 2(IB(B0),IB(B0+1),OB(B0),OB(B0+1),B2,B3)TO LINE 1
   B0 = B0 .RS. 1 
   MSG 3(WC,B1,B0)TO LINE 2 
   B7 = B7 + 1                      *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 21 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 46             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 45                          *CONTINUE THE TEST
   END 23 
COMPILE   - TFF091 -
   MODULE TFF10,6000(64),LOCK  *RANDOM TRANSFERS/INTERRUPTS 
***       TFF10 - RANDOM DATA TRANSFERS WITH INTERRUPTS 
**        TFF10 - RANDOM DATA TRANSFERS WITH INTERRUPTS 
*         --------------------------------------------- 
* 
*   OVERVIEW -
* 
*         TFF10 VERIFIES RANDOM DATA TRANSFERS BETWEEN THE PERIPHERAL 
*         PROCESSOR (PPU) AND THE COMMUNICATIONS PROCESSOR (NPU). 
*         THIS VERIFICATION IS ACCOMPLISHED BY LOADING A SMALL PROGRAM
*         INTO THE NPU WHICH WILL SET UP A BUFFER IN THE NPU MEMORY AND 
*         THEN LOAD THE MEMORY ADDRESS REGISTER WITH THE ADDRESS OF THE 
*         BUFFER.  THE OUTPUT PROGRAM FUNCTION IS USED TO LOAD THE
*         PROGRAM INTO THE NPU.  THE PROGRAM IS STARTED WITH THE START
*         CP FUNCTION.  THE DATA TRANSFERS BEGIN WHEN THE NPU LOADS THE 
*         MEMORY ADDRESS REGISTER (MAR) WITH THE ADDRESS OF THE BUFFER. 
*         AFTER A BUFFER OF DATA HAS BEEN SENT TO THE NPU BUFFER THE
*         NPU RELOADS THE MEMORY ADDRESS REGISTER AND THE PPU THEN
*         INPUTS THE BUFFER.  THE DATA IS THEN CHECKED AND THE PROCESS
*         REPEATED 400B TIMES.  THE DATA PATTERNS AND BUFFER SIZES USED 
*         IN THIS MODULE ARE RANDOM NUMBERS BETWEEN 1 AND 374B. 
*         THE BUFFER IN THE NPU STARTS AT LOCATION 1000 HEX AND IS
*         81 HEX LOCATIONS LONG.  BUFFER CHAINING IS NOT TESTED BY THIS 
*         MODULE.  COUPLER INTERRUPTS ARE USED BY THE 2550 IN THIS
*         MODULE. 
* 
*   DESCRIPTION - 
* 
*         1. POST RUNNING MESSAGE, CALL TFF98A IF P1 NOT EQUAL TO ZERO. 
*         2. RESERVE THE I/O CHANNEL. 
*         3. FUNCTION 200B, CLEAR NPU.  GO TO STEP 19 IF THIS FUNCTION
*            ABORTS.
*         4. FUNCTION 400B, CLEAR COUPLER.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*         5. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 19 IF THIS FUNTION 
*            ABORTS.
*         6. INPUT COUPLER STATUS.  GO TO STEP 19 IF THIS COMMAND 
*            ABORTS.
*         7. IF BIT 2 OF COUPLER STATUS (NPU REGISTER LOADED) IS SET GO 
*            TO STEP 8.  OTHERWISE, GO TO STEP 10.
*         8. FUNCTION 4, INPUT NPU STATUS.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*         9. INPUT NPU STATUS.  GO TO STEP 19 IF THIS COMMAND ABORTS. 
*        10. FUNCTION 15B, OUTPUT PROGRAM.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*        11. OUTPUT 174B WORDS FROM OUTPUT BUFFER (THIS IS THE PROGRAM
*            THAT EXECUTES IN THE 2550).  GO TO STEP 19 IF THIS COMMAND 
*            ABORTS.
*        12. FUNCTION 10B, LOAD MEMORY ADDRESS REGISTER 0.  GO TO 
*            STEP 19 IF THIS FUNCTION ABORTS. 
*        13. OUTPUT UPPER 8 BITS OF MEMORY ADDRESS.  GO TO STEP 19 IF 
*            THIS COMMAND ABORTS. 
*        14. FUNCTION 11B, LOAD MEMORY ADDRESS REGISTER 1.  GO TO 
*            STEP 19 IF THIS FUNCTION ABORTS. 
*        15. OUTPUT LOWER 8 BITS OF MEMORY ADDRESS.  GO TO STEP 19 IF 
*            THIS COMMAND ABORTS. 
*        16. FUNCTION 15B, OUTPUT PROGRAM.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*        17. OUTPUT 20 WORDS (THIS IS THE 2550 INTERRUPT HANDLER).  GO
*            TO STEP 19 IF THIS COMMAND ABORTS. 
*        18. EXIT TO MODULE TFF101. 
*        19. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            REASON FOR THE ABORT.  HALT, THEN GO TO STEP 2.
* 
*         - NOTE -
* 
*         THE FOLLOWING DESCRIPTION APPLIES TO THE TEST PROGRAM 
*         WHICH IS DOWNLINE LOADED INTO THE 2550 BY THIS MODULE.
* 
*         1. CLEAR ALL PROGRAM PROTECT BITS FOR ADDRESS 1000 THRU 
*            3FFF.
*         2. LOAD THE BUFFER LENGTH REGISTER WITH 0080 HEX. 
*         3. SET UP FWA OF BUFFER WITH LCD/FCD OF FF04. 
*         4. SET DONT BUFFER CHAIN FLAG IN BUFFER FWA+1.
*         5. LOAD THE MEMORY ADDRESS REGISTER WITH THE BUFFER 
*            ADDRESS (1000).
*         6. ENABLE COUPLER INTERRUPTS. 
*         7. HANG, WHEN INTERRUPT OCCURS GO TO STEP 8.
*         8. TEST COUPLER STATUS FOR TRANSMISSION COMPLETE. 
*            IF TRANSMISSION COMPLETE IS SET GO TO STEP 9.
*            ELSE HANG. 
*         9. LOAD MEMORY ADDRESS REGISTER WITH THE BUFFER 
*            ADDRESS (1000).
*        10. ENABLE COUPLER INTERRUPTS. 
*        11. HANG, WHEN INTERRUPT OCCURS GO TO STEP 12. 
*        12. TEST COUPLER STATUS FOR TRANSMISSION COMPLETE.  IF 
*            TRANSMISSION COMPLETE IS SET GO TO STEP 2, ELSE HANG.
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. TFF10 - ABORT ON CLEAR COUPLER FUNCTION     (E400) 
*         3. TFF10 - ABORT ON CLEAR NPU FUNCTION         (E200) 
*         4. TFF10 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015) 
*         5. TFF10 - ABORT ON INPUT NPU STATUS FUNCTION  (E004) 
*         6. TFF10 - ABORT ON INPUT COUPLER STATUS FUNC  (E005) 
*         7. TFF10 - ABORT ON .OUT. COMMAND 
*         8. TFF10 - ABORT ON .IN. COMMAND
*         9. TFF10 - OUTPUT WT ERROR EXP=*OCT ACT=*OCT
*        10. TFF10 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010) 
*        11. TFF10 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011) 
* 
*   REGISTER USAGE -
* 
*         B5 = MESSAGE NUMBER IF ABORT
*         B7 = ERROR COUNTER
* 
*   MODULES CALLED -
* 
*         TFF98A
* 
1  FORMAT TFF10 - RANDOM DATA TRANSFERS - WITH INTERRUPTS 
2  FORMAT TFF10 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010)
3  FORMAT TFF10 - ABORT ON CLEAR COUPLER FUNCTION     (E400)
4  FORMAT TFF10 - ABORT ON CLEAR NPU FUNCTION         (E200)
5  FORMAT TFF10 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015)
6  FORMAT TFF10 - ABORT ON INPUT NPU STATUS FUNCTION  (E004)
7  FORMAT TFF10 - ABORT ON INPUT COUPLER STATUS FUNC  (E005)
10 FORMAT TFF10 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011)
12 FORMAT TFF10 - ABORT ON .OUT. COMMAND
13 FORMAT TFF10 - ABORT ON .IN. COMMAND 
14 FORMAT TFF10 - OUTPUT WT ERROR EXP=*OCT ACT=*OCT 
16 FORMAT TFF10 - ERROR(S) IN MODULE = *DEC 
17 FORMAT --------------------------------------------------- 
*  DATA(OB,H)E000,1000       *LOAD Q WITH 1000
*  DATA(OB(4),H)0700         *CLEAR PROTECT BIT 
*  DATA(OB(6),H)0D01         *ADD 1 TO Q
*  DATA(OB(10),H)0814        *TRANSFER Q TO A 
*  DATA(OB(12),H)B000,3FFF   *TEST IF A = 3FFF
*  DATA(OB(16),H)0101        *SKIP 1 IF A =0
*  DATA(OB(20),H)18F9        *JUMP BACK 6 LOCATIONS 
*  DATA(OB(22),H)E000,0658   *LOAD Q BUFFER LENGTH FUNC 
*  DATA(OB(26),H)C000,007F   *LOAD A WITH BUFFER LENGTH 
*  DATA(OB(32),H)0B04        *START I/O (A TO BUFFER LENGTH)
*  DATA(OB(34),H)C000,FF04   *LOAD A WITH LCD/FCD OF BUFFER 
*  DATA(OB(40),H)6400,1000   *STORE A AT 1000(FWA OF BUFFER)
*  DATA(OB(44),H)C000,8001   *LOAD A WITH 8001(DONT CHAIN)
*  DATA(OB(50),H)6400,1001   *STORE A AT 1001 
*  DATA(OB(54),H)E000,066C   *LOAD Q WITH LOAD MAR FUNC 
*  DATA(OB(60),H)C000,1000   *LOAD A WITH BUFFER ADDRESS
*  DATA(OB(64),H)0B04        *START I/O(A TO MAR) 
*  DATA(OB(66),H)C000,0060   *LOAD A WITH INTERRUPT MASK
*  DATA(OB(72),H)0821        *TRANSFER A TO M 
*  DATA(OB(74),H)0400        *ENABLE INTERRUPTS 
*  DATA(OB(76),H)1800,FFFE   *HANG WAIT FOR INTERRUPT 
*  DATA(OB(102),H)E000,0650  *LOAD Q COUPLER STATUS FUNC
*  DATA(OB(106),H)0B04       *START I/O(COUPLER STATUS TO A)
*  DATA(OB(110),H)6400,00FF  *SAVE STATUS IN 00FF 
*  DATA(OB(114),H)0FCA       *LEFT SHIFT A 10 
*  DATA(OB(116),H)0131       *SKIP NEXT INSTRUCTION IF A NEG
*  DATA(OB(120),H)18FF       *HANG THE NPU
*  DATA(OB(122),H)C000,1000  *LOAD A WITH BUFFER ADDRESS
*  DATA(OB(126),H)E000,066C  *LOAD Q WITH LOAD MAR FUNC 
*  DATA(OB(132),H)0B04       *START I/O (A TO MAR)
*  DATA(OB(134),H)C000,0060  *LOAD A WITH INTERRUPT MASK
*  DATA(OB(140),H)0821       *TRANSFER A TO M 
*  DATA(OB(142),H)0400       *ENABLE INTERRUPTS 
*  DATA(OB(144),H)1800,FFFE  *HANG WAIT FOR INTERRUPT 
*  DATA(OB(150),H)E000,0650  *LOAD Q COUPLER STATUS FUNC
*  DATA(OB(154),H)0B04       *START I/O(COUPLER STATUS TO A)
*  DATA(OB(156),H)6400,00FF  *SAVE STATUS IN 00FF 
*  DATA(OB(162),H)0FCA       *LEFT SHIFT A 10 
*  DATA(OB(164),H)0131       *SKIP NEXT INSTRUCTION IF A NEG
*  DATA(OB(166),H)18FF       *HANG THE NPU
*  DATA(OB(170),H)1400,0009  *JUMP TO LOCATION 9
*  DATA(OB(200),H)0114       *ADDRESS FOR INTERRUPTS
*  DATA(OB(202),H)0B00       *PASS
*  DATA(OB(204),H)D8FE       *ADD 1 TO THIS LOC MINUS 1 
*  DATA(OB(206),H)D8FD       *ADD 1 TO THIS LOC MINUS 2 
*  DATA(OB(210),H)1CFC       *JUMP TO CONTENTS OF THIS LOC-3
*  DATA(OB(212),H)0B00       *PASS
*  DATA(OB(214),H)D8FE       *ADD 1 TO THIS LOC MINUS 1 
*  DATA(OB(216),H)D8FD       *ADD 1 TO THIS LOC MINUS 2 
*  DATA(OB(220),H)1CFC       *JUMP TO CONTENTS OF THIS LOC-3
   DATA(OB,H)E000,1000,0700,0D01,0814,
  ,B000,3FFF,0101,18F9,E000,0658,C000,
  ,007F,0B04,C000,FF04,6400,1000,C000,
  ,8001,6400,1001,E000,066C,C000,1000,
  ,0B04,C000,0060,0821,0400,1800,FFFE,
  ,E000,0650,0B04,6400,00FF,0FCA,0131,
  ,18FF,C000,1000,E000,066C,0B04,C000,
  ,0060,0821,0400,1800,FFFE,E000,0650,
  ,0B04,6400,00FF,0FCA,0131,18FF,1400,
  ,0009,0000,0000,0114,0B00,D8FE,D8FD,
  ,1CFC,0B00,D8FE,D8FD,1CFC 
20 MSG 1 TO DISPLAY,PRINT           *POST RUNNING MESSAGE 
   IF (P1.EQ.0) GOTO 21             *NOT SECOND COUPLER 
   B0 = 20                          *INDEX FOR THIS MODULE
   COPY OB TO IB FOR 500B           *SAVE NPU CODE IN IB
   CALL 98A                         *HAVE CODE CHANGED
* 
*-------- DOWNLINE LOAD 2550
* 
21 RES                              *RESERVE THE I/O CHANNEL
   B5 = 4                           *MESSAGE NUMBER IF ABORT
   FUNC 200, ABT 60                 *CLEAR NPU FUNCTION 
   B5 = 3                           *MESSAGE NUMBER IF ABORT
   FUNC 400, ABT 60                 *CLEAR COUPLER FUNCTION 
   B5 = 7                           *MESSAGE NUMBER IF ABORT
   FUNC 5, ABT 60                   *COUPLER STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 1 WORDS TO IB, ABT 60         *INPUT COUPLER STATUS 
   IF(IB .AND. 4 .NE. 4) GOTO 22    *NPU REGISTER NOT LOADED
   B5 = 6                           *MESSAGE NUMBER IF ABORT
   FUNC 4, ABT 60                   *NPU STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 1 WORDS TO IB, ABT 60         *INPUT NPU REGISTER 
22 B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 15, ABT 60                  *OUTPUT PROGRAM FUNCTION
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 174 WORDS FROM OB, ABT 60    *OUTPUT TEST PROGRAM
   IF(WT .EQ. 174)GOTO 23 
   B5 = 174 
25 MSG 14(WT,B5)TO LINE 1 
   GOTO 61
23 B5 = 2                           *MESSAGE NUMBER IF ABORT
   FUNC 10B, ABT 60                 *LOAD MAR0 FUNC 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(200), ABT 60  *UPPER BITS OF ADDRESS 
   B5 = 10                          *MESSAGE NUMBER IF ABORT
   FUNC 11B, ABT 60                 *LOAD MAR1 FUNC 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(201), ABT 60  *LOWER BITS OF ADDRESS 
   B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 15B, ABT 60                 *OUPUT PROGRAM FUNC 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 20 WORDS FROM OB(202), ABT 60
   IF(WT.EQ.20) GOTO 46 
   B5 = 20
   GOTO 25
46 IF(B7 .EQ. 0)GOTO 47            *IF NO ERRORS IN MODULE
   MSG 16(B7) TO DAYFILE           *REPORT ERRORS TO DAYFILE
   IF(B7 .LT. 5)GOTO 47            *IF NPU LOADED 
   EXIT 
47 EXIT TO 101
* 
*-------- ABORT PROCESSOR 
* 
60 MSG B5 TO LINE 1                 *COMMAND THAT ABORTED 
   MSG EM TO LINE 2                 *REASON FOR THE ABORT 
61 B7 = B7 + 1                      *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 17 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 46             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 21                          *RESTART THE TEST 
   END 20 
COMPILE   - TFF10 - 
   MODULE TFF101,6000(64),LOCK  *RANDOM TRANSFERS/INTERRUPTS
***       TFF101 - RANDOM DATA TRANSFERS WITH INTERRUPTS
**        TFF101 - RANDOM DATA TRANSFERS WITH INTERRUPTS
*         ----------------------------------------------
*   DESCRIPTION - (TFF101)
* 
*         1. RESERVE THE I/O CHANNEL. 
*         2. FUNCTION 100B, STOP CP.  GO TO STEP 20 IF THIS FUNCTION
*            ABORTS.
*         3. FUNCTION 40B, START CP.  GO TO STEP 20 IF THIS FUNCTION
*            ABORTS.
*         4. GENERATE RANDOM  PATTERN IN OUTPUT BUFFER. 
*         5. SET BIT 11 OF LAST WORD OF DATA PATTERN IN OUTPUT BUFFER.
*            THIS BIT INDICATES END OF TRANSMISSION.
*         6. RESERVE THE I/O CHANNEL. 
*         7. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 20 IF THIS 
*            FUNCTION ABORTS. 
*         8. INPUT COUPLER STATUS TO STATUS BUFFER.  GO TO STEP 20 IF 
*            THIS COMMAND ABORTS. 
*         9. IF COUPLER STATUS IS EQUAL TO 10B (MEMORY ADDRESS REGISTER 
*            LOADED) GO TO STEP 10.  ELSE GO TO STEP 7, 100B TIMES, 
*            POST NPU NOT RESPONDING MESSAGE, CALL 98B FOR STATUS 
*            ANALYSIS, HALT, THEN GO TO STEP 1. 
*        10. FUNCTION 14B, OUTPUT DATA.  GO TO STEP 20 IF THIS FUNCTION 
*            ABORTS.
*        11. OUTPUT RANDOM DATA FROM OUTPUT BUFFER.  GO TO STEP 20
*            IF THIS COMMAND ABORTS.
*        12. RESERVE THE I/O CHANNEL. 
*        13. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 20 IF THIS 
*            FUNCTION ABORTS. 
*        14. INPUT COUPLER STATUS TO STATUS BUFFER.  GO TO STEP 20 IF 
*            THIS COMMAND ABORTS. 
*        15. IF COUPLER STATUS EQUAL TO 10B (MEMORY ADDRESS REGISTER
*            LOADED) GO TO STEP 16.  ELSE GO TO STEP 13, 100B TIMES,
*            POST NPU NOT RESPONDING MESSAGE, CALL 98B FOR STATUS 
*            ANALYSIS, HALT, THEN GO TO STEP 1. 
*        16. FUNCTION 3, INPUT DATA.  GO TO STEP 20 IF THIS FUNCTION
*            ABORTS.
*        17. INPUT NUMBER OF WORDS SENT IN STEP 11.  GO TO STEP 20 IF 
*            THIS COMMAND ABORTS. 
*        18. COMPARE INPUT AND OUTPUT BUFFERS.  GO TO STEP 21 IF A
*            MISCOMPARE OCCURS. 
*        19. INCREMENT THE PASS COUNT, IF NOT 400B PASSES GO
*            TO STEP 4, OTHERWISE EXIT. 
*        20. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            REASON FOR THE ABORT.  HALT, THEN GO TO STEP 1.
*        21. WE ARRIVE AT THIS STEP IF A MISCOMPARE OCCURS BETWEEN WHAT 
*            WAS SENT TO THE NPU AND WHAT WAS RETURNED.  POST MESSAGES
*            SHOWING THE ACTUAL AND EXPECTED DATA AND THE DIFFERENCES.
*            HALT, THEN GO TO STEP 19.
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. DATA ERROR - ACT=*H*HHEX EXP=*H*HHEX DIFF=*H*HHEX
*         3. TFF101- WC = *OCT PASS = *DEC BAD BYTE = *OCT
*         4. TFF101- ABORT ON STOP CP FUNCTION           (E100) 
*         5. TFF101- ABORT ON START CP FUNCTION          (E040) 
*         6. TFF101- ABORT ON INPUT COUPLER STATUS FUNC  (E005) 
*         7. TFF101- ABORT ON OUTPUT DATA FUNCTION       (E014) 
*         8. TFF101- ABORT ON INPUT DATA FUNCTION        (E003) 
*         9. TFF101- ABORT ON .OUT. COMMAND 
*        10. TFF101- ABORT ON .IN. OR .STATUS. COMMAND
*        11. TFF101- NPU NOT RESPONDING 
*        12. TFF101- LAST COUPLER STATUS = *OCT  PASS = *DEC
*        13. TFF101- OUTPUT WT ERROR ACT=*OCT EXP=*OCT
*        14. TFF101- INPUT WT ERROR ACT=*OCT EXP=*OCT 
*        15. TFF101- ABORT ON CLEAR NPU FUNCTION         (E200) 
* 
*   REGISTER USAGE -
* 
*         B0 = RETRY COUNTER/WORDS TO COMPARE (374B)
*         B1 = LOOP COUNTER/DATA PATTERN
*         B2 = LOGICAL DIFFERENCE ON DATA ERROR UPPER 8 BITS
*         B3 = LOGICAL DIFFERENCE ON DATA ERROR LOWER 8 BITS
*         B5 = MESSAGE NUMBER IF ABORT
*         B6 = NPU STATUS AVAILABLE FLAG
*         B7 = ERROR COUNTER
* 
*   CALLS - 
* 
*         TFF98B - ANALYZE COUPLER STATUS 
* 
1  FORMAT TFF101- RANDOM DATA TRANSFERS - WITH INTERRUPTS 
2  FORMAT DATA ERROR - ACT=*H*HHEX EXP=*H*HHEX DIFF=*H*HHEX 
3  FORMAT TFF101- WC = *OCT PASS = *DEC BAD BYTE = *OCT 
4  FORMAT TFF101- OUTPUT WT ERROR ACT=*OCT EXP=*OCT 
5  FORMAT TFF101- ABORT ON STOP CP FUNCTION           (E100)
6  FORMAT TFF101- ABORT ON START CP FUNCTION          (E040)
7  FORMAT TFF101- ABORT ON INPUT COUPLER STATUS FUNC  (E005)
10 FORMAT TFF101- ABORT ON OUTPUT DATA FUNCTION       (E014)
11 FORMAT TFF101- ABORT ON INPUT DATA FUNCTION        (E003)
12 FORMAT TFF101- ABORT ON .OUT. COMMAND
13 FORMAT TFF101- ABORT ON .IN. OR .STATUS. COMMAND 
14 FORMAT TFF101- NPU NOT RESPONDING
15 FORMAT TFF101- LAST COUPLER STATUS = *OCT  PASS = *DEC 
16 FORMAT TFF101- ERROR(S) IN MODULE = *DEC 
17 FORMAT TFF101- INPUT WT ERROR ACT=*OCT EXP=*OCT
20 FORMAT --------------------------------------------------- 
21 FORMAT TFF101- ABORT ON CLEAR NPU FUNCTION         (E200)
* 
*-------- START 2550 RUNNING
* 
23 MSG 1 TO DISPLAY,PRINT           *POST RUNNING MSG 
24 RES                              *RESERVE THE I/O CHANNEL
   B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 100, ABT 60                 *STOP CP FUNCTION 
   B5 = 21                          *MESSAGE NUMBER IF ABORT
   FUNC 200B, ABT 60                *CLEAR NPU FUNCTION 
   DELAY 4 MSEC 
   B5 = 6                           *MESSAGE NUMBER IF ABORT
   FUNC 40, ABT 60                  *START 2550 RUNNING 
   IB(504) = 0                      *CLEAR STATUS WORD
* 
*-------- DATA TRANSFER TEST
* 
30 B2 = 0                           *COUNTER FOR BUFFER SIZE
   WC = RT .AND. 377                *RANDOM WORD COUNT
   IF(WC .EQ. 0) GOTO 30            *IF 0 WORD COUNT RETRY
   RANDOM TO OB FOR WC              *RANDOM DATA IN BUFFER
   IF(WC .LT. 375) GOTO 31          *IF LEGAL WORD COUNT
   WC = 374                         *SET WORD COUNT TO MAX
31 OB(B2) = OB(B2) .AND. 377        *USE ONLY LOWER 8 BITS
   GOTO 31 WHILE(B2 + 1 .NE. WC)    *LOOP FOR BUFFER SIZE 
   B2 = WC - 1                      *POINT TO LAST WORD 
   OB(B2) = OB(B2) .OR. 4000        *SET BIT 11 OF LAST WORD
   RES                              *RESERVE THE I/O CHANNEL
   B0 = 0                           *CLEAR THE RETRY COUNTER
32 GOSUB 50                         *GET COUPLER STATUS 
   IF(SB .AND. 10 .EQ. 10)GOTO 33   *IF MAR LOADED
   GOTO 32 WHILE(B0 + 1 .LT. 100)   *TRY STATUS 100 TIMES 
   GOTO 62                          *ERROR MAR NOT LOADED 
33 B5 = 10                          *MESSAGE NUMBER IF ABORT
   FUNC 14B, ABT 60                 *OUTPUT DATA FUNCTION 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT WC WORDS FROM OB, ABT 60     *OUTPUT DATA
   IF(WT .EQ. WC)GOTO 40
   MSG 4(WT,WC)TO LINE 1
   GOTO 61
40 RES                              *RESERVE THE I/O CHANNEL
   B0 = 0                           *CLEAR THE RETRY COUNTER
42 GOSUB 50                         *GET COUPLER STATUS 
   IF(SB .AND. 10 .EQ. 10)GOTO 43   *IF MAR LOADED
   GOTO 42 WHILE(B0 + 1 .LT. 100)   *TRY STATUS 100 TIMES 
   GOTO 62                          *ERROR MAR NOT LOADED 
43 B5 = 11                          *MESSAGE NUMBER IF ABORT
   FUNC 3, ABT 60                   *INPUT DATA FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN WC WORDS TO IB, ABT 60        *INPUT DATA 
   IF(WT .EQ. WC)GOTO 44
   MSG 17(WT,WC)TO LINE 1 
   GOTO 61
44 B0 = WC                             *WORD TO COMPARE 
   COMPARE IB TO OB FOR B0, ABT 70     *CHECK THE DATA
45 GOTO 30 WHILE (B1 + 1 .NE. 400)  *LOOP 400 TIMES 
46 IF(B7 .EQ. 0)GOTO 47             *IF NO ERRORS IN MODULE 
   MSG 16(B7) TO DAYFILE           *REPORT ERRORS TO DAYFILE
47 EXIT 
* 
*-------- COUPLER STATUS SUBROUTINE 
* 
50 B5 = 7                           *MESSAGE NUMBER IF ABORT
   DELAY 20 MSEC
   FUNC 5, ABT 60                   *COUPLER STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   STATUS 1 WORDS TO SB, ABT 60     *INPUT COUPLER STATUS 
   IB(504) = IB(504) .OR. SB
   RETURN                           *EXIT SUBROUTINE
* 
*-------- ABORT PROCESSOR 
* 
60 ENDSUB                           *END ACTIVE SUBROUTINES 
   MSG B5 TO LINE 1                 *COMMAND THAT ABORTED 
   MSG EM TO LINE 2                 *REASON FOR THE ABORT 
61 B7 = B7 + 1                      *BUMP ERROR COUNTER 
   B1 = B1 + 1                      *BUMP PASS COUNT
   PICTURE
   HALT 
   MSG 20 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 46             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 24                          *RESTART THE TEST 
62 MSG 14 TO LINE 1                 *POST REG NOT LOADED MSG
   MSG 15(SB,B1) TO LINE 2          *POST COUPLER STATUS MSG
   B6 = 1 
   CALL 98B 
   GOTO 61
* 
*-------- DATA ERROR PROCESSOR
* 
70 B0 = B0 .AND. 7776               *CORRECT ERROR POINTER
   B2 = OB(B0) .XOR. IB(B0)         *CALCULATE DIFFERENCE 
   B3 = OB(B0+1) .XOR. IB(B0+1) 
   MSG 2(IB(B0),IB(B0+1),OB(B0),OB(B0+1),B2,B3)TO LINE 1
   B0 = B0 .RS. 1 
   MSG 3(WC,B1,B0)TO LINE 2 
   B7 = B7 + 1                      *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 20 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 46             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 45                          *CONTINUE THE TEST
   END 23 
COMPILE   - TFF101 -
   MODULE TFF11,6000(64),LOCK  *DATA TRANSFERS WITH CHAINING
***       TFF11 - DATA TRANSFERS WITH BUFFER CHAINING 
**        TFF11 - DATA TRANSFERS WITH BUFFER CHAINING 
*         ------------------------------------------- 
* 
*   OVERVIEW -
* 
*         TFF11 VERIFIES THE CAPABILITY OF THE COMMUNICATIONS PROCESSOR 
*         (NPU) TO CHAIN BUFFERS TOGETHER.  THIS VERIFICATION IS
*         ACCOMPLISHED BY LOADING A SMALL PROGRAM INTO THE NPU WHICH
*         WILL SET UP FOUR BUFFERS AND THE PROPER CHAIN ADDRESSES IN
*         THE BUFFERS LAST WORD ADDRESS.  THE NPU THEN LOADS THE MEMORY 
*         ADDRESS REGISTER WITH THE ADDRESS OF THE FIRST BUFFER AND 
*         WAITS FOR AN INTERRUPT.  THE OUTPUT PROGRAM FUNCTION IS USED
*         TO LOAD THE PROGRAM AND INTERRUPT ROUTINE INTO THE NPU.  THE
*         PROGRAM IS STARTED WITH THE START CP FUNCTION.  THE DATA
*         TRANSFERS BEGIN WHEN THE NPU LOADS THE MEMORY ADDRESS 
*         REGISTER WITH THE ADDRESS OF THE FIRST BUFFER.  THE PPU THEN
*         OUTPUTS ENOUGH DATA TO FILL UP THE FOUR BUFFERS WHICH CAUSES
*         THE NPU TO BE INTERRUPTED.  THE NPU THEN LOADS THE MEMORY 
*         ADDRESS REGISTER WITH THE ADDRESS OF THE FIRST BUFFER AND THE 
*         PPU INPUTS THE DATA.  THE BUFFER NUMBER IS CHECKED FOR THE
*         FIRST THREE BUFFERS AND THE ENTIRE BUFFER IS CHECKED IN THE 
*         LAST BUFFER FOR ERRORS.  THE PROCESS IS REPEATED 400B TIMES 
*         WITH PATTERNS OF 0000 THRU 377B.  THE SECOND CHARACTER OF 
*         EACH BUFFER CONTAINS THE BUFFER NUMBER.  THE BUFFERS ARE
*         LOCATED AT ADDRESSES 1000,1FFF,2081 AND 2FFF IN THE NPU.
*         THESE LOCATIONS WERE CHOSEN TO TRY AND TEST ALL ADDRESS BITS
*         IN THE LOWER 32K OF MEMORY. 
* 
*   DESCRIPTION - 
* 
*         1. POST RUNNING MESSAGE, CALL TFF98A IF P1 NOT EQUAL TO ZERO. 
*         2. RESERVE THE I/O CHANNEL. 
*         3. FUNCTION 200B, CLEAR NPU.  GO TO STEP 19 IF THIS FUNCTION
*            ABORTS.
*         4. FUNCTION 400B, CLEAR COUPLER.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*         5. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*         6. INPUT COUPLER STATUS.  GO TO STEP 19 IF THIS COMMAND 
*            ABORTS.
*         7. IF BIT 2 OF COUPLER STATUS (NPU REGISTER LOADED) IS SET GO 
*            TO STEP 8.  OTHERWISE, GO TO STEP 10.
*         8. FUNCTION 4, INPUT NPU STATUS.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*         9. INPUT NPU STATUS.  GO TO STEP 19 IF THIS COMMAND ABORTS. 
*        10. FUNCTION 15B, OUTPUT PROGRAM.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*        11. OUTPUT 270B WORDS FROM OUTPUT BUFFER (THIS IS THE PROGRAM
*            THAT EXECUTES IN THE 2550).  GO TO STEP 19 IF THIS COMMAND 
*            ABORTS.
*        12. FUNCTION 10B, LOAD MEMORY ADDRESS REGISTER 0.  GO TO 
*            STEP 19 IF THIS FUNCTION ABORTS. 
*        13. OUTPUT UPPER 8 BITS OF MEMORY ADDRESS.  GO TO STEP 19 IF 
*            THIS COMMAND ABORTS. 
*        14. FUNCTION 11B, LOAD MEMORY ADDRESS REGISTER 1.  GO TO 
*            STEP 19 IF THIS FUNCTION ABORTS. 
*        15. OUTPUT LOWER 8 BITS OF MEMORY ADDRESS.  GO TO STEP 19 IF 
*            THIS COMMAND ABORTS. 
*        16. FUNCTION 15B, OUTPUT PROGRAM.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*        17. OUTPUT 20 WORDS (THIS IS THE 2550 INTERRUPT HANDLER).  GO
*            TO STEP 19 IF THIS COMMAND ABORTS. 
*        18. EXIT TO MODULE TFF101. 
*        19. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            REASON FOR THE ABORT.  HALT, THEN GO TO STEP 2.
* 
*         - NOTE -
* 
*         THE FOLLOWING DESCRIPTION APPLIES TO THE TEST PROGRAM 
*         WHICH IS DOWNLINE LOADED INTO THE 2550 BY THIS MODULE.
* 
*         1. CLEAR ALL PROGRAM PROTECT BITS FOR ADDRESS 1000 THRU 
*            3FFF.
*         2. LOAD THE BUFFER LENGTH REGISTER WITH 0080 HEX. 
*         3. SET UP FWA OF ALL BUFFERS WITH LCD/FCD OF FF04 AND 
*            SET BUFFER CHAIN FLAG IN ALL BUFFERS FWA+1.
*         4. SET CHAIN ADDRESS INTO LWA OF FIRST 3 BUFFERS
*            AND SET 0 INTO LWA OF LAST BUFFER. 
*         5. LOAD THE MEMORY ADDRESS REGISTER WITH THE BUFFER 
*            ADDRESS (1000).
*         6. ENABLE COUPLER INTERRUPTS. 
*         7. HANG, WHEN INTERRUPT OCCURS GO TO STEP 8.
*         8. TEST COUPLER STATUS FOR TRANSMISSION COMPLETE. 
*            IF TRANSMISSION COMPLETE IS SET GO TO STEP 9.
*            ELSE HANG. 
*         9. LOAD MEMORY ADDRESS REGISTER WITH THE BUFFER 
*            ADDRESS (1000).
*        10. ENABLE COUPLER INTERRUPTS. 
*        11. HANG, WHEN INTERRUPT OCCURS GO TO STEP 12. 
*        12. TEST COUPLER STATUS FOR TRANSMISSION COMPLETE.  IF 
*            TRANSMISSION COMPLETE IS SET GO TO STEP 2, ELSE HANG.
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. TFF11 - ABORT ON CLEAR COUPLER FUNCTION     (E400) 
*         3. TFF11 - ABORT ON CLEAR NPU FUNCTION         (E200) 
*         4. TFF11 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015) 
*         5. TFF11 - ABORT ON INPUT NPU STATUS FUNCTION  (E004) 
*         6. TFF11 - ABORT ON INPUT COUPLER STATUS FUNC  (E005) 
*         7. TFF11 - ABORT ON .OUT. COMMAND 
*         8. TFF11 - ABORT ON .IN. COMMAND
*         9. TFF11 - OUTPUT WT ERROR ACT=*OCT EXP=*OCT
*        10. TFF11 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010) 
*        11. TFF11 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011) 
* 
*   REGISTER USAGE -
* 
*         B5 = MESSAGE NUMBER IF ABORT
*         B7 = ERROR COUNTER
* 
*   MODULES CALLED -
* 
*         TFF98A
* 
1  FORMAT TFF11 - PPU/2550 DATA TRANSFERS WITH CHAINING 
2  FORMAT TFF11 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010)
3  FORMAT TFF11 - ABORT ON CLEAR COUPLER FUNCTION     (E400)
4  FORMAT TFF11 - ABORT ON CLEAR NPU FUNCTION         (E200)
5  FORMAT TFF11 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015)
6  FORMAT TFF11 - ABORT ON INPUT NPU STATUS FUNCTION  (E004)
7  FORMAT TFF11 - ABORT ON INPUT COUPLER STATUS FUNC  (E005)
10 FORMAT TFF11 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011)
12 FORMAT TFF11 - ABORT ON .OUT. COMMAND
13 FORMAT TFF11 - ABORT ON .IN. COMMAND 
14 FORMAT TFF11 - OUTPUT WT ERROR ACT=*OCT EXP=*OCT 
16 FORMAT TFF11 - ERROR(S) IN MODULE = *DEC 
17 FORMAT --------------------------------------------------- 
*  DATA(OB,H)E000,1000       *LOAD Q WITH 1000
*  DATA(OB(4),H)0700         *CLEAR PROTECT BIT 
*  DATA(OB(6),H)0D01         *ADD 1 TO Q
*  DATA(OB(10),H)0814        *TRANSFER Q TO A 
*  DATA(OB(12),H)B000,3FFF   *TEST IF A = 3FFF
*  DATA(OB(16),H)0101        *SKIP 1 IF A = 0 
*  DATA(OB(20),H)18F9        *JUMP BACK 6 LOCATIONS 
*  DATA(OB(22),H)E000,0658   *LOAD Q WITH BUFFER LENGTH FUNC
*  DATA(OB(26),H)C000,0080   *LOAD A WITH BUFFER LENGTH 
*  DATA(OB(32),H)0B04        *START I/O(A TO BUFFER LENGTH REGISTER)
*  DATA(OB(34),H)C000,FF04   *LOAD A WITH LCD/FCD FOR BUFFERS 
*  DATA(OB(40),H)6400,1000   *STORE A AT 1000 
*  DATA(OB(44),H)6400,1FFF   *STORE A AT 1FFF 
*  DATA(OB(50),H)6400,2081   *STORE A AT 2081 
*  DATA(OB(54),H)6400,2FFF   *STORE A AT 2FFF 
*  DATA(OB(60),H)C000,0000   *LOAD A WITH 0 
*  DATA(OB(64),H)6400,1001   *STORE A AT 1001 
*  DATA(OB(70),H)6400,2000   *STORE A AT 2000 
*  DATA(OB(74),H)6400,2082   *STORE A AT 2082 
*  DATA(OB(100),H)C000,8000  *LOAD A WITH 8000
*  DATA(OB(104),H)6400,3000  *STORE A AT 3000 
*  DATA(OB(110),H)C000,1FFF  *LOAD A WITH 1FFF
*  DATA(OB(114),H)6400,1080  *STORE A AT 1080 (LWA) 
*  DATA(OB(120),H)C000,2081  *LOAD A WITH 2081
*  DATA(OB(124),H)6400,207F  *STORE A AT 207F (LWA) 
*  DATA(OB(130),H)C000,2FFF  *LOAD A WITH 2FFF
*  DATA(OB(134),H)6400,2101  *STORE A AT 2101 (LWA) 
*  DATA(OB(140),H)C000,0000  *LOAD A WITH 0 
*  DATA(OB(144),H)6400,307F  *STORE A AT 307F (LWA) 
*  DATA(OB(150),H)E000,066C  *LOAD Q WITH LOAD MAR FUNC 
*  DATA(OB(154),H)C000,1000  *LOAD A WITH 1000
*  DATA(OB(160),H)0B04       *START I/O(A TO MAR) 
*  DATA(OB(162),H)C000,0060  *LOAD A WITH 60
*  DATA(OB(166),H)0821       *TRANSFER A TO M 
*  DATA(OB(170),H)0400       *ENABLE INTERRUPTS 
*  DATA(OB(172),H)1800,FFFE  *HANG
*  DATA(OB(176),H)E000,0650  *LOAD Q WITH COUPLER STATUS FUNC 
*  DATA(OB(202),H)0B04       *START I/O(COUPLER STATUS TO A)
*  DATA(OB(204),H)6400,00FF  *STORE STATUS AT 00FF
*  DATA(OB(210),H)0FCA       *LEFT SHIFT A 10 PLACES
*  DATA(OB(212),H)0131       *SKIP 1 IF A NEGATIVE
*  DATA(OB(214),H)18FF       *HANG NPU
*  DATA(OB(216),H)C000,1000  *LOAD A WITH 1000
*  DATA(OB(222),H)E000,066C  *LOAD Q WITH LOAD MAR FUNC 
*  DATA(OB(226),H)0B04       *START I/O(A TO MAR) 
*  DATA(OB(230),H)C000,0060  *LOAD A WITH 60
*  DATA(OB(234),H)0821       *TRANSFER A TO M 
*  DATA(OB(236),H)0400       *ENABLE INTERRUPTS 
*  DATA(OB(240),H)1800,FFFE  *HANG WAIT FOR INTERRUPT 
*  DATA(OB(244),H)E000,0650  *LOAD Q WITH COUPLER STATUS FUNC 
*  DATA(OB(250),H)0B04       *START I/O(COUPLER STATUS TO A)
*  DATA(OB(252),H)6400,00FF  *STORE STATUS AT 00FF
*  DATA(OB(256),H)0FCA       *LEFT SHIFT A 10 PLACES
*  DATA(OB(260),H)0131       *SKIP 1 IF A NEGATIVE
*  DATA(OB(262),H)18FF       *HANG NPU
*  DATA(OB(264),H)1400,0009  *REPEAT THE PROGRAM
   DATA(OB,H)E000,1000,0700,0D01,0814,
  ,B000,3FFF,0101,18F9,E000,0658,C000,
  ,0080,0B04,C000,FF04,6400,1000,6400,
  ,1FFF,6400,2081,6400,2FFF,C000,0000,
  ,6400,1001,6400,2000,6400,2082,C000,
  ,8000,6400,3000,C000,1FFF,6400,1080,
  ,C000,2081,6400,207F,C000,2FFF,6400,
  ,2101,C000,0000,6400,307F,E000,066C,
  ,C000,1000,0B04,C000,0060,0821,0400,
  ,1800,FFFE,E000,0650,0B04,6400,00FF,
  ,0FCA,0131,18FF,C000,1000,E000,066C,
  ,0B04,C000,0060,0821,0400,1800,FFFE,
  ,E000,0650,0B04,6400,00FF,0FCA,0131,
  ,18FF,1400,0009 
* 
*-------- INTERRUPT ROUTINE 
* 
   DATA(OB(300),H)0114       *LOAD ADDRESS
   DATA(OB(302),H)0B00       *PASS
   DATA(OB(304),H)D8FE       *ADD 1 TO LOC - 1
   DATA(OB(306),H)D8FD       *ADD 1 TO THIS LOC MINUS 2 
   DATA(OB(310),H)1CFC       *JUMP TO CONTENTS OF THIS LOC-3
   DATA(OB(312),H)0B00       *PASS
   DATA(OB(314),H)D8FE       *ADD 1 TO LOC - 1
   DATA(OB(316),H)D8FD       *ADD 1 TO THIS LOC MINUS 2 
   DATA(OB(320),H)1CFC       *JUMP TO CONTENTS OF THIS LOC-3
20 MSG 1 TO DISPLAY,PRINT           *POST RUNNING MESSAGE 
   IF (P1.EQ.0) GOTO 21             *NOT SECOND COUPLER 
   B0 = 30                          *INDEX FOR THIS MODULE
   COPY OB TO IB FOR 500B           *SAVE NPU CODE IN IB
   CALL 98A                         *HAVE CODE CHANGED
* 
*-------- DOWNLINE LOAD 2550
* 
21 RES                              *RESERVE THE I/O CHANNEL
   B5 = 4                           *MESSAGE NUMBER IF ABORT
   FUNC 200, ABT 60                 *CLEAR NPU FUNCTION 
   B5 = 3                           *MESSAGE NUMBER IF ABORT
   FUNC 400, ABT 60                 *CLEAR COUPLER FUNCTION 
   B5 = 7                           *MESSAGE NUMBER IF ABORT
   FUNC 5, ABT 60                   *COUPLER STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 1 WORDS TO IB, ABT 60         *INPUT COUPLER STATUS 
   IF(IB .AND. 4 .NE. 4) GOTO 22    *NPU REGISTER NOT LOADED
   B5 = 6                           *MESSAGE NUMBER IF ABORT
   FUNC 4, ABT 60                   *NPU STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 1 WORDS TO IB, ABT 60         *INPUT NPU REGISTER 
22 B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 15, ABT 60                  *OUTPUT PROGRAM FUNCTION
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 270 WORDS FROM OB, ABT 60    *OUTPUT TEST PROGRAM
   IF(WT .EQ. 270)GOTO 23 
   B5 = 270 
   MSG 14(WT,B5)TO LINE 1 
   GOTO 61
23 B5 = 2                           *MESSAGE NUMBER IF ABORT
   FUNC 10B, ABT 60                 *LOAD MAR0 FUNC 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(300), ABT 60  *UPPER 8 BITS OF ADDR
   B5 = 10                          *MESSAGE NUMBER IF ABORT
   FUNC 11B, ABT 60                 *LOAD MAR1 FUNC 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(301), ABT 60  *LOWER BITS OF ADDRESS 
   B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 15B, ABT 60                 *OUTPUT PROGRAM FUNC
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 20 WORDS FROM OB(302), ABT 60  *INTERRUPT ROUTINES 
   IF(WT .EQ. 20)GOTO 24
   B5 = 20
   MSG 14(WT,B5)TO LINE 1 
   GOTO 61
24 IF (B7 .EQ. 0)GOTO 47           *IF NO ERRORS IN MODULE
   MSG 16(B7) TO DAYFILE           *REPORT ERRORS TO DAYFILE
   IF(B7 .LT. 5)GOTO 47            *IF NPU LOADED 
   EXIT 
47 EXIT TO 111
* 
*-------- ABORT PROCESSOR 
* 
60 MSG B5 TO LINE 1                 *COMMAND THAT ABORTED 
   MSG EM TO LINE 2                 *REASON FOR THE ABORT 
61 B7 = B7 + 1                      *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 17 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 24             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 21                          *RESTART THE TEST 
   END 20 
COMPILE   - TFF11 - 
   MODULE TFF111,6000(64),LOCK  *DATA TRANSFERS - CHAINING
***       TFF111 - DATA TRANSFERS WITH BUFFER CHAINING
**        TFF111 - DATA TRANSFERS WITH BUFFER CHAINING
*         --------------------------------------------
* 
*   DESCRIPTION - (TFF111)
* 
*         1. RESERVE THE I/O CHANNEL. 
*         2. FUNCTION 100B, STOP CP.  GO TO STEP 20 IF THIS FUNCTION
*            ABORTS.
*         3. FUNCTION 40B, START CP.  GO TO STEP 20 IF THIS FUNCTION
*            ABORTS.
*         4. DUPE 374B WORDS OF DATA PATTERN TO OUTPUT BUFFER.
*         5. RESERVE THE I/O CHANNEL. 
*         6. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 20 IF THIS 
*            FUNCTION ABORTS. 
*         7. INPUT COUPLER STATUS TO STATUS BUFFER.  GO TO STEP 20 IF 
*            THIS COMMAND ABORTS. 
*         8. IF COUPLER STATUS IS EQUAL TO 10B (MEMORY ADDRESS REGISTER 
*            LOADED) GO TO STEP 9.  ELSE GO TO STEP 6, 100B TIMES, THEN 
*            POST NPU NOT RESPONDING MESSAGE, CALL 98B FOR STATUS 
*            ANALYSIS, HALT, THEN GO TO STEP 1. 
*         9. FUNCTION 14B, OUTPUT DATA.  GO TO STEP 20 IF THIS FUNCTION 
*            ABORTS.
*        10. PUT BUFFER NUMBER IN SECOND CHARACTER POSITION AND 
*            OUTPUT 374B WORDS OF DATA FROM OUTPUT BUFFER.  GO TO 
*            STEP 20 IF THIS COMMAND ABORTS.  REPEAT THIS STEP FOR 3
*            BUFFERS. 
*        11. SET BIT 11 OF LAST WORD OF DATA PATTERN IN OUTPUT BUFFER.
*            THIS BIT INDICATES END OF TRANSMISSION.  OUTPUT THE LAST 
*            BUFFER.   GO TO STEP 20 IF THIS COMMAND ABORTS.
*        12. RESERVE THE I/O CHANNEL. 
*        13. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 20 IF THIS 
*            FUNCTION ABORTS. 
*        14. INPUT COUPLER STATUS TO STATUS BUFFER.  GO TO STEP 20 IF 
*            THIS COMMAND ABORTS. 
*        15. IF COUPLER STATUS EQUAL TO 10B (MEMORY ADDRESS REGISTER
*            LOADED) GO TO STEP 16.  ELSE GO TO STEP 13, 100B TIMES,
*            POST NPU NOT RESPONDING MESSAGE, CALL 98B FOR STATUS 
*            ANALYSIS, HALT, THEN GO TO STEP 1. 
*        16. FUNCTION 3, INPUT DATA.  GO TO STEP 20 IF THIS FUNCTION
*            ABORTS.
*        17. INPUT 374B WORDS (DATA PATTERN).  GO TO STEP 20 IF THIS
*            COMMAND ABORTS.
*        18. COMPARE INPUT AND OUTPUT BUFFERS.  GO TO STEP 21 IF A
*            MISCOMPARE OCCURS.  ONLY THE BUFFER NUMBER IS CHECKED FOR
*            BUFFERS 1 THRU 3.  GO TO STEP 17, 3 TIMES THEN STEP 19.
*        19. INCREMENT THE DATA PATTERN, IF NOT END OF DATA PATTERNS
*            GO TO STEP 4, OTHERWISE EXIT.
*        20. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            REASON FOR THE ABORT.  HALT, THEN GO TO STEP 1.
*        21. WE ARRIVE AT THIS STEP IF A MISCOMPARE OCCURS BETWEEN WHAT 
*            WAS SENT TO THE NPU AND WHAT WAS RETURNED.  POST MESSAGES
*            SHOWING THE ACTUAL AND EXPECTED DATA AND THE DIFFERENCES.
*      HALT, THEN GO TO STEP 1. 
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. DATA ERROR - ACT=*H*HHEX EXP=*H*HHEX 
*         3. TFF111- WC = *OCT PASS = *DEC BAD BYTE = *OCT
*         6. TFF111- ABORT ON STOP CP FUNCTION           (E100) 
*         5. TFF111- ABORT ON START CP FUNCTION          (E040) 
*         6. TFF111- ABORT ON INPUT COUPLER STATUS FUNC  (E005) 
*         7. TFF111- ABORT ON OUTPUT DATA FUNCTION       (E014) 
*         8. TFF111- ABORT ON INPUT DATA FUNCTION        (E003) 
*         9. TFF111- ABORT ON .OUT. COMMAND 
*        10. TFF111- ABORT ON .IN. OR .STATUS. COMMAND
*        11. TFF111- NPU NOT RESPONDING 
*        12. TFF111- OUTPUT WT ERROR ACT=*OCT EXP=*OCT
*        13. TFF111- INPUT WT ERROR ACT=*OCT EXP=*OCT 
*        14. TFF111- LAST COUPLER STATUS = *OCT  PASS = *DEC
*        15. TFF111- ABORT ON CLEAR NPU FUNCTION         (E200) 
* 
*   REGISTER USAGE -
* 
*         B0 = RETRY COUNTER/WORDS TO COMPARE (374B)
*         B1 = LOOP COUNTER/DATA PATTERN
*         B2 = LOGICAL DIFFERENCE ON DATA ERROR UPPER 8 BITS
*         B3 = LOGICAL DIFFERENCE ON DATA ERROR LOWER 8 BITS
*         B5 = MESSAGE NUMBER IF ABORT
*         B6 = NPU STATUS AVAILABLE FLAG
*         B7 = ERROR COUNTER
* 
*   CALLS - 
* 
*         TFF98B - ANALYZE COUPLER STATUS 
* 
1  FORMAT TFF111- PPU/2550 DATA TRANSFERS WITH CHAINING 
2  FORMAT DATA ERROR - ACT=*H*HHEX EXP=*H*HHEX
3  FORMAT TFF111- WC = *OCT PASS = *DEC  BAD BYTE = *OCT
4  FORMAT TFF111- OUTPUT WT ERROR ACT=*OCT EXP=*OCT 
5  FORMAT TFF111- ABORT ON STOP CP FUNCTION           (E100)
6  FORMAT TFF111- ABORT ON START CP FUNCTION          (E040)
7  FORMAT TFF111- ABORT ON INPUT COUPLER STATUS FUNC  (E005)
10 FORMAT TFF111- ABORT ON OUTPUT DATA FUNCTION       (E014)
11 FORMAT TFF111- ABORT ON INPUT DATA FUNCTION        (E003)
12 FORMAT TFF111- ABORT ON .OUT. COMMAND
13 FORMAT TFF111- ABORT ON .IN. OR .STATUS. COMMAND 
14 FORMAT TFF111- NPU NOT RESPONDING
15 FORMAT TFF111- LAST COUPLER STATUS = *OCT  PASS = *DEC 
16 FORMAT TFF111- ERROR(S) IN MODULE = *DEC 
17 FORMAT TFF111- INPUT WT ERROR ACT=*OCT EXP=*OCT
20 FORMAT --------------------------------------------------- 
21 FORMAT TFF111- ABORT ON CLEAR NPU FUNCTION         (E200)
* 
*-------- START 2550 RUNNING
* 
23 MSG 1 TO DISPLAY,PRINT           *POST RUNNING MSG 
24 RES                              *RESERVE THE I/O CHANNEL
   B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 100, ABT 60                 *STOP CP FUNCTION 
   B5 = 21                          *MESSAGE NUMBER IF ABORT
   FUNC 200B, ABT 60                *CLEAR NPU FUNCTION 
   DELAY 4 MSEC 
   B5 = 6                           *MESSAGE NUMBER IF ABORT
   FUNC 40, ABT 60                  *START 2550 RUNNING 
   IB(504) = 0                      *CLEAR STATUS WORD
* 
*-------- DATA TRANSFER TEST
* 
   WC = 374 
30 DUP B1 TO OB FOR WC              *PUT PATTERN IN OUTBUF
31 RES                              *RESERVE THE I/O CHANNEL
32 GOSUB 50                         *GET COUPLER STATUS 
33 B5 = 10                          *MESSAGE NUMBER IF ABORT
   FUNC 14B, ABT 60                 *OUTPUT DATA FUNCTION 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OB(1) = 1                        *BUFFER NUMBER
   OUT CHAIN, ABT 60                *OUTPUT DATA
   IF(WT .NE. WC)GOTO 34            *WORDS XMITTED ERROR
   OB(1) = 2                        *BUFFER NUMBER
   OUT CHAIN, ABT 60                *OUTPUT DATA
   IF(WT .NE. WC)GOTO 34            *WORDS XMITTED ERROR
   OB(1) = 3                        *BUFFER NUMBER
   OUT CHAIN, ABT 60                *OUTPUT DATA
   IF(WT .NE. WC)GOTO 34            *WORDS XMITTED ERROR
   OB(1) = 4                        *BUFFER NUMBER
   OB(373) = OB(373) .OR. 4000      *SET BIT 11 OF LAST WORD
   OUT, ABT 60                      *OUTPUT DATA
   IF(WT .EQ. WC)GOTO 40            *NO ERROR WORDS XMITTED 
34 MSG 4(WT,WC)TO LINE 1
   GOTO 61
40 RES                              *RESERVE THE I/O CHANNEL
42 GOSUB 50                         *GET COUPLER STATUS 
43 B5 = 11                          *MESSAGE NUMBER IF ABORT
   FUNC 3, ABT 60                   *INPUT DATA FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN CHAIN, ABT 60                 *INPUT DATA 
   IF(WT .NE. WC)GOTO 44            *WORDS XMITTED ERROR
   OB(1) = 1
   IF(IB(1) .NE. 1)GOTO 70          *INCORRECT BUFFER 
   IN CHAIN, ABT 60                 *INPUT DATA 
   IF(WT .NE. WC)GOTO 44            *WORDS XMITTED ERROR
   OB(1) = 2
   IF(IB(1) .NE. 2)GOTO 70          *INCORRECT BUFFER 
   IN CHAIN, ABT 60                 *INPUT DATA 
   IF(WT .NE. WC)GOTO 44            *WORDS XMITTED ERROR
   OB(1) = 3
   IF(IB(1) .NE. 3)GOTO 70          *INCORRECT BUFFER 
   IN, ABT 60                       *INPUT DATA 
   OB(1) = 4
   IF(WT .EQ. WC)GOTO 45            *NO ERROR WORDS XMITTED 
44 MSG 17(WT,WC)TO LINE 1 
   GOTO 61
45 B0 = WC                         *WORDS TO COMPARE
   COMPARE IB TO OB FOR B0, ABT 70  *CHECK THE DATA 
46 GOTO 30 WHILE (B1 + 1 .NE. 400)  *LOOP 400 TIMES 
47 IF(B7 .EQ. 0)GOTO 77             *IF NO ERRORS IN MODULE 
   MSG 16(B7) TO DAYFILE           *REPORT ERRORS TO DAYFILE
77 EXIT 
* 
*-------- COUPLER STATUS SUBROUTINE 
* 
50 B0 = 0                           *CLEAR RETRY COUNTER
52 B5 = 7                           *MESSAGE NUMBER IF ABORT
   DELAY 20 MSEC
   FUNC 5, ABT 60                   *COUPLER STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   STATUS 1 WORDS TO SB, ABT 60     *INPUT COUPLER STATUS 
   IB(504) = IB(504) .OR. SB
   IF(SB .AND. 10 .EQ. 10)GOTO 54   *IF MAR LOADED
   GOTO 52 WHILE(B0 + 1 .NE. 100)   *TRY STATUS 100 TIMES 
   ENDSUB 
   GOTO 65
54 B0 = 0 
   RETURN                           *EXIT SUBROUTINE
* 
*-------- ABORT PROCESSOR 
* 
60 ENDSUB                           *END ACTIVE SUBROUTINES 
   MSG B5 TO LINE 1                 *COMMAND THAT ABORTED 
   MSG EM TO LINE 2                 *REASON FOR THE ABORT 
61 B7 = B7 + 1                      *BUMP ERROR COUNTER 
   B1 = B1 + 1                      *BUMP PASS COUNT
   DCN, ABT 63                      *CLEAR CHAINING FLAG
63 PICTURE
   HALT 
   MSG 20 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 47             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 24                          *RESTART THE TEST 
65 MSG 14 TO LINE 1                 *POST NO RESPONSE MSG 
   MSG 15(SB,B1) TO LINE 2          *POST COUPLER STATUS MSG
   B6 = 1 
   CALL 98B 
   GOTO 61
* 
*-------- DATA ERROR PROCESSOR
* 
70 B0 = B0 .AND. 7776               *CORRECT ERROR POINTER
   MSG 2(IB(B0),IB(B0+1),OB(B0),OB(B0+1))TO LINE 1
   B0 = B0 .RS. 1 
   MSG 3(WC,B1,B0)TO LINE 2 
   GOTO 61
   END 23 
COMPILE   - TFF111 -
   MODULE TFF12,6000(64),LOCK  *BUFFER FLAG BITS TEST 
***       TFF12 - BUFFER FLAG BITS TEST 
**        TFF12 - BUFFER FLAG BITS TEST 
*         ----------------------------- 
* 
*   OVERVIEW -
* 
*         TFF12 VERIFIES THE CAPABILITY OF THE COMMUNICATIONS PROCESSOR 
*         (NPU) TO CHAIN BUFFERS WHEN THE FLAG BITS (8,9,10,11) ARE SET 
*         FOR A CHARACTER IN THE DATA BUFFER SENT BY THE PPU.  THIS 
*         VERIFICATION IS ACCOMPLISHED BY LOADING A SMALL PROGRAM INTO
*         THE NPU WHICH WILL SET UP FOUR BUFFERS AND THE PROPER CHAIN 
*         ADDRESSES IN THE EACH BUFFERS LAST WORD ADDRESS (LWA).  THE 
*         NPU THEN LOADS THE ADDRESS OF THE FIRST BUFFER INTO THE 
*         MEMORY ADDRESS REGISTER AND WAITS FOR AN INTERRUPT.  THE
*         OUTPUT PROGRAM FUNCTION IS USED TO LOAD THE PROGRAM AND 
*         INTERRUPT ROUTINE INTO THE NPU.  THE PROGRAM IS STARTED WITH
*         THE START CP FUNCTION.  THE DATA TRANSFERS BEGIN WHEN THE NPU 
*         LOAD THE MAR WITH THE ADDRESS OF THE FIRST BUFFER.  THE PPU 
*         THEN OUTPUTS 374B WORDS WITH EVERY 77TH WORD HAVING A FLAG
*         BIT SET (WORD(77) HAS BIT 8 SET, WORD(175) HAS BIT 9 SET, 
*         ETC.).  LAST WORD HAS BIT 11 SET WHICH CAUSES THE NPU TO BE 
*         INTERRUPTED THE NPU THEN RELOADS THE ADDRESS OF THE FIRST 
*         BUFFER INTO THE MEMORY ADDRESS REGISTER AND WAITS FOR AN
*         INTERRUPT.  THE PPU INPUTS THE DATA AND CHECKS FOR ERRORS.
*         THE PROCESS IS REPEATED 400B TIMES WITH DATA PATTERNS OF 0000 
*         THRU 400B.  THE NPU BUFFER ARE LOCATED AT ADDRESSES 1000, 
*         1FFF,2081 AND 2FFF. 
* 
*   DESCRIPTION - 
* 
*         1. POST RUNNING MESSAGE, CALL TFF98A IF P1 NOT EQUAL TO ZERO. 
*         2. RESERVE THE I/O CHANNEL. 
*         3. FUNCTION 200B, CLEAR NPU.  GO TO STEP 19 IF THIS FUNCTION
*            ABORTS.
*         4. FUNCTION 400B, CLEAR COUPLER.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*         5. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*         6. INPUT COUPLER STATUS.  GO TO STEP 19 IF THIS COMMAND 
*            ABORTS.
*         7. IF BIT 2 OF COUPLER STATUS (NPU REGISTER LOADED) IS SET GO 
*            TO STEP 8.  OTHERWISE, GO TO STEP 10.
*         8. FUNCTION 4, INPUT NPU STATUS.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*         9. INPUT NPU STATUS.  GO TO STEP 19 IF THIS COMMAND ABORTS. 
*        10. FUNCTION 15B, OUTPUT PROGRAM.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*        11. OUTPUT 270B WORDS FROM OUTPUT BUFFER (THIS IS THE PROGRAM
*            THAT EXECUTES IN THE 2550).  GO TO STEP 19 IF THIS COMMAND 
*            ABORTS.
*        12. FUNCTION 10B, LOAD MEMORY ADDRESS REGISTER 0.  GO TO 
*            STEP 19 IF THIS FUNCTION ABORTS. 
*        13. OUTPUT UPPER 8 BITS OF MEMORY ADDRESS.  GO TO STEP 19 IF 
*            THIS COMMAND ABORTS. 
*        14. FUNCTION 11B, LOAD MEMORY ADDRESS REGISTER 1.  GO TO 
*            STEP 19 IF THIS FUNCTION ABORTS. 
*        15. OUTPUT LOWER 8 BITS OF MEMORY ADDRESS.  GO TO STEP 19 IF 
*            THIS COMMAND ABORTS. 
*        16. FUNCTION 15B, OUTPUT PROGRAM.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*        17. OUTPUT 20 WORDS (THIS IS THE 2550 INTERRUPT HANDLER).  GO
*            TO STEP 19 IF THIS COMMAND ABORTS. 
*        18. EXIT TO MODULE TFF101. 
*        19. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            REASON FOR THE ABORT.  HALT, THEN GO TO STEP 2.
* 
*         - NOTE -
* 
*         THE FOLLOWING DESCRIPTION APPLIES TO THE TEST PROGRAM 
*         WHICH IS DOWNLINE LOADED INTO THE 2550 BY THIS MODULE.
* 
*         1. CLEAR ALL PROGRAM PROTECT BITS FOR ADDRESS 1000 THRU 
*            3FFF.
*         2. LOAD THE BUFFER LENGTH REGISTER WITH 0080 HEX. 
*         3. SET UP FWA OF ALL BUFFERS WITH LCD/FCD OF FF04 AND 
*            SET BUFFER CHAIN FLAG IN ALL BUFFERS FWA+1.
*         4. SET CHAIN ADDRESS INTO LWA OF FIRST 3 BUFFERS
*            AND SET 0 INTO LWA OF LAST BUFFER. 
*         5. LOAD THE MEMORY ADDRESS REGISTER WITH THE BUFFER 
*            ADDRESS (1000).
*         6. ENABLE COUPLER INTERRUPTS. 
*         7. HANG, WHEN INTERRUPT OCCURS GO TO STEP 8.
*         8. TEST COUPLER STATUS FOR TRANSMISSION COMPLETE. 
*            IF TRANSMISSION COMPLETE IS SET GO TO STEP 9.
*            ELSE HANG. 
*         9. LOAD MEMORY ADDRESS REGISTER WITH THE BUFFER 
*            ADDRESS (1000).
*        10. ENABLE COUPLER INTERRUPTS. 
*        11. HANG, WHEN INTERRUPT OCCURS GO TO STEP 12. 
*        12. TEST COUPLER STATUS FOR TRANSMISSION COMPLETE.  IF 
*            TRANSMISSION COMPLETE IS SET GO TO STEP 2, ELSE HANG.
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. TFF12 - ABORT ON CLEAR COUPLER FUNCTION     (E400) 
*         3. TFF12 - ABORT ON CLEAR NPU FUNCTION         (E200) 
*         4. TFF12 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015) 
*         5. TFF12 - ABORT ON INPUT NPU STATUS FUNCTION  (E004) 
*         6. TFF12 - ABORT ON INPUT COUPLER STATUS FUNC  (E005) 
*         7. TFF12 - ABORT ON .OUT. COMMAND 
*         8. TFF12 - ABORT ON .IN. COMMAND
*         9. TFF12 - OUTPUT WT ERROR ACT=*OCT EXP=*OCT
*        10. TFF12 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010) 
*        11. TFF12 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011) 
* 
*   REGISTER USAGE -
* 
*         B5 = MESSAGE NUMBER IF ABORT
*         B7 = ERROR COUNTER
* 
*   MODULES CALLED -
* 
*         TFF98A
* 
1  FORMAT TFF12 - BUFFER FLAG BITS TEST 
2  FORMAT TFF12 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010)
3  FORMAT TFF12 - ABORT ON CLEAR COUPLER FUNCTION     (E400)
4  FORMAT TFF12 - ABORT ON CLEAR NPU FUNCTION         (E200)
5  FORMAT TFF12 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015)
6  FORMAT TFF12 - ABORT ON INPUT NPU STATUS FUNCTION  (E004)
7  FORMAT TFF12 - ABORT ON INPUT COUPLER STATUS FUNC  (E005)
10 FORMAT TFF12 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011)
12 FORMAT TFF12 - ABORT ON .OUT. COMMAND
13 FORMAT TFF12 - ABORT ON .IN. COMMAND 
14 FORMAT TFF12 - OUTPUT WT ERROR ACT=*OCT EXP=*OCT 
16 FORMAT TFF12 - ERROR(S) IN MODULE = *DEC 
17 FORMAT --------------------------------------------------- 
*  DATA(OB,H)E000,1000       *LOAD Q WITH 1000
*  DATA(OB(4),H)0700         *CLEAR PROTECT BIT 
*  DATA(OB(6),H)0D01         *ADD 1 TO Q
*  DATA(OB(10),H)0814        *TRANSFER Q TO A 
*  DATA(OB(12),H)B000,3FFF   *TEST IF A = 3FFF
*  DATA(OB(16),H)0101        *SKIP 1 IF A = 0 
*  DATA(OB(20),H)18F9        *JUMP BACK 6 LOCATIONS 
*  DATA(OB(22),H)E000,0658   *LOAD Q WITH BUFFER LENGTH FUNC
*  DATA(OB(26),H)C000,0080   *LOAD A WITH BUFFER LENGTH 
*  DATA(OB(32),H)0B04        *START I/O(A TO BUFFER LENGTH REGISTER)
*  DATA(OB(34),H)C000,FF04   *LOAD A WITH LCD/FCD FOR BUFFERS 
*  DATA(OB(40),H)6400,1000   *STORE A AT 1000 
*  DATA(OB(44),H)6400,1FFF   *STORE A AT 1FFF 
*  DATA(OB(50),H)6400,2081   *STORE A AT 2081 
*  DATA(OB(54),H)6400,2FFF   *STORE A AT 2FFF 
*  DATA(OB(60),H)C000,0000   *LOAD A WITH 0 
*  DATA(OB(64),H)6400,1001   *STORE A AT 1001 
*  DATA(OB(70),H)6400,2000   *STORE A AT 2000 
*  DATA(OB(74),H)6400,2082   *STORE A AT 2082 
*  DATA(OB(100),H)C000,8000  *LOAD A WITH 8000
*  DATA(OB(104),H)6400,3000  *STORE A AT 3000 
*  DATA(OB(110),H)C000,1FFF  *LOAD A WITH 1FFF
*  DATA(OB(114),H)6400,1080  *STORE A AT 1080 (LWA) 
*  DATA(OB(120),H)C000,2081  *LOAD A WITH 2081
*  DATA(OB(124),H)6400,207F  *STORE A AT 207F (LWA) 
*  DATA(OB(130),H)C000,2FFF  *LOAD A WITH 2FFF
*  DATA(OB(134),H)6400,2101  *STORE A AT 2101 (LWA) 
*  DATA(OB(140),H)C000,0000  *LOAD A WITH 0 
*  DATA(OB(144),H)6400,307F  *STORE A AT 307F (LWA) 
*  DATA(OB(150),H)E000,066C  *LOAD Q WITH LOAD MAR FUNC 
*  DATA(OB(154),H)C000,1000  *LOAD A WITH 1000
*  DATA(OB(160),H)0B04       *START I/O(A TO MAR) 
*  DATA(OB(162),H)C000,0060  *LOAD A WITH 60
*  DATA(OB(166),H)0821       *TRANSFER A TO M 
*  DATA(OB(170),H)0400       *ENABLE INTERRUPTS 
*  DATA(OB(172),H)1800,FFFE  *HANG
*  DATA(OB(176),H)E000,0650  *LOAD Q WITH COUPLER STATUS FUNC 
*  DATA(OB(202),H)0B04       *START I/O(COUPLER STATUS TO A)
*  DATA(OB(204),H)6400,00FF  *STORE STATUS AT 00FF
*  DATA(OB(210),H)0FCA       *LEFT SHIFT A 10 PLACES
*  DATA(OB(212),H)0131       *SKIP 1 IF A NEGATIVE
*  DATA(OB(214),H)18FF       *HANG NPU
*  DATA(OB(216),H)C000,1000  *LOAD A WITH 1000
*  DATA(OB(222),H)E000,066C  *LOAD Q WITH LOAD MAR FUNC 
*  DATA(OB(226),H)0B04       *START I/O(A TO MAR) 
*  DATA(OB(230),H)C000,0060  *LOAD A WITH 60
*  DATA(OB(234),H)0821       *TRANSFER A TO M 
*  DATA(OB(236),H)0400       *ENABLE INTERRUPTS 
*  DATA(OB(240),H)1800,FFFE  *HANG WAIT FOR INTERRUPT 
*  DATA(OB(244),H)E000,0650  *LOAD Q WITH COUPLER STATUS FUNC 
*  DATA(OB(250),H)0B04       *START I/O(COUPLER STATUS TO A)
*  DATA(OB(252),H)6400,00FF  *STORE STATUS AT 00FF
*  DATA(OB(256),H)0FCA       *LEFT SHIFT A 10 PLACES
*  DATA(OB(260),H)0131       *SKIP 1 IF A NEGATIVE
*  DATA(OB(262),H)18FF       *HANG NPU
*  DATA(OB(264),H)1400,0009  *REPEAT THE PROGRAM
   DATA(OB,H)E000,1000,0700,0D01,0814,
  ,B000,3FFF,0101,18F9,E000,0658,C000,
  ,0080,0B04,C000,FF04,6400,1000,6400,
  ,1FFF,6400,2081,6400,2FFF,C000,0000,
  ,6400,1001,6400,2000,6400,2082,C000,
  ,8000,6400,3000,C000,1FFF,6400,1080,
  ,C000,2081,6400,207F,C000,2FFF,6400,
  ,2101,C000,0000,6400,307F,E000,066C,
  ,C000,1000,0B04,C000,0060,0821,0400,
  ,1800,FFFE,E000,0650,0B04,6400,00FF,
  ,0FCA,0131,18FF,C000,1000,E000,066C,
  ,0B04,C000,0060,0821,0400,1800,FFFE,
  ,E000,0650,0B04,6400,00FF,0FCA,0131,
  ,18FF,1400,0009 
* 
*-------- INTERRUPT ROUTINE 
* 
   DATA(OB(300),H)0114       *LOAD ADDRESS
   DATA(OB(302),H)0B00       *PASS
   DATA(OB(304),H)D8FE       *ADD 1 TO LOC - 1
   DATA(OB(306),H)D8FD       *ADD 1 TO THIS LOC MINUS 2 
   DATA(OB(310),H)1CFC       *JUMP TO CONTENTS OF THIS LOC-3
   DATA(OB(312),H)0B00       *PASS
   DATA(OB(314),H)D8FE       *ADD 1 TO LOC - 1
   DATA(OB(316),H)D8FD       *ADD 1 TO THIS LOC MINUS 2 
   DATA(OB(320),H)1CFC       *JUMP TO CONTENTS OF THIS LOC-3
20 MSG 1 TO DISPLAY,PRINT           *POST RUNNING MESSAGE 
   IF (P1.EQ.0) GOTO 21             *NOT SECOND COUPLER 
   B0 = 40                          *INDEX FOR THIS MODULE
   COPY OB TO IB FOR 500B           *SAVE NPU CODE IN IB
   CALL 98A                         *HAVE CODE CHANGED
* 
*-------- DOWNLINE LOAD 2550
* 
21 RES                              *RESERVE THE I/O CHANNEL
   B5 = 4                           *MESSAGE NUMBER IF ABORT
   FUNC 200, ABT 60                 *CLEAR NPU FUNCTION 
   B5 = 3                           *MESSAGE NUMBER IF ABORT
   FUNC 400, ABT 60                 *CLEAR COUPLER FUNCTION 
   B5 = 7                           *MESSAGE NUMBER IF ABORT
   FUNC 5, ABT 60                   *COUPLER STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 1 WORDS TO IB, ABT 60         *INPUT COUPLER STATUS 
   IF(IB .AND. 4 .NE. 4) GOTO 22    *NPU REGISTER NOT LOADED
   B5 = 6                           *MESSAGE NUMBER IF ABORT
   FUNC 4, ABT 60                   *NPU STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 1 WORDS TO IB, ABT 60         *INPUT NPU REGISTER 
22 B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 15, ABT 60                  *OUTPUT PROGRAM FUNCTION
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 270 WORDS FROM OB, ABT 60    *OUTPUT TEST PROGRAM
   IF(WT .EQ. 270)GOTO 23 
   B5 = 270 
   MSG 14(WT,B5)TO LINE 1 
   GOTO 61
23 B5 = 2                           *MESSAGE NUMBER IF ABORT
   FUNC 10B, ABT 60                 *LOAD MAR0 FUNC 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(300), ABT 60  *UPPER 8 BITS OF ADDR
   B5 = 10                          *MESSAGE NUMBER IF ABORT
   FUNC 11B, ABT 60                 *LOAD MAR1 FUNC 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(301), ABT 60  *LOWER BITS OF ADDR
   B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 15B, ABT 60                 *OUTPUT PROGRAM FUNC
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 20 WORDS FROM OB(302), ABT 60  *INTERRUPT ROUTINES 
   IF(WT .EQ. 20)GOTO 24
   B5 = 20
   MSG 14(WT,B5)TO LINE 1 
   GOTO 61
24 IF (B7 .EQ. 0)GOTO 47           *IF NO ERRORS IN MODULE
   MSG 16(B7) TO DAYFILE           *REPORT ERRORS TO DAYFILE
   IF(B7 .LT. 5)GOTO 47            *IF NPU LOADED 
   EXIT 
47 EXIT TO 121
* 
*-------- ABORT PROCESSOR 
* 
60 MSG B5 TO LINE 1                 *COMMAND THAT ABORTED 
   MSG EM TO LINE 2                 *REASON FOR THE ABORT 
61 B7 = B7 + 1                      *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 17 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 24             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 21                          *RESTART THE TEST 
   END 20 
COMPILE   - TFF12 - 
   MODULE TFF121,6000(64),LOCK  *BUFFER FLAG BITS TEST
***       TFF121 - BUFFER FLAG BITS TEST
**        TFF121 - BUFFER FLAG BITS TEST
*         ------------------------------
* 
*   DESCRIPTION - (TFF121)
* 
*         1. RESERVE THE I/O CHANNEL. 
*         2. FUNCTION 100B, STOP CP.  GO TO STEP 20 IF THIS FUNCTION
*            ABORTS.
*         3. FUNCTION 40B, START CP.  GO TO STEP 20 IF THIS FUNCTION
*            ABORTS.
*         4. DUPE 374B WORDS OF DATA PATTERN TO OUTPUT BUFFER.
*         5. RESERVE THE I/O CHANNEL. 
*         6. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 20 IF THIS 
*            FUNCTION ABORTS. 
*         7. INPUT COUPLER STATUS TO STATUS BUFFER.  GO TO STEP 20 IF 
*            THIS COMMAND ABORTS. 
*         8. IF COUPLER STATUS IS EQUAL TO 10B (MEMORY ADDRESS REGISTER 
*            LOADED) GO TO STEP 9.  ELSE GO TO STEP 6, 100B TIMES, THEN 
*            POST NPU NOT RESPONDING MESSAGE, CALL 98B FOR STATUS 
*            ANALYSIS, HALT, THEN GO TO STEP 1. 
*         9. SET FLAG BITS IN EVERY 77TH WORD OF OUTPUT BUFFER. 
*        10. FUNCTION 14B, OUTPUT DATA.  GO TO STEP 20 IF THIS FUNCTION 
*            ABORTS.
*        11. OUTPUT 374B WORDS OF DATA FROM OUTPUT BUFFER.  GO TO 
*            STEP 20 IF THIS COMMAND ABORTS.
*        12. RESERVE THE I/O CHANNEL. 
*        13. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 20 IF THIS 
*            FUNCTION ABORTS. 
*        14. INPUT COUPLER STATUS TO STATUS BUFFER.  GO TO STEP 20 IF 
*            THIS COMMAND ABORTS. 
*        15. IF COUPLER STATUS EQUAL TO 10B (MEMORY ADDRESS REGISTER
*            LOADED) GO TO STEP 16.  ELSE GO TO STEP 13, 100B TIMES,
*            POST NPU NOT RESPONDING MESSAGE, CALL 98B FOR STATUS 
*            ANALYSIS, HALT, THEN GO TO STEP 1. 
*        16. FUNCTION 3, INPUT DATA.  GO TO STEP 20 IF THIS FUNCTION
*            ABORTS.
*        17. INPUT 374B WORDS (DATA PATTERN).  GO TO STEP 20 IF THIS
*            COMMAND ABORTS.
*        18. COMPARE INPUT AND OUTPUT BUFFERS.  GO TO STEP 21 IF A
*            MISCOMPARE OCCURS. 
*        19. INCREMENT THE DATA PATTERN, IF NOT END OF DATA PATTERNS
*            GO TO STEP 4, OTHERWISE EXIT.
*        20. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            REASON FOR THE ABORT.  HALT, THEN GO TO STEP 1.
*        21. WE ARRIVE AT THIS STEP IF A MISCOMPARE OCCURS BETWEEN WHAT 
*            WAS SENT TO THE NPU AND WHAT WAS RETURNED.  POST MESSAGES
*            SHOWING THE ACTUAL AND EXPECTED DATA AND THE DIFFERENCES.
*            HALT, THEN GO TO STEP 19.
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. DATA ERROR - ACT=*H*HHEX EXP=*H*HHEX DIFF=*H*HHEX
*         3. TFF121- WC = *OCT PASS = *DEC BAD BYTE = *OCT
*         6. TFF121- ABORT ON STOP CP FUNCTION           (E100) 
*         5. TFF121- ABORT ON START CP FUNCTION          (E040) 
*         6. TFF121- ABORT ON INPUT COUPLER STATUS FUNC  (E005) 
*         7. TFF121- ABORT ON OUTPUT DATA FUNCTION       (E014) 
*         8. TFF121- ABORT ON INPUT DATA FUNCTION        (E003) 
*         9. TFF121- ABORT ON .OUT. COMMAND 
*        10. TFF121- ABORT ON .IN. OR .STATUS. COMMAND
*        11. TFF121- NPU NOT RESPONDING 
*        12. TFF121- OUTPUT WT ERROR ACT=*OCT EXP=*OCT
*        13. TFF121- INPUT WT ERROR ACT=*OCT EXP=*OCT 
*        14. TFF121- LAST COUPLER STATUS = *OCT  PASS = *DEC
*        15. TFF121- ABORT ON CLEAR NPU FUNCTION         (E200) 
* 
*   REGISTER USAGE -
* 
*         B0 = RETRY COUNTER/WORDS TO COMPARE (374B)
*         B1 = LOOP COUNTER/DATA PATTERN
*         B2 = LOGICAL DIFFERENCE ON DATA ERROR UPPER 8 BITS
*         B3 = LOGICAL DIFFERENCE ON DATA ERROR LOWER 8 BITS
*         B5 = MESSAGE NUMBER IF ABORT
*         B6 = NPU STATUS AVAILABLE FLAG
*         B7 = ERROR COUNTER
* 
*   CALLS - 
* 
*         TFF98B - ANALYZE COUPLER STATUS 
* 
1  FORMAT TFF121- BUFFER FLAG BITS TEST 
2  FORMAT DATA ERROR - ACT=*H*HHEX EXP=*H*HHEX DIFF=*H*HHEX 
3  FORMAT TFF121- WC = *OCT PASS = *DEC  BAD BYTE = *OCT
4  FORMAT TFF121- OUTPUT WT ERROR ACT=*OCT EXP=*OCT 
5  FORMAT TFF121- ABORT ON STOP CP FUNCTION           (E100)
6  FORMAT TFF121- ABORT ON START CP FUNCTION          (E040)
7  FORMAT TFF121- ABORT ON INPUT COUPLER STATUS FUNC  (E005)
10 FORMAT TFF121- ABORT ON OUTPUT DATA FUNCTION       (E014)
11 FORMAT TFF121- ABORT ON INPUT DATA FUNCTION        (E003)
12 FORMAT TFF121- ABORT ON .OUT. COMMAND
13 FORMAT TFF121- ABORT ON .IN. OR .STATUS. COMMAND 
14 FORMAT TFF121- NPU NOT RESPONDING
15 FORMAT TFF121- LAST COUPLER STATUS = *OCT  PASS = *DEC 
16 FORMAT TFF121- ERROR(S) IN MODULE = *DEC 
17 FORMAT TFF121- INPUT WT ERROR ACT=*OCT EXP=*OCT
20 FORMAT --------------------------------------------------- 
21 FORMAT TFF121- ABORT ON CLEAR NPU FUNCTION         (E200)
* 
*-------- START 2550 RUNNING
* 
23 MSG 1 TO DISPLAY,PRINT           *POST RUNNING MSG 
24 RES                              *RESERVE THE I/O CHANNEL
   B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 100, ABT 60                 *STOP CP FUNCTION 
   B5 = 21                          *MESSAGE NUMBER IF ABORT
   FUNC 200B, ABT 60                *CLEAR NPU FUNCTION 
   DELAY 4 MSEC 
   B5 = 6                           *MESSAGE NUMBER IF ABORT
   FUNC 40, ABT 60                  *START 2550 RUNNING 
   IB(504) = 0                      *CLEAR STATUS WORD
* 
*-------- DATA TRANSFER TEST
* 
   BA = 0 
   WC = 374 
30 DUP B1 TO OB FOR 374             *PUT PATTERN IN OUTBUF
31 RES                              *RESERVE THE I/O CHANNEL
   B0 = 0                           *CLEAR THE RETRY COUNTER
32 GOSUB 50                         *GET COUPLER STATUS 
   IF(SB .AND. 10 .EQ. 10)GOTO 33   *IF MAR LOADED
   GOTO 32 WHILE(B0 + 1 .NE. 100)   *TRY STATUS 100 TIMES 
   GOTO 62                          *ERROR MAR NOT LOADED 
33 B5 = 10                          *MESSAGE NUMBER IF ABORT
   FUNC 14B, ABT 60                 *OUTPUT DATA FUNCTION 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OB(76) = OB(76) .OR. 400         *SET FLAG BIT 0 
   OB(175) = OB(175) .OR. 1000      *SET FLAG BIT 1 
   OB(274) = OB(274) .OR. 2000      *SET FLAG BIT 2 
   OB(373) = OB(373) .OR. 4000      *SET FLAG BIT 3 
   OUT 374 WORDS FROM OB, ABT 60    *OUTPUT DATA
   IF(WT .EQ. 374)GOTO 40 
34 B5 = 374 
   MSG 4(WT,B5)TO LINE 1
   GOTO 61
40 RES                              *RESERVE THE I/O CHANNEL
   B0 = 0                           *CLEAR THE RETRY COUNTER
42 GOSUB 50                         *GET COUPLER STATUS 
   IF(SB .AND. 10 .EQ. 10)GOTO 43   *IF MAR LOADED
   GOTO 42 WHILE(B0 + 1 .NE. 100)   *TRY STATUS 100 TIMES 
   GOTO 62                          *ERROR MAR NOT LOADED 
43 B5 = 11                          *MESSAGE NUMBER IF ABORT
   FUNC 3, ABT 60                   *INPUT DATA FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 374 WORDS TO IB, ABT 60       *INPUT DATA 
   IF(WT .EQ. 374)GOTO 45 
44 MSG 17(WT,WC)TO LINE 1 
   GOTO 61
45 B0 = 374                         *WORDS TO COMPARE 
   COMPARE IB TO OB FOR B0, ABT 70  *CHECK THE DATA 
46 GOTO 30 WHILE (B1 + 1 .NE. 400)  *LOOP 400 TIMES 
47 IF(B7 .EQ. 0)GOTO 77             *IF NO ERRORS IN MODULE 
   MSG 16(B7) TO DAYFILE          *REPORT ERRORS TO DAYFILE 
77 EXIT 
* 
*-------- COUPLER STATUS SUBROUTINE 
* 
50 B5 = 7                           *MESSAGE NUMBER IF ABORT
   DELAY 20 MSEC
   FUNC 5, ABT 60                   *COUPLER STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   STATUS 1 WORDS TO SB, ABT 60     *INPUT COUPLER STATUS 
   IB(504) = IB(504) .OR. SB
   RETURN                           *EXIT SUBROUTINE
* 
*-------- ABORT PROCESSOR 
* 
60 ENDSUB                           *END ACTIVE SUBROUTINES 
   MSG B5 TO LINE 1                 *COMMAND THAT ABORTED 
   MSG EM TO LINE 2                 *REASON FOR THE ABORT 
61 B7 = B7 + 1                      *BUMP ERROR COUNTER 
   B1 = B1 + 1                      *BUMP PASS COUNT
   PICTURE
   HALT 
   MSG 20 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 47             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 24                          *RESTART THE TEST 
62 MSG 14 TO LINE 1                 *POST REG NOT LOADED MSG
   MSG 15(SB,B1) TO LINE 2          *POST COUPLER STATUS MSG
   B6 = 1 
   CALL 98B 
   GOTO 61
* 
*-------- DATA ERROR PROCESSOR
* 
70 B0 = B0 .AND. 7776               *CORRECT ERROR POINTER
   B2 = OB(B0) .XOR. IB(B0)         *CALCULATE DIFFERENCE 
   B3 = OB(B0+1) .XOR. IB(B0+1) 
   MSG 2(IB(B0),IB(B0+1),OB(B0),OB(B0+1),B2,B3)TO LINE 1
   B0 = B0 .RS. 1 
   MSG 3(WC,B1,B0)TO LINE 2 
   B7 = B7 + 1                      *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 20 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 47             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 46                          *CONTINUE THE TEST
   END 23 
COMPILE   - TFF121 -
   MODULE TFF13,6000(64),LOCK  *CHAIN ADDRESS ZERO TEST 
***       TFF13 - CHAIN ADDRESS ZERO TEST 
**        TFF13 - CHAIN ADDRESS ZERO TEST 
*         ------------------------------- 
* 
*   OVERVIEW -
* 
*         TFF13 VERIFIES THE CAPABILITY OF THE COMMUNICATIONS PROCESSOR 
*         (NPU) TO PROCESS CHAIN ADDRESS ZERO INTERRUPTS. THIS
*         VERIFICATION IS ACCOMPLISHED BY LOADING A SMALL PROGRAM 
*         INTO THE NPU WHICH WILL SET UP FOUR BUFFERS IN THE NPU
*         MEMORY EACH HAVING A CHAIN ADDRESS OF ZERO.  THE NPU
*         THEN LOADS THE MEMORY ADDRESS REGISTER AND WAITS FOR AN 
*         INTERRUPT.  THE OUTPUT PROGRAM FUNCTION IS USED TO LOAD 
*         THE PROGRAM AND INTERRUPT ROUTINE INTO THE NPU.  THE
*         PROGRAM IS STARTED WITH THE START CP FUNCTION.  THE 
*         DATA TRANSFERS BEGIN WHEN THE NPU LOADS THE MEMORY
*         ADDRESS REGISTER WITH THE ADDRESS OF THE FIRST BUFFER.
*         THE PPU THEN OUTPUTS 374B WORD WITH EVERY 77TH WORD 
*         HAVING A FLAG BIT SET WHICH CAUSES THE COUPLER TO 
*         BUFFER CHAIN AND RESULTS IN A CHAIN ADDRESS ZERO
*         INTERRUPT IN THE NPU.  AFTER THE OUTPUT IS COMPLETE 
*         THE NPU LOADS THE MEMORY ADDRESS REGISTER WITH THE
*         ADDRESS OF THE FIRST BUFFER AND THE PPU INPUTS 374B 
*         WORDS WHICH AGAIN CAUSES CHAIN ADDRESS ZERO INTERRUPTS
*         IN THE NPU.  THE PROCESS IS REPEATED 400B TIMES WITH
*         DATA PATTERNS OF 0000 THRU 400B.  THE NPU BUFFERS ARE 
*         LOCATED AT ADDRESS 1000,1FFF,2081, AND 2FFF IN NPU
*         MEMORY. 
* 
*   DESCRIPTION - 
* 
*         1. POST RUNNING MESSAGE, CALL TFF98A IF P1 NOT EQUAL TO ZERO. 
*         2. RESERVE THE I/O CHANNEL. 
*         3. FUNCTION 200B, CLEAR NPU.  GO TO STEP 19 IF THIS FUNCTION
*            ABORTS.
*         4. FUNCTION 400B, CLEAR COUPLER.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*         5. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*         6. INPUT COUPLER STATUS.  GO TO STEP 19 IF THIS COMMAND 
*            ABORTS.
*         7. IF BIT 2 OF COUPLER STATUS (NPU REGISTER LOADED) IS SET GO 
*            TO STEP 8.  OTHERWISE, GO TO STEP 10.
*         8. FUNCTION 4, INPUT NPU STATUS.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*         9. INPUT NPU STATUS.  GO TO STEP 19 IF THIS COMMAND ABORTS. 
*        10. FUNCTION 15B, OUTPUT PROGRAM.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*        11. OUTPUT 406B WORDS FROM OUTPUT BUFFER (THIS IS THE PROGRAM
*            THAT EXECUTES IN THE 2550).  GO TO STEP 19 IF THIS COMMAND 
*            ABORTS.
*        12. FUNCTION 10B, LOAD MEMORY ADDRESS REGISTER 0.  GO TO 
*            STEP 19 IF THIS FUNCTION ABORTS. 
*        13. OUTPUT UPPER 8 BITS OF MEMORY ADDRESS.  GO TO STEP 19 IF 
*            THIS COMMAND ABORTS. 
*        14. FUNCTION 11B, LOAD MEMORY ADDRESS REGISTER 1.  GO TO 
*            STEP 19 IF THIS FUNCTION ABORTS. 
*        15. OUTPUT LOWER 8 BITS OF MEMORY ADDRESS.  GO TO STEP 19 IF 
*            THIS COMMAND ABORTS. 
*        16. FUNCTION 15B, OUTPUT PROGRAM.  GO TO STEP 19 IF THIS 
*            FUNCTION ABORTS. 
*        17. OUTPUT 20 WORDS (THIS IS THE 2550 INTERRUPT HANDLER).  GO
*            TO STEP 19 IF THIS COMMAND ABORTS. 
*        18. EXIT TO MODULE TFF101. 
*        19. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            REASON FOR THE ABORT.  HALT, THEN GO TO STEP 2.
* 
*         - NOTE -
* 
*         THE FOLLOWING DESCRIPTION APPLIES TO THE TEST PROGRAM 
*         WHICH IS DOWNLINE LOADED INTO THE 2550 BY THIS MODULE.
* 
*         1. CLEAR ALL PROGRAM PROTECT BITS FOR ADDRESS 1000 THRU 
*            3FFF.
*         2. LOAD THE BUFFER LENGTH REGISTER WITH 0080 HEX. 
*         3. SET UP FWA OF ALL BUFFERS WITH LCD/FCD OF FF04 AND 
*            SET DO NOT BUFFER CHAIN FLAG IN ALL BUFFERS FWA+1. 
*         4. SET CHAIN ADDRESS OF ZERO IN LWA OF FIRST 3 BUFFERS
*            AND SET COUPLER STATUS WORD TO ZERO. 
*         5. LOAD THE MEMORY ADDRESS REGISTER WITH 1000, THE ADDRESS
*            OF THE FIRST BUFFER. 
*         6. ENABLE COUPLER INTERRUPTS. 
*         7. HANG, WHEN INTERRUPT OCCURS GO TO STEP 8.
*         8. TEST COUPLER STATUS FOR CHAIN ADDRESS ZERO STATUS. 
*            IF CHAIN ADDRESS ZERO GO TO STEP 9, ELSE HANG NPU. 
*         9. LOAD THE MEMORY ADDRESS REGISTER WITH 1FFF, THE ADDRESS
*            OF THE SECOND BUFFER.
*        10. ENABLE COUPLER INTERRUPTS. 
*        11. HANG, WHEN INTERRUPT OCCURS GO TO STEP 12. 
*        12. TEST COUPLER STATUS FOR CHAIN ADDRESS ZERO STATUS. 
*            IF CHAIN ADDRESS ZERO GO TO STEP 13, ELSE HANG NPU.
*        13. LOAD THE MEMORY ADDRESS REGISTER WITH 2081, THE ADDRESS
*            OF THE THIRD BUFFER. 
*        14. ENABLE COUPLER INTERRUPTS. 
*        15. HANG, WHEN INTERRUPT OCCURS GO TO STEP 16. 
*        16. TEST COUPLER STATUS FOR CHAIN ADDRESS ZERO STATUS. 
*            IF CHAIN ADDRESS ZERO GO TO STEP 17, ELSE HANG NPU.
*        17. LOAD THE MEMORY ADDRESS REGISTER WITH 2FFF, THE ADDRESS
*            OF THE FOURTH BUFFER.
*        18. ENABLE COUPLER INTERRUPTS. 
*        19. HANG, WHEN INTERRUPT OCCURS GO TO STEP 20. 
*        20. TEST COUPLER STATUS FOR TRANSMISSION COMPLETE. 
*            IF TRANSMISSION COMPLETE GO TO STEP 21, ELSE HANG NPU. 
*        21. REPEAT STEPS 5 THRU 20 (THE PPU IS NOW INPUTING THE
*            DATA BUFFERS), THEN GO TO STEP 2.
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. TFF13 - ABORT ON CLEAR COUPLER FUNCTION     (E400) 
*         3. TFF13 - ABORT ON CLEAR NPU FUNCTION         (E200) 
*         4. TFF13 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015) 
*         5. TFF13 - ABORT ON INPUT NPU STATUS FUNCTION  (E004) 
*         6. TFF13 - ABORT ON INPUT COUPLER STATUS FUNC  (E005) 
*         7. TFF13 - ABORT ON .OUT. COMMAND 
*         8. TFF13 - ABORT ON .IN. COMMAND
*         9. TFF13 - OUTPUT WT ERROR ACT=*OCT EXP=*OCT
*        10. TFF13 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010) 
*        11. TFF13 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011) 
* 
*   REGISTER USAGE -
* 
*         B5 = MESSAGE NUMBER IF ABORT
*         B7 = ERROR COUNTER
* 
*   MODULES CALLED -
* 
*         TFF98A
* 
1  FORMAT TFF13 - CHAIN ADDRESS ZERO TEST 
2  FORMAT TFF13 - ABORT ON LOAD MEMORY ADDRESS 0 FUNC (E010)
3  FORMAT TFF13 - ABORT ON CLEAR COUPLER FUNCTION     (E400)
4  FORMAT TFF13 - ABORT ON CLEAR NPU FUNCTION         (E200)
5  FORMAT TFF13 - ABORT ON OUTPUT PROGRAM FUNCTION    (E015)
6  FORMAT TFF13 - ABORT ON INPUT NPU STATUS FUNCTION  (E004)
7  FORMAT TFF13 - ABORT ON INPUT COUPLER STATUS FUNC  (E005)
10 FORMAT TFF13 - ABORT ON LOAD MEMORY ADDRESS 1 FUNC (E011)
12 FORMAT TFF13 - ABORT ON .OUT. COMMAND
13 FORMAT TFF13 - ABORT ON .IN. COMMAND 
14 FORMAT TFF13 - OUTPUT WT ERROR ACT=*OCT EXP=*OCT 
15 FORMAT --------------------------------------------------
16 FORMAT TFF13 - ERROR(S) IN MODULE = *DEC 
*  DATA(OB,H)E000,1000       *LOAD Q WITH 1000
*  DATA(OB(4),H)0700         *CLEAR PROTECT BIT 
*  DATA(OB(6),H)0D01         *ADD 1 TO Q
*  DATA(OB(10),H)0814        *TRANSFER Q TO A 
*  DATA(OB(12),H)B000,3FFF   *CHECK IF A = 3FFF 
*  DATA(OB(16),H)0101        *SKIP 1 IF A = 0 
*  DATA(OB(20),H)18F9        *JUMP BACK 6 
*  DATA(OB(22),H)E000,0658   *LOAD Q WITH 0658(LOAD BUFFER LENGTH)
*  DATA(OB(26),H)C000,0080   *LOAD A WITH 80(BUFFER LENGTH) 
*  DATA(OB(32),H)0B04        *START I/O(A TO BUFFER LENGTH) 
*  DATA(OB(34),H)C000,FF04   *LOAD A WITH LCD/FCD 
*  DATA(OB(40),H)6400,1000   *STORE A AT 1000 
*  DATA(OB(44),H)6400,1FFF   *STORE A AT 1FFF 
*  DATA(OB(50),H)6400,2081   *STORE A AT 2081 
*  DATA(OB(54),H)6400,2FFF   *STORE A AT 2FFF 
*  DATA(OB(60),H)C000,0000   *LOAD A WITH 0 
*  DATA(OB(64),H)6400,1080   *STORE A AT 1080 
*  DATA(OB(70),H)6400,207F   *STORE A AT 207F 
*  DATA(OB(74),H)6400,2101   *STORE A AT 2101 
*  DATA(OB(100),H)6400,307F  *STORE A AT 307F 
*  DATA(OB(104),H)6400,00FF  *STORE ZERO AT OOFF
*  DATA(OB(110),H)E000,066C  *LOAD Q WITH LOAD MAR FUNC 
*  DATA(OB(114),H)C000,1000  *LOAD A WITH BUFFER ADDRESS
*  DATA(OB(120),H)0B04       *START I/O(A TO MAR) 
*  DATA(OB(122),H)C000,0060  *LOAD A WITH INTERRUPT MASK
*  DATA(OB(126),H)0821       *TRANSFER A TO M 
*  DATA(OB(130),H)0400       *ENABLE INTERRUPTS 
*  DATA(OB(132),H)1800,FFFE  *HANG WAIT FOR INTERRUPT 
*  DATA(OB(136),H)5400,006C  *RETURN JUMP TO 6C 
*  DATA(OB(142),H)1800,FFFE  *HANG WAIT FOR INTERRUPT 
*  DATA(OB(146),H)5400,006C  *RETURN JUMP TO 6C 
*  DATA(OB(152),H)1800,FFFE  *HANG WAIT FOR INTERRUPT 
*  DATA(OB(156),H)5400,006C  *RETURN JUMP TO 6C 
*  DATA(OB(162),H)1800,FFFE  *HANG WAIT FOR INTERRUPT 
*  DATA(OB(166),H)E000,0650  *LOAD Q WITH COUPLER STATUS FUNC 
*  DATA(OB(172),H)0B04       *START I/O(STATUS TO A)
*  DATA(OB(174),H)6400,00FF  *SAVE STATUS AT 00FF 
*  DATA(OB(200),H)0FCA       *LEFT SHIFT A 10 PLACES
*  DATA(OB(202),H)0131       *SKIP 1 IF A NEGATIVE
*  DATA(OB(204),H)18FF       *HANG NPU
*  DATA(OB(206),H)C000,0080  *LOAD A WITH 80
*  DATA(OB(212),H)6400,0076  *STORE A AT 0076 
*  DATA(OB(216),H)C000,1000  *LOAD A WITH BUFFER ADDRESS
*  DATA(OB(222),H)E000,066C  *LOAD Q WITH LOAD MAR FUNC 
*  DATA(OB(226),H)0B04       *START I/O(A TO MAR) 
*  DATA(OB(230),H)C000,0060  *LOAD A WITH INTERRUPT MASK
*  DATA(OB(234),H)0821       *TRANSFER A TO M 
*  DATA(OB(236),H)0400       *ENABLE INTERRUPTS 
*  DATA(OB(240),H)1800,FFFE  *HANG WAIT FOR INTERRUPT 
*  DATA(OB(244),H)5400,006C  *RETURN JUMP TO 6C 
*  DATA(OB(250),H)1800,FFFE  *HANG WAIT FOR INTERRUPT 
*  DATA(OB(254),H)5400,006C  *RETURN JUMP TO 6C 
*  DATA(OB(260),H)1800,FFFE  *HANG WAIT FOR INTERRUPT 
*  DATA(OB(264),H)5400,006C  *RETURN JUMP TO 6C 
*  DATA(OB(270),H)1800,FFFE  *HANG WAIT FOR INTERRUPT 
*  DATA(OB(274),H)E000,0650  *LOAD Q WITH COUPLER STATUS FUNC 
*  DATA(OB(300),H)0B04       *START I/O(COUPLER STATUS TO A)
*  DATA(OB(302),H)6400,00FF  *SAVE STATUS AT 00FF 
*  DATA(OB(306),H)0FCA       *LEFT SHIFT A 10 PLACES
*  DATA(OB(310),H)0131       *SKIP 1 IF A NEGATIVE
*  DATA(OB(312),H)18FF       *HANG NPU
*  DATA(OB(314),H)C000,0080  *LOAD A WITH 80
*  DATA(OB(320),H)6400,0076  *STORE A AT 0076 
*  DATA(OB(324),H)1400,0009  *JUMP TO START OF PROGRAM
*  DATA(OB(330),H)0000       *ADDRESS 66(SUBROUTINE ENTRY/EXIT) 
*  DATA(OB(332),H)E000,0650  *LOAD Q WITH COUPLER STATUS FUNC 
*  DATA(OB(336),H)0B04       *START I/O(COUPLER STATUS TO A)
*  DATA(OB(340),H)6400,00FF  *SAVE STATUS IN 00FF 
*  DATA(OB(344),H)0FC1       *LEFT SHIFT A 15 PLACES
*  DATA(OB(346),H)0131       *SKIP 1 IF A NEGATIVE
*  DATA(OB(350),H)18FF       *HANG NPU
*  DATA(OB(352),H)C400,0080  *LOAD A WITH CONTENTS OF ADDR 80 
*  DATA(OB(356),H)E000,066C  *LOAD Q WITH LOAD MAR FUNC 
*  DATA(OB(362),H)0B04       *START I/O(A TO MAR) 
*  DATA(OB(364),H)D8FB       *ADD 1 TO LOC - 4
*  DATA(OB(366),H)C000,0060  *LOAD A WITH INTERRUPT MASK
*  DATA(OB(372),H)0821       *TRANSFER A TO M 
*  DATA(OB(374),H)0400       *ENABLE INTERRUPTS 
*  DATA(OB(376),H)1CEC       *EXIT SUBROUTINE 
*  DATA(OB(400),H)1FFF       *BUFFER ADDRESS
*  DATA(OB(402),H)2081       *BUFFER ADDRESS
*  DATA(OB(404),H)2FFF       *BUFFER ADDRESS
   DATA(OB,H)E000,1000,0700,0D01,0814,
  ,B000,3FFF,0101,18F9,E000,0658,C000,
  ,0080,0B04,C000,FF04,6400,1000,6400,
  ,1FFF,6400,2081,6400,2FFF,C000,0000,
  ,6400,1080,6400,207F,6400,2101,6400,
  ,307F,6400,00FF,E000,066C,C000,1000,
  ,0B04,C000,0060,0821,0400,1800,FFFE,
  ,5400,006C,1800,FFFE,5400,006C,1800,
  ,FFFE,5400,006C,1800,FFFE,E000,0650,
  ,0B04,6400,00FF,0FCA,0131,18FF,C000,
  ,0080,6400,0076,C000,1000,E000,066C,
  ,0B04,C000,0060,0821,0400,1800,FFFE,
  ,5400,006C,1800,FFFE,5400,006C,1800,
  ,FFFE,5400,006C,1800,FFFE,E000,0650,
  ,0B04,6400,00FF,0FCA,0131,18FF,C000,
  ,0080,6400,0076,1400,0009,0000,E000,
  ,0650,0B04,6400,00FF,0FC1,0131,18FF,
  ,C400,0080,E000,066C,0B04,D8FB,C000,
  ,0060,0821,0400,1CEC,1FFF,2081,2FFF 
* 
*-------- INTERRUPT ROUTINE 
* 
   DATA(OB(406),H)0114       *LOAD ADDRESS
   DATA(OB(410),H)0B00       *PASS
   DATA(OB(412),H)D8FE       *ADD 1 TO LOC - 1
   DATA(OB(414),H)D8FD       *ADD 1 TO LOC - 2
   DATA(OB(416),H)1CFC       *JUMP TO CONTENTS OF THIS LOC-3
   DATA(OB(420),H)0B00       *PASS
   DATA(OB(422),H)D8FE       *ADD 1 TO LOC - 1
   DATA(OB(424),H)D8FD       *ADD 1 TO LOC - 2
   DATA(OB(426),H)1CFC       *JUMP TO CONTENTS OF THIS LOC-3
20 MSG 1 TO DISPLAY,PRINT           *POST RUNNING MESSAGE 
   IF (P1.EQ.0) GOTO 21             *NOT SECONDARY COUPLER
   B0 = 50                          *INDEX FOR THIS MODULE
   COPY OB TO IB FOR 500B           *SAVE NPU CODE IN IB
   CALL 98A                         *HAVE CODE CHANGED
* 
*-------- DOWNLINE LOAD 2550
* 
21 RES                              *RESERVE THE I/O CHANNEL
   B5 = 4                           *MESSAGE NUMBER IF ABORT
   FUNC 200, ABT 60                 *CLEAR NPU FUNCTION 
   B5 = 3                           *MESSAGE NUMBER IF ABORT
   FUNC 400, ABT 60                 *CLEAR COUPLER FUNCTION 
   B5 = 7                           *MESSAGE NUMBER IF ABORT
   FUNC 5, ABT 60                   *COUPLER STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 1 WORDS TO IB, ABT 60         *INPUT COUPLER STATUS 
   IF(IB .AND. 4 .NE. 4) GOTO 22    *NPU REGISTER NOT LOADED
   B5 = 6                           *MESSAGE NUMBER IF ABORT
   FUNC 4, ABT 60                   *NPU STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 1 WORDS TO IB, ABT 60         *INPUT NPU REGISTER 
22 B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 15, ABT 60                  *OUTPUT PROGRAM FUNCTION
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 406 WORDS FROM OB, ABT 60    *OUTPUT TEST PROGRAM
   IF(WT .EQ. 406)GOTO 23           *IF ALL WORDS OUTPUT
   B5 = 406 
   MSG 14(WT,B5)TO LINE 1 
   GOTO 61
23 B5 = 2                           *MESSAGE NUMBER IF ABORT
   FUNC 10B, ABT 60                 *LOAD MAR0 FUNC 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(406), ABT 60  *UPPER 8 BITS OF ADDR
   B5 = 10                          *MESSAGE NUMBER IF ABORT
   FUNC 11B, ABT 60                 *LOAD MAR1 FUNC 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 1 WORDS FROM OB(407), ABT 60  *LOWER BITS OF ADDRESS 
   B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 15B, ABT 60                 *OUTPUT PROGRAM FUNC
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 20 WORDS FROM OB(410), ABT 60  *INTERRUPT ROUTINES 
   IF(WT .EQ. 20)GOTO 24
   B5 = 20
   MSG 14(WT,B5)TO LINE 1 
   GOTO 61
24 IF (B7 .EQ. 0)GOTO 47           *IF NO ERRORS IN MODULE
   MSG 16(B7) TO DAYFILE           *REPORT ERRORS TO DAYFILE
   IF(B7 .LT. 5)GOTO 47            *IF NPU LOADED 
   GOTO 77
47 EXIT TO 131
* 
*-------- ABORT PROCESSOR 
* 
60 MSG B5 TO LINE 1                 *COMMAND THAT ABORTED 
   MSG EM TO LINE 2                 *REASON FOR THE ABORT 
61 B7 = B7 + 1                      *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 15 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 24             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 21                          *RESTART THE TEST 
77 END 20 
COMPILE   - TFF13 - 
   MODULE TFF131,6000(64),LOCK  *CHAIN ADDRESS ZERO TEST
***       TFF131 - CHAIN ADDRESS ZERO TEST
**        TFF131 - CHAIN ADDRESS ZERO TEST
*         --------------------------------
* 
*   DESCRIPTION - (TFF131)
* 
*         1. RESERVE THE I/O CHANNEL. 
*         2. FUNCTION 100B, STOP CP.  GO TO STEP 20 IF THIS FUNCTION
*            ABORTS.
*         3. FUNCTION 40B, START CP.  GO TO STEP 20 IF THIS FUNCTION
*            ABORTS.
*         4. DUPE 374B WORDS OF DATA PATTERN TO OUTPUT BUFFER.
*         5. RESERVE THE I/O CHANNEL. 
*         6. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 20 IF THIS 
*            FUNCTION ABORTS. 
*         7. INPUT COUPLER STATUS TO STATUS BUFFER.  GO TO STEP 20 IF 
*            THIS COMMAND ABORTS. 
*         8. IF COUPLER STATUS IS EQUAL TO 10B (MEMORY ADDRESS REGISTER 
*            LOADED) GO TO STEP 9.  ELSE GO TO STEP 6, 100B TIMES, THEN 
*            POST NPU NOT RESPONDING MESSAGE, CALL 98B FOR STATUS 
*            ANALYSIS, HALT, THEN GO TO STEP 1. 
*         9. SET FLAG BITS IN EVERY 77TH WORD OF OUTPUT BUFFER. 
*        10. FUNCTION 14B, OUTPUT DATA.  GO TO STEP 20 IF THIS FUNCTION 
*            ABORTS.
*        11. OUTPUT 374B WORDS OF DATA FROM OUTPUT BUFFER.  GO TO 
*            STEP 20 IF THIS COMMAND ABORTS.
*        12. RESERVE THE I/O CHANNEL. 
*        13. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 20 IF THIS 
*            FUNCTION ABORTS. 
*        14. INPUT COUPLER STATUS TO STATUS BUFFER.  GO TO STEP 20 IF 
*            THIS COMMAND ABORTS. 
*        15. IF COUPLER STATUS EQUAL TO 10B (MEMORY ADDRESS REGISTER
*            LOADED) GO TO STEP 16.  ELSE GO TO STEP 13, 100B TIMES,
*            POST NPU NOT RESPONDING MESSAGE, CALL 98B FOR STATUS 
*            ANALYSIS, HALT, THEN GO TO STEP 1. 
*        16. FUNCTION 3, INPUT DATA.  GO TO STEP 20 IF THIS FUNCTION
*            ABORTS.
*        17. INPUT 374B WORDS (DATA PATTERN).  GO TO STEP 20 IF THIS
*            COMMAND ABORTS.
*        18. COMPARE INPUT AND OUTPUT BUFFERS.  GO TO STEP 21 IF A
*            MISCOMPARE OCCURS. 
*        19. INCREMENT THE DATA PATTERN, IF NOT END OF DATA PATTERNS
*            GO TO STEP 4, OTHERWISE EXIT.
*        20. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            REASON FOR THE ABORT.  HALT, THEN GO TO STEP 1.
*        21. WE ARRIVE AT THIS STEP IF A MISCOMPARE OCCURS BETWEEN WHAT 
*            WAS SENT TO THE NPU AND WHAT WAS RETURNED.  POST MESSAGES
*            SHOWING THE ACTUAL AND EXPECTED DATA AND THE DIFFERENCES.
*            HALT, THEN GO TO STEP 19.
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. DATA ERROR - ACT=*H*HHEX EXP=*H*HHEX DIFF=*H*HHEX
*         3. TFF131- WC = *OCT PASS = *DEC BAD BYTE = *OCT
*         6. TFF131- ABORT ON STOP CP FUNCTION           (E100) 
*         5. TFF131- ABORT ON START CP FUNCTION          (E040) 
*         6. TFF131- ABORT ON INPUT COUPLER STATUS FUNC  (E005) 
*         7. TFF131- ABORT ON OUTPUT DATA FUNCTION       (E014) 
*         8. TFF131- ABORT ON INPUT DATA FUNCTION        (E003) 
*         9. TFF131- ABORT ON .OUT. COMMAND 
*        10. TFF131- ABORT ON .IN. OR .STATUS. COMMAND
*        11. TFF131- NPU NOT RESPONDING 
*        12. TFF131- OUTPUT WT ERROR ACT=*OCT EXP=*OCT
*        13. TFF131- INPUT WT ERROR ACT=*OCT EXP=*OCT 
*        14. TFF131- LAST COUPLER STATUS = *OCT  PASS = *DEC
*        15. TFF131- ABORT ON CLEAR NPU FUNCTION         (E200) 
* 
*   REGISTER USAGE -
* 
*         B0 = RETRY COUNTER/WORDS TO COMPARE (374B)
*         B1 = LOOP COUNTER/DATA PATTERN
*         B2 = LOGICAL DIFFERENCE ON DATA ERROR UPPER 8 BITS
*         B3 = LOGICAL DIFFERENCE ON DATA ERROR LOWER 8 BITS
*         B5 = MESSAGE NUMBER IF ABORT
*         B6 = NPU STATUS AVAILABLE FLAG
*         B7 = ERROR COUNTER
* 
*   CALLS - 
* 
*         TFF98B - ANALYZE COUPLER STATUS 
* 
1  FORMAT TFF131- CHAIN ADDRESS ZERO TEST 
2  FORMAT DATA ERROR - ACT=*H*HHEX EXP=*H*HHEX DIFF=*H*HHEX 
3  FORMAT TFF131- WC = *OCT PASS = *DEC  BAD BYTE = *OCT
4  FORMAT TFF131- OUTPUT WT ERROR ACT=*OCT EXP=*OCT 
5  FORMAT TFF131- ABORT ON STOP CP FUNCTION           (E100)
6  FORMAT TFF131- ABORT ON START CP FUNCTION          (E040)
7  FORMAT TFF131- ABORT ON INPUT COUPLER STATUS FUNC  (E005)
10 FORMAT TFF131- ABORT ON OUTPUT DATA FUNCTION       (E014)
11 FORMAT TFF131- ABORT ON INPUT DATA FUNCTION        (E003)
12 FORMAT TFF131- ABORT ON .OUT. COMMAND
13 FORMAT TFF131- ABORT ON .IN. OR .STATUS. COMMAND 
14 FORMAT TFF131- NPU NOT RESPONDING
15 FORMAT TFF131- LAST COUPLER STATUS = *OCT  PASS = *DEC 
16 FORMAT TFF131- ERROR(S) IN MODULE = *DEC 
17 FORMAT TFF131- INPUT WT ERROR ACT=*OCT EXP=*OCT
20 FORMAT --------------------------------------------------
21 FORMAT TFF131- ABORT ON CLEAR NPU FUNCTION         (E200)
* 
*-------- START 2550 RUNNING
* 
23 MSG 1 TO DISPLAY,PRINT           *POST RUNNING MSG 
24 RES                              *RESERVE THE I/O CHANNEL
   B5 = 5                           *MESSAGE NUMBER IF ABORT
   FUNC 100, ABT 60                 *STOP CP FUNCTION 
   B5 = 21                          *MESSAGE NUMBER IF ABORT
   FUNC 200B, ABT 60                *CLEAR NPU FUNCTION 
   DELAY 4 MSEC 
   B5 = 6                           *MESSAGE NUMBER IF ABORT
   FUNC 40, ABT 60                  *START 2550 RUNNING 
   IB(504) = 0                      *CLEAR STATUS WORD
* 
*-------- DATA TRANSFER TEST
* 
   BA = 0 
   WC = 374 
30 DUP B1 TO OB FOR 374             *PUT PATTERN IN OUTBUF
31 RES                              *RESERVE THE I/O CHANNEL
   B0 = 0                           *CLEAR THE RETRY COUNTER
32 GOSUB 50                         *GET COUPLER STATUS 
   IF(SB .AND. 10 .EQ. 10)GOTO 33   *IF MAR LOADED
   GOTO 32 WHILE(B0 + 1 .NE. 100)   *TRY STATUS 100 TIMES 
   GOTO 62                          *ERROR MAR NOT LOADED 
33 B5 = 10                          *MESSAGE NUMBER IF ABORT
   OB(76) = OB(76) .OR. 400         *SET FLAG BIT 0 
   OB(175) = OB(175) .OR. 1000      *SET FLAG BIT 1 
   OB(274) = OB(274) .OR. 2000      *SET FLAG BIT 2 
   OB(373) = OB(373) .OR. 4000      *SET FLAG BIT 3 
   FUNC 14B, ABT 60                 *OUTPUT DATA FUNCTION 
   B5 = 12                          *MESSAGE NUMBER IF ABORT
   OUT 374 WORDS FROM OB, ABT 60    *OUTPUT DATA
   IF(WT .EQ. 374)GOTO 40 
34 B5 = 374 
   MSG 4(WT,B5)TO LINE 1
   GOTO 61
40 RES                              *RESERVE THE I/O CHANNEL
   B0 = 0                           *CLEAR THE RETRY COUNTER
42 GOSUB 50                         *GET COUPLER STATUS 
   IF(SB .AND. 10 .EQ. 10)GOTO 43   *IF MAR LOADED
   GOTO 42 WHILE(B0 + 1 .NE. 100)   *TRY STATUS 100 TIMES 
   GOTO 62                          *ERROR MAR NOT LOADED 
43 B5 = 11                          *MESSAGE NUMBER IF ABORT
   FUNC 3, ABT 60                   *INPUT DATA FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   IN 374 WORDS TO IB, ABT 60       *INPUT DATA 
   IF(WT .EQ. 374)GOTO 45 
44 MSG 17(WT,WC)TO LINE 1 
   GOTO 61
45 B0 = 374                         *WORDS TO COMPARE 
   COMPARE IB TO OB FOR B0, ABT 70  *CHECK THE DATA 
46 GOTO 30 WHILE (B1 + 1 .NE. 400)  *LOOP 400 TIMES 
47 IF(B7 .EQ. 0)GOTO 77             *IF NO ERRORS IN MODULE 
   MSG 16(B7) TO DAYFILE           *REPORT ERRORS TO DAYFILE
   GOTO 77
* 
*-------- COUPLER STATUS SUBROUTINE 
* 
50 B5 = 7                           *MESSAGE NUMBER IF ABORT
   DELAY 20 MSEC
   FUNC 5, ABT 60                   *COUPLER STATUS FUNCTION
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   STATUS 1 WORDS TO SB, ABT 60     *INPUT COUPLER STATUS 
   IB(504) = IB(504) .OR. SB
   RETURN                           *EXIT SUBROUTINE
* 
*-------- ABORT PROCESSOR 
* 
60 ENDSUB                           *END ACTIVE SUBROUTINES 
   MSG B5 TO LINE 1                 *COMMAND THAT ABORTED 
   MSG EM TO LINE 2                 *REASON FOR THE ABORT 
61 B7 = B7 + 1                      *BUMP ERROR COUNTER 
   B1 = B1 + 1                      *BUMP PASS COUNT
   PICTURE
   HALT 
   MSG 20 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 47             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 24                          *RESTART THE TEST 
62 MSG 14 TO LINE 1                 *POST REG NOT LOADED MSG
   MSG 15(SB,B1) TO LINE 2          *POST COUPLER STATUS MSG
   B6 = 1 
   CALL 98B 
   GOTO 61
* 
*-------- DATA ERROR PROCESSOR
* 
70 B0 = B0 .AND. 7776               *CORRECT ERROR POINTER
   B2 = OB(B0) .XOR. IB(B0)         *CALCULATE DIFFERENCE 
   B3 = OB(B0+1) .XOR. IB(B0+1) 
   MSG 2(IB(B0),IB(B0+1),OB(B0),OB(B0+1),B2,B3)TO LINE 1
   B0 = B0 .RS. 1 
   MSG 3(WC,B1,B0)TO LINE 2 
   B7 = B7 + 1                      *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 20 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 47             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 46                             *CONTINUE THE TEST 
77 END 23 
COMPILE   - TFF131 -
   MODULE TFF30,6000(64),LOCK  *DEADMAN TIMER TEST
***       TFF30 - DEADMAN TIMER TEST
**        TFF30 - DEADMAN TIMER TEST
*         --------------------------
* 
*   OVERVIEW -
* 
*         TFF30 VERIFIES THAT THE DEADMAN TIMER WILL EXPIRE IN
*         2 TO 4 SECONDS IF THE CHANNEL IS LEFT ACTIVE. 
* 
*   DESCRIPTION - 
* 
*         1. POST RUNNING MESSAGE.
*         2. CHECK IF ACCESS LEVEL OF 21.  IF NOT POST ERROR
*            MESSAGE AND EXIT.
*         3. RESERVE THE I/O CHANNEL. 
*         4. FUCNTION 400B, CLEAR COUPLER.  GO TO STEP 10 IF
*            FUNCTION ABORTS. 
*         5. ACTIVATE THE CHANNEL AND BEGIN TIMING.  GO TO STEP 10
*            IF THIS COMMAND ABORTS.
*         6. CHECK THE TIMING RESULTS.  IF TIME LESS THAN 2 OR
*            GREATER THAN 4 SECONDS REPORT ERROR, HALT, THEN GO 
*            TO STEP 3. 
*         7. FUNCTION 5, INPUT COUPLER STATUS.  GO TO STEP 10 
*            IF THIS FUNCTION ABORTS. 
*         8. INPUT COUPLER STATUS.  GO TO STEP 10 IF THIS COMMAND 
*            ABORTS.
*         9. IF COUPLER STATUS NOT EQUAL 2000B POST ERROR MESSAGE,
*            HALT, THEN GO TO STEP 3, OTHERWISE EXIT. 
*        10. WE ARRIVE AT THIS STEP IF AN I/O COMMAND ABORTS.  POST 
*            MESSAGES THAT DEFINE THE COMMAND THAT ABORTED AND THE
*            REASON FOR THE ABORT.  HALT, THEN GO TO STEP 3.
* 
*   ERRORS REPORTED - 
* 
*         1. TFF30 - ABORT ON CLEAR COUPLER FUNCTION     (E400) 
*         2. TFF30 - DEADMAN TIMER DID NOT EXPIRE IN 4 SECONDS
*         3. TFF30 - COUPLER STATUS ERR  EXP = 2000 ACT = *OCT
*         4. TFF30 - ABORT ON COUPLER STATUS FUNCTION    (E005) 
*         5. TFF30 - ABORT ON .IN. OR .STATUS. COMMAND
*         6. TFF30 - ABORT ON ACTIVATE COMMAND
*         7. TFF30 - DEADMAN TIMER EXPIRED IN LESS THAN 2 SECS
*         8. TFF30 - ABORT ON CLEAR NPU FUNCTION         (E200) 
* 
*   REGISTER USAGE -
* 
*         B0 = 4 MILLISECOND COUNTER
*         B1 = 1 SECOND COUNTER 
*         B5 = MESSAGE NUMBER IF ABORT
*         B7 = ERROR COUNTER
* 
*   MODULES CALLED -
* 
*         NONE
* 
1  FORMAT TFF30 - DEADMAN TIMER TEST
2  FORMAT TFF30 - ABORT ON CLEAR COUPLER FUNCTION     (E400)
3  FORMAT TFF30 - DEADMAN TIMER DID NOT EXPIRE IN 4 SECONDS 
4  FORMAT TFF30 - ERROR(S) IN MODULE = *DEC 
5  FORMAT TFF30 - COUPLER STATUS ERR  EXP = 2000 ACT = *OCT 
6  FORMAT TFF30 NOT EXECUTED NEEDS AL=0021, AL=*OCT 
7  FORMAT TFF30 - ABORT ON COUPLER STATUS FUNCTION    (E005)
10 FORMAT TFF30 - ABORT ON .IN. OR .STATUS. COMMAND 
11 FORMAT TFF30 - ABORT ON ACTIVATE COMMAND 
12 FORMAT TFF30 - DEADMAN TIMER EXPIRED IN LESS THAN 2 SECS 
13 FORMAT TFF30 - ABORT ON CLEAR NPU FUNCTION         (E200)
14 FORMAT --------------------------------------------------
20 MSG 1 TO DISPLAY,PRINT           *POST RUNNING MESSAGE 
   IF(AL .GE. 21)GOTO 21
   MSG 6(AL)TO LINE 1 
   PICTURE
   GOTO 75
21 RES                              *RESERVE THE I/O CHANNEL
   B5 = 2                           *MESSAGE NUMBER IF ABORT
   FUNC 400B, ABT 60                *CLEAR COUPLER
   B5 = 13                          *MESSAGE NUMBER IF ABORT
   FUNC 200B, ABT 60                *CLEAR NPU FUNCTION 
   B0 = 0                           *4 MSEC COUNTER 
   B1 = 0                           *1 SECOND COUNTER 
   B5 = 11                          *MESSAGE NUMBER IF ABORT
   ACN, ABT 60                      *ACTIVATE THE CHANNEL 
30 DELAY 4000D USEC                 *DELAY 4 MSEC 
   GOTO 30 WHILE(B0 + 1 .NE. 250D)  *4 MSEC COUNTER 
   B1 = B1 + 1
   IF(B1 .GT. 2)GOTO 32             *IF 2 SECS. ELAPSED 
   ACN, ABT 32                      *IF CHANNEL STILL ACTIVE
   DCN, ABT 50                      *CHANNEL WENT INACTIVE
   GOTO 50                          *LESS THAN 2 SECS.
32 B0 = 0                           *RESET 4 MSEC COUNTER 
   IF(B1 .NE. 4)GOTO 30             *1 SECOND COUNTER 
   DCN, ABT 35                      *DISCONNECT CHANNEL 
33 MSG 3 TO LINE 1                  *POST ERROR MESSAGE 
   B7 = B7 + 1                      *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 14 TO PRINT
   BLANK
   IF(B7 .GE. 5) GOTO 75           * IF LESS THAN 5 ERRORS
   MSG 1 TO DISPLAY                 *POST RUNNING MESSAGE 
   GOTO 21                          *RETRY THE TEST 
35 B5 = 7                           *MESSAGE NUMBER IF ABORT
   FUNC 5, ABT 60                   *COUPLER STATUS FUNCTION
   B5 = 10                          *MESSAGE NUMBER IF ABORT
   STATUS 1 WORDS TO SB, ABT 60     *INPUT COUPLER STATUS 
   IF(SB .AND. 2000 .NE. 0)GOTO 50  *IF STATUS CORRECT
   MSG 5(SB)TO LINE 1               *STATUS ERROR MESSAGE 
   GOTO 61
50 IF(B1 .GE. 2)GOTO 75             *IF MORE THAN 2 SECS
   MSG 12 TO LINE 1                 *POST ERROR MESSAGE 
   GOTO 61
* 
*-------- ABORT PROCESSOR 
* 
60 MSG B5 TO LINE 1                 *COMMAND THAT ABORTED 
   MSG EM TO LINE 2                 *REASON FOR THE ABORT 
61 B7 = B7 + 1                      *BUMP ERROR COUNTER 
   PICTURE
   HALT 
   MSG 14 TO PRINT
   BLANK
   IF(B7 .GE. 5)GOTO 75             *IF MORE THAN 5 ERRORS
   MSG 1 TO DISPLAY 
   GOTO 21
75 IF(B7 .EQ. 0)GOTO 77 
   MSG 4(B7)TO DAYFILE
77 END 20 
COMPILE   - TFF30 - 
   MODULE TFF40,6000(64),LOCK   *UPLINE DUMP UTILITY
***       TFF40 - UPLINE DUMP UTILITY 
**        TFF40 - UPLINE DUMP UTILITY 
*         --------------------------- 
* 
*   OVERVIEW -
* 
*         TFF40 WILL UPLINE DUMP UP TO 114 WORDS OF NPU MEMORY TO 
*         THE MALET PPU DISPLAY AND THE OUTPUT FILE.  P8 IS USED TO 
*         SPECIFY THE UPPER 9 BITS OF THE DUMP STARTING ADDRESS AND 
*         P9 THE LOWER 8 BITS.  P7 IS USED TO SPECIFY THE NUMBER OF 
*         NPU WORDS TO BE DUMPED AND HAS A RANGE OF FROM 1 TO 114 
*         DECIMAL.
* 
*   DESCRIPTION - 
* 
*         1. POST RUNNING MESSAGE.
*         2. VALIDATE PARAMETER P7. 
*         3. RESERVE THE I/O CHANNEL
*         4. LOAD P8 INTO MEMORY ADDRESS REGISTER 0 AND P9 INTO 
*            MEMORY ADDRESS REGISTER 1. 
*         5. FUNCTION 7, INPUT PROGRAM, AND INPUT P7 WORDS TO INBUF.
*         6. DISPLAY THE DUMP INFORMATION ON THE PPU DISPLAY AND
*            TAKE A PICTURE OF IT.
* 
*   ERRORS REPORTED - 
* 
*         1. ALL PRODUCT OVERLAY ERROR MESSAGES.
*         2. TFF40 - ABORT ON LOAD MEM ADDRESS 1 FUNCTION (E011)
*         3. TFF40 - ABORT ON .OUT. COMMAND 
*         4. TFF40 - ABORT ON LOAD MEM ADDRESS 0 FUNCTION (E010)
*         5. TFF40 - ABORT ON .IN. COMMAND
*         6. TFF40 - ABORT ON INPUT PROGRAM FUNCTION      (E007)
*         7. TFF40 - ILLEGAL VALUE IN P7  P7 = *DEC 
*         8. TFF40 - P7 MUST BE .GT. 0 AND .LT. 115 DECIMAL 
*         9. TFF40 - UNABLE TO CONTINUE UPLINE DUMP 
* 
*   REGISTER USAGE -
* 
*         B3 = UPPER 9 BITS OF DUMP ADDRESS 
*         B4 = LOWER 8 BITS OF DUMP ADDRESS 
*         B5 = MESSAGE NUMBER IF ABORT
*         B6 = BUFFER INDEX 
* 
*   MODULES CALLED -
* 
*         NONE
* 
1  FORMAT TFF40 - UPLINE DUMP UTILITY 
2  FORMAT ADDRESS *HE*H - *H*H *H*H *H*H
3  FORMAT TFF40 - ABORT ON LOAD MEM ADDRESS 1 FUNCTION(E011)
4  FORMAT TFF40 - ABORT ON .OUT. COMMAND
5  FORMAT TFF40 - ABORT ON LOAD MEM ADDRESS 0 FUNCTION(E010)
6  FORMAT TFF40 - ABORT ON .IN. COMMAND 
7  FORMAT TFF40 - ABORT ON INPUT PROGRAM FUNCTION     (E007)
10 FORMAT TFF40 - ILLEGAL VALUE IN P7  P7 = *DEC
11 FORMAT TFF40 - P7 MUST BE .GT. 0 AND .LT. 115 DECIMAL
12 FORMAT TFF40 - UNABLE TO CONTINUE UPLINE DUMP
13 FORMAT ----------------------------------------------------
20 MSG 1 TO DISPLAY,PRINT 
   IF(P7 .EQ. 0)GOTO 21            *IF PARAMETER ERROR
   IF(P7 .LT. 115D)GOTO 22         *IF PARAMETER VALID
21 MSG 10(P7)TO LINE 1
   MSG 11 TO LINE 2 
   PICTURE
   GOTO 77
22 OB = P8                         *UPPER 9 ADDRESS BITS
   B3 = P8                         *UPPER 9 ADDRESS BITS
   OB(1) = P9                      *LOWER 8 ADDRESS BITS
   B4 = P9                         *LOWER 8 ADDRESS BITS
   WC = P7 .LS. 1                  *DOUBLE THE WORD COUNT 
   RES                             *RESERVE THE I/O CHANNEL 
   B5 = 3                          *MESSAGE NUMBER IF ABORT 
   FUNC 11, ABT 60                 *LOAD MEM ADDRESS 1 FUNC 
   B5 = 4                          *MESSAGE NUMBER IF ABORT 
   OUT 1 WORDS FROM OB(1), ABT 60  *OUTPUT LOWER 8 ADDR BITS
   B5 = 5                          *MESSAGE NUMBER IF ABORT 
   FUNC 10, ABT 60                 *LOAD MEM ADDRESS 0 FUNC 
   B5 = 4                          *MESSAGE NUMBER IF ABORT 
   OUT 1 WORDS FROM OB, ABT 60     *OUTPUT UPPER 9 ADDR BITS
   B5 = 7                          *MESSAGE NUMBER IF ABORT 
   FUNC 7, ABT 60                  *INPUT PROGRAM FUNCTION
   B5 = 6                          *MESSAGE NUMBER IF ABORT 
   IN WC WORDS TO IB(2), ABT 60    *INPUT DATA FROM NPU 
   B2 = 1                          *LINE NUMBER FOR MESSAGE 
   B6 = 0                          *ADDRESS POINTER 
   IB = OB                         *PUT ADDRESS IN INBUF
   IB(1) = OB(1)
40 MSG 2,8 WORDS FROM IB(B6) TO LINE B2 
   B2 = B2 + 1
   B4 = B4 + 3
   IF(B4 .LT. 400)GOTO 41          *IF .LT. 8 BITS
   B4 = B4 .AND. 377               *TRUNCATE TO 8 BITS
   B3 = B3 + 1                     *BUMP UPPER 9 BITS 
41 B6 = B6 + 6                     *BUMP BUFFER POINTER 
   IB(B6) = B3                     *PUT ADDRESS IN INBUF
   IB(B6+1) = B4                   *PUT ADDRESS IN INBUF
   IF(B6 .LT. WC)GOTO 40           *IF MORE WORDS TO DISPLAY
   PICTURE
   GOTO 77                         *END OF MODULE 
* 
*-------- ABORT PROCESSOR 
* 
60 MSG B5 TO LINE 1                *COMMAND THAT ABORTED
   MSG EM TO LINE 2                *REASON FOR THE ABORT
   MSG 12 TO LINE 3 
   PICTURE
   MSG 13 TO PRINT
77 END 20 
COMPILE   - TFF40 - 
   MODULE TFF98A,6000(64),LOCK  *CHANGE CODE FOR 2ND COUPLER
***       TFF98A - CHANGE NPU CODE TO RUN ON SECONDARY COUPLER
**        TFF98A - CHANGE NPU CODE TO RUN ON SECONDARY COUPLER
*         ----------------------------------------------------
* 
*   DESCRIPTION - 
* 
*         TFF98A CHANGES NPU CODE TO USE THE SECONDARY COUPLER. 
*         THE COUPLER EQUIPMENT ADDRESS IS MODIFIED IN ALL
*         RELEVANT LOCATIONS BY REFERENCE TO THE TABLE IN 
*         OB. AN INDEX TO THIS TABLE MUST BE PROVIDED BY
*         THE CALLING MODULE IN B0. 
* 
*         ON ENTRY IB MUST CONTAIN STANDARD NPU CODE. MODULE
*         WILL EXIT WITH MODIFIIED CODE IN OB.
* 
*   REGISTERS USED -
*         B0 - INDEX
*         B1 - SCRATCH
*         B2 = SCRATCH
* 
* 
01 FORMAT TFF98A - TEST MODIFIED TO USE SECONDARY COUPLER 
   DATA(OB,CON)13,41,47,00                    *MODULE 6 
   DATA(OB(10),CON)25,41,53,105,117,133,00    *MODULES 7,8,9
   DATA(OB(20),CON)25,57,105,131,153,00       *MODULE 10
   DATA(OB(30),CON)25,153,201,225,247,00      *MODULE 11
   DATA(OB(40),CON)25,153,201,225,247,00      *MODULE 12
   DATA(OB(50),CON)25,113,171,225,277,335,361,00  *MOD 13 
20 MSG 1 TO DISPLAY,PRINT    *POST MESSAGE
21 B1 = OB(B0)               *B1 = IB ADDRESS TO BE CHANGED 
   IF(B1.EQ.0) GOTO 30       *CHECK IF LAST ADDRESS 
   B2 = IB(B1) OR 200B       *GET NPU CODE IN B2
   IB(B1) = B2               *REPLACE NPU CODE IN IB
   B0 = B0 + 1               *BUMP ADDRESS COUNT
   GOTO 21                   *DO NEXT LOCATION
30 COPY IB TO OB FOR 500B    *PUT MODIFIED PROG IN OB 
   B2 = 0                    *CLEAR LOOP COUNTER FOR MODULE 6 
   EXIT 
   END 20 
COMPILE  - TFF98A - 
   MODULE TFF98B,6000(64),LOCK   *COUPLER STATUS ANALYSIS 
***       TFF98B - COUPLER STATUS ANALYSIS
**        TFF98B - COUPLER STATUS ANALYSIS
*         --------------------------------
* 
*   DESCRIPTION - 
* 
*         TFF98B ANALYZES BITS SET IN COUPLER STATUS. 
* 
*   ENTRY CONDITIONS -
* 
*         SB = LAST COUPLER STATUS
*         IB(504) = CUMULATIVE COUPLER STATUS 
*         B6 = UPLINE DUMP FLAG 
* 
*   REGISTERS USED -
* 
*         B5 = SCRATCH
*         B6 = UPLINE DUMP FLAG 
*         WC = MESSAGE NUMBER IF BIT SET IN STATUS
*         BA = LINE NUMBER FOR MESSAGE
* 
1  FORMAT BIT0------MEMORY PARITY ERROR 
2  FORMAT BIT1------MEMORY PROTECT FAULT
3  FORMAT BIT2------NPU REGISTER LOADED 
4  FORMAT BIT3------MEMORY ADDRESS REGISTER LOADED
5  FORMAT BIT4------NOT USED
6  FORMAT BIT5------TRANSMISSION COMPLETE 
7  FORMAT BIT6------TRANSFER TERMINATED BY NPU
10 FORMAT BIT7------TRANSFER TERMINATED BY PPU
11 FORMAT BIT8------ORDERWORD REGISTER LOADED 
12 FORMAT BIT9------NPU STATUS ACCEPTED 
13 FORMAT BIT10-----DEADMAN TIMER EXPIRED 
14 FORMAT BIT11-----CHANNEL PARITY ERROR
15 FORMAT CUMULATIVE COUPLER STATUS FROM PPU = *OCT 
16 FORMAT CUMULATIVE COUPLER STATUS FROM NPU = *OCT 
17 FORMAT -TFF98B UNABLE TO UPLINE DUMP NPU STATUS- 
20 FORMAT TFF TERMINATED - BASIC 2550 COMMUNUCATIONS ERRORS 
24 BA = 3                    *LINE NUMBER FOR MESSAGE 
   B5 = SB                   *GET LAST STATUS 
   GOSUB 50                  *ANALYZE STATUS
   MSG 15(IB(504))TO LINE BA
   BA = BA + 1               *BUMP LINE NUMBER
   B5 = IB(504)              *GET CUMULATIVE PPU STATUS 
   GOSUB 50                  *ANALYZE STATUS
   IF(B6 .EQ. 0)GOTO 77      *IF NO NPU STATUS
* 
* -----  UPLINE DUMP AND ANALYZE NPU CUMULATIVE STATUS
* 
   OB(446) = 0             *UPPER 9 BITS OF ADDRESS 
   OB(447) = 377           *LOWER 8 BITS OF ADDRESS 
   RES                     *RESERVE THE I/O CHANNEL 
   FUNC 11B, ABT 60        *LOAD MAR 1 FUNCTION 
   OUT 1 WORDS FROM OB(447), ABT 60  *OUTPUT LOWER ADDRESS BITS 
   FUNC 10B, ABT 60        *LOAD MAR 0 FUNCTION 
   OUT 1 WORDS FROM OB(446), ABT 60  *OUTPUT UPPER ADDRESS BITS 
   FUNC 7, ABT 60          *INPUT PROGRAM FUNCTION
   IN 2 WORDS TO IB, ABT 60  *INPUT CUMULATIVE STATUS 
   B5 = IB .AND. 17B
   B5 = B5 .LS. 8 
   B5 = B5 .OR. IB(1) 
   MSG 16(B5) TO LINE BA
   BA = BA + 1               *BUMP LINE NUMBER
   GOSUB 50                  *ANALYZE STATUS
   GOTO 76                   *EXIT MODULE 
50 WC = 1                    *MSG NUMBER IF BIT SET 
51 IF(B5 .AND. 1 .EQ. 0)GOTO 52  *IF BIT NOT SET
   MSG WC TO LINE BA
   BA = BA + 1               *BUMP LINE NUMBER
52 B5 = B5 .RS. 1            *POSITION TO NEXT BIT
   GOTO 51 WHILE(WC + 1 .NE. 13D)  *LOOP FOR ALL BITS 
   RETURN                    *EXIT SUBROUTINE 
60 MSG 17 TO LINE BA         *UNABLE TO UPLINE DUMP 
   BA = BA + 1               *BUMP LINE NUMBER
   MSG EM TO LINE BA         *POST REASON FOR ABORT 
   BA = BA + 1
   MSG 20 TO LINE BA
   PICTURE
   GOTO 77
76 EXIT                      *RETURN TO CALLING MODULE
77 END 24 
COMPILE  - TFF98B - 
   MODULE TFF99,6000(64),LOCK  *TFF DOCUMENTATION 
1  FORMAT COPYRIGHT CONTROL DATA CORP. 1979 
/ 
/ - - - NO CONTROLWARE/FIRMWARE IS NEEDED TO RUN TFF - - -
/ 
/         PARAMETERS
/ 
/         PARAMETER REGISTER SETTINGS 
/ 
/         P0 - 2550 MEMORY SIZE 
/ 
/         P0 = 16   FOR 16K OF MEMORY 
/            = 32   FOR 32K OF MEMORY 
/            = 48   FOR 48K OF MEMORY 
/            = 65   FOR 65K OF MEMORY 
/            = 80   FOR 80K OF MEMORY 
/            = 96   FOR 96K OF MEMORY 
/            = 112  FOR 112K OF MEMORY
/            = 131  FOR 131K OF MEMORY
/ 
/        P1 - TEST ALTERNATE COUPLER
/ 
/        P1 .EQ. 0 RUN TEST ON PRIMARY COUPLER
/           .NE. 0 RUN TEST ON ALTERNATE(SECONDARY) COUPLER 
/ 
/        P7 - NUMBER OF WORDS TO UPLINE DUMP
/ 
/        P7 .GT. 0 .AND. .LT. 115D
/ 
/        P8 - UPPER 9 ADDRESS BITS FOR UPLINE DUMP
/ 
/        P9 - LOWER 8 ADDRESS BITS FOR UPLINE DUMP
/ 
/                         WARNING 
/                         ------- 
/ 
/         IT IS POSSIBLE TO GET A DATA ERROR WHERE THE
/         ACTUAL DATA DISPLAYED IS EQUAL TO THE EXPECTED
/         DATA AND THE DIFFERENCE IS ZERO.  THIS CAN OCCUR
/         IF BITS 8 THRU 11 SHOULD FAIL WHEN INPUTING FROM
/         THE NPU.  SECTION 3.1.2 OF THE DOCUMENTATION
/         CONTAINS A EXPLANATION OF THIS SITUATION UNDER
/         TYPE 3 - DATA ERRORS
/ 
/ 
/        MODULE DESCRIPTIONS
/ 
/        NAME     DESCRIPTION 
/        ----     ----------- 
/ 
/        TFF01    CHANNEL COUPLER TEST
/        TFF02    MEMORY ADDRESS REGISTER 0 TEST
/        TFF03    MEMORY ADDRESS REGISTER 1 TEST
/        TFF04    MEMORY ADDRESSING TEST
/        TFF05    MEMORY DATA PATTERNS TEST 
/        TFF06    PPU-2550 BASIC COMMUNICATION
/        TFF07    PPU-2550 DATA TRANSFERS 
/        TFF08    VARIABLE LENGTH DATA TRANSFERS
/        TFF09    RANDOM DATA TRANSFERS 
/        TFF10    RANDOM DATA TRANSFERS-WITH INTERRUPTS 
/        TFF11    PPU-2550 DATA TRANSFERS WITH CHAINING 
/        TFF12    BUFFER FLAG BITS TEST 
/        TFF13    CHAIN ADDRESS ZERO TEST 
/        TFF30    DEADMAN TIMER TEST  (AL = 21 REQUIRED)
/        TFF40    UPLINE DUMP UTILITY 
20 END 20 
COMPILE,SOURCE  - TFF99 - 
***       APPLICATIONS
**        APPLICATIONS
*         ------------
* 
*         1. LOOPING ON FAILURES. 
* 
*            MODULES 1,2, AND 3 SUPPORT SCOPING LOOPS.  CLEARING
*            STOP ON ERROR (CLRSW SE) AND SETTING REPEAT CONDITION
*            (SETSW RC) WITH MALET DIRECTIVES AFTER A ERROR IS
*            DETECTED WILL REPEAT THE FAILING SEQUENCE IN A MODE
*            THAT CAN BE SCOPED.
* 
*** 3.1.3 INTERFACES
**  3.1.3 
**  3.1.3 INTERFACES
*         ----------
* 
*         COVERED IN PARAMETERS AND MESSAGES IN SECTION 3.1.2 
* 
*** 3.1.4 TEST ABORTS 
**  3.1.4 TEST ABORTS 
*         ----------- 
* 
*         THERE ARE NO CONDITIONS THAT SHOULD CAUSE THIS TEST TO ABORT. 
* 
*** 3.1.5 SYSTEM ABORTS 
**  3.1.5 SYSTEM ABORTS 
*         ------------- 
* 
*         THERE ARE NO CONDITIONS THAT SHOULD CAUSE THE SYSTEM TO ABORT 
*         THIS TEST.
* 
*** 3.1.6 ERRORS
**  3.1.6 ERRORS
*         ------
* 
*         FOR EASE OF REFERENCE THESE MESSAGES ARE GROUPED WITH 
*         ALL TEST MESSAGES IN SECTION 3.1.2. 
* 
*** 3.1.7 PERFORMANCE 
**  3.1.7 PERFORMANCE 
*         ----------- 
* 
***       HARDWARE
**        HARDWARE
*         --------
* 
*         1. TFF DOES NOT ATTEMPT TO TRANSFER DATA AT THE MAXIMUM 
*            STREAM RATE. 
*         2. TFF DOES TEST ALL OF THE LOGIC IN THE CYBER COUPLER
*            (DK106) OF THE 2550, AND DETECTS ALL FAILURE MODES 
*            OF THE LOGIC TESTED. 
* 
***       SOFTWARE
**        SOFTWARE
*         --------
* 
*            MODULE RUNNING TIMES 
*            -------------------- 
*            THE RUN TIME FOR A MODULE INCLUDES THE RUN TIMES FOR 
*            ALL SUBMODULES WHICH IT REFERENCES DIRECTLY OR INDIRECTLY
*            NOT INCLUDING SYSTEM OVERHEAD. 
* 
*              MODULE 
*              NUMBER      RUN TIME 
*              ------      -------- 
* 
*              TFF01          3 SEC.
*              TFF02          3 SEC.
*              TFF03          3 SEC.
*              TFF04          2 MIN.   FOR 32K OF MEMORY
*              TFF05          2 MIN.   FOR 32K OF MEMORY
*              TFF06         10 SEC.
*              TFF07         30 SEC.
*              TFF08         30 SEC.
*              TFF09         30 SEC.   VARIES DUE TO RANDOM BLOCK LENGTHS 
*              TFF10         30 SEC.   VARIES DUE TO RANDOM BLOCK LENGTHS 
*              TFF11         30 SEC.
*              TFF12         30 SEC.
*              TFF13         30 SEC.
*              TFF30          5 SEC.
* 
*              TOTAL RUN TIMES
* 
*         4 MIN. - WITH DEFAULT PARAMETERS
* 
*         8 MIN. - WITH ALL OPTIONS AND SECTIONS (32K OF MEMORY)
* 
*** 3.1.8 INSTALLATION PARAMETERS 
**  3.1.8 INSTALLATION PARAMETERS 
*         ----------------------- 
* 
*         THERE ARE NO INSTALLATION PARAMETERS FOR THIS TEST. 
* 
*** 4.0   PRODUCT LEVEL DESCRIPTION 
**  4.0   PRODUCT LEVEL DESCRIPTION 
*         ------------------------- 
* 
*** 4.1   PUBLICATIONS AFFECTED 
**  4.1   PUBLICATIONS AFFECTED 
*         --------------------- 
* 
*** 4.2   EQUIPMENT CONFIGURATION 
**  4.2   EQUIPMENT CONFIGURATION 
*         ----------------------- 
* 
*         1. THE MINIMUM CONFIGURATION CONSISTS OF ONE 2550(2551) 
*            WITH 16K OF MEMORY AND 1 CYBER COUPLER(DK106) AND
*            A CYBER DATA CHANNEL.
*         2. THE MAXIMUM CONFIGURATION IS THE SAME AS THE MINIMUM 
*            WITH THE EXECEPTION THAT THE NPU HAS 131K OF MEMORY. 
*         3. MODULES TFF04 AND TFF05 WILL REQUIRE APPROXIMATELY 
*            30 SEC ADDITIONAL TIME FOR EACH 16K INCREMENT OF NPU 
*            MEMORY ABOVE THE MINIMUM CONFIGURATION.
* 
*** 4.3   INTERFACES TO OTHER SOFTWARE PRODUCTS 
**  4.3   INTERFACES TO OTHER SOFTWARE PRODUCTS 
*         ------------------------------------- 
* 
*         THIS TEST DOES NOT USE ANY INTERFACE TO OTHER SOFTWARE
*         PRODUCTS. 
* 
*** 4.4   SECURITY
**  4.4   SECURITY
*         --------
* 
*         SECURITY IS PROVIDED BY THE OPERATING SYSTEM FOR ON-LINE
*         MALET THRU THE USE OF CVL.  SECUTITY FOR OFF-LINE MALET 
*         IS PROVIDED BY ACCESS LEVEL USED ON ASSIGN DIRECTIVE. 
* 
*** 5.0   GLOSSARY
**  5.0   GLOSSARY
*         --------
* 
*         ACT       - ACTUAL
*         ADDR      - ADDRESS 
*         DIFF      - DIFFERENCE
*         DOWNLINE  - FROM PPU TO NPU 
*         ERR       - ERROR 
*         EXP       - EXPECTED
*         FUNC      - FUNCTION
*         MAR       - MEMORY ADDRESS REGISTER IN NPU
*         MAR1      - MEMORY ADDRESS REGISTER 1 IN NPU
*         MAR0      - MEMORY ADDRESS REGISTER 0 IN NPU
*         NPU       - NETWORK PROCESSING UNIT (2550)
*         PPU       - PERIPHERAL PROCESSING UNIT
*         UPLINE    - FROM NPU TO PPU 
* 
