          IDENT  VM5B
          CIPPU

          TITLE  VM5B - MAP-V PP HARDWARE DRIVER
          COMMENT *SMD* LVL=01
          COMMENT COPYRIGHT CONTROL DATA SYSTEMS INC. 1992
 VM5B     SPACE  4,20
*****     VM5B - MAP-V PP HARDWARE DRIVER.
*
*         L. J. HAUCH        85/01/28.
          SPACE  4,10
***       VM5B IS A HARDWARE DRIVER PP PROGRAM WHICH IS PART OF THE
*         MAP-V SYSTEM SOFTWARE EXECUTIVE VERSION 1 (MVX V1.0).
*         ITS MAJOR FUNCTION IS MONITORING THE MAP-V HARDWARE.
*
*         MAP-V PRODUCT NUMBERS (9/84)
*
*                65354-X  MAP-V BASE PRODUCT
*
*                  - ST-100 C
*                  - ONE CHANNEL ADAPTER
*                  - *X* ALLOWS MULTIPLE BASE PRODUCTS
*                        - 12 BIT CHANNEL BASE PRODUCT
*                        - 16 BIT CHANNEL BASE PRODUCT
*
*                65355-X  MAP-V OPTIONS
*
*                  OPTIONS INCLUDE
*
*                    - MAINTENANCE TERMINAL
*                    - MAIN MEMORY EXPANSION
*                    - CHANNEL ADAPTERS
*                    - CENTRAL MEMORY INTERFACE (CMI)
*                    - CACHE MEMORY EXPANSION
*                    - PERIPHERAL ADAPTERS
*                    - CABINETS
*
          SPACE  4,10
*         TEMPORARY EQUATES.

 HDW12BC  EQU    1           MAP-V CHANNEL INTERFACE IS 12/60 HARDWARE
 ILRRP    EQU    1           INDIRECT LIST ON REQUEST-OR RESPONSE PKTS
 F16BD    EQU    1           FLAG 16 BIT DATA I/O

 MTRACEI  EQU    3           MAX LENGTH OF HARDWARE FUNCTION TRACE
 EFLAG1   EQU    0           =1 CODE ON FOR 1XX ERRORS (TIMEOUTS)
 EFLAG2   EQU    0           =1 CODE ON FOR 2XX ERRORS (PP INT TABLE)
 EFLAG3   EQU    0           =1 CODE ON FOR 3XX ERRORS (UIT)
 EFLAG4   EQU    0           =1 CODE ON FOR 4XX ERRORS (REQUEST HEADER)
 EFLAG5   EQU    1           =1 CODE ON FOR 5XX ERRORS (COMMAND)
 EFLAG0   EQU    EFLAG1+EFLAG2+EFLAG3+EFLAG4+EFLAG5  0 IF NO ERROR ON
          SPACE  4,20
          LIST   -$          TURN DESIGN OVERVIEW LIST ON/OFF
          TITLE  VM5B - MAP-V PPU DESIGN OVERVIEW
**                                                   FEBRUARY 05, 1985
**
** MAP-V PPU DESIGN OVERVIEW.
**
**
** THE MAP-V HARDWARE IS A 100-MEGAFLOP ARRAY PROCESSOR BUILT BY
** STAR TECHNOLOGIES, INC (STI).  IT CONSISTS OF MULTIPLE PROCESSORS
** AND MEMORIES INTERCONNECTED TO ALLOW INDEPENDENT DATA FLOW AND
** ARITHEMETIC PROCESSING.  IT MAY BE CONNECTED TO MULTIPLE HOST
** COMPUTERS FROM VARIOUS VENDORS.
**
** HERE IT IS ASSUMED THAT IT IS CONNECTED TO A CYBER-8XX WHICH IS
** IS RUNNING THE NOS/VE OPERATING SYSTEM.
**
** THIS CONNECTION MAY BE VIA:
**
**  (1) CYBER-8XX 12-BIT CHANNEL AND A CENTRAL MEMORY INTERFACE (CMI)
**      CONNECTED TO PORT 3 OF THE CYBER-8XX MAINFRAME
**  (2) CYBER-8XX 12-BIT CHANNEL ONLY - (STANDARD CHANNEL)
**  (3) CYBER-8XX 16-BIT CHANNEL ONLY - FUTURE - (INTELLIGENT
**      PERIPHERAL INTERFACE)
**
** THE CMI INTERFACE PROVIDES FOR HIGH SPEED
** DATA TRANSFERS (UP TO 100 MBYES/SEC) BETWEEN THE MAP-V
** MAIN-MEMORY AND THE CYBER-8XX CENTRAL MEMORY.  THE CYBER-8XX
** 12-BIT CHANNEL ONLY HARDWARE WILL USE THE 12-BIT STANDARD CHANNEL
** UTILIZING BOTH THE USUAL 12-BIT I/O AND 12-BIT PACKED I/O.  A FUTURE
** CHANNEL ONLY HARDWARE WILL USE THE 16-BIT INTELLIGENT PERIPHERAL
** INTERFACE (IPI).  THIS HARDWARE WILL BE SUPPORTED BY SOFTWARE
** IN A LATER RELEASE, BUT ITS IMPLICATIONS ARE CONSIDERED IN THIS
** DESIGN.

** INITIALLY, ONLY THE CMI HARDWARE WILL BE SUPPORTED.  THE 12-BIT
** STANDARD CHANNEL WILL FOLLOW WITH SOME DATA FORMAT RESTRICTIONS.
** BOTH IMPLEMENTATIONS UTILIZE THE 12-BIT STANDARD CHANNEL I/O
** TO EXCHANGE CONTROL PACKETS.

