*COMDECK BSCL2I 
          NAM    BSCL2I 
          NLS 
*CALL MUXMACROS 
*CALL REL6CONST 
          LST 
          EJT 
*********************************************************************** 
*                                                                     * 
*        BSC LEVEL 2 WORK CODE                                        * 
*                                                                     * 
*********************************************************************** 
          EQU    STENQ($2B)   *    ENQ
          EQU    STACK0($2C)  *    ACK0 
          EQU    STACK1($2D)  *    ACK1 
          EQU    STWACK($2E)  *    WACK 
          EQU    STETB($2F)   *    DATA BLOCK ENDED WITH ETB
          EQU    STETX($30)   *    DATA BLOCK ENDED WITH ETX
          EQU    STBAD($31)   *    BAD DATA BLOCK 
          EQU    STTTD($32)   *    TTD
          EQU    STNAK($33)   *    NAK
          EQU    STRVI($34)   *    RVI
          EQU    STBUF($35)   *    BUFFER THRESHOLD 
          EQU    STEOT($36)   *    EOT
          EQU    STLNEOT($37) *    DLE EOT
          SPC    4
*********************************************************************** 
*                                                                     * 
*      BSC LEVEL 2 MISCELANEOUS CONSTANTS                             * 
*                                                                     * 
*********************************************************************** 
          EQU    S2T3SEC(7)  *    3 SECOND TIMER VALUE
          SPC    3
*********************************************************************** 
*                                                                     * 
*        BSC LEVEL 2 EBCDIC CONSTANTS                                 * 
*                                                                     * 
*********************************************************************** 
* 
          EQU    S2ACK0($70)  *    DLE $70 IS ACK0
          EQU    S2ACK1($61)  *    DLE $61 IS ACK1
          EQU    S2DLE($10)   *    DLE
          EQU    S2EM($19)    *    EM 
          EQU    S2ENQ($2D)   *    ENQ
          EQU    S2EOT($37)   *    EOT
          EQU    S2ETB($26)   *    ETB
          EQU    S2ETX($03)   *    ETX
          EQU    S2IRS($1E)   *    IRS
          EQU    S2NAK($3D)   *    NAK
          EQU    S2RVI($7C)   *    DLE $7C IS RVI 
          EQU    S2STX($02)   *    STX
          EQU    S2SYN($32)   *    SYN
          EQU    S2TTD($2D)   *    STX $2D IS TTD 
          EQU    S2US($1F)    *    US(ITB)
          EQU    S2WACK($6B)  *    DLE $6B IS WACK
          EQU    S2CNTL($40) *    MAXIMUM PROTOCOL CONTROL CHARACTER
          SPC    3
*********************************************************************** 
*                                                                     * 
*        BSC LEVEL 2 MUX FLAGS                                        * 
*                                                                     * 
*********************************************************************** 
* 
          EQU    S2METX($400) *    ETX SEEN 
          EJT 
*********************************************************************** 
*                                                                     * 
*        BSC LEVEL 2 INPUT STATE TABLE                                * 
*                                                                     * 
*********************************************************************** 
* 
S2IT      MAC    NM           *    MACRO TO CREATE STATE TABLE
          EQU    S2N"NM"(*-S2INPT)
          ADC    S2I"NM"
          EMC 
* 
          ENT    S2INPT 
          EQU    S2INPT(*)
          S2IT   100          *    CLA STATUS HANDLER 
          S2IT   110          *    DCD DROP 
          S2IT   120          *    TOO MANY BUFFERS USED
          S2IT   130          *    BUFFER THRESHOLD 
          S2IT   160          *    INITIAL STATE
          S2IT   200          *    SECOND SYNC CHAR SEEN
          S2IT   250          *    DLE SEEN, PROCESS CONTROL CODE 
          S2IT   300          *    PROCESS CHARACTER AFTER STX
          S2IT   350          *    PROCESS NON-TRANSPARENT TEXT 
          S2IT   400          *    PROCESS FIRST CRC CHAR AFTER US
          S2IT   450          *    PROCESS SECOND CRC CHAR AFTER US 
          S2IT   500          *    PROCESS FIRST CRC CHAR AFTER ETB/ETX 
          S2IT   550          *    PROCESS SECOND CRC CHAR AFTER ETB/ETX
          S2IT   600          *    PROCESS TRANSPARENT TEXT 
          S2IT   650          *    PROCESS CHARACTER AFTER DLE
          S2IT   700          *    PROCESS FIRST CRC CHAR AFTER 
