ASMB,R,Q,C
      HED #BSC: BISYNC TELECOM DRIVER * (C) HEWLETT-PACKARD CO.1979 * 
      NAM #BSC,14 91780-16013 REV.2001 791009 
      ENT #BSC
      EXT $TIME 
* 
*    NAME:         #BSC 
*    SOURCE:       91780-18013
*    RELOC:        91780-16013
*    PGMR:         P. KAPOOR    ( 11/20/73 )
* 
*    MODIFIED BY:  P. KAPOOR, R.SHATZER ( 01/11/75 )
*                  C. WHELAN   ( 10/31/75 ) 
*                  C. HAMILTON ( 04/12/77 ) 
*                  C. HAMILTON ( 04/01/78 ) 
*                  D. BOLIERE, R. GUDZ ( 08/11/78 ) 
*                  R. GUDZ ( 04/26/79 ) 
*                  R. GUDZ ( 10/09/79 ) 
* 
*  *****************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  ALL RIGHTS       *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,        *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT  *
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.         *
*  *****************************************************************
* 
* CAUTION:
* THIS IS THE SSGA (OR LIBRARY) RESIDENT PORTION OF A SYSTEM
* RESIDENT TELECOMMUNICATION DRIVER DVR50 . THIS
* MODULE MAY BE APPENDED AS A SUBROUTINE TO THE 
* MAIN DEVICE EMULATOR PROGRAM. IT CAN RESIDE EITHER
* IN THE USER AREA OR IN THE SYSTEM AREA. IN FORMER 
* CASE IT MUST NOT BE SWAPPED OUT ONCE INITIATED. 
* 
* REFER TO THE SYSTEM RESIDENT DVR50 BEFORE USING 
* THIS MODULE.
* 
* 
* ON ENTRY INTO #I.50 DURING INITIALIZATION , EQT7
* CONTAINS SYNC CHARACTER FOR THE LINE CODE WITH BIT
* 15 EQUAL TO 1 FOR CRC AND 0 FOR LRC. UPON EXIT
* BACK INTO THE SYSTEM RESIDENT DRIVER, REG-B HAS 
* THE PASSWORD. REG-A ALWAYS HAS COMPLETION CODE. 
* RETURN IS (P+1) AFTER INITIALIZATION AND (P+2)
* OTHERWISE.
* 
* ON EXIT FROM #C.50 INTO DVR50 , TAKE (P+1) RETURN IF IN BETWEEN REQUESTS, 
* TAKE A (P+2) RETURN ON COMPLETION AND (P+3) RETURN FOR CONTINUATION.
* 
* FOR (P+2) RETURN , REG-A & B HAVE COMPLETION PARAMETERS.
* 
* RETURN FROM #P.50 IS ALWAYS (P+1) . 
* <A>=RECV. SYNC-REFERENCE COMMAND, IF SYNC HUNT MODE; OR <A>=0, IF NOT.
* 
**************************************************************************
       SKP
**************************************************************************
*                   PCO 1840    AUGUST 11,1978
* 
* 
*        1.  TRACE HAS BEEN ADDED!
* 
*        2.  EACH LINE BID WILL LAST AS LONG AS 127 ENQ'S.
* 
**************************************************************************
**************************************************************************
*                   PCO 1926    APRIL 26,1979 
* 
*          RTE-IVB SESSION MONITOR COMPATIBILITY! 
* 
* 
*          RJE NOW RETRANSMITS DATA IF IT WAS LOST AND
*          THE RECEIVER ANSWERED WITH THE LAST ACK. 
* 
*          (RJE PREVIOUSLY FAILED TO USE THIS ACK0/ACK1 FEATURE.) 
* 
**************************************************************************
**************************************************************************
*                   PCO 2001    OCTOBER 9, 1979 
* 
*      NOTE:  RJE HAS BEEN CHANGED ALSO FOR PCO 2001!!! 
* 
*         DURING READ AND WRITE CALLS, RJE NOW PASSES A BUFFER
*         POINTER.  THIS IS FOR COMPATIBILITY WITH PCO 1926 OF RTE. 
*         IN THIS WAY, USER MAP IS ENABLED UPON DRIVER ENTRY. 
* 
**************************************************************************
      SKP 
