1SS 
          IDENT  1SS,SSD
          TITLE  1SS - M860 SECONDARY STORAGE DRIVER. 
          PERIPH
          BASE   M
          SST 
*COMMENT M860 SECONDARY STORAGE DRIVER. 
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4
***       1SS - M860 SECONDARY STORAGE DRIVER.
*         W. J. STURGIS      82/02/18.
          SPACE  4,10 
***       1SS PROCESSES REQUESTS FROM SSEXEC TO READ AND WRITE
*         DATA AND MESSAGES.  MULTIPLE FUNCTIONS CAN BE PROCESSED 
*         BY 1SS. 
          SPACE  4,10 
***       CALL
* 
*T IR     18/ *1SS* ,6/ ,12/ CHB CHA ,6/ FC ,18/ ADDR 
* 
*T ADDR   18/ MSG. OUT FET ,18/ RECALL ADDR. ,12/ EQ ,11/ CN ,1/S 
*T,ADDR+1 42/ ,18/DATA FET ADDR 
* 
*         WHERE 
*         ADDR = PARAMETER ADDRESS. 
*         FC = FUNCTION CODE. 
*                1 = ENABLE TDAM BUFFER.
*                2 = MESSAGE BUFFER(S) TO PROCESS.
*                3 = MESSAGE AND DATA BUFFERS TO PROCESS. 
*                4 = SET CHANNELS IN EST ENTRY. 
*         EQ = EST ORDINAL. 
*         CHB CHA = NEW CHANNELS TO BE SET IN EST FOR EQ. 
*         MSG. OUT FET = FET USED TO SEND MESSAGES TO THE M860. 
*         (MSG. OUT FET - 1) POINTER TO MESSAGE INPUT FET.
*         RECALL = CPU DRIVER RECALL WORD 
*         DATA FET = FET FOR DATA I/O.
*         CN = CONTROLLER ORDINAL IN UDT. 
*         S = 1, PPU ACTIVE (SET BY SSEXEC), CLEARED BY 1SS WHEN
*         DROPPING OUT. 
          SPACE  4,10 
***       MESSAGE FET 
* 
*T MFET   42/   ,8/ ERRC ,9/ ,1/C 
*T,       42/ ,18/ FIRST
*T,       42/ ,18/ IN 
*T,       42/ ,18/ OUT
*T,       12/ CH ,6/ ,18/ ABUF ,6/ ,18/ LIMIT 
*T,       60/ EBUF
* 
*         WHERE.
*         ERRC = ERROR RETURN CODE. 
*         C = COMPLETE FLAG.
*         FIRST = FIRST POINTER.
*         IN = IN POINTER.
*         OUT = OUT POINTER.
*         CH = CHANNEL TO USE.
*         LIMIT = LIMIT POINTER.
*         ABUF = AUX BUFFER FOR LONG ASSOCIATED DATA BLOCKS.
*         EBUF = HARDWARE ERROR STATUS BUFFER.(5 WORDS) 
          SPACE  4,10 
***       DATA FET. 
* 
*T DFET   42/ ,8/ ERRC ,1/E,8/ FUNC ,1/C
*T,       42/ ,18/ FIRST
*T,       42/ ,18/ IN 
*T,       42/ ,18/ OUT
*T,       12/ UNIT,29/ ,1/T ,18/ LIMIT
*T,       60/ EBUF
*T,       60/ HBUF
* 
*         WHERE.
*         ERRC = ERROR RETURN CODE. 
*         E = EOI STATUS(READ). 
*         FUNC = FUNCTION CODE. 
*                READ, WRITE, REWIND/UNLOAD.
*         C = COMPLETE STATUS.
*         FIRST = FIRST POINTER.
*         IN = IN POINTER.
*         OUT = OUT POINTER.
*         UNIT = UNIT NUMBER. 
*         T = TERMINATE STREAMING FLAG. 
*         LIMIT = LIMIT POINTER.
*         EBUF = HARDWARE ERROR STATUS BUFFER(5 WORDS). 
*         HBUF = STRIPE HEADER BUFFER(20 WORDS).
          SPACE  4,10 
***       STRIPE FORMAT.
* 
*         EACH M860 STRIPE IS CAPABLE OF HOLDING
*         6530 8 BIT BYTES OF DATA. 
*         1SS WRITES A 150 BYTE HEADER, 483 - 6279 BYTES OF DATA
*         AND EITHER A TAPEMARK (EOI) OR A 90 BYTE TRAILER. 
*         DATA CONSISTS OF FROM 1 TO 13 DISK SECTORS WITH PARTIAL 
*         NOS CONTROL WORDS.  THE FIRST CONTROL WORD HAS ONLY 
*         THE PP WORD COUNT OF ACTUAL DATA AND THE SECOND CONTROL 
*         WORD ONLY HAS THE LEVEL NUMBER.  THE REST OF THE CONTROL
*         WORDS ARE RECONSTRUCTED BY 1SS BEFORE WRITING THE 
*         DATA TO THE CM BUFFER.
          SPACE  4,10 
***       JOB DAYFILE MESSAGES. 
* 
*         *1SS ABT.*    FIELD LENGTH ERROR. 
*         *1SS INVALID FUNCTION.*  INPUT REG. FUNCTION INVALID. 
* 
* 
*         IF SENSE SWITCH 1 IS ON, TRACE AND TIMING MESSAGES
*         ARE ISSUED TO THE CONTROL POINT DAYFILE.
          SPACE  4,10 
*         COMMON DECKS. 
  
  
          LIST   X
*CALL     COMBCDD 
          LIST   -X 
*CALL     COMPMAC 
*CALL     COMPCHI 
          TITLE  ASSEMBLY CONSTANTS.
*         DIRECT CELLS. 
  
  
          LOC    16 
 CL       BSS    1           FUNCTION TIMEOUT CLOCK 
 EO       BSS    1           END OF OPERATION TIMEOUT CLOCK 
 CN       BSS    5           CM WORD BUFFER 
 BC       BSS    1           BYTE COUNT 
 EC       BSS    1           ERROR CODE 
 FE       BSS    2           FET ADDRESS
 IC       BSS    1           IDLE COUNTER 
 MW       BSS    1           MESSAGE WAITING FLAG 
 RC       BSS    1           RECALL COUNT 
 ST       BSS    1           GENERAL STATUS 
 WC       BSS    1           WORD COUNT 
 ES       BSS    1           EST ORDINAL OF CONTROL UNIT
 EQ       BSS    1           EQUIPMENT NUMBER OF CONTROL UNIT 
 PC       BSS    1           PRU COUNT WITHIN A DATA STRIPE 
 UN       BSS    1           UNIT NUMBER FOR DATA I/O 
 SC       BSS    1           STRIPE COUNTER 
 DR       BSS    2           CPU DRIVER RECALL ADDRESS
          LOC    *O 
          LOC    60 
 FT       BSS    2           FIRST POINTER
 IN       BSS    2           IN POINTER 
 OT       BSS    2           OUT POINTER
 LM       BSS    2           LIMIT POINTER
          LOC    *O 
          SPACE  4,10 
*         EQUATES.
  
  
 CH       EQU    0           DEFAULT CHANNEL NUMBER 
 DSTL     EQU    24          DETAIL (FSC) STATUS LENGTH 
 BRTL     EQU    77          BUSY RETRY LIMIT 
 EOPL     EQU    480D        END OF OP. TIME LIMIT
 FTOL     EQU    360D        FUNCTION TIMEOUT LIMIT 
 GSTL     EQU    3           GENERAL STATUS LENGTH
 IPLM     EQU    400D        IDLE PASS LIMIT BEFORE DROP PP 
 MSBC     EQU    43D         LENGTH OF MESSAGE IN PP BYTES
 MSWC     EQU    9D          LENGTH OF MESSAGE IN CM WORDS
 MXAD     EQU    3601        MAX ASSOCIATED DATA BYTE COUNT + 1 
 MXWC     EQU    256D        CM WORD COUNT OF MAX ASSOC DATA
 PRUL     EQU    66D         LENGTH OF PRU WITH CONTROL WORDS 
          SPACE  4,20 
*         HARDWARE FUNCTION CODES.
  
  
 RELF     EQU    1           RELEASE UNIT 
 CMRF     EQU    2           CONNECT FOR MESSAGE READ 
 CMWF     EQU    3           CONNECT FOR MESSAGE WRITE
 REWF     EQU    10          REWIND 
 STPF     EQU    11          STOP TAPE MOTION 
 GSTF     EQU    12          GENERAL STATUS 
 RISF     EQU    14          INTERRUPT STATUS 
 CONF     EQU    20          CONNECT TO VIRTUAL TAPE UNIT 
 REDF     EQU    40          READ DATA
 MRDF     EQU    43          MESSAGE READ 
 WRTF     EQU    50          WRITE DATA 
 WTMF     EQU    51          WRITE TAPE MARK
 MWRF     EQU    53          MESSAGE WRITE
 RUNF     EQU    110         REWIND/UNLOAD
 CDEF     EQU    120         CHECK FOR DEVICE END 
 WUMF     EQU    140         WAIT UNIT MOUNTED
 SWRF     EQU    250         SHORT WRITE
 FSTF     EQU    312         FSC STATUS 
 MCLF     EQU    414         MASTER CLEAR 
 DSTF     EQU    704         DIAGNOSTIC STATUS
          SPACE  4,10 
*         NOS 2 COMPATIBILITY.
  
  
          IF     -DEF,HNGM,1
 HNGM     EQU    MXFM        HANG PPU MONITOR FUNCTION
          SPACE  4,10 
          TITLE  LOCAL MACROS.
          SPACE  4,10 
**        LOCAL MACROS. 
  
          SPACE  4,10 
**        ERROR - PROCESS ERROR.
* 
*         ERROR  EC 
* 
*         EC     ERROR CODE.
  
  
          PURGMAC ERROR 
  
 ERROR    MACRO  E
          MACREF ERROR
          LDN    E
          RJM    ERR
          ENDM
 FETA     SPACE  4,10 
**        FETA - LOAD ABSOLUTE FET ADDRESS. 
* 
*         FETA   A
* 
*         A = OFFSET INTO FET.
  
  
          PURGMAC FETA
  
 FETA     MACRO  A
          MACREF FETA 
          LDD    FE 
          SHN    14 
          ADD    FE+1 
          IFC    NE,$A$$,1
          ADN    A
          RJM    CFL
          ENDM
 LDCA     SPACE  4,10 
**        LDCA - LOAD CENTRAL ADDRESS.
* 
*         LDCA   A
* 
*         (A, A+1) = RELATIVE ADDRESS.
  
  
          PURGMAC LDCA
  
 LDCA     MACRO  A
          MACREF LDCA 
          LDD    A
          LPN    77 
          SHN    14 
          ADD    A+1
          RJM    CFL         CHECK ADDRESS
          ENDM
          TITLE  MAIN ROUTINE.
**        SSD - MAIN ROUTINE. 
  
  
          ORG    PPFW 
 SSD      RJM    PRS         PRESET 
  
*         PROCESS CYBER MESSAGES. 
  
 SSD1     LDC    0           MESSAGE OUTPUT FET ADDRESS 
 SSDA     EQU    *-1
          STD    FE+1 
          SHN    -14
          STD    FE 
          RJM    WMS         WRITE ANY MESSAGES TO M862 
  
*         PROCESS M860 MESSAGES.
  
 SSD2     LDC    0           MESSAGE INPUT FET ADDRESS
 SSDB     EQU    *-1
          STD    FE+1 
          SHN    -14
          STD    FE 
          RJM    CKM         CHECK FOR MESSAGE
  
*         PROCESS DATA I/O. 
  
          LDCA   IR+3 
          ADN    1
          CRD    CM          READ DATA FET ADDRESS
          LDD    CM+3 
          STD    FE 
          SHN    14 
          ADD    CM+4 
          ZJN    SSD4        IF NO DATA FET 
          STD    FE+1 
          RJM    CFL         CHECK FIELD LENGTH 
          RJM    PDF         PROCESS DATA FET 
  
*         CHECK FOR ACTIVITY. 
  
 SSD4     LDD    MW 
          ZJN    SSD6        IF NO ACTIVITY 
          LDC    IPLM 
          STD    IC          INITIALIZE IDLE PASS LIMIT 
 SSD5     LJM    SSD1        LOOK FOR WORK TO DO
  
 SSD6     SOD    IC 
          ZJN    SSD7        IF IDLE PASS LIMIT 
          PAUSE 
          LDD    CM+1 
          NJN    DPP         IF ERROR FLAG
          DELAY 
          UJN    SSD5        LOOK FOR WORK
  
 SSD7     LDN    ZERL 
          CRD    CM 
          AOD    CM+4 
          LDCA   DR 
          CWD    CM          ACTIVATE CPU DRIVER
  
 DPP      LDCA   IR+3 
          CRD    CM          READ AVTIVITY WORD 
          LDD    CM+4 
          SCN    1           CLEAR PPU ACTIVE 
          STD    CM+4 
          LDCA   IR+3 
          CWD    CM 
 DPP1     MONITOR DPPM
          LJM    PPR         EXIT TO PPR
 ERR      SPACE  4,10 
**        ERR - PROCESS ERROR.
* 
*         ENTRY  (A) = ERROR CODE.
* 
*         EXIT   TO *DPP*.
* 
*         CALLS  MCL, SCB.
* 
*         USES   EC.
  
  
 ERR      CON    0           CALLERS ADDRESS FOR DEBUG
          STD    EC 
          SBN    RCHWET 
          MJN    ERR4        IF NOT HARDWARE ERROR TYPE 
          SBN    RCMCLR-RCHWET
          MJN    ERR3        IF NO MASTERCLEAR REQUIRED 
          RJM    MCL         MASTER CLEAR FSC 
 ERR3     LDN    ERRL 
          STD    CM 
          FETA   ERRW 
          CWM    GSTS,CM     WRITE STATUS TO FET
 ERR4     RJM    REL         RELEASE CHANNEL
 TRCA     LDN    0
          NJN    ERR5        IF TRACE MODE
          LDD    EC 
          SBN    RCHWET 
          MJN    ERR6        IF NOT HARDWARE ERROR
 ERR5     EXECUTE  2SS       LOG ERROR
 ERR6     LDN    0           ERROR STATUS ONLY
          RJM    SCB         SET FET COMPLETE 
          LDN    ZERL 
          CRD    CM 
          AOD    CM+4 
          LDCA   DR 
          CWD    CM          RECALL CPU DRIVER
          LJM    DPP         DROP PP
          TITLE  FUNCTION PROCESSORS. 
 PDF      SPACE  4,10 