** THESE CONTROL PACKETS NOT ONLY PROVIDE DIRECTION TO THE MAP-V
** BUT ALSO, IN THE CMI CASE, CONTAIN CMI ADDESSING INFORMATION.
** THE CHANNEL INTERFACE HARDWARE USED FOR THIS SOFTWARE
** UTILIZES A 12-BIT CHANNEL INTERFACE WHICH WAS DEVELOPED
** FOR THE NOS 12/60-BIT SIDE OF CYBER-8XX.  ON THIS CHANNEL
** INTERFACE, THE UPPER 28 BITS OF SOME 60-BIT TRANSFERS ARE DIS-
** CARDED BY THE INTERFACE.  INPUT/OUTPUT IN THIS CASE IS IN
** 12-BIT BYTES.  TO UTILIZE THIS HARDWARE ON THE VE SYSTEM, THE PPU
** REFORMATS INFORMATION WHICH PASSES OVER THE CHANNEL TO CONFORM
** WITH THE HARDWARE REQUIREMENTS.  IN THE 12-BIT STANDARD CHANNEL
** ONLY CASE, USER DATA WILL BE RESTRICTED TO 2-32 BIT WORDS IN ONE
** 64-BIT WORD.  THIS DATA WILL BE TRANSFERED ACROSS THE CHANNEL
** INTERFACE USING THE 12-BIT PACKED CHANNEL INSTRUCTIONS AND BY THE
** SELECTION OF 60-BIT PACKED 32-BIT DATA FORMAT AT THE INTERFACE.
** WITH THIS SELECTION, THE INTERFACE TRANSFORMS EIGHT 60-BIT WORDS
** INTO FIFTEEN 32-BIT WORDS OF THE MAP-V MEMORY.  THIS REQUIREMENT
** WILL MAKE IT NECESSARY TO ADD ADDITIONAL RESTRICTIONS TO
** MINIMIZE END CASES.
** THIS OPERATION IS TO BE TRANSPARENT TO USER.
**
**
**
** IT IS EXPECTED THAT WHEN THE IPI
** CHANNEL BECOMES AVAILABLE, IT WILL REPLACE THE 12/60-BIT
** INTERFACE, MAKING REFORMATING UNNECESSARY.
**
**
** THE MAP-V PPU UTILIZES THE CYBER-180 CENTRAL PROCESSOR
** UNIT TO INPUT/OUTPUT UNIT SOFTWARE INTERFACE OF THE NOS/VE
** OPERATING SYSTEM.  THIS INTERFACE DEFINES TABLES
** THAT RESIDE IN CENTRAL MEMORY AND THE RULES FOR
** ACCESSING THESE TABLES.
**
** PERIPHERAL REQUEST(S) ARE DIRECTED BY THE OPERATING SYSTEM TO EITHER
** A SPECIFIC PP OR A SPECIFIC UNIT DRIVEN BY A PP, SUCH AS A MAP-V.
** A REQUEST TO A PP TYPICALLY DESCRIBES A SYSTEM CONTROL OPERATION
** SUCH AS IDLE OR RESUME.  A REQUEST TO A PERIPHERAL UNIT TYPICALLY
** DESCRIBES A HARDWARE FUNCTION, A HARDWARE STATUS REQUEST
** AN INPUT/OUTPUT OPERATION OR A SERIES OF INPUT/OUTPUT
** OPERATIONS.  IN THE CASE OF MAP-V, OUTPUT OPERATIONS TAKE THE
** FORM OF (1) MAP-V PROTOCOL DATA (REQUEST PACKETS) OR (2) DATA
** LOADED INTO THE MAIN-MEMORY OF THE MAP-V FROM CYBER-180 CENTRAL
** MEMORY, WHILE INPUT OPERATIONS TAKE THE FORM OF (1) MAP-V STATUS
** DATA (RESPONSE PACKETS) OR (2) DATA UNLOADED FROM MAP-V MAIN-MEMORY
** OR PUBLIC-MEMORY (ENGINEERING FILE, ACCOUNTING DATA, ETC.)
** TO CYBER-180 CENTRAL MEMORY.  WHEN DATA IS TRANSFERED VIA THE CMI,
** THE REAL MEMORY WORD ADDRESSES AND WORD COUNTS ARE INCLUDED
** IN THE REQUEST PACKET.
**
**
** NOS/VE DEFINED COMMAND CODES (CPU TO PP) RECOQNIZED BY MAP-V PP.
**
**   PHYSICAL I/O COMMANDS.
**
**     20(16) - FUNCTION
**
**     21(16) - OUTPUT 8-BIT PARAMETERS
**
**     23(16) - OUTPUT 8-BIT DATA
**
**     25(16) - INPUT 8-BIT DATA/PARAMETERS
**
**   LOGICAL I/O COMMANDS.
**
**     40(16) - READ BYTES
**
**     50(16) - WRITE BYTES
**
**     60(16) - READ STATUS
**
**   PP COMMANDS.
**
**     00(16) - ACKNOWLEDGE
**
**     01(16) - STOP UNIT
**
**     03(16) - SELECT CONTROLLER
**
**     04(16) - IDLE
**
**     05(16) - RESUME
**
**     06(16) - EXECUTE OVERLAY
**
**     07(16) - START READY SCAN
**
**     08(16) - STOP READY SCAN
**
**     09(16) - SELECT PP MEMORY ADDRESS
**
**     0A(16) - COPY PP MEMORY
**
**     10(16) - ENABLE UNIT
**
**     11(16) - DISABLE UNIT
**
**     17(16) - MASTER CLEAR CONTROLLER
**
**
**
**   FUNCTION - 20(16).
**
**     THE STANDARD NOS/VE INTERPRETATION OF THE ADDRESS AND LENGTH
**     FIELDS OF THIS COMMAND IS DIFFERENT FROM THE INTERPRETATION OF
**     OTHER NOS/VE COMMANDS.  FOR THE FUNCTION COMMAND, THE ADDRESS
**     FIELD CONTAINS A DEVICE DEPENDENT FUNCTION CODE.  THE
**     LENGTH FIELD CONTAINS A BINARY VALUE SPECIFYING THE NUMBER
**     OF BIT POSITIONS OCCUPIED BY FUNCTION CODE.
**
**     FOR THE MAP-V 12/60-BIT CHANNEL INTERFACE IMPLEMENTATION, IT IS
**     ASSUMED TO BE A 12-BIT RIGHT JUSTIFIED CODE.  THE LENGTH
**     FIELD IS SET TO 12-DECIMAL.
**
**     TYPICAL MAP-V HARDWARE FUNCTIONS EXECUTED IN THIS MANNER ARE:
**
**       0100(8) - MASTER CLEAR INTERFACE.
**       0277(8) - CLEAR SEQUENCER.
**
**       TO ACCOMODATE THIS, THE NOS/VE UNIT REQUEST CONSISTS OF
**       ONE COMMAND.
**
**       --  20 80  000C  0000 0YYY(16)
**
**       (1) 20(16)    = (C) COMMAND CODE - FUNCTION
**           80(16)    = (F) FLAGS - STORE RESPONSE
**           000C(16)  = (LENGTH) FUNCTION CODE BIT LENGTH
**           0000 0YYY = FUNCTION CODE
**
**     ANOTHER IMPLEMENTATION OF THE FUNCTION IS WITHIN A
**     USER OR SUBSYSTEM DATA I/O SEQUENCE ON THE CHANNEL.  HERE
**     THE 12-BIT FUNCTION CODE DEFINES WHETHER I/O IS WITH
**     MAIN MEMORY OR IN SPECIAL CASES, PUBLIC MEMORY.  IN ADDITION,
**     THE LEFT MOST HEXIDECMAL DIGIT OF THE FUNCTION CODE IS USED
**     AS A SOFTWARE FUNCTION TO DEFINE MORE INFORMATION ABOUT THE
**     DATA MANIPULATIONS NECESSARY TO TRANSFER DATA.  CURRENTLY
**     ONLY TWO BITS ARE USED.
**
**       TO ACCOMODATE THIS, THE NOS/VE UNIT REQUEST CONSISTS OF
**       SEVERAL COMMANDS.  THE FUNCTION IS BUT ONE COMMAND IN THE
**       SEQUENCE.  SEE CHANNEL I/O DESCRIBED IN MORE DETAIL IN
**       LATER SECTION.
**
**       --  20 00  000C  X000 0YYY(16)
**
**       (1) 20(16)    = (C) COMMAND CODE - FUNCTION
**           00(16)    = (F) FLAGS - NO FLAGS
**           000C(16)  = (LENGTH) FUNCTION CODE BIT LENGTH
**           X000      = SOFTWARE FUNCTION CODE
**                       WHERE X = XX00(2)
**                       XX00(2) = 60-BIT CM R/W, 12/12-BIT I/O
**                                 STLOD - I.E. PROCESS LOADS
**                       XX01(2) = INVALID.  (RESERVED)
**                       XX10(2) = 64-BIT CM R/W, 12/12-BIT I/O
**                                 ENGINEERING, ACCOUNT, ETC. FILE
**                       XX11(2) = 64-BIT CM R/W, 16/12-BIT I/O
**                                 PACKED 32 BIT USER DATA
**           0YYY      = FUNCTION CODE
**                       0YYY(16) = 0100(16) = 0400(8) = WRITE PUBLIC M.
**                       0YYY(16) = 0101(16) = 0401(8) = WRITE MAIN MEM
**                       0YYY(16) = 0140(16) = 0500(8) = READ PUBLIC MEM
**                       0YYY(16) = 0141(16) = 0501(8) = READ MAIN MEM
**
**   READ STATUS - 60(16).
**
**     THIS COMMAND PROVIDES A DEVICE-INDEPENDENT METHOD OF RETREIVING
**     DEVICE-DEPENDENT STATUS ASSOCIATED WITH A NOS/VE LOGICAL UNIT.
**
**     THE MAP-V 12-BIT CHANNEL INTERFACE PROVIDES TWO STATUS WORDS.
**     SINCE THERE IS SPACE FOR 4-PP WORDS IN ONE 64-BIT CM WORD,
**     STATUS WILL BE WRITTEN TO CENTRAL MEMORY WITH LEFT TWO BYTES
**     CONTAINING STATUS READ AFTER LAST OPERATION AND RIGHT TWO
**     BYTES CONTAIN TWO STATUS WORDS READ AS A RESULT OF THIS
**     COMMAND CODE.  STATUS WORD 1 WILL OCCUR IN BYTES 0 AND 2, WHILE
**     STATUS WORD 2 WILL OCCUR IN BYTES 1 AND 3.
**
**       TO ACCOMODATE THIS, THE NOS/VE UNIT REQUEST CONSISTS OF
**       ONE COMMAND.
**
**       --  60 80  0008  YYYY YYYY(16)
**
**       (1) 60(16)    = (C) COMMAND CODE - READ STATUS
**           80(16)    = (F) FLAGS - STORE RESPONSE
**           0008      = (LENGTH) CENTRAL MEMORY AREA IN 8-BIT BYTES
**           YYYY YYYY = (ADDRESS) REAL MEMORY BYTE ADDRESS TO
**                                 STORE MAP-V STATUS WORDS
**
**
**
** SOFTWARE IN THE MAP-V - ARRAY PROCESSOR MONITOR - (APM).
**
** THE EXTERNAL INTERFACE TO THE MAP-V ARRAY PROCESSOR MONITOR (APM)
** IS DEFINED BY STI IN THE FORM OF REQUEST AND RESPONSE PACKETS.
** IT IS THRU THIS MECHANISM THAT THE HOST PROCESSOR (CYBER-180)
** TELLS THE MAP-V WHAT TO DO.  FOR EVERY REQUEST PACKET SENT BT THE
** HOST, THERE IS A CORRESPONDING RESPONSE PACKET, HOWEVER, THE RE-
** SPONSE PACKETS MAY NOT BE RETURNED IN THE SAME SEQUENCE THAT THE
** REQUESTS WERE SENT.  ALSO, A LONG TIME PERIOD MAY PASS BETWEEN THE
** TIME THE REQUEST IS SENT, AND WHEN THE RESPONSE IS AVAILABLE.  ONE
** SUCH CASE IS THE REQUEST TO RUN A PROCESS IN THE MAP-V.  IN THIS
** CASE THE RESPONSE IS NOT AVAILABLE UNTIL IT COMPLETES, WHICH COULD
** BE MILLISECONDS, SECONDS, MINUTES OR HOURS.
**
** THE REQUEST PACKET AREA POINTED TO IN CM BY THE
** PP UNIT REQUEST CONSISTS OF TWO TIME STAMP LOCATIONS
** FOLLOWED BY THE STI DEFINED REQUEST PACKET.  THE TIME STAMPS
** ARE READINGS TAKEN BY THE PPU FROM THE MICRO-SECOND CLOCK
** WHEN:
**      (1) PPU LOCATES AND STARTS TO PROCESS REQUEST PACKET
** AND  (2) PPU HAS SUCCESSFULLY DELIVERED PACKET TO MAP-V.
**
** THE STI REQUEST PACKET FORMAT IS:
**
**     JID  (32 BITS) JOB IDENTIFIER
**     RSN  (32 BITS) REQUEST SERIAL NUMBER
**     RES  (32 BITS) RESERVED WORD FOR STAR TECHNOLOGIES
**     FC   (32 BITS) FUNCTION CODE OF ST-REQUEST
**     LNG  (32 BITS) LENGTH OF REQUEST - 32 BIT WORDS  (JID - CSUM)
**     RPKT (N-WORDS, EACH 32 BITS) REQUEST PACKET PARAMETERS
**                    THIS VARIABLE LENGTH FIELD IS UNIQUELY
**                    DEFINED BY EACH INDIVIDUAL REQUEST TYPE.
**     CMIP (N-WORDS, EACH 64 BITS)  CMI PARAMETERS
**                    THIS FIELD IS DEFINED FOR CMI TRANSFERS.
**                    IT CONSISTS OF HOST REAL MEMORY WORD ADDRESSES
**                    AND CM WORD COUNTS.
**          (32-BITS) CMI TERMINATION FLAG = 8000 0000(16)
**     CSUM (32 BITS) CHECKSUM - 32-BIT SUM OF PACKET WITH NO CARRY
**
** THE RESPONSE PACKET AREA POINTED TO IN CM BY THE
** PP UNIT REQUEST CONSISTS OF THE STI DEFINED RESPONSE PACKET.
**
** THE STI RESPONSE PACKET FORMAT IS:
**
**     JID  (32 BITS) JOB IDENTIFIER
**     RSN  (32 BITS) REQUEST SERIAL NUMBER
**     RS   (96 BITS) RETURN STATUS - I-STAT (32 BITS)
**                                  - J-STAT (32 BITS)
**                                  - K-STAT (32 BITS)
**     CSUM (32 BITS) CHECKSUM - 32-BIT SUM OF PACKET WITH NO CARRY
**
**
**
**
** TO COMMUNICATE WITH THE MAP-V APM THE GENERAL PROTOCOL IS:
**    - SEND A REQUEST PACKET WITH PROTOCOL DATA
**    - RECEIVE A RESPONSE PACKET WITH STATUS DATA
**
**       TO ACCOMODATE THIS, THE NOS/VE UNIT REQUEST CONSISTS OF
**       TWO COMMANDS.
**
**       --  21 00  XXXX  YYYY YYYY(16)
**       --  25 80  XXXX  YYYY YYYY(16)
**
**       (1) 21(16)    = (C) COMMAND CODE - OUTPUT 8-BIT PARAMETERS
**                           (WRITE FLAG FUNCTION IMPLIED)
**           00        = (F) FLAGS - INDIRECT FLAG OPTIONAL
**           XXXX      = (LENGTH) CENTRAL MEMORY AREA IN 8-BIT BYTES
**           YYYY YYYY = (ADDRESS) REAL MEMORY BYTE ADDRESS OF
**                                 REQUEST PACKET AREA
**
**       FOLLOWED BY:
**       (2) 25(16)    = (C) COMMAND CODE - INPUT 8-BIT DATA/PARAMETERS
**                           (WRITE FLAG FUNCTION IMPLIED)
**           80(16)    = (F) FLAGS = STORE RESPONSE
**                                 - INDIRECT FLAG OPTIONAL
**           XXXX      = (LENGTH) CENTRAL MEMORY AREA IN 8-BIT BYTES
**           YYYY YYYY = (ADDRESS) REAL MEMORY BYTE ADDRESS OF
**                                 RESPONSE PACKET AREA
**
** TO SATISFY HOST-CENTRAL-MEMORY/MAP-V-MAIN-MEMORY
** DATA TRANSFERS THE CMI AND CHANNEL ONLY CASES ARE
** DEFINED AS FOLLOWS:
**
**  (A)  REQUEST PACKET CONTAINS PROTOCOL DATA AND DEFINES
**       A HOST-CENTRAL-MEMORY/MAP-V-MAIN-MEMORY DATA TRANSFER
**       VIA THE CMI HARDWARE.
**
**       TO ACCOMODATE THIS, THE NOS/VE UNIT REQUEST CONSISTS OF
**       THREE COMMANDS.
**
**       --  21 00  XXXX  YYYY YYYY(16)
**       --  21 40  XXXX  YYYY YYYY(16)
**       --  25 80  XXXX  YYYY YYYY(16)
**
**       (1) 21(16)    = (C) COMMAND CODE - OUTPUT 8-BIT PARAMETERS
**                           (WRITE FLAG FUNCTION IMPLIED)
**           00        = (F) FLAGS - INDIRECT FLAG OPTIONAL
**           XXXX      = (LENGTH) CENTRAL MEMORY AREA IN 8-BIT BYTES
**           YYYY YYYY = (ADDRESS) REAL MEMORY BYTE ADDRESS OF
**                                 REQUEST PACKET AREA
**
**       FOLLOWED BY:
**       (2) 21(16)    = (C) COMMAND CODE - OUTPUT 8-BIT PARAMETERS
**           40(16)    = (F) FLAGS - INDIRECT ADDRESS
**           XXXX      = (LENGTH) CENTRAL MEMORY AREA IN 8-BIT BYTES
**           YYYY YYYY = (ADDRESS) REAL MEMORY BYTE ADDRESS WHICH
**                                 CONTAINS LENGTH/ADDRESS PAIRS
**       FOLLOWED BY:
**       (3) 25(16)    = (C) COMMAND CODE - INPUT 8-BIT DATA/PARAMETERS
**                           (WRITE FLAG FUNCTION IMPLIED)
**           80(16)    = (F) FLAGS = STORE RESPONSE
**                                 - INDIRECT FLAG OPTIONAL
**           XXXX      = (LENGTH) CENTRAL MEMORY AREA IN 8-BIT BYTES
**           YYYY YYYY = (ADDRESS) REAL MEMORY BYTE ADDRESS OF
**                                 RESPONSE PACKET AREA
**
**
**
**  (B)  REQUEST PACKET CONTAINS PROTOCOL DATA AND DEFINES
**       A HOST-CENTRAL-MEMORY TO/FROM MAP-V-MAIN-MEMORY DATA TRANSFER
**       OR A HOST-CENTRAL-MEMORY FROM MAP-V PUBLIC-MEMORY DATA TRANSFER
**       VIA THE PPU CHANNEL.
**
**       TO ACCOMODATE THIS, THE NOS/VE UNIT REQUEST CONSISTS OF
**       FOUR COMMANDS.
**
**       --  21 00  XXXX  YYYY YYYY(16)
**       --  25 00  XXXX  YYYY YYYY(16)
**       --  20 00  000C  X000 0101(16)
**       --  50 C0  XXXX  YYYY YYYY(16)
**       OR
**       --  21 00  XXXX  YYYY YYYY(16)
**       --  25 00  XXXX  YYYY YYYY(16)
**       --  20 00  000C  X000 0YYY(16)
**       --  40 C0  XXXX  YYYY YYYY(16)
**
**       (1) 21(16)    = (C) COMMAND CODE - OUTPUT 8-BIT PARAMETERS
**                           (WRITE FLAG FUNCTION IMPLIED)
**           00        = (F) FLAGS - INDIRECT FLAG OPTIONAL
**           XXXX      = (LENGTH) CENTRAL MEMORY AREA IN 8-BIT BYTES
**           YYYY YYYY = (ADDRESS) REAL MEMORY BYTE ADDRESS OF
**                                 REQUEST PACKET AREA
**
**       FOLLOWED BY:
**       (2) 25(16)    = (C) COMMAND CODE - INPUT 8-BIT DATA/PARAMETERS
**                           (WRITE FLAG FUNCTION IMPLIED)
**           00        = (F) FLAGS - INDIRECT FLAG OPTIONAL
**           XXXX      = (LENGTH) CENTRAL MEMORY AREA IN 8-BIT BYTES
**           YYYY YYYY = (ADDRESS) REAL MEMORY BYTE ADDRESS OF
**                                 RESPONSE PACKET AREA
**
**       (3) 20(16)    = (C) COMMAND CODE - FUNCTION
**           00        = (F) FLAGS - NO FLAGS
**           000C(16)  = (LENGTH) FUNCTION CODE BIT LENGTH
**           X000 0YYY = FUNCTION CODE
**           X000      = SOFTWARE FUNCTION CODE
**                       WHERE X = XX00(2)
**                       XX00(2) = 60-BIT CM R/W, 12/12-BIT I/O
**                                 STLOD - I.E. PROCESS LOADS
**                       XX01(2) = INVALID.  (RESERVED)
**                       XX10(2) = 64-BIT CM R/W, 12/12-BIT I/O
**                                 ENGINEERING, ACCOUNT, ETC. FILE
**                       XX11(2) = 64-BIT CM R/W, 16/12-BIT I/O
**                                 PACKED 32 BIT USER DATA
**                 YYY = 101(16) = 0401(8) - WRITE TO MAIN-MEMORY
**                 YYY = 140(16) = 0500(8) - READ FROM PUBLIC-MEMORY
**                 YYY = 141(16) = 0501(8) - READ FROM MAIN-MEMORY
**
**       FOLLOWED BY:
**       (4) 50(16)    = (C) COMMAND CODE - WRITE BYTES
**     OR    40(16)    = (C) COMMAND CODE - READ BYTES
**           C0(16)    = (F) FLAGS - STORE RESPONSE, INDIRECT ADDRESS
**           XXXX      = (LENGTH) CENTRAL MEMORY AREA IN 8-BIT BYTES
**           YYYY YYYY = (ADDRESS) REAL MEMORY BYTE ADDRESS WHICH
**                                 CONTAINS LENGTH/ADDRESS PAIRS
**
**
**
**
** THE PPU IS RESPONSIBLE FOR ASSIGNING A VALUE TO THE 32-BIT
** RSN FIELD OF THE MAP-V REQUEST PACKET.  THE VALUE ASSIGNED
** IS THE RMA (BYTE ADDRESS) WITH LOWER 3-BITS ASSIGNED AN INDEX
** TO THE NEXT CMD IN THE REQUEST.  THE CMD INDEX MAY NOT EXCEED
** 3-BITS (I.E. A VALUE OF SEVEN (7)).  THIS VALUE, WHICH IS
** RETURNED IN THE RSN FIELD OF THE MAP-V RESPONSE PACKET, IS USED TO
** PAIR UP THE RESPONSE WITH THE ORIGINAL PP-UNIT-REQUEST.  THIS VALUE
** IS ALSO INCLUDED IN CSUM ACCUMLULATION OF THE REQUEST PACKET
** BY THE PPU.  THE DESIGN, AT THIS TIME, ALLOWS FOR ONLY ONE (1)
** REQUEST/RESPONSE DIRECTIVE SET IN A PP-UNIT REQUEST.  THIS
** RESULTS IN EITHER TWO (2) TO FOUR (4) COMMANDS PER PP-UNIT
** REQUEST.
**
** IF A DATA TRANSFER (STWR OR STRD) TO/FROM MAIN MEMORY IS INVOLVED -
**     IN THE CMI CASE, THE CMIP (CMI PARAMETERS) FIELD IS ALSO
**     THE RESPONSIBLITY OF THE PPU.  THESE PARAMETERS ARE
**     FORMATTED, CHECKSUMMED  AND INSERTED IN THE APPROPRIATE
**     POSITION OF THE MAP-V REQUEST BY THE PPU.
**
**     IN THE CHANNEL ONLY CASE, THE LAST CMD IN PP-UNIT-REQUEST
**     BLOCK WILL DIRECT THE PPU TO PERFORM THE APPROPRIATE DATA
**     TRANSFER.  THIS DATA TRANSFER WILL TAKE PLACE OVER A
**     16-BIT IPI CHANNEL (FUTURE IMPLEMENTATION).
**
** THE INITIAL IMPLEMENTATION IS WITH CMI AND A 12-BIT CHANNEL
** INTERFACE.  THIS CHANNEL HARDWARE SUPPORTS 12/60 BIT FORMATS.
** THIS MAP-V HARDWARE INTERFACE PASSES COMMAND AND CONTROL
** INFORMATION (I.E. FUNCTION CONTROL AND REQUEST/RESPONSE
** PACKETS) IN THE LOWER 32-BITS OF A 60-BIT TRANSFER.  THE FUNCTION
** CONTROL INFORMATION IS SET UP IN THE PPU AND CONSISTS OF 2-60 BIT
** WORDS USING THE LOWER 32-BITS. THE REQUEST PACKETS ARE SET UP IN
** CENTRAL MEMORY BY THE MAP-V SUBSYSTEM SOFTWARE WHILE THE ADDRESS
** LIST IS SET UP BY THE NOS/VE OPERATING SYSTEM.  TO MEET THE INTER-
** FACE REQUIREMENTS, THE PPU REFORMATS THE VARIABLE LENGTH 64-BIT
** REQUEST PACKET AND ADDRESS LIST TO MEET THE CHANNEL AND APM
** REQUIREMENTS.  THE CENTRAL MEMORY DATA THAT THE USER PROGRAM
** WISHES TO TRANSFER TO/FROM MAP-V-MAIN-MEMORY VIA STWR OR
** STRD CALLS IS TRANSFERED VIA THE CMI.
**
** FUTURE IMPLEMENTATION WILL REQUIRE THAT THE CMI DATA TRANSFER
** DESCRIBED ABOVE BE CARRIED OUT OVER A CHANNEL INTERFACE.
** WHEN THE IPI MAP-V CHANNEL INTERFACE IS BUILT, THE CHANNEL
** INTERFACE WILL BE CAPABLE TO TRANSFERING THE 16/64 DATA
** AND THE 16/64 FUNCTION CONTROL AS WELL AS THE 16/64
** REQUEST/RESPONSE PACKETS.  IT IS EXPECTED THAT THIS INTERFACE
** WILL EVENTUALLY REPLACE THE 12/60 BIT INTERFACE ON THE NOS/VE
** SYSTEM.
**
**
**
**
**     FOR RESTART AND RECOVER, THE CPU WILL NEED TO
**     INITIATE A WRITE FLAG SEQUENCE WITH APM SOFTWARE
**     FUNCTION CODE 4 (SOFTWARE INITIATED MASTER CLEAR).
**     OTHER EXISTING APM CODES MAY BE IMPLEMENTED OR CODES
**     MAY BE ADDED IN THE FUTURE FOR THIS SPECIALIZED SEQUENCE.
**
**     MAP-V HARDWARE FUNCTIONS TO BE EXECUTED IN THIS MANNER ARE:
**
**       0200(8) - WRITE FLAG FUNCTION.
**
**       TO ACCOMODATE THIS, THE NOS/VE UNIT REQUEST CONSISTS OF
**       MORE THAN ONE COMMAND.
**
**       --  20 00  000C  0000 0080(16)
**       --  21 00  0008  YYYY YYYY(16)
**       --  60 80  0008  YYYY YYYY(16)
**
**
**       (1) 20(16)    = (C) COMMAND CODE - FUNCTION
**           00        = (F) FLAGS - NO FLAGS
**           000C(16)  = (LENGTH) FUNCTION CODE BIT LENGTH
**           0000 0080 = FUNCTION CODE - 0200(8)
**
**       FOLLOWED BY:
**       (2) 21(16)    = (C) COMMAND CODE - WRITE 8-BIT PARAMETERS
**           00        = (F) FLAGS - NO FLAGS
**           0008(16)  = (LENGTH) CENTRAL MEMORY AREA IN 8-BIT BYTES
**                                (ONE 64-BIT CM WORD CONVERTED TO
**                                 TWO 12/60-BIT WORDS)
**           YYYY YYYY = (ADDRESS) REAL MEMORY BYTE ADDRESS OF
**                                 8-BIT PARAMETERS
**
**       FOLLOWED BY:
**       (3) 60(16)    = (C) COMMAND CODE - READ STATUS
**           80(16)    = (F) FLAGS - STORE RESPONSE
**           0008      = (LENGTH) CENTRAL MEMORY AREA IN 8-BIT BYTES
**           YYYY YYYY = (ADDRESS) REAL MEMORY BYTE ADDRESS TO
**                                 STORE MAP-V STATUS WORDS
**
**
**
**
**     MAP-V DIAGNOSTIC HARDWARE FUNCTIONS HAVE ADDITIONAL
**     REQUIREMENTS AND USE THE FUNCTION IN AN EXTENDED
**     SEQUENCE.  SOME OF THE DIAGNOSTIC FUNCTIONS DIRECT THE INTER-
**     FACE TO TURN DATA AROUND AT VARIOUS POINTS IN THE INTERFACE.
**     IN THESE CASES THE DIAGNOSTIC SEQUENCE CONSISTS OF A FUNCTION
**     CODE AND A WORD OF DATA WHICH IS OUTPUTTED AND READ BACK FOR
**     COMPARISON.  FOR THE 12/60-BIT CHANNEL INTERFACE THE DATA
**     MUST BE STRUCTURED AS 12/60-BIT DATA IN A 64-BIT WORD.
**     THE PPU WILL SPECIAL CASE THE DIAGNOSTIC FUNCTIONS
**     INVOLVING DATA TURN AROUND ON THE 12/60-BIT HARDWARE
**     AND WILL DO A 60-BIT READ AND A 60-BIT WRITE WITH
**     CENTRAL MEMORY.
**
**     THE 16/64-BIT CHANNEL INTERFACE DIAGNOSTIC NEEDS
**     FURTHER DEFINITION.
**
**     MAP-V HARDWARE FUNCTIONS TO BE EXECUTED IN THIS MANNER ARE:
**
**       0304(8) - TEST TRANSMITTERS, RECEIVERS AND CABLE WITH SIMPLE
**                 PATTERNS.
**       03X5(8) - TEST IOP NUMERICAL CONVERSION DATA PATHS.
**                 WHERE X = 0, 1, 2, OR 3.
**
**       TO ACCOMODATE THIS, THE NOS/VE UNIT REQUEST CONSISTS OF
**       MORE THAN ONE COMMAND.
**
**       --  20 00  000C  0000 0YYY(16)
**       --  23 00  0008  YYYY YYYY(16)
**       --  25 00  0008  YYYY YYYY(16)
**       --  60 80  0008  YYYY YYYY(16)
**
**       (1) 20(16)    = (C) COMMAND CODE - FUNCTION
**           00        = (F) FLAGS - NO FLAGS
**           000C(16)  = (LENGTH) FUNCTION CODE BIT LENGTH
**           0000 0YYY = FUNCTION CODE
**
**       FOLLOWED BY:
**       (2) 23(16)    = (C) COMMAND CODE - OUTPUT 8-BIT DATA
**           00        = (F) FLAGS - NO FLAGS
**           0008(16)  = (LENGTH) CENTRAL MEMORY AREA IN 8-BIT BYTES
**           YYYY YYYY = (ADDRESS) REAL MEMORY BYTE ADDRESS OF
**                                 8-BIT DATA
**
**       FOLLOWED BY:
**       (3) 25(16)    = (C) COMMAND CODE - INPUT 8-BIT DATA/PARAMETERS
**           00        = (F) FLAGS - NO FLAGS
**           0008      = (LENGTH) CENTRAL MEMORY AREA IN 8-BIT BYTES
**           YYYY YYYY = (ADDRESS) REAL MEMORY BYTE ADDRESS OF
**                                 8-BIT DATA
**
**       FOLLOWED BY:
**       (4) 60(16)    = (C) COMMAND CODE - READ STATUS
**           80(16)    = (F) FLAGS - STORE RESPONSE
**           0008      = (LENGTH) CENTRAL MEMORY AREA IN 8-BIT BYTES
**           YYYY YYYY = (ADDRESS) REAL MEMORY BYTE ADDRESS TO
**                                 STORE MAP-V STATUS WORDS
**
**
**
**
**     NON-DATA MAP-V HARDWARE DIAGNOSTIC FUNCTION.
**
**       0306(8) - TEST IOP COMMON LOGIC.
**                 THIS FUCTION RUNS FOR ABOUT
**                 10 SECONDS AND LOCKS OUT ALL
**                 ACTIVITY TO THIS IOP.
**
**     NOTE: REFER TO HARDWARE SPECIFICATION FOR RE-DEFINITION
**           OF STATUS BITS FOLLOWING THIS FUNCTION.
**
**       TO ACCOMODATE THIS, THE NOS/VE UNIT REQUEST CONSISTS OF
**       MORE THAN ONE COMMAND.
**
**       --  20 00  000C  0000 00C6(16)
**       --  60 00  0008  YYYY YYYY(16)
**       --  20 80  000C  0000 00BF(16)
**
**       (1) 20(16)    = (C) COMMAND CODE - FUNCTION
**           00        = (F) FLAGS - NO FLAGS
**           000C(16)  = (LENGTH) FUNCTION CODE BIT LENGTH
**           0000 00C6 = FUNCTION CODE - 0306(8)
**
**       FOLLOWED BY:
**       (2) 60(16)    = (C) COMMAND CODE - READ STATUS
**           00        = (F) FLAGS - NO FLAGS
**           0008      = (LENGTH) CENTRAL MEMORY AREA IN 8-BIT BYTES
**           YYYY YYYY = (ADDRESS) REAL MEMORY BYTE ADDRESS TO
**                                 STORE MAP-V STATUS WORDS
**
**       FOLLOWED BY:
**       (3) 20(16)    = (C) COMMAND CODE - FUNCTION
**           80(16)    = (F) FLAGS - STORE RESPONSE
**           000C(16)  = (LENGTH) FUNCTION CODE BIT LENGTH
**           0000 00BF = FUNCTION CODE - 0277(8)
**
**
**
** N0S/VE PERIPHERAL PROCESSOR RESPONSES
**
**
** PERIPHERAL RESPONSES ARE PREPARED BY THE PERIPHERAL PROCESSOR
** AND DESCRIBE EITHER THE STATUS OF A REQUEST OR
** THE OCCURRANCE OF AN UNUSUAL CONDITION NOT RELATED TO A
** REQUEST.  RESPONSES ARE TRANSMITTED TO THE OPERATING SYSTEM
** THROUGH RESPONSE BUFFERS.  A SEPARATE RESPONSE BUFFER IS
** DEFINED FOR EACH PP.
**
** WHEN A RESPONSE IS RELATED TO A LOGICAL UNIT REQUEST, THE
** STATUS CONDITION REPORTED IN THE RESPONSE USUALLY REPRESENTS
** STATUS ACCUMULATED SINCE THE REQUEST WAS STARTED.
**
** THE FORMAT OF THE FIRST 40 BYTES (FIVE 64-BIT WORDS) OF EVERY
** RESPONSE IS IDENTICAL, EVEN THOUGH SOME OF THE FIELDS MAY BE
** UNSUSED.
**
** IN ADDITION -
**
**   (1) THE MAP-V PP WILL APPEND 2 64-BIT WORDS TO ALL UNIT RESPONSES.
**       THESE WORDS CONTAIN TIMIMG INFORMATION REGARDING RESPONSE
**       PROCESSING. THE TIME STAMPS ARE READINGS TAKEN BY THE PPU
**       FROM THE MICRO-SECOND CLOCK WHEN:
**      (1) PPU HAS SENT A RESPONSE TO THE CPU
**       AND
**      (2) IN CMI CASE - TIME THE PPU RECEIVED THE RESPONSE PACKET
**                        FROM THE MAP-V.
**          IN CHANNEL I/O CASE - TIME DATA I/O COMPLETES.
**
**   (2) THE MAP-V PP WILL APPEND A 64-BIT WORD TO ALL UNIT RESPONSES.
**       THIS WORD IS MADE UP OF MAP-V INTERFACE HARDWARE STATUS WORDS.
**       THUS, ALL MAP-V UNIT RESPONSES WILL BE AT LEAST 64 BYTES
**       (EIGHT 64-BIT WORDS) LONG.
**
**   (3) IF A UNIT-RELATED ERROR OCCURS A SECOND 64-BIT WORD IS
**       APPENDED TO THE RESPONSE MAKING THE RESPONSE 72 BYTES LONG.
**
** IN THE STANDARD RESPONSE HEADER, WORD 4 - BITS 00-47 ARE OF PARTIC-
** ULAR INTEREST.  THE MAP-V PP RETURNS VALUES IN THE RESPONSE CODE (RC)
** FIELD AND WHEN APPROPIATE, IT ALSO MAY RETURN A VALUE IN
** THE UNSOLICITED RESPONSE CODE (URC) OR THE ABNORMAL STATUS,
** OR THE INTERFACE ERROR CODE (IEC) FIELD.
**
**     0               1               3               4              6
**     0123456789012345678901234567890123456789012345678901234567890123
**    /************************************************---------------/
**    /   ABNORMAL    *   INTERFACE   *   RC  *  URC  *               /
**    /    STATUS     *   ERROR CODE  *       *       *               /
**    /     (16)      *     (16)      *   (8) *  (8)  *               /
**    /************************************************---------------/
**
**                     WORD 4 - BITS 00-47
**
**
**   RESPONSE CODE (RC) FIELD (*/RS/P.RC*)
**
**        NOTE--IN THE NOTATION (*XXXXXX*), XXXXXX REFERS TO SYMBOL
**              USED IN THE PP LISTING.
**
**     THE RC FIELD OCCUPIES BITS 32-39 OF WORD 4 AND IDENTIFIES
**     THE GENERAL CONDITION THAT CAUSED THE RESPONSE TO BE
**     STORED.  THE LEFT TWO BITS (BITS 32 AND 33) SPECIFY THE
**     THE GENERAL CLASS OF RESPONSE.  THE GENERAL CLASSES ARE
**
**       00 - UNSOLICITED RESPONSE          (*R.UNS*)
**       01 - INTERMEDIATE RESPONSE         (*R.INT*)
**       10 - NORMAL REQUEST TERMINATION    (*R.NRM*)
**       11 - ABNORMAL REQUEST TERMINATION  (*R.ABN*)
**
**     THE NEXT TWO BITS (BITS 34 AND 35) IDENTIFY ADDITIONAL
**     CONDITIONS EXISTING AT THE TIME AN INTERMEDIATE OR FINAL
**     RESPONSE WAS STORED AND ARE ALWAYS ZERO FOR UNSOLICITED
**     RESPONSES.  CURRENTLY, THE MAP-V PP ALWAYS SETS THESE BITS TO
**     ZERO.
**
**     THE REMAINING FOUR BITS ARE RESERVED FOR FUTURE USE AND
**     CONTAIN ZEROS.
**
**
**   UNSOLICITIED RESPONSE CODE (URC) FIELD  (*/RS/P.URC*)
**
**     THE UNSOLICITED RESPONSE CODE (URC) OCCUPIED BITS 40-47 OF
**     WORD 4 AND IDENTIFIES THE CONDITION THAT CAUSED THE UNSOLICITED
**     RESPONSE TO BE STORED.  THE FIELD IS INTERPRETED AS AN 8-BIT
**     BINARY INTEGER WHOSE VALUE IS NON-ZERO ONLY IF THE VALUE OF
**     THE RESPONSE CODE IS ZERO.  THE VALUES CURRENTLY DEFINED ARE
**
**       1 - THE STATUS OF THE SPECIFIED LOGICAL UNIT CHANGED FROM
**           READY TO NOT READY.                (*URC.RN*)
**
**       2 - THE STATUS OF THE SPECIFIED LOGICAL UNIT CHANGED FROM
**           NOT READY TO READY.                (*URC.NR*)
**
**       3 - THE PP DETECTED AN ABNORMAL CONDITION DURING ITS HOUSE-
**           KEEPING CYCLE.  THE ABNORMAL STATUS FIELD AND POSSIBLY
**           THE INTERFACE ERROR CODE FIELD OF THE RESPONSE FURTHER
**           DEFINE THE ABNORMAL CONDITION.     (*URC.IE*)
**
**       THE ONLY RESPONSE FIELDS WHICH HAVE MEANING FOR UNSOLICITED
**       RESPONSES ARE
**
**         RESPONSE CODE              (RC)
**         UNSOLICITED RESPONSE CODE  (URC)
**         RESPONSE LENGTH (WORD 3 - BITS 0-15)
**         LOGICAL UNIT    (WORD 3 - BITS 16-31)
**         ABNORMAL STATUS
**         INTERFACE ERROR CODE       (IEC)
**
**
**   ABNORMAL STATUS FIELD   (*/RS/P.XXXXX*)
**
**            WHERE XXXXX = CHERR, DATERR, HDWR, OCP, OR FORC.
**
**     THE ABNORMAL STATUS FIELD OCCUPIES BITS 0-15 OF WORD 4 AND
**     FURTHER DEFINES AN ABNORMAL REQUEST TERMINATION (RC=1100 0000)
**     OR AN ABNORMAL UNSOLICITED RESPONSE CODE (URC=3).  THIS FIELD
**     IS INTERPRETED AS SIXTEEN BINARY FLAGS CORRESPONDING TO SIXTEEN
**     ABNORMAL CONDITIONS, NINE OF WHICH ARE CURRENTLY DEFINED.
**
**     THE MAP-V PP IDENTIFIES THE FOLLOWING CONDITIONS AND
**     REPORTS THEM VIA THIS FIELD.
**
**       BIT 2 - FORCED TERMINATION           (*K.FORC*)
**               THIS CONDITION IS SET WHEN THE MAP-V PPU TERMINATES
**               A UNIT REQUEST.  THE MAP-V PPU WILL TERMINATE REQUESTS
**               ONLY IF THE SUBSYSTEM HAS REQUESTED THE REQUEST BE
**               TERMINATED.
**
**       BIT 3 - CHANNEL ERROR               (*K.CHERR*)
**               THIS CONDITION IS SET IF THE MAP-V PP ENCOUNTERS AN
**               UNCORRECTABLE PARITY ERROR DURING TRANSMISSION OF
**               FUNCTIONS, PARAMETERS OR DATA BETWEEN THE PP AND
**               MAP-V CHANNEL INTERFACE.
**
**       BIT 5 - RECORDING MEDIUM ERROR      (*K.DATERR*)
**               THIS CONDITION IS SET IF THE MAP-V PP DETECTS A
**               CHECKWORD ERROR.
**
**       BIT 6 - HARDWARE MALFUNCTION ERROR  (*K.HDWR*)
**               THIS CONDITION IS SET IF THE MAP-V PP DETECTS A
**               HARDWARE MALFUNCTION IN THE MAP-V CONTROLLER
**               OR IN THE CHANNEL CONNECTION SUCH THAT IT IS
**               IMPOSSIBLE TO COMPLETE THE REQUEST.
**
**       BIT 9 - OUTPUT CHANNEL PARITY ERROR (*K.OCP*)
**               THIS CONDITION IS SET IF THE MAP-V PP DETECTS A
**               CHANNEL PARITY ERROR CONDTION IN THE MAP-V
**               HARDWARE STATUS (BIT 9 - STATUS WORD 1).
**
**
**   INTERFACE ERROR CODE (IEC) FIELD
**
**     THE IEC FIELD OCCUPIES BITS 16-31 OF WORD 4 AND IDENTIFIES
**     THE INTERFACE ERROR DETECTED BY THE PP.
**
**     INTERFACE ERROR CODES
**
**       (*) INDICATES THAT MAP-V PPU WILL DETECT THIS CONDITION
**           IF CODE IS ASSEMBLED WITH EFLAG(X) EQUATE SET TO 1.
**           X = LEFT MOST DIGIT IN ERROR CODE NUMBER.
**           THERE ARE FIVE EFLAG(X) EQUATES DEFINED, FOUR OF
**           WHICH ARE USED HERE.
**
**      TAG      XX(16)  DESCRIPTION
**
**    * ERC201 - 201  -  RESERVED FIELD OF PP INT TBL HEAD NOT 0
**    * ERC202 - 202  -  RMA OF INTERRUPT WORD NOT A WORD BOUNDARY
**    * ERC203 - 203  -  RMA OF PP COMM BUF NOT A WORD BOUNDARY
**    * ERC204 - 204  -  RESERVED FIELD OF PP COMM DESCRIPTOR NOT 0
**    * ERC205 - 205  -  RESERVED FIELD OF QUEUE DESCRIPTOR NOT 0
**    * ERC206 - 206  -  RMA OF NEXT PP NOT A WORD BOUNDARY
**    * ERC209 - 209  -  RMA OF UIT NOT A WORD BOUNDARY
**    * ERC20A - 20A  -  INVALID CHANNEL NUMBER IN UNIT DESCRIPTOR
**    * ERC20B - 20B  -  RMA OF CHANNEL TABLE NOT ON WORD BOUNDARY
**
**    * ERC301-  301  -  LOGICAL UNIT NUMBER MISMATCH
**    * ERC302 - 302  -  RMA OF UNIT COMM BUF NOT A WORD BOUNDARY
**    * ERC303 - 303  -  RESV. FIELD OF UNIT COMM BUF DESCRIPTOR NOT 0
**    * ERC304 - 304  -  RMA OF NEXT UNIT REQUEST NOT WORD BOUNDARY
**    * ERC305 - 305  -  RESERVED FIELD OF QUEUE DESCRIPTOR NOT 0
**    * ERC307 - 307  -  ILLEGAL DEVICE TYPE
**
**    * ERC401-  401  -  RMA OF NEXT REQUEST NOT A WORD BOUNDARY
**    * ERC402 - 402  -  REQUEST LENGTH NOT A MULTIPLE OF 8 BYTES
**    * ERC403 - 403  -  REQUEST LENGTH IS LESS THAN FOURTY BYTES
**    * ERC404 - 404  -  LOGICAL UNIT NO .NE. UNIT NO IN INTERFACE TBL
**    * ERC405 - 405  -  RESERVED LINKAGE FIELD IS NOT ZERO
**    * ERC406 - 406  -  INVALID RECOVERY/INTERFACE SELECTIONS
**    * ERC409 - 409  -  INVALID ALERT CONDITION
**    * ERC40A - 40A  -  REQUEST LENGTH TOO LARGE > 224 BYTES
**
**    * ERC501 - 501  -  INVALID COMMAND CODE
**    * ERC505 - 505  -  INVALID LENGTH SPECIFICATION IN COMMAND
**    * ERC507 - 507  -  INVALID LENGTH SPECIFICATION IN INDIRECT LIST
**    * ERC508 - 508  -  INVALID ADDRESS SPECIFICATION IN INDIRECT LIST
**    * ERC50A - 50A  -  INVALID SEQUENCE OF COMMANDS
**    * ERC50C - 50C  -  RESERVED FIELD IN INDIRECT LIST NOT 0
**
**
**     NORMAL REQUEST TERMINATION - RC=1000 0000(2) - (*R.NRM*)
**
**       THE REQUEST WAS ACTED UPON AND COMPLETED WITH NO PROBLEMS.
**       A 64-BIT WORD CONTAINING GENERAL HARDWARE STATUS IS
**       APPENDED TO THE NOS/VE DEFINED RESPONSE.
**
**       THE 64-BIT WORD APPENDED TO THE RESPONSE CONSISTS OF
**       MAP-V CHANNEL HARDWARE STATUS WORDS.
**
**       THE MAP-V 12-BIT CHANNEL INTERFACE PROVIDES TWO STATUS WORDS.
**       SINCE THERE IS SPACE FOR 4-PP WORDS IN ONE 64-BIT CM WORD,
**       STATUS WILL BE WRITTEN TO CENTRAL MEMORY WITH A SNAPSHOT
**       OF THE LAST TWO STATUS READS.  THE LEFT TWO PARCELS (FOUR BYTES)
**       CONTAIN OLDER OF TWO STATUS SNAPSHOTS AND RIGHT TWO
**       PARCELS CONTAIN MOST RECENT STATUS WORDS READ.  THE 12-BIT
**       STATUS WORD WILL BE RIGHT JUSTIFIED IN 16-BIT PARCEL.
**
**     0               1               3               4              6
**     0123456789012345678901234567890123456789012345678901234567890123
**    /***************************************************************/
**    /   PREVIOUS    *   PREVIOUS    *    CURRENT    *    CURRENT    /
**    / STATUS WORD 1 * STATUS WORD 2 * STATUS WORD 1 * STATUS WORD 2 /
**    /               *               *               *               /
**    /***************************************************************/
**
**       PARCEL 0 - STATUS WORD 1 - PREVIOUS STATUS READ.
**       PARCEL 1 - STATUS WORD 2 - PREVIOUS STATUS READ.
**       PARCEL 2 - STATUS WORD 1 - LATEST STATUS READ.
**       PARCEL 3 - STATUS WORD 2 - LATEST STATUS READ.
**
**       IN THE CASE WHERE AN ERROR OCCURS AND THE PP HAS
**       NEVER SUCESSFULLY READ STATUS, THESE PARCELS WILL CONTAIN
**       THE INITIALIZATION VALUE OF FFFE(16).
**
**
**     ABNORMAL REQUEST TERMINATION - RC=1100 0000(2) - (*R.ABN*)
**
**       THE REQUEST WAS ACTED UPON AND PROBLEMS OCCURRED.
**
**       IN THIS CASE, IT IS NECESSARY TO LOOK FARTHER FOR THE
**       PROBLEM DEFINITION.
**
**       A NON-ZERO VALUE IN THE INTERFACE ERROR CODE FIELD
**       IS ONE CAUSE FOR AN ABNORMAL RESPONSE.  IN THIS CASE
**       THE ERROR CODE GIVES AN INDICATION TO THE SOURCE
**       OF THE PROBLEM AND IS REPORTED AS 48-BYTE RESPONSE.
**       IF THE IEC FIELD EQUALS ZERO, A SECOND 64-BIT
**       WORD IS APPENDED TO THE RESPONSE.  IT CONSISTS OF
**
**     0               1               3               4              6
**     0123456789012345678901234567890123456789012345678901234567890123
**    /***************************************************************/
**    /    MAP-V      *     LAST      *     ERROR     *               /
**    /  ERROR CODE   * FUNCTION CODE *    ADDRESS    *    RESERVED   /
**    /     (16)      *     (16)      *      (16)     *               /
**    /***************************************************************/
**
**       PARCEL 0 - MAP-V ERROR CODE      (*MVEC*) SEE LIST BELOW.
**       PARCEL 1 - PP LAST FUNCTION CODE (*PPLF*) OTHER THAN STATUS.
**       PARCEL 2 - PP ERROR ADDRESS      (*PPEA*) LISTING REFERENCE.
**       PARCEL 3 - RESERVED.             (*PPRRC*)
**                  DURING TESTING, THIS PARCEL WILL BE USED TO
**                  REPORT THE VALUE IN *PPRRC* BEFORE BEING RESET
**                  TO ZERO ON ERROR CONDITION.  *PPRRC* CONTAINS
**                  THE REQUEST PACKET (+1), RESPONSE PACKET (-1)
**                  COUNTER.  I.E. COUNT OF OUTSTANDING RESPONSES
**                  IN THE MAP-V.
**
**       WHEN IT APPLIES, THE CORRESPONDING BIT IS ALSO SET IN THE
**       ABNORMAL STATUS FIELD.
**
**
**     UNSOLICITED RESPONSE - RC=0000 0000(2) - (*R.UNS*)
**
**       THIS RESPONSE IS USED BY MAP-V PP TO REPORT HARDWARE ERRORS NOT
**       ASSOCIATED WITH A REQUEST AND RESPONSES RECEIVED FROM THE MAP THAT
**       DO NOT HAVE A CORRESPONDING HOST REQUEST ENTRY IN MAINFRAME WIRED.
**
**
**     INTERMEDIATE RESPONSE - RC=0100 0000(2) - (*R.INT*)
**
**       THIS RESPONSE CODE IS CURRENTLY NOT PLANNED FOR USE
**       BY MAP-V PP.
**
**
** MAP-V ERROR CODES (*MVEC* PARCEL)
**
**
**   WHEN AN ERROR CONDITION OCCURS, WHILE PROCESSING A PP
**   UNIT REQUEST, SUCH THAT IT RESULTS IN THE
**   REPORTING OF A MAP-V ERROR CODE (*MVEC*), AN ABNORMAL
**   REQUEST TERMINATION CODE IS STORED IN *RC* FIELD
**   AND THERE IS NO FURTHER PROCESSING ATTEMPTED ON THAT
**   PP UNIT REQUEST.
**
**   WHEN AN ERROR CONDITION OCCURS, SUCH THAT IT IS IMPOSSIBLE
**   TO IDENTIFY THE ORIGINAL PP UNIT REQUEST, (I.E. CERTAIN
**   CASES WHILE PROCESSING A MAP-V RESPONSE) AN UNSOLICITED
**   REQUEST TERMINATION CODE IS STORED IN *RC* FIELD AND
**   THE MAP-V ERROR CODE IS STORED IN *MVEC*.
**   THERE IS NO ATTEMPTED BY THE PP TO LINK THE FAILURE WITH
**   A SPECIFIC PP UNIT REQUEST.
**
** --REQUEST/RESPONSE PACKET ERROR (RPE) CODES STORED IN *MVEC*
**
**
** TAG       XX(16) DESCRIPTION
**
** RPE01  -  01  -  REQUEST PACKET LENGTH ERROR
**
**                  THE MINIMUM LENGTH OF A REQUEST PACKET IS 6.
**                  THE VALUE FOUND IN LENGTH FIELD OF REQUEST PACKET
**                  IS LESS THAN 6.
**
** RPE02  -  02  -  REQUEST PACKET WILL NOT FIT IN PP BUFFER
**
**                  THE REQUEST IS LARGER THAN WHAT CAN BE ACCOMODATED
**                  BY THE SIZE OF PPU BUFFER.
**
**
** --ARRAY PROCESSOR ERROR (APE) CODES STORED IN *MVEC*
**
**
** TAG       XX(16) DESCRIPTION
**
** APE10  -  10  -  SEQUENCER BUSY
**
**                  SEQUENCER BUSY (STATUS BIT 0 - WORD 1)
**                  IS CHECKED AFTER EACH MAP-V SEQUENCE
**                  (I.E. AFTER WRITE FLAG SEQUENCE, WRITE REQUEST,
**                  READ RESPONSE OR TRANSFER OF DATA).  IF STATUS
**                  BIT DOES NOT CLEAR BEFORE ASSEMBLY OPTION
**                  LOOP COUNT GOES TO ZERO, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD, *K.HDWR* IS SET
**                  IN ABNORMAL STATUS AND *APE10* IS STORED IN
**                  *MVEC* FIELD.
**
**
** APE11  -  11  -  CONTROL PROCESSOR NOT RUNNING
**
**                  CONTROL PROCESSOR RUNNING (STATUS BIT 1 - WORD 1)
**                  IS CHECKED EACH TIME MAP-V HARDWARE STATUS WORD 1
**                  IS READ.  IF BIT IS NOT ON, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD AND *APE11*
**                  IS STORED IN *MVEC* FIELD.
**
**
** APE12  -  12  -  HOST CHANNEL SEQUENCE ERROR
**
**                  HOST CHANNEL SEQUENCE ERROR (STATUS BIT 2 - WORD 1)
**                  IS CHECKED AFTER WRITE FLAG FUNCTION SEQUENCE AS
**                  PART OF
**
**                    WRITE REQUEST PACKET
**                    OR READ RESPONSE PACKET.
**
**                  IF HOST CHANNEL SEQUENCE ERROR STATUS BIT IS ON,
**                  WHILE PROCESSING A PP UNIT REQUEST, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD AND *APE12* IS
**                  STORED IN *MVEC* FIELD.
**
**
** APE13  -  13  -  CONTROL PROCESSOR SEQUENCE ERROR
**
**                  CONTROL PROCESSOR SEQUENCE ERROR (STATUS BIT 3 - WORD 1)
**                  IS CHECKED AFTER WRITE FLAG FUNCTION SEQUENCE AS
**                  PART OF
**
**                    WRITE REQUEST PACKET
**                     OR READ RESPONSE PACKET.
**
**                  IF CONTROL PROCESSOR SEQUENCE ERROR STATUS BIT IS ON,
**                  WHILE PROCESSING A PP UNIT REQUEST, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD AND *APE13* IS
**                  STORED IN *MVEC* FIELD.
**
**
** APE14  -  14  -  COMMAND REJECTED
**
**                  COMMAND REJECTED (STATUS BIT 4 - WORD 1) IS
**                  CHECKED AFTER WRITE FLAG FUNCTION SEQUENCE AS
**                  PART OF
**
**                    WRITE REQUEST PACKET
**                    OR READ RESPONSE PACKET.
**
**                  IF COMMAND REJECTED STATUS BIT IS FOUND ON,
**                  WHILE PROCESSING A PP UNIT REQUEST, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD AND *APE14* IS
**                  STORED IN *MVEC* FIELD.
**
**
** APE16  -  16  -  WRITE FLAG STATUS BIT NOT ON
**
**
**
**
**
** APE17  -  17  -  MAIN MEMORY PARITY ERROR
**
**                  MAIN MEMORY PARITY ERROR (STATUS BIT 7 - WORD 1)
**                  INDICATES THAT THE MAP-V HARDWARE HAS DETECTED
**                  A PARITY ERROR IN MAIN MEMORY.
**                  IT IS CHECKED EACH TIME, VIA STATUS WORD 1, THAT
**                  DATA IS WRITTEN INTO OR READ FROM MAIN MEMORY.
**
**                  IF MAIN MEMORY PARITY ERROR STATUS REMAINS ON
**                  AFTER THREE RETRYS,
**                  WHILE PROCESSING A PP UNIT REQUEST, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD AND *APE17* IS
**                  STORED IN *MVEC* FIELD.
**
**
** APE18  -  18  -  PUBLIC MEMORY PARITY ERROR
**
**                  PUBLIC MEMORY PARITY ERROR (STATUS BIT 8 - WORD 1)
**                  INDICATES THAT THE MAP-V HARDWARE HAS DETECTED
**                  A PARITY ERROR IN PUBLIC MEMORY.
**                  IT IS CHECKED EACH TIME, VIA STATUS WORD 1, THAT
**                  DATA IS WRITTEN INTO OR READ FROM PUBLIC MEMORY.
**
**                  IF PUBLIC MEMORY PARITY ERROR STATUS REMAINS ON
**                  AFTER THREE RETRYS,
**                  WHILE PROCESSING A PP UNIT REQUEST, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD AND *APE18* IS
**                  STORED IN *MVEC* FIELD.
**
**
** APE19  -  19  -  CHANNEL PARITY ERROR
**
**                  CHANNEL PARITY ERROR (STATUS BIT 9 - WORD 1)
**                  INDICATES THAT THE MAP-V INTERFACE
**                  HARDWARE IS NOT IN AGREEMENT WITH THE PARITY
**                  GENERATED BY CYBER CHANNEL HARDWARE ON DATA RECEIVED.
**                  IT IS CHECKED EVERY TIME STATUS WORD 1 IS READ.
**                  IF FOUND ON AFTER THREE RETRIES, *K.OPC* IS SET
**                  SET IN ABNORMAL STATUS PARCEL.
**
**                  A CHANNEL PARITY ERROR MAY ALSO OCCUR ON DATA
**                  RECEIVED AT THE PPU.  FOR THIS CASE,
**                  CHANNEL PARITY (VIA PPU INSTRUCTION) IS CHECKED
**                  EVERY TIME STATUS IS READ AND DATA IS TRANSFERED.
**                  IF ERROR OCCURS IN THIS CASE, ERROR CODE
**                  *EDPC* (PARITY ERROR ON CHANNEL) IS REPORTED
**                  AFTER THREE RETRIES AND *K.CHERR* IS SET IN
**                  ABNORMAL STATUS PARCEL.
**
**
** APE1A  -  1A  -  *APM*  EXPONENT OUT OF RANGE ERROR
**
**
**
**
**
**
** APE22  -  22  -  *APM* INVALID PRECEDING FUNCTION
**
**                  INVALID PRECEDING FUNCTION (STATUS BIT 2 -
**                  WORD 2) IS CHECKED AFTER EVERY WRITE FLAG
**                  FUNCTION.
**
**                  IF INVALID PRECEDING FUNCTION BIT IS FOUND ON,
**                  WHILE PROCESSING A PP UNIT REQUEST, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD AND *APE22* IS
**                  STORED IN *MVEC* FIELD.
**
**
** APE23  -  23  -  *APM* NO PERMISSION TO PROCEED
**
**                  PERMISSION TO PROCEED (STATUS BIT 3 - WORD 2) IS
**                  CHECKED AFTER WRITE FLAG FUNCTION SEQUENCE AS
**                  PART OF
**
**                    WRITE REQUEST PACKET
**                    OR READ RESPONSE PACKET.
**
**                  IF PERMISSION TO PROCEED STATUS BIT IS NOT FOUND
**                  ON WHILE PROCESSING A PP UNIT REQUEST, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD AND *APE23* IS
**                  STORED IN *MVEC* FIELD.
**
**
** APE26  -  26  -  ERROR IN LAST REQUEST PACKET
**
**                  ERROR IN LAST REQUEST PACKET (STATUS BIT 6 - WORD 2)
**                  IS CHECKED AFTER WRITING REQUEST PACKET TO MAP-V.
**
**                  IF ERROR IN LAST REQUEST PACKET BIT IS FOUND ON,
**                  WHILE PROCESSING A PP UNIT REQUEST, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD AND *APE26* IS
**                  STORED IN *MVEC* FIELD.
**
**
** --MAP-V ERROR CODES (*MVEC PARCEL) - AS A RESULT OF CHANNEL RELATED
**                                    PROBLEMS/ERRORS
**
**
** TAG       XX(16) DESCRIPTION
**
** EDNR   -  30  -  NO RESPONSE TO FUNCTION CODE
**
**                  THIS ERROR CODE INDICATES THAT PP TIMED OUT
**                  WAITING FOR A RESPONSE TO A FUNCTION FROM THE
**                  MAP-V CHANNEL INTERFACE HARDWARE.  IF ERROR OCCURS
**                  WHILE PROCESSING A PP UNIT REQUEST, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD, *K.HDWR* IS SET
**                  IN ABNORMAL STATUS AND *EDNR* IS STORED IN
**                  *MVEC* FIELD.
**
**
** EDPC   -  31  -  PARITY-ERROR-ON CHANNEL
**
**                  THIS ERROR CODE INDICATES THAT A PP INSTRUCTION
**                  (EITHER CFM/SFM - JUMP IF PARITY ERROR CLEAR/SET)
**                  DETECTED A CHANNEL PARITY ERROR.  THIS ERROR
**                  INDICATES THAT THE CYBER CHANNEL HARDWARE
**                  IS NOT IN AGREEMENT WITH THE PARITY GENERATED
**                  BY MAP-V HARDWARE INTERFACE ON DATA RECEIVED.
**                  IF ERROR PERSISTS AFTER THREE RETRYS,
**                  WHILE PROCESSING A PP UNIT REQUEST, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD, *K.CHERR* IS SET
**                  IN ABNORMAL STATUS AND *EDPC* IS STORED IN
**                  *MVEC* FIELD.
**
**                  A CHANNEL PARITY ERROR MAY ALSO OCCUR ON DATA
**                  RECEIVED AT THE MAP-V INTERFACE.  FOR THIS CASE,
**                  CHANNEL PARITY STATUS BIT (BIT 9) IS CHECKED
**                  EVERY TIME STATUS IS READ AND DATA IS TRANSFERED.
**                  IF ERROR PERSISTS AFTER THREE RETRYS,
**                  WHILE PROCESSING A PP UNIT REQUEST, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD, *K.OCP* IS SET
**                  IN ABNORMAL STATUS AND *APE19* IS STORED IN
**                  *MVEC* FIELD.
**
**
** EDMT   -  32  -  CHANNEL FAILED TO GO EMPTY
**
**                  THIS ERROR CODE INDICATES THAT PP TIMED OUT
**                  WAITING FOR THE CHANNEL TO GO EMPTY ON OUTPUT TO
**                  MAP-V CHANNEL INTERFACE HARDWARE.  IF ERROR OCCURS
**                  WHILE PROCESSING A PP UNIT REQUEST, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD, *K.HDWR* IS SET
**                  IN ABNORMAL STATUS AND *EDMT* IS STORED IN
**                  *MVEC* FIELD.
**
**
** EDIT   -  33  -  INPUT DEADMAN TIMEOUT
**
**                  THIS ERROR CODE INDICATES THAT PP DETECTED AN
**                  INPUT DEADMAN TERMINATE CONDITION ON THE CHANNEL
**                  FROM MAP-V CHANNEL INTERFACE HARDWARE.  IF ERROR
**                  OCCURS WHILE PROCESSING A PP UNIT REQUEST, AN AB-
**                  NORMAL RESPONSE IS STORED IN *RC* FIELD, *K.HDWR*
**                  IS SET IN ABNORMAL STATUS AND *EDIT* IS STORED IN
**                  *MVEC* FIELD.
**
** EDOT   -  34  -  OUTPUT DEADMAN TIMEOUT
**
**                  THIS ERROR CODE INDICATES THAT PP DETECTED AN
**                  OUTPUT DEADMAN TERMINATE CONDITION ON THE CHANNEL
**                  FROM MAP-V CHANNEL INTERFACE HARDWARE.  IF ERROR
**                  OCCURS WHILE PROCESSING A PP UNIT REQUEST, AN AB-
**                  NORMAL RESPONSE IS STORED IN *RC* FIELD, *K.HDWR*
**                  IS SET IN ABNORMAL STATUS AND *EDOT* IS STORED IN
**                  *MVEC* FIELD.
**
**
** EDFL   -  35  -  CHANNEL FULL BEFORE OUTPUT
**
**                  THIS ERROR CODE INDICATES THAT PP DETECTED AN
**                  CHANNEL FULL CONDITION WHILE PREPARING TO OUTPUT TO
**                  MAP-V CHANNEL INTERFACE HARDWARE.  IF ERROR OCCURS
**                  WHILE PROCESSING A PP UNIT REQUEST, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD, *K.HDWR* IS SET
**                  IN ABNORMAL STATUS AND *EDFL* IS STORED IN
**                  *MVEC* FIELD.
**
**
** EDAC   -  36  -  CHANNEL ACTIVE BEFORE FUNCTION
**
**                  THIS ERROR CODE INDICATES THAT PP DETECTED A
**                  CHANNEL ACTIVE CONDITION WHILE PREPARING TO SEND
**                  FUNCTION TO MAP-V CHANNEL INTERFACE HARDWARE.
**                  IF ERROR OCCURS WHILE
**                  PROCESSING A PP UNIT REQUEST, AN ABNORMAL
**                  RESPONSE IS STORED IN *RC* FIELD, *K.HDWR* IS SET
**                  IN ABNORMAL STATUS AND *EDAC* IS STORED IN
**                  *MVEC* FIELD.
**
**
** EDNE   -  37  -  CHANNEL EMPTY BEFORE INPUT
**
**                  THIS ERROR CODE INDICATES THAT PP DETECTED A
**                  CHANNEL EMPTY CONDITION WHILE PREPARING TO INPUT
**                  FROM MAP-V CHANNEL INTERFACE HARDWARE.  IF ERROR
**                  OCCURS WHILE PROCESSING A PP UNIT REQUEST, AN AB-
**                  NORMAL RESPONSE IS STORED IN *RC* FIELD, *K.HDWR*
**                  IA SET IN ABNORMAL STATUS AND *EDNE* IS STORED IN
**                  *MVEC* FIELD.
**
**
** EDEI   -  38  -  CHANNEL EMPTY DURING INPUT
**
**                  THIS ERROR INDICATES THAT AN EMPTY CHANNEL CONDITION
**                  WAS DETECTED WHILE INPUTTING DATA.  THE CONTENTS OF
**                  THE A REGISTER WAS NOT ZERO WHEN THE EMPTY CHANNEL
**                  EMPTY CONDITION WAS DETECTED.
**
**
** EDAI   -  39  -  ABNORMAL EXIT FROM AN INPUT INSTRUCTION
**
**                  THIS ERROR INDICATES THAT AN ABNORMAL EXIT FROM AN INPUT
**                  INSTRUCTION WAS DETECTED.  THE CONTENTS OF THE A REGISTER
**                  WERE <> 0, THE CHANNEL WAS FULL AND ACTIVE AT THE TIME OF
**                  ABNORMAL EXIT FROM THE INPUT INSTRUCTION.
**
**
**
*         LIST   *           RESUME LIST
*         LIST   -$          TURN MACRO DEFINITIONS LIST ON/OFF
          TITLE  VM5B - MACRO DEFINITIONS
*copyc iodmac1    "record definition macros"
*copyc iodmac2    "load/store macros"
*copyc iodmac3    "general macros"
*copyc iodmac4    "general macros"
          LIST   *
          TITLE  VM5B - TABLE DEFINITIONS
*
* PP TABLE.
*
 PT       RECORD PACKED

 PPNO     PPWORD             PP NUMBER
 PART     PPWORD             PARTNER PP NUMBER
 PIT      RMA                PP INTERFACE TABLE ADDRESS (RMA)
 PITPVA   STRUCT 24          PP INTERFACE TABLE ADDRESS (PVA)

 PT       RECEND
          SPACE  6
* PP INTERFACE TABLE
*
*
 PIT      RECORD PACKED

 PPNO     PPWORD             PP NUMBER
 FLU      PPWORD             FIRST LOGICAL UNIT
 UNITC    PPWORD             NUMBER OF UNITS
          ALIGN  0,64
 INT      RMA                INTERRUPT WORD (RMA)
 CHAN     RMA                CHANNEL TABLE (RMA)
          ALIGN  16,64
 CBUFL    PPWORD             COMMUNICATION BUFFER LENGTH
 CBUF     RMA                COMMUNICATION BUFFER (RMA)
 LOCK     BOOLEAN            PP REQUEST QUEUE LOCK
          ALIGN  48,64
 LOCKPP   PPWORD             PP REQUEST QUEUE LOCK OWNER
          ALIGN  16,64
 PPQPVA   STRUCT 6           NEXT QUEUED PP REQUEST (PVA)
          ALIGN  32,64
 PPQ      RMA                NEXT QUEUED PP REQUEST (RMA)
          ALIGN  16,64
 RSPVA    STRUCT 14          RESPONSE BUFFER (PVA)
          ALIGN  32,64
 RSBUF    RMA                RESPONSE BUFFER (RMA)
          ALIGN  48,64
 IN       PPWORD             IN POINTER
          ALIGN  48,64
 OUT      PPWORD             OUT POINTER
          ALIGN  48,64
 LIMIT    PPWORD             LIMIT POINTER

 PIT      RECEND
          SPACE  6
*
* UNIT DESCRIPTORS.
*
 UD       RECORD PACKED

 LU       PPWORD             LOGICAL UNIT
 UQTPVA   STRUCT 6           UNIT INTERFACE TABLE (PVA)
 CHAN     SUBRANGE 0,377B    CHANNEL NUMBER
 CNTRLR   SUBRANGE 0,377B    CONTROLLER NUMBER
 UNIT     PPWORD             PHYSICAL UNIT NUMBER
 UQT      RMA                UNIT INTERFACE TABLE (RMA)

 UD       RECEND
          SPACE  6
*
* UNIT INTERFACE TABLE
*
 UIT      RECORD PACKED

 LU       PPWORD             LOGICAL UNIT
 DSABLE   BOOLEAN            UNIT IS ENABLED/DISABLED. (SET = DISABLED)
          ALIGN  32,64
 UTYPE    PPWORD             UNIT TYPE
                               = 400B, 844-4X
                               = 401B, 885-1X
                               = 402B, 885-42
 QCNT     PPWORD             QUEUE COUNT
*
          ALIGN  16,64
 UBUFL    PPWORD             UNIT COMMUNICATION BUFFER LENGTH
 UBUF     RMA                UNIT COMMUNICATION BUFFER (RMA)
 ULOCK    BOOLEAN            UNIT IS RESERVED FOR EXCLUSIVE USE
          ALIGN  48,64
 ULOCKP   PPWORD             UNIT LOCK OWNER
 QLOCK    BOOLEAN            UNIT QUEUE LOCK
          ALIGN  48,64
 QLOCKP   PPWORD             UNIT QUEUE LOCK OWNER
          ALIGN  16,64
 NEXTPV   STRUCT 6           NEXT REQUEST ON UNIT QUEUE (PVA)
          ALIGN  32,64
 NEXT     RMA                NEXT REQUEST ON UNIT QUEUE (RMA)

 UIT      RECEND
          SPACE  6
*
*UNIT COMMUNICATION AREA
*
 UCA      RECORD PACKED
 IN       PPWORD
 LIMIT    PPWORD
          ALIGN  0,64        RESERVED
 BID      STRUCT 32          SIXTEEN BLOCK ID ENTRIES

 UCA      RECEND
          SPACE  6