*                             *    TRANSPARENT US 
          S2IT   750          *    PROCESS SECOND CRC CHARACTER AFTER 
*                             *    TRANSPARENT US 
          S2IT   760         *    SCAN FOR DLE AFTER TRANSPARENT US 
          S2IT   770         *    SCAN FOR STX AFTER TRANSPARENT US/DLE 
          S2IT   800          *    TERMINATE TRANSMISSION BLOCK 
          S2IT   850          *    IDLE STATE 
          S2IT   900          *    ERROR STATE
          EJT 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N100                                                * 
*                                                                     * 
*     PURPOSE - CLA STATUS HANDLER                                    * 
*                                                                     * 
*********************************************************************** 
* 
S2I100    NOPR   EXIT 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N110                                                * 
*                                                                     * 
*     PURPOSE - DCD DROPPED                                           * 
*                                                                     * 
*********************************************************************** 
* 
S2I110    STATLS S2N300,S2I112 *  SKIP IF NO CHARACTER STORED YET 
          STATLS S2N850,S2I114 *  SKIP IF ACCUMULATING INPUT
          STATLS S2N900,S2I116 *  SKIP IF IN IDLE STATE 
          JUMP   S2N800      *    IN ERROR STATE
* 
S2I112    RCHAR  0           *    CREATE NON-SYNC CHAR FOR S2N160 
          JUMP   S2N160      *    RESYNC AND EXIT 
* 
S2I114    TIBSWC STBAD       *    BAD DATA WLE - DCD DROPPED DURING 
          JUMP   S2N800      *     INPUT
* 
S2I116    JUMP   S2N850      *    RESYNC AND EXIT 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N120                                                * 
*                                                                     * 
*     PURPOSE - BUFFERS OVERRUN                                       * 
*                                                                     * 
*********************************************************************** 
* 
S2I120    TIBWL  MMBUTCH      *    TELL MUX TO RELEASE BUFFER 
          TIBSWC STBAD,,EOT   *    GENERATE BAD DATA WC FOR L2
          JUMP   S2N900 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N130                                                * 
*                                                                     * 
*     PURPOSE - BUFFER THRESHOLD                                      * 
*                                                                     * 
*********************************************************************** 
* 
S2I130    TIBWL  MMBUTCH      *    TELL MUX TO RELEASE BUFFER 
          TIBSWC STBUF,,EOT   *    GENERATE BUF THRESHOLD WC
          JUMP   S2N900 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N160                                                * 
*                                                                     * 
*     PURPOSE - INITIAL STATE WAITING FOR INPUT                       * 
*                                                                     * 
*********************************************************************** 
* 
S2I160    CHARNE S2SYN,S2I165 
          MSTATE MSTINP      *    SET MODEM STATE TO INPUT
          RSTIME S2T3SECS    *    RESTART INPUT TIMER 
          STATE  S2N200,EXIT
S2I165    RESYNC EXIT 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N200                                                * 
*                                                                     * 
*     PURPOSE - TWO SYNC CHARACTER SEEN, LOOK FOR CONTROL CODE        * 
*                                                                     * 
*********************************************************************** 
* 
S2I200    CHARNE S2SYN,S2I205 *    SKIP IF NOT SYNC CHARACTER 
          RSTIME S2T3SECS,EXIT
S2I205    CHARNE S2ENQ,S2I210 *    SKIP IF NOT ENQ CHAR 
          TIBSWC STENQ        *    GENERATE ENQ WLE 
          JUMP   S2N800 