**        PDF - PROCESS DATA FET. 
* 
*         ENTRY  (FE - FE+1) = FET ADDRESS. 
* 
*         EXIT   DATA FET REQUEST PROCESSED.
* 
*         CALLS  IBP, RDA, RUL, WDA.
* 
*         USES   T1, CM - CM+4, CN - CN+4, ES, EQ, CH, PC, UN.
  
  
 PDF      SUBR               ENTRY     EXIT 
          FETA
          CRD    CM          READ REQUEST WORD
          ADN    4
          CRD    CN          READ LIMIT WORD
          LDD    CM+4 
          SHN    21-0 
          MJN    PDFX        IF NO FUNCTION 
          SHN    22-21
          LPC    777
          STD    CM+4 
          LDC    TFCN        TABLE OF LEGAL FUNCTIONS 
          STD    T1 
 PDF1     LDI    T1 
          NJN    PDF2        IF NOT END OF TABLE
          ERROR  RCILLF      ILLEGAL FUNCTION 
  
 PDF2     LMD    CM+4 
          ZJN    PDF3        IF FUNCTION FOUND
          LDN    2
          RAD    T1          ADVANCE TABLE ENTRY
          UJN    PDF1        CHECK NEXT ENTRY 
  
 PDF3     LDM    1,T1        PROCESSOR ADDRESS
          STM    PDFA 
          LDD    CN 
          STD    UN          SET UNIT NUMBER
          SBN    17+1 
          MJN    PDF4        IF LEGAL UNIT NUMBER 
          ERROR  RCILLU      ILLEGAL UNIT NUMBER
  
 PDF4     RJM    IBP         INITIALIZE BUFFER POINTERS 
          RJM    **          PROCESS FUNCTION 
 PDFA     EQU    *-1
          LJM    PDFX        RETURN 
 TFCN     SPACE  4,10 
**        TFCN - TABLE OF LEGAL FUNCTIONS AND PROCESSORS. 
* 
*T,TFCN   12/ FUNCTION CODE ,12/PROC. ADDRESS 
  
  
 TFCN     BSS    0           TABLE OF LEGAL FUNCTION REQUESTS 
          CON    FCRUN,RUN   REWIND/UNLOAD
          CON    FCCWR,RDA   CONTROL WORD READ DATA 
          CON    FCCWW,WDA   CONTROL WORD WRITE DATA
          CON    0           END OF TABLE 
 RDA      SPACE  4,10 
**        RDA - READ DATA IN STRIPE FORMAT. 
* 
*         ENTRY  FET INITIALIZED. 
* 
*         EXIT   EOI SET IN FET, ERROR OTHERWISE. 
* 
*         CALLS  CIB, CON, DV5, FCN, REL, SCB, ST, WBB. 
* 
*         USES   T0, T1, CM - CM+4, AC, BC, PC, RC, WC. 
  
  
 RDA      SUBR               ENTRY/EXIT 
 TRCB     LDN    0
          ZJN    RDA0        IF NOT TRACE MODE
          LDC    =C*RDA.*+CPON
          RJM    DFM
 RDA0     LDN    0
          STD    SC          CLEAR STRIPE COUNTER 
          STD    PC          CLEAR PRU COUNT
          STM    PBUF        INITIALIZE FIRST CONTROL WORD
          STM    PBUF+2 
          STM    PBUF+3 
          LDD    HN 
          STM    PBUF+1 
          LDN    ZERL        INITIALIZE SECOND CONTROL WORD 
          CRM    PBUF+PRUL*5-5,ON 
          RJM    CON         CONNECT UNIT 
 RDA1     RJM    CIB         CHECK INPUT BUFFER 
          ADC    -PRUL*PRUPST 
          PJN    RDA1.1      IF ROOM FOR FULL STRIPE
          LDN    0           NO READ IN PROGRESS
          RJM    RCL         RECALL CPU AND PAUSE 
          UJN    RDA1        CHECK AGAIN
  
 RDA1.1   LDN    REDF 
          RJM    FCN         READ FUNCTION
          ACN    CH 
          LDC    HDRL*5 
          STD    BC 
          IAM    HBUF,CH     INPUT HEADER 
          NJN    RDA2        IF NOT FULL BLOCK
          LDN    HDRL 
          STD    T1 
          FETA   HDRW 
          CWM    HBUF,T1     WRITE HEADER TO CM 
          LDN    BRTL 
          STM    CBSA        INITIALIZE RETRY COUNT 
          LJM    RDA7        READ DATA
  
 RDA2     STD    WC          SAVE REMAINDER 
          DCN    CH+40
          LDN    GSTF 
          RJM    STS         WAIT END OF OPERATION
          SHN    21-13
          PJN    RDA4        IF NO ALERT
          LDM    STEC 
          LPC    -2000B 
          NJN    RDA3        IF EC .NE. 0 OR PARITY ERROR 
          LDM    FSTS+4 
          SHN    21-1 
          PJN    RDA3        IF NOT TAPE BOTTOM RIGHT 
          ERROR  RCENDV 
  
 RDA3     RJM    CBS         CHECK BUSY STATUS
          NJN    RDA3.1      IF NOT TO RETRY
          LJM    RDA1        RETRY READ 
  
 RDA3.1   ERROR  RCSTER      STATUS ERROR 
  
 RDA4     LDD    BC 
          LMD    WC 
          NJN    RDA5        IF NOT EMPTY BLOCK 
          LDD    ST 
          SHN    21-4 
          MJN    RDA6        IF EOI 
          LDN    REDF 
          RJM    FCN         READ FUNCTION
          ACN    CH 
          LDN    1
          IAM    CM,CH
          DCN    CH+40
          LDN    GSTF 
          RJM    STS         WAIT END OF OPERATION
          SHN    21-4 
          MJN    RDA6        IF EOI 
 RDA5     ERROR  RCCHIN      CHANNEL HANG ERROR 
  
 RDA6     LDD    TH 
          RJM    SCB         SET COMPLETE WITH EOI
          LJM    RDAX        RETURN 
  
 RDA7     BSS    0
 RDA8     LDN    0
          STD    RC          CLEAR RECALL COUNT 
          LDC    500+2
          STD    BC 
          IAM    PBUF+4,CH
          ZJN    RDA9        IF FULL PRU
          LJM    RDA2        CHECK FOR EOI
  
 RDA9     LDM    PBUF+4 
          ADC    -501 
          MJN    RDA11       IF BYTE COUNT OK 
 RDA10    ERROR  RCCWER      CONTROL WORD ERROR 
  
 RDA11    ADC    501
          RJM    DV5
          ADN    2           ADD CONTROL WORDS
          STD    WC 
          SBN    2
          STD    T0 
          SHN    2           *4 
          ADD    T0          *5 
          LMM    PBUF+4 
          NJN    RDA10       IF NOT EXACT MULTIPLE OF 5 
          RJM    WBB         WRITE PRU
          AOD    PC 
          SBN    PRUPST 
          ZJN    RDA12       IF FULL STRIPE 
          ADN    PRUPST/2 
          NJN    RDA11.1     IF NOT 1/2 STRIPE READ 
          LDN    DRCM 
          STD    CM 
          LDD    OA 
          CWD    CM          RECALL CPU DRIVER
 RDA11.1  LJM    RDA7        READ NEXT PRU
  
 RDA12    STD    PC          CLEAR PRU COUNT
          LDN    TLRL*5 
          STD    BC 
          IAM    TBUF,CH
          ZJN    RDA13       IF FULL TRAILER
          LJM    RDA2        CHECK FOR EOI
  
 RDA13    DCN    CH+40
          LDN    GSTF 
          RJM    STS         WAIT END OF OP 
          SHN    21-13
          PJN    RDA14       IF NO ALERT
          ERROR  RCSTER      STATUS ERROR 
  
 RDA14    LDM    TBUF 
          SHN    21-13
          MJN    RDA15       IF TRAILER 
          ERROR  RCHDER 
  
 RDA15    SHN    13-12
          PJN    RDA16       IF NOT END OF VOLUME 
          ERROR  RCENDV      END OF VOLUME RETURN 
  
 RDA16    SHN    12+1 
          LPC    3777        CLEAR TRAILER FLAG 
          STM    TBUF 
          LDN    TLRL 
          STD    T1 
          FETA   HDRW 
          CWM    TBUF,T1
          LDN    DRCM 
          STD    CM 
          LDD    OA 
          CWD    CM          RECALL CPU 
          AOD    SC 
          SBN    STRPAU 
          NJN    RDA17       IF NOT FULL AU 
          STD    SC 
          AOD    RC 
*         LDN    1           FLAG READ
          RJM    RCL         PAUSE AND CHECK ERROR FLAG 
 RDA17    FETA   4
          CRD    CM          READ LIMIT WORD
          LDD    CM+3 
          SHN    -6 
          ZJN    RDA18       IF TERMINATE FLAG NOT SET
          ERROR  RCTERF      TERMINATE FLAG RETURN
  
 RDA18    LDD    SC 
          NJN    RDA19       IF NOT END OF AU 
          RJM    CMG         CHECK FOR MESSAGES 
 RDA19    LJM    RDA1        CONTINUE READ
 RMS      SPACE  4,10 
**        RMS - READ MESSAGE AND ASSOCIATED DATA. 
* 
*         ENTRY  MESSAGE WAITING INTERRUPT FROM M862. 
*                CHANNEL RESERVED.
* 
*         EXIT   (A) .NE. 0, IF NO BUFFER SPACE FOR MESSAGE.
*                (A) .EQ. 0, IF MESSAGE READ. 
* 
*         CALLS  CIB, DV3, DV5, FCN, IBP, REL, STS, WMB.
* 
*         USES   BC, CM - CM+4, FE, FE+1, WC, T1, T2, T4, T5, T6, T7. 
  
  
 RMS0     RJM    REL         RELEASE CHANNEL
          LDN    ZERL 
          CRD    CM 
          LDD    IN 
          STD    CM+3 
          LDD    IN+1 
          STD    CM+4 
          FETA   2
          CWD    CM          UPDATE IN POINTER IN FET 
          LDN    ZERL 
          CRD    CM 
          AOD    CM+4 
          LDCA   DR 
          CWD    CM          RECALL CPU DRIVER
          MONITOR DRCM
*         LDN    0           SET MESSAGE READ 
  
 RMS      SUBR               ENTRY/EXIT 
          RJM    IBP         INITIALIZE BUFFER PARAMETERS 
          RJM    CIB         CHECK INPUT BUFFER 
          ADC    -MSWC-MXWC 
          PJN    RMS1        IF ROOM IN BUFFER
          RJM    REL         RELEASE CHANNEL
          LDN    ZERL 
          CRD    CM 
          AOD    CM+4 
          LDCA   DR 
          CWD    CM          RECALL CPU DRIVER
          MONITOR DRCM       RECALL CPU 
          LDN    1           SET MESSAGE WAITING FOR BUFFER 
          UJN    RMSX        RETURN 
  
 RMS1     LDN    CMRF 
          RJM    CMD         CONNECT TO MESSAGE READ DEVICE 
          LDN    MRDF 
          RJM    FCN         ISSUE MESSAGE READ FUNCTION
          LDN    MSBC 
          ACN    CH 
 RMS2     IJM    RMS3,CH     IF ERROR 
          EJM    RMS2,CH     IF DATA NOT AVAILABLE
 RMS3     IAM    BUFR,CH     READ MESSAGE 
          DCN    CH+40
          STD    BC          SAVE REMAINDER 
          LMN    MSBC 
          NJN    RMS3.1      IF NOT EMPTY MESSAGE 
          LJM    RMS0        EXIT 
  
 RMS3.1   LDN    GSTF 
          RJM    STS         WAIT END OF OPERATION
          SHN    21-13
          PJN    RMS4        IF NO ERROR
          ERROR  RCSTER      STATUS ERROR 
  
 RMS4     LDD    BC 
          ZJN    RMS5        IF FULL BLOCK
          ERROR  RCCHIN      CHANNEL HANG 
  
 RMS5     LDN    MSWC 
          STD    WC 
          RJM    WMB         WRITE MESSAGE TO BUFFER
 TRCC     LDN    0
          ZJN    RMS5.5      IF NOT TRACE MODE
          LDC    2RIN 
          RJM    MDF         MESSAGE TO DAYFILE 
          RJM    GMT         GET MESSAGE TYPE 
          LMC    0#81 
          NJN    RMS5.5      IF NOT REWIND UNLOAD MSG 
          RJM    RUM         REWIND UNLOAD MESSAGES 
 RMS5.5   LDM    BUFR+2 
          SHN    -4 
          STD    T2 
          LDM    BUFR+1 
          LPC    377
          SHN    10 
          RAD    T2 
          NJN    RMS7        IF ASSOCIATED DATA BLOCK PRESENT 
 RMS6     LJM    RMS0        UPDATE FET 
  
 RMS7     ADC    -MXAD
          PJN    RMS8        IF ASSOC DATA GOES TO AUX BUFFER 
          LDN    0
          STD    T1 
          STD    T4          CLEAR FULL BLOCK COUNT 
          STD    T6          CLEAR AUX BUFFER ADDRESS 
          STD    T7 
          LJM    RMS10
  
 RMS8     ADC    MXAD 
          SHN    -14
          STD    T1 
          FETA   4
          CRD    CM          READ LIMIT WORD
          LDD    CM+1 
          LPN    77 
          STD    T6          SET AUX BUFFER 
          SHN    14 
          ADD    CM+2 
          STD    T7 
          NJN    RMS9        IF AUX BUFFER PRESENT
 RMS8.1   LDN    REDF 
          RJM    FCN         ISSUE READ FUNCTION
          ACN    CH 
          IAN    CH 
          RJM    FIN         FLUSH INPUT
          RJM    GMT         GET MESSAGE TYPE 
          LMN    0#04 
          NJN    RMS8.2      IF NOT READ CART. LABEL
          LJM    RMS0        PUT MESSAGE IN BUFFER
  
 RMS8.2   ERROR  RCDLER      DATA LENGTH ERROR
  
 RMS9     RJM    CFL         CHECK ADDRESS
          RJM    GMT         GET MESSAGE TYPE 
          LMN    0#11 
          NJN    RMS8.1      IF NOT READ WITH ERROR MESSAGE 