*
* PP REQUESTS.
*
 RQ       RECORD PACKED

          ALIGN  16,64
 NEXTPV   STRUCT 6           NEXT REQUEST ON UNIT QUEUE (PVA)
          ALIGN  32,64
 NEXT     RMA                NEXT REQUEST ON UNIT QUEUE (RMA)
 LEN      PPWORD             REQUEST LENGTH
 LU       PPWORD             LOGICAL UNIT
 RECOV    SUBRANGE 0,3       ERROR RECOVERY OPTIONS
                               0 - ATTEMPT RECOVERY
                               1 - SUPPRESS RECOVERY, TERMINATE WITH
                                    ABNORMAL STATUS.
                               2 - RESERVED FOR FUTURE USE.
                               3 - SUPPRESS RECOVERY, CONTINUE THE REQUEST
                                    IGNORING ERROR CONDITIONS.
 INT      BOOLEAN            INTERRUPT CPU (IF SET)
 PORT     SUBRANGE 0,37B     MEMORY PORT USED FOR INTERRUPTS
          ALIGN  40,64
 PRIOR    SUBRANGE 0,377B    PRIORITY
          ALIGN  48,64
 LONGB    BOOLEAN            LONG INPUT BLOCK
          ALIGN  0,64
 CMDIND   SUBRANGE 0,377B    CURRENT COMMAND INDEX.
 MAPIND   SUBRANGE 0,377B    COMMAND INDEX OF CURRENT MAP REQUEST.
          ALIGN  0,64
 CMND     INTEGER            COMMAND SEQUENCE

          MGEN   N.CMDIND
 M.CMDIND EQU    MASK$

          MGEN   N.MAPIND
 M.MAPIND EQU    MASK$

 RQ       RECEND
          SPACE  6
*
* PP COMMAND.
*
 CM       RECORD PACKED

 CODE     SUBRANGE 0,377B    COMMAND CODE
 STOR     BOOLEAN            STORE RESPONSE (IF SET)
 INDIR    BOOLEAN            INDIRECT ADDRESS (IF SET)
          ALIGN  12,64
 CMILS    BOOLEAN            LAST SEGMENT OF PACKED CMI REQUEST
 CKRSP    BOOLEAN            CHECK RESPONSE PACKET ISTAT WORD
          ALIGN  16,64
 LEN      PPWORD             LENGTH OF CM AREA (EITHER DATA AREA OR
                             LENGTH/ADDRESS WORD PAIR LIST)
 RMA      RMA                ADDRESS OF CM AREA
          MASKP  STOR
 K.STOR   EQU    MSK
          MASKP  INDIR
 K.INDIR  EQU    MSK
          MASKP  CMILS
 K.CMILS  EQU    MSK
          MASKP  CKRSP
 K.CKRSP  EQU    MSK
          MGEN   N.CODE
 M.CODE   EQU    MASK$

 CM       RECEND
          SPACE  6
*
* PP RESPONSE.
*
 RS       RECORD PACKED

          ALIGN  16,64
 PVA      STRUCT 6           PVA OF REQUEST
          ALIGN  32,64
 REQ      RMA                RMA OF REQUEST
 RESPL    PPWORD             RESPONSE LENGTH  (8-BIT BYTES)
 LU       PPWORD             LOGICAL UNIT
 RECOV    SUBRANGE 0,3       ERROR RECOVERY OPTIONS (FROM REQUEST)
 INT      BOOLEAN            INTERRUPT CPU (IF SET)
 PORT     SUBRANGE 0,37B     MEMORY PORT USED FOR INTERRUPTS
          ALIGN  40,64
 PRIOR    SUBRANGE 0,377B    PRIORITY
          ALIGN  48,64
          ALIGN  48,64       ALERT MASK
 LONGB    BOOLEAN            LONG INPUT BLOCK
          ALIGN  0,64
 ABALRT   BOOLEAN            ABNORMAL ALERT CONDITION DETECTED
 INTERR   BOOLEAN            LOGICAL INTERFACE ERROR (INCLUDE INTERFACE
                             ERROR CODE)
 FORC     BOOLEAN            FORCED TERMINATION AS A RESULT OF STOP UNIT COMMAND
 CHERR    BOOLEAN            CHANNEL PARITY ERROR ON INPUT
 DATOV    BOOLEAN            DATA OVERRUN. A LOST DATA CONDITION
                             OCCURRED ON INPUT OR INADEQUATE DATA RATE ON OUTPUT
 DATERR   BOOLEAN            UNCORRECTABLE PARITY OR CHECKWORD ERROR
                             ON AN ADDRESS OR DATA FIELD.
 HDWR     BOOLEAN            UNCORRECTABLE HARDWARE MALFUNCTION IN A
                             CONTROLLER OR UNIT
 NRDY     BOOLEAN            INTERVENTION REQUIRED BY OPERATOR ON A
                             HARDWARE MALFUNCTION.  EX: UNIT NOT READY,
                             UNIT NOT CONNECTED.
 FTO      BOOLEAN            FUNCTION TIMEOUT
 OCP      BOOLEAN            CHANNEL PARITY ERROR ON OUTPUT
          ALIGN  16,64
 IEC      PPWORD             INTERFACE ERROR CODE
 RC       SUBRANGE 0,3       RESPONSE CODE
                               0 - UNSOLICITED RESPONSE
                               1 _ INTERMEDIATE RESPONSE
                               2 - NORMAL REQUEST TERMINATION
                               3 - ABNORMAL REQUEST TERMINATION
 RCON     SUBRANGE 0,3       ADDITIONAL RESPONSE CONDITIONS
                             (= 0 FOR UNSOLICITED RESPONSE)
                               0 - NO ADDITIONAL CONDITION
                               1 - RECOVERED ERROR
                               2 - COMMAND HAD EXPLICIT RESPONSE FLAG SET
                               3 - BOTH CONDITIONS 1 AND 2
          ALIGN  40,64
 URC      SUBRANGE 0,377B    UNSOLICITED RESPONSE CODE
                               1 - UNIT CHANGED FROM READY TO NOT READY
                               2 - UNIT CHANGED FROM NOT READY TO READY
                               3 - ABNORMAL CONDITION DURING HOUSEKEEPING CYCLE,
                                   (CHECK ABNORMAL STATUS OR INTERFACE ERROR CODE)
          ALIGN  48,64       ALERT CONDITIONS
 LNGBLK   BOOLEAN            LONG INPUT BLOCK
 COMPRC   BOOLEAN            COMPARE NOT SATISFIED ON COMPARE/SWAP COMMAND
 PDLIM    BOOLEAN            PHYSICAL DELIMITER ENCOUNTERED (EOT OR BOT)
 LDLIM    BOOLEAN            LOGICAL DELIMITER ENCOUNTERED (TAPE MARK)
 CHARF    BOOLEAN            CHARACTER FILL PERFORMED
          ALIGN  0,64
 XFER     STRUCT 4           TRANSFER COUNT
 LASTC    RMA                LAST COMMAND (RMA)
 MPREST   INTEGER            TIME RESPONSE RETURNED FROM MAP
 PPREST   INTEGER            TIME RESPONSE SENT TO MTR
 GSP1     PPWORD             GENERAL STATUS PREVIOUS-WORD 1 SNAPSHOT
 GSP2     PPWORD             GENERAL STATUS PREVIOUS-WORD 2 SNAPSHOT
 GSC1     PPWORD             GENERAL STATUS CURRENT-WORD 1 SNAPSHOT
 GSC2     PPWORD             GENERAL STATUS CURRENT-WORD 2 SNAPSHOT
 MVEC     PPWORD             MAP-V ERROR CODE
 PPLF     PPWORD             PP LAST FUNCTION CODE
 PPEA     PPWORD             PP ERROR ADDRESS
 PPRRC    PPWORD             REQUEST (+1) = RESPONSE (-1) COUNTER
          STRUCT 2           FILL FOR FULL CM WORDS


          MASKP  INT
 K.INT    EQU    MSK
          MGEN   N.PORT
 M.PORT   EQU    MASK$

          MASKP  ABALRT
 K.ABALRT EQU    MSK
          MASKP  INTERR
 K.INTERR EQU    MSK
          MASKP  FORC
 K.FORC   EQU    MSK
          MASKP  CHERR
 K.CHERR  EQU    MSK
          MASKP  DATOV
 K.DATOV  EQU    MSK
          MASKP  DATERR
 K.DATERR EQU    MSK
          MASKP  HDWR
 K.HDWR   EQU    MSK
          MASKP  NRDY
 K.NRDY   EQU    MSK
          MASKP  FTO
 K.FTO    EQU    MSK
          MASKP  OCP
 K.OCP    EQU    MSK
          MASKP  LNGBLK
 K.LNGBLK EQU    MSK
          MASKP  PDLIM
 K.PDLIM  EQU    MSK
          MASKP  LDLIM
 K.LDLIM  EQU    MSK
          MASKP  CHARF
 K.CHARF  EQU    MSK

 RS       RECEND
          SPACE  6
** MAPWORD MACRO
** THIS MACRO DEFINES THE NAMED FIELD AS A 4 BYTE (32 BITS) FIELD

          MACRO  MAPWORD,NAME
 NAME     STRUCT 4
          ENDM
          SPACE  6
*
* MAP REQUEST BLOCK - PACKED
*
 RQBP     RECORD PACKED
 PTIM     INTEGER              PP TIME STAMP
 MTIM     INTEGER              MAP TIME STAMP
 JID      MAPWORD              JOB IDENTIFIER
 RSN      MAPWORD              REQUEST SERIAL NUMBER
 RES      MAPWORD              RESERVED FOR STAR TECHNOLOGIES
 FC       MAPWORD              FUNCTION CODE
 LNG      MAPWORD              LENGTH OF THE REQUEST (32 BIT WORD)
 RPKT     MAPWORD              FIRST MAPWORD OF MAP REQUEST PACKET
 RQBP     RECEND
          SPACE  6
*
* MAP REQUEST BLOCK - UNPACKED
*
 RQBUP    RECORD
 PTIM     INTEGER              PP TIME STAMP
 MTIM     INTEGER              MAP TIME STAMP
          ALIGN  32,64
 JID      MAPWORD              JOB IDENTIFIER
          ALIGN  32,64
 RSN      MAPWORD              REQUEST SERIAL NUMBER
          ALIGN  32,64
 RES      MAPWORD              RESERVED FOR STAR TECHNOLOGIES
          ALIGN  32,64
 FC       MAPWORD              FUNCTION CODE
          ALIGN  32,64
 LNG      MAPWORD              LENGTH OF THE REQUEST (32 BIT WORD)
 RQBUP    RECEND
          SPACE  6
*
* STLOD REQUEST PACKET - PACKED
*
 STLODP   RECORD PACKED
 PROCID   MAPWORD            PROCESS IDENTIFICATION
 OFFSET   MAPWORD
 SEGLNG   MAPWORD            LENGTH OF THE HOST PROCESS (32 BIT WORD)
 CKSUM    MAPWORD            CHECKSUM
 STLODP   RECEND
          SPACE  6
*
* STLOD REQUEST PACKET - UNPACKED
*
 STLOD    RECORD
 PROCID   MAPWORD            PROCESS IDENTIFICATION
 OFFSET   MAPWORD
 SEGLNG   MAPWORD            LENGTH OF THE HOST PROCESS (32 BIT WORD)
 CKSUM    MAPWORD            CHECKSUM
 STLOD    RECEND
          SPACE  6
*
* STREAD AND STWRITE REQUEST PACKET - PACKED
*
 STRWP    RECORD PACKED
 ARAYID   MAPWORD            ARRAY IDENTIFICATION
 HADDR    MAPWORD            HOST ADDRESS
 HDATAL   MAPWORD            HOST WORD COUNT (32 BIT WORD)
 CKSUM    MAPWORD            CHECKSUM
 STRWP    RECEND
          SPACE  6
*
* STREAD AND STWRITE REQUEST PACKET - UNPACKED
*
 STRW     RECORD
 ARAYID   MAPWORD            ARRAY IDENTIFICATION
 HADDR    MAPWORD            HOST ADDRESS
 HDATAL   MAPWORD            HOST WORD COUNT (32 BIT WORD)
 CKSUM    MAPWORD            CHECKSUM
 STRW     RECEND
          SPACE  6
*
* MAP RESPONSE PACKET - PACKED
*
 MRSBP    RECORD  PACKED
 JID      MAPWORD            JOB IDENTIFIER
 RSN      MAPWORD            REQUEST SERIAL NUMBER
 IST      MAPWORD            I-STATUS
 JST      MAPWORD            J-STATUS
 KST      MAPWORD            K-STATUS
 CKSUM    MAPWORD            CHECKSUM
 MRSBP    RECEND
          SPACE  6
*
* MAP STATUS WORDS
*
          SPACE  4,40
*         STATUS WORD ONE (HARDWARE STATUS)

*         BIT 11  NOT USED
*             10  EXPONENT OUT OF RANGE ERROR
*              9  CHANNEL PARITY ERROR
*              8  PUBLIC MEMORY PARITY ERROR
*              7  MAIN MEMORY PARITY ERROR
*              6  WRITE FLAG ADDRESS PRIMED - (READY FOR TWO 60 BIT
*                                              CONTROL WORDS)
*              5  TRANSFER PRIMED - (READY FOR DATA TRANSFER)
*              4  COMMAND REJECTED
*              3  CONTROL PROCESSOR SEQUENCE ERROR
*              2  HOST CHANNEL SEQUENCE ERROR
*              1  CONTROL PROCESSOR RUNNING
*              0  BUSY
          SPACE  6
 MPHSTS   RECORD PACKED
          ALIGN  5,16
 EXPOR    BOOLEAN
 CHPER    BOOLEAN
 PMPE     BOOLEAN
 MMPE     BOOLEAN
 WFPRI    BOOLEAN
 TDATA    BOOLEAN
 CMNRJ    BOOLEAN
 CPSQE    BOOLEAN
 HCSQE    BOOLEAN
 CPRUN    BOOLEAN
 HBSY     BOOLEAN
          MASKP  EXPOR
 K.EXPOR  EQU    MSK
          MASKP  CHPER
 K.CHPER  EQU    MSK
          MASKP  PMPE
 K.PMPE   EQU    MSK
          MASKP  MMPE
 K.MMPE   EQU    MSK
          MASKP  WFPRI
 K.WFPRI  EQU    MSK
          MASKP  TDATA
 K.TDATA  EQU    MSK
          MASKP  CMNRJ
 K.CMNRJ  EQU    MSK
          MASKP  CPSQE
 K.CPSQE  EQU    MSK
          MASKP  HCSQE
 K.HCSQE  EQU    MSK
          MASKP  CPRUN
 K.CPRUN  EQU    MSK
          MASKP  HBSY
 K.HBSY   EQU    MSK
 MPHSTS   RECEND
          SPACE  4,36
*         STATUS WORD 2 (SOFTWARE STATUS).

*         BIT 11  RESERVED
*             10  RESERVED
*              9  RESERVED
*              8  RESERVED
*              7  RESERVED
*              6  (E) ERROR IN LAST REQUEST PACKET
*              5  (S) SPECIFIC JID RESPONSE PACKET AVAILABLE
*              4  (R) RESPONSE PACKET(S) AVAILABLE (ANY ID)
*              3  (P) PERMISSION TO PROCEED WITH REQUEST PKT XMISSION
*              2  (I) INVALID PRECEDING MAP-V FUNCTION
*              1  (O) ON-LINE
*              0  (B) BUSY - APM LOGICALLY BUSY
          SPACE  6
 MPSSTS   RECORD PACKED
          ALIGN  9,16
 LRPE     BOOLEAN
 SRESA    BOOLEAN
 RESA     BOOLEAN
 TRQP     BOOLEAN
 LFUNI    BOOLEAN
 ONL      BOOLEAN
 SBSY     BOOLEAN
          MASKP  LRPE
 K.LRPE   EQU    MSK
          MASKP  SRESA
 K.SRESA  EQU    MSK
          MASKP  RESA
 K.RESA   EQU    MSK
          MASKP  TRQP
 K.TRQP   EQU    MSK
          MASKP  LFUNI
 K.LFUNI  EQU    MSK
          MASKP  ONL
 K.ONL    EQU    MSK
          MASKP  SBSY
 K.SBSY   EQU    MSK
 MPSSTS   RECEND
          TITLE  VM5B - EQUATES
*
* COMMAND CODES.
*
 C.ACK    EQU    0           ACKNOWLEDGE
 C.STOP   EQU    1           STOP UNIT
 C.SELU   EQU    2           SELECT UNIT
 C.SELC   EQU    3           SELECT CONTROLLER
 C.IDLE   EQU    4           IDLE
 C.RESUME EQU    5           RESUME
 C.OLAY   EQU    6           EXECUTE OVERLAY
 C.READY  EQU    7           START READY SCAN
 C.SREADY EQU    10B         STOP READY SCAN
 C.PPAD   EQU    11B         SELECT PP MEMORY ADDRESS
 C.PPMEM  EQU    12B         COPY PP MEMORY
 C.ENABU  EQU    20B         ENABLE UNIT
 C.DISABU EQU    21B         DISABLE UNIT
 C.MCCTR  EQU    27B         MASTER CLEAR CONTROLLER
 C.FUNC   EQU    40B         OUTPUT FUNCTION
 C.OUTP   EQU    41B         OUTPUT 8-BIT PARAMETERS
 C.OUTD   EQU    43B         OUTPUT 8-BIT DATA
 C.IND    EQU    45B         INPUT 8-BIT DATA/PARAMETERS
 C.READ   EQU    100B        READ BYTES
 C.WRITE  EQU    120B        WRITE BYTES
 C.STATUS EQU    140B        READ STATUS
 C.COUNT  EQU    141B        STORE TRANSFER COUNT
 C.SWAP   EQU    160B        COMPARE AND SWAP
 C.WRITEI EQU    162B        WRITE INITIALIZE
 C.RFLAW  EQU    163B        READ FLAW MAPS
 C.WRITEV EQU    200B        WRITE VERIFY
          SPACE  6
*
*         RESPONSE CODES.
*
 R.UNS    EQU    0           UNSOLICITED RESPONSE
 R.INT    EQU    40000B      INTERMEDIATE RESPONSE
 R.NRM    EQU    100000B     NORMAL REQUEST TERMINATION
 R.ABN    EQU    140000B     ABNORMAL REQUEST TERMINATION
 R.RCV    EQU    10000B      RECOVERED ERROR CAUSED RESPONSE
 R.FLG    EQU    20000B      FLAG FIELD CAUSED RESPONSE
*
*         UNSOLICITED RESPONSE CODES
*
 URC.RN   EQU    1           CHANGE FROM READY TO NOT READY
 URC.NR   EQU    2           CHANGE FROM NOT READY TO READY
 URC.IE   EQU    3           INTERNAL OR INTERFACE ERROR
 URC.NRQ  EQU    4           NO REQUEST FOR A RESPONSE
          SPACE  6
 DSC      EQU    0           DST-DSP COMMUNICATIONS CHANNEL

 TIMERR   EQU    400B        TIMEOUT INTERFACE ERROR CODE BASE
 PITERR   EQU    1000B       PIT INTERFACE ERROR CODE BASE
 UITERR   EQU    1400B       UIT INTERFACE ERROR CODE BASE
 RQHERR   EQU    2000B       REQUEST HEADER INTERFACE ERROR CODE BASE
 CMDERR   EQU    2400B       COMMAND SEQUENCE INTERFACE ERROR CODE BASE

 PITLEN   EQU    C.PIT+C.UD*3  LENGTH OF PP INTERFACE TABLE IN CM WORDS

 DISABLE  EQU    100000B     DISABLE UNIT BIT IN UIT

 MAXIND   EQU    2           MAX INDIRECT LIST LENGTH
 MAXFCL   EQU    16          MAX FUNCTION CODE LENGTH = 16 BITS
 HEADLN   EQU    32          REQUEST HEADER LENGTH = 32 BYTES
 HDRWDS   EQU    HEADLN/8    REQUEST HEADER LENGTH IN CM WORDS
 MAXREQ   EQU    14          MAX REQUEST LENGTH IN CM WORDS
 MAXCMD   EQU    MAXREQ-HDRWDS   MAX NO. COMMANDS IN REQUEST BUFFER
 MAXREQB  EQU    MAXREQ*8    MAX REQUEST LENGTH IN BYTES
 UDLEN    EQU    8           LENGTH OF UNIT DESCRIPTOR IN PP WORDS
 RESPBL   EQU    68          RESPONSE BUFFER LENGTH = 68 PP WORDS
 ENDMEM   EQU    7777B       LARGEST PP MEMORY ADDRESS
 HCS      EQU    7767B       DEFINE FWA OF HIGH CORE SCRATCH
 IOBUFLNG EQU    790D        LENGTH OF I/O BUFFER
 STIOBUF  EQU    ENDMEM-IOBUFLNG-10B  STARTING ADDRESS OF I/O BUFFER

 LENRS    EQU    40          SHORT RESPONSE BUFFER LENGTH IN BYTES
 LENRS1   EQU    LENRS+16+8  MEDIUM RESPONSE BUFFER LENGTH IN BYTES
 LENRS2   EQU    LENRS1+8    LONG RESPONSE BUFFER LENGTH IN BYTES
 LPPCMD   EQU    37B         LAST LEGAL PP COMMAND
 RSUMCMD  EQU    5           PP RESUME COMMAND

 ERC101   EQU    1           PP REQUEST QUEUE LOCKWORD TIMEOUT
 ERC102   EQU    ERC101+1    UNIT REQUEST QUEUE LOCKWORD TIMEOUT
 ERC103   EQU    ERC102+1    UNIT LOCKWORD TIMEOUT
 ERC104   EQU    ERC103+1    CHANNEL LOCKWORD TIMEOUT
 ERC105   EQU    ERC104+1    BUFFER POOL LOCKWORD TIMEOUT
 ERC106   EQU    ERC105+1    UNIT HARDWARE RESERVE TIMEOUT
 ERC107   EQU    ERC106+1    CONTROLLER HARDWARE RESERVE TIMEOUT
 ERC201   EQU    1           RESERVED FIELD OF PP INT TBL HEAD NOT 0
 ERC202   EQU    ERC201+1    RMA OF INTERRUPT WORD NOT A WORD BOUNDARY
 ERC203   EQU    ERC202+1    RMA OF PP COMM BUF NOT A WORD BOUNDARY
 ERC204   EQU    ERC203+1    RESERVED FIELD OF PP COMM DESCRIPTOR NOT 0
 ERC205   EQU    ERC204+1    RESERVED FIELD OF QUEUE DESCRIPTOR NOT 0
 ERC206   EQU    ERC205+1    RMA OF NEXT PP NOT A WORD BOUNDARY
 ERC207   EQU    ERC206+1    RESERVED FIELD OF RESP BUF DESCRIPTOR NOT 0
 ERC208   EQU    ERC207+1    LOGICAL UNIT OUT OF RANGE
 ERC209   EQU    ERC208+1    RMA OF UIT NOT A WORD BOUNDARY
 ERC20A   EQU    ERC209+1    INVALID CHANNEL NUMBER IN UNIT DESCRIPTOR
 ERC20B   EQU    ERC20A+1    RMA OF CHANNEL TABLE NOT ON WORD BOUNDARY
 ERC301   EQU    1           LOGICAL UNIT NUMBER MISMATCH
 ERC302   EQU    ERC301+1    RMA OF UNIT COMM BUF NOT A WORD BOUNDARY
 ERC303   EQU    ERC302+1    RESERVED FIELD OF UNIT COMM BUF DESCRIPTOR NOT 0
 ERC304   EQU    ERC303+1    RMA OF NEXT UNIT REQUEST NOT WORD BOUNDARY
 ERC305   EQU    ERC304+1    RESERVED FIELD OF QUEUE DESCRIPTOR NOT 0
 ERC306   EQU    ERC305+1    RESERVED FIELD IN HEADER NOT ZERO
 ERC307   EQU    ERC306+1    ILLEGAL DEVICE TYPE
 ERC401   EQU    1           RMA OF NEXT REQUEST NOT A WORD BOUNDARY
 ERC402   EQU    ERC401+1    REQUEST LENGTH NOT A MULTIPLE OF 8 BYTES
 ERC403   EQU    ERC402+1    REQUEST LENGTH IS LESS THAN FOURTY BYTES
 ERC404   EQU    ERC403+1    LOGICAL UNIT NO .NE. UNIT NO IN INTERFACE TBL
 ERC405   EQU    ERC404+1    RESERVED LINKAGE FIELD IS NOT ZERO
 ERC406   EQU    ERC405+1    INVALID RECOVERY/INTERFACE SELECTIONS
 ERC407   EQU    ERC406+1    INVALID PRIORITY SELECTION
 ERC408   EQU    ERC407+1    INVALID SECONDARY ADDRESS
 ERC409   EQU    ERC408+1    INVALID ALERT CONDITION
 ERC40A   EQU    ERC409+1    REQUEST LENGTH TOO LARGE > 224 BYTES
 ERC501   EQU    1           INVALID COMMAND CODE
 ERC502   EQU    ERC501+1    INVALID FLAG SELECTION
 ERC503   EQU    ERC502+1    INVALID FUNCTION
 ERC504   EQU    ERC503+1    FUNCTION NOT SUPPORTED BY HARDWARE
 ERC505   EQU    ERC504+1    INVALID LENGTH SPECIFICATION IN COMMAND
 ERC506   EQU    ERC505+1    INVALID ADDRESS SPECIFICATION IN COMMAND
 ERC507   EQU    ERC506+1    INVALID LENGTH SPECIFICATION IN INDIRECT LIST
 ERC508   EQU    ERC507+1    INVALID ADDRESS SPECIFICATION IN INDIRECT LIST
 ERC509   EQU    ERC508+1    PP COMMAND NOT ALLOWED IN REQUEST TO A UNIT
 ERC50A   EQU    ERC509+1    INVALID SEQUENCE OF COMMANDS
 ERC50B   EQU    ERC50A+1    INVALID PARAMETER SPECIFICATION
 ERC50C   EQU    ERC50B+1    RESERVED FIELD IN INDIRECT LIST NOT 0
          EJECT
          SPACE  4,10
*         FUNCTION CODES FOR CONTROL OF THE MAP HARDWARE.

 FCMC     EQU    0100B       MASTER CLEAR INTERFACE
 FCWF     EQU    0200B       WRITE FLAG (FOLLOWED BY OUTPUT OF TWO
                                         60 BIT CONTROL WORDS)
 FCWR     EQU    0400B       WRITE REQUEST (FOLLOWED BY OUTPUT OF
                                            REQUEST PACKET)
 FCBW     EQU    0401B       BLOCK WRITE (FOLLOWED BY OUTPUT OF DATA)
 FCRR     EQU    0500B       READ RESPONSE (FOLLOWED BY INPUT OF
                                            RESPONSE PACKET)
 FCBR     EQU    0501B       BLOCK READ (FOLLOWED BY INPUT OF DATA)
 FCHS1    EQU    0600B       READ HARDWARE STATUS WORD ONE
 FCHS2    EQU    0601B       READ HARDWARE STATUS WORDS ONE AND TWO

*         SPECIAL HARDWARE FUNCTION CODES.

 FCCS     EQU    0277B       CLEAR SEQUENCER
 FCMD     EQU    0300B       MAIN-MEMORY DUMP (SET ADDRESS AND LENGTH)
 FCML     EQU    0301B       MAIN-MEMORY LOAD (SET ADDRESS AND LENGTH)
 FCPD     EQU    0302B       PUBLIC-MEMORY DUMP (SET ADDRESS AND LENGTH)
 FCPL     EQU    0303B       PUBLIC-MEMORY LOAD (SET ADDRESS AND LENGTH)

*         DIAGNOSTIC FUNCTIONS.

 FCT04    EQU    0304B       TEST XMIT/REC AND CABLE WITH
                               SIMPLE PATTERNS
*         FC     03X5B       TEST IOP NUMERICAL CONVERSION
                               UNIT DATA PATHS
 FCT05    EQU    0305B       TEST C-170 60 BIT SINGLE PRECISION
                               FLOATING POINT FORMAT
 FCT15    EQU    0315B       TEST C-170 60 BIT FIXED POINT FORMAT
 FCT25    EQU    0325B       TEST C-170 30-BIT FLOATING POINT FORMAT
                               (MAP III EXTERNAL FORMAT)
 FCT35    EQU    0335B       TEST RIGHTMOST 32-BIT OF C-170 60-BIT
                               WORD FORMAT
 FCT06    EQU    0306B       TEST IOP COMMON LOGIC

*         DIRECT MEMORY ACCESS (DMA) FUNCTION CODES.

*         070X - RESERVED FOR DIRECT MEMORY ACCESS FUNCTIONS.

          SPACE  4,20
*         APM SOFTWARE FUNCTION CODES.

*                WORD 1 (60 BITS).

*                BITS 59-32 UNUSED
*                     31-08 RESERVED
*                     07-00 FC - FUNCTION CODE

*                WORD 2 (60 BIT).

*                BITS 59-32 UNUSED
*                     31-00 PARM - PARAMETER


*                FC    PARAM        DESCRIPTION
*                --    -----        -----------
*                 0   LENGTH   REQUEST TO TRANSMIT REQUEST PACKET
*                                OF *LENGTH* 32-BIT WORDS TO THE MAP.
*                 1      0     REQUEST TO RECEIVE NEXT RESPONSE PACKET
*                                FROM THE MAP.
*                 2     JID    REQUEST TO RECEIVE NEXT RESPONSE PACKET
*                                FOR JOB *JID* FROM THE MAP.
*                 3      0     REQUEST TO RECEIVE LAST RESPONSE PACKET
*                                OVER AGAIN.
*                 4      0     SOFTWARE INITIATED MASTER CLEAR.
*                 5      0     PERFORM JID LIST TO CHANNEL.
*                                THIS APM FUCTION CODE IS FOLLOWED
*                                BY HARDWARE FUNCTION CODE 0500
*                                (READ PUBLIC MEMORY).  THE FIRST WORD
*                                CONTAINS WORD COUNT.  (MAY BE ZERO)

*         FUNCTION CODES - APM - EQUATES.

 FCAT     EQU    0           TRANSMIT REQUEST PACKET
 FCAN     EQU    1           NEXT RESPONSE PACKET INPUT
 FCAJ     EQU    2           JID RESPONSE PACKET INPUT
 FCAR     EQU    3           RE-TRANSMIT LAST RESPONSE PACKET
 FCAC     EQU    4           CLEAR (SOFTWARE MASTER CEAR)
 FCAQ     EQU    5           (RESPONSE) QUEUE LIST OF JIDS

*         CHANNEL VALUES (THE CHANNEL NUMBER IS INSERTED LATER).
*         (BIT 2**5 IS ONLY USED ON IAN AND DCN INSTRUCTIONS).

 CH00     EQU    00          WITHOUT CHANNEL BIT
 MCH      EQU    17B         MAINTENANCE CHANNEL
 CH40     EQU    40B         WITH CHANNEL BIT
 CH14     EQU    14B         TAG FOR CHANNEL 14B

*         ERROR CODES FOR REQUEST PACKET CONDITIONS.

 RPE01    EQU    01          REQUEST PACKET LENGTH ERROR
 RPE02    EQU    02          REQUEST PACKET WILL NOT FILL IN PP BUFFER

*         ERROR CODES FOR ARRAY PROCESSOR CONDITIONS.

 APE10    EQU    20B         10(16) - SEQUENCER BUSY
 APE11    EQU    21B         11(16) - CONTROL PROCESSOR NOT RUNNING
 APE12    EQU    22B         12(16) - HOST CHANNEL SEQUENCE ERROR
 APE13    EQU    23B         13(16) - CONTROL PROCESSOR SEQUENCE ERROR
 APE14    EQU    24B         14(16) - COMMAND REJECTED
 APE15    EQU    25B         15(16) - TRANSFER PRIMED STATUS BIT NOT ON
 APE16    EQU    26B         16(16) - WRITE FLAG STATUS BIT NOT ON
 APE17    EQU    27B         17(16) - MAIN MEMORY PARITY ERROR
 APE18    EQU    30B         18(16) - PUBLIC MEMORY PARITY ERROR
 APE19    EQU    31B         19(16) - CHANNEL PARITY ERROR
 APE1A    EQU    32B         1A(16) - EXPONENT OUT OF RANGE ERROR

 APE20    EQU    40B         20(16) - *APM* LOGICALLY BUSY
 APE21    EQU    41B         21(16) - *APM* NOT ON LINE
 APE22    EQU    42B         22(16) - *APM* INVALID PRECEDING FUNCTION
 APE23    EQU    43B         23(16) - *APM* NO PERMISSION TO PROCEED
 APE26    EQU    46B         26(16) - ERROR IN LAST REQUEST PACKET

*         ERROR CODES USED FOR MAP-V HARDWARE.

 EDNR     EQU    60B         30(16) - NO RESPONSE TO FUNCTION CODE
 EDPC     EQU    61B         31(16) - PARITY-ERROR-ON CHANNEL
 EDMT     EQU    62B         32(16) - CHANNEL FAILED TO GO EMPTY
 EDIT     EQU    63B         33(16) - INPUT DEADMAN TIMEOUT
 EDOT     EQU    64B         34(16) - OUTPUT DEADMAN TIMEOUT
 EDFL     EQU    65B         35(16) - CHANNEL FULL BEFORE OUTPUT
 EDAC     EQU    66B         36(16) - CHANNEL ACTIVE BEFORE FUNCTION
 EDNE     EQU    67B         37(16) - CHANNEL EMPTY BEFORE INPUT
 EDEI     EQU    70B         38(16) - CHANNEL EMPTY DURING INPUT
 EDAI     EQU    71B         39(16) - ABNORMAL EXIT FROM AN INPUT INSTRUCTION

*         ASSEMBLY EQUATES.

 NTWQ     EQU    2           NUMBER-OF TIME-STAMP WORDS-PRECEDING REQ.
*         INSTALLATION OPTIONS.

 OPTR     EQU    10D         NUMBER OF RETRIES BEFORE FAILURE

*         ST100 USER CALL FUNCTION CODES INTERROGATED BY VM5.

 STSCH    EQU    2           SCHEDULE - RESPOND WHEN RESOURCES ARE AVAILABLE
 STLOD    EQU    4           LOAD
 STRUN    EQU    7           RUN
 STWR     EQU    8D          WRITE
 STRD     EQU    9D          READ
 STACT    EQU    12D         ACCOUNTING
 STDUMP   EQU    13D         DUMP
 STEFR    EQU    20D         ENGINEERING FILE RETURN
          TITLE  VM5B - DIRECT CELLS

* DIRECT CELLS

          CON    PRS-1       START OF PRESET (INITIALIZATION) ROUTINE

 T0       EQU    0
 T1       BSSZ   1           SCRATCH CELLS
 T2       BSSZ   1
 T3       BSSZ   1
 T4       BSSZ   1
 T5       BSSZ   1
 T6       BSSZ   1
 ONE      CON    1           CONSTANT OF ONE
 WC       BSSZ   1           CM WORD COUNT
 P1       BSSZ   1
 P2       BSSZ   1
 P3       BSSZ   1
 P4       BSSZ   1
 P5       BSSZ   1

 BYTCNT   BSSZ   1           NUMBER OF BYTES TO TRANSFER THIS I/O
 CMADR    BSSZ   3           CENTRAL MEMORY ADDRESS
 CMDADR   BSSZ   1           ADDRESS OF ACTIVE COMMAND
 CMDADR1  BSSZ   1           ADDRESS OF LENGTH IN ACTIVE COMMAND
 CMDNO    BSSZ   1           NUMBER OF REMAINING COMMANDS
 CM.RS    BSSZ   3           CM ADDR OF RESPONSE BUFFER (8 BIT BYTES)
 CM.PIT   BSSZ   3           CM ADDR OF PP INTERFACE TBL (REFORMATED)
 CM.UIT   BSSZ   3           CM ADDR OF UNIT INTERFACE TBL (REFORMATED)
 DIAFLG   BSSZ   1           DIAGNOSTIC FLAG
 DIAFND   BSSZ   1           = 0 - DIAGNOSTIC FUNCTION WITH NO ASSOIATED DATA
                             <> 0 - DIAGNOSTIC FUNCTION WITH ASSOCIATED DATA
 FCNRCD   BSSZ   1           FUNCTION REQUEST CODE
 F16BIO   CON    0           FLAG 16 BIT I/O CHANNEL INSTRUCTIONS
 IDLFLG   CON    1           IDLE FLAG, IF NONZERO DO ONLY PP REQUESTS
 IOCNT    BSSZ   1           NUMBER OF PP WORDS TO TRANSFER THIS I/O
 LAFLG    BSSZ   1           COMMAND LOOK AHEAD FLAG
 LIM      BSSZ   1           LIMIT OF RESPONSE BUFFER (IN 8 BIT BYTES)
 MPCMDI   BSSZ   1           COMMAND INDEX OF COMMAND CONTAINING CURRENT MAP REQUEST.
 PPHUNG   BSSZ   1           1 = PP HUNG
 PPLOCK   BSSZ   1           PP LOCKED FLAG

*         PST AND ST AREAS MUST REMAIN TOGETHER AND IN THIS ORDER

 PST      BSSZ   2           PREVIOUS MAP-V HARDWARE STATUS READ
 ST       BSSZ   2           MAP-V HARDWARE STATUS
 SCNFLG   BSSZ   1           SCAN UNITS FLAG
 UDPNT    BSSZ   1           UNIT DESCRIPTOR POINTER
 ULOCK    BSSZ   1           UNIT LOCKED FLAG
 UNITP    BSSZ   1           UNIT POINTER
 UQFLG    BSSZ   1           UNIT QUEUE FLAG 1-REQUEST FROM UNIT QUEUE
                                             0-REQUEST FROM PP QUEUE
 UQLOCK   BSSZ   1           UNIT QUEUE LOCK FLAG
 XBIA     BSSZ   1           CHANNEL I/O ADDRESS BIAS INCREMENT
 XPWB     BSSZ   1           PP WORDS PER BLOCK TRANSFER
 XRQA     BSSZ   2           PP REQUEST (RQ) ADDRESS RMA
 XRQI     BSSZ   1           PP REQUEST (RQ) INDEX
 XRRC     BSSZ   1           REQUEST (+1) = RESPONSE (-1) COUNTER
 XSFF     BSSZ   1           SEND FUNCTION FLAG (CHANNEL I/O)
          ORG    72B
 PPIT     BSSZ   2           REAL MEMORY WORD ADDRESS OF PP INTERFACE TABLE
 MAXIO1   CON    2*IOBUFLNG+1  MAX TRANSFER SIZE + 1, IN BYTES
 XSFT     BSSZ   1           SOFTWARE FUNCTION TAG(S) FOR I/O (P32 FLAG)

          ORG    76B
 PPNO     CON    3           LOGICAL PP NUMBER

          TITLE  VM5B - MAIN LOOP
          ORG    100B
*
*         MAIN LOOP.  MAP-V.
*
          SPACE  2,10
 VM5B     BSS    0
 LUP      BSS    0
          RJM    PPR         CHECK FOR ANY PP REQUESTS
          ZJN    LUP1        NO PP REQUESTS, CHECK IF ANY UNIT REQUESTS
          RJM    DCM         DO-PP COMMAND
          UJK    LUP         RELOOP

 LUP1     LDDL   IDLFLG      GET IDLE FLAG
          ADDL   PPHUNG      ADD FLAG THAT INDICATES PP HUNG
          NJK    LUP         IF IDLE FLAG SET OR PP HUNG, RELOOP
          RJM    URQ         CHECK FOR ANY UNIT REQUESTS
          ZJN    LUP2        IF NO REQUESTS CHECK IF UNIT SCAN REQUIRED
          RJM    DCM         DO-UNIT COMMAND
 LUP2     RJM    SAU         SCAN ACTIVE UNITS IF REQUIRED
          UJK    LUP
          TITLE  VM5B - SUBROUTINES
 CBC      SPACE  4,20