* 
* <STOR> 160010 [XMIT BOARD]
* 
* * 1 * 1   1   0 * 0   0   0 * 0   0   0 * 0   0   1 * 0   0   0 * 
* ******************************************************************
* * C * C   C   R * P   P   S * S   T ! NOT USED  !   CHAR SIZE   * 
* * M * M   D   C * A   A   Y * T   E !   *       !   *           * 
* * D * D       V * R   R   N * A   S !   *       !   *           * 
* *   *     O     *         C * T   T !   *       !   *           * 
* *   *     N  (C)* S   S     *       !   *       !   *           * 
* *   *        (A)* T   E   E * I     !   *       !   *           * 
* *   *           * A   N   N * N     !   *       !   *           * 
* *   *         O * T   S   A * T     !   *       !   *           * 
* *   *         F *     E   B *       !   *       !   *           * 
* *   *         F * O       L * O     !   *       !   *           * 
* *   *           * F   E     * F     !   *       !   *           * 
* *   *           * F   V   O * F     !   *       !   *           * 
* *   *           *     E   N *       !   *       !   *           * 
* *   *           *     N     *       !   *       !   *           * 
* ******************************************************************
* 
* 
* <SRECV> 151030 [RCV BOARD]
* 
* * 1 * 1   1   0 * 0   0   0 * 0   0   0 * 0   0   1 * 0   0   0 * 
* ******************************************************************
* * C * C   X   C * P   P   S * S   S   S * T   S !   CHAR SIZE   * 
* * M * M       D * A   A   Y * T   P   B * E   Y !   *           * 
* * D * D         * R   R   N * A   E   A * S   N !   *           * 
* *   *         O *         C * T   C     * T   C !   *           * 
* *   *         N * S   E     *         O *       !   *           * 
* *   *           * T   V   H *     C   F * C   F !   *           * 
* *   *           * A   E   U * I   H   F * L   L !   *           * 
* *   *           * T   N   N * N         * K   G !   *           * 
* *   *           *         T * T   I     *       !   *           * 
* *   *           * O         *     N     *     O !   *           * 
* *   *           * F       O * O   T     *     N !   *           * 
* *   *           * F       N * F         *       !   *           * 
* *   *           *           * F   O     *       !   *           * 
* *   *           *           *     F     *       !   *           * 
* *   *           *           *     F     *       !   *           * 
* ******************************************************************
* 
      SKP 
* 
* <SSEND> 171010 [XMT BOARD]
* 
* * 1 * 1   1   0 * 0   0   0 * 0   0   0 * 0   0   1 * 0   0   0 * 
* ******************************************************************
* * C * C   C   S * P   P   S * S   T ! NOT USED  !   CHAR SIZE   * 
* * M * M   D   N * A   A   Y * T   E !   *       !   *           * 
* * D * D       D * R   R   N * A   S !   *       !   *           * 
* *   *     O     *         C * T   T !   *       !   *           * 
* *   *     N  (C)* S   E     *       !   *       !   *           * 
* *   *        (A)* T   V   E * I     !   *       !   *           * 
* *   *           * A   E   N * N     !   *       !   *           * 
* *   *         O * T   N   A * T     !   *       !   *           * 
* *   *         F *         B *       !   *       !   *           * 
* *   *         F * O       L * O     !   *       !   *           * 
* *   *           * F         * F     !   *       !   *           * 
* *   *           * F       O * F     !   *       !   *           * 
* *   *           *         F *       !   *       !   *           * 
* *   *           *         F *       !   *       !   *           * 
******************************************************************* 
      SKP 
* 
#BSC  OCT 150003        SECURITY CODE 
      DEF #I.50     DEFINE
      DEF #C.50       LIBRARY 
      DEF #P.50         ENTRY POINTS. 
* 
#I.50 NOP 
      STA TIMAD     SAVE ADDRESS OF TIMEOUT VALUES. 
      LDA EQ6,I 
      AND M3777     GET FUNCTION AND REQUEST CODES
      STA FUNC