S2I210    CHARNE S2NAK,S2I215 *    SKIP IF NOT NAK
          TIBSWC STNAK        *    GENERATE NAK WLE 
          JUMP   S2N800 
S2I215    CHARNE S2EOT,S2I220 *    SKIP IF NOT EOT
          TIBSWC STEOT        *    GENERATE EOT WLE 
          JUMP   S2N800 
S2I220    CHARNE S2DLE,S2I225 *    SKIP IF NOT DLE
          STATE  S2N250,EXIT  *    LOOK FOR NEXT CHARACTER
S2I225    CHARNE S2STX,S2I230 *    SKIP IF NOT STX
          INTCRC ZCRC         *    INITIALIZE CRC 
          STATE  S2N300,STOREXIT
S2I230    CHARLS S2CNTL,S2I235    SKIP IF GRAPHIC CHARACTER 
          NOPR   EXIT        *    EXIT AND WAIT FOR ANOTHER 
S2I235    RESYNC             *     RESYNC THE LINE
          STATE  S2N160,EXIT
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N250                                                * 
*                                                                     * 
*     PURPOSE - PROCESS CHARACTER AFTER DLE                           * 
*                                                                     * 
*********************************************************************** 
* 
S2I250    CHARNE S2STX,S2I255 *    SKIP IF NOT STX
          INTCRC ZCRC         *    TRANSPARENT TEXT - INITIALIZE CRC
          ADDC   S2DLE        *    STORE DLE
          STATE  S2N600,STOREXIT
S2I255    CHARNE S2ACK0,S2I260     SKIP IF NOT ACK0 
          TIBSWC STACK0       *    GENERATE ACK0 WLE
          JUMP   S2N800 
S2I260    CHARNE S2ACK1,S2I265     SKIP IF NOT ACK1 
          TIBSWC STACK1       *    GENERATE ACK1 WLE
          JUMP   S2N800 
S2I265    CHARNE S2WACK,S2I270     SKIP IF NOT WACK 
          TIBSWC STWACK       *    GENERATE WACK WLE
          JUMP   S2N800 
S2I270    CHARNE S2RVI,S2I275 *    SKIP IF NOT RVI
          TIBSWC STRVI        *    GENERATE RVI WLE 
          JUMP   S2N800 
S2I275    CHARNE S2EOT,S2I280 *    SKIP IF NOT EOT
          TIBSWC STLNEOT      *    GENERATE LINE DISCONNECT WLE 
          JUMP   S2N800 
S2I280    RESYNC             *     RESYNC THE LINE
          STATE  S2N160,EXIT
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N300                                                * 
*                                                                     * 
*     PURPOSE - PROCESS CHARACTER AFTER STX                           * 
*                                                                     * 
*********************************************************************** 
* 
S2I300    CHARNE S2ENQ,S2I305 *    SKIP IF NOT ENQ
          TIBSWC STTTD        *    GENERATE TTD WLE 
          JUMP   S2N800 
S2I305    JUMP   S2N350       *    PROCESS NON-TRANSPARENT TEXT 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N350                                                * 
*                                                                     * 
*     PURPOSE - PROCESS NON-TRANSPARENT TEXT                          * 
*                                                                     * 
*********************************************************************** 
* 
S2I350    CHARLS S2CNTL,S2I352    SKIP IF POSSIBLE PROTOCOL CHAR
          NOPR   CRCSTOREX   *    NORMAL CHARACTER - STORE,CRC
S2I352    CHARNE S2US,S2I355 *    SKIP IF NOT US
          STATE  S2N400,CRCSTOREX  PROCESS CRC AFTER US 
S2I355    CHARNE S2IRS,S2I360 *    SKIP IF NOT IRS
          ADDC   S2US,CRCEXIT *    USE US AS END OF RECORD CHARACTER
S2I360    CHARNE S2ETB,S2I365 *    SKIP IF NOT ETB
          RSTMXF S2METX       *    CLEAR S2METX TO SIGNAL ETB 
          STATE  S2N500,CRCSTOREX  PROCESS END OF BLOCK 