** NAME - CBC
*
** PURPOSE - CONVERT BYTE COUNT TO 12-BIT CHANNEL COUNT.
*            MULTIPLY BYTE COUNT BY 2/3 AND ROUND UP
*
** INPUT - (BYTCNT) = 16-BIT BYTE COUNT.
*
** OUTPUT - (IOCNT) = NUMBER OF 12 BIT CHANNEL WORDS.
*
          SPACE  2,10
 CBC      SUBR               ENTRY/EXIT
          LDK    0
          STDL   IOCNT       CHANNEL COUNT
          LDDL   BYTCNT      BYTE COUNT
          ZJN    CBC3        IF ZERO BYTE COUNT
          STDL   T1
          LDK    3           DIVIDE BY 3
          SHN    14
          STDL   T2

*         DIVIDE LOOP.

 CBC1     LDDL   IOCNT
          SHN    1
          STDL   IOCNT
          LDDL   T1
          SBDL   T2
          MJN    CBC2
          STDL   T1
          AODL   IOCNT       INCREMENT CHANNEL COUNT
 CBC2     LDDL   T2
          SHN    -1
          STDL   T2
          NJK    CBC1        THIS CHECK WILL MULTIPLY BY 2
          LDDL   T1
          ZJN    CBC3        IF NO NEED TO ROUND UP
          AODL   IOCNT       ROUND UP IF REMAINDER
 CBC3     RETURN             EXIT
 CLK      SPACE  4,20
** NAME - CLK
*
** PURPOSE - CLEAR LOCK.
*
** INPUT - (T4), (T4)+1, (T4)+2 AND R POINT TO TABLE TO BE CLEARED.
*          (T5) = LOCKWORD OFFSET.
*
** OUTPUT - LOCK IS CLEARED IN LOCKWORD.
*
 CLK      SPACE  2,10
 CLK      SUBR               ENTRY/EXIT

*         MAKE SURE THIS PP IS THE ONE WHO HAS THE LOCK SET.

          LDIL   T4          TABLE ADDRESS
          STDL   CMADR
          LDML   1,T4
          STDL   CMADR+1
          LDML   2,T4
          STDL   CMADR+2
 CLK1     LOADR  CMADR       UNIT/PP INTERFACE TABLE ADDRESS
          ADDL   T5          ADD LOCKWORD OFFSET, SAVE CM ADDRESS
          STDL   T6          SAVE CM ADDRESS
          CRDL   T1          READ UNIT LOCK
          LDDL   T4          CHECK PP NUMBER
          SBDL   PPNO
          ZJN    CLK3        IF THIS PP HAS THE LOCK SET

*         CHECK IF LOCKWORD = FFFF FFFF XXXX XXXX(16).

          LDDL   T1
          ADC    -177777B
          NJN    CLK2
          LDDL   T2
          ADC    -177777B
          ZJN    CLK1

 CLK2     RJM    HNG         ERROR, THIS PP DOES NOT HAVE UNIT RESERVED.

*         CLEAR UNIT LOCKWORD IN UNIT INTERFACE TABLE.

 CLK3     LDK    0
          STDL   T1
          STDL   T2
          STDL   T3
          STDL   T4
          LDDL   T6          CM ADDRESS OF UNIT LOCK
          LMK    400000B
          RDCL   T1          CLEAR LOCK

*         CHECK IF LOCK WAS CORRECT BEFORE THE CLEAR OPERATION.

          LDDL   T1
          ADC    -100000B
          NJN    CLK5
          LDDL   T2
          ADDL   T3
          NJN    CLK5
          LDDL   PPNO
          SBDL   T4
          NJN    CLK4        LOCK IS NOT OK
          RETURN             EXIT
 CLK4     RJM    HNG         LOCK WAS MESSED UP

*         CHECK IF LOCKWORD = FFFF FFFF XXXX XXXX(16).

 CLK5     LDDL   T1
          ADC    -177777B
          NJN    CLK6
          LDDL   T2
          ADC    -177777B
          ZJK    CLK3

*         CHECK IF LOCKWORD = 0.

 CLK6     LDDL   T1
          ADDL   T2
          ADDL   T3
          ADDL   T4
          NJK    CLK4
          UJK    CLK3
 CLP      SPACE  4,20
** NAME - CLP
*
** PURPOSE - CLEAR THE LOCKWORD ON THE PP REQUEST QUEUE.
*
** INPUT - (NONE)
*
** OUTPUT - QUEUE LOCK IS CLEARED IN PP REQUEST QUEUE.
*
          SPACE  2,10
 CLP      SUBR               ENTRY/EXIT
          LDDL   PPLOCK      GET PP LOCKED FLAG
          ZJN    CLP1        RETURN IF PP NOT LOCKED ON ENTRY
          LDK    0
          STDL   PPLOCK      CLEAR PP LOCKED FLAG
          LDK    CM.PIT      PP INTERFACE TABLE ADDRESS
          STDL   T4
          LDK    /PIT/C.LOCK  OFFSET OF PP QUEUE LOCKWORD
          STDL   T5
          RJM    CLK         LOCK PP REQUEST QUEUE
 CLP1     RETURN             EXIT
 CQL      SPACE  4,20
** NAME - CQL
*
** PURPOSE - CLEARS THE QUEUE LOCK IN THE UNIT INTERFACE TABLE.
*
** INPUT - (NONE)
*
** OUTPUT - QUEUE LOCK IS CLEARED IN UNIT INTERFACE TABLE.
** OUTPUT - (NONE)
*
          SPACE  2,10
 CQL      SUBR               ENTRY/EXIT
          LDDL   UQLOCK      GET UNIT LOCKED FLAG
          ZJN    CQL1        RETURN IF UNIT NOT LOCKED
          LDK    0
          STDL   UQLOCK      CLEAR UNIT QUEUE LOCK FLAG
          LDK    CM.UIT      UNIT INTERFACE TABLE ADDRESS
          STDL   T4
          LDK    /UIT/C.QLOCK  OFFSET OF QUEUE LOCKWORD
          STDL   T5
          RJM    CLK         CLEAR THE LOCKWORD
 CQL1     RETURN             EXIT
 CRB      SPACE  4,20
** NAME - CRB
*
** PURPOSE - CLEAR RESPONSE BUFFER (NOS/VE).
*
** INPUT - (NONE)
*
** OUTPUT - RESPONSE BUFFER AREA IS SET TO ZERO.
*
          SPACE  2,10
 CRB      SUBR               ENTRY/EXIT
          LDK    P.RS        GET LENGTH OF RESPONSE BUFFER
          STDL   T5          SET UP LOOP COUNTER
 CRB1     LDK    0
          STML   RESBUF-1,T5  CLEAR BUFFER BACK TO FRONT
          SODL   T5          DECREMENT LOOP COUNTER
          NJK    CRB1        RELOOP UNIT BUFFER CLEARED
          RETURN             EXIT
 CUL      SPACE  4,20
** NAME - CUL
*
** PURPOSE - CLEARS UNIT LOCK IN UNIT INTERFACE TABLE.
*
** INPUT - (NONE)
*
** OUTPUT - UNIT LOCK IS CLEARED IN UNIT INTERFACE TABLE.
** OUTPUT - (NONE)
*
          SPACE  2,10
 CUL      SUBR               ENTRY/EXIT
          LDDL   ULOCK       GET UNIT LOCKED FLAG
          ZJN    CUL1        RETURN IF UNIT NOT LOCKED
          LDK    0
          STDL   ULOCK       CLEAR UNIT LOCKED FLAG
          LDK    CM.UIT      UNIT INTERFACE TABLE ADDRESS
          STDL   T4
          LDK    /UIT/C.ULOCK  OFFSET OF UNIT LOCKWORD
          STDL   T5
          RJM    CLK         CLEAR UNIT LOCKWORD
 CUL1     RETURN             EXIT
 DCM      SPACE  4,20
** NAME - DCM
*
** PURPOSE - DO COMMAND.
*
** INPUT - COMMAND IN REQBUF.
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 DCM      SUBR               ENTRY/EXIT
          LDK    REQBUF+/RQ/P.CMND  GET ADDR OF FIRST COMMAND
          STDL   CMDADR      INITIALIZE COMMAND ADDRESS
          ADK    1           ADDRESS OF LENGTH FIELD IN COMMAND
          STDL   CMDADR1     SAVE POINTER TO LENGTH FIELD
          LDML   REQBUF+/RQ/P.LEN  GET PACKET LENGTH
          SBN    HEADLN      SUBTRACT HEADER LENGTH
          SHN    -3          DIVIDE BY 8 TO GET CM WORDS OF COMMANDS
          STDL   CMDNO       SAVE NUMBER OF COMMANDS
          LDK    0
          STDL   BYTCNT      INITIALIZE TRANSFER COUNT
          STDL   FCNRCD      INITIALIZE FUNCTION REQUEST CODE
          STDL   DIAFLG      INITIALIZE DIAGNOSTIC FLAG
 DCM1     LDK    0
          STDL   DIAFND      INITIALIZE DIAGNOSTIC DATA FLAG
          STML   RESBUF+/RS/P.RC  CLEAR RESPONSE CODE
          LDIL   CMDADR      GET COMMAND AND FLAGS
          SHN    -8          SHIFT OFF FLAGS
          STDL   T1          SAVE COMMAND
          SBN    LPPCMD      SUBTRACT VALUE OF LARGEST LEGAL PP COMMAND
          ZJN    DCM4        JUMP IF VALID PP COMMAND
          MJN    DCM4        JUMP IF VALID PP COMMAND

*         SEARCH THE COMMAND CODE TABLE FOR THIS UNIT COMMAND.

          LDK    TUCJL-2     SIZE OF TABLE
          STDL   T2
 DCM2     LDML   TUCJ,T2     GET COMMAND TABLE ENTRY
          SBDL   T1
          ZJN    DCM3        ENTRY FOUND
          LCN    2
          RADL   T2          DECREMENT T2
          PJK    DCM2        MORE ENTRIES

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
 DCM..    LDK    ERC501      INVALID COMMAND CODE
          RJM    EPC         ERROR PP(NOS/VE) COMMAND SEQUENCE

*         NO RETURN.  RJM RECORDS ADDRESS OF ERROR ROUTINE.

          ELSE
 DCM..    UJK    *           HANG IF ILLEGAL FUNCTION AND VALIDATION OFF
          ENDIF
*
*         VALID UNIT COMMAND, PROCESS COMMAND
*
 DCM3     LDML   TUCJ+1,T2   GET ADDRESS
          STML   DCMA        STORE IN JUMP
          LJM    **
 DCMA     EQU    *-1         UNIT REQUEST JUMP ADDRESS
          SPACE  2,10
*
*         VALID PP COMMAND, PROCESS COMMAND
*
 DCM4     LDIL   CMDADR      GET COMMAND AND FLAGS
          SHN    -8          SHIFT OFF FLAGS
          STDL   T2          SAVE COMMAND TO INDEX INTO JUMP TABLE
          LDML   TPCJ,T2     GET ADDRESS OF PP COMMAND ROUTINE
          STML   DCMB        SET UP JUMP
          RJM    **          GO TO PERFORM COMMAND
 DCMB     EQU    *-1
          SPACE  4,10
*         CONTINUE - DO COMMAND-COMPLETE PROCESSING.
*         NOTE - *DCP* IS ENTRY POINT FROM VARIOUS POINTS IN PPU.

 DCP      SODL   CMDNO       DECREMENT COMMAND COUNTER BY 1
          ZJN    DCP3        GO TO COMPLETE REQUEST

*         CHECK IF INTERMEDIATE RESPONSE REQUIRED.

          LDML   RESBUF+/RS/P.RC
          ZJN    DCP2        IF NO INTERMEDIATE RESPONSE
          LDK    R.INT       SET INTERMEDIATE RESPONSE FLAG
          RAML   RESBUF+/RS/P.RC
          RJM    RSP         SEND RESPONSE TO CPU
          RJM    INTRES      INITIALIZE RESPONSE BUFFER.
 DCP2     RJM    NEXTCMD     POINT TO NEXT COMMAND
          UJK    DCM1        RELOOP TO PERFORM NEXT COMMAND

 DCP3     LDK    R.NRM

*         SET NORMAL REQUEST TERMINATION INDICATOR.

          RAML   RESBUF+/RS/P.RC
          RJM    RSP         SEND RESPONSE TO CPU
 DCP4     RJM    CUL         CLEAR UNIT LOCK
          RETURN             EXIT

*         DO-COMMAND ERROR PROCESSING.

 DER      LDK    R.ABN
          STML   RESBUF+/RS/P.RC  SET ABNORMAL TERMINATION RESPONSE
          RJM    RSP         SEND RESPONSE TO CPU
          RJM    CUL         CLEAR UNIT LOCK
          UJK    VM5B        RETURN TO START OF PPU MONITOR

          IFEQ   HDW12BC,1   MAP-V CHANNEL INTERFACE IS 12/60 HARDWARE
 DVD      SPACE  4,20
** NAME - DVD
*
** PURPOSE - DIVIDE BY 5.
*
** INPUT - (A) = DIVIDEND.
*
** OUTPUT - (A) = QUOTIENT.
*           USES T1,T2.
*
** NOTES - USES SILVERMANS FORMULA.
*          N/5 = (N+4)*(51+13/2**6)/2**8.
*
          SPACE  2,10
 DVD      SUBR               ENTRY/EXIT
          ADK    4
          STD    T1          12 BIT STORE
          SHN    1
          ADD    T1          12 BIT ADD
          SHN    2
          ADD    T1          12 BIT ADD
          SHN    12D
          STD    T2          12 BIT STORE
          SHN    8D
          SBD    T1          12 BIT SUBTRACT
          ADD    T2          12 BIT ADD
          SHN    -8D
          RETURN             EXIT
          ENDIF
 EAU      SPACE  4,20
** NAME - EAU
*
** PURPOSE - ENABLE/DISABLE A UNIT.
*
** INPUT - (A) = 0 - ENABLE UNIT
*              = 1 - DISABLE UNIT
*
** OUTPUT - DISABLE FLAG IS SET AS REQUESTED.
*
          SPACE  2,10
 EAU      SUBR               ENTRY/EXIT
          STML   EAUVAL
          RJM    LFU         FORMAT AND LOAD UIT RMA.
          CRML   UITBUF,ONE  READ IN 1 CM WORD OF UIT
          LDML   UITBUF+/UIT/P.DSABLE  GET UNIT STATUS
          LPK    DISABLE     MASK OFF DISABLE FLAG
          ADC    0           SET OR CLEAR DISABLE FLAG
 EAUVAL   EQU    *-1
          STML   UITBUF+/UIT/P.DSABLE  STORE DISABLE BIT IN UIT COPY
          LOADC  CMADR       REFORMATTED UIT ADDRESS
          CWML   UITBUF,ONE  SET DISABLE BIT IN CM
          RETURN             EXIT
 EDT      SPACE  4,20
** NAME - EDT
*
** PURPOSE - EXECUTE DATA TRANSFER (IE MOVE NON REQ/RES PKT DATA).
*             EDT LOADS/UNLOADS DATA VIA CHANNEL.
*
** INPUT - (XRDF) = READ FLAG.
*          INDLST IS FWA OF ADDRESS LIST.
*          (T3) = LENGTH OF ADDRESS LIST.
*          (TRNCNT+3) = TOTAL BYTES OF DATA.
*
** OUTPUT - MAP-V MEMORY IS LOADED OR UNLOADED AS REQUESTED.
*
          SPACE  2,10
 EDTX     BSS    0
 EDT      SUBR               ENTRY/EXIT
          LDK    0
          STML   XRTY        SET RETRY ADDRESS
          LDK    1
          STDL   XSFF        SET SEND FUNCTION FLAG

          IFEQ   F16BD,1                                    ***** ****
          LDDL   XSFT        SOFTWARE FLAG CODES
          LPN    2           ISOLATE CENTRAL READ/WRITE 64-BIT FLAG
          SHN    14D-0
          ADM    EDTA        12 BIT ADD OF 6105 INSTRUCTION (CRM)
          STML   EDTA        16 BIT STORE OF X06105 INSTUCTION
          ADC    0200B       FORM X06305 INSTRUCTION (CRW OR CRWL)
          STML   EDTB        16 BIT STORE OF X06305 INSTUCTION
          LDDL   XSFT        SOFTWARE FUNCTION TAG(S)
          LPN    1
          STDL   XSFT        RESTORE WITHOUT CRM/CWM .. CRML/CWML FLAG
          ENDIF                                             * *** ** *

          LDDL   BYTCNT      TOTAL TRANSFER BYTE COUNT
          ADK    7
          SHN    -3          DETERMINE TOTAL CM WORDS
          NJN    EDT1        TEST WORD COUNT FOR NON ZERO
          UJK    EDTX        EXIT ON ZERO WORD COUNT
 EDT1     LDK    INDLST      ADDRESS OF INDIRECT LIST
          STDL   T6
 EDT2     LDK    0
          STDL   XBIA        SET BIAS TO ZERO
          LDML   1,T6        LENGTH IN 8-BIT BYTES
          SHN    -2          / 4 = NUMBER OF 32 BIT WORDS TO TRANSFER
          LPK    1
          STML   ODDN32      FLAG TO INDICATE ODD OR EVEN NUMBER OF 32 BIT WORDS
          LDML   1,T6        LENGTH IN 8-BIT BYTES
          ADK    7
          SHN    -3          CONVERT TO 64 BIT WORDS
          STDL   WC          NUMBER OF 64 BIT WORDS IN BLOCK
          SHN    2           * 4
          STML   XPWA        NUMBER OF WORDS PER ADDRESS ENTRY * 4
 EDT12    LDDL   WC          NUMBER OF 64 BIT WORDS IN BLOCK
          SBDL   XBIA
          STDL   T5          NUMBER OF 64 BIT WORDS LEFT TO TRANSFER
          SHN    2           * 4
          STDL   XPWB        NUMBER OF 64 BIT WORDS LEFT TO TRANFER * 4
          LDDL   T5          NUMBER OF 64 BIT WORDS LEFT TO TRANSFER
          ADK    -BFDC64     SUBTRACT 64 BIT BUFFER SIZE
          ZJN    EDT3        ONE PART LOAD JUST FITS
          PJN    EDT5
 EDT3     LDDL   XSFT        SOFTWARE FUNCTION TAG(S) (IE P32 FLAG)
          NJN    EDT4A       IS PACKED 32

          IFEQ   HDW12BC,1   MAP-V CHANNEL INTERFACE IS 12/60 HARDWARE
          LDDL   WC          NUMBER OF 64 BIT WORDS IN BLOCK
          SBDL   XBIA
          SHN    1           * 2 = NUMBER OF 60 BIT WORDS LEFT TO TRANSFER
          ADK    -BFDC60     SUBTRACT ALLOWABLE 60 BIT BUFFER SIZE
          PJN    EDT5        EXACTLY ONE PART LOAD OR MORE
          LDDL   XPWB        NUMBER OF 64 BIT WORDS LEFT TO TRANSFER * 4
          SHN    1           * 8
          ADDL   T5          * 9
          ADDL   T5          * 10
          STDL   T5          NUMBER OF 12 BIT BYTES TO INPUT
          LDML   ODDN32
          ZJN    EDT3A       IF EVEN NUMBER OF 32 BIT WORDS TO TRANSFER
          LDK    -5
          RADL   T5          NUMBER OF 12 BIT BYTES TO INPUT
 EDT3A    LDDL   T5
          STDL   XPWB        12 BIT BLOCK SIZE
          ENDIF

 EDT4A    UJN    EDT7
 EDT5     LDDL   XSFT        SOFTWARE FUNCTION TAG(S) (IE P32 FLAG)
          NJN    EDT6        IS PACKED 32

*         SET UP FIRST OF N PARTS.

          IFEQ   HDW12BC,1   MAP-V CHANNEL INTERFACE IS 12/60 HARDWARE
          LDK    BFDP12      BUFFER SIZE IN 12-BIT PP WORDS
          STDL   XPWB        NUMBER OF 12 BIT PP WORDS TO TRANSFER
          LDK    BFDC60      BUFFER SIZE OF 60-BIT CHUNCKS/2
          STDL   T5          NUMBER OF 60 BIT WORDS
          UJN    EDT7
          ENDIF

 EDT6     LDK    BFDP16      TRANSFER SIZE IN 16-BIT PP WORDS
          STDL   XPWB        NUMBER OF 16 BIT PP WORDS TO TRANSFER
          LDK    BFDC64      TRANSFER SIZE IN 64-BIT CM WORDS
          STDL   T5          NUMBER OF 64 BIT WORDS
 EDT7     LDML   XRDF        GET READ FLAG
          ZJN    EDT8        LOAD MAP MEMORY FROM HOST (WRITE)
          UJK    EDT20       UNLOAD (READ)

*         READY FOR HOST TO MAP-V TRANSFER.
*         READ IN THE DATA (OR PART OF IT).

 EDT8     LOADF  2,T6        CM ADDRESS TO A AND R
          ADDL   XBIA        ADD BIAS IF NOT FIRST READ OF PAGE
 EDTA     CRML   BFDZ,T5
*         CRM    BFDZ,T5     60 BIT CM READ (STLOD)
          LDDL   XSFT        SOFTWARE FUNCTION TAG(S) (IE P32 FLAG)
          NJN    EDT9        IS PACKED 32
          LDML   EDTA
          SHN    17D-15D
          PJN    EDT9        60-BIT READ (STLOD)

          IFEQ   HDW12BC,1   MAP-V CHANNEL INTERFACE IS 12/60 HARDWARE
          LDK    BFDZ        FWA OF 16/64-BIT DATA
          STDL   T4          SET STORAGE ADDRESS OF 12/60-BIT DATA
          RJM    RSF         REFORMAT SIX FOUR (64) - (16/64 TO 12/60)
          ENDIF

 EDT9     LDDL   T5          BUFFER SIZE (CM WORDS)
          RADL   XBIA
          LDML   XRDF        GET READ FLAG
          NJN    EDT11       UNLOAD MAP MEMORY TO HOST
          LDDL   XSFF
          NJN    EDT10       IF FIRST TIME
*
*         LOAD NTH PART INTO MAP.
*
 EDT17    RJM    SDP         SET DATA-TRANSFER PARAMETERS

*         RETURN WITH (A) = DATA FWA.
*                     (T0) = PP CHANNEL WORD COUNT.
*                     (F16BIO) = 1 = 16 BIT I/O.  0 = 12 BIT I/O.

          RJM    OTX         TRANSMIT NTH PART TO MAP
          UJN    EDT11
*
*         FUNCTION FOR WRITE AND LOAD FIRST PART INTO MAP.
*
 EDT10    LDML   XFCD        FUNCTION-CODE BLOCK WRITE (0400B OR 0401B)
          RJM    OTF         OUTPUT THE FUNCTION
          RJM    WHNB        INPUT ONE WORD STATUS - PARITY CHECK
          NJN    EDT14A
          STDL   XSFF        CLEAR SEND FUNCTION FLAG
          RJM    SDP         SET DATA-TRANSFER PARAMETERS

*         RETURN WITH (A) = DATA FWA.
*                     (T0) = PP CHANNEL WORD COUNT.
*                     (F16BIO) = 1 = 16 BIT I/O.  0 = 12 BIT I/O.

          RJM    OTC         TRANSMIT DATA

*         SET UP NEXT PART IF NECESSARY.

 EDT11    LDML   WC          CM WORDS THIS ADDRESS BLOCK
          SBDL   XBIA        NUMBER READ
          NJK    EDT12       MORE DATA FROM THIS ADDRESS WORD PAIR
          LDK    4
          RADL   T6          MOVE INDLST POINTER TO NEXT ADDRESS
          SODL   T3          DECREMENT ADDRESS LIST
          NJK    EDT2        MORE ADDRESSES

*         COMPLETE I/O BY DISCONNECTING CHANNEL
*         AND CHECKING CHANNEL FOR PARITY ERROR.

          RJM    INE         DISCONNECT CHAN. AND CHECK CHAN. PARITY
          NJN    EDT14C

*         STATUS CHECK AFTER EXIT.

          RETURN             EXIT

 EDT14A   RJM    ESO
          RJM    EMAP
 EDT14C   UJK    DER
*
*         SET UP FOR MAP-V TO HOST TRANSFER.
*
 EDT20    LDDL   XSFF
          NJN    EDT21       IF FIRST TIME
*
*         READ NTH PART FROM MAP.
*
          RJM    SDP         SET DATA-TRANSFER PARAMETERS

*         RETURN WITH (A) = DATA FWA.
*                     (T0) = PP CHANNEL WORD COUNT.
*                     (F16BIO) = 1 = 16 BIT I/O.  0 = 12 BIT I/O.

          RJM    INX         READ NTH PART FROM MAP
          ZJN    EDT22
 EDT25    UJK    EDT14C

*         FUNCTION MAP-V AND READ IN FIRST PART.

 EDT21    LDML   XFCD        FUNCTION-CODE BLOCK READ (0500B OR 0501B)
          RJM    OTF         OUTPUT THE FUNCTION
          RJM    WHNB        INPUT ONE WORD STATUS - PARITY CHECK
          NJK    EDT14A
          STDL   XSFF        CLEAR SEND FUNCTION FLAG
          RJM    SDP         SET DATA-TRANSFER PARAMETERS

*         RETURN WITH (A) = DATA FWA.
*                     (T0) = PP CHANNEL WORD COUNT.
*                     (F16BIO) = 1 = 16 BIT I/O.  0 = 12 BIT I/O.

          RJM    INC         ACTIVATE AND INPUT
          ZJN    EDT22
          UJK    EDT25
 EDT22    LDDL   XSFT        SOFTWARE FUNCTION TAG(S) (IE P32 FLAG)
          NJN    EDT23       IS PACKED 32
          LDML   EDTB
          SHN    17D-15D
          PJN    EDT23       60-BIT WRITE (DUMP PUBLIC MEM - FUTURE)

          IFEQ   HDW12BC,1   MAP-V CHANNEL INTERFACE IS 12/60 HARDWARE
          LDDL   XPWB        LENGTH OF PPU BLOCK
          RJM    DVD         DIVIDE BY 5
          ADK    1
          SCN    1           ROUND UP.
          STDL   T5          NUMBER OF 60 BIT WORDS
          LDK    BFDZ        FWA OF 12/60-BIT DATA
          STDL   T4          SET STORAGE ADDRESS OF 16/64-BIT DATA
          RJM    RSZ         REFORMAT SIX ZERO (60) - (12/60 TO 16/64)

*         RETURN (T5) = NUMBER OF 64-BIT WORDS.

          ENDIF

*         TRANSFER DATA TO USERS AREA AS DEFINED BY PARAMETER BLOCK.


*         WRITE THE DATA (OR PART OF IT).

 EDT23    LOADF  2,T6        CM ADDRESS TO A AND R
          ADDL   XBIA        ADD BIAS IF NOT FIRST READ OF PAGE
 EDTB     CWML   BFDZ,T5
*         CWM    BFDZ,T5     60 BIT WRITE TO CM
          UJK    EDT9        GO TO INCREMENT BIAS LOCATION
 EHR      SPACE  4,20
** NAME - EHR
*
** PURPOSE - ERROR HANDLING ROUTINE.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 EHR      SUBR               ENTRY/EXIT
          LDDL   XRRC        REQUEST (+1) = RESPONSE (-1) COUNTER
          STML   RESBUF+/RS/P.PPRRC
          LDML   EHR         ERROR ADDRESS
          STML   RESBUF+/RS/P.PPEA
          LDML   XLFC        LAST FUNCTION CODE
          STML   RESBUF+/RS/P.PPLF
          LDML   APERR
          STML   RESBUF+/RS/P.MVEC  SET MAP-V ERROR CODE IN RESPONSE
          RETURN
 EINTF    SPACE  4,20
** NAME - EINTF
*
** PURPOSE - REPORT ERRORS IN THE INTERFACE ERROR FIELD OF A RESPONSE
*
** INPUT - (A)  - ERROR CODE TO BE STORED IN RESPONSE INTERFACE ERROR FIELD
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 EINTF    SUBR               ENTRY/EXIT
          STML   RESBUF+/RS/P.IEC  SET INTERFACE ERROR CODE
          LDK    LENRS1
          STML   RESBUF+/RS/P.RESPL SET LENGTH OF RESPONSE BUFFER
          RJM    EHR
          UJK    DER         ABNORMAL ERROR TERMINATION OF REQUEST
 EMAP     SPACE  4,20
** NAME - EMAP
*
** PURPOSE - RECORD MAP ERROR INFORMATION
*
** INPUT - (A) - MAP ERROR TO BE REPORTED
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 EMAP     SUBR               ENTRY/EXIT
          STML   APERR       SAVE MAP ERROR CODE
          LDK    LENRS2
          STML   RESBUF+/RS/P.RESPL
          RJM    EHR
          RETURN
 EPC      SPACE  4,20
** NAME - EPC
*
** PURPOSE - ERROR PP(NOS/VE) COMMAND SEQUENCE.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 EPC      SUBR               ENTRY/EXIT
          ADK    CMDERR      ADD ON COMMAND SEQUENCE ERROR CODE BASE
          RJM    EINTF
 EPT      SPACE  4,20
** NAME - EPT
*
** PURPOSE - ENABLE/DISABLE PORT THREE (3).
*
** INPUT - (A) = 0 - ENABLE PORT
*                1 - DISABLE PORT
*
** OUTPUT - BIT 35 IN ENVIRONMENTAL CONTROL REGISTER 20(16)
*           IS SET AS REQUESTED
*
          SPACE  2,10
 EPT      SUBR               ENTRY/EXIT
          ZJN    EPTA        IF REQUEST TO ENABLE PORT.
          LDK    20B
 EPTA     STML   EPTB
          LDK    0#14A       FUNCTION WORD
                               CONECT CODE = 1
                               OP. CODE    = 4 - READ
                               TYPE CODE   = A
          RJM    EPT1        CONDITION ENVIRONMENTAL CONTROL REG. 20(16)
          IAM.   HCS,MCH     READ TO HIGH CORE SCRATCH
          DCN.   MCH+40B
          CCF.   *,MCH       RETURN CHANNEL

*         CLEAR PORT 3 DISABLE BIT.

          LDM    HCS+4
          LPK    357B        CLEAR BIT 35 - PORT 3 DISABLE
          ADC    0           ADD IN VALUE FOR BIT 35.
 EPTB     EQU    *-1
          STM    HCS+4       STORE BACK
          LDK    0#15A       FUNCTION WORD
                               CONECT CODE = 1
                               OP. CODE    = 5 - WRITE
                               TYPE CODE   = A
          RJM    EPT1        CONDITION ENVIRONMENTAL CONTROL REG. 20(16)
          OAM.   HCS,MCH     WRITE FROM HIGH CORE SCRATCH
          FJM.   *,MCH
          DCN.   MCH+40B
          CCF.   *,MCH       RETURN CHANNEL
          RETURN             EXIT
          SPACE  2,10
**        EPT1 - EPT HELPER SUBROUTINE.
*
*                USED TO CONDITION ENVIRONMENTAL CONTROL REG. 20(16).
*
          SPACE  2,10
 EPT1     SUBR               ENTRY/EXIT
          SCF.   *,MCH       WAIT UNTIL MCH AVAILABLE
          FAN.   MCH         FUNCTION (A) ON MAINTENANCE CHANNEL
          LDK    1234B
 EPT2     SBN    1
          NJN    EPT3        NOT TIMED OUT YET
          DCN.   MCH+40B
          CCF.   *,MCH       RETURN CHANNEL
          LJM    *           HANG FOR NOW **********    ********
 EPT3     AJM.   EPT2,MCH    IF STILL ACTIVE
          ACN.   MCH
          LDK    0
          OAN.   MCH         OUTPUT 1ST CHANNEL CONTROL WORD
          LDK    40B         20(16) - EC - ENVIRONMENTAL CONTROL REG.
          OAN.   MCH         OUTPUT 2ND CHANNEL CONTROL WORD
          FJM.   *,MCH
          DCN.   MCH+40B
          ACN.   MCH
          LDK    8D          CHANNEL BYTE COUNT
          RETURN             EXIT

 ESO      SPACE  4,20
** NAME - ESO
*
** PURPOSE - ERROR-BITS-IN STATUS-WORD ONE.
*
** INPUT - (NONE)
*
** OUTPUT - (A) - APE ERROR CODE OBTAINED FROM MAP STATUS WORD 1
*
          SPACE  2,10
 ESO      SUBR               ENTRY/EXIT
          LDDL   ST
          SHN    8-1
          PJN    ESO6        IF NO EXPONENT OVERFLOW.
          LDK    APE1A       EXPONENT OVERFLOW              ** APE1A **
          UJN    ESO8
 ESO6     SHN    1
          PJN    ESO0        IF NO CHANNEL PARITY ERROR.
          LDK    /RS/K.OCP
          RAML   RESBUF+/RS/P.OCP
          LDK    APE19       CHANNEL PARITY ERROR           ** APE19 **
          UJN    ESO8
 ESO0     SHN    1
          PJN    ESO1        IF NOT PUBLIC MEMORY PARITY ERROR.
          LDK    APE18       PUBLIC MEMORY PARITY ERROR     ** APE18 **
          UJN    ESO8
 ESO1     SHN    1
          PJN    ESO2        IF NOT MAIN MEMORY PARITY ERROR.
          LDK    APE17       MAIN MEMORY PARITY ERROR       ** APE17 **
 ESO8     UJN    ESO10
 ESO2     SHN    4
          PJN    ESO3        NOT CONTROL PROCESSOR SEQ. ERR.
          LDK    APE13       CONTROL PROCESSOR SEQ. ERR.    ** APE13 **
          UJN    ESO10
 ESO3     SHN    17D
          PJN    ESO4        NOT COMMAND REJECTED
          LDK    APE14       COMMAND REJECTED               ** APE14 **
          UJN    ESO4
 ESO4     SHN    2
          PJN    ESO5        NOT HOST CHANNEL SEQUENCE ERROR
          LDK    APE12       HOST CHANNEL SEQ. ERR.         ** APE12 **
          UJN    ESO10
 ESO5     SHN    1
          MJN    ESO9        IF CONTROL PROCESSOR RUNNING
          LDK    APE11       CONTROL PROCESSOR NOT RUNNING  ** APE11 **
          UJN    ESO10
 ESO9     LDK    0           NO APE ERROR.
 ESO10    RETURN

 FORMA    SPACE  4,20
** NAME - FORMA
*
** PURPOSE - FORMAT A CM REAL MEMORY ADDRESS.
*
** CALLING SEQUENCE - LDC    ADDRESS
*                     RJM    FORMA
*
** INPUT - (A) IS THE ADDRESS OF A 2-WORD CM BYTE ADDRESS.
*
** OUTPUT - (CMADR) IS THE ADDRESS OF THE RESULTING 3-WORD REFORMATED
*                CM ADDRESS.  THE FORMAT CAN BE USED BY THE LOADC MACRO.
*           (ADDRESS), WORD 0, BITS 0-13 AND
*                      WORD 1, BITS 3-15, ARE REFORMATTED TO-
*           (CMADR),   WORD 0, BITS 54-63,
*                      WORD 1, BITS 52-63,
*                      WORD 2, BITS 58-63,
*
          SPACE  2,10
 FORMA    SUBR               ENTRY/EXIT
          STDL   T1

*         REFORMAT CM ADDRESS.

          LDML   1,T1
          LPN    7
          ZJN    FORMA1      IF VALID RMA ADDRESS.
          RJM    HNG
 FORMA1   LDIL   T1
          LPN    37B
          SHN    16
          LMML   1,T1
          SHN    9
          STDL   CMADR+1
          SHN    6
          LPN    77B
          STDL   CMADR+2
          LDIL   T1
          SHN    -5
          STDL   CMADR
          LRD    CMADR
          LDDL   CMADR+2
          LMK    400000B
          RETURN             EXIT


          IFEQ   ILRRP,1                                    ***** ****
 GIA      SPACE  4,20
** NAME - GIA
*
** PURPOSE - GET INDEXED ADDRESS FROM INDIRECT LIST.
*
** INPUT - (A) = INDEX OF DESIRED ADDRESS.
*          ADDRESS LIST IN *INDLST*.
*
** OUTPUT - (A) AND (R) READY FOR ONE WORD CM ACCESS.
*
          SPACE  2,10
 GIA      SUBR               ENTRY/EXIT
          STDL   T4          SAVE DESIRED INDEX
          LDIL   CMDADR1     GET LENGTH OF INDIRECT LIST
          SHN    -3          DIVIDE BY 8 TO GET CM WORD COUNT
          STDL   T5          SAVE CM WORD COUNT
          LDK    0
          STDL   T6          INITIALIZE INDEX
 GIA1     SODL   T5          DECREMENT LOOP COUNTER BY 1
          PJN    GIA2        CONTINUE UNTIL ENTIRE LIST PROCESSED
          RJM    HNG         BAD INDEX ***********
 GIA2     LDML   INDLST+1,T6  GET LENGTH FROM ADDRESS/LENGTH PAIR
          SHN    -3          CM WORDS
          SBDL   T4          DESIRED INDEX
          MJN    GIA3        NOT IN THIS GROUP
          LDK    INDLST+2
          ADDL   T6          POINTER TO BASE ADDRESS
          RJM    FORMA       FORMAT MEMORY ADDRESS
          ADDL   T4          ADD INDEX
          RETURN             EXIT

 GIA3     ADDL   T4          RESTORE VALUE
          LMK    777777B     COMPLEMENT
          RADL   T4          DECREMENT INDEX
          LDK    4
          RADL   T6          POINT TO NEXT ITEM IN LIST
          UJK    GIA1        RELOOP

          ENDIF                                             * * * ** *
          SPACE  4,20
 HNG      SUBR
          AODL   PPHUNG      SET FLAG TO INDICATE PP HUNG.
          UJK    LUP
 INS      SPACE  4,20
** NAME - INS
*
** PURPOSE - INPUT STATUS-WORD(S)-FROM-MAP.
*
** INPUT - (A) = STATUS FUNCTION CODE (0600B OR 0601B).
*
** OUTPUT - (ST) = MAP-V STATUS WORD 1.
*           EXIT WITH (A) = 0 -  NO ERROR BITS IN STATUS WORD 1 OR HARDWARE BUSY
*                                BIT SET IN STATUS WORD 1. IF THE HARDWARE BUSY
*                                BIT IS SET, NO OTHER BITS ARE CHECKED.
*                     (A) = NON-ZERO - ERROR BITS SET IN STATUS WORD 1. LOCATION
*                                      APERR WILL CONTAIN THE APE ERROR CODE
*                                      FOR THE FIRST BIT SET IN STATUS WORD 1.
*           IF 0601B REQUESTED, (ST+1) = STATUS WORD 2.
*
** NOTES - XLFC IS NOT CHANGED BY THIS SUBROUTINE. IT
*          IS SAVED AND RESTORED. THE 1 OR 2 WORD STATUS
*          AREA IS FILLED WITH ALL 7S BEFORE READING
*          THE STATUS IN.
*
          SPACE  2,10
 INSX     BSS    0
 INS      SUBR               ENTRY/EXIT
          STML   INSA        SAVE FUNCTION CODE
          LPN    1
          ADC    1401B       LDN 00 INSTRUCTION PLUS WORD COUNT
          STML   INSC