* 
      LDA BIT12 
      LDB TFLAG,I   FETCH TRACE FLAG
      SZB           SET SWITCHES TO EITHER NOP
      LDB RSSI       OR RSS 
      CPB TSW1      CHANGING MODE?
      JMP TSW1       NO, SKIP SETTING SWITCHES
      INA            YES, SO INDICATE IN TRACE ENTRY
      STB TSW1      SET TRACE SWITCHES
      STB TSW2
      STB TSW3
      STB TSW4
* 
TSW1  NOP           TRACE SWITCH
      JMP *+3 
      LDB FUNC      SET BREG TO FUNCTION
      JSB TRACE 
      LDA FUNC      RESUME PROCESSING 
      LDB CWTBL     REG-B HAS PROCESS POINTER 
SCH   CPA 1,I       FOUND THE PROCESS ? 
      JMP GOTIT     YES 
      INB           BUMP PROCESS POINTER
      CPB CWLST 
      JMP REJ2      ILLEGAL FUNCTION, REJECT
      JMP SCH       LOOP BACK.
GOTIT ADB TLEN
      JMP 1,I       GET ADDR OF PROCESSOR & GO
* 
CWTBL DEF *+1       CONTROL WORK TABLE
      OCT 3703           INITIALIZE 
      OCT 3603           DISCONNECT 
REO7  OCT 3503           RECEIVE-TO-SEND
REO6  OCT 3403           HANDSHAKE
REO9  OCT 3303           AUTO-ANSWER
REO8  OCT 3203           SEND EOT 
REO10 OCT 3103           SEND-TO-RECEIVE (1 LONG T.O.)
      OCT 2703           SEND-TO-RECEIVE (20 SECS)
      OCT 3702           WRITE
REO5  OCT 3701           WRITE-CONVERSATIONAL 
REO4  OCT 3601           READ (SEND RVI)
REO3  OCT 3501           READ CONVERSATIONAL. 
REO2  OCT 3401           READ (SEND NAK)
REO1  OCT 3301           READ (SEND ACK0 OR ACK1) 
* 
TLEN  ABS *-CWTBL-32768 
      DEF INITL     INITIALIZE
      DEF OFF       DISCONNECT
      DEF RC2SD     RECEIVE-TO-SEND 
      DEF HNDSK     HANDSHAKE 
      DEF ANSWR     AUTO-ANSWER 
      DEF SEOF      SEND 'EOT'
      DEF SD2RC     SEND-TO-RECEIVE (1 LONG T.O.) 
      DEF LSN20     SEND-TO-RECEIVE (20 SECONDS)
      DEF SEND      WRITE 
      DEF SENDC     WRITE-CONVERSATIONAL
      DEF READ      READ (SEND 'RVI') 
      DEF READ      READ (CONVERSATIONAL) 
      DEF READ      READ(SEND 'NAK')
      DEF READ      READ (SEND 'ACK0' OF 'ACK1')
* 
CWLST DEF TLEN
* 
*            **  INITIALIZATION  ** 
* 
*  THIS SECTION INITIALIZES THE DRIVER. 
*  ON EXIT, REG-B HAS A PASSWORD WHICH IS THE 
*  ADDRESS OF XLINK WORD IN USER'S ID SEGMENT.
*  THIS ROUTINE SETS UP SYSTEM TIME PARAMETERS
*  OBTAINED FROM #COMN ROUTINE. 
* 
* 
INITL LDA EQ1       SET 
      ADA P3
      LDB EQ4A
      STA 1,I       SET EQT POINTER 
      INB 
      INA 
      CPB EQ12A 
RSSI  RSS           DONE
      JMP *-5       DO NEXT 
      LDA EQ12
      STA EQT12 
      INA 
      STA EQT13 
      ADA P2
      STA EQT15 
      CLB 
      STB EQ14,I    MAKE SURE THAT TIMER
      STB 0,I        IS ZERO
* 
      LDA EQTA        EQT 
      CMA,INA 
      ADA EQ1       THIS EQT ADDR - 1ST EQT ADDR
      DIV P15       COMPUTE RELATIVE EQT #
      INA 
      STA EQT#