*         LDN    0
          STD    T4          CLEAR FULL BLOCK COUNT 
 RMS10    LDD    T1 
          SHN    14 
          ADD    T2 
          ADC    -500*3/2 
          MJN    RMS11       IF NO MORE FULL BLOCKS 
          STD    T2 
          SHN    -14
          STD    T1 
          AOD    T4          INCREMENT FULL BLOCK COUNT 
          UJN    RMS10       CHECK FOR MORE FULL BLOCKS 
  
 RMS11    LDD    T2 
          STD    BC 
          ZJN    RMS12       IF NO PARTIAL BLOCK
          SHN    1           *2 
          RJM    DV3         DIVIDE BY 3
          STD    BC          SET PP BYTE COUNT
          RJM    DV5         DIVIDE BY 5 = CM WORD COUNT
          STD    T5 
 RMS12    LDN    CMRF 
          RJM    CMD         RESERVE MESSAGE EVICE
          LDN    REDF 
          RJM    FCN         FUNCTION FOR READ
          ACN    CH 
          LDD    T4 
          NJN    RMS13       IF MORE FULL BLOCKS
          LJM    RMS19       PROCESS SHORT BLOCK
  
 RMS13    LDC    500
          IAM    BUFR,CH     READ FULL BLOCK
          ZJN    RMS16       IF FULL BLOCK
 RMS14    DCN    CH+40
          LDN    GSTF 
          RJM    STS         WAIT END OF OP 
          SHN    21-13
          PJN    RMS15       IF NO ERROR
          ERROR  RCSTER      STATUS ERROR 
  
 RMS15    ERROR  RCCHIN      CHANNEL HANG 
  
 RMS16    LDD    T6 
          ADD    T7 
          NJN    RMS17       IF AUX BUFFER PRESENT
          LDD    HN 
          STD    WC 
          RJM    WMB         WRITE BLOCK TO CM
          UJN    RMS18       CHECK FOR NEXT BLOCK 
  
 RMS17    LDCA   T6 
          CWM    BUFR,HN     WRITE DATA TO AUX BUFFER 
          LDD    HN 
          RAD    T7 
          SHN    -14
          RAD    T6 
 RMS18    SOD    T4 
          ZJN    RMS19       IF NO MORE FULL BLOCKS 
          LJM    RMS13       GET NEXT BLOCK 
  
 RMS19    LDD    BC 
          ZJN    RMS20       IF NO PARIIAL BLOCK
          IAM    BUFR,CH
          ZJN    RMS20       IF ALL DATA READ 
          LJM    RMS14       CHECK STATUS 
  
 RMS20    DCN    CH+40
          LDN    GSTF 
          RJM    STS         WAIT END OF OPERATION
          SHN    21-13
          PJN    RMS21       IF NOT ALERT 
          ERROR  RCSTER      STATUS ERROR RETURN
  
 RMS21    LDD    BC 
          ZJN    RMS23       IF NO PARTIAL BLOCK
          LDD    T6 
          ADD    T7 
          NJN    RMS22       IF AUX BUFFER PRESENT
          LDD    T5 
          STD    WC 
          RJM    WMB         WRITE DATA TO BUFFER 
          UJN    RMS23       UPDATE FET 
  
 RMS22    LDCA   T6 
          CWM    BUFR,T5     WRITE DATA TO AUX BUFFER 
 RMS23    LJM    RMS0        UPDATE FET 
 RUM      SPACE  4,10 
**        RUM - REWIND UNLOAD MESSAGES
* 
*         ENTRY  (BUFR) CONTAINS REWIND UNLOAD MESSAGE
* 
*         EXIT   PHYSICAL AND LOGICAL STRIPES TO DAYFILE
* 
*         CALLS  CHN, DFM.
* 
*         USES   T0.
  
  
 RUM      SUBR               ENTRY/EXIT 
          LDM    BUFR+35
          SHN    -8D
          STD    T0 
          LDM    BUFR+34
          SHN    4
          LMD    T0 
          RJM    CHN         CONVERT PHYSICAL STRIPE
          LDC    2R P 
          STM    RUMA 
          LDC    RUMA+CPON
          RJM    DFM         ISSUE MESSAGE
          LDM    BUFR+36
          LPN    0#F
          SHN    14 
          LMM    BUFR+37
          RJM    CHN         CONVEWT LOGICAL STRIPE 
          LDC    2R L 
          STM    RUMA 
          LDC    RUMA+CPON
          RJM    DFM         ISSUE MSSAGE 
          LJM    RUMX        RETURN 
  
  
 RUMA     DIS    ,* XS = 1234.* 
 CHN      SPACE  4,10 
**        CHN - CONVERT HEX NUMBER
* 
*         ENTRY  (A) = 16 BIT NUMBER
* 
*         EXIT   (RUMA+3, RUMA+4) = DISPLAY CODE HEX NUMBER 
* 
*         CALLS  CTH. 
* 
*         USES   T1.
  
  
 CHN      SUBR               ENTRY/EXIT 
          STD    T1 
          SHN    -14
          RJM    CTH         CONVERT 1ST DIGIT
          SHN    6
          STM    RUMA+3 
          LDD    T1 
          SHN    -8D
          RJM    CTH         CONVERT 2ND DIGIT
          RAM    RUMA+3 
          LDD    T1 
          SHN    -4 
          RJM    CTH         CONVERT 3RD DIGIT
          SHN    6
          STM    RUMA+4 
          LDD    T1 
          RJM    CTH         CONVERT 4TH DIGIT
          RAM    RUMA+4 
          UJN    CHNX        RETURN 
 RUN      SPACE  4,10 
**        RUN - REWIND UNLOAD UNIT. 
* 
*         ENTRY  (UN) = UNIT NUMBER.
* 
*         EXIT REWIND UNLOAD ISSUED.
* 
*         CALLS  FCN, RES, SCB. 
* 
*         USES   CM - CM+4. 
  
  
 RUN      SUBR               ENTRY/EXIT 
 TRCD     LDN    0
          ZJN    RUN0.0      IF NOT TRACE MODE
          LDC    =C*RUN.*+CPON
          RJM    DFM
 RUN0.0   RJM    RES         RESERVE CHANNEL
          LDN    CONF 
          ADD    UN 
          RJM    FCN         CONNECT UNIT 
          LDN    GSTF 
          RJM    STS         GET STATUS 
          SHN    21-11
          MJN    RUN0        IF UNIT NOT CONNECTED
          LDC    RUNF 
          RJM    FCN         ISSUE REWIND UNLOAD
          LDN    GSTF 
          RJM    STS         GET STATUS 
          SHN    21-13
          PJN    RUN1        IF NOT ALERT 
 RUN0     ERROR  RCSTER      STATUS ERROR 
  
 RUN1     LDN    0
          RJM    SCB         SET FET COMPLETE 
 TRCE     LDN    0
          ZJN    RUN2        IF NOT TRACE MODE
          LDC    RTCL 
          CRD    CM          READ MILLISECOND CLOCK 
          LDN    0
          STD    CM          CLEAR SECOND COUNT 
          STD    CM+1 
          STD    CM+2        ONLY USE 24 BITS 
          LDD    MA 
          CWD    CM 
          LDN    1
          STD    CM+1        ONLY 1 VALUE TO BE CONVERTED 
          MONITOR RDCM       CONVERT TO F10.3 
          LDD    MA 
          CRM    RUNB,ON
          LDC    RUNA+CPON
          RJM    DFM         ISSUE DAYFILE MESSAGE
 RUN2     LJM    RUNX 
  
  
 RUNA     DATA   12HRUNL
 RUNB     BSS    6           MILLISECOND CLOCK
 WDA      SPACE  4,10 
**        WDA - WRITE DATA IN STRIPE FORMAT.
* 
*         ENTRY  (UN) = UNIT NUMBER.
* 
*         EXIT   AT EOI, ERROR OTHERWISE. 
* 
*         CALLS  CFS, DV5, FCN, RBB, REL, SCB, STS. 
* 
*         USES   T7, CM - CM+4, AC, PC, RC, WC. 
  
  
 WDA      SUBR               ENTRY/EXIT 
 TRCF     LDN    0
          ZJN    WDA0.0      IF NOT TRACE MODE
          LDC    =C*WDA.*+CPON
          RJM    DFM
 WDA0.0   LDN    0
          STD    SC          CLEAR STRIPE COUNT 
          STD    PC          CLEAR PRU COUNT
          LDN    HDRL 
          STD    T1 
          LDN    TLRL 
          STD    T2 
          FETA   HDRW 
          CRM    HBUF,T1     READ HEADER
          SBN    HDRL 
          CRM    TBUF,T2     READ TRAILER 
          LDC    4000 
          RAM    TBUF        SET TRAILER FLAG 
          RJM    CON         CONNECT UNIT 
 WDA0     RJM    CFS         CHECK FOR FULL STRIPE
          LDN    WRTF 
          RJM    FCN         WRITE FUNCTION 
          ACN    CH 
          LDC    HDRL*5 
          OAM    HBUF,CH     OUTPUT HEADER
          NJN    WDA1        IF NOT ALL DATA OUTPUT 
          LJM    WDA4        CONTINUE WRITE 
  
 WDA1     DCN    CH+40
          LDN    GSTF 
          RJM    STS
          SHN    21-13
          MJN    WDA2        IF ALERT 
          ERROR  RCCHOT      CHANNEL HANG RETURN
  
 WDA2     LDM    FSTS+4 
          SHN    21-1 
          PJN    WDA3        IF NOT TAPE BOTTOM RIGHT 
          LDM    STEC 
          NJN    WDA3        IF EC .NE. 0 OR PARITY ERROR 
          ERROR  RCTBRT      TAPE BOTTOM RIGHT ERROR
  
 WDA3     RJM    CBS         CHECK BUSY STATUS
          NJN    WDA3.1      IF NOT TO RETRY
          FETA   3
          CRD    CM          RESET OUT POINTER
          LDD    CM+3 
          STD    OT 
          LDD    CM+4 
          STD    OT+1 
          LJM    WDA0        RETRY WRITE
  
 WDA3.1   ERROR  RCSTER      STATUS ERROR 
  
 WDA4     BSS    0
 WDA5     LDN    BRTL 
          STM    CBSA        RESET RETRY COUNT
          LDCA   OT 
          CRD    CM          READ CONTROL WORD
          LDD    CM 
          SHN    21-12
          PJN    WDA9        IF NOT EOI 
 WDA6     DCN    CH+40
          LDN    GSTF 
          RJM    STS         GET GENERAL STATUS 
          SHN    21-13
          PJN    WDA8        IF NO ALERT
 WDA7     LJM    WDA2        CHECK END OF TAPE
  
 WDA8     LDN    WTMF 
          RJM    FCN         WRITE TAPE MARK
          LDN    1
          STD    WC 
          RJM    RMB         READ MEMORY BUFFER 
          RJM    UCO         UPDATE CENTRAL OUT 
          LDN    GSTF 
          RJM    STS         GET STATUS 
          SHN    21-13
          MJN    WDA7        IF ALERT SET 
          LDN    0
          RJM    SCB         SET FET COMPLETE 
          LJM    WDAX        RETURN 
  
 WDA9     LDD    CM+4 
          ADC    -501 
          MJN    WDA10       IF BYTE COUNT OK 
          ERROR  RCCWER      CONTROL WORD ERROR 
  
 WDA10    LDD    CM+4 
          RJM    DV5
          ADN    2           ADD CONTROL WORDS
          STD    WC 
          RJM    RMB         READ MEMORY BUFFER 
          LDC    500+2
          OAM    PBUF+4,CH
          ZJN    WDA11       IF FULL BLOCK
          LJM    WDA1        CHECK FOR HANG 
  
 WDA11    RJM    UCO         UPDATE CENTRAL OUT 
          AOD    PC          ADVANCE PRU COUNT
          SBN    PRUPST 
          ZJN    WDA12       IF FULL STRIPE 
          ADN    PRUPST/2 
          NJN    WDA11.1     IF NOT TIME TO RECALL CPU
          LDN    DRCM 
          STD    CM 
          LDD    OA 
          CWD    CM 
 WDA11.1  LJM    WDA4        GET NEXT PRU 
  
 WDA12    STD    PC          RESET PRU COUNT
          STD    RC          RESET RECALL COUNT 
 WDA13    RJM    COB         CHECK OUTPUT BUFFER
          NJN    WDA14       IF DATA