*
*         MOVE CURRENT HARDWARE STATUS WORD TO PREVIOUS HARDWARE STATUS WORD
*
          LDDL    ST
          STDL    PST        SAVE CURRENT HARDWARE STATUS

          LDML   XLFC        SAVE THE LAST FUNCTION CODE
          STDL   T2
*
*         SEND READ STATUS FUNCTION TO THE MAP.
*
          LDC    **
 INSA     EQU    *-1         0600 OR 0601 STATUS FUNCTION CODE
          RJM    OTF         SEND READ STATUS FUNCTION
          NJK    INSX
*
*         INITIALIZE THE HARDWARE STATUS BUFFER TO ALL ONES.
*
          LCN    0
          STDL   ST          INITIALIZE STATUS WORD 1
*
*         READ IN THE STATUS WORD(S).
*
 INSC     LDN    **          SIZE OF TRANSFER
          STDL   T0
          LDK    ST          ADDRESS OF STATUS
          RJM    INC         ACTIVATE AND INPUT
          NJK    INSX
          LDDL   T2          RESTORE LAST MAP FUNCTION CODE
          STML   XLFC
          RJM    INE         CHECK CHANNEL PARITY
          NJN    INS4
*
*         SET APERR IF HARDWARE BUSY BIT IS NOT SET
*
          LDDL   ST
          LPK    /MPHSTS/K.HBSY
          NJN    INS2        IF HARDWARE BUSY BIT IS SET.
          RJM    ESO
          ZJN    INS4        IF NO ERROR.
          RJM    MHP
          UJN    INS4
 INS2     LDK    0
 INS4     RETURN             EXIT

 INTRES   SPACE  4,20
** NAME - INTRES
*
** PURPOSE - TO INITIALIZE A RESPONSE BUFFER
*
** INPUT - (UQFLG) = 0 - INITIALIZE AS PP RESPONSE
**         (UQFLG) = 1 - INITIALIZE AS UNIT RESPONSE
*
** OUTPUT - RESPONSE BUFFER INITIALIZED FOR SPECIFIED RESPONSE
*
          SPACE  2,10
 INTRES   SUBR
          RJM    CRB         CLEAR RESPONSE BUFFER.
          RJM    SUR         SET UP RESPONSE BUFFER.
          LDDL   UQFLG
          NJN    INTRES2     IF INITIALIZE AS UNIT RESPONSE.
          LDK    LENRS       LENGTH OF PP RESPONSE.
          UJN    INTRES3
 INTRES2  BSS    0
          LDK    LENRS1      LENGTH OF UNIT RESPONSE.
 INTRES3  STML   RESBUF+/RS/P.RESPL  SET LENGTH OF RESPONSE BUFFER.
          RETURN

 INX      SPACE  4,20
** NAME - INX
*
** PURPOSE - INPUT DATA ON THE MAP CHANNEL.
*
** INPUT - (A) = FWA OF INPUT BUFFER.
*          (T0) = LENGTH IN PP WORDS.
*
** OUTPUT - NORMAL EXIT = INPUT COMPLETED.
*           ABNORMAL EXIT = EXIT VIA *HNG* SUBROUTINE (A) = ERROR CODE.
*
** NOTES - THERE ARE 3 ENTRY POINTS TO THIS SUBROUTINE:
*             INB = CHANNEL IS CONNECTED BEFORE INPUT AND
*                   DISCONNECTED AFTER INPUT.
*             INC = CHANNEL IS CONNECTED BEFORE INPUT.
*             IND = CHANNEL IS DISCONNECTED AFTER INPUT ONLY.
*
*             INE IS AUXILLARY SUBROUTINE FOR DISCONNECTING CHANNEL
*             IF ACTIVE, AND CHECKING CHANNEL PARITY.
*
*             INCE IS AN AUXILLARY SUBROUTINE FOR INPUTTING DATA ON A
*                  CHANNEL UNTIL THE CHANNEL GOES EMPTY.
*
          SPACE  2,10
*         SPECIAL ENTRY POINT FOR CONNECT AND DISCONNECT CHANNEL.

 INB      SUBR               ENTRY/EXIT
          RJM    INC         ACTIVATE AND INPUT
          RJM    INE         DISCONNECT AND CHECK CHANNEL PARITY ERROR
          RETURN             EXIT

*         SPECIAL ENTRY POINT FOR CONNECT CHANNEL ONLY.

 INC      SUBR               ENTRY/EXIT

*         REMOVE ANY CHANNEL PARITY ERROR INDICATIONS BY
*         EXECUTING *SFM* INSTRUCTION AS NO-OP.

          SFM    INC1,CH00   JUMP IF CHANNEL PARITY ERROR SET
 INC1     ACN    CH40        CONNECT CHANNEL
          RJM    INX         INPUT DATA
          RETURN             EXIT

*         ENTRY POINT FOR INPUTTING ON A CHANNEL UNTIL CHANNEL EMPTY

 INCE     SUBR               ENTRY/EXIT
          LDK    0
          STML   XCINC       INITIALIZE EXCESS INPUT COUNT.
 INCE1    IAN    CH00
          AOML   XCINC       INCREMENT EXCESS INPUT COUNT.
          IJM    INCE2,CH00  IF CHANNEL NOT ACTIVE
          FJM    INCE1,CH00  IF DATA ON THE CHANNEL.
 INCE2    RETURN             EXIT
*
*         ENTRY POINT FOR CONTINUE INPUT AND DISCONNECT CHANNEL.
*
*IND      SUBR               ENTRY/EXIT
*         RJM    INX         INPUT DATA
*         RJM    INE         DISCONNECT AND CHECK CHANNEL PARITY ERROR
*         RETURN             EXIT

*         AUXILARY SUBROUTINE TO DISCONNECT CHANNEL IF ACTIVE
*         ON INPUT AND CHECK FOR CHANNEL PARITY ERROR.

 INEX     LDK    0
 INE      SUBR               ENTRY/EXIT
          IJM    INE1,CH00
          DCN    CH40        DISCONNECT CHANNEL
 INE1     CFM    INEX,CH00   JUMP TO *INEX* IF CHANNEL PARITY ERR CLEAR

*         PARITY ERROR ON CHANNEL.

          LDK    EDPC
          RJM    MHP
          LDK    /RS/K.CHERR CHANNEL ERROR
          RAML   RESBUF+/RS/P.CHERR  ABNORMAL STATUS FIELD
          RETURN


*         ENTRY POINT FOR COMMON INPUT SUBROUTINE.

 INXX     BSS    0
 INX      SUBR               ENTRY/EXIT
          STML   INXA+1      SAVE BUFFER ADDRESS

          IFEQ   F16BD,1                                    ***** ****
          LDDL   F16BIO      FLAG 16 BIT I/O

*         CALLING ROUTINE MUST INSURE THAT ONLY BIT 0 IS USED.

          SHN    15D-0
          STD    F16BIO      12 BIT STORE TO CLEAR FLAG FOR NEXT PASS
          ADM    INXA        12 BIT ADD OF 72XX INSTRUCTION
          STML   INXA        16 BIT STORE OF X072XX INSTUCTION
          ENDIF                                             * *** ** *

          LDML   XTLC        TIMEOUT VALUE

 INX1     FJM    INX2,CH00   IF CHANNEL FULL
          SBN    1
          PJK    INX1        LOOP UNTIL FULL OR TIMEOUT

*         ERROR - TIMEOUT - CHANNEL DID NOT GO FULL.

          LDK    EDNE                                        ** EDNE **
 INX6     DCN    CH40        DISCONNECT CHANNEL
          RJM    MHP
          RETURN

*         CHANNEL IS FULL - INPUT THE DATA.

 INX2     LDDL   T0          BLOCK SIZE
 INXA     IAM    **,CH00     INPUT DATA
*         IAPM   **,CH00     OR PACKED INPUT DATA
          ZJN    INX4        IF ALL BYTES READ FROM CHANNEL
*
*         ALL BYTES WERE NOT READ FROM THE CHANNEL, TRY AND DETERMINE THE
*         REASON.
*
          IJM    INX5,CH00   IF CHANNEL INACTIVE
          EJM    INX7,CH00   IF NO MORE DATA ON CHANNEL
          RJM    INCE        INPUT EXCESS DATA FROM CHANNEL.
          LDK    EDAI                                        ** EDAI **
          UJK    INX6

 INX7     LDK    EDEI                                        ** EDEI **
          UJK    INX6

 INX4     EJM    INX3,CH00   IF CHANNEL EMPTY
          RJM    INCE        INPUT EXCESS DATA FROM CHANNEL.
          LDK    EDMT                                        ** EDMT **
          UJK    INX6

 INX3     AJM    INXX,CH00   EXIT IF NO DEADMAN TERMINATE

*         ERROR - DEADMAN TERMINATE.

 INX5     LDK    EDIT                                        ** EDIT **
          UJK    INX6
 I1S      SPACE  4,20
** NAME - I1S
*
** PURPOSE - INPUT 1 STATUS-WORD.
*
** INPUT - (NONE)
*
** OUTPUT - (A) = 0 - NO HARDWARE ERROR AND CONTROL PROCESSOR RUNNING
*           (A) = NON-ZERO - HARDWARE ERROR OR CONTROL PROCESSOR NOT RUNNING
*
** NOTES - THIS ROUTINE IS USED PRIMARILY TO VALIDATE
*          THAT NO PARITY ERROR OCCURRED ON LAST FUNCTION.
*
          SPACE  2,10
 I1S      SUBR               ENTRY/EXIT

          LDK    FCHS1       FUNCTION CODE HARDWARE STATUS ONE WORD
          RJM    INS         INPUT STATUS WORD(S)
          RETURN
 I2S      SPACE  4,20
** NAME - I2S
*
** PURPOSE - INPUT 2 STATUS-WORDS.
*
** INPUT - (NONE)
*
** OUTPUT - (A) = 0 - NO HARDWARE ERROR AND CONTROL PROCESSOR RUNNING
*               = NONZERO - HARDWARE ERROR OR CONTROL PROCESSOR NOT
*                           RUNNING
*
          SPACE  2,10
 I2S      SUBR               ENTRY/EXIT

          RJM    WHNB        WAIT FOR HARDWARE NOT BUSY.
          NJN    I2S10

*
*         MOVE CURRENT SOFTWARE STATUS WORD TO PREVIOUS SOFTWARE STATUS WORD
*
          LDDL   ST+1
          STDL   PST+1       SAVE CURRENT SOFTWARE STATUS
*
*         INITIALIZE THE STATUS WORD TO ALL ONES
*
          LCN    0
          STDL   ST+1

          LDK    FCHS2       FUNCTION CODE HARDWARE STATUS TWO WORD
          RJM    INS         INPUT STATUS WORD(S)
 I2S10    RETURN             EXIT
 LFU      SPACE  4,20
** NAME - LFU
*
** PURPOSE - LOAD FORMATTED UIT ADDRESS.
*            LOADS A AND R FOR CENTRAL MEMORY REQUEST TO UIT.
*
** INPUT - (NONE)
*
** OUTPUT - A AND R POINTING START OF UIT.
*
          SPACE  2,10
 LFU      SUBR               ENTRY/EXIT
          LOADF  UNITD+/UD/P.UQT,UDPNT  POINT A AND R AT UIT
          RETURN             EXIT
 LF2      SPACE  4,20
** NAME - LF2
*
** PURPOSE - LOAD FORMATTED 2,CMDADR.
*            LOADS A AND R FOR CENTRAL MEMORY TRANSFER.
*
** INPUT - RMA IN 2,CMDADR.
*
** OUTPUT - A AND R SET UP WITH CM ADDRESS OF INPUT RMA.
*
          SPACE  2,10
 LF2      SUBR               ENTRY/EXIT
          LOADF  2,CMDADR    LOAD A AND R WITH RMA
          RETURN             EXIT
 LPQ      SPACE  4,20
** NAME - LPQ
*
** PURPOSE - LOCK PP-REQUEST QUEUE.
*
** INPUT - (NONE)
*
** OUTPUT - A REGISTER = 0 IF LOCK WAS SUCCESSFULLY SET.
*                      .NE. 0 IF LOCK COULD NOT BE SET.
*
          SPACE  2,10
 LPQ      SUBR               ENTRY/EXIT
          LDK    1
          STDL   PPLOCK      SET PP LOCKED FLAG
          LDK    CM.PIT      PP INTERFACE TABLE ADDRESS
          STDL   T4
          LDK    /PIT/C.LOCK  OFFSET OF PP QUEUE LOCKWORD
          STDL   T5
          RJM    SLB         SET LOCKWORD BIT
          ZJN    LPQ1        RETURN IF LOCK WAS SET
          LDK    0
          STDL   PPLOCK      CLEAR LOCK FLAG SINCE PP NOT LOCKED
          LDK    1           SET NO LOCK INDICATOR
 LPQ1     RETURN             EXIT
 MCL      SPACE  4,20
** NAME - MCL
*
** PURPOSE - MAIN-MEMORY CHANNEL LOAD/UNLOAD.
*            LOADS/UNLOADS MAIN-MEMORY VIA CHANNEL WHEN MAP
*            HARDWARE IS NOT CONNECTED TO DMA/CMI.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 MCL      SUBR               ENTRY/EXIT
          RJM    EDT         EXECUTE DATA TRANSFER
          RJM    WNB         WAIT NOT BUSY
          RJM    ESO
          ZJN    MCL5        IF NO ERROR
          RJM    EMAP
 MCL5     RETURN             EXIT
 MHP      SPACE  4,20
** NAME - MHP
*
** PURPOSE - MAP HARDWARE PROBLEMS - RETRY - REPORT PROBLEMS.
*
** INPUT - (A) = ERROR CODE.
*          (XERC) = ERROR RETRY COUNT.
*          (XRTY) = ERROR RETRY RE-ENTRY ADDRESS.
*          (XNRT) = NO RETRY RETURN ADDRESS.
*          (TCCP) = CHECKPOINT FLAG.
*
** OUTPUT - RETRY = JUMP TO RE-ENTRY ADDRESS (XRTY).
*                (XERC) = ERROR COUNT INCREMENTED.
*           NON-RETRY = JUMP TO NO RETRY ADDRESS (XNRT).
*                (DOWN THE MAP AND REQUEST ON LINE
*                DIAGNOSTICS TO BE RUN).
*
** NOTES - THE ERROR RETRY COUNT WILL BE USED TO DETERMINE
*          IF THE FUNCTION SHOULD BE TRIED AGAIN OR IF THE
*          REQUEST SHOULD BE TERMINATED. NO RETRY IS POSSIBLE
*          IF THE RETRY ADDRESS IS ZERO.  THE MAP FAILURE
*          FLAG IS SET.
*
          SPACE  2,10
 MHP      SUBR               ENTRY/EXIT

*         CHECK FOR ERROR RETRIES COMPLETED.

          STML   XERR        SAVE THE ERROR CODE
          AOML   XERC        INCREMENT THE ERROR COUNT
          SBN    OPTR
          PJN    MHP1        IF ALL RETRIES COMPLETED

*         GO RETRY THE MAP FUNCTION AGAIN.

          LDML   XRTY        GET RE-ENTRY ADDRESS
          ZJN    MHP1        IF NO RETRY POSSIBLE
          STDL   T2
          LJM    0,T2        EXIT TO RE-ENTRY POINT

*         ALL RETRIES HAVE BEEN ATTEMPTED AND THE ERROR PERSISTS.
*         SUSPEND SCANNING FOR RESPONSES.

 MHP1     LDK    /RS/K.HDWR  HARDWARE ERROR
          RAML   RESBUF+/RS/P.HDWR  ABNORMAL STATUS FIELD
          LDML   XGUP        GIVE UP ON ERROR -  TRANSFER ADDRESS
          ZJN    MHP2        NO SPECIAL HANDLING
          STDL   T2
          LJM    0,T2

 MHP2     LDML   XERR        LOAD MAP ERROR CODE
          RJM    EMAP
          LDK    0
          STDL   SCNFLG      STOP SCANNING FOR RESPONSES.
          LDML   MHP         ADDRESS OF CALLER TO THIS ROUTINE
          STML   RESBUF+/RS/P.PPEA  SAVE ADDRESS OF CALLER
          RETURN
 NXTCMD   SPACE  4,20
** NAME - NEXTCMD
*
** PURPOSE - TO UPDATE CMDADR AND CMDADR1 TO POINT TO THE NEXT COMMAND
*
* INPUT - CMDADR = ADDRESS OF CURRENT COMMAND
*         CMDADR1 = ADDRESS OF CURRENT COMMAND LENGTH FIELD
*
** OUTPUT - CMDADR = ADDRESS OF NEXT COMMAND
*           CMDADR1 = ADDRESS OF NEXT COMMAND LENGTH FIELD
*
          SPACE  2,10
 NEXTCMD  SUBR
          LDK    4
          RADL   CMDADR      POINT TO NEXT COMMAND FIELD.
          ADK    1
          STDL   CMDADR1     POINT TO NEXT COMMAND LENGTH FIELD.
          ADK    -REQBUFE    SUBTRACT BUFFER END
          MJN    NEXTX       EXIT - COMMAND IS WITHIN BUFFER
          LDDL   XRQI        FETCH COMMAND OFFSET
          STML   RDSEGA      PROVIDE FOR READ ROUTINE
          RJM    RDSEG       GO READ NEXT REQUEST SEGMENT
 NEXTX    RETURN
 OTF      SPACE  4,20
** NAME - OTF
*
** PURPOSE - OUTPUT FUNCTION-CODE.
*
** INPUT - (A) = 12 BIT FUNCTION CODE.
*          (XTLB) = TIMEOUT PERIOD.
*
** OUTPUT - NORMAL = FUNCTION SENT TO MAP.
*           (XLFC) = FUNCTION CODE SENT.
*           ABNORM = JUMP TO *HNG* WITH (A) = ERROR CODE.
*
          SPACE  2,10
 OTFX     LDK    0
 OTF      SUBR               ENTRY/EXIT
          STML   XLFC        SAVE FUNCTION CODE
          AJM    OTF2,CH00   IF ACTIVE BEFORE FUNCTION SENT
          FAN    CH00        OUTPUT THE FUNCTION

          LDML   XTLB        TIMEOUT VALUE

 OTF1     IJM    OTFX,CH00   EXIT WHEN CHANNEL INACTIVE
          SBN    1
          PJK    OTF1        LOOP UNTIL TIMEOUT

*         ERROR - NO RESPONSE TO FUNCTION.

          LDK    EDNR                                        ** EDNR **
          UJN    OTF3

*         ERROR - ACTIVE BEFORE FUNCTION.

 OTF2     LDK    EDAC                                        ** EDAC **
 OTF3     RJM    MHP
          DCN    CH40        DISCONNECT CHANNEL
          RETURN

 OTX      SPACE  4,20
** NAME - OTX
*
** PURPOSE - OUTPUT DATA ON THE MAP CHANNEL.
*
** INPUT - (NONE)
** INPUT - (A) = FWA OF OUTPUT BUFFER.
*          (T0)  = LENGTH IN PP WORDS.
*          (XTLC) = TIMEOUT PERIOD.
*
** OUTPUT - NORMAL = OUTPUT COMPLETED.
*           ABNORM = JUMP TO *HNG* WITH (A) = ERROR CODE.
*
** NOTES - THERE ARE 3 ENTRY POINTS TO THIS SUBROUTINE:
*             OTB = CHANNEL IS CONNECTED BEFORE OUTPUT AND
*                   DISCONNECTED AFTER OUTPUT.
*             OTC = CHANNEL IS CONNECTED BEFORE OUTPUT ONLY.
*             OTX = CHANNEL IS NOT CONNECTED OR DISCONNECTED.
*
          SPACE  2,10

*         SPECIAL ENTRY POINT FOR CONNECT AND DISCONNECT CHANNEL.


 OTB      SUBR               ENTRY/EXIT
          ACN    CH40        CONNECT CHANNEL
          RJM    OTX         OUTPUT DATA
          NJN    OTB1
          RJM    OTE         CHECK CHANNEL FOR EMPTY
 OTB1     RETURN             EXIT

*         SPECIAL ENTRY POINT FOR CONNECT CHANNEL ONLY.

 OTC      SUBR               ENTRY/EXIT
          ACN    CH40        CONNECT CHANNEL
          RJM    OTX         OUTPUT DATA
          RETURN             EXIT

*         ENTRY POINT FOR COMMON OUTPUT SUBROUTINE.

 OTXX     BSS    0
 OTX      SUBR               ENTRY/EXIT
          STML   OTXA+1      SAVE THE BUFFER ADDRESS

          IFEQ   F16BD,1                                    ***** ****
          LDDL   F16BIO      FLAG 16 BIT I/O

*         CALLING ROUTINE MUST INSURE THAT ONLY BIT 0 IS USED.

          SHN    15D-0
          STD    F16BIO      12 BIT STORE TO CLEAR FLAG FOR NEXT PASS
          ADM    OTXA        12 BIT ADD OF 73XX INSTRUCTION
          STML   OTXA        16 BIT STORE OF X073XX INSTUCTION
          ENDIF                                             * *** ** *

          LDDL   T0          GET SIZE OF BLOCK
          FJM    OTX1,CH00   IF CHANNEL FULL BEFORE OUTPUT
 OTXA     OAM    **,CH00     OUTPUT DATA
*         OAPM   **,CH00     OR PACKED OUTPUT DATA
          AJM    OTXX,CH00   EXIT IF NO DEAD MAN TIMEOUT

*         ERROR - DEADMAN TIMEOUT.

          LDK    EDOT                                        ** EDOT **
 OTX2     RJM    MHP
          DCN    CH40        DISCONNECT CHANNEL
          UJK    OTXX

*         ERROR - CHANNEL FULL BEFORE OUTPUT.

 OTX1     LDK    EDFL                                        ** EDFL **
          UJK    OTX2

*         NORMAL OUTPUT OCCURRED - WAIT FOR CHANNEL EMPTY.

 OTEX     LDK    0
 OTE2     DCN    CH40        DISCONNECT CHANNEL
 OTE      SUBR               ENTRY /EXIT
          LDML   XTLC        TIMEOUT VALUE
 OTE1     EJM    OTEX,CH00   EXIT IF EMPTY
          SBN    1
          NJK    OTE1        LOOP UNTIL EMPTY OR TIMEOUT

*         ERROR - CHANNEL NEVER WENT EMPTY.

          LDK    EDMT                                        ** EDMT **
          RJM    MHP
          UJK    OTE2
 PAUSS     SPACE  4,20
** NAME - PAUSS
*
** PURPOSE - DELAY PROGRAM EXECUTION FOR A SPECIFIED NUMBER OF
*            SECONDS.
*
** INPUT - (A) - NUMBER OF SECONDS TO DELAY
*
          SPACE  2,10
 PAUSS    SUBR               ENTRY/EXIT
          SHN    2           NUMBER OF SECONDS * 4
          STDL   P1
 PAUSS1   PAUSE  250000
          SODL   P1
          NJK    PAUSS1       IF HAVE NOT WAITED SPECIFIED NUMBER OF SECONDS
          RETURN             EXIT
 PAUS     SPACE  4,20
** NAME - PAUS
*
** PURPOSE - DELAY PROGRAM EXECUTION FOR A SPECIFIED NUMBER OF
*            MICROSECONDS.
*
** INPUT - A REGISTER (BITS 00-06) SPECIFIES NUMBER OF MICROSECONDS
*          TO BE DELAYED.
*
          SPACE  2,10
 PAUS     SUBR               ENTRY/EXIT
 PAUS1    SBN    1           EACH ITERATION OF THIS SBN-NJN LOOP
          PSN
          PSN
          NJK    PAUS1       UTILIZES 1 MICROSECOND
          RETURN             EXIT
 PC0      SPACE  4,20
** NAME - PC0
*
** PURPOSE - PP COMMAND 0 - ACKNOWLEDGE.
*
** INPUT - ADDRESS OF COMMAND IN CMDADR.
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 PC0      SUBR               ENTRY/EXIT
*         RJM    RSP         STORE A RESPONSE
          RETURN             EXIT
 PC1      SPACE  4,20
** NAME - PC1
*
** PURPOSE - PP COMMAND 1 - STOP UNIT.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 PC1      SUBR               ENTRY/EXIT
          LDML   2,CMDADR
          STDL   XRQA        RMA OF REQUEST TO TERMINATE.
          LDML   3,CMDADR
          STDL   XRQA+1      RMA OF REQUEST TO TERMINATE.
          RJM    RDVREQ      READ AND VALIDATE REQUEST.
          ZJN    PC1V        IF REQUEST VALID.
          LDK    ERC506
          RJM    EPC

*         NO RETURN.  RJM RECORDS ADDRESS OF ERROR ROUTINE.

 PC1V     LDK    1
          STDL   UQFLG
          RJM    INTRES      INITIALIZE RESPONSE BUFFER FOR UNIT RESPONSE.
          LDK    /RS/K.FORC
          RAML   RESBUF+/RS/P.FORC  SET FORCED TERMINATION BIT.
          LDK    R.ABN
          STML   RESBUF+/RS/P.RC  SET ABNORMAL TERMINATION.
          RJM    RSP         SEND RESPONSE TO CPU.
          LOADF  PPTBL+/PIT/P.PPQ
          CRML   REQBUF,WC   READ PP REQUEST.
          LDK    0
          STDL   UQFLG
          RJM    INTRES      INITIALIZE RESPONSE BUFFER FOR PP RESPONSE.
          RETURN             EXIT
 PC2      SPACE  4,20
** NAME - PC2
*
** PURPOSE - PP COMMAND 2 - SELECT UNIT.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 PC3      SPACE  4,20
** NAME - PC3
*
** PURPOSE - PP COMMAND 3 - SELECT CONTROLLER.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 PC3      SUBR               ENTRY/EXIT
          LDK    0           ENABLE CMI PORT.
          RJM    EPT
          RETURN             EXIT
 PC4      SPACE  4,20
** NAME - PC4
*
** PURPOSE - PP COMMAND 4 - IDLE.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 PC4      SUBR               ENTRY/EXIT
          LDK    1           SET THE IDLE FLAG NONZERO
          STDL   IDLFLG
          RETURN             EXIT
 PC5      SPACE  4,20
** NAME - PC5
*
** PURPOSE - PP COMMAND 5 - RESUME.
*
** INPUT
*
** OUTPUT - (NONE)
*
          SPACE  4
 PC5      SUBR               ENTRY/EXIT
          LDK    0
          STDL   IDLFLG      CLEAR THE IDLE FLAG
          STDL   PPHUNG      CLEAR PP HUNG FLAG.
          RETURN             EXIT
 PC7      SPACE  4,20
** NAME - PC7
*
** PURPOSE - PP COMMAND 7 - START READY SCAN.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 PC7      SUBR               ENTRY/EXIT
          LDK    1
          STDL   SCNFLG      SET SCAN UNIT FLAG
          RETURN             EXIT
 PC8      SPACE  4,20
** NAME - PC8
*
** PURPOSE - PP COMMAND 8 - STOP READY SCAN.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 PC8      SUBR               ENTRY/EXIT
          LDK    0
          STDL   SCNFLG      CLEAR SCAN UNITS FLAG.
          RETURN             EXIT
 PC10     SPACE  4,20
** NAME - PC10
*
** PURPOSE - PP COMMAND 10 - ENABLE UNIT
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 PC10     SUBR               ENTRY/EXIT
          LDK    0           ENABLE UNIT.
          RJM    EAU
          RETURN
PC11      SPACE  4,20
** NAME - PC11
*
** PURPOSE - PP COMMAND 11 - DISABLE UNIT
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 PC11     SUBR               ENTRY/EXIT
          LDK    1           DISABLE UNIT
          RJM    EAU
          RETURN
PC16      SPACE  4,20
** NAME - PC16
*
** PURPOSE - PP COMMAND 16 - MASTER CLEAR CHANNEL
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 PC16     SUBR               ENTRY/EXIT
          PAUSE  250000
          ACN    CH40
          PAUSE  250000
          EJM    PC16A,CH00  IF CHANNEL EMPTY.
          LDK    5
          RJM    PAUSS        WAIT FOR 5 SECONDS.
 PC16A    DCN    CH40
          RETURN
 PC17     SPACE  4,20
** NAME - PC17
*
** PURPOSE - PP COMMAND 17 - MASTER CLEAR CONTROLLER
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 PC17     SUBR               ENTRY/EXIT
          LDK    1           DISABLE CMI PORT.
          RJM    EPT
          RETURN
 PC12     SPACE  4,20
 PC2      BSS    0           FUTURE IMPLEMENTATION
 PC12     BSS    0           FUTURE IMPLEMENTATION
 PC13     BSS    0           FUTURE IMPLEMENTATION
 PC14     BSS    0           FUTURE IMPLEMENTATION
 PC15     BSS    0           FUTURE IMPLEMENTATION
 PC18     BSS    0           FUTURE IMPLEMENTATION
 PC19     BSS    0           FUTURE IMPLEMENTATION
 PC1A     BSS    0           FUTURE IMPLEMENTATION
 PC1B     BSS    0           FUTURE IMPLEMENTATION
 PC1C     BSS    0           FUTURE IMPLEMENTATION
 PC1D     BSS    0           FUTURE IMPLEMENTATION
 PC1E     BSS    0           FUTURE IMPLEMENTATION
 PC1F     BSS    0           FUTURE IMPLEMENTATION
 PC20     BSS    0           FUTURE IMPLEMENTATION
 PC21     BSS    0           FUTURE IMPLEMENTATION
 PC22     BSS    0           FUTURE IMPLEMENTATION

          SUBR               ENTRY
          UJK    DCM..       GO TO ERROR EXIT
 PPR      SPACE  4,20
** NAME - PPR
*
** PURPOSE - TO DETERMINE IF THERE ARE ANY PP REQUESTS TO PROCESS.
*            IF THERE ARE, THE FIRST ONE IS COPIED INTO PP MEMORY.
*
** INPUT - (NONE)
*
** OUTPUT - A=0 IF NO PP REQUESTS.
*           A .NE. 0 IF THERE IS A PP REQUEST TO PROCESS.
*
          SPACE  2,10
 PPR5     RJM    CLP         CLEAR PP LOCKWORD
 PPR6     LDK    0           SET FLAG FOR NO REQUESTS FOUND

 PPR      SUBR               ENTRY/EXIT
          RJM    LPQ         LOCK PP-REQUEST QUEUE
          NJK    PPR6        RETURN IF PP REQUEST QUEUE ALREADY LOCKED
          LDK    PITLEN      GET LENGTH OF PIT IN CM WORDS
          STDL   WC          SAVE LENGTH FOR CM READ
          LOADC  CM.PIT      CM ADDRESS TO A AND R FOR READ
          CRML   PPTBL,WC    READ IN PIT
          LDML   PPTBL+/PIT/P.PPQ  GET HALF 1 OF RMA OF 1ST REQUEST
          ADML   PPTBL+/PIT/P.PPQ+1
          ZJK    PPR5        IF RMA = 0 NO PP REQUEST QUEUED

          IFNE   EFLAG2,0    TURN OFF PP INT TABLE VERIFICATION IF EFLAG2 = 0
          RJM    VPI         VERIFY PIT
          ENDIF
          LDK    MAXREQ
          STDL   WC          SET MAX LENGTH OF PP REQUEST FOR CM READ
          LOADF  PPTBL+/PIT/P.PPQ  CM ADDRESS OF REQUEST TO A AND R
          CRML   REQBUF,WC   READ PP REQUEST

*         IF IDLE, ONLY DO RESUME COMMAND.

          LDDL   IDLFLG
          ZJN    PPR1        SKIP RESUME CHECK IF PP NOT IDLE
          LDML   REQBUF+/RQ/P.CMND  GET 1ST COMMAND
          SHN    -8D         SHIFT OFF FLAGS
          SBN    RSUMCMD
          NJK    PPR5        EXIT IF NOT RESUME COMMAND
 PPR1     LDK    2
          STDL   WC          SET FOR 2 CM WORD TRANSFER
          LOADF  PPTBL+/PIT/P.PPQ
          CWML   PPTBL+/PIT/P.PPQPVA-1,WC  REWRITE PVA AND RMA.
          LOADC  CM.PIT      SET A AND R TO PP INTERFACE TABLE
          ADK    /PIT/C.PPQPVA  SET A AND R TO PVA IN PP INTERFACE TABLE
          CWML   REQBUF+/RQ/P.NEXTPV-1,WC  RESET PVA AND RMA TO NEXT PVA AND RMA
          LOADF  PPTBL+/PIT/P.PPQ
          CRML   REQBUF,WC   REREAD LINK INFORMATION.
          LDK    0
          STDL   UDPNT       SET UNIT DESCRIPTOR TABLE INDEX
          STDL   UQFLG       CLEAR UNIT QUEUE FLAG
          LDML   REQBUF+/RQ/P.LU  GET LOGICAL UNIT NUMBER
          STDL   T2          SAVE LOGICAL UNIT NUMBER
          ZJN    PPR3        IF NO I/O COMMANDS SKIP
          LDML   PPTBL+/PIT/P.UNITC  GET NO OF UNITS
          STDL   T1          SAVE NO OF UNITS FOR SEARCH LOOP
 PPR2     LDML   UNITD+/UD/P.LU,UDPNT  GET LOGICAL UNIT NO FROM UD ENTRY
          SBDL   T2          SUBTRACT LOGICAL UNIT NO FROM REQUEST
          ZJN    PPR3        JUMP IF FOUND UNIT
          SODL   T1          DECREMENT UNIT COUNTER

          IFNE   EFLAG4,0    NO REQUEST HEADER VERIFY IF EFLAG4 = 0
          ZJK    VPR4        ERROR IF NO FIND
          ELSE
          NJN    PPR7        IF ABLE TO FIND UNIT
          RJM    HNG
 PPR7     BSS    0
          ENDIF

          LDK    P.UD
          RADL   UDPNT       INCREMENT POINTER TO NEXT UD ENTRY
          UJK    PPR2        RELOOP TO NEXT UNIT
 PPR3     RJM    CLP         UNLOCK PPQ
          RJM    INTRES      INITIALIZE RESPONSE BUFFER FOR PP RESPONSE.

          IFNE   EFLAG4,0    NO REQUEST HEADER VALIDATION IF EFLAG4=0
          RJM    VPR         VERIFY PP REQUEST AND SET UP RESPONSE BUFFER
          ENDIF

          LDK    1           SET GOT REQUEST FLAG
 PPR4     RETURN             EXIT

 RDI      SPACE  4,20
** NAME - RDI
*
** PURPOSE - READ DATA INDIRECT (USE INDIRECT LIST).
*
** INPUT - (A) = ADDRESS TO READ DATA INTO.
*
** OUTPUT - DATA IS READ IN.
*
          SPACE  2,10
 RDIX     BSS    0

 RDI      SUBR               ENTRY/EXIT
          STML   RDIA        SET FIRST ADDRESS FOR CM READ
          LDIL   CMDADR1     GET LENGTH OF INDIRECT LIST
          SHN    -3          CONVERT IT TO CM WORDS
          STDL   T5          INITIALIZE LOOP CONTROL
          LDK    INDLST      GET ADDRESS OF INDIRECT LIST
 RDI1     STDL   T6          SET INDIRECT COMMAND POINTER
          LDML   1,T6        GET LENGTH IN BYTES
          ADK    7
          SHN    -3          CONVERT LENGTH TO CM WORDS
          STDL   WC          SAVE LENGTH FOR CM READ
          LOADF  2,T6        CM ADDRESS TO A AND R FOR CM READ
          CRML   **,WC       READ DATA FROM CM
 RDIA     EQU    *-1
          SODL   T5          DECREMENT LOOP COUNTER BY 1
          ZJK    RDIX        RETURN IF DONE
          LDML   1,T6        GET LENGTH OF INDIRECT IN BYTES
          SHN    -1          CONVERT LENGTH TO PP WORDS
          RAML   RDIA        RESET ADDRESS FOR NEXT CM READ
          LDDL   T6
          ADK    4           POINT TO NEXT INDIRECT IN LIST
          UJK    RDI1        RELOOP FOR NEXT CM READ
 RDSEG    SPACE 4,20
** NAME - RDSEG
*
** PURPOSE - TO READ A SEGMENT OF A UNIT REQUEST WHEN THE
*            LENGTH OF THE REQUEST EXCEEDS THE REQUEST BUFFER
*            SIZE IN THE PP
*
** INPUT - XRQA, XRQA+1 CONTAIN THE RMA OF THE REQUEST TO READ
*
** OUTPUT - CMDADR, CMDADR+1 POINT THE FIRST COMMAND IN THIS
*           SEGMENT OF THE REQUEST
*
          SPACE  2,10
 RDSEG    SUBR
          LDK    MAXCMD      MAX NO. THAT FIT IN BUFFER
          STDL   WC          SAVE FOR DOING I/O
          LOADF  XRQA        FETCH REQUEST RMA
          ADK    HDRWDS      SKIP OVER REQUEST HEADER
          ADC    **          ADD OFFSET TO POSITION TO
 RDSEGA   EQU    *-1           SEGMENT NEEDED
          SBDL   LAFLG       DECREMENT IF CALL FOR LOOK AHEAD
          CRML   REQBUF+/RQ/P.CMND,WC
          LDK    REQBUF+/RQ/P.CMND
          STDL   CMDADR      POINT TO FIRST COMMAND IN BUFFER
          ADK    1
          STDL   CMDADR1
          RETURN
 RDVREQ   SPACE 4,20
** NAME - RDVREQ
*
** PURPOSE - TO READ A UNIT REQUEST FROM CM AND COMPARE THE
*           RMA CONTAINED IN THE REQUEST WITH THE RMA USED
*           TO READ THE REQUEST.
*
** INPUT - XRQA, XRQA+1 CONTAIN THE RMA OF THE REQUEST TO READ.
*
** OUTPUT - (A) = 0 - REQUEST READ INTO REQBUF AND RMA CONTAINED IN
*                     REQUEST MATCHES THE RMA USED TO READ THE REQUEST.
*           (A) = NONZERO - RMA CONTAINED IN THE REQUEST DID NOT MATCH
*                           THE RMA USED TO READ THE REQUEST.
*
          SPACE  2,10
 RDVREQ   SUBR
          LDK    MAXREQ      GET LENGTH OF REQUEST FOR CM READ
          STDL   WC          SAVE LENGTH FOR CM READ
          LOADF  XRQA        SET A AND R TO ADDRESS OF REQUEST
          CRML   REQBUF,WC   READ IN UNIT REQUEST

*         VALIDATE REQUEST READ FROM CM

          LDML   REQBUF+/RQ/P.NEXT
          LMDL   XRQA
          NJN    RDVREQ1     IF RMAS DO NOT MATCH.
          LDML   REQBUF+/RQ/P.NEXT+1
          LMDL   XRQA+1
 RDVREQ1  RETURN
 RIL      SPACE  4,20
** NAME - RIL
*
** PURPOSE - READ INDIRECT LIST INTO *INDLST*.
*
** INPUT - (NONE)
*
** OUTPUT - (BYTCNT) = BYTE COUNT OF LIST.
*
          SPACE  2,10
 RILX     BSS    0

 RIL      SUBR               ENTRY/EXIT

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          UJN    RILE14      JUMP OVER ERROR CODES