* 
      LDA EQT7,I    SET UP BCC AND CODE FLAG
      STA BCCFL 
      JSB CCADR     SET UP LINE CODE TABLE
      LDA EQT4,I    SET BIT12 OF EQT4 TO TELL RTE 
      IOR MTOWN      TO ENTER C.50 ON TIME-OUT .
      STA EQT4,I
* 
      LDA TIMAD     GET ADDRESS OF TIMEOUT VALUES.
      LDB A,I       SET UP
      STB RCTM        RECEIVE  TIMEOUT
      INA 
      LDB A,I 
      STB XMTM        TRANSMIT TIMEOUT
      INA 
      LDB A,I 
      STB LGTM        LONG  TIMEOUT 
      INA 
      LDB A,I 
      STB #NUMB       # OF  TTD'S / WACK'S
      INA 
      LDB A,I       FETCH CONTROL MODE TIMEOUT
      STB CMDTM 
      INA           BUMP POINTER TO MODE CONTROL WORD 
      LDB A,I       GET CONTROL WORD
      STB DUPLX     SET VALUE FOR HALF/FULL DUPLEX FLAG 
* 
      INA           BUMP ADDRESS
      STA TFLAG 
      INA 
      STA TBUF      START OF TRACE BUFFER 
      INA 
      STA OVRN      OVERRUN FLAG
      INA 
      STA RDPT      READ POINTER
      INA 
      STA WRPT      WRITE POINTER 
      INA 
      STA BFEN      END OF BUFFER 
* 
      CCA           INITIALIZE UPPER TIME STAMP 
      STA LTIME 
* 
      JSB EXST      CLEAN EXTENDED STATUS 
      STA SETCN     CLR STC ,C FLAG FROM LAST TIME
* 
* CONFIGURE I/O INSTRUCTIONS
* 
      LDA EQT4,I    GET DEVICE'S
      AND M77       CHANNEL NUMBER (RECEIVE BOARD)
      STA B         IN B-REG
      IOR OTA       FORM CONFIGURED OTA 
      STA OTA1R     CONFIGURE RECEIVE BOARD 
      STA OTA4R 
      STA OTA5R 
      STA OTA6R 
      STA OTA7R 
      INA 
      STA OTA1S     CONFIGURE SEND BOARD
      STA OTA2S 
      STA OTA3S 
      STA OTA4S 
      STA OTA6S 
      STA OTA7S 
* 
      LDA CLC 
      IOR B         FORM CONFIGURED  CLC XX,C 
      STA CLC2
      STA PCLCR 
      STA CCLCR 
      INA           INCREMENT FOR SEND BOARD
      STA CLC1
      STA PCLCT 
      STA CCLCT 
* 
      LDA STC       FORM COFIGURED  STC XX,C
      IOR B 
      STA STC1R 
      INA 
      STA STC1S 
* 
      LDA LIA       FORM CONFIGURED LIA XX
      IOR B 
      STA LIA3R 
      INA 
      STA SSTA
      LDA SYNC      OUTPUT THE SYNC CHARACTER 
OTA6S OTA 0          TO THE TRANSMIT BOARD, 
OTA6R OTA 0           AND TO THE RECEIVE BOARD. 
* 
      LDA EQT5,I    CLEAN STATUS IN EQT4
      AND MFST
      STA EQT5,I
      JSB WACTZ     CLEAN WACK/TTD & SPEC CASE FLAG 
      LDB EQ1,I     GET ADDRESS OF USER'S I.D. SEGMENT. 
      STB PSWD      USE IT FOR THE PASSWORD.
      JSB SCLR      CLEAN INTERNAL FLAGS. 
      STA LINE      SET TERMINAL OFF-LINE.
      STA FUNC      ERASE FUNCTION FOR
      LDA P4          IMMEDIATE COMPLETION
      JMP CLC1      DO CLC'S & EXIT 