S2I365    CHARNE S2ETX,S2I370 *    SKIP IF NOT ETX
          SETMXF S2METX       *    SET ETX FLAG 
          STATE  S2N500,CRCSTOREX  PROCESS END OF BLOCK 
S2I370    CHARNE S2EM,S2I375  *    SKIP IF NOT EM 
          NOPR   CRCEXIT      *    CRC BUT NOT STORE
S2I375    CHARNE S2STX,S2I380 *    SKIP IF NOT STX
          NOPR   CRCEXIT      *    CRC BUT NOT STORE
S2I380    CHARNE S2SYN,S2I385 *    SKIP IF NOT SYN
          RSTIME S2T3SECS,EXIT
S2I385    CHARNE S2ENQ,S2I390 *    SKIP IF NOT ENQ
          TIBSWC STBAD        *    TEXT ABORTED - GENERATE BAD DATA WLE 
          JUMP   S2N800 
S2I390    NOPR   CRCSTOREX    *    NORMAL CHARACTER - STORE,CRC 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N400                                                * 
*                                                                     * 
*     PURPOSE - PROCESS CRC AFTER US CHARACTER                        * 
*                                                                     * 
*********************************************************************** 
* 
S2I400    STATE  S2N450,CRCEXIT 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N450                                                * 
*                                                                     * 
*     PURPOSE - PROCESS CRC SECOND CHARACTER AFTER US                 * 
*********************************************************************** 
* 
S2I450    CRCEQ  B8,S2I460    *    SKIP CRC EQUAL 
          TIBSWC STBAD        *    BAD DATA WLE - CRC NOT EQUAL 
          JUMP   S2N900,RTN 
S2I460    INTCRC ZCRC        *    RESET CRC ACCUMULATOR 
          STATE  S2N350,EXIT *    BACK TO NORMAL PROCESS
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N500                                                * 
*                                                                     * 
*     PURPOSE - PROCESS FIRST CRC CHARACTER FOR END OF BLOCK          * 
*                                                                     * 
*********************************************************************** 
* 
S2I500    STATE  S2N550,CRCEXIT 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N550                                                * 
*                                                                     * 
*     PURPOSE - PROCESS SECOND CRC CHARACTER AT THE END OF BLOCK      * 
*                                                                     * 
*********************************************************************** 
* 
S2I550    CRCEQ  B8,S2I560    *    SKIP IF CRC EQUAL
          TIBSWC STBAD        *    GENERATE BAD DATA WLE - CRC NOT MATCH
          JUMP   S2N800 
S2I560    TSTMXF S2METX,S2I570     SKIP IF ETX
          TIBSWC STETB        *    GENERATE ETB WLE 
          JUMP   S2N800 
S2I570    TIBSWC STETX        *    GENERATE ETX WLE 
          JUMP   S2N800 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N600                                                * 
*                                                                     * 
*     PURPOSE - PROCESS TRANSPARENT TEXT                              * 
*                                                                     * 
*********************************************************************** 
* 
S2I600    CHARNE S2DLE,S2I605 *    SKIP IF NOT DLE
          STATE  S2N650,STOREXIT   PROCESS CHARACTER AFTER DLE
S2I605    NOPR   CRCSTOREX    *    CRC,STORE
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N650                                                * 
*                                                                     * 
*     PURPOSE - PROCESS CHARACTER AFTER DLE IN TRANSPARENT MODE       * 
*                                                                     * 
*********************************************************************** 
* 
S2I650    CHARNE S2US,S2I655  *    SKIP IF NOT US CHARACTER 
          STATE  S2N700,CRCSTOREX 
S2I655    CHARNE S2IRS,S2I660 *    SKIP IF NOT IRS CHARACTER
          ADDC   S2US         *    STORE US 
          STATE  S2N600,CRCEXIT 
S2I660    CHARNE S2ETB,S2I665 *    SKIP IF NOT ETB
          RSTMXF S2METX       *    CLEAR ETX FLAG TO SIGNAL ETB 
          STATE  S2N500,CRCSTOREX 