*         ERROR EXITS FOR ERC5XX CODES.

 RILE5    LDK    ERC505      INVALID LENGTH IN COMMAND
          UJN    RILE13      CONTINUE
 RILE7    LDK    ERC507      INVALID LENGTH IN INDIRECT LIST
          UJN    RILE13      CONTINUE
 RILE8    LDK    ERC508      INVALID ADDRESS IN INDIRECT LIST
          UJN    RILE13      CONTINUE
 RILE12   LDK    ERC50C      RESERVED FIELD IN INDIRECT LIST NOT ZERO
          UJN    RILE13      CONTINUE
 RILE13   RJM    EPC         ERROR PP(NOS/VE) COMMAND SEQUENCE

*         NO RETURN.  RJM RECORDS ADDRESS OF ERROR ROUTINE.

 RILE14   LDIL   CMDADR1     GET LENGTH OF INDIRECT LIST
          MJK    RILE5       ERROR IF NEG (TOO LARGE)
          ZJK    RILE5       ERROR IF LENGTH OF INDIRECT LIST IS ZERO
          LPN    7           MASK OFF LOWER THREE BITS
          NJK    RILE5       ERROR IF LENGTH NOT A MULTIPLE OF 8
          ENDIF

          LDIL   CMDADR1     GET LENGTH OF INDIRECT LIST
          SHN    -3          DIVIDE BY 8 TO GET CM WORD COUNT
          STDL   T5          SAVE CM WORD COUNT

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          SBN    MAXIND+1    SUBTRACT 1 MORE THAN MAX ALLOWED INDIRECTS
          PJK    RILE5       ERROR IF TOO MANY INDIRECTS
          ENDIF

*         READ INDIRECT LIST INTO INDLST.

          RJM    LF2         SET UP CM ADDRESS IN A AND R
          CRML   INDLST,T5   READ INDIRECT LIST

*         VERIFY LIST.  ALL ADDRESS MUST BE ON WORD BOUNDARIES AND ALL
*         LENGTHS EXCEPT THE LAST MUST BE MULTIPLES OF 8.

          LDDL   T5          GET NO OF ADDRESS PAIRS IN LIST
          SBN    1           DEC BY 1
          SHN    2           MULT BY 4 TO POINT TO LAST ONE IN LIST
          STDL   T4          SAVE POINTER TO LAST ADDRESS/LENGTH PAIR

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          LDML   INDLST,T4   GET UPPER 2 BYTES OF INDIRECT
          NJK    RILE12      ERROR IF NOT ZERO
          LDML   INDLST+3,T4 GET ADDRESS FROM LAST ADDRESS/LENGTH PAIR
          LPN    7           MASK OFF LOWER 3 BITS OFF ADDRESS
          NJK    RILE8       ERROR IF ADDRESS NOT ON A WORD BOUNDARY
          ENDIF

          LDML   INDLST+1,T4 GET LENGTH FROM LAST ADDRESS/LENGTH PAIR
          STDL   BYTCNT      INITIALIZE TOTAL XFER BYTE COUNT FOR LIST

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          MJK    RILE7       ERROR IF LENGTH NEGATIVE (TOO LARGE)
          ZJK    RILE7       ERROR IF LENGTH ZERO
          ENDIF

          LDK    0
          STDL   T6          INITIALIZE INDEX
 RIL1     SODL   T5          DECREMENT LOOP COUNTER BY 1
          ZJK    RILX        JUMP WHEN ENTIRE LIST PROCESSED
          LDML   INDLST+1,T6  GET LENGTH FROM ADDRESS/LENGTH PAIR
          RADL   BYTCNT      COMPUTE TOTAL LENGTH FOR LIST

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          MJK    RILE7       ERROR IF NEG (TOO LARGE)
          LDML   INDLST+1,T6  GET LENGTH FROM ADDRESS/LENGTH PAIR LIST
          ZJK    RILE7       ERROR IF LENGTH IS ZERO
          LPN    7           MASK OFF LOWER 3 BITS
          NJK    RILE7       IF LENGTH NOT MULTIPLE OF 8 ERROR
          LDML   INDLST+3,T6  GET LOWER HALF OF ADDRESS FROM LIST
          LPN    7           MASK OFF LOWER THREE BITS OF ADDRESS
          NJK    RILE8       ERROR IF ADDRESS NOT ON A WORD BOUNDARY
          LDML   INDLST,T6   GET COMMAND AND FLAG FIELDS FROM INDIRECT
          NJK    RILE12      ERROR IF NOT ZERO
          ENDIF

          LDK    4
          RADL   T6          POINT TO NEXT ITEM IN LIST
          UJK    RIL1        RELOOP
 RNR      EJECT
** NAME - RNR
*
** PURPOSE - REQUEST NEXT-AVAILABLE RESPONSE.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 RNR      SUBR               ENTRY/EXIT
*
*         SET UP CONTROL WORDS FOR RESPONSE PACKET.
*
          LDK    FCAN        NEXT-AVAILABLE RESPONSE PACKET REQUEST
          STML   XCWB+4      STORE FUNCTION CODE
          RJM    WFF         WRITE FLAG FUNCTION
          NJN    RNR1

          RJM    RRP         READ RESPONSE PACKET
          ZJN    RNR1        IF RESPONSE PACKET SUCCESSFULLY READ

          RJM    EMAP
 RNR1     RETURN             EXIT
 RQLKA    SPACE  4,20
** NAME - RQLKA
*
** PURPOSE - DETERMINE IF THE COMMAND IS IN THE REQUEST BUFFER
*            FOR A LOOK AHEAD SEQUENCE
*
** INPUT - CMDADR, CMDADR1 CONTAIN THE CURRENT COMMAND ADDRESS
*          LAFLG IS NON-ZERO TO INDICATE THAT THE CURRENT COMMAND
*            MUST BE THE FIRST IN THE BUFFER IF A READ NEXT
*            SEGMENT IS REQUIRED
*
** OUTPUT - LAFLG RESET TO ZERO
*
          SPACE  2,10
 RQLKA    SUBR
          LDDL   CMDADR      FETCH CURRENT COMMAND ADDRESS
          ADK    4           ADD COMMAND LENGTH IN PP WORDS
          ADK    -REQBUFE    SUBTRACT END OF BUFFER ADDRESS
          MJN    RQLKA5      NEXT COMMAND IS ALREADY IN BUFFER
          LDDL   XRQI        FETCH COMMAND OFFSET
          STML   RDSEGA      PROVIDE FOR READ ROUTINE
          RJM    RDSEG       GO READ NEXT SEGMENT
 RQLKA5   LDK    0
          STDL   LAFLG       CLEAR LOOK AHEAD FLAG
          RETURN
 RQP      EJECT
** NAME - RQP
*
** PURPOSE - REQUEST PACKET PROCESSING.
*
** INPUT - (NONE)
*
** OUTPUT - NONE
*
          SPACE  2,10
 RQP1     BSS    0
          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          LDK    ERC505      INVALID LENGTH IN COMMAND
          RJM    EPC         ERROR PP(NOS/VE) COMMAND SEQUENCE

*         NO RETURN.  RJM RECORDS ADDRESS OF ERROR ROUTINE.

          ENDIF

 RQP      SUBR               ENTRY/EXIT

          LDK    IOBUF       SET INPUT BUFFER FWA FOR NEW REQUEST
          STML   RQP3A
          STML   RQP4A
          STDL   T2

          LDDL   XRQI
          STDL   MPCMDI

*         READ IN THE REQUEST PACKET.

 RQP0     BSS    0
          LDIL   CMDADR1     GET LENGTH FOR WRITE COMMAND
          STDL   BYTCNT      SAVE BYTE COUNT FOR THIS TRANSFER

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5=0
          MJK    RQP1        ERROR IF TRANSFER COUNT IS NEG (TOO BIG)
          ZJK    RQP1        ERROR IF TRANSFER COUNT IS ZERO
          SBDL   MAXIO1      SUBTRACT MAX TRANSFER SIZE + 1
          PJK    RQP1        ERROR IF TRANSFER COUNT IS TOO LARGE
          LDDL   BYTCNT      RESTORE BYTE COUNT
          ENDIF

          SHN    -1          CONVERT TO PP WORD COUNT
          ADDL   T2          ADD CURRENT BUFFER POINTER
          ADK    -7770B      BUFFER END+1
          PJN    RQPE2       ACCUMULATED + THIS SEGMENT IS TOO BIG

          LDDL   BYTCNT      RESTORE REQUEST PACKET BYTE COUNT
          ADK    7
          SHN    -3          CONVERT BYTE COUNT TO CM WORD COUNT
          STDL   T5          SAVE CM WORD COUNT FOR CM READ
          LDIL   CMDADR      GET COMMAND AND FLAGS
          LPK    /CM/K.INDIR MASK OFF INDIRECT BIT
          ZJN    RQP4        JUMP IF THERE IS NOT AN INDIRECT LIST

          IFEQ   ILRRP,1                                    ***** ****
          RJM    RIL         READ INDIRECT LIST

*         DETERMINE IF THERE IS ENOUGH ROOM.

          LDDL   BYTCNT      TOTAL BYTE COUNT
          SHN    -1          CONVERT TO PP WORDS
          ADDL   T2          ADD CURRENT BUFFER POINTER
          ADK    -7770B
          MJN    RQP3        IT WILL FIT
 RQPE2    BSS    0
          LDK    RPE02       MAP-V - REQUEST PACKET ERROR   ** RPE02 **
 RQP5     RJM    EMAP        ERROR HANDLING ROUTINE
          UJK    DER         ABNORMAL ERROR PROCESSING

 RQP3     LDK    IOBUF
 RQP3A    EQU    *-1
          RJM    RDI         READ DATA USING INDIRECT LIST
          UJN    RQP6
          ENDIF                                             * * * ** *

 RQP4     RJM    LF2         SET UP A AND R (LOADF  2,CMDADR)
          CRML   IOBUF,T5    READ REQUEST PACKET FROM CM
 RQP4A    EQU    *-1

 RQP6     BSS    0
          LDML   CMIFLG      CHECK FOR PACKED CMI REQUEST PROCESSING
          NJK    RQP14       JUMP TO CONTINUE CMI PROCESSING LOOP

          LDML   TQBE+/RQBP/P.LNG+1    REQUEST LENGTH
          SBN    5           REQUEST MINIMUM LENGTH WITHOUT CHECKSUM WORD
          PJN    RQP11       5 OR GREATER
          LDK    RPE01       MAP-V - REQUEST PACKET ERROR   ** RPE01 **
          UJK    RQP5

*         PUT RSN INTO REQUEST PACKET

 RQP11    LDDL   XRQA        REQUEST RMA UPPER
          STML   TQBE+/RQBP/P.RSN      UPPER HALF OF PACKED RSN
          LDDL   XRQA+1      REQUEST RMA LOWER
          STML   TQBE+/RQBP/P.RSN+1    LOWER BYTE OF RSN

*         WRITE A COPY OF RSN TO CM REQUEST BLOCK.

          IFEQ   ILRRP,1                                    ***** ****
          LDIL   CMDADR      GET COMMAND AND FLAGS
          LPK    /CM/K.INDIR MASK OFF INDIRECT BIT
          ZJN    RQP12       JUMP IF THERE IS NOT AN INDIRECT LIST
          LDK    /RQBP/C.JID       INDEX TO FWA OF PACKET
          RJM    GIA         GET INDEXED ADDRESS FROM INDIRECT LIST
          UJN    RQP13
          ENDIF                                             * * * ** *

 RQP12    RJM    LF2         SET UP A AND R (LOADF  2,CMDADR)
          ADK    /RQBP/C.RSN  INDEX TO FWA OF WORD CONTAINING RSN
 RQP13    CWML   TQBE+/RQBP/C.RSN*4,ONE   WRITE REQUEST PACKET RSN TO CM

*         INCREMENT I/O BUFFER POINTER TO INCLUDE SEGMENT READ IN

 RQP14    BSS    0

          LDDL   BYTCNT      FETCH SEGMENT LENGTH
          SHN    -1          GET PPU BYTES
          RADL   T2          ADDRESS OF NEXT USABLE OR CHECKSUM

*         DETERMINE IF NEXT CMD IS WRITE PARAMETER DATA.

          AODL   XRQI        INCREMENT COMMAND INDEX
          AODL   LAFLG       SET LOOK AHEAD FLAG
          RJM    RQLKA       SEE IF NEXT COMMAND IS IN BUFFER
          LDML   4,CMDADR    NEXT COMMAND AND FLAGS
          LPK    -/CM/K.CMILS  REMOVE POSSIBLE CMI LAST SEGMENT FLAG
          LMK    C.OUTP*400B+/CM/K.INDIR  MASK 2140(16)
          NJK    RQP15       NOT CMI
          AODL   XRQI        INCREMENT COMMAND INDEX
          AOML   CMIFLG      SET TO INDICATE CMI REQUEST PROCESSING

*         MOVE POINTER TO NEXT COMMAND TO PROCESS INDIRECT DATA LIST

          RJM    NEXTCMD
          RJM    RQPBIL      GO PROCESS INDIRECT DATA LIST

*         CHECK COMMAND SEQUENCE FOR PACKED CMI REQUEST

          AODL   LAFLG       SET LOOK AHEAD FLAG
          RJM    RQLKA       SEE IF NEXT COMMAND IS IN BUFFER
          LDML   4,CMDADR    COMMAND FOLLOWING WRITE DATA ON CMI
          SHN    -8D         SHIFT OFF FLAGS
          SBN    C.OUTP
          NJN    RQP15       JUMP TO COMPLETE UNPACKED CMI REQUEST

*         PACKED CMI REQUEST PROCESSING

          LDDL   T2          NEXT USABLE ADDRESS IN BUFFER
          STML   RQP3A       SAVE FOR READING NEXT SEGMENT
          STML   RQP4A
          RJM    NEXTCMD     POINT TO NEXT SEGMENT HEADER
          UJK    RQP0        GO PROCESS NEXT SEGMENT


*         UPDATE THE CURRENT COMMAND INDEX IN THE REQUEST.

 RQP15    BSS    0
          LDDL   MPCMDI
          SHN    8+2
          LMDL   XRQI
          SHN    8
          STML   REQBUF+/RQ/P.CMDIND

*         WRITE CURRENT COMMAND INDEX REQUEST WORD TO CM.

          LOADF  XRQA
          ADK    /RQ/C.CMDIND
          CWML   REQBUF+/RQ/P.CMDIND,ONE
          RJM    RQPCSM      GO CHECKSUM THE REQUEST PACKET
          RJM    WRP         WRITE REQUEST PACKET

          LDK    0
          STML   CMIFLG      CLEAR CMI REQUEST FLAG

          RETURN             EXIT
 RQPBIL   SPACE  4,20
** NAME - RQPBIL
*
** PURPOSE - BUILD AND REFORMAT CMI INDIRECT DATA LIST
*
** INPUT - T2 CONTAINS THE ADDRESS WHERE THE REFORMATTED LIST IS TO BE
*          STORED
*
** OUTPUT - REFORMATTED RMA AND LENGTH PAIRS ARE STORED INTO THE CORRECT
*           PLACE IN THE REQUEST PACKET
*
*
          SPACE  2,10
 RQPBIL   SUBR               ENTRY/EXIT

          LDIL   CMDADR1     GET LENGTH FOR WRITE COMMAND
          SHN    -3          FORCE BYTE COUNT TO CM WORD COUNT
          STDL   T5          SAVE CM WORD COUNT FOR CM READ
          LDIL   CMDADR      FETCH COMMAND AND FLAGS
          LPK    /CM/K.CMILS MASK END OF REQUEST FLAG
          STDL   P3          SAVE IN P3 TEMPORARILY

*         READ IN THE CMI ADDRESS LIST.

          LDDL   T2          CHECK WORD POINTER
          ADK    2           ALLOW FOR WORK AREA
          STML   RQPBA       CMI ADDRESSES READ LOCATION
          RJM    LF2         SET UP A AND R (LOADF  2,CMDADR)
          CRML   **,T5       READ CMI ADDRESSES FROM CM
 RQPBA    EQU    *-1

*         CHANGE ALL BYTE COUNTS TO CM WORD COUNTS
*            AND ALL BYTE ADDRESSES TO WORD ADDRESS.
*         ALSO REVERSE ORDER.  I.E. HOST ADDRESS FOLLOWED
*         BY HOST WORD COUNT AS SPECIFIED BY CMI HARDWARE.

*         INITIALIZE LOOP.
*         STORAGE FWA IS IN T2.

          LDK    0
          STDL   T3          WORD COUNTER

*         MANIPULATE ADDRESSES/BYTE COUNTS

 RQPB10   LDML   4,T2        RMA BYTE ADDRESS UPPER
          SHN    -3
          STIL   T2          RMA WORD ADDRESS UPPER
          AODL   T2
          LDML   3,T2        RMA BYTE ADDRESS UPPER
          LPN    7           ISOLATE 3 BITS
          SHN    15D-2
          STIL   T2
          LDML   4,T2        RMA BYTE ADDRESS LOWER
          SHN    -3
          RAIL   T2
          AODL   T2
          LDK    0
          STIL   T2          UPPER 16 OF HOST WORD COUNT
          AODL   T2
          LDIL   T2
          SHN    -3
          STIL   T2          HOST CM WORD COUNT
          AODL   T2

*         TEST FOR COMPLETION.

          AODL   T3          WORD COUNTER
          SBDL   T5          TOTAL WORDS
          MJK    RQPB10      MORE TO CONVERT

*         SET LAST WORD INDICATOR FOR CMI HARDWARE

          LDC    100000B     END OF REQUEST MARKER FOR UNPACKED CMI
          STIL   T2            OR END-OF-TRANSFER SPEC FOR PACKED
          LDDL   P3          FETCH TEMPORARY FLAG SAVE
          ZJN    RQPB20      JUMP IF NOT LAST ITEM IN PACKED CMI
          LDC    140000B     SET UPPER TWO BITS TO INDICATE LAST ITEM
          STIL   T2          NEXT BYTE
 RQPB20   BSS    0
          AODL   T2
          LDK    0
          STIL   T2          ZERO LOWER BYTE OF LAST WORD INDICATOR
          AODL   T2          SET POINTER TO NEXT USABLE ADDRESS

          RETURN             EXIT
 RQPCSM   SPACE  4,20
** NAME - RQPCSM
*
** PURPOSE - CHECKSUM MAP V REQUEST PACKET
*
** INPUT - T2 CONTAINS THE ADDRESS OF THE UPPER BYTE OF THE CHECKSUM
*
** OUTPUT - THE CHECKSUM WORD IS ADDED TO THE REQUEST PACKET
*
*
          SPACE  2,10
 RQPCSM   SUBR               ENTRY/EXIT

          LDK     TQBE+/RQBP/P.JID
          STDL    T4         ADDRESS OF FIRST WORD TO CHECKSUM
          LDIL    T4
          STIL    T2         INITIALIZE UPPER CHECKSUM BYTE
          AODL    T4
          LDIL    T4
          STML    1,T2       INITIALIZE LOWER CHECKSUM BYTE
          AODL    T4

 RQPC10   BSS     0
          LDML    1,T4
          RAML    1,T2       ADD LOWER BYTE VALUE
          SHN     -16D
          RAIL    T2         INCLUDE ANY CARRY
          ADIL    T4         ADD UPPER BYTE VALUE
          STIL    T2         STORE CHECKSUM UPPER BYTE

          LDK     2          INCREMENT TO NEXT MAP WORD
          RADL    T4
          SBDL    T2         SUBTRACT CHECKSUM WORD POINTER
          NJN     RQPC10     JUMP - MORE TO CHECKSUM

          RETURN             EXIT
 RRP      SPACE  4,20
** NAME - RRP
*
** PURPOSE - READ RESPONSE PACKET.
*
** INPUT - (NONE)
*
** OUTPUT - (A) = 0 - RESPONSE PACKET READ
*               = NONZERO - ERROR IN READING RESPONSE PACKET
*
          SPACE  2,10

 RRPX     BSS    0
 RRP      SUBR               ENTRY/EXIT
          LDK    FCRR        READ RESPONSE PACKET FUNCTION CODE
          RJM    OTF         OUTPUT THE FUNCTION
          NJK    RRPX
          RJM    WHNB        INPUT ONE WORD STATUS - PARITY CHECK
          NJK    RRPX
          LDK    TAPBL*5         PPU WC OF RESPONSE PACKET WORDS
          STDL   T0
          LDK    0
          STML   XERC        RESET TO ZERO
          LDK    TAPB+/MRSBP/P.JID  TBL-ACKNOWLEDGE/RESPONSE PACKET BUFFER
          RJM    INB         ACTIVATE, BLOCK INPUT AND DISCONNECT
          NJK    RRPX
          RJM    WNB         WAIT NOT BUSY STATUS
          NJK    RRPX

          IFEQ   HDW12BC,1   MAP-V CHANNEL INTERFACE IS 12/60 HARDWARE

*         PACK RESPONSE INTO THREE 64 BIT WORDS IN RESPONSE BUFFER
*         AREA.

          LDK    TAPBL       NUMBER OF CM WORDS TO WRITE 12/60 RESPONSE
          STDL   T5
          LDK    TAPB+/MRSBP/P.JID  ACKNOWLEDGE/RESPONSE PACKET BLOCK FWA
          STDL   T4
          RJM    RSZ         REFORMAT SIX ZERO (60) - (12/60 TO 16/64)
          ENDIF

*         CHECKSUM AND ISOLATE RSN.

          LDIL   T4          JID UPPER
          STML   XCSU        INITIALIZE CSUM UPPER ACCUMULATION
          AODL   T4
          LDIL   T4          JID LOWER
          STML   XCSL        INITIALIZE CSUM LOWER ACCUMLATION
          AODL   T4
          LDIL   T4          RSN UPPER BYTE
          STDL   XRQA        RQ RMA UPPER
          AODL   T4
          LDIL   T4          LOWER BYTE
          STDL   XRQA+1      SAVE RQ RMA
          SODL   T4          DECREMENT BY ONE TO SET UP FOR CSUM LOOP
 RRP2     LDML   1,T4
          RAML   XCSL        INCLUDE IN CSUM
          SHN    -16D
          RAML   XCSU        INCLUDE ANY CARRY
          ADIL   T4          INCLUDE UPPER BYTE
          STML   XCSU        CSUM UPPER
          LDK    2
          RADL   T4
          ADK    -TAPB-/MRSBP/P.CKSUM    CSUM ADDRESS
          MJK    RRP2        CONTINUE

*         COMPARE CHECKWORD.

          LDIL   T4          UPPER BYTE
          LMML   XCSU        ACCUMULATED CSUM UPPER
          ZJN    RRP4        NO ERROR
 RRP3     LDK    /RS/K.DATERR  CHECKWORD ERROR
          STML   RESBUF+/RS/P.DATERR  ABNORMAL STATUS FIELD
          RJM    HNG
 RRP3A    UJK    RRPX

 RRP4     LDML   1,T4        LOWER BYTE
          LMML   XCSL
          NJK    RRP3        ERROR

*         READ IN PP-RQ BLOCK BACK IN FROM CM USING RSN.

 RRP5     BSS    0           BYPASS CHECKSUM CHECK RE-ENTRY ******
          RJM    RDVREQ      READ AND VALIDATE UNIT REQUEST.
          ZJN    RRP5B
          LDK    URC.NRQ
          STML   RESBUF+/RS/P.URC
          UJK    RRP3A

 RRP5B    BSS    0

          LDML   REQBUF+/RQ/P.CMDIND
          LPK    /RQ/M.MAPIND
          STDL   MPCMDI
          LDML   REQBUF+/RQ/P.CMDIND
          SHN    8+2
          LPK    /RQ/M.CMDIND
          STDL   XRQI

          LDK    1
          STDL   UQFLG       SET UNIT QUEUE REQUEST FLAG.
          RJM    INTRES      INITIALIZE RESPONSE BUFFER FOR UNIT RESPONSE.

*         READ IN *JID* AND *RSN* OF REQUEST PACKET.
*         COMPARE WITH *JID* AND *RSN* OF RESPONSE PACKET
*         TO VALIDATE *RSN* POINTER.

          LDDL   MPCMDI
          STML   RDSEGA      SET OFFSET IN CASE OF SEGMENTED READ
          SHN    2
          ADK    REQBUF+/RQ/P.CMND  GET ADDR OF FIRST COMMAND
          STDL   CMDADR      SET COMMAND ADDRESS TO COMMAND CONTAINING MAP REQUEST.
          ADK    1
          STDL   CMDADR1
          ADK    -REQBUFE    SUBTRACT REQUEST BUFFER END ADDRESS
          MJN    RRP5C       START OF REQUEST ALREADY IN BUFFER
          RJM    RDSEG       FETCH NEXT REQUEST SEGMENT

 RRP5C    BSS    0
          LDML   REQBUF+/RQ/P.LEN  GET PACKET LENGTH
          SBN    HEADLN      SUBTRACT HEADER LENGTH
          SHN    -3          DIVIDE BY 8 TO GET CM WORDS OF COMMANDS
          SBDL   XRQI        REQUEST INDEX
          STDL   CMDNO       RESTORE NUMBER OF COMMANDS REMAINING
          PJN    RRP6

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          LDK    ERC501      INVALID COMMAND CODE
          RJM    EPC         ERROR PP(NOS/VE) COMMAND SEQUENCE

*         NO RETURN.  RJM RECORDS ADDRESS OF ERROR ROUTINE.

          ELSE
          UJN    0           HANG IF EFLAG5 IS OFF
          ENDIF

 RRP6     LDIL   CMDADR      GET COMMAND AND FLAGS
          SHN    -8          SHIFT OFF FLAGS
          SBN    C.OUTP      OUTPUT 8-BIT PARAMETERS
          ZJN    RRP7        MAP-V PROTOCOL REQUEST 21(16)

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          LDK    ERC501      INVALID COMMAND CODE
          RJM    EPC         ERROR PP(NOS/VE) COMMAND SEQUENCE