* 
EQ4A  DEF EQT4
EQ12A DEF EQT12 
*  *** CLEAN INTERNAL FLAGS FOR NEXT OPERATION ***
SCLR  NOP 
TIMAD EQU SCLR      SHARE STORAGE (INITIALIZATION ONLY).
      CLA 
      STA EOF       CLEAR "EOT" FLAG
      STA RQ2SD     CLEAR "RVI" FLAG
      STA INERR     CLEAR OPERATION IN ERROR FLAG 
      STA TLOG      CLEAR TRANSMISSION LOG
      STA OVRFL     CLEAR BUFFER-OVERFLOW FLAG
      STA SYNFL     CLEAR SYNC-REFERENCE FLAG 
      JMP SCLR,I    RETURN
* 
*SCFWA OCT 25045     TEMP DEBUG 
TFLAG DEF OVRN      TRACE FLAG ADDRESS
OVRN  NOP           OVERRUN FLAG ADDRESS
TBUF  NOP           FWA OF TRACE BUF
WRPT  NOP           ADDRESS OF WRITE POINTER
RDPT  NOP           ADDRESS OF READ POINTER 
BFEN  NOP           END OF BUFFER ADDRESS 
      SKP 
*         ** ACTIVATE TIMER **
* 
*  THIS ROUTINE SETS UP TIME-OUT VALUE IN EQT15.
*  EQT14 IS NOT USED BY THIS DRIVER (EQT14 IS SET TO
*  ZERO AFTER THE INITIALIZATION CALL AND THE USER
*  MUST NOT ATTEMT TO DO ANY KIND OF DEVICE TIME-OUT
*  MANIPULATION WHILE THE DRIVER IS IN USE).
* 
*  ON ENTRY INTO 'TACTV' :
*     REG-A  =  NEG NUMBER OF 10 MSEC INTERVALS 
*     REG-B  =  ADDRESS OF ROUTINE TO BE EXECUTED 
*                                       UPON TIMEOUT
* 
TACTV NOP 
      LDB TACTV,I 
      STA EQT15,I   SET TIME-OUT VALUE OR ZERO IT 
      SZA           IS IT DEACTIVATE TIMER ?
      STB TADRS     NO. THEN SET TRANSFER ADDRESS.
      ISZ TACTV 
      JMP TACTV,I   RETURN. 
* 
TADRS NOP           TRANSFER ADDRESS AFTER REENTRY ON TIMEOUT 
      STA EQT15,I   SET TIMEOUT 
      JMP EXITR 
* 
TACTZ NOP 
      CCA 
      STA EQT15,I   SET FAST TIMEOUT
      LDA TACTZ 
      STA TADRS     SET ADDR UPON RETURN
* 
RTN0  CLA 
CLC1  CLC 0,C       XMIT BOARD
CLC2  CLC 0,C       RCV BOARD 
      JMP #I.50,I 
****************************************************
      SKP 
*         **  C.50  **
* 
#C.50 NOP 
      LDA SETCN     FETCH STC FLAG
      SSA,RSS       ARE WE TO STC THE CARDS UPON EXIT?
      CLA            NO, SO RESET FLAG
      STA SETCN 
* 
      LDA RSSI
      STA EXITR     MODIFY INSTRUCTION
      ISZ #C.50 
      ISZ #C.50     ASSUME (P+2) RETURN 
      JMP TADRS,I   GO TO TIME-OUT PROCESSOR. 
* 
*         **  P.50  **
#P.50 NOP 
      CLA 
      STA SETCN     CLEAR 'STC XX,C' FLAG 
      STA EXITR     MODIFY INSTRUCTION
      JSB LCHCK     DROP LINE IF DATA-SET IS OFF. 
      JMP EXIT,I    TRANSFER ADDRESS ON I/O INTERRUPT 
* 
EXIT  NOP 
EXITR NOP            #C.50 EXIT ? 
      JMP PEXIT     NO, THEN #P.50 EXIT.
      ISZ SETCN     YES. SET CONTROL,CLEAR FLAG ? 
      JMP CCLCT     NO, DO CLC,CLF ON BOTH BOARDS 
CCLC  CLC 0,C 
STC1  STC 0,C       CONFIGURED SET CONTROL, CLR FLAG
      JMP #C.50,I   RETURN