*         LDN    0           FLAG WRITE 
          RJM    RCL         RECALL CPU 
          UJN    WDA13       TRY AGAIN
  
 WDA14    LDCA   OT 
          CRD    CM 
          LDD    CM 
          SHN    21-12
          PJN    WDA15       IF NOT EOI 
          LJM    WDA6        CHECK FOR ERROR AND WRITE TAPE MARK
  
 WDA15    LDN    TLRL*5 
          OAM    TBUF,CH
          ZJN    WDA16       IF FULL BLOCK
          LJM    WDA1        CHECK FOR HANG 
  
 WDA16    DCN    CH+40
          LDN    GSTF 
          RJM    STS         GET STATUS 
          SHN    21-13
          PJN    WDA18       IF NO ERROR
          LJM    WDA2        CHECK FOR TAPE BOTTOM RIGHT
  
 WDA18    SHN    13-3 
          PJN    WDA20       IF NOT EOT 
          LDM    TBUF 
          SHN    21-12
          PJN    WDA19       IF NOT ALREADY SET EOV TRAILER 
          ERROR  RCENDV      END OF VOLUME
  
 WDA19    SHN    12+1        REPOSITION 
          ADC    2000 
          STM    TBUF        SET END OF VOLUME FLAG 
 WDA20    AOM    HBUF+4      INCREMENT STRIPE IN FILE 
          STM    TBUF+4 
          SHN    -14
          RAM    HBUF+3 
          STM    TBUF+3 
          AOM    HBUF+1*5+4  INCREMENT STRIPE IN VOLUME 
          STM    TBUF+1*5+4 
          LDN    2
          STD    T1 
          FETA   HDRW 
          CWM    HBUF,T1
          LDN    DRCM 
          STD    CM 
          LDD    OA 
          CWD    CM          RECALL CPU 
          AOD    SC 
          SBN    STRPAU 
          NJN    WDA21       IF NOT FULL AU 
          STD    SC 
          AOD    RC 
          LDN    0           FLAG WRITE 
          RJM    RCL         PAUSE AND CHECK ERROR FLAG 
 WDA21    FETA   4
          CRD    CM          READ LIMIT WORD
          LDD    CM+3 
          SHN    -6 
          ZJN    WDA22       IF TERMINATE FLAG NOT SET
          ERROR  RCTERF      TERMINATE FLAG RETURN
  
 WDA22    LDD    SC 
          NJN    WDA23       IF NOT END OF AU 
          RJM    CMG         CHECK FOR MESSAGES 
 WDA23    LJM    WDA0        CONTINUE WRITE 
 WMS      SPACE  4,10 
**        WMS - WRITE MESSAGE AND ASSOCIATED DATA.
* 
*         ENTRY  (FE - FE+1) = MESSAGE OUTPUT FET.
* 
*         EXIT   ALL MESSAGES OUTPUT TO M860. 
* 
*         CALLS  COB, DV3, DV5, FCN, IBP, RMB, REL, RES, SCB, STS.
*                CMD, CSM, GMT. 
* 
*         USES   T4, CM - CM+4, BC, WC. 
  
  
 WMS      SUBR               ENTRY/EXIT 
          LDN    1
          STM    WMSA        CLEAR RESTART CONTROL UNIT FLAG
          RJM    IBP         INITIALIZE BUFFER PARAMETERS 
          RJM    COB         CHECK OUTPUT BUFFER
          ZJN    WMSX        IF NO MESSAGES 
          FETA               CHECK FOR ERROR CODE SET 
          CRD    CM 
          LDD    CM+4 
          SHN    21-0 
          MJN    WMSX        IF COMPLETE
          LDD    CM+4 
          SHN    -12
          SHN    6
          LMD    CM+3 
          NJN    WMSX        IF ERROR CODE SET
          RJM    RES         RESERVE CHANNEL
 WMS0     RJM    COB         CHECK OUTPUT BUFFER
          NJN    WMS1        IF MESSAGE(S) IN BUFFER
          MONITOR DRCM       RECALL CPU 
          LDC    **          RESTART CONTROL UNIT FLAG
 WMSA     EQU    *-1
          NJN    WMS0.1      IF CONTROL UNIT NOT RESTARTED
          LDN    RISF 
          RJM    STS         IGNORE ANY OUTSTANDING INTERRUPTS
 WMS0.1   RJM    REL         RELEASE CHANNEL
          LJM    WMSX        RETURN 
  
 WMS1     SBN    MSWC 
          PJN    WMS2        IF ENOUGH DATA 
          ERROR  RCDLER      DATA LENGTH ERROR
  
 WMS2     LDN    MSWC 
          STD    WC 
          RJM    RMB         READ MESSAGE 
 TRCG     LDN    0
          ZJN    WMS2.1      IF NOT TRACE MODE
          LDC    2ROT 
          RJM    MDF         MESSAGE TYPE TO DAYFILE
 WMS2.1   LDN    CMWF 
          RJM    CMD         CONNECT TO MESSAGE WRITE DEVICE
          LDC    BRTL 
          STM    WMSB        RETRY LIMIT
 WMS2.2   LDN    MWRF 
          RJM    FCN         ISSUE MESSAGE WRITE FUNCTION 
          LDN    MSBC 
          ACN    CH 
          OAM    BUFR,CH     OUTPUT MESSAGE 
          FJM    *,CH        WAIT FOR LAST BYTE 
          DCN    CH+40
          STD    BC 
          LDN    GSTF 
          RJM    STS         WAIT END OF OPERATION
          SHN    21-13
          PJN    WMS3        IF NO ERROR
          SHN    13-1 
          PJN    WMS2.3      IF NOT BUSY
          SOM    WMSB 
          MJN    WMS2.3      IF RETRY LIMIT 
          RJM    REL         RELEASE CHANNEL
          RJM    BDL         BUSY DELAY 
          RJM    RES         RESERVE CHANNEL
          LJM    WMS2.2      RETRY
  
 WMS2.3   ERROR  RCSTER      STATUS ERROR 
  
 WMS3     LDD    BC 
          ZJN    WMS4        IF FULL BLOCK
          ERROR  RCCHOT      CHANNEL HANG 
  
 WMS4     RJM    GMT         GET MESSAGE TYPE 
          LMN    0#1C 
          STM    WMSA        SET/CLEAR RESTART FLAG 
          LMN    0#1C 
          RJM    CSM         CHECK SPECIAL MESSAGE
          LDM    BUFR+2 
          SHN    -4 
          STD    BC          ASSOCIATED DATA BYTE COUNT 
          LDM    BUFR+1 
          LPC    377
          SHN    10 
          RAD    BC 
          NJN    WMS6        IF ASSOCIATED DATA 
 WMS5     RJM    UCO         UPDATE CENTRAL OUT 
          LJM    WMS0        CHECK FOR MORE MESSAGES
  
 WMS6     ADC    -MXAD
          MJN    WMS7        IF BLOCK NOT TOO BIG 
          ZJN    WMS7        IF BLOCK NOT TOO BIG 
          ERROR  RCDLER      DATA LENGTH ERROR
  
 WMS7     ADC    MXAD 
          SHN    1           *2 
          STD    T4 
          RJM    DV3         /3 = PP BYTE COUNT 
          STD    BC 
          RJM    DV5         GET CM WORD COUNT
          STD    WC 
          RJM    COB         CHECK OUTPUT FET 
          SBD    WC 
          PJN    WMS8        IF DATA IN BUFFER
          ERROR  RCDLER      DATA LENGTH ERROR
  
 WMS8     RJM    RMB         READ DATA TO PP
          LDC    BRTL 
          STM    WMSB        RETRY LIMIT
 WMS8.1   LDD    BC 
          SHN    1           *2 
          ADD    BC          *3 
          SBD    T4          REMAINDER FROM DIVISION BY 3 
          LPN    2           REMAINDER OF 2 = WRITE SHORT 
          SHN    6
          ERRNZ  SWRF-WRTF-200
          ADN    WRTF 
          RJM    FCN         ISSUE WRITE FUNCTION 
          LDD    BC 
          STD    WC          SAVE FOR RETRY 
          ACN    CH 
          OAM    BUFR,CH     SEND ASSOC. DATA 
          FJM    *,CH        WAIT FOR LAST BYTE 
          DCN    CH+40
          STD    BC 
          LDN    GSTF 
          RJM    STS         WAIT END OF OPERATION
          SHN    21-13
          PJN    WMS9        IF NO ERROR
          SHN    13-1 
          PJN    WMS8.2      IF NOT BUSY
          SOM    WMSB 
          MJN    WMS8.2      IF RETRY LIMIT 
          RJM    REL         RELEASE CHANNEL
          RJM    BDL         BUSY DELAY 
          RJM    RES         RESERVE CHANNEL
          LDD    WC 
          STD    BC          RESTORE BYTE COUNT 
          LJM    WMS8.1      RETRY
  
 WMS8.2   ERROR  RCSTER      STATUS ERROR 
  
 WMS9     LDD    BC 
          ZJN    WMS10       IF FULL BLOCK
          ERROR  RCCHOT      CHANNEL HANG 
  
 WMS10    LJM    WMS5        UPDATE FET 
  
  
 WMSB     CON    BRTL        RETRY LIMIT
          TITLE  SUBROUTINES. 
          TITLE  I/O SUBROUTINES. 
 CKM      SPACE  4,10 
**        CKM - CHECK FOR MESSAGE.
* 
*         ENTRY  (MW) .NE. 0, IF MESSAGE ALREADY WAITING. 
* 
*         EXIT   (MW) = 0, IF NO MESSAGE WAITING FOR BUFFER.
* 
*         CALLS  RES, RMS, STS. 
* 
*         USES   MW.
  
  
 CKM      SUBR               ENTRY/EXIT 
          RJM    RES         RESERVE CHANNEL
          LDD    MW 
          NJN    CKM1        IF MESSAGE WAITING 
          LDN    RISF 
          RJM    STS         REQUEST INTERRUPT STATUS 
          SHN    21-10
          MJN    CKM1        IF MESSAGE READY 
          RJM    REL         RELEASE CHANNEL
          UJN    CKMX        RETURN 
  
 CKM1     RJM    RMS         READ MESSAGE 
          STD    MW          SAVE BUFFER STATUS 
          UJN    CKMX        RETURN 
 CMD      SPACE  4,10 
**        CMD - CONNECT TO MESSAGE DEVICE.
* 
*         ENTRY  (A) = CONNECT FUNCTION CODE. 
*                CHANNEL RESERVED.
* 
*         EXIT   MESSAGE DEVICE CONNECTED.
* 
*         CALLS  FCN, STS.
* 
*         USES   NONE.
  
  
 CMD      SUBR               ENTRY/EXIT 
          STM    CMDA        SAVE FUNCTION CODE 
          LDC    BRTL 
          STM    CMDB        RETRY LIMIT
 CMD0     LDC    ** 
 CMDA     EQU    *-1
          RJM    FCN         ISSUE CONNECT FUNCTION 
          LDN    GSTF 
          RJM    STS         GET STATUS 
          SHN    21-13
          PJN    CMDX        IF NOT ALERT 
          SOM    CMDB 
          MJN    CMD0.0      IF RETRY LIMIT 
          RJM    REL         RELEASE CHANNEL
          RJM    BDL         BUSY DELAY 
          RJM    RES         RESERVE CHANNEL
          UJN    CMD0        RETRY
  
 CMD0.0   LDM    STEC        ERROR CODE 
          LMC    170
          NJN    CMD1        IF CHANNEL INTERFACE ONLINE
          ERROR  RCCIFO      CHANNEL INTERFACE OFF LINE 
  
 CMD1     ERROR  RCIMPL 
  
  
 CMDB     CON    BRTL        RETRY COUNTER
 CMG      SPACE  4,10 
**        CMG - CHECK FOR MESSAGES. 
* 
*         ENTRY  CHANNEL RESERVED.
* 
*         EXIT   NORMAL, IF NO MESSAGES TO SEND/RECEIVE.
*                TO *SSD1* IF MESSAGES TO PROCESS.
* 
*         CALLS  REL, STS.
* 
*         USES   CM - CM+4, CN - CN+4, MW.
  
  
 CMG      SUBR               ENTRY/EXIT 
          LDN    RISF 
          RJM    STS         GET MESSAGE STATUS 
          SHN    21-10
          PJN    CMG2        IF NO M860 MESSAGE 
          AOD    MW          FLAG MESSAGE READY 
 CMG1     RJM    REL         RELEASE CHANNEL
          LJM    SSD1        PROCESS MESSAGES 
  
 CMG2     LDM    SSDA-1      CHECK MESSAGE FROM EXEC. 
          LPN    77 
          SHN    6
          ADD    RA 
          SHN    6
          ADM    SSDA 
          ADN    2           IN POINTER 
          CRD    CM 
          ADN    1
          CRD    CN          OUT POINTER
          LDD    CM+3 
          LMD    CN+3 
          NJN    CMG1        IF IN .NE. OUT 
          LDD    CM+4 
          LMD    CN+4 
          NJN    CMG1        IF IN .NE. OUT 
          LJM    CMGX        RETURN 
 CON      SPACE  4,10 
**        CON - CONNECT UNIT. 
* 
*         ENTRY  (UN) = UNIT NUMBER.
* 
*         EXIT   CHANNEL RESERVED, UNIT CONNECTED AND NOT BUSY. 
* 
*         CALLS  FCN, RES, STS. 
* 
*         USES   NONE.
  
  
 CON      SUBR               ENTRY/EXIT 
          RJM    WUM         WAIT UNIT MOUNTED
          LDC    BRTL 
          STM    CONA        INITIALIZE BUSY RETRY LIMIT
 CON1     RJM    RES         RESERVE CHANNEL
          LDN    CONF 
          ADD    UN 
          RJM    FCN         CONNECT UNIT 
          LDN    GSTF 
          RJM    STS         GET STATUS 
          SHN    21-13
          PJN    CONX        IF NO ALERT
          LDM    STEC        GET ERROR CODE 
          LMN    2
          ZJN    CON2        IF BUSY CODE 
          LMC    2&165
          NJN    CON3        IF NOT SENSE ERROR 
 CON2     RJM    REL         RELEASE CHANNEL
          SOM    CONA 
          ZJN    CON3        IF RETRY LIMIT 
          RJM    BDL         BUSY DELAY 
          UJN    CON1        TRY AGAIN
  
 CON3     ERROR  RCSTER      STATUS ERROR 
  
  
 CONA     CON    BRTL        BUSY RETRY LIMIT 
 CSM      SPACE  4,10 
**        CSM - CHECK SPECIAL MESSAGE.
* 
*         ENTRY  (A) = MESSAGE CODE.
* 
*         EXIT   SPECIAL MESSAGES PROCESSED.
* 
*         CALLS  FCN, STS.
* 
*         USES   CM - CM+4. 
  
  
 CSM      SUBR               ENTRY/EXIT 
          LMN    0#06 
          NJN    CSM1        IF NOT MOUNT VOLUME
          LDM    BUFR+5      GET UNIT NUMBER
          SHN    -10
          ADC    WUMF        PRIME FSC FOR READY INTERRUPT
          RJM    FCN         ISSUE FUNCTION 
          UJN    CSMX        RETURN 
  
 CSM1     LMC    0#06&0#81
          NJN    CSMX        IF NOT RESPONSE TO REWIND/UNLOAD MSG 
          LDC    RTCL 
          CRD    CM          READ REALTIME CLOCK
          LDD    CM+1        SECONDS
          ADC    EOPL        END OF OP. LIMIT 
          STM    CMSA 
 CSM2     LDM    BUFR+5      GET UNIT NUMBER
          SHN    -10
          ADC    CDEF        CHECK FOR INTERRUPT
          RJM    STS         GET STATUS 
          SHN    21-13
          MJN    CSM4        IF ALERT 
 CSM3     LJM    CSMX        RETURN 
 CSM4     LDM    STEC        ERROR CODE 
          LMN    2
          NJN    CSM3        IF NOT BUSY(EXPECT ALERT/EC=131) 
          RJM    REL         PAUSE CHECK ERROR FLG
          LDC    RTCL 
          CRD    CM          READ REALTIME CLOCK
          LDD    CM+1        SECONDS
          LMC    ** 
 CMSA     EQU    *-1
          ZJN    CSM5        IF TIMEOUT 
          RJM    RES         RESERVE CHANNEL
          UJN    CSM2        CHECK AGAIN
  
 CSM5     ERROR  RCNEOP      NO END OF OPERATION
 DST      SPACE  4,10 
**        DST - DIAGNOSTIC STATUS.
* 
*         ENTRY  CHANNEL RESERVED.
* 
*         EXIT   TO CALLER IF NO ERROR. 
*                TO ERR IF ERROR
* 
*         CALLS  NONE.
* 
*         USES   T0.
  
  
 DST      SUBR               ENTRY/EXIT 
          DCN    CH+40       INSURE INACTIVE CHANNEL
          FNC    DSTF,CH     ISSUE DIAGNOSTIC STATUS FUNCTION 
          LCN    0
 DST1     IJM    DST2,CH     IF FUNCTION ACCEPTED 
          SBN    1
          NJN    DST1        IF NOT TIMEOUT 
          ERROR  RCFCTO      FUNCTION TIMEOUT 
  
 DST2     ACN    CH 
          LCN    0
 DST3     FJM    DST5,CH     IF STATUS READY
          SBN    1
          NJN    DST3        IF NOT TIMEOUT 
 DST4     ERROR  RCCHMF      CHANNEL MALFUNCTION
  
 DST5     LCN    0
          IAN    CH+40
          DCN    CH+40
          MJN    DST4        IF NO DATA READ
          STM    DSTS        PUT IN STATUS BUFFER 
          LPC    3003 
          LMN    2
          ZJN    DSTX        IF NO ERROR
          SHN    21-12
          PJN    DST6        IF NOT CHANNEL PARITY ERROR
          ERROR  RCCHPE 
  
 DST6     SHN    12-11
          PJN    DST7        IF NOT FSC MEMORY PARITY ERROR 
          ERROR  RCFSPE 
  
 DST7     SHN    11-0 
          MJN    DST8        IF PROCESSOR RUNNING 
          ERROR  RCFSNR 
  
 DST8     ERROR  RCFSAB      FSC ABNORMAL 
 FCN      SPACE  4,10 
**        FCN - FUNCTION M860 MSS INTERFACE.
* 
*         ENTRY  (A) = FUNCTION CODE TO BE ISSUED.
* 
*         EXIT   FUNCTION ISSUED, TO ERR IF ERROR.
* 
*         CALLS  DST. 
* 
*         USES   CL, CN - CN+4. 
  
  
 FCN      SUBR               ENTRY/EXIT 
          STM    FSTS+16D    SAVE FUNCTION IN DETAIL STATUS BLOCK 
          ADD    EQ          SET EQUIPMENT NUMBER 
          FAN    CH          ISSUE FUNCTION 
          LDC    RTCL        SET TIMEOUT CLOCK
          CRD    CN 
          LDD    CN+1        SECOND COUNT 
          ADC    FTOL        FUNCTION TIMEOUT LIMIT 
          STD    CL 
          LDN    1
 FCN1     IJM    FCNX,CH     IF ACCEPTED
          ADN    1
          NJN    FCN1        IF NOT TIMEOUT 
          PAUSE 
          LDD    CM+1 
          ZJN    FCN1.0      IF NO ERROR FLAG 
          RJM    REL         RELEASE CHANNEL
          LJM    DPP         DROP PP
  
 FCN1.0   LDC    RTCL        READ CLOCK 
          CRD    CN 
          LDD    CL 
          LMD    CN+1 
          NJN    FCN1        IF NOT TIMEOUT 
          DCN    CH+40
          LDN    GSTF 
          FAN    CH          TRY TO GET GENERAL STATUS
 FCN2     IJM    FCN3,CH     IF ACCEPTED
          ADN    1
          PJN    FCN2        IF NOT TIMEOUT 
          UJN    FCN8        TIMEOUT
  
 FCN3     ACN    CH 
          LDN    1
 FCN4     FJM    FCN5,CH     IF STATUS READY
          ADN    1
          PJN    FCN4        IF NOT TIMEOUT 
          UJN    FCN8        TIMEOUT
  
 FCN5     LDN    GSTL 
          IAM    GSTS,CH     READ GENERAL STATUS
          NJN    FCN8        IF NOT ALL STATUS READ 
          DCN    CH+40
          FNC    FSTF,CH     DETAIL STATUS
 FCN6     IJM    FCN7,CH     IF ACCEPTED
          ADN    1
          PJN    FCN6        IF NOT TIMEOUT 
          UJN    FCN8        TIMEOUT
  
 FCN7     ACN    CH 
          LDN    DSTL 
          IAM    FSTS,CH     READ DETAIL STATUS 
 FCN8     DCN    CH+40
          RJM    DST         GET DIAGNOSTIC STATUS
          ERROR  RCFCTO      FUNCTION TIMEOUT 
 FIN      SPACE  4,10 
**        FIN - FLUSH INPUT.
* 
*         ENTRY  CHANNEL ACTIVE.
* 
*         EXIT   INPUT OPERATION COMPLETE.
* 
*         CALLS  NONE.
* 
*         USES   NONE.
  
  
 FIN      SUBR               ENTRY/EXIT 
 FIN1     IJM    FINX,CH     IF COMPLETE
          LCN    0
 FIN2     FJM    FIN3,CH     IF INPUT READY 
          SBN    1
          NJN    FIN2        IF NOT TIMEOUT 
          DCN    CH+40
          UJN    FINX        RETURN 
  
 FIN3     IAN    CH+40
          UJN    FIN1        GET NEXT BYTE
 MCL      SPACE  4,15 
**        MCL - MASTER CLEAR FSC. 
* 
*         ENTRY  CHANNEL RESERVED.
* 
*         EXIT   FSC MASTERCLEARED. 
* 
*         CALLS  NONE.
* 
*         USES   T0.
  
  
 MCL      SUBR               ENTRY/EXIT 
          DCN    CH+40       INSURE CHANNEL INACTIVE
          FNC    MCLF,CH     MASTERCLEAR
          LDN    12 
          STD    T0 
 MCL1     SOD    T0 
          MJN    MCL3        IF TIMEOUT 
 MCL2     ADN    1
          PJN    MCL2        DELAY
          AJM    MCL1,CH     IF NOT PROCESSED 
          ACN    CH 
          OAN    CH 
          OAN    CH 
          DELAY 
 MCL3     DCN    CH+40
          UJN    MCLX        RETURN 
 MDF      SPACE  4,10 
**        MDF - MESSAGE TYPE TO DAYFILE.
* 
*         ENTRY  (BUFR+2,3) = MESSAGE TYPE, SUBTYPE.
*                (A) = *IN* OR *OT*.
* 
*         EXIT   MESSAGE TO LOCAL DAYFILE.
* 
*         USES   CM.
* 
*         CALLS  CTH, DFM.
  
  
 MDF      SUBR               ENTRY/EXIT 
          STM    MDFC 
          CHTE   *
          LDN    0
          STD    T0 
          SHN    3
          LMD    T0 
          SCN    70 
          ADC    2R00 
          STM    MDFAA+1
          LDM    BUFR+2      FIRST DIGIT OF TYPE
          RJM    CTH         CONVERT TO HEX DISPLAY CODE
          SHN    6
          STM    MDFA+2      STORE IN MESSAGE 
          LDM    BUFR+3      REST OF TYPE, SUBTYPE
          STD    CM 
          SHN    -10
          RJM    CTH         CONVERT TO HEX DISPLAY CODE
          RAM    MDFA+2 
          LDD    CM 
          SHN    -4 
          RJM    CTH         CONVERT TO HEX DISPLAY CODE
          SHN    6
          STM    MDFA+4 
          LDD    CM 
          RJM    CTH         CONVERT TO HEX DISPLAY CODE
          RAM    MDFA+4 
          LDC    RTCL 
          CRD    CM          READ MILLISECOND CLOCK 
          LDN    0
          STD    CM          CLEAR SECOND COUNT 
          STD    CM+1 
          STD    CM+2        ONLY USE 24 BITS 
          LDD    MA 
          CWD    CM 
          LDN    1
          STD    CM+1        ONLY 1 VALUE TO BE CONVERTED 
          MONITOR RDCM       CONVERT TO F10.3 
          LDD    MA 
          CRM    MDFB,ON     READ TO MESSAGE
          LDM    BUFR+35D    GET MESSAGE RETURN CODE
          STD    T2 
          LDM    BUFR+34D 
          LPN    0#F
          STD    T1 
          RJM    CTH         CONVERT TO HEX 
          SHN    6
          STM    MDFD 
          LDD    T2 
          SHN    -8D
          RJM    CTH         CONVERT TO HEX 
          RAM    MDFD 
          LDD    T2 
          SHN    -4 
          RJM    CTH         CONVERT TO HEX 
          SHN    6
          STM    MDFD+1 
          LDD    T2 
          RJM    CTH         CONVERT TO HEX 
          RAM    MDFD+1 
          LDD    T1 
          ADD    T2 
          NJN    MDF1        IF RETURN CODE PRESENT 
          STM    MDFD        SET END OF LINE
 MDF1     LDC    MDFAA+CPON 
          RJM    DFM         ISSUE MESSAGE TO LOCAL DAYFILE 
          LJM    MDFX        RETURN 
  
  
 MDFAA    DATA   4H CXX      CHANNEL NUMBER 
 MDFA     DATA   12H MS XX, YY. 
 MDFB     BSS    5           MILLISECOND CLOCK F10.3
          DATA   2H 
 MDFC     CON    0           *IN* OR *OT* 
          CON    2H 
 MDFD     BSS    2           RETURN CODE
          CON    0           END OF LINE
 CTH      SPACE  4,10 
**        CTH - CONVERT TO HEX DISPLAY CODE.
* 
*         ENTRY  (A) = NUMBER TO BE CONVERTED.
* 
*         EXIT   (A) = HEX DISPLAY CODE OF LOWER 4 BITS.
* 
*         USES   NONE.
* 
*         CALLS  NONE.
  
  
 CTH1     ADN    1           A THRU F 
  
 CTH      SUBR               ENTRY/EXIT 
          LPN    17 
          SBN    12 
          PJN    CTH1        IF A THRU F
          ADN    1R0+12      0 THRU 9 
          UJN    CTHX        RETURN 
 RCL      SPACE  4,10 
**        RCL - RECALL CPU. 
* 
*         ENTRY  (RC) = 0, RECALL CPU.
*                (A) = 0, IF NOT READ ACTIVE
* 
*         EXIT   IF NO ERROR. 
*                TO *ERR*, IF TERMINATE FLAG SET. 
*                TO *DPP*, IF ERROR FLAG SET. 
* 
*         CALLS  FIN. 
* 
*         USES   RC, CM - CM+4. 
  
  
 RCL      SUBR               ENTRY/EXIT 
          STM    RCLA        SAVE READ STATUS 
 RCL0     LDD    OA 
          CRD    CM 
          LDD    CM 
          NJN    RCL0        IF OUTPUT REGISTER NOT CLEAR 
          LDD    RC 
          NJN    RCL1        IF NOT TO RECALL CPU 
          MONITOR DRCM
 RCL1     AOD    RC 
          SBD    HN 
          NJN    RCL2        IF NOT TIME TO RECALL CPU
          STD    RC 
 RCL2     PAUSE 
          LDD    CM+1 
          ZJN    RCL3        IF NO ERROR FLAG 
          LDC    **          READ/WRITE FLAG
 RCLA     EQU    *-1
          ZJN    RCL2.1      IF NOT READ
          RJM    FIN         FLUSH INPUT
 RCL2.1   DCN    CH+40
          RJM    REL         RELEASE CHANNEL
          LJM    DPP         DROP PP
  
 RCL3     FETA   4
          CRD    CM          READ LIMIT WORD
          LDD    CM+3 
          SHN    -6 
          NJN    RCL4        IF TERMINATE STREAMING FLAG
          LJM    RCLX        RETURN 
  
 RCL4     LDM    RCLA 
          ZJN    RCL5        IF NOT READ OPERATION
          RJM    FIN         FLUSH INPUT
 RCL5     DCN    CH+40
          ERROR  RCTERF      TERMINATE FLAG SET 
 REL      SPACE  4,10 