*         NO RETURN.  RJM RECORDS ADDRESS OF ERROR ROUTINE.

          ELSE
          UJN    0           HANG IF EFLAG5 IS OFF
          ENDIF

 RRP7     BSS    0

          IFEQ   ILRRP,1                                    ***** ****
          LDIL   CMDADR      GET COMMAND AND FLAGS
          LPK    /CM/K.INDIR MASK OFF INDIRECT BIT
          ZJN    RRP8        JUMP IF THERE IS NOT AN INDIRECT LIST
          RJM    RIL         READ INDIRECT LIST
          LDK    /RQBP/C.JID
          RJM    GIA         GET INDEXED ADDRESS FROM INDIRECT LIST
          UJN    RRP9
          ENDIF                                             * * * ** *

 RRP8     RJM    LF2         SET UP A AND R (LOADF  2,CMDADR)
          ADK    /RQBP/C.JID       INDEX TO FWA OF REQUEST PACKET
 RRP9     CRML   TQBE+/RQBP/P.JID,ONE   READ REQUEST PACKET *JID*/*RSN* FROM CM
*
*         COMPARE JIDS
*
          LDK    /RQBP/B.JID
          STDL   T1
 RRP10    SODL   T1
          MJN    RRP11       COMPARE COMPLETE
          LDML   TQBE+/RQBP/P.JID,T1    REQUEST PACKET
          LMML   TAPB+/MRSBP/P.JID,T1     RESPONSE
          ZJK    RRP10       NO ERROR

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          LDK    ERC501      INVALID COMMAND CODE
          RJM    EPC         ERROR PP(NOS/VE) COMMAND SEQUENCE

*         NO RETURN.  RJM RECORDS ADDRESS OF ERROR ROUTINE.

          ELSE
          UJN    0           HANG IF EFLAG5 IS OFF
          ENDIF


*         MOVE ON TO EXPECTED RESPONSE COMMAND (READ PARAMETER DATA).

 RRP11    BSS    0
          SODL   XRRC        REQUEST (+1) = RESPONSE (-1) COUNTER
          PJN    RRP11A      VALID POSITIVE NUMBER
          LDK    0
          STDL   XRRC        RESET TO ZERO
 RRP11A   LDDL   XRQI        RQ INDEX (CMD)
          STML   RDSEGA      SAVE IN CASE OF SEGMENTED READ
          SHN    2           MULTIPLY BY 4
          ADK    REQBUF+/RQ/P.CMND  GET ADDR OF FIRST COMMAND
          STDL   CMDADR      RESET COMMAND ADDRESS TO NEXT COMMAND
          ADK    1           ADDRESS OF LENGTH FIELD IN COMMAND
          STDL   CMDADR1     SAVE POINTER TO LENGTH FIELD
          ADK    -REQBUFE    SUBTRACT REQUEST BUFFER END ADDRESS
          MJN    RRP11B      END OF CURRENT REQUEST IN BUFFER
          RJM    RDSEG       GO READ END OF CURRENT REQUEST

 RRP11B   BSS    0
          LDK    0
          STML   RESBUF+/RS/P.RC  CLEAR RESPONSE CODE
          LDIL   CMDADR      GET COMMAND AND FLAGS

          SHN    -8D         SHIFT OFF FLAGS
          SBN    C.IND       INPUT 8-BIT DATA/PARAMETERS
          ZJN    RRP12       THIS IS EXPECTED CMD

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          LDK    ERC501      INVALID COMMAND CODE
          RJM    EPC         ERROR PP(NOS/VE) COMMAND SEQUENCE

*         NO RETURN.  RJM RECORDS ADDRESS OF ERROR ROUTINE.

          ELSE
          UJN    0           HANG IF EFLAG5 IS OFF
          ENDIF

*         WRITE RESPONSE TO CENTRAL MEMORY.
 RRP12    BSS    0

          IFEQ   ILRRP,1                                    ***** ****
          LDIL   CMDADR      GET COMMAND AND FLAGS
          LPK    /CM/K.INDIR MASK OFF INDIRECT BIT
          ZJN    RRP13       JUMP IF THERE IS NOT AN INDIRECT LIST
          RJM    RIL         READ INDIRECT LIST
          LDK    TAPB        DATA ADDRESS
          RJM    WDI         WRITE DATA USING INDIRECT LIST
          UJN    RRP14
          ENDIF                                             * * * ** *

 RRP13    LDK    C.MRSBP
          STDL   WC          SET RESPONSE CM WORD COUNT
          RJM    LF2         SET UP A AND R (LOADF  2,CMDADR)

          CWML   TAPB,WC     WRITE RESPONSE

 RRP14    BSS    0
          AODL   XRQI        BUMP INDEX IN CASE OF STACKED REQUESTS
          LDIL   CMDADR      GET COMMAND AND FLAGS
          LPK    /CM/K.CKRSP MASK CHECK RESPONSE PACKET STATUS BIT
          ZJN    RRP15       JUMP IF NO STATUS CHECK REQUESTS

          LDML   TAPB+/MRSBP/P.IST
          LMML   TAPB+/MRSBP/P.IST+1
          ZJN    RRP15       JUMP IF NO ERRORS

 RRP14A   BSS    0
          LDK    1           SET NUMBER OF REMAINING COMMANDS TO 1 TO
          STDL   CMDNO         FORCE BYPASS OF REMAINING COMMANDS
 RRP14X   UJK    DCP         COMPLETE COMMAND PROCESSING

 RRP15    BSS    0
          LDDL   CMDNO       NUMBER OF REMAINING COMMANDS
          SBN    1
          ZJK    RRP24       NO MORE COMMANDS TO PROCESS

*         IF MULTIPLE COMMAND SEQUENCE (STACKED MAP V REQUEST) OR
*            CHANNEL I/O, READ NEXT COMMAND WORD FOR FUNCTION CODE.

          AODL   LAFLG       SET LOOK AHEAD FLAG
          RJM    RQLKA       SEE IF NEXT COMMAND IN BUFFER
          LDML   4,CMDADR    GET COMMAND AND FLAGS
          SHN    -8D
          SBN    C.FUNC      FUNCTION COMMAND CODE
          ZJN    RRP17       0 = CHANNEL I/O SEQUENCE

          SBN    1           CHECK FOR FUNCTION CODE 21
          NJN    RRP16       ERROR - NOT 21 FUNCTION

*         IF FC = 21, THERE MUST BE AT LEAST 2 COMMANDS REMAINING TO
*            BE A VALID SEQUENCE

          LDDL   CMDNO
          SBN    2
          PJN    RRP14X      JUMP TO CONTINUE COMMAND PROCESSING

 RRP16    BSS    0           BAD SEQUENCE OF COMMANDS

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          LDK    ERC501      INVALID COMMAND CODE
          RJM    EPC         ERROR PP(NOS/VE) COMMAND SEQUENCE

*         NO RETURN.  RJM RECORDS ADDRESS OF ERROR ROUTINE.


          ELSE
          UJN    0           HANG IF EFLAG5 IS OFF
          ENDIF


 RRP17    LDML   7,CMDADR    GET HARDWARE FUNCTION CODE
          STML   XFCD        FUNCTION CODE - DATA I/O ON CHANNEL
          LDML   6,CMDADR    GET SOFTWARE FUNCTION TAG(S) (P32 FLAG)
          SHN    0-12D       ISOLATE UPPER HEX DIGIT
          STDL   XSFT        SOFTWARE FUNCTION TAG(S)
          RJM    NEXTCMD     POINT TO NEXT COMMAND
          SODL   CMDNO       DECREMENT NUMBER OF COMMANDS
          ZJK    RRP16       NO MORE TO GO

*         IF CHANNEL I/O, READ NEXT CMD WORD FOR ADDRESS LIST.

          LDML   4,CMDADR    GET COMMAND AND FLAGS
          SHN    -8D
          ADK    -C.WRITE    WRITE BYTE STRING (8-BIT)
          ZJN    RRP19       IS WRITE
          ADK    C.WRITE-C.READ
          ZJN    RRP18       IS READ BYTE STRING (8-BIT)
          UJK    RRP24

 RRP18    LDK    1           READ FLAG
 RRP19    STML   XRDF
          SODL   CMDNO       DECREMENT NUMBER OF COMMANDS
          RJM    NEXTCMD     POINT TO NEXT COMMAND

*         IT IS CHANNEL AND DATA TRANSFER INVOLVED.
*         READ IN THE TABLE OF ADDRESSES.

          LDIL   CMDADR      GET COMMAND AND FLAGS
          LPK    /CM/K.INDIR MASK OFF INDIRECT BIT
          ZJN    RRP22       JUMP IF NOT AN INDIRECT LIST
          RJM    RIL         READ INDIRECT LIST
          LDIL   CMDADR1     GET LENGTH OF INDIRECT LIST
          SHN    -3          CONVERT TO CM WORDS
 RRP23    STDL   T3          INDIRECT LIST LENGTH (LOOP COUNTER)
          RJM    MCL         MAIN-MEMORY CHANNEL LOAD/UNLOAD

 RRP24    LDK    0
          RETURN             EXIT

 RRP22    LDIL   CMDADR1     GET LENGTH
          STDL   BYTCNT      SAVE BYTE COUNT FOR THIS TRANSFER

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          UJN    RRP21       JUMP OVER ERROR REPORTING
          ENDIF

 RRP20    BSS    0

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          LDK    ERC505      INVALID LENGTH IN COMMAND
          RJM    EPC         ERROR PP(NOS/VE) COMMAND SEQUENCE

*         NO RETURN.  RJM RECORDS ADDRESS OF ERROR ROUTINE.

          ENDIF

 RRP21    BSS    0

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5=0
          MJK    RRP20       ERROR IF TRANSFER COUNT IS NEG (TOO BIG)
          ZJK    RRP20       ERROR IF TRANSFER COUNT IS ZERO
          SBDL   MAXIO1      SUBTRACT MAX TRANSFER SIZE + 1
          PJK    RRP20       ERROR IF TRANSFER COUNT IS TOO LARGE
          ENDIF


*         SET APPROPRIATE CELLS TO MAKE IT LOOK LIKE ONE WORD
*         INDIRECT LIST.

          LDDL   BYTCNT
          STML   INDLST+1    MOVE BYTE COUNT
          LDML   2,CMDADR
          STML   INDLST+2    MOVE UPPER ADDRESS
          LDML   3,CMDADR
          STML   INDLST+3    MOVE LOWER ADDRESS
          LDK    1           INDIRECT LIST LENGTH
          UJK    RRP23       CONTINUE

 RSF      SPACE  4,20
** NAME - RSF
*
** PURPOSE - REFORMAT SIX FOUR (64) BIT DATA.
*            ASSUME 64 BIT CM PARAMETER DATA WAS READ INTO PPU MEMORY
*            AS 4-16 BIT BYTES.
*            THIS ROUTINE REFORMATS THIS PARAMETER DATA FOR OUTPUT
*            ON 12-BIT CHANNEL TO MAP-V 60-BIT INTERFACE.
*
** INPUT - (A) = FWA OF 16/64-BIT DATA.
*          (T4) = ADDRESS FOR STORAGE OF 12/60-BIT DATA.
*          (T5) = NUMBER OF 64-BIT CM WORDS TO REFORMAT.
*
** OUTPUT - (T4) = LWA+1-10D OF 12/60 BIT BYTES.
*
          SPACE  2,10
 RSF      SUBR               ENTRY/EXIT

*         (A) = FWA OF 16/64 BIT DATA.

          STML   RSFB
          STML   RSFC        SET FIRST 60-BIT READ ADDRESS
          SBN    2           FORM OFFSET ADDRESS FOR WRITE
          STML   RSFA
          ADK    5+2
          STML   RSFD        SET SECOND 60-BIT READ ADDRESS
          LDML   PPTBL+/PIT/P.CBUFL  PPU COMM. BUFFER LENGTH
          SHN    -4          FORM CM-WORD-CNT/2
          SBDL   T5          TOTAL CM COUNT
          SBN    1           ALLOW FOR EXTRA WORD ON READ BACK
          PJN    RSFE        WILL FIT INTO BUFFER ALLOCATED
          RJM    HNG         HANG IT FOR NOW ***************
 RSFE     LOADF  PPTBL+/PIT/P.CBUF  REFORMAT AND LOAD CM ADDR OF CBUF
          STDL   T1          SAVE STARTING ADDRESS
          CWML   **,T5       WRITE DATA TO CM (2 BYTE NEGATIVE OFFSET)
 RSFA     EQU    *-1         FWA OF 16/64-BIT DATA -2
          ADK    1           ALLOW FOR EASIER INDEXING ON READ
          CWML   **,T5       WRITE DATA TO CM (NORMAL)
 RSFB     EQU    *-1         FWA OF 16/64-BIT DATA
          LDK    0
          STDL   T2          INITIALIZE COUNTER

*         READ BACK ONE WORD AT A TIME FROM ALTERNATE AREAS
*         IN 12/60 BIT FORMAT.

 RSF2     LDDL   T1          RESTORE STARTING ADDRESS
          LMK    400000B     TURN ON R REGISTER
          CRM    **,ONE      ONE WORD 60-BIT READ PART 1 DATA
 RSFC     EQU    *-1         START AT FWA
          ADDL   T5          NEXT GROUP
          CRM    **,ONE      ONE WORD 60-BIT READ PART 2 DATA
 RSFD     EQU    *-1         START AT FWA+5
          LDK    0
          STIL   T4          ZERO 1ST 12 BIT BYTE
          STML   1,T4        ZERO 2ND 12 BIT BYTE
          STML   5,T4        ZERO 5TH 12 BIT BYTE
          STML   6,T4        ZERO 6TH 12 BIT BYTE
          LDML   2,T4
          LPK    377B        ISOLATE 8 BITS
          STML   2,T4
          LDML   7,T4
          LPK    377B        ISOLATE 8 BITS
          STML   7,T4        BYTE 2 PART 2
          AODL   T2          INCREMENT WORD COUNTER
          SBDL   T5          TOTAL WORDS
          PJN    RSF3        DONE
          LDK    10D
          RAML   RSFC        INCREMENT NEXT PPU READ ADDRESS PART 1
          STDL   T4
          LDK    10D
          RAML   RSFD        INCREMENT NEXT PPU READ ADDRESS PART 2
          AODL   T1          INCREMENT STARTING ADDRESS COUNTER
          UJK    RSF2        CONTINUE

 RSF3     RETURN             EXIT
 RSP      SPACE  4,20
** NAME - RSP
*
** PURPOSE - WRITE STATUS BUFFER TO CM RESPONSE BUFFER.
*
** INPUT - CM.PIT, CM.RS, LIM, /PIT/IN, /PIT/OUT, RS+/RS/P.RESPL
*
** OUTPUT - /PIT/IN, RESPONSE BUFFER
*
          SPACE  2,10
 INP      EQU    P4          IN POINTER
 OUTP     EQU    P5          OUT POINTER
          SPACE  2,10
 RSP      SUBR               ENTRY/EXIT

*         MOVE IN STATUS WORDS.

          LDDL   PST         PREVIOUS STATUS WORD 1
          STML   RESBUF+/RS/P.GSP1
          LDDL   PST+1       PREVIOUS STATUS WORD 2
          STML   RESBUF+/RS/P.GSP2
          LDDL   ST          CURRENT STATUS WORD 1
          STML   RESBUF+/RS/P.GSC1
          LDDL   ST+1        CURRENT STATUS WORD 2
          STML   RESBUF+/RS/P.GSC2
          LDK    0           GET TRANSFER COUNT - UPPER BYTE
          STML   RESBUF+/RS/P.XFER+0  SET XFER CNT IN RESPONSE BUFFER
          LDDL   BYTCNT      GET TRANSFER COUNT - LOWER BYTE
          STML   RESBUF+/RS/P.XFER+1  SET XFER CNT IN RESPONSE BUFFER
          LDDL   CMDADR      GET PP ADDRESS OF LAST COMMAND
          ADC    -REQBUF     GET PP WORDS INTO REQUEST
          SHN    1           CM BYTES INTO REQUEST
          ADML   RESBUF+/RS/P.REQ+1  ADD ON HALF 2 OF REQUEST BUFFER RMA
          STML   RESBUF+/RS/P.LASTC+1  RMA HALF 2 OF LAST COMMAND
          SHN    -16         GET CARRY IF ANY
          ADML   RESBUF+/RS/P.REQ  ADD ON HALF 1 OF REQUEST BUFFER RMA
          STML   RESBUF+/RS/P.LASTC  RMA OF HALF 1 OF LAST COMMAND

*         READ IN AND OUT POINTERS OF RESPONSE BUFFER.

 RSP1     LOADC  CM.PIT      LOAD ADDRESS OF PP INTERFACE TABLE
          ADK    /PIT/C.OUT  OFFSET OF OUT POINTER
          CRDL   P2          READ OUT POINTER
          SBN    /PIT/C.OUT-/PIT/C.IN  OFFSET OF 'IN' POINTER
          CRDL   P1          READ 'IN' POINTER

*         CHECK IF THERE IS ROOM FOR THE RESPONSE IN THE RESPONSE BUFFER.

          LDDL   INP
          SBDL   OUTP
          MJN    RSP2        IF IN .LT. OUT
          LDDL   LIM         IN .GE. OUT, SET OUT = OUT + LIMIT
          RADL   OUTP
 RSP2     LDML   RESBUF+/RS/P.RESPL  GET RESPONSE LENGTH
          STDL   T1
          SBDL   LIM
          ZJN    RSP3        IF RESPONSE FITS INTO BUFFER
          PJN    *           RESPONSE IS TOO LARGE FOR BUFFER, HANG ***
 RSP3     LDK    0
          STDL   T2          FLAG TO DETERMINE IF 1 OR 2 BLOCK WRITES
          LDDL   INP
          RADL   T1          IN + RESPONSE LENGTH
          SBDL   OUTP        CHECK IF ENOUGH ROOM IN BUFFER FOR RESPONSE
          PJK    RSP1        IN NOT ENOUGH ROOM IN BUFFER, LOOP
          LDDL   T1
          SBDL   LIM
          MJN    RSP4        IF IN + RESPONSE LENGTH .LT. LIMIT
          STDL   T1          IN + RESPONSE LENGTH - LIMIT = NEW 'IN' PTR
          AODL   T2          2 BLOCK WRITES REQUIRED

*         WRITE RESPONSE TO CM.

 RSP4     BSS    0
          LDDL   INP
          SHN    -3
          STDL   T3          'IN' POINTER IN WORDS
          LDML   RESBUF+/RS/P.RESPL  CONVERT RESPONSE LENGTH TO WORDS
          SHN    -3
          STDL   T4          RESPONSE LENGTH IN WORDS
          STDL   T5
          LDDL   T2
          ZJN    RSP5        IF ONLY 1 BLOCK WRITE REQUIRED
          LDDL   LIM         FIRST BLOCK WRITE = (LIMIT - IN) WORDS
          SBDL   INP
          SHN    -3
          STDL   T4          NUMBER OF WORDS TO TRANSFER ON 1ST BLOCK
          SHN    2           CONVERT TO NUMBER OF PP WORDS
          ADK    RESBUF
          STML   RSPA        RESPONSE ADDRESS FOR 2ND BLOCK WRITE
 RSP5     LOADC  CM.RS       LOAD CM ADDRESS OF RESPONSE BUFFER
          STDL   T6          SAVE CM ADDRESS
          ADDL   T3          ADD 'IN' OFFSET
          CWML   RESBUF,T4   WRITE RESPONSE TO CM
          LDDL   T5          RESPONSE LENGTH
          SBDL   T4
          ZJN    RSP6        IF ONLY 1 BLOCK WRITE REQUIRED
          STDL   T5          RESPONSE LENGTH - (LIMIT - IN)
          LDDL   T6          LOAD ADDRESS OF RESPONSE BUFFER
          LMK    400000B
          CWML   **,T5       WRITE 2ND PART OF RESPONSE TO CM
                             (BEGINNING OF RESPONSE BUFFER)
 RSPA     EQU    *-1

 RSP6     LDDL   T1          NEW IN POINTER
          STML   INPNT

*         SET UP INTERRUPT PROCESSOR INSTRUCTION IF INTERRUPT IS
*         SELECTED.

          LDML   RESBUF+/RS/P.INT  CHECK IF INTERRUPT WAS SELECTED
          LPK    /RS/K.INT
          NJN    RSP7        IF INTERRUPT SELECTED
          LDC    2400B       PSN INSTRUCTION
          UJN    RSP8

 RSP7     LDML   RESBUF+/RS/P.PORT  PROCESSOR PORT NUMBER TO INTERRUPT
          SHN    -16+/RS/L.PORT+/RS/N.PORT
          LPK    /RS/M.PORT
          ADC    102600B     INPN INSTRUCTION
 RSP8     STML   UIPA
          RJM    UIP         UPDATE IN POINTER
          RETURN             EXIT
 RSZ      SPACE  4,20
** NAME - RSZ
*
** PURPOSE - REFORMAT SIX ZERO (60) BIT DATA.
*            ASSUME 60 BIT DATA WAS READ INTO PPU MEMORY
*            AS 5-12 BIT BYTES FROM 12 BIT CHANNEL INTERFACE.
*            THIS ROUTINE REFORMATS THIS DATA FOR WRITING INTO
*            CENTRAL MEMORY AS 64 BIT DATA.
*
** INPUT - (A) = FWA OF 12/60-BIT DATA.
*          (T4) = ADDRESS FOR STORAGE OF 16/64-BIT DATA.
*          (T5) = NUMBER OF 60-BIT CM WORDS TO REFORMAT.
*
** OUTPUT - (T5) = NUMBER OF 64-BIT CM WORDS.
*
          SPACE  2,10
 RSZ      SUBR               ENTRY/EXIT

*         (A) = FWA OF 12/60 BIT DATA.

          STML   RSZA
          LDML   PPTBL+/PIT/P.CBUFL  PPU COMM. BUFFER LENGTH
          SHN    -3          FORM CM-WORD-CNT
          SBDL   T5          TOTAL CM COUNT
          PJN    RSZC        WILL FIT INTO BUFFER ALLOCATED
          RJM    HNG         HANG IT FOR NOW ***************
 RSZC     LOADF  PPTBL+/PIT/P.CBUF  REFORMAT AND LOAD CM ADDR OF CBUF
          CWM    **,T5       WRITE DATA TO CM
 RSZA     EQU    *-1         FWA OF 12/60-BIT DATA
          STDL   T1          SAVE ENDING ADDRESS

*         SET UP TO DO A SERIES OF REVERSE READS FROM CM.

          LDDL   T5          60-BIT CM WORD COUNT
          SHN    1           FORM NUMBER OF 16-BIT BYTES OF DATA
          ADDL   T4          FORM LWA+1 FOR PACKED DATA IN PP
          SBN    4           DECREMENT BY FOUR FOR *CRML* INSTRUCTION
          STML   RSZB        SET CM READ ADDRESS
 RSZ1     SODL   T1          FORM NEXT CM LWA
          LMK    400000B     TURN ON R REGISTER
          CRML   **,ONE
 RSZB     EQU    *-1
          LCN    2
          RAML   RSZB        DECREMENT ADDRESS BY 2
          SBDL   T4
          PJN    RSZ1        MORE TO GO

*         READ FINAL CM BLOCK (IE FIRST CM WORD) AND MOVE TWO BYTES
*         TO BUFFER.

          SODL   T1          FORM NEXT CM LWA
          LMK    400000B     TURN ON R REGISTER
          CRML   HCS,ONE     HIGH CORE SCRATCH
          LDML   HCS+2       FIRST 16-BIT BYTE
          STIL   T4          MOVE TO FIRST LOCATION
          LDML   HCS+3       NEXT 16-BIT BYTE
          STML   1,T4
          LDDL   T5          60-BIT CM WORD COUNT
          SHN    -1          DIVIDE BY 2
          NJN    RSZ2
          LDK    1           DO NOT ALLOW COUNT TO GO TO ZERO
 RSZ2     STDL   T5          NUMBER OF 64-BIT WORDS
          RETURN             EXIT
 SAU      SPACE  4,20
** NAME - SAU
*
** PURPOSE - SCAN ACTIVE UNIT(S).
*            TO SCAN ALL ACTIVE UNITS LOOKING FOR UNIT READY CHANGES.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 SAU      SUBR               ENTRY/EXIT
          LDDL   SCNFLG      GET SCAN FLAG
          ZJN    SAU1        IF SCAN FLAG NOT SET, RETURN
          LDDL   XRRC        REQUEST (+1) = RESPONSE (-1) COUNTER
          ZJN    SAU1        NO OUTSTANDING RESPONSES
          RJM    CRB         CLEAR RESPONSE BUFFER (NOS/VE)
          LDK    URC.RN
          RJM    SURESP      SETUP RESPONSE BUFFER FOR UNSOLICITED RESPONSE
          RJM    I2S         INPUT TWO WORD STATUS
          NJN    SAU2
          LDDL   ST+1        STATUS WORD 2
          LPK    /MPSSTS/K.RESA
          ZJN    SAU1        NO RESPONSE PACKETS (ANY ID) AVAILABLE
          RJM    RNR         READ NEXT-AVAILABLE RESPONSE PACKET
          NJN    SAU2
          UJK    DCP         DO COMMMAND-COMPLETE PROCESSING
 SAU2     RJM    RSP         SEND RESPONSE TO CPU
 SAU1     RETURN             EXIT
 SDP      SPACE  4,20
** NAME - SDP
*
** PURPOSE - SET-UP DATA-TRANSFER PARAMETERS.
*
** INPUT - (NONE)
*
** OUTPUT - (A) = DATA FWA.
*           (T0) = PP CHANNEL WORD COUNT.
*           (F16BIO) = 1 = 16 BIT I/O.  0 = 12 BIT I/O.
*
          SPACE  2,10
 SDP      SUBR               ENTRY/EXIT
          LDDL   XPWB        SIZE OF TRANSFER
          STDL   T0
          LDDL   XSFT        SOFTWARE FUNCTION TAG(S)
          LPN    1
          STDL   F16BIO      STORE AS FLAG FOR 16 OR 12 BIT MEMORY I/O
          ZJN    SDP4        12 BIT MEMORY I/O

          LDDL   T0
          LMK    BFDP16      FULL BUFFER OF 16 BIT WORDS
          ZJN    SDP2        IS FULL BLOCK
          LDDL   T0
          SHN    1           MAKE CM BYTES
          STDL   BYTCNT      SET UP FOR *CBC*
          RJM    CBC         CONVERT BYTE COUNT TO 12-BIT CHANNEL WORDS
          LDDL   IOCNT
          UJN    SDP3
 SDP2     LDK    BFDP16*4/3
 SDP3     STDL   T0
 SDP4     LDK    BFDZ        ADDRESS OF DATA IN PP
          RETURN             EXIT
 SLB      SPACE  4,20
** NAME - SLB
*
** PURPOSE - SET LOCKWORD BIT.
*
** INPUT - A AND R POINT TO CM CELL TO BE LOCKED
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 SLB      SUBR               ENTRY/EXIT

*         SET LOCK BIT.

          LDIL   T4          TABLE ADDRESS
          STDL   CMADR
          LDML   1,T4
          STDL   CMADR+1
          LDML   2,T4
          STDL   CMADR+2
          LDC    100000B     SET UNIT LOCK BIT
          STDL   T1
          LDK    0
          STDL   T2
          STDL   T3
          STDL   T4
          LOADR  CMADR       UNIT/PP INTERFACE TABLE ADDRESS
          ADDL   T5          ADD LOCKWORD OFFSET, SAVE CM ADDRESS
          STDL   T6          SAVE CM ADDRESS
          RDSL   T1          SET LOCK BIT IN UNIT LOCKWORD

*         CHECK IF LOCK WAS OBTAINED.

          LDDL   T1
          ADDL   T2
          ADDL   T3
          ADDL   T4
          ZJN    SLB2        LOCK OK TO SET

*         LOCK COULD NOT BE SET, EXIT A .NE. 0.

 SLB1     RETURN             EXIT

*         SET PP NUMBER IN LOCKWORD.

 SLB2     LDDL   PPNO
          STDL   T4
          LDDL   T6          CM ADDRESS OF UNIT LOCK.
          LMK    400000B
          RDSL   T1          SET PP NUMBER IN LOCKWORD

*         CHECK IF LOCK WAS CORRECT BEFORE LAST RDSL OPERATION.

          LDDL   T1
          ADC    -100000B
          NJK    SLB4
          LDDL   T2
          ADDL   T3
          ADDL   T4
          ZJK    SLB1        IF NO ERROR, EXIT

 SLB3     RJM    HNG         ERROR IN LOCKWORD

*         CHECK FOR LOCKWORD = FFFF FFFF XXXX XXXX(16).

 SLB4     LDDL   T1
          ADC    -177777B
          NJN    SLB3
          LDDL   T2
          ADC    -177777B
          NJK    SLB3
          LDK    0
          STDL   T1
          STDL   T2
          STDL   T3
          UJK    SLB2


 SQL      SPACE  4,20
** NAME - SQL
*
** PURPOSE - SET QUEUE LOCK IN THE UNIT INTERFACE TABLE.
*
** INPUT - (NONE)
*
** OUTPUT - A REGISTER = 0, IF LOCK WAS SUCCESSFULLY SET.
*                   .NE. 0, IF LOCK COULD NOT BE SET.
          SPACE  2,10
 SQL      SUBR               ENTRY/EXIT
          LDK    1
          STDL   UQLOCK      SET UNIT QUEUE LOCKED FLAG
          LDK    CM.UIT      UNIT INTERFACE TABLE ADDRESS
          STDL   T4
          LDK    /UIT/C.QLOCK  OFFSET OF QUEUE LOCKWORD
          STDL   T5
          RJM    SLB         SET LOCKWORD BIT
          ZJN    SQL1        RETURN IF LOCK WAS SUCCESSFULLY SET
          LDK    0
          STDL   UQLOCK      CLEAR LOCK FLAG IF UNIT QUEUE NOT LOCKED
          LDK    1           SET NO LOCK INDICATOR
 SQL1     RETURN             EXIT
 SUL      SPACE  4,20
** NAME - SUL
*
** PURPOSE - SET UNIT LOCK IN THE UNIT INTERFACE TABLE.
*
** INPUT - (NONE)
*
** EXIT - A REGISTER = 0, IF LOCK WAS SUCCESSFULLY SET.
*                    .NE. 0, IF LOCK COULD NOT BE SET.
          SPACE  2,10
 SUL      SUBR               ENTRY/EXIT
          LDK    1
          STDL   ULOCK       SET UNIT LOCKED FLAG
          LDK    CM.UIT      UNIT INTERFACE TABLE ADDRESS
          STDL   T4
          LDK    /UIT/C.ULOCK  OFFSET OF UNIT LOCKWORD
          STDL   T5          SET LOCKWORD
          RJM    SLB         SET LOCKWORD BIT
          ZJN    SUL1        EXIT IF LOCK WAS SET
          LDK    0
          STDL   ULOCK       CLEAR LOCK FLAG IF UNIT NOT LOCKED
          LDK    1           SET NO LOCK INDICATOR
 SUL1     RETURN             EXIT
 SUR      SPACE  4,20
** NAME - SUR
*
** PURPOSE - SET UP RESPONSE BUFFER.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 SUR      SUBR               ENTRY/EXIT
          LDML   REQBUF+/RQ/P.LU
          STML   RESBUF+/RS/P.LU  PUT LOGICAL UNIT IN RESPONSE BUFFER
          LDML   REQBUF+/RQ/P.RECOV
          STML   RESBUF+/RS/P.RECOV  RECOVERY, INTERRUPT, PORT,PRIORITY
          LDML   REQBUF+/RQ/P.LONGB
          STML   RESBUF+/RS/P.LONGB  PUT ALERT MASK IN RESPONSE BUFFER
          LDML   REQBUF+/RQ/P.NEXT
          STML   RESBUF+/RS/P.REQ  REQUEST RMA HALF 1 TO RESPONSE BUFFER
          LDML   REQBUF+/RQ/P.NEXT+1                                           Q
          STML   RESBUF+/RS/P.REQ+1  REQUEST RMA HALF 2 TO RESPONSE
          LDML   REQBUF+/RQ/P.NEXTPV
          STML   RESBUF+/RS/P.PVA  REQUEST PVA PART 1 TO RESPONSE BUFFER
          LDML   REQBUF+/RQ/P.NEXTPV+1
          STML   RESBUF+/RS/P.PVA+1  REQUEST PVA PART 2 TO RESPONSE BUFFER
          LDML   REQBUF+/RQ/P.NEXTPV+2
          STML   RESBUF+/RS/P.PVA+2  REQUEST PVA PART 3 TO RESPONSE
          RETURN             EXIT
 SURESP   SPACE  4,20
** NAME - SURESP
*
** PURPOSE - SET UNSOLICITED RESPONSE BUFFER VALUES.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 SURESP   SUBR
          STML   RESBUF+/RS/P.URC   STORE UNSOLICITED RESPONSE CODE
          LDK    LENRS2
          STML   RESBUF+/RS/P.RESPL SET RESPONSE LENGTH.
          LDK    R.UNS
          STML   RESBUF+/RS/P.RC    SET RESPONSE CODE TO UNSOLICITED
          LDML   UNITD+/UD/P.LU,UDPNT
          STML   RESBUF+/RS/P.LU    STORE LOGICAL UNIT NUMBER
          RETURN
          SPACE  2,15
*         JUMP TABLE FOR PP COMMANDS (INDEXED BY COMMAND CODE).

 TPCJ     CON    PC0         ACKNOWLEDGE
          CON    PC1         STOP UNIT
          CON    DCM..       PC2 - INVALID PP COMMAND
          CON    PC3         SELECT CONTROLLER
          CON    PC4         IDLE
          CON    PC5         RESUME
          CON    DCM..       EXECUTE OVERLAY (NO VE CAPABILITY)
          CON    PC7         START READY SCAN
          CON    PC8         STOP READY SCAN
          CON    DCM..       SELECT PP MEMORY ADDRESS
          CON    DCM..       COPY PP MEMORY (NOT IMPLEMENTED)
          CON    DCM..       PCB - INVALID PP COMMAND
          CON    DCM..       PCC - INVALID PP COMMAND
          CON    DCM..       PCD - INVALID PP COMMAND
          CON    DCM..       PCE - INVALID PP COMMAND
          CON    DCM..       PCF - INVALID PP COMMAND
          CON    PC10        ENABLE UNIT
          CON    PC11        DISABLE UNIT
          CON    PC12        POWER ON CONTROLLER
          CON    PC13        POWER OFF CONTROLLER
          CON    PC14        POWER ON UNIT
          CON    PC15        POWER OFF UNIT
          CON    PC16        MASTER-CLEAR CHANNEL
          CON    PC17        MASTER-CLEAR CONTROLLER
          CON    PC18        PC18 - INVALID PP COMMAND
          CON    PC19        PC19 - INVALID PP COMMAND
          CON    PC1A        PC1A - INVALID PP COMMAND
          CON    PC1B        PC1B - INVALID PP COMMAND
          CON    PC1C        PC1C - INVALID PP COMMAND
          CON    PC1D        PC1D - INVALID PP COMMAND
          CON    PC1E        PC1E - INVALID PP COMMAND
          CON    PC1F        PC1F - INVALID PP COMMAND
          CON    PC20        EXECUTE SUB-SYSTEM DIAGNOSTIC
          CON    PC21        EXECUTE CONTROLLER DIAGNOSTIC
          CON    PC22        EXECUTE UNIT DIAGNOSTIC
          SPACE  2,30
*         JUMP TABLE FOR UNIT COMMANDS (SEARCHED BY COMMAND CODE).
*         MOST FREQUENTLY USED COMMANDS ARE PUT AT BOTTOM OF TABLE.

 TUCJ     BSS    0
          CON    C.OUTD      23(16) - OUTPUT 8-BIT DATA
          CON    UC23

          CON    C.STATUS    60(16) - READ STATUS
          CON    UC60        STATUS MAPV

          CON    C.FUNC      20(16) - PHYSICAL COMMAND FUNCTION
          CON    UC20        DO FUNCTION

          CON    C.IND       25(16) - INPUT 8-BIT DATA/PARAMETERS
          CON    UC25        PROCESS JID RESPONSE

          CON    C.OUTP      21(16) - OUTPUT 8-BIT PARAMETERS
          CON    UC21        MAP-V PROTOCOL REQUEST
 TUCJL    EQU    *-TUCJ      LENGTH OF TABLE
          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          SPACE  4,10
*         VALID FUNCTION CODES FOR CONTROL OF THE MAP HARDWARE.

 TUC20F   BSS    0           TABLE UNIT COMMAND 20 FUNCTIONS
          CON    FCMC        MASTER CLEAR INTERFACE
          CON    FCWF        WRITE FLAG (FOLLOWED BY OUTPUT OF TWO
                                         60 BIT CONTROL WORDS)
          CON    FCWR        WRITE REQUEST (FOLLOWED BY OUTPUT OF
                                            REQUEST PACKET)
          CON    FCBW        BLOCK WRITE (FOLLOWED BY OUTPUT OF DATA)
          CON    FCRR        READ RESPONSE (FOLLOWED BY INPUT OF
                                            RESPONSE PACKET)
          CON    FCBR        BLOCK READ (FOLLOWED BY INPUT OF DATA)
          CON    FCHS1       READ HARDWARE STATUS WORD ONE
          CON    FCHS2       READ HARDWARE STATUS WORDS ONE AND TWO

*         SPECIAL HARDWARE FUNCTION CODES.

          CON    FCCS        CLEAR SEQUENCER
          CON    FCMD        MAIN-MEMORY DUMP (SET ADDRESS AND LENGTH)
          CON    FCML        MAIN-MEMORY LOAD (SET ADDRESS AND LENGTH)
          CON    FCPD        PUBLIC-MEMORY DUMP (SET ADDRESS AND LENGTH)
          CON    FCPL        PUBLIC-MEMORY LOAD (SET ADDRESS AND LENGTH)

*         DIAGNOSTIC FUNCTIONS.

          CON    FCT04       TEST XMIT/REC AND CABLE WITH
                               SIMPLE PATTERNS
*         FC     03X5B       TEST IOP NUMERICAL CONVERSION
                               UNIT DATA PATHS
          CON    FCT05       TEST C-170 60 BIT SINGLE PRECISION
                               FLOATING POINT FORMAT
          CON    FCT15       TEST C-170 60 BIT FIXED POINT FORMAT
          CON    FCT25       TEST C-170 30-BIT FLOATING POINT FORMAT
                               (MAP III EXTERNAL FORMAT)
          CON    FCT35       TEST RIGHTMOST 32-BIT OF C-170 60-BIT
                               WORD FORMAT
          CON    FCT06       TEST IOP COMMON LOGIC
 TUC20FL  EQU    *-TUC20F    LENGTH OF TABLE
          ENDIF
 UC20     SPACE  4,20
** NAME - UC20
*
** PURPOSE - UNIT COMMAND 20(16) - MAP-V FUNCTION.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 UC20     LDML   3,CMDADR    GET HARDWARE FUNCTION TO BE ISSUED
          STDL   FCNRCD      SAVE FUNCTION REQUEST CODE
          LPK    0700B
          LMK    0300B
          NJN    UC204       NOT MAP-V DIAGNOSTIC FUNCTION

          LDK    1
          STDL   DIAFND      SET DIAGNOSTIC FUNCTION WITH ASSOCIATED DATA FLAG
          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          LDDL   CMDNO       NUMBER OF COMMANDS
          SBN    3
          PJN    UC202       AT LEAST 2 COMMANDS AFTER 03XX FUNC.
          ENDIF

 UC201    BSS    0

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          LDK    ERC50A      LOAD INDEX FOR INVALID SEQ. OF COMMANDS
          RJM    EPC         ERROR PP(NOS/VE) COMMAND SEQUENCE

*         NO RETURN.  RJM RECORDS ADDRESS OF ERROR ROUTINE.

          ENDIF

 UC208    UJK    DER
 UC202    LDML   4,CMDADR    NEXT COMMAND
          SHN    -8D         REMOVE FLAGS
          SBN    C.OUTD      23(16) - OUTPUT 8-BIT DATA
          ZJN    UC203       VALID IF FOLLOWED BY READ

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          SBN    C.STATUS-C.OUTD  60(16) - READ STATUS
          NJK    UC201       NOT VALID
          ENDIF

          LDK    77B
          STDL   DIAFLG      SET DIAGNOSTIC FLAG TO INDICATE DELAY
          STDL   DIAFND      SET DIAGNOSTIC FUNCTION WITH ASSOCIATED DATA FLAG
          UJN    UC204       CONTINUE
 UC203    BSS    0

          IFNE   EFLAG5,0    TURN OFF COMMAND VALIDATION IF EFLAG5 = 0
          LDML   8,CMDADR    3RD COMMAND
          SHN    -8D
          SBN    C.IND       25(16) - INPUT 8-BIT DATA
          NJK    UC201       INVALID SEQUENCE
          ENDIF

          AODL   DIAFLG      SET DIAGNOSTIC FLAG
 UC204    LDDL   FCNRCD      FUNCTION REQUEST CODE
          RJM    OTF         DO THE FUNCTION
          NJK    UC208
          LDDL   DIAFLG
          ZJN    UC200       IF DIAGNOSTIC SEQUENCE NOT IN PROGRESS.
          LDDL   DIAFND
          NJN    UC209       IF DIAGNOSTIC SEQUENCE WITH ASSOCIATED DATA.

 UC200    RJM    WHNB        WAIT FOR HARDWARE NOT BUSY
          NJK    UC208
          RJM    ESO         CHECK ERROR BITS IN STATUS WORD 1.
          ZJN    UC209       IF NO ERROR BITS SET.
          RJM    EMAP
          UJK    UC208

 UC209    LDDL   DIAFLG
          LMK    77B         DELAY INDICATOR
          ZJN    UC206       DELAY
 UC205    UJK    DCP         DO COMMMAND-COMPLETE PROCESSING
*
*         PUT IN DELAY OF APPROXIMATELY 10 SECONDS.
*
 UC206    SODL   DIAFLG      TURN OFF DELAY REQUEST
          LDK    10
          RJM    PAUSS        WAIT FOR 10 SECONDS.
          UJK    UC205       EXIT

 UC21     SPACE  4,20
** NAME - UC21
*
** PURPOSE - UNIT COMMAND 21(16) - MAP-V PROTOCOL.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 UC21     LDDL   FCNRCD      FUNCTION FLAG (NOS/VE CPU TO PP FUNCTION)
          NJN    UC213       FUNCTION SEQUENCE IN PROGRESS

*         OUTPUT REQUEST PACKET.

          RJM    RQP         REQUEST PACKET PROCESSING
 UC211    UJK    DCP4        RETURN TO MAIN LOOP VIA RETURN FROM DCM

*         FUNCTION SEQUENCE IN PROGRESS.
*         WRITE FLAG SEQUENCE IS EXPECTED AS NEXT OPERATION.

 UC213    ADK    -FCWF       FUNCTION CODE - WRITE FLAG
          ZJN    UC214       ACCEPTABLE SEQUENCE
          LDK    ERC50A      LOAD INDEX FOR INVALID SEQ. OF COMMANDS
          RJM    EPC         ERROR PP(NOS/VE) COMMAND SEQUENCE

*         NO RETURN.  RJM RECORDS ADDRESS OF ERROR ROUTINE.


 UC214    LDK    0
          STDL   FCNRCD      CLEAR FUNCTION FLAG
          RJM    LF2         SET UP A AND R (LOADF  2,CMDADR)
          CRML   XCWB,ONE    READ INTO COMMAND WORD BUFFER

          IFEQ   HDW12BC,1   MAP-V CHANNEL INTERFACE IS 12/60 HARDWARE

*         CONVERT 16/64 TO 12/60.

          LDK    1           NUMBER OF 64-BIT CM WORDS
          STDL   T5
          LDK    XCWB        FWA OF 16/64-BIT DATA
          STDL   T4          SET STORAGE ADDRESS OF 12/60-BIT DATA
          RJM    RSF         REFORMAT SIX FOUR (64) - (16/64 TO 12/60)
          LDK    2*5
          ELSE
          LDK    4           PPU WORD COUNT
          ENDIF

          STDL   T0          SET WORD COUNT
          LDK    XCWB        CONTROL WORD BLOCK FWA
          RJM    OTB         OUTPUT THE BUFFER
          ZJN    UC215
 UC216    UJK    DER
 UC215    UJK    DCP         DO COMPLETE-COMMMAND PROCESSING
 UC23     SPACE  4,20
** NAME - UC23
*
** PURPOSE - UNIT COMMAND 23(16) - MAP-V OUTPUT 8-BIT DATA.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 UC23     LDDL   FCNRCD      FUNCTION FLAG (NOS/VE CPU TO PP FUNCTION)
          NJN    UC232       FUNCTION SEQUENCE IN PROGRESS
 UC231    LDK    ERC50A      LOAD INDEX FOR INVALID SEQ. OF COMMANDS
          RJM    EPC         ERROR PP(NOS/VE) COMMAND SEQUENCE

*         NO RETURN.  RJM RECORDS ADDRESS OF ERROR ROUTINE.


 UC232    LDDL   DIAFLG      DIAGNOSTIC FLAG
          ZJK    UC231       NO DIAGNOSTIC SEQUENCE FLAG
          RJM    LF2         SET UP A AND R (LOADF  2,CMDADR)

          IFEQ   HDW12BC,1   MAP-V CHANNEL INTERFACE IS 12/60 HARDWARE
          CRM    IOBUF,ONE   ONE WORD 60-BIT READ
          LDK    5
          ELSE
          CRML   IOBUF,ONE   ONE 64 BIT READ
          LDK    4           PPU WORD COUNT
          ENDIF

          STDL   T0          SET WORD COUNT
          LDK    IOBUF       DATA FWA
          RJM    OTB         OUTPUT THE BUFFER
          NJK    UC216
 UC233    UJK    UC215       DO COMPLETE-COMMMAND PROCESSING
 UC25     SPACE  4,20
** NAME - UC25
*
** PURPOSE - UNIT COMMAND 25(16) - MAP-V INPUT 8-BIT DATA/PARAMETERS.
**                                 PROCESS JID RESPONSE.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 UC25     LDDL   DIAFLG      DIAGNOSTIC FLAG
          ZJK    DCP4        RETURN TO MAIN LOOP VIA RETURN FROM DCM

*         DIAGNOSTIC FLAG SET. CLEAR FLAGS AND DO ONE WORD READ.

 UC251    LDK    0
          STDL   FCNRCD      CLEAR FUNCTION FLAG
          STDL   DIAFLG      CLEAR DIAGNOSTIC FLAG

          IFEQ   HDW12BC,1   MAP-V CHANNEL INTERFACE IS 12/60 HARDWARE
          LDK    5
          ELSE
          LDK    4           PPU WORD COUNT
          ENDIF

          STDL   T0          SET WORD COUNT

*         READ THE DATA BACK IN.

          LDK    IOBUF+5     DATA FWA
          RJM    INB         INPUT THE BUFFER
          RJM    LF2         SET UP A AND R (LOADF  2,CMDADR)

          IFEQ   HDW12BC,1   MAP-V CHANNEL INTERFACE IS 12/60 HARDWARE
          CWM    IOBUF+5,ONE ONE WORD 60-BIT WRITE
          ELSE
          CWML   IOBUF+5,ONE ONE WORD 64-BIT WRITE
          ENDIF

 UC2510   UJK    UC233       DO COMPLETE-COMMMAND PROCESSING
 UC60     SPACE  4,20
** NAME - UC60
*
** PURPOSE - UNIT COMMAND 60(16) - MAP-V STATUS REQUEST.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 UC60     BSS    0
          RJM    I2S         INPUT TWO WORD STATUS
          NJK    DER
          RJM    LF2         SET UP A AND R (LOADF  2,CMDADR)
          CWDL   PST         WRITE PREVIOUS STATUS AND CURRENT STATUS
          UJK    UC2510      DO COMPLETE-COMMMAND PROCESSING
 UIP      SPACE  4,20
** NAME - UIP
*
** PURPOSE - UPDATE 'IN' POINTER IN THE CM RESPONSE BUFFER.
*
** INPUT - INPNT = NEW 'IN' POINTER.
*
** OUTPUT - (NONE)
*
          SPACE  2,10

 CM.INT   BSSZ   3           REFORMATED CM ADDRESS OF INTERRUPT WORD.

 UIP      SUBR               ENTRY/EXIT
          LDK    0
          STDL   P1
          STDL   P2
          STDL   P3
          LDML   INPNT       NEW 'IN' POINTER
          STDL   P4
          LOADC  CM.PIT      LOAD ADDRESS OF PP INTERFACE TABLE
          ADK    /PIT/C.IN   OFFSET OF 'IN' POINTER
          CWDL   P1          WRITE NEW 'IN' POINTER TO CM
*
*         SET INTERRUPT WORD IN CM.
*
          LOADC  CM.INT      CM ADDRESS OF INTERRUPT WORD.
          CWDL   PPNO-3      SET LAST BYTE NON-ZERO.

*         INTERRUPT PROCESSOR.  RSP ROUTINE SETS UP THIS INSTRUCTION.

 UIPA     INPN   1           INTERRUPT OR PSN
          RETURN             EXIT
 URQ      SPACE  4,20
** NAME - URQ
*
** PURPOSE - TO DETERMINE IF THERE ANY REQUESTS ON THE UNIT QUEUES.
*
** INPUT - (NONE)
*
** OUTPUT - A = 0 IF THERE ARE NO UNIT REQUESTS.
*           A .NE. 0 IF THERE IS A UNIT REQUEST TO PROCESS.
*
          SPACE  2,10
 URQ6     LDK    0           SET NO FIND FLAG.

 URQ      SUBR               ENTRY/EXIT
          LDML   PPTBL+/PIT/P.UNITC  GET NUMBER OF UNITS
          STDL   P1          SAVE FOR LOOP CONTROL
 URQ1     SODL   P1          DECREMENT LOOP CONTROL COUNTER
          MJK    URQ6        EXIT IF ALL UNITS CHECKED AND NO FINDS
          AODL   UNITP       INCREMENT UNIT POINTER
          SBML   PPTBL+/PIT/P.UNITC  SUBTRACT MAX UNIT NUMBER
          MJN    URQ2        SKIP IF NO WRAP AROUND
          LDK    0           RESET POINTER TO START OF UNIT LIST
          STDL   UNITP
 URQ2     LDDL   UNITP       GET UNIT POINTER
          SHN    3           MULT BY 8 SINCE UNIT DESCRIPTOR 8 PP WORDS LONG
          STDL   UDPNT       SAVE POINTER INTO UNIT DESCRIPTOR
          LDML   UNITD+/UD/P.UQT,UDPNT  GET RMA UPPER HALF
          ADML   UNITD+/UD/P.UQT+1,UDPNT  ADD RMA LOWER HALF
          ZJK    URQ1        IF DUMMY ENTRY, LOOP TO NEXT ENTRY
          LOADF  UNITD+/UD/P.UQT,UDPNT  REFORMAT AND LOAD CM ADDRESS OF UIT
          STDL   CM.UIT+2    SAVE CM ADDRESS OF UIT
          SRD    CM.UIT

          IFNE   EFLAG2,0    TURN OFF PP INT TBL VERIFY CODE IF EFLAG2=0
          LDML   UNITD+/UD/P.UQT+1
          LPN    7           MASK OFF LOWER BITS
          NJK    VPI9        ERROR IF ADDR OF UIT NOT WORD BOUNDARY
          ENDIF

          LDK    C.UIT       GET LENGTH OF UIT
          STDL   T6          SAVE LENGTH FOR CM READ
          RJM    LFU         SET A AND R TO ADDR OF UIT
          CRML   UITBUF,T6   READ IN UNIT INTERFACE TABLE
          LDML   UITBUF+/UIT/P.DSABLE  GET UNIT STATUS
          LPK    DISABLE     IF UNIT DISABLED
          IFNE   EFLAG3,0    TURN OFF UIT VERIFICATION IF EFLAG3=0
          NJK    URQ8        TRY THE NEXT UNIT
          ELSE
          NJN    URQ8        TRY THE NEXT UNIT
          ENDIF
          LDML   UITBUF+/UIT/P.NEXT  HALF 1 OF RMA FOR REQUEST
          ADML   UITBUF+/UIT/P.NEXT+1  IF RMA=0 NO REQUEST QUEUED
          IFNE   EFLAG3,0    TURN OFF UIT VERIFICATION IF EFLAG3=0
          ZJK    URQ8        TRY THE NEXT UNIT
          ELSE
          ZJN    URQ8        RELOOP IF NO REQUEST QUEUED
          ENDIF
          RJM    SUL         LOCK UNIT TABLE
          IFNE   EFLAG3,0    TURN OFF UIT VERIFICATION IF EFLAG3=0
          NJK    URQ8        TRY THE NEXT UNIT
          ELSE
          NJN    URQ8        GO TO NEXT UNIT IF THIS ONE IS LOCKED
          ENDIF
          RJM    SQL         SET QUEUE LOCK
          IFNE   EFLAG3,0    TURN OFF UIT VERIFICATION IF EFLAG3=0
          NJK    URQ5        TRY THE NEXT UNIT
          ELSE
          NJN    URQ5        GO TO NEXT UNIT IF THIS ONE LOCKED
          ENDIF
          LDK    C.UIT       GET LENGTH OF UIT
          STDL   T6          SAVE LENGTH FOR CM READ
          RJM    LFU         SET A AND R TO ADDR OF UIT
          CRML   UITBUF,T6   READ IN UNIT INTERFACE TABLE

          IFNE   EFLAG3,0    TURN OFF UIT VERIFICATION IF EFLAG3=0
          UJN    URQE9       JUMP OVER ERROR CODES

*         ERROR EXITS FOR ERC3XX CODES.

 URQE1    LDK    ERC301      LOGICAL UNIT .NE. TO UNIT DESCRIPTOR
          UJN    URQE7       CONTINUE
 URQE2    LDK    ERC302      RMA OF COMMICATIONS BUFFER NOT ON
                             WORD BOUNDARY
          UJN    URQE7       CONTINUE
 URQE3    LDK    ERC303      RESERVED FIELD OF COMMUNICATIONS BUFFER
                             IS NOT ZERO
          UJN    URQE7       CONTINUE
 URQE4    LDK    ERC304      RMA OF NEXT UNIT REQUEST NOT ON
                             WORD BOUNDARY
          UJN    URQE7       CONTINUE
 URQE5    LDK    ERC305      RESERVED FIELD OF UNIT REQUEST QUEUE
                             DESCRIPTOR IS NOT ZERO
          UJN    URQE7       CONTINUE
 URQE6    LDK    ERC307      ILLEGAL DEVICE TYPE
          UJN    URQE7       CONTINUE
 URQE7    ADK    UITERR      ADD ON UIT ERROR CODE BASE
          RJM    EINTF       EXIT

*         NO RETURN.

 URQE9    BSS    0           TAG USED IN ERROR CODE PROCESSING
          LDML   UITBUF+/UIT/P.LU  GET LOGICAL UNIT NUMBER
          SBML   UNITD+/UD/P.LU,UDPNT  IF LOGICAL UNIT NUMBERS IN UIT AND PIT
          NJK    URQE1       NOT EQUAL GO TO PROCESS ERROR

          LDML   UITBUF+/UIT/P.UBUF+1,UDPNT  GET RMA OF COMMUNICATIONS BUFFER
          LPN    7           MASK OFF LOWER THREE BITS OF RMA
          NJK    URQE2       ERROR IF RMA NOT ON WORD BOUNDARY

          LDML   UITBUF+/UIT/P.NEXT-2  GET RESERVED FIELDS OF
          ADML   UITBUF+/UIT/P.NEXT-1  UNIT REQUEST QUEUE DESCRIPTOR
          ADML   UITBUF+/UIT/P.NEXTPV-1
          NJN    URQE5       ERROR IF ANY ARE NON ZERO

          LDML   UITBUF+/UIT/P.NEXT+1  GET LOWER HALF OF RMA
          LPN    7           GET LOWER 3 BITS OF RMA OF NEXT QUEUED REQUEST
          NJK    URQE4       ERROR IF RMA NOT ON WORD BOUNDARY

          LDML   UITBUF+/UIT/P.UBUF-2  GET RESERVED FIELD OF COMM BUF
          NJK    URQE3       ERROR IF NOT ZERO

          LDML   UITBUF+/UIT/P.UTYPE  GET UNIT TYPE
          MJK    URQE6       ERROR IF OUT OF RANGE
          ENDIF

          LDML   UITBUF+/UIT/P.DSABLE  GET UNIT STATUS
          LPK    DISABLE
          ZJN    URQ7        IF UNIT NOT DISABLED.
 URQ4     RJM    CQL         CLEAR UNIT REQUEST QUEUE LOCKWORD
 URQ5     RJM    CUL         CLEAR UNIT LOCKWORD
 URQ8     UJK    URQ1        RELOOP TO NEXT UNIT

 URQ7     LDML   UITBUF+/UIT/P.NEXT  HALF 1 OF RMA FOR REQUEST
          ADML   UITBUF+/UIT/P.NEXT+1  IF RMA=0 NO REQUEST QUEUED
          ZJK    URQ4        RELOOP IF NO REQUEST QUEUED
          LDK    MAXREQ      GET LENGTH OF REQUEST FOR CM READ
          STDL   WC          SAVE LENGTH FOR CM READ
          LOADF  UITBUF+/UIT/P.NEXT  SET A AND R TO ADDR OF REQUEST
          CRML   REQBUF,WC   READ IN UNIT REQUEST
          LDK    2
          STDL   WC          SET FOR 2 WORD CM WRITE

*         WRITE REQUEST PVA AND RMA BACK INTO REQUEST.

          LOADF  UITBUF+/UIT/P.NEXT  SET A AND R TO ADDRESS OF REQUEST
          CWML   UITBUF+/UIT/P.NEXTPV-1,WC  RE-WRITE PVA AND RMA
          RJM    LFU         SET A AND R TO ADDRESS OF UIT
          ADK    /UIT/C.NEXTPV  POINT TO PVA
          CWML   REQBUF+/RQ/P.NEXTPV-1,WC  RESET PVA AND RMA OF NEXT REQ
          LOADF  UITBUF+/UIT/P.NEXT
          CRML   REQBUF,WC   READ LINK INFORMATION FROM REQUEST
          RJM    CQL         UNLOCK UNIT QUEUE
          LDK    1
          STDL   UQFLG       SET REQUEST FROM UNIT QUEUE FLAG
          RJM    INTRES      SET-UP RESPONSE-BUFFER UNIT-QUEUE REQUEST
          LDML   REQBUF+/RQ/P.NEXT
          STDL   XRQA        REQUEST RMA UPPER
          LDML   REQBUF+/RQ/P.NEXT+1
          STDL   XRQA+1      REQUEST RMA LOWER
          LDML   REQBUF+/RQ/P.CMDIND
          SHN    8+2
          LPK    /RQ/M.CMDIND
          STDL   XRQI        SET CURRENT COMMAND INDEX

          IFNE   EFLAG4,0    TURN OFF REQUEST HEADER VALIDATION IF EFLAG4 = 0
          RJM    VPR         VERIFY REQUEST AND SET UP RESPONSE
          ENDIF

          LDK    1           SET GOT REQUEST FLAG
 URQ3     RETURN             EXIT
 VPI      SPACE  4,20
** NAME - VPI
*
** PURPOSE - TO VERIFY THE PP INTERFACE TABLE.
*
** INPUT - (NONE)
*
** OUTPUT - PP INTERFACE TABLE IN PPTBL.
*
** NOTE - LOCK MUST BE SET IN PP TABLE BEFORE THIS ROUTINE IS CALLED.
*
          SPACE  2,10
          IFNE   EFLAG2,0    TURN OFF PIT VERIFICATION IF EFLAG2 = 0
 VPI      SUBR               ENTRY/EXIT

*  NOTE BELOW THAT AN ERROR IN THE PP RESPONSE BUFFER DESCRIPTION CAUSES
*  THE PP TO HANG.  THIS IS BECAUSE IF THE RESPONSE DESCRIPTOR HAS BEEN
*  CLOBBERED IT IS A POOR IDEA TO ATTEMPT TO SEND A RESPONSE TO CM AS
*  THIS MAY MAKE MATTERS MUCH WORSE.

          LDML   PPTBL+/PIT/P.RSBUF+1  GET LOWER PART OF RMA OF RES BUF
          LPN    7           MASK OFF LOWER 3 BITS
          ADML   PPTBL+/PIT/P.RSPVA-1  ADD RESERVED PART OF RESPONSE PVA
          ADML   PPTBL+/PIT/P.RSBUF-2  ADD RESERVED PART OF RESPONSE RMA
          ADML   PPTBL+/PIT/P.RSBUF-1  ADD RESERVED PART OF RESPONSE RMA
          ADML   PPTBL+/PIT/P.IN-3  ADD RESERVED PART OF IN POINTER
          ADML   PPTBL+/PIT/P.IN-2  ADD RESERVED AREA OF IN POINTER
          ADML   PPTBL+/PIT/P.IN-1  ADD RESERVED PART OF IN POINTER
          ADML   PPTBL+/PIT/P.OUT-3  ADD RESERVED PART OF OUT POINTER
          ADML   PPTBL+/PIT/P.OUT-2  ADD RESERVED PART OF OUT POINTER
          ADML   PPTBL+/PIT/P.OUT-1  ADD RESERVED PART OF OUT POINTER
          ADML   PPTBL+/PIT/P.LIMIT-3  ADD RESERVED PART OF LIM POINTER
          ADML   PPTBL+/PIT/P.LIMIT-2  ADD RESERVED PART OF LIM POINTER
          ADML   PPTBL+/PIT/P.LIMIT-1  ADD RESERVED PART OF LIM POINTER
          NJK    *           HANG IF RESERVED AREA NOT 0 (PPIT CLOBBERED)
          UJN    VPI8        JUMP OVER ERROR CODES

 VPI1     LDK    ERC201      RES. FIELD OF PP INTERFACE TBL NOT 0
          UJN    VPI7        CONTINUE
 VPI2     LDK    ERC202      RMA OF INTERRUPT WORD NOT ON WORD BOUNDARY
          UJN    VPI7        CONTINUE
 VPIB     LDK    ERC20B      RMA OF CHANNEL TABLE NOT ON WORD BOUNDARY
          UJN    VPI7        CONTINUE
 VPI3     LDK    ERC203      RMA OF PP COMMUNICATIONS BUFFER NOT ON
                             WORD BOUNDARY
          UJN    VPI7        CONTINUE
 VPI4     LDK    ERC204      RESERVED FIELD OF THE PPU COMMUNICATION
                             DESCRIPTOR IS NOT ZERO
          UJN    VPI7        CONTINUE
 VPI5     LDK    ERC205      RESERVED FIELD OF THE PP REQUEST QUEUE
                             DESCRIPTOR IS NOT ZERO
          UJN    VPI7        CONTINUE
 VPI6     LDK    ERC206      RMA OF NEXT PP NOT A WORD BOUNDARY
 VPI7     ADK    PITERR      PIT INTERFACE ERROR CODE BASE
          RJM    EINTF       ERROR HANDLING EXIT

*         NO RETURN

 VPI8     LDML   PPTBL+/PIT/P.PPQ+1  GET RMA OF NEXT REQUEST
          LPN    7           MASK OFF LOWEST 3 BITS
          NJK    VPI6        ERROR IF RMA NOT ON A WORD BOUNDARY

          LDML   PPTBL+/PIT/P.PPQPVA-1  GET RESERVED AREA OF PVA OF REQUEST
          ADML   PPTBL+/PIT/P.PPQ-2  ADD ON RESERVED AREA OF RMA OF REQUEST
          ADML   PPTBL+/PIT/P.PPQ-1  ADD ON RESERVED AREA OF RMA OF REQUEST
          NJK    VPI5        ERROR IF RESERVED AREA NOT 0

          LDML   PPTBL+/PIT/P.INT+1  GET RMA OF INTERRUPT WORD
          LPN    7           MASK OFF LOWER 3 BITS
          NJK    VPI2        ERROR IF RMA NOT ON A WORD BOUNDARY

          LDML   PPTBL+/PIT/P.CHAN+1  GET RMA OF CHANNEL TABLE
          LPN    7           MASK OFF LOWER THREE BITS
          NJK    VPIB        ERROR IF RMA NOT ON WORD BOUNDARY

          LDML   PPTBL+/PIT/P.CBUF-2  GET RESERVED AREA OF COMM BUF
          NJK    VPI4        ERROR IF RESERVED AREA NOT 0

          LDML   PPTBL+/PIT/P.CBUF+1  GET RMA OF COMMUNICATIONS BUFFER
          LPN    7           MASK OFF LOWER THREE BITS
          NJK    VPI3        ERROR IF RMA NOT ON A WORD BOUNDARY

          LDML   PPTBL+3     GET RESERVED AREA IN PIT HEADER
          NJK    VPI1        ERROR IF RESERVED AREA NOT 0
          RETURN             EXIT

 VPI9     LDK    ERC209      RMA OF UNIT INTERFACE TABLE NOT ON
                             WORD BOUNDARY
          UJK    VPI7        CONTINUE
          ENDIF
 VPR      SPACE  4,20
** NAME - VPR
*
** PURPOSE - VERIFY THE HEADER PORTION OF A PP OR UNIT REQUEST.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
          IFNE   EFLAG4,0    TURN OFF VALIDATION IF EFLAG4 = 0
 VPR      SUBR               ENTRY/EXIT
          LDML   REQBUF+/RQ/P.NEXTPV-1  GET UNUSED PART OF PVA OF NEXT
                                        REQUEST
          ADML   REQBUF+/RQ/P.NEXT-2  ADD UNUSED PART OF RMA OF NEXT REQ
          ADML   REQBUF+/RQ/P.NEXT-1  ADD UNUSED PART OF RMA OF NEXT REQ
          UJN    VPR12       JUMP OVER ERROR CODES

 VPR1     LDK    ERC401      RMA OF NEXT REQUEST NOT ON WORD BOUNDARY
          UJN    VPR11       CONTINUE
 VPR2     LDK    ERC402      REQUEST LENGTH NOT A MULTIPLE OF 8-BYTES
          UJN    VPR11       CONTINUE
 VPR3     LDK    ERC403      REQUEST LENGTH LESS THAN 40-BYTES
          UJN    VPR11       CONTINUE
 VPR4     LDK    ERC404      L.U. NO. .NE. UNIT IN INTERFACE TABLE
          UJN    VPR11       CONTINUE
 VPR5     LDK    ERC405      RESERVED LINKAGE FIELD NOT ZERO
          UJN    VPR11       CONTINUE
 VPR6     LDK    ERC406      INVALID RECOVERY/INTERRUPT SELECTION
          UJN    VPR11       CONTINUE
 VPR9     LDK    ERC409      INVALID ALERT CONDITIONS
          UJN    VPR11       CONTINUE
 VPR10    LDK    ERC40A      REQUEST IS TO LONG
 VPR11    ADK    RQHERR      ADD ON REQUEST HEADER ERROR CODE BASE
          RJM    EINTF       GO TO ERROR HANDLING ROUTINE

*         NO RETURN.

 VPR12    NJK    VPR5        ERROR IF NOT ZERO

          LDML   REQBUF+/RQ/P.NEXT+1  GET 2ND HALF OF RMA
          LPN    7           MASK OFF LOWER THREE BITS
          NJK    VPR1        ERROR IF RMA NOT ON WORD BOUNDARY

          LDML   REQBUF+/RQ/P.LEN GET LENGTH OF REQUEST
          SBN    MINRL       SUBTRACT MIN ALLOWED REQUEST LENGTH
          MJK    VPR3        ERROR IF REQUEST LESS THAN MINIMUM LENGTH
          ADC    -MAXREQB+MINRL-1  SUBTRACT TO FIND IF REQUEST TOO LARGE
          PJK    VPR10       ERROR IF REQUEST IS TOO LONG

          LDML   REQBUF+/RQ/P.LEN  GET LENGTH OF REQUEST
          LPN    7           MASK OFF LOWER 3 BITS OF LENGTH
          NJK    VPR2        ERROR IF REQUEST LENGTH NOT MULT OF 8

          LDML   REQBUF+/RQ/P.LONGB  GET ALERT CONDITIONS
          LPK    BADALERT    MASK OFF INVALID ALERT CONDITIONS
          NJK    VPR9        ERROR IF ANY INVALID ALERT CONDITIONS SET

          LDML   REQBUF+/RQ/P.RECOV  GET RECOVERY/INTERRUPT/PRIORITY FLD
          LPK    BADRECOV    MASK OFF INVALID RECOVERY/INTERRUPT BITS
          NJK    VPR6        ERROR IF INVALID VALUES IN FIELD
          RETURN             EXIT
          ENDIF
 WDI      SPACE  4,20
** NAME - WDI
*
** PURPOSE - WRITE DATA INDIRECT (USE INDIRECT LIST).
*
** INPUT - (A) = ADDRESS TO WRITE DATA FROM.
*
** OUTPUT - DATA IS WRITTEN OUT.
*
          SPACE  2,10
 WDIX     BSS    0

 WDI      SUBR               ENTRY/EXIT
          STML   WDIA        SET FIRST ADDRESS FOR CM READ
          LDIL   CMDADR1     GET LENGTH OF INDIRECT LIST
          SHN    -3          CONVERT IT TO CM WORDS
          STDL   T5          INITIALIZE LOOP CONTROL
          LDK    INDLST      GET ADDR OF INDIRECT LIST
 WDI1     STDL   T6          SET INDIRECT COMMAND POINTER
          LDML   1,T6        GET LENGTH IN BYTES
          ZJK    WDIX        IF NO DATA TO TRANSFER
          ADK    7
          SHN    -3          CONVERT LENGTH TO CM WORDS
          STDL   WC          SAVE LENGTH FOR CM READ
          LOADF  2,T6        CM ADDRESS TO A AND R FOR CM WRITE
          CWML   **,WC       WRITE DATA TO CM
 WDIA     EQU    *-1
          SODL   T5          DECREMENT LOOP COUNTER BY 1
          ZJK    WDIX        IF DONE
          LDML   1,T6        GET LENGTH OF INDIRECT IN BYTES
          SHN    -1          CONVERT LENGTH TO PP WORDS
          RAML   WDIA        RESET ADDRESS FOR NEXT CM WRITE
          LDDL   T6
          ADK    4           POINT TO NEXT INDIRECT IN LIST
          UJK    WDI1        RELOOP FOR NEXT CM WRITE

** NAME - WFF
*
** PURPOSE - WRITE FLAG FUNCTION.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 WFFX     BSS    0
 WFF      SUBR               ENTRY/EXIT

*         TEST FOR WRITE FLAG ADDRESS PRIMED STATUS BIT.

          RJM    WFP         WRITE FLAG PRIMED TEST
          NJK    WFFX
          LDK    FCWF        WRITE FLAG FUNCTION CODE
          RJM    OTF         OUTPUT THE FUNCTION
          NJK    WFFX
          RJM    WHNB        INPUT ONE WORD STATUS - PARITY CHECK
          NJK    WFFX
          LDK    2*5
          STDL   T0          SET WORD COUNT
          LDK    XCWB        CONTROL WORD BLOCK FWA
          RJM    OTB         OUTPUT THE BUFFER
          NJK    WFFX

*         WAIT HARDWARE NOT BUSY.

          RJM    WNB         WAIT NOT BUSY STATUS
          NJK    WFFX
*
*         CHECK IF PERMITTED.
*
          RJM    ESO         CHECK ERROR-BITS-IN STATUS-WORD ONE
          NJN    WFF2        IF ERROR BITS SET.
*
*         CHECK APM (SOFTWARE) STATUS WORD.
*
 WFF1     LDDL   ST+1
          LPK    /MPSSTS/K.LFUNI
          ZJN    WFF3        *I* BIT - NO INVALID FUNCTION - EXIT
          LDK    APE22       *APM* INVALID FUNCTION         ** APE22 **
 WFF2     RJM    EMAP
 WFF3     UJK    WFFX

*         NO RETURN.  RJM RECORDS ADDRESS OF ERROR ROUTINE.

 WFP      SPACE  4,20
** NAME - WFP
*
** PURPOSE - WRITE FLAG PRIMED-TEST.
*
** INPUT - (NONE)
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 WFP1     LDK    0
 WFPX     BSS    0

 WFP      SUBR               ENTRY/EXIT

*         TEST FOR WRITE FLAG ADDRESS PRIMED STATUS BIT.

          RJM    WHNB        INPUT ONE WORD STATUS
          NJK    WFPX
          LDDL   ST
          LPK    /MPHSTS/K.WFPRI
          NJK    WFP1        WRITE FLAG ADDRESS PRIMED - EXIT
          LDK    APE16       WRITE FLAG STATUS NOT ON       ** APE16 **
          RJM    EMAP        ERROR HANDLING ROUTINE
          UJK    WFPX
 WHNB     SPACE  4,20
** NAME - WHNB
*
** PURPOSE - WAIT FOR HARDWARE NOT BUSY(STATUS WORD 1 NOT BUSY BIT)
*
** INPUT - (NONE)
*
** OUTPUT - (A) = 0 - NO CHANNEL PARITY ERROR, CONTROL PROCESSOR RUNNING, AND
*                   HARDWARE NOT BUSY
*           (A) = NONZERO - ONE OF THE FOLLOWING ERRORS OCCURRED -
*                           1. A CHANNEL PARITY ERROR OR
*                           2. THE CONTROL PROCESSOR IS NOT RUNNING OR
*                           3. THE HARDWARE TIMED OUT ON A BUSY CONDITION
*
          SPACE  2,10
 WHNB     SUBR               ENTRY/EXIT

*         WAIT HARDWARE NOT BUSY.

          LDML   XTLC        COUNT
          STDL   T1
 WHNB1    RJM    I1S         INPUT ONE WORDS OF STATUS
          NJN    WHNB10
          LDDL   ST
          LPK    /MPHSTS/K.HBSY
          ZJN    WHNB10      HARDWARE NOT BUSY - EXIT
          SODL   T1          DECREMENT COUNT
          NJK    WHNB1       TRY AGAIN

*         ERROR - TIMEOUT OCCURRED.

          LDK    APE10       TIMEOUT WAITING NOT BUSY       ** APE10 **
          RJM    MHP
 WHNB10   RETURN
 WNB      SPACE  4,20
** NAME - WNB
*
** PURPOSE - WAIT NOT BUSY.
*
** INPUT - (NONE)
*
** OUTPUT - (A) = 0 - NO CHANNEL PARITY ERROR, CONTROL PROCESSOR RUNNING,
*                     HARDWARE NOT BUSY, APM NOT BUSY, AND VALID FUNCTION
*           (A) = NONZERO - ONE OF THE FOLLOWING ERRORS OCCURRED
*                           1. A CHANNEL PARITY ERROR OR
*                           2. THE CONTROL PROCESSOR IS NOT RUNNING OR
*                           3. THE HARDWARE TIMED OUT ON A BUSY CONDITION
*                           4. APM TIMED OUT ON A BUSY CONDITION
*                           5. AN INVALID FUNCTION SENT TO APM
*
          SPACE  2,10
 WNB      SUBR               ENTRY/EXIT

          RJM    I2S         INPUT TWO WORDS OF STATUS
          NJN    WNB5
          LDDL   ST+1
          SHN    17D-0
          MJN    WNB2        *B* BIT - BUSY - APM
          SHN    17D-2+1
          MJN    WNB3        *I* BIT -  INVALID FUNCTION
          LDK    0
          UJN    WNB5

 WNB2     LDK    APE10       TIMEOUT WAITING NOT BUSY       ** APE10 **
          UJN    WNB4

 WNB3     LDK    APE22       *APM* INVALID FUNCTION         ** APE22 **
 WNB4     RJM    EMAP
 WNB5     RETURN
 WRP      SPACE  4,20
** NAME - WRP
*
** PURPOSE - WRITE REQUEST PACKET.
*
** INPUT - (XCWB - XCWB+12B) = PRESET CONTROL WORD BLOCK.
*          (TRRPL) = NUMBER OF CM WORDS IN REQUEST PACKET.
*          (IOBUF) = REQUEST PACKET READ FROM CM
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 WRP      SUBR               ENTRY/EXIT


*         INITIALIZE CONTROL WORDS.
*         SET (XCWB+04) = 0 = TRANSMIT REQUEST PACKET.
*         SET (XCWB+11) = REQUEST PACKET LENGTH.

*         CLEAR 5 BYTES.

          LDK    XCWB+4      CLEAR BYTE 4 OF 1ST 60 BIT WORD
*                            AND BYTES 0-3 OF 2ND 60 BIT WORD
          STDL   T2
 WRP12    LDK    0
          STIL   T2          CLEAR WORD
          AODL   T2
          ADK    -XCWB-5-5   LWA+1
          MJK    WRP12       MORE TO GO
*
*         SET UP CONTROL WORDS FOR REQUEST PACKET.
*
          LDML   TQBE+/RQBP/P.LNG+1 TBL-REQUEST PACKET LENGTH (32 BIT WORDS)
          STML   XCWB+9D     (32 BIT PARM) = 000 0000 XXXX
          RJM    WFF         WRITE FLAG FUNCTION
          ZJN    WRP13       NO ERRORS
 WRP18    UJK    DER         ABNORMAL RESPONSE PROCESSING

 WRP13    LDDL   ST+1
          LPK    /MPSSTS/K.TRQP
          NJN    WRP14       APM PERMISSION TO PROCEED

          LDK    APE23       *APM* NO PERMISSION TO PROCEED ** APE23 **
 WRP20    RJM    EMAP
          UJK    WRP18

 WRP15    LDK    APE26       *APM* REQUEST PACKET ERROR     ** APE26 **
          UJK    WRP20

 WRP14    LDK    FCWR        WRITE REQUEST PACKET FUNCTION CODE
          RJM    OTF         OUTPUT THE FUNCTION
          NJK    WRP18
          RJM    WHNB        INPUT ONE WORD STATUS - PARITY CHECK
          NJK    WRP18
          IFEQ   HDW12BC,1   MAP-V CHANNEL INTERFACE IS 12/60 HARDWARE

*         CONVERT 16/64 TO 12/60.

          LDML   TQBE+/RQBP/P.LNG+1  REQUEST LENGTH IN 32 BIT WORDS
          ADK    1           ASSURE FULL CM WORD
          SHN    -1          DETERMINE NUMBER OF CM WORDS
          STDL   T5          NUMBER OF 64 BIT CM WORDS TO CONVERT
          LDK    TQBE+/RQBP/P.JID  FWA OF 16/64-BIT DATA
          STDL   T4          SET STORAGE ADDRESS OF 12/60-BIT DATA
          RJM    RSF         REFORMAT SIX FOUR (64) - (16/64 TO 12/60)
          ENDIF

          LDML   XCWB+9D     CONTROL WORD BLOCK WORD COUNT
          STDL   T0
          SHN    2           MULTIPLY BY 4
          RADL   T0          MAKES IT TIMES 5
          LDK    TQBE+/RQBP/P.JID    REQUEST DATA FWA
          RJM    OTB         CONNECT, OUTPUT AND DISCONNECT
          NJK    WRP18
          RJM    WNB         WAIT NOT BUSY STATUS
          NJK    WRP18

*         CHECK SOFTWARE STATUS WORD.

          LDDL   ST+1
          LPK    /MPSSTS/K.LRPE
          NJK    WRP15       *E* BIT - REQUEST PACKET ERROR
          AODL   XRRC        REQUEST (+1) = RESPONSE (-1) COUNTER
          RETURN             EXIT

          TITLE  POINTERS AND FLAGS -- MAP-V
**        IVS - INTERNAL VARIABLES.
*
*         INTERNAL VARIABLES TO VM5B OPERATION.

 APERR    BSS    1           APE ERROR CODE
 CMIFLG   BSSZ   1           NON-ZERO IF PACKED CMI REQUEST IN PROGRESS
 INPNT    BSSZ   1           IN POINTER FOR RESPONSE BUFFER
 ODDN32   BSSZ   1           FLAG TO INDICATE WHETHER AN ODD OR EVEN 32 BIT TRANSFER
                             = 0 - EVEN NUMBER OF 32 BITS TO TRANSFER
                             = 1 - ODD NUMBER OF 32 BITS TO TRANSFER
 XCINC    BSSZ   1           COUNT OF EXCESS BYTES INPUT ON CHANNEL
 XCSU     BSSZ   1           CSUM UPPER (PACKET CHECKSUM UPPER)
 XCSL     BSSZ   1           CSUM LOWER (PACKET CHECKSUM LOWER)
 XERC     BSSZ   1           RETRY ERROR COUNT
 XERR     BSSZ   1           ERROR CODE FOR MAP HUNG
 XFCD     BSS    1           FUNCTION CODE DATA I/O ON CHANNEL
 XGUP     BSS    1           GIVE UP ON ERROR -  TRANSFER ADDRESS
 XLFC     BSSZ   1           LAST FUNCTION CODE ISSUED TO MAP
 XPWA     BSS    1           PP WORDS PER ADDRESS ENTRY
 XRDF     BSS    1           READ FLAG FOR CHANNEL I/O
 XRTY     BSS    1           RETRY ENTRY POINT ADDRESS
 XTLB     CON    4096D       CHANNEL ACTIVE TIMEOUT AFTER FUNCTION SENT
 XTLC     CON    32760D      CHANNEL EMPTY TIMEOUT

          SPACE  4,20
**        APB - ACKNOWLEDGEMENT/RESPONSE PACKET BUFFER.

 TAPBL    EQU    6           APB TABLE LENGTH IN CM WORDS
 TAPB     BSSZ   TAPBL*5     APB TABLE SPACE (IN PP WORDS)

          IFEQ   HDW12BC,1   MAP-V CHANNEL INTERFACE IS 12/60 HARDWARE
*                UNPACKED FORMAT.  (5-12 BIT WORDS/32 BIT DATA)

 TAJID    EQU    TAPB+/MRSBP/P.JID+2      (32) APB JOB ID (JID)
 TARSN    EQU    TAPB+/MRSBP/P.JID+7      (32) APB RSN
 TAIRS    EQU    TAPB+/MRSBP/P.JID+14B    (32) APB I-RESPONSE STATUS
 TAJRS    EQU    TAPB+/MRSBP/P.JID+21B    (32) APB J-RESPONSE STATUS
 TAKRS    EQU    TAPB+/MRSBP/P.JID+26B    (32) APB K-RESPONSE STATUS
 TACSM    EQU    TAPB+/MRSBP/P.JID+33B    (32) APB CHECKWORD
          ENDIF

 XCWB     BSSZ   2*5         VM5/APM CONTROL WORD BLOCK
          EJECT

 PPTBL    BSSZ   P.PIT       PP INTERFACE TABLE
 UNITD    BSSZ   P.UD*3      UNIT DESCRIPTOR PART OF PIT FOR 3 UNITS
                             NOTE THIS MUST IMMEDIATLY FOLLOW PPTBL
 UITBUF   BSSZ   P.UIT       UNIT INTERFACE TABLE
 INDLST   BSSZ   MAXIND*4    INDIRECT ADDRESS/LENGTH BUFFER
 REQBUF   BSSZ   MAXREQ*4    SET REQUEST BUFFER LENGTH
 REQBUFE  EQU    *           ADDRESS OF END OF REQUEST BUFFER
 RESBUF   BSSZ   P.RS        RESPONSE BUFFER
 ENDCODE  EQU    *           ADDRESS OF END OF CODE AND NON I/O BUFFERS
          ERRPL  ENDCODE-OVHEAD  ERROR IF CODE AND I/O BUFFERS OVERLAP
          ORG    STIOBUF-4   PLACE IO BUFFER AT END OF PP MEMORY - DO NOT MOVE
 OVHEAD   BSSZ   4           PP OVERLAY STARTS HERE, HEADER FIRST, THEN OVERLAY
 IOBUF    EQU    *-4  INPUT/OUTPUT DATA BUFFER
          ERRPL  IOBUF+IOBUFLNG-7777B

          SPACE  4,20
**        QBE - REQUEST BLOCK EQUATES.

          ORG    IOBUF
 TQBE     BSSZ   P.RQBP      REQUEST BLOCK AREA
 RPKT     EQU    TQBE+/RQBP/P.RPKT
          BSSZ   4*2         REST OF MAP REQUEST PACKET - MUST FOLLOW TQBE DEFINITION
          IFEQ   HDW12BC,1   MAP-V CHANNEL INTERFACE IS 12/60 HARDWARE
 TQJID    EQU    TQBE+/RQBP/P.JID+2      (32) JOB ID BLOCK
 TQRSN    EQU    TQBE+/RQBP/P.JID+7      (32) REQUEST SEQ. NO. BLOCK
 TQRES    EQU    TQBE+/RQBP/P.JID+14B    (32) RESERVED BLOCK
 TQFC     EQU    TQBE+/RQBP/P.JID+21B    (32) FUNCTION CODE
 TQLNG    EQU    TQBE+/RQBP/P.JID+26B    (32) LENGTH (OF RPKT)
 TQRPK    EQU    TQBE+/RQBP/P.JID+33B    (XX) FIRST BYTE OF RPKT (REQUEST PACKET)

*                STLOD, STWR, STRD RPKT IS ASSUMED FOR FOLLOWING.

 TQHA     EQU    TQRPK+17B   (32) HOST ADDRESS (USE LOWER 24)
 TQHWC    EQU    TQRPK+17B+5 (32) HOST WORD COUNT (USE LOWER 24)
          ENDIF
          TITLE  MP5/4VD - DATA LOAD/UNLOAD CHANNEL BUFFER AREAS
          SPACE  4,20

*         CHANNEL DATA LOAD BUFFER AREA.

 BFDZ     EQU    IOBUF
          SPACE  4,20
*         CALCULATION OF BUFFER SIZE VALUES.

 BFDW     EQU    7776B-BFDZ  SIZE OF SPACE AVAILABLE
          ERRNG  BFDW-30D*4  MINIMUM SIZE OF 30-64-BIT CM WORDS
 BFDX     EQU    BFDW/15D    32-BIT WORDS/30 - PACKED 32 GROUP
 BFDC64   EQU    BFDX*15D/4  SIZE IN 64-BIT-CM WORDS
 BFDP16   EQU    BFDC64*4    SIZE IN 16 BIT PPU WORDS
          SPACE  2,10
          IFEQ   HDW12BC,1   MAP-V CHANNEL INTERFACE IS 12/60 HARDWARE
          ERRNG  BFDW-2*5    MINIMUM SIZE OF 2 60-BIT CM WORDS
 BFDY     EQU    BFDW/5      60-BIT-CM-WORDS
 BFDC60   EQU    BFDY/2      SIZE IN 60-BIT CHUNKS/2 (1-64 = 2-60)
 BFDP12   EQU    BFDC60*2*5  SIZE IN 12 BIT PPU WORDS
          ENDIF
          TITLE  VE - PPU INITIALIZATION - PRESET
** NAME - PRS
*
** PURPOSE - PRESET THE DRIVER AFTER DEADSTART.
*
** INPUT - PPIT = CM REAL MEMORY ADDRESS (2 BYTES) OF THE PP INTERFACE
*                 TABLE FOR THIS PP.
*          PPNO = PP NUMBER OF THIS PP.
** OUTPUT - (NONE)
*
          SPACE  2,10
          ORG    STIOBUF     PUT INITIALIZATION ROUTINE OVER I/O BUFFERS

*         PAUSE A SUFFICIENT AMOUNT OF TIME TO PERMIT THE DEADSTART PP
*         TO DISCONNECT ALL CHANNELS.

 PRS      LDK    8
          STDL   P1
 PRS1     PAUSE  125000      DELAY 125 MILLISECONDS
          SODL   P1
          NJK    PRS1
          AJM    *,DSC       WAIT FOR DSP TO DISCONNECT CHANNEL
                             (DONE AFTER SS COMMAND READ FROM CONSOLE.)

 PRS9     REFAD  PPIT,CM.PIT   REFORMAT AND STORE CM ADDRESS OF PPIT
*
*         READ PP_INTERFACE_TABLE.
*
          LDK    PITLEN      GET LENGTH OF PIT IN CM WORDS
          STDL   WC
          LOADR  CM.PIT      LOAD CM ADDRESS OF PP INTERFACE TABLE ENTRY
          CRML   PPTBL,WC    READ PPIT AND UNIT DESCRIPTORS
*
*         GET THE ASSIGNED LOGICAL PP NUMBER
*
          LDML   PPTBL+/PIT/P.PPNO
          STDL   PPNO
*
*         REFORMAT ADDRESS OF RESPONSE BUFFER.
*
          REFAD  PPTBL+/PIT/P.RSBUF,CM.RS    REFORMAT AND STORE CM ADDRESS OF RESPONSE BUF
*
*         INITIALIZE LIMIT OF RESPONSE BUFFER
*
          LDML   PPTBL+/PIT/P.LIMIT  GET LIMIT OF RESPONSE BUFFER
          STDL   LIM
*
*         REFORMAT ADDRESS OF PP/CPU INTERRUPT WORD.
*
          REFAD  PPTBL+/PIT/P.INT,CM.INT  REFORMAT AND STORE INTERRUPT ADDRESS.
*
*         GET CHANNEL NUMBER.
*
          LDK    0
          STDL   UDPNT
          LDML   PPTBL+/PIT/P.UNITC  GET NUMBER OF UNITS
          STDL   P1
          UJN    PRS13
 PRS12    LDK    4
          RADL   UDPNT
 PRS13    SODL   P1
          MJN    PRS14       EXIT
          LDML   UNITD+/UD/P.UQT,UDPNT  GET RMA UPPER HALF
          ADML   UNITD+/UD/P.UQT+1,UDPNT
          ZJK    PRS12       IF DUMMY ENTRY
          LDML   UNITD+/UD/P.CHAN,UDPNT  GET CHANNEL
          SHN    -8
          STDL   T3
          RJM    CCN         CHANGE CHANNEL NUMBER IF NECESSARY

*         INITIALIZE HARDWARE STATUS WORDS - PREVIOUS AND CURRENT.

 PRS14    LDK    177776B     FFFE(6)
          STDL   PST         PREVIOUS STATUS WORD 1
          STDL   PST+1       PREVIOUS STATUS WORD 2
          STDL   ST          CURRENT STATUS WORD 1
          STDL   ST+1        CURRENT STATUS WORD 2

          UJK    VM5B        EXIT
 SAVAD    SPACE  4,20
** NAME - SAVAD
*
** PURPOSE - MOVE A REFORMATED ADDRESS CONTAINED IN CMADR TO A MEMORY LOCATION
*
** INPUT - (T2) - ADDRESS OF MEMORY LOCATION TO RECEIVE THE REFORMATED ADDRESS
*          (A) - CONTENTS OF LOCATION CMADR+2
*
** OUTPUT - NONE
*
          SPACE  2,20
 SAVAD    SUBR
          STML   2,T2
          LDDL   CMADR
          STI    T2
          LDDL   CMADR+1
          STML   1,T2
          RETURN
          EJECT
 CCN      SPACE  4,20
** NAME - CCN
*
** PURPOSE - CHANGE CHANNEL NUMBER IN CHANNEL INSTRUCTIONS.
*
** INPUT - T3 = NEW CHANNEL NUMBER
*
** OUTPUT - (NONE)
*
          SPACE  2,10
 CCNX     BSS    0

 CCN      SUBR               ENTRY/EXIT
          LDK    0
          STDL   T1          CHANGE CHANNEL INSTRUCTIONS
 CCN1     LDML   CONCH,T1    ADDRESS OF CHANNEL INSTRUCTIONS
          ZJN    CCNX        END OF LIST
          STDL   T2
          LDIL   T2
          SCN    37B
          LMDL   T3          GET NEW CHANNEL NUMBER
          STIL   T2
          AODL   T1
          UJK    CCN1
 PAU      SPACE  4,20
          EJECT
 CONCH    BSS    0
 TCH00    HERE   TABLE CH00 - CHANNEL TABLE
 TCH40    HERE   TABLE CH40 - CHANNEL TABLE
 TTP+40B  HERE
 T40B+TP  HERE
 TTP      HERE
          CON    0
 R2       ERRPL  *-7777B
          EJECT
          END    VM5B