* #P.50 EXIT
PEXIT LDA SYNFL     GET SYNC-REFERENCE COMMAND, OR ZERO.
      ISZ SETCN     SET CONTROL, CLEAR FLAG?
      JMP PCLCT     NO, DO CLC, CLF ON BOTH BOARDS
PCLC  CLC 0,C 
STC2  STC 0,C       CONFIGURED SET CONTROL, CLR FLAG
      JMP #P.50,I   RETURN: <A>=SYNC REF, OR ZERO.
* 
PCLCT CLC 0,C 
PCLCR CLC 0,C 
      JMP #P.50,I 
* 
CCLCT CLC 0,C 
CCLCR CLC 0,C 
      JMP #C.50,I 
* 
STC   STC 0,C 
CLC   CLC 0,C 
OTA   OTA 0 
LIA   LIA 0 
* 
DEVDN OCT 40000     DEVICE DOWN MASK
MTOWN OCT 10000 
MFHNT OCT 176777
MFST  OCT 177400
M3777 OCT 3777
STC1S NOP           CONFIGURED STC XX,C (SEND BOARD)
STC1R NOP           CONFIGURED STC XX,C (RECEIVE BOARD) 
SETCN NOP           IF -1 THEN SET CONTROL ON BOARD 
SYNFL NOP           SYNC-REF.CMD, IF SYNC HUNT; OR ZERO 
MSK14 OCT 140000
* 
* SET CONTROL, CLEAR FLAG ON SEND BOARD 
SYN2S NOP 
      JSB SYN7      OUTPUT CHAR 
      LDA STC1S     CONFIGURE INSTRUCTIONS FOR
      STA STC1      SEND BOARD
      STA STC2
      JSB SYN3S     READ STATUS 
      SSA,RSS       DATA SET OFF ?
      JMP DSOF      YES 
      SLA,RSS       CLEAR-TO-SEND OFF ? 
      JMP MODFL     YES 
      CCA 
      STA SETCN     STC,C FLAG
      LDA CCLCR 
      STA CCLC
      STA PCLC
      JSB EXIT      EXIT DRIVER FOR NOW 
      JMP SYN2S,I   RETURN
* 
* SET CONTROL, CLEAR FLAG ON RECEIVE BOARD
SYN2R NOP 
      LDA STC1R     CONFIGURE INSTRUCTIONS FOR
      STA STC1      RECEIVE BOARD 
      STA STC2
      CCA 
      STA SETCN     SET CONTROL AND CLEAR FLAG UPON 
      LDA CCLCT 
      STA CCLC
      STA PCLC
      JMP SYN2R,I   RETURN
* 
* GET SEND BOARD STATUS 
SYN3S NOP 
SSTA  LIA 0         LOAD A-REG WITH STATUS BITS 
      RAL,RAL 
      JMP SYN3S,I   RETURN
* 
* GET RECEIVE BOARD STATUS
SYN3R NOP 
LIA3R LIA 0         LOAD A-REG WITH STATUS BITS 
      JMP SYN3R,I   RETURN
* 
* 
CCADR NOP 
      LDB N13 
      STB SYN3S     SET 13 WORD TRANSFER
      LDB CCADD 
      STB SYN3R     SET DESTINATION ADRS
      LDA BCCFL 
      AND MASK      GET LINE CODE SYN CHAR
      LDB ASCCC 
      CPA ECCC+11   LINE CODE = EBCDIC ?
      LDB EBCCC     YES MUST BE ASCII.
LOOP2 LDA B,I       TRANSFER
      STA SYN3R,I      A WORD.
      INB           BUMP SOURCE ADDRESS 
      ISZ SYN3R     BUMP DESTINATION ADDRESS
      ISZ SYN3S     ALL DONE ?
      JMP LOOP2     NO
      JMP CCADR,I   YES, LEAVE. 
* 
* SET UP BOARD TO SEND
* 
SYN5  NOP 
      STA SEC3C     SET TIMEOUT 
      LDA SSEND     GET SYNC CONFIGURED CONTROL WORD
OTA3S OTA 0         OUTPUT TO I/O BOARD 
      CLB 
      JSB SYN7      SEND BLANKS 
      JMP SYN5,I    RETURN