**        REL - RELEASE CHANNEL.
* 
*         ENTRY  NONE.
* 
*         EXIT   CHANNEL RELEASED.
*                TO *DPP* IF ERROR FLAG SET.
* 
*         CALLS  NONE.
* 
*         USES   CM - CM+4. 
  
  
 REL      SUBR               ENTRY/EXIT 
 REL0     LDD    OA 
          CRD    CM 
          LDD    CM 
          NJN    REL0        IF OUTPUT REGISTER NOT CLEAR 
          LDC    0
 RELA     EQU    *-1
          ZJN    REL1        IF CHANNEL NOT RESERVED
          CHTE   *
          LDN    CH 
          DCHAN 
*         LDN    0
          STM    RELA        FLAG CHANNEL NOT RESERVED
 REL1     PAUSE 
          LDD    CM+1 
          ZJN    RELX        IF NO ERROR FLAG 
          LJM    DPP         DROP PP
 RES      SPACE  4,10 
**        RES - RESERVE CHANNEL.
* 
*         ENTRY  (CH) = CHANNEL(S). 
* 
*         EXIT   CHANNEL RESERVED.
* 
*         CALLS  NONE.
* 
*         USES   T1, CM - CM+4. 
  
  
 RES      SUBR               ENTRY/EXIT 
          CHTE   *
 RES0     LDN    CH 
          STD    CM+1 
          MONITOR CCHM
          LDD    CM+2 
          NJN    RES1        IF CHANNEL RESERVED
          PAUSE 
          LDD    CM+1 
          ZJN    RES0        IF NO ERROR
          LJM    DPP         EXIT 
  
 RES1     AOM    RELA        FLAG CHANNEL RESERVED
          UJN    RESX        RETURN 
 STS      SPACE  4,10 
**        STS - RETURN INTERFACE STATUS.
* 
*         ENTRY  (A) = STATUS FUNCTION. 
* 
*         EXIT   (A) = (ST) INTERFACE STATUS. 
* 
*         CALLS  FCN, DST.
* 
*         USES   CM - CM+4, ST, EO. 
  
  
 STS      SUBR               ENTRY/EXIT 
          STM    STSA        SAVE STATUS FUNCTION 
          LDC    RTCL 
          CRD    CM          READ CLOCK 
          LDD    CM+1        SECONDS
          ADC    EOPL        END OF OP. LIMIT 
          STD    EO 
 STS0     LDC    **          STATUS FUNCTION
 STSA     EQU    *-1
          RJM    FCN         ISSUE STATUS FUNCTION
          ACN    CH 
          LDN    77          WAIT EOP DELAY 
 STS1     FJM    STS2,CH     IF STATUS READY
          SBN    1
          PJN    STS1        IF NOT TIMEOUT 
          DCN    CH+40
          PAUSE 
          LDD    CM+1 
          ZJN    STS1.1      IF NO ERROR
          RJM    REL         RELEASE CHANNEL
          LJM    DPP         DROP PP
  
 STS1.1   LDC    RTCL 
          CRD    CM          READ CLOCK 
          LDD    EO 
          LMD    CM+1 
          NJN    STS0        IF NOT TIMEOUT 
          RJM    DST         GET DIAGNOSTIC STATUS
          ERROR  RCNEOP      NO END OF OPERATION
  
 STS2     LDN    GSTL        GENERAL STATUS LENGTH
          IAM    GSTS,CH
          DCN    CH+40
          LDM    GSTS 
          STD    ST 
          SHN    21-13
          PJN    STS3        IF NOT ALERT 
          LDM    STSA 
          LMN    GSTF 
          NJN    STS3        IF NOT GENERAL STATUS
          LDC    FSTF 
          RJM    FCN         FSC STATUS FUNCTION
          ACN    CH 
          LDN    DSTL        DETAIL STATUS (FSC) LENGTH 
          IAM    FSTS,CH     READ FSC STATUS
          DCN    CH+40
          RJM    DST         GET DIAGNOSTIC STATUS
 STS3     LDD    ST 
          LJM    STSX        RETURN 
  
  
 GSTS     BSS    2           GENERAL STATUS 
 STEC     BSS    1           ERROR CODE 
 FSTS     BSS    24          FSC STATUS 
          CHTE   *
 CHAN     CON    CH          CHANNEL USED 
 DSTS     BSS    1           DIAGNOSTIC STATUS
 WUM      SPACE  4,10 
**        WUM - WAIT UNIT MOUNTED 
* 
*         ENTRY  (UN) = UNIT NUMBER 
* 
*         EXIT   UNIT MOUNTED INTERRUPT SENSED
* 
*         CALLS  STS, RES, REL. 
* 
*         USES   CM - CM+4. 
  
  
 WUM1     RJM    REL         RELEASE CHANNEL
  
 WUM      SUBR               ENTRY/EXIT 
          LDC    RTCL 
          CRD    CM          READ SECOND CLOCK
          LDD    CM+1 
          ADC    EOPL        END OF OP. LIMIT 
          STM    WUMA 
 WUM2     RJM    RES         RESERVE CHANNEL
          LDD    UN          UNIT NUMBER
          ADC    CDEF        CHECK DEVICE END 
          RJM    STS
          SHN    21-13
          PJN    WUM1        IF NO ALERT
          LDM    STEC 
          LMN    2
          NJN    WUM1        IF NOT BUSY
 WUM3     RJM    REL         RELEASE CHANNEL
          LDC    RTCL 
          CRD    CM 
          LDD    CM+1        SECONDS
          LMC    ** 
 WUMA     EQU    *-1
          NJN    WUM2        IF NOT TIMEOUT 
          ERROR  RCNEOP      NO END OF OPERATION
 BDL      SPACE  4,20 
**        BDL - BUSY DELAY. 
* 
*         ENTRY  BUSY STATUS FROM M860. 
* 
*         EXIT   DELAY TO ALLOW M860 INTERRUPT. 
* 
*         CALLS  NONE 
* 
*         USES   T0.
  
  
 BDL      SUBR               ENTRY/EXIT 
          LDC    10D*100D    100 MSEC. DELAY
          STD    T0 
 BDL1     DELAY 
          SOD    T0 
          NJN    BDL1        IF NOT TIME
          UJN    BDLX 
 CBS      SPACE  4,10 
**        CBS - CHECK BUSY STATUS.
* 
*         ENTRY  (PC) = PRU COUNT.
*                (STEC) = STATUS ERROR CODE.
* 
*         EXIT   (A) = 0, IF TO RETRY OPERATION.
* 
*         CALLS  REL, RES.
* 
*         USES   NONE.
  
  
 CBS      SUBR               ENTRY/EXIT 
          LDD    PC 
          NJN    CBSX        IF NOT HEADER
          LDM    STEC 
          LMN    2
          NJN    CBSX        IF NOT BUSY ERROR
          SOM    CBSA 
          NJN    CBS1        IF NOT RETRY LIMIT 
          LDN    1           FLAG NO RETRY
          UJN    CBSX        RETURN 
  
 CBS1     RJM    REL         RELEASE CHANNEL
          RJM    BDL         BUSY DELAY 
          RJM    RES         RESERVE CHANNEL
          LDN    0           FLAG RETRY 
          UJN    CBSX        RETURN 
  
  
 CBSA     CON    BRTL        RETRY COUNTER
          TITLE  GENERAL SUBROUTINES. 
 CFL      SPACE  4,15 
**        CFL - CHECK FIELD LENGTH. 
* 
*         ENTRY  (A) = RELATIVE ADDRESS TO BE ACCESSED. 
*                (RA) = CURRENT REFERENCE ADDRESS.
*                (FL) = CURRENT FIELD LENGTH. 
* 
*         EXIT   (A) = RELATIVE + REFERENCE ADDRESS.
* 
*         CALLS  DFM. 
* 
*         USES   NONE 
  
  
  
 CFL3     SHN    15          REPOSITION TO VALUE/100
          ADD    FL          RESTORE VALUE
          ADD    RA          ADD RA 
          SHN    6           REPOSITION VALUE 
  
 CFL      SUBR               ENTRY/EXIT 
          SBN    2
          MJN    CFL1        IF ADDRESS TOO SMALL 
          ADN    2
          SHN    21 
          MJN    CFL2        IF VALUE ODD 
          SHN    15          POSITION TO VALUE/100B 
          SBD    FL 
          SHN    5
          MJN    CFL3        IF VALUE IN RANGE
 CFL1     LDC    CFLA 
          RJM    DFM         OUTPUT MESSAGE 
          RJM    REL         RELEASE CHANNEL
          MONITOR HNGM       HANG PPU 
          LJM    DPP1        DROP PP
  
 CFL2     SHN    15          POSITION TO VALUE/100B 
          SBD    FL 
          SHN    5
          MJN    CFL1        IF VALUE TO BIG (OR NEGATIVE)
          UJN    CFL3        SET RA 
  
 CFLA     DATA   C*1SS ABT.*
 CFS      SPACE  4,10 
**        CFS - CHECK FULL STRIPE.
* 
*         ENTRY  BUFFER POINTERS INITIALIZED. 
* 
*         EXIT   FULL STRIPE + 1 PRU OR EOI IN BUFFER.
* 
*         CALLS  COB, DV5, RCL. 
* 
*         USES   T3, CM - CM+4, PC, WC. 
  
  
 CFS1     LDC    **          RESTORE ORIGINAL OUT POINTER 
 CFSA     EQU    *-1
          STD    OT+1 
          SHN    -14
          STD    OT 
          LDN    0
          STD    PC          RESET PRU COUNT
  
 CFS      SUBR               ENTRY/EXIT 
          LDD    OT+1        SAVE OUT POINTER 
          STM    CFSA 
          LDM    CFSA-1 
          SCN    77 
          ADD    OT 
          STM    CFSA-1 
          LDN    0
          STD    PC          INITIALIZE PRU COUNT 
          STD    RC          INITIALIZE RECALL COUNT
 CFS2     RJM    COB         CHECK OUTPUT BUFFER
          NJN    CFS3        IF DATA IN BUFFER
*         LDN    0           NOT READ 
          RJM    RCL         RECALL CPU 
          UJN    CFS2        CHECK AGAIN
  
 CFS3     LDCA   OT 
          CRD    CM          READ FIRST CONTROL WORD
          LDD    CM 
          SHN    21-12
          MJN    CFS4        IF EOI 
          AOD    PC          ADVANCE PRU COUNT
          SBN    PRUPST+1 
          MJN    CFS5        IF NOT FULL STRIPE + 1 PRU 
 CFS4     LJM    CFS1        RESTORE OUT AND RETURN 
  
 CFS5     LDD    CM+4        PRU BYTE COUNT 
          RJM    DV5         CM WORD COUNT
          ADN    2           CONTROL WORDS
          STD    WC 
          LDD    LM 
          SBD    OT 
          SHN    14 
          ADD    LM+1 
          SBD    OT+1        WORD COUNT TO LIMIT
          STD    T3 
          SBD    WC 
          MJN    CFS6        IF WRAPAROUND
          ZJN    CFS6        IF WC = ROOM TO LIMIT
          LDD    WC 
          RAD    OT+1        ADVANCE OUT
          SHN    -14
          RAD    OT 
          LJM    CFS2        CHECK FOR NEXT PRU 
  
 CFS6     LDD    FT          SET OUT=FIRST+WC-REMAINDER TO LIMIT
          SHN    14 
          ADD    FT+1 
          ADD    WC 
          SBD    T3 
          STD    OT+1 
          SHN    -14
          STD    OT 
          LJM    CFS2        CHECK FOR NEXT PRU 
 CIB      SPACE  4
**        CIB - CHECK INPUT BUFFER. 
* 
*         ENTRY  (FE - FE+1) = FET ADDRESS. 
*                (FT - FT+1) = FIRST ADDRESS OF CM BUFFER.
*                (IN - IN+1) = NEXT INPUT ADDRESS.
*                (OT - OT+1) = NEXT OUTPUT ADDRESS. 
*                (LM - LM+1) = LIMIT ADDRESS OF CM BUFFER.
* 
*         EXIT   (A) = WORD COUNT OF BUFFER.
*                RESETS (OT - OT+1).
* 
*         CALLS  CFL. 
* 
*         USES   CM - CM+4. 
  
  
 CIB      SUBR               ENTRY/EXIT 
          FETA   3
          CRD    CM 
          LDD    CM+3        SET OUT
          LPN    77 
          STD    OT 
          SHN    14 
          LMD    CM+4 
          STD    OT+1 
          RJM    CFL         CHECK ADDRESS
          LDD    OT          LENGTH = OUT - IN
          SBD    IN 
          SHN    14 
          ADD    OT+1 
          SBD    IN+1 
          ZJN    CIB1        IF IN = OUT
          PJN    CIB2        IF OUT .GT. IN 
 CIB1     SHN    6           LENGTH = (LIMIT - IN) + OUT - FIRST) 
          ADD    LM 
          SBD    FT 
          SHN    14 
          ADD    LM+1 
          SBD    FT+1 
 CIB2     SBN    1           LENGTH - 1 
          UJN    CIBX        RETURN 
 COB      SPACE  4,10 
**        COB - CHECK OUTPUT BUFFER.
* 
*         ENTRY  (FE - FE+1) = ADDRESS OF FET.
*                (FT - FT+1) = FIRST ADDRESS OF CM BUFFER.
*                (IN - IN+1) = NEXT INPUT ADDRESS.
*                (OT - OT+1) = NEXT OUTPUT ADDRESS. 
*                (LM - LM+1) = LIMIT ADDRESS OF CM BUFFER.
* 
*         EXIT   (A) = WORD COUNT OF BUFFER.
*                RESETS (IN - IN+1).
* 
*         CALLS  CFL. 
* 
*         USES   CM - CM+4. 
  
  
 COB      SUBR               ENTRY/EXIT 
          FETA   2           READ IN
          CRD    CM 
          LDD    CM+3        SET IN 
          LPN    77 
          STD    IN 
          SHN    14 
          LMD    CM+4 
          STD    IN+1 
          RJM    CFL         CHECK ADDRESS
          LDD    IN          LENGTH = IN - OUT
          SBD    OT 
          SHN    14 
          ADD    IN+1 
          SBD    OT+1 
          PJN    COBX        RETURN IF IN .GE. OUT
          SHN    6           LENGTH = (LIMIT - OUT) + (IN - FIRST)
          ADD    LM 
          SBD    FT 
          SHN    14 
          ADD    LM+1 
          SBD    FT+1 
          UJN    COBX        RETURN 
 DV3      SPACE  4,10 
**        DV3 - DIVIDE BY 3.
* 
*         DV3 USES THE APPROXIMATION N/3 = (85*N + 22*N/64) / 256.
*         ROUNDING UP IS DONE.
* 
*         ENTRY  (A) = NUMBER.
* 
*         EXIT   (A) = NUMBER / 3.
* 
*         CALLS  NONE.
* 
*         USES   T0, T2.
  
  
 DV3      SUBR               ENTRY/EXIT 
          ADN    2           ROUND UP 
          STD    T2          SAVE N 
          SHN    2           N*4
          ADD    T2          N*5
          SHN    1           N*10 
          ADD    T2          N*11 
          SHN    1+14        N*22/64
          STD    T0 
          SHN    6           N*22 
          SBD    T2          N*21 
          SHN    2           N*84 
          ADD    T2          N*85 
          ADD    T0          N*85 + N*22/64 
          SHN    -10         (N*85 + N*22/64) / 256 
          LJM    DV3X        RETURN 
 GMT      SPACE  4,10 
**        GMT - GET MESSAGE TYPE. 
* 
*         ENTRY  64 BYTE MESSAGE STARTING AT BUFR.
*         ENTRY  (BUFR) = START OF 64 BYTE M860 MESSAGE.
* 
*         EXIT   (A) = MESSAGE TYPE(BYTE 4 OF MESSAGE). 
* 
*         CALLS  NONE.
* 
*         USES   NONE.
  
  
 GMT      SUBR               ENTRY/EXIT 
          LDM    BUFR+2      UPPER 4 BITS OF TYPE 
          LPN    0#F
          SHN    14 
          LMM    BUFR+3 
          SHN    -8D         POSITION MESSAGE TYPE
          UJN    GMTX        RETURN 
 IBP      SPACE  4,10 
**        IBP - INITIALIZE AND CHECK BUFFER PARAMETERS. 
* 
*         ENTRY  (FE - FE+1) = FET ADDRESS. 
* 
*         EXIT   FT, IN, OT, AND LM INITIALIZED.
* 
*         CALLS  CFL. 
* 
*         USES   T1 - T5, CM - CM+4.
  
  
 IBP      SUBR               ENTRY/EXIT 
          FETA   1
          CRD    CM          READ FIRST 
          ADN    1
          CRD    T1          READ IN
          ADN    2
          CRD    LM-3        READ LIMIT 
          SBN    1
          CRD    OT-3        READ OUT 
          LDD    CM+3 
          LPN    77 
          STD    FT 
          LDD    CM+4 
          STD    FT+1 
          LDD    LM 
          LPN    77 
          STD    LM 
          SHN    14 
          ADD    LM+1 
          SBN    1           ALLOW LIMIT = FL 
          RJM    CFL         CHECK ADDRESS
          LDD    OT          CHECK OUT
          SBD    LM 
          SHN    14 
          ADD    OT+1 
          SBD    LM+1 
          PJN    IBP1        IF OUT GE LIMIT
          LDD    OT 
          SBD    FT 
          SHN    14 
          ADD    OT+1 
          SBD    FT+1 
          MJN    IBP1        IF OUT LT FIRST
          LDD    T1+4 
          STD    IN+1 
          LDD    T1+3 
          LPN    77 
          STD    IN 
          SBD    LM          CHECK IN 
          SHN    14 
          ADD    IN+1 
          SBD    LM+1 
          PJN    IBP1        IF IN GE LIMIT 
          LDD    IN 
          SBD    FT 
          SHN    14 
          ADD    IN+1 
          SBD    FT+1 
          PJN    IBP2        IF IN GE FIRST 
 IBP1     ERROR  RCBARG      BUFFER ARGUMENT ERROR
  
 IBP2     LJM    IBPX        RETURN 
 RMB      SPACE  4,10 
**        RMB - READ MESSAGE BUFFER.
* 
*         ENTRY  (WC) = CM WORD COUNT.
* 
*         EXIT   OUT POINTER UPDATED IN (OT - OT+1).
* 
*         CALLS  NONE.
* 
*         USES   T3, OT - OT+1, WC. 
  
  
 RMB      SUBR               ENTRY/EXIT 
          LDC    BUFR 
          STM    RMBA        PP BUFFER ADDRESS
          LDD    LM 
          SBD    OT 
          SHN    14 
          ADD    LM+1 
          SBD    OT+1 
          STD    T3          WORD COUNT TO LIMIT
          SBD    WC 
          MJN    RMB4        IF WRAPAROUND
 RMB2     LDCA   OT 
          CRM    **,WC
 RMBA     EQU    *-1
          LDD    WC 
          RAD    OT+1 
          SHN    -14
          RAD    OT          UPDATE OUT 
          LMD    LM 
          NJN    RMB3        IF OUT NE LIMIT
          LDD    OT+1 
          LMD    LM+1 
          NJN    RMB3        IF OUT NE LIMIT
          LDD    FT 
          STD    OT          SET OUT = FIRST
          LDD    FT+1 
          STD    OT+1 
 RMB3     LJM    RMBX        RETURN 
  
 RMB4     LDCA   OT 
          CRM    BUFR,T3
          LDD    FT          SET OUT = FIRST
          STD    OT 
          LDD    FT+1 
          STD    OT+1 
          LDD    T3 
          SHN    2
          ADD    T3          PP WORD COUNT
          RAM    RMBA        UPDATE PP BUFFER ADDRESS 
          LDD    WC 
          SBD    T3 
          STD    WC          SET NEW WORD COUNT 
          LJM    RMB2        READ REMAINING DATA
 SCB      SPACE  4,10 
**        SCB - SET COMPLETE BIT. 
* 
*         ENTRY  (A) = ENDING STATUS. 
*                (EC) = ERROR CODE. 
* 
*         EXIT   FET UPDATED. 
*                (EC) = 0.
* 
*         CALLS  REL. 
* 
*         USES   CM - CM+4, CN. 
  
  
 SCB      SUBR               ENTRY/EXIT 
          STD    CN          SAVE STATUS
          RJM    REL         RELEASE CHANNEL
          FETA
          CRD    CM          READ FET STATUS WORD 
          LDD    CM+3        CLEAR ANY EXISTING STATUS
          SCN    77 
          STD    CM+3 
          LDD    CM+4 
          LPC    776
          STD    CM+4 
          LDD    EC 
          SHN    12          POSITION ERROR CODE
          LMD    CN          SET STATUS 
          LMD    CM+4        RESTORE FUNCTION CODE
          LMN    1           INSURE COMPLETE STATUS 
          STD    CM+4 
          SHN    -14
          RAD    CM+3        SET ERROR CODE 
          FETA
          CWD    CM          UPDATE FET 
          LDN    0
          STD    EC          CLEAR ERROR CODE 
          LJM    SCBX        RETURN 
 UCO      SPACE  4,10 
**        UCO - UPDATE CENTRAL OUT. 
* 
*         ENTRY  (FE) = FET ADDRESS.
*                (OT - OT+1) = OUT POINTER. 
* 
*         EXIT   OUT UPDATED IN FET.
* 
*         CALLS  NONE.
* 
*         USES   CM - CM+4. 
  
  
 UCO      SUBR               ENTRY/EXIT 
          LDN    ZERL 
          CRD    CM 
          LDD    OT 
          STD    CM+3 
          LDD    OT+1 
          STD    CM+4 
          FETA   3
          CWD    CM          UPDATE OUT 
          UJN    UCOX        RETURN 
 WBB      SPACE  4,10 
**        WBB - WRITE BINARY BUFFER.
* 
*         ENTRY  (WC) = CM WORD COUNT.
* 
*         EXIT   IN POINTER UPDATER IN FET. 
* 
*         CALLS  NONE.
* 
*         USES   T3, CM - CM+4, WC. 
  
  
 WBB1     LDN    ZERL        UPDATE IN POINTER IN FET 
          CRD    CM 
          LDD    IN 
          STD    CM+3 
          LDD    IN+1 
          STD    CM+4 
          FETA   2
          CWD    CM 
  
 WBB      SUBR               ENTRY/EXIT 
          LDC    PBUF 
          STM    WBBA        PPU BUFFER ADDRESS 
          LDD    LM 
          SBD    IN 
          SHN    14 
          ADD    LM+1 
          SBD    IN+1 
          STD    T3          WORD COUNT TO LIMIT
          SBD    WC 
          MJN    WBB4        IF WRAPAROUND
 WBB2     LDCA   IN 
          CWM    **,WC       WRITE DATA TO BUFFER 
 WBBA     EQU    *-1
          LDD    WC 
          RAD    IN+1 
          SHN    -14
          RAD    IN 
          LMD    LM 
          NJN    WBB3        IF IN NE LIMIT 
          LDD    IN+1 
          LMD    LM+1 
          NJN    WBB3        IF IN NE LIMIT 
          LDD    FT          SET IN = FIRST 
          STD    IN 
          LDD    FT+1 
          STD    IN+1 
 WBB3     LJM    WBB1        UPDATE CENTRAL IN
  
 WBB4     LDCA   IN 
          CWM    PBUF,T3
          LDD    FT          SET IN = FIRST 
          STD    IN 
          LDD    FT+1 
          STD    IN+1 
          LDD    T3          UPDATE PP BUFFER ADDRESS 
          SHN    2
          ADD    T3 
          RAM    WBBA 
          LDD    WC 
          SBD    T3 
          STD    WC          SET REMAINING WORD COUNT 
          LJM    WBB2        READ REMAINING DATA
 WMB      SPACE  4,10 
**        WMB - WRITE MESSAGE BUFFER. 
* 
*         ENTRY  (WC) = CM WORD COUNT.
* 
*         EXIT   IN POINTER UPDATED IN PP.
* 
*         CALLS  NONE.
* 
*         USES   T3, IN - IN+1, WC. 
  
  
 WMB      SUBR               ENTRY/EXIT 
          LDC    BUFR 
          STM    WMBA        PPU BUFFER ADDRESS 
          LDD    LM 
          SBD    IN 
          SHN    14 
          ADD    LM+1 
          SBD    IN+1 
          STD    T3          WORD COUNT TO LIMIT
          SBD    WC 
          MJN    WMB4        IF WRAPAROUND
 WMB2     LDCA   IN 
          CWM    **,WC       WRITE DATA TO BUFFER 
 WMBA     EQU    *-1
          LDD    WC 
          RAD    IN+1 
          SHN    -14
          RAD    IN 
          LMD    LM 
          NJN    WMB3        IF IN NE LIMIT 
          LDD    IN+1 
          LMD    LM+1 
          NJN    WMB3        IF IN NE LIMIT 
          LDD    FT          SET IN = FIRST 
          STD    IN 
          LDD    FT+1 
          STD    IN+1 
 WMB3     LJM    WMBX        UPDATE CENTRAL IN
  
 WMB4     LDCA   IN 
          CWM    BUFR,T3
          LDD    FT          SET IN = FIRST 
          STD    IN 
          LDD    FT+1 
          STD    IN+1 
          LDD    T3          UPDATE PP BUFFER ADDRESS 
          SHN    2
          ADD    T3 
          RAM    WMBA 
          LDD    WC 
          SBD    T3 
          STD    WC          SET REMAINING WORD COUNT 
          LJM    WMB2        READ REMAINING DATA
          SPACE  4,10 
*         COMMON DECKS. 
  
  
 RND$     EQU    1           ROUND UP 
*CALL     COMPDV5 
          TITLE  PRESET.
          USE    PRESET 
 OVLA     EQU    *+5         OVERLAY LOAD ADDRESS 
 BUFR     EQU    *           MESSAGE BUFFER 
 PBUF     EQU    BUFR        PRU BUFFER 
 HBUF     EQU    PBUF+PRUL*5     STRIPE HEADER BUFFER 
 TBUF     EQU    HBUF+HDRL*5     STRIPE TRAILER BUFFER
 LBUF     EQU    TBUF+TLRL*5 LENGTH OF ALL BUFFERS
          ERRNG  7776-LBUF   BUFFER OVERFLOW
          ERRNG  7777-BUFR-PRUL        MESSAGE BUFFER OVERFLOW
 PRS      SPACE  4,10 
*         PRS - PRESET. 
  
  
 PRS      SUBR               ENTRY/EXIT 
          LDN    0
          STD    EC          CLEAR ERROR CODE 
          STD    MW          CLEAR MESSAGE WAITING FLAGS
          LDC    IPLM 
          STD    IC          SET IDLE PASS LIMIT
          LDD    IR+3 
          LPN    77 
          SHN    14 
          ADD    IR+4 
          RJM    CFL
          CRD    CN          READ PARAMETER WORD
          LDD    CN+3 
          STD    ES          EST ORDINAL FOR CONTROL UNIT 
          SFA    EST,ES      GET EST ENTRY ADDRESS
          CRD    CM          READ EST ENTRY 
          LDD    CM+4 
          LPC    7000 
          STD    EQ          EQUIPMENT NUMBER 
          LDD    IR+3 
          SHN    -6          FUNCTION CODE
          STD    T1 
          ZJN    PRS0        IF NO FUNCTION 
          SBN    TREQL
          MJN    PRS2        IF VALID FUNCTION
 PRS0     LDC    =C*1SS - INVALID FUNCTION.*
          RJM    DFM
 PRS1     LJM    DPP         DROP 
  
 PRS2     LDM    TREQ,T1
          STD    T1 
          LJM    0,T1        INITIALIZE FOR FUNCTION
  
*         SCH - SET CHANNELS IN EST 
  
 SCH      LDD    ES 
          STD    CM+1        EQUIPMENT NUMBER 
          LDD    IR+2 
          STD    CM+3        CHANNELS 
          LDN    2           SET CHANNELS SUBFUNCTION 
          STD    CM+2 
          MONITOR SEQM       SET CHANNELS 
          UJN    PRS1        DROP PP
  
*         ETD - ENABLE TDAM REQUEST BUFFER
  
 ETD      NFA    ICAN 
          CRD    CM 
          LDD    CM 
          LPC    3777 
          ADC    4000        ENABLE PP *TDAM* WRITE 
          STD    CM 
          NFA    ICAN        UPDATE INTER-CONTROL POINT CONTROLS
          CWD    CM 
          UJN    PRS1        DROP 
  
*         MSG - INITIALIZE FOR MESSAGE I/O
  
 MSG      LDD    CN+1 
          SCN    77 
          SHN    6
          LMD    CN 
          SHN    6
          STM    SSDA        INITIALIZE MESSAGE OUTPUT ADDRESS
          SHN    -14
          RAM    SSDA-1 
          LPN    77 
          SHN    14 
          LMM    SSDA 
          ADN    4           LIMIT WORD 
          RJM    CFL         CHECK ADDRESS
          CRD    T7          READ LIMIT WORD
          SBN    4+1
          CRD    CM          READ POINTER TO MESSAGE OUTPUT FET 
          LDC    TCHS        CHANNEL INSTRUCTION LIST 
          STD    T1 
 PRS3     LDI    T1 
          ZJN    PRS4        IF END OF LIST 
          STD    T2 
          LDI    T2 
          SCN    37 
          ADD    T7          SET CHANNEL
          STI    T2 
          AOD    T1          ADVANCE LIST 
          UJN    PRS3        SET NEXT ENTRY 
  
 PRS4     LDD    CM+3 
          LPN    77 
          RAM    SSDB-1      INITIALIZE MESSAGE INPUT FET ADDRESS 
          LPN    77 
          SHN    14 
          LMD    CM+4 
          STM    SSDB 
          RJM    CFL         CHECK ADDRESS
          LDD    CN+1        SET DRIVER RECALL ADDRESS
          LPN    77 
          STD    DR 
          SHN    14 
          ADD    CN+2 
          STD    DR+1 
          RJM    CFL         CHECK FIELDLENGTH
          LDD    CP 
          ADN    SNSW 
          CRD    CM          READ SENSE SWITCH WORD 
          LDD    CM+4 
          SHN    21-6 
          MJN    PRS5        IF TRACE MODE REQUESTED
          LJM    PRSX        RETURN 
  
 PRS5     AOM    TRCA 
          AOM    TRCB 
          AOM    TRCC 
          AOM    TRCD 
          AOM    TRCE 
          AOM    TRCF 
          AOM    TRCG 
          LJM    PRSX        RETURN 
 TCHS     SPACE  4,10 
**        TCHS - CHANNEL TABLE. 
*         TABLE CONTAINS THE ADDRESSES OF ALL INSTRUCTIONS WHICH
*         REFERENCE THE EQUIPMENT CHANNEL.
  
  
 TCHS     CHTB
          SPACE  4,10 
*         TREQ - TABLE OF LEGAL FUNCTION PRESET ROUTINES. 
  
  
 TREQ     BSS    0
          LOC    0
          CON    0           NULL FUNCTION
 IRTDAM   CON    ETD         ENABLE TDAM BUFFER 
 IRPMSG   CON    MSG         MESSAGE I/O
 IRMDAT   CON    MSG         MESSAGE AND DATA I/O 
 IRCHAN   CON    SCH         SET CHANNELS IN EST
          LOC    *O 
 TREQL    EQU    *-TREQ 
          TITLE  2SS - ERROR MESSAGE OVERLAY. 
          IDENT  2SS,EMSX 
*COMMENT  1SS - ERROR MESSAGE OVERLAY.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
***       2SS - ERROR MESSAGE OVERLAY.
* 
*         2SS IS CALLED BY 1SS TO ISSUE ERROR MESSAGES
*         TO THE MSAS SUBSYSTEM LOCAL DAYFILE WHEN AN 
*         ERROR IS DETECTED.
* 
*         ENTRY 
* 
*         (ERR) = PP ADDRESS WHERE ERROR DETECTED.
*         (GSTS) = START OF HAEDWARE STATUS BUFFER(25 WORDS). 
* 
*         EXIT
*         MESSAGES ISSUED.
* 
* 
*         MESSAGE FOR ALL ERRORS. 
* 
*         ERR = XX, ADR YYYY. 
* 
*         XX     ERROR CODE (SEE COMBCDD).
*         YYYY   PP ADDRESS WHERE ERROR DETECTED. 
* 
*         HARDWARE ERROR MESSAGES.
* 
*         SS,CXX,GSSSSSSSSSSSS. 
*         SS,CXX,FYYYYYYYYYYYYYYYYYYYY. 
*         SS,CXX,DZZZZ. MESSAGE.
* 
*         WHERE.
*         XX = CHANNEL. 
*         SS...S = GENERAL STATUS.
*         YY...Y = FSC STATUS.
*         ZZZZ = DIAGNOSTIC STATUS. 
*         MESSAGE = ONE OF THE FOLLOWING. 
*         STATUS ERROR. = ALERT STATUS AND NONE OF THE FOLLOWING. 
*         INPUT HANG. = CHANNEL HUNG ON INPUT OPERATION.
*         OUTPUT HANG. = CHANNEL HUNG ON OUTPUT OPERATION.
*         FUNCTION TIMEOUT. = NO RESPONSE TO FUNCTION IN 2 SECONDS. 
*         NO EOP. = NO ENDING STATUS FROM M860 IN 6 SECONDS.
*         CHAN. MALF. = NO RESPONSE TO DIAGNOSTIC STATUS FUNCTION.
*         CHAN. PE. = FSC DETECTED CHANNEL A CHANNEL PARITY ERROR.
*         FSC MEM. PE. = FSC HAD A MEMORY PARITY ERROR. 
*         FSC NOT RUNNING. = FSC PROCESSOR WAS NOT RUNNING. 
*         FSC ABNORMAL. = FSC ABNORMAL STATUS.
          EJECT 
 EMS      SPACE  0
**        EMS - ERROR MESSAGE PROCESSOR 
* 
*         ENTRY  (EC) = ERROR CODE. 
*                (GSTS) = STATUS BUFFER.
* 
*         EXIT   MESSAGES ISSUED. 
* 
*         USES   T1, T2, CN, IN, OT, LM.
* 
*         CALLS  C2D. 
  
  
          ORG    OVLA 
 EMS      SUBR               ENTRY/EXIT 
          LDD    CP 
          ADN    SNSW 
          CRD    CM          READ SENSE SWITCH WORD 
          LDD    CM+4 
          SHN    21-6 
          MJN    EMS00       IF TRACE MODE
          LDD    EC 
          SBN    RCHWET 
          MJN    EMSX        IF NOT HARDWARE ERROR
          LJM    EMS0        MUST BE HARDWARE ERROR 
  
 EMS00    LDM    ERRT-1,EC
          STD    T1          GET ERROR TYPE MESSAGE 
          LDI    T1 
          STM    EMSE 
          LDM    1,T1 
          STM    EMSE+1 
          LDM    2,T1 
          STM    EMSE+2 
          LDM    ERR         GET ADDRESS WHERE DETECTED 
          SBN    3
          SHN    -6 
          RJM    C2D         UPPER DIGITS 
          STM    EMSE+6 
          LDM    ERR
          SBN    3
          RJM    C2D         LOWRE DIGITS 
          STM    EMSE+7 
          LDC    EMSE+CPON
          RJM    DFM         ISSUE MESSAGE
          LDD    EC 
          SBN    RCHWET 
          PJN    EMS0        IF HARDWARE ERROR
          LJM    EMSX        RETURN 
  
 EMS0     LDM    CHAN        GET CHANNEL USED 
          RJM    C2D         CONVERT TO DISPLAY 
          STM    EMSA+2      STORE IN MESSAGES
          STM    EMSB+2 
          STM    EMSC+2 
          LDC    GSTS        GENERAL STATUS BUFFER
          STD    IN 
          LDC    EMSA+4 
          STD    OT 
 EMS1     LDI    IN 
          SHN    -6 
          RJM    C2D         CONVERT UPPER 2 DIGITS 
          STI    OT 
          AOD    OT 
          LDI    IN 
          RJM    C2D         CONVERT LOWER 2 DIGITS 
          STI    OT 
          AOD    OT 
          AOD    IN 
          LMC    FSTS 
          NJN    EMS1        IF NOT AT FSC STATUS 
          LDC    EMSA+CPON
          RJM    DFM         ISSUE MESSAGE TO CONTROL POINT DAYFILE 
          LDN    4           SET UP FOR 4 MESSAGES OF 5 BUTES EACH
          STD    CN 
 EMS2     LDD    IN 
          ADN    5
          STD    LM 
          LDC    EMSB+4 
          STD    OT 
 EMS3     LDI    IN 
          SHN    -6 
          RJM    C2D         CONVERT LOWER 2 DIGITS 
          STI    OT 
          AOD    OT 
          LDI    IN 
          RJM    C2D         CONVERT LOWER 2 DIGITS 
          STI    OT 
          AOD    OT 
          AOD    IN 
          LMD    LM 
          NJN    EMS3        IF NOT 5 BYTES MOVED 
          LDC    EMSB+CPON
          RJM    DFM         ISSUE MESSAGE TO CONTROL POINT DAYFILE 
          SOD    CN 
          NJN    EMS2        IF NOT 4 MESSAGES
          LDM    DSTS        GET DIAGNOSTIC STATUS
          SHN    -6 
          RJM    C2D         CONVERT UPPER 2 DIGITS 
          STM    EMSC+4 
          LDM    DSTS 
          RJM    C2D         CONVERT LOWER 2 DIGITS 
          STM    EMSC+5 
          LDC    EMSD        MOVE MESSAGE 
          STD    OT 
          LDD    EC          ERROR CODE TO SSEXEC 
          SBN    RCHWET      REMOVE HARDWARE ERROR BIAS 
          STD    T1 
          LDM    EMST,T1     ADDRESS OF SPECIFIC MESSAGE
          STD    IN 
 EMS4     LDI    IN 
          STI    OT          MOVE MESSAGE 
          ZJN    EMS5        IF END OF MESSAGE
          AOD    IN 
          AOD    OT 
          UJN    EMS4        FINISH MOVE
  
 EMS5     LDC    EMSC+CPON
          RJM    DFM         ISSUE MESSAGE TO CONTROL POINT DAYFILE 
          LJM    EMSX        RETURN 
  
  
 EMSA     DIS    ,*SS,CXX,GSSSSSSSSSSSS.* 
 EMSB     DIS    ,*SS,CXX,FXXXXXXXXXXXXXXXXXXXX.* 
 EMSC     DATA   14HSS,CXX,DZZZZ, 
 EMSD     BSS    30          SPECIFIC ERROR MESSAGE 
 EMSE     DIS    ,*RCXXXX, ADR YYYY.* 
          SPACE  4,10 
*         EMST - TABLE OF SPECIFIC ERROR MESSAGES.
  
  
 EMST     BSS    0
          CON    =C*STATUS ERROR.*
          CON    =C*INPUT HANG.*
          CON    =C*OUTPUT HANG.* 
          CON    =C*FUNCTION TIMEOUT.*
          CON    =C*NO EOP.*
          CON    =C*CHAN. MALF.*
          CON    =C*CHAN. PE.*
          CON    =C*CCC MEM. PE.* 
          CON    =C*CCC NOT RUNNING.* 
          CON    =C*CCC ABNORMAL.*
          CON    =C*DIAGNOSTIC FAILURE.*
          CON    0           CPU ONLY ERROR CODE
          CON    =C*OPERATOR IMPL REQUIRED.*
          CON    =C*CHANNEL INTERFACE OFF LINE.*
 ERRT     SPACE  4,10 
**        ERRT - TABLE OF ERROR RETURN CODES. 
  
  
 ERRT     BSS    0
          CON    =6HRCILLF   ILLEGAL FUNCTION 
          CON    =6HRCDLER   DATA LENGTH ERROR
          CON    =6HRCCWER   CONTROL WORD ERROR 
          CON    =6HRCBARG   BUFFER ARGUMENT ERROR
          CON    =6HRCHDER   HEADER/TRAILER ERROR 
          CON    =6HRCENDV   END OF VOLUME
          CON    =6HRCILLU   ILLEGAL UNIT NUMBER
          CON    =6HRCBFTO   BUFFER TIMEOUT ERROR 
          CON    =6HRCTBRT   TAPE BOTTOM RIGHT
          CON    =6HRCTERF   TERMINATE FLAG DETECTED
          CON    =6HNO ERR
          CON    =6HNO ERR
          CON    =6HNO ERR
          CON    =6HNO ERR
          CON    =6HNO ERR
          CON    =6HRCSTER   STATUS ERROR 
          CON    =6HRCCHIN   CHANNEL HUNG ON INPUT
          CON    =6HRCCHOT   CHANNEL HUNG ON OUTPUT 
          CON    =6HRCFCTO   FUNCTION TIMEOUT 
          CON    =6HRCNEOP   NO END OF OPERATION
          CON    =6HRCCHMF   CHANNEL MALFUNCTION
          CON    =6HRCCHPE   CHANNEL PARITY ERROR 
          CON    =6HRCFSPE   FSC MEMORY PARITY ERR
          CON    =6HRCFSNR   FSC NOT RUNNING
          CON    =6HRCFSAB   FSC ABNORMAL 
          CON    =6HRCFSDF   FSC DIAGNOSTIC FAILURE 
          CON    =6HRCXSUM   XSUM ERROR (CM DRIVER) 
          CON    =6HRCIMPL   OPERATOR IMPL REQUIRED 
          CON    =6HRCCIFO   M860 CHANNEL OFFLINE 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMPC2D 
          SPACE  4,10 
          END 