S2I665    CHARNE S2ETX,S2I670 *    SKIP IF NOT ETX
          SETMXF S2METX       *    SET ETX FLAG 
          STATE  S2N500,CRCSTOREX 
S2I670    CHARNE S2SYN,S2I675 *    SKIP IF NOT SYN
          BKSPAC
          RSTIME S2T3SECS 
          STATE  S2N600,EXIT
S2I675    CHARNE S2ENQ,S2I680 *    SKIP IF NOT ENQ
          TIBSWC STBAD        *    GENERATE BAD DATA WLE
          JUMP   S2N800 
S2I680    STATE  S2N600,CRCSTOREX 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N700                                                * 
*                                                                     * 
*     PURPOSE - PROCESS FIRST CHARACTER OF CRC AFTE TRANSPARENT US    * 
*                                                                     * 
*********************************************************************** 
* 
S2I700    STATE  S2N750,CRCEXIT 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N750                                                * 
*                                                                     * 
*     PURPOSE - PROCESS SECOND CRC CHARACTER AFTER TRANSPARENT US     * 
*                                                                     * 
*********************************************************************** 
* 
S2I750    CRCEQ  B8,S2I755    *    SKIP IF CRC MATCH
          TIBSWC STBAD        *    CRC NOT MATCH - GENERATE BAD DATA WLE
          JUMP   S2N900       *    TERMINATE INPUT
S2I755    INTCRC ZCRC        *    RESET CRC ACCUMULATOR 
          STATE  S2N760,EXIT *    PROCESS NEXT CARD 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N760                                                * 
*                                                                     * 
*     PURPOSE - SCAN FOR DLE FOLLOWING TRANSPARENT US                 * 
*                                                                     * 
*********************************************************************** 
* 
S2I760    CHARNE S2SYN,S2I762     SKIP IF NOT SYNC CHARACTER
          RSTIME S2T3SECS,EXIT
S2I762    CHARNE S2DLE,S2I764     SKIP IF NOT DLE 
          STATE  S2N770,CRCSTOREX 
S2I764    NOPR   EXIT 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N770                                                * 
*                                                                     * 
*     PURPOSE - SCAN FOR STX FOLLOWING TRANSPARENT US/DLE             * 
*                                                                     * 
*********************************************************************** 
* 
S2I770    CHARNE S2STX,S2I775     SKIP IF NOT STX 
          STATE  S2N600,CRCSTOREX 
S2I775    TIBSWC STBAD       *    EXPECTING DLE/STX 
          JUMP   S2N900      *    TERMINATE INPUT 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N800                                                * 
*                                                                     * 
*     PURPOSE - TERMINATE INPUT                                       * 
*                                                                     * 
*********************************************************************** 
* 
S2I800    MSTATE MSTIDLE      *    SET MODEM TO IDLE STATE
          RSTIME 0           *    STOP INPUT TIMER
          BLDWL  ,,,SWLX2     *    SEND WLE TO L2 PASCAL
          STATE  S2N850,EXIT
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N850                                                * 
*                                                                     * 
*     PURPOSE - IDLE STATE                                            * 
*                                                                     * 
*********************************************************************** 
* 
S2I850    RESYNC EXIT 
*********************************************************************** 
*                                                                     * 
*     NAME    - S2N900                                                * 
*                                                                     * 
*     PURPOSE - ERROR STATE                                           * 
*                                                                     * 
*********************************************************************** 
* 
S2I900    CHARNE S2ETX,S2I910 *    SKIP IF NOT ETX
          JUMP   S2N800       *    TERMINATE INPUT
S2I910    CHARNE S2ETB,S2I912     SKIP IF NOT ETB 
          JUMP   S2N800      *    TERMINATE INPUT 
S2I912    CHARNE S2ENQ,S2I914     SKIP IF NOT ENQ 
          JUMP   S2N800      *    TERMINATE INPUT 
S2I914    NOPR   EXIT        *    WAIT FOR BLOCK TERMINATOR 
          END 