* 
* 
* SET UP BOARD TO RECEIVE 
* 
SYN6  NOP 
      LDA STOR      GET TURN-AROUND CONTROL WORD
      LDB DUPLX     GET DUPLEX FLAG 
      SLB,RSS       SKIP IF FULL DUPLEX 
OTA4S OTA 0         CHANGE SEND BOARD TO RECEIVE CONDITION
      LDA SREVC     GET SYNC CONFIGURED CONTROL WORD
OTA4R OTA 0         OUTPUT TO I/O BOARD 
      JMP SYN6,I    RETURN
* 
* 
* SEND CHARACTER TO THE I/O BOARD (CHARACTER IN B)
* 
* 
SYN7  NOP 
      LDA B 
      AND MASK      MASK EXTRANEOUS BITS
OTA2S OTA 0         OUTPUT TO SEND BOARD
TSW2  NOP           TRACE SWITCH
      JMP SYN7,I    RETURN
      IOR BIT15 
      JMP TTRAC     CREATE A TRACE ENTRY
* 
* 
* GET RECEIVED CHARACTER AND PLACE IN A-REG 
* 
DOLIA NOP 
      JSB SYN2R     ENABLE RCV INTERRUPTS 
      JSB EXIT      AWAIT NEXT WORD 
      JSB SYN3R     GET CHARACTER FROM RECEIVE BOARD
      ALF,RAR 
      SLA,RSS       DATA SET OFF ?
      JMP DSOF      YES 
      SSA           RECEIVED CARRIER FAILED ? 
      JMP DOLIX     NO
      CCA           YES 
      STA CARCT     SET "CARRIER FAILED" FLAG 
      LDA SREVC 
      AND MFHNT 
OTA5R OTA 0         DISABLE LINE STATUS INTERRUPT 
DOLIX JSB SYN3R 
      AND MASK
TSW3  NOP           TRACE SWITCH
      JMP DOLIA,I   RETURN
* 
* TTRAC: TIME TRACE ROUTINE TO CREATE A 2 WORD ENTRY COMPLETE 
*        WITH LOWER TIME STAMP.  ALSO REPORTS NEW UPPER TIME
*        STAMP IF NEEDED. 
* 
TTRAC LDB $TIME+1   FETCH UPPER TIME STAMP
      CPB LTIME     SAVE AS LAST REPORTED?
      JMP TRAC2      YES, THEN JUST REPORT DATA & LOWER TIME
      STB LTIME      NO, RESET AND REPORT NEW UPPER TIME
      STA TTEMP+1 
      LDA BIT14 
      JSB TRACE 
      LDA TTEMP+1   FETCH BACK DATA BYTE
TRAC2 LDB $TIME 
      JSB TRACE     CREATE DATA ENTRY 
      LDA TTEMP     RESTORE AREG
      SSA           WHICH WAY OUT?
      JMP SYN7,I
      JMP DOLIA,I 
* 
* TRACE: SUBROUTINE TO CREATE A TWO WORD ENTRY INTO THE TRACE 
*        BUFFER. CHECKS FOR AND INDICATES OVERRUN CONDITIONS. 
* 
TRACE NOP 
      STA TTEMP     SAVE A-REG
      LDA WRPT,I
      STB 0,I       SAVE B-REG FIRST
      INA 
      LDB TTEMP 
      STB 0,I       THEN A-REG
      INA 
      CPA BFEN,I    END OF TRACE BUFFER?
      LDA TBUF,I     YES, RESET POINTER 
      STA WRPT,I
      CPA RDPT,I    OVERRAN READ POINTER? 
      ISZ OVRN,I     YEP, TELL SOMEONE
      NOP 
      JMP TRACE,I 
* 
TTEMP BSS 2 
LTIME NOP 
* 
CARCT NOP           CARRIER FAIL COUNTER
* 
DUPLX NOP           0 FOR HLF-DUPLEX, 1 FOR FULL DUPLEX 
* 
*     PASSWORD VALIDATION ROUTINE 
PSW   NOP 
      CPA PSWD      PASSWORD CORRECT ?
      JMP PSW,I     YES, THEN RETURN. 
      LDB BIT1      SET PASSWORD VIOLATION
      JMP MVIOL+1 
*             VALIDATE ON-LINE CONDITION
ONLN  NOP 
      LDA LINE
      SZA           TERMINAL ON-LINE
      JMP ONLN,I    YES, THEN RETURN. 
      JMP MVIOL     RECORD MODE VIOLATION 
* 
ERCNT NOP 
      JSB UPCAR     BRING UP CARRIER
      LDA M8
      STA ERROR      SETUP ERROR RETRY COUNTER
      JMP ERCNT,I 
M8    DEC -8
* 
*        VALIDATE OFF-LINE CONDITION
OFLN  NOP 
      LDA LINE
      SZA,RSS       TERMINAL OFF-LINE ? 
      JMP OFLN,I    YES, THEN RETURN. 
      JMP MVIOL     RECORD VIOLATION IN STATISTICS
* 
*    VALIDATE RECEIVE MODE CONDITION
RMD   NOP 
      LDA EQT9,I
      JSB PSW       CHECK PASSWORD
      LDA RCSND 
      SZA,RSS       IN RECEIVE MODE ? 
      JMP RMD,I     YES, THEN RETURN. 
      JMP MVIOL     RECORD MODE VIOLATION 
* 
*      VALIDATE CONTROL MODE CONDITION
CNTMD NOP 
      JSB ONLN      VALIDATE THAT ON-LINE 
      LDA EQT5,I    GET PREVIOUS STATUS 
      AND P12       GET XMIT AND REC BITS 
      SZA,RSS       TRML IN XMIT OR REC MODE ?
      JMP CNTMD,I   NO, THEN IT IS OK.
* 
MVIOL LDB BIT2      GET (B) FOR MODE VIOLATION
      JSB SET       SET VIOLATION IN STATISTICS 
* 
REJ2  LDA EQ5,I     SET 'OPERATION IN ERROR'
      IOR P1         IN STANDARD STATUS WORD. 
      STA EQ5,I 
      LDA P2        REG-A = 2 FOR ERROR RETURN
      CLB 
      STB FUNC      ERASE FUNCTION HOLDER.
      JMP #I.50,I   RETURN
EQ5   EQU 1664B 
* 
*        ***  HANDSHAKE PROCESSOR  ***
* 
*  EXECUTION STEPS: 
*  1. REJECT IF PASSWORD IS INCORRECT.
*  2. REJECT IF TERMINAL ON-LINE. 
*  3. WAIT FOR OPERATOR TO DIAL REMOTE. 
*  4. SEND "ENQ" CHARACTER TO REMOTE. 
*  5. WAIT FOR "ACK0" OR "RVI" FROM REMOTE. 
*  6. ACTIVATE THE "TTD" MODULE TO FUNCTION FOR THE 
*     TIME SPECIFIED BY THE "#COMN" ROUTINE.
* 
* 
HNDSK LDA EQT7,I
      JSB PSW       CHECK PASSWORD
      JSB OFLN      CHECK MODE
      JSB EXST      CLEAN EXTENDED STATUS 
      JSB TACTZ 
* 
*  REQUEST ACCEPTED. SET UP I/O BOARD.
* 
      LDA SEC10 
      JSB SYN5      PRIME I/O BOARDS
HDSK1 JSB SYN3S     GET STATUS OF SEND BOARD
      SSA           DATA SET READY ?
      JMP BHND1     YES 
BHND  LDA EQTM      SET 1 SEC TIMER LOOP
      JSB TADRS        AT "HDSK1" 
      JMP HDSK1 
* 
BHND1 SLA           CLEAR-TO-SEND UP ?
      JMP CTSOK     YES.
      ISZ SEC3C     10 SEC OVER ? 
      JMP BHND      NO
      JMP MODFL     YES, REPORT FAILURE.
* 
CTSOK ISZ EOF       INDICATE CONTROL MODE 
      CLA,INA       SET UP THE A REGISTER 
      JMP CTSXT     FOR A BUMMED EXIT!
* 
* 
      