ASMB,R,L,C
      HED #TAM 91703-16104 * (C) HEWLETT PACKARD CO. 1976 
      NAM #TAM 91703-16104 REV A 760329 
      SPC 1 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1976.  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.       *
******************************************************************
      SPC 2 
      SPC 1 
* 
**************************************************
* 
*#TAM TERMINAL ACCESS MONITOR FOR BCS TO RUN IN RTEII 
* 
*SOURCE PART #      91703-18104 
* 
*REL PART #         91703-16104 
* 
*WRITTEN BY:        LARRY POMATTO 
* 
*DATE WRITTEN:      09-30-74
* 
*MODIFIED BY:       BOB SHATZER     (04-07-75)
*                   DAN GIBBONS     (01-08-76)
* 
**************************************************
      SPC 1 
* 
* THIS SUBROUTINE INTERFACES A BCS USER TO THE
* D.65 COMMUNICATIONS DRIVER. 
* 
      ENT #TAM,$C.LU,TMOUT,INT65
* 
      EXT .IOC.,XEQT
* 
* DURING GENERATION, THE USER MUST SPECIFY THE DATA RATE OF HIS 
* PARTICULAR COMMUNICATIONS LINE IN ORDER FOR THE I/O TIMEOUT 
* VALUES TO BE SET UP PROPERLY.  THIS IS DONE BY DESIGNATING A
* DIFFERENT UNIT NUMBER FOR EACH DATA RATE, AS FOLLOWS: 
* 
*       UNIT #       DATA RATE      I/O CARD
* 
*         0            1 MEG          12665 
*         1              150          12773 
*         2              300          12773 
*         3              600          12773 
*         4             1200          12773 
*         5             2400          12773 
*         6             4800          12773 
*         7             9600          12773 
* 
* IF THE USER'S MODEM RATE IS NOT AS SPECIFIED, THE NEXT SLOWEST
* RATE SHOULD BE USED.
* 
* THE SETUP IS DONE BY AN INITIALIZATION CALL TO #TAM, AS SHOWN 
* BELOW.  THIS CALL MUST BE MADE PRIOR TO THE FIRST USAGE OF THE
* COMM LINK BY THE SATELLITE OR CENTRAL.  IF D.65 IS NOT CONFIGURED 
* INTO THE SYSTEM, #TAM WILL HALT AT THE END OF THE INITIALIZATION
* ATTEMPT (HLT 13B). #TAM IS INITIALIZED UPON ITS FIRST ENTRY,SO
* THE INITIALIZATION CALL NEED NOT BE MADE PRIOR TO A CALL TO #TAM. 
* 
* ON RETURN TO THE CALLER IF COMPLETED IMMEDIATELY, THE A 
* REGISTER CONTAINS THE STATUS CODE AND THE B 
* REGISTER WILL POINT TO THE BUFFER.
* 
* STATUS CODES: 
* 
*      -3  COMMUNICATIONS I/O ERROR.
*      -1  REQUEST COMPLETED, NO ERRORS.
*       0  REQUEST BEING PROCESSED. 
*       1  ILLEGAL TAM REQUEST CODE.
*       2  COMMUNICATIONS LINE DOWN OR XMSN ERROR.
*       3  NOT ENOUGH PARAMS IN TAM CALL. 
*       4  ILLEGAL REQUEST LENGTH RECEIVED
*       5  RFA BUSY (REQUEST OVERFLOW AT REMOTE). 
* 
*      FOR ERROR STATUS BITS SET IN EQT:
* 
*      61 - BIT 2   LENGTH ERROR               .
*      62 - BIT 3   ILLEGAL STOP SENT..HAVE RETRIED 
*      63 - BIT 4       SIMULTANEOUS REQUEST. 
* 
*  (60-63 DECIMAL = 74-77 OCTAL)
* 
* CALLING 
* SEQUENCES:
*             A-REG. = 1 FOR SEND/RECV "REQUEST". 
*                   = 0 FOR SEND/RECV "DATA". 
* 
*      PUT DATA STREAM: 
* 
*            JSB #TAM 
*            DEF *+4
*            DEC 6
*            DEF DATA BUFFER
*            DEC BUFFER LENGTH (NEGATIVE BYTES) 
* 
* 
*      GET DATA STREAM: 
* 
*            JSB #TAM 
*            DEF *+4
*            DEC 5
*            DEF DATA BUFFER
*            DEC BUFFER LENGTH (NEGATIVE BYTES) 
* 
* 
*      EXTENDED PUT, CONVERSATIONAL - 
* 
*      TRANSMIT REQUEST AND RECEIVE OR TRANSMIT DATA
*      (SPECIAL INTERFACE TO D.65 FOR REMOTE CALLS
*      THAT INVOLVE A DATA BUFFER): 
* 
*            (A) = 0 FOR RECEIVE DATA 
*            (A) = 1 FOR TRANSMIT DATA
* 
*            JSB #TAM 
*            DEF *+6
*            DEC 8
*            DEF REQUEST BUFFER ADDRESS 
*            DEC REQ. BUFFER LENGTH (NEG. BYTES)
*            DEF DATA BUFFER ADDRESS
*            DEC DATA BUFFER LENGTH (NEGATIVE BYTES)
* 
* 
*      TRANSMIT STOP REPLY: 
* 
*            JSB #TAM 
*            DEF *+2
*            DEC 2
* 
* 
*      INITIALIZE:
* 
*            JSB #TAM 
*            DEF *+2
*            OCT 0
* 
*     REGISTERS ARE MEANINGLESS UPON ENTRY AND EXIT FROM THIS CALL. 
* 
*     NOTE THAT THIS CALL MUST BE MADE PRIOR TO USAGE OF THE COM- 
*     MUNICATIONS LINK BY EITHER THE SATELLITE OR CENTRAL.
* 
* 
#TAM  NOP 
      INA 
      STA IMODE     SAVE REQUEST/DATA CODE. 
* 
THERE JSB $INIT     GO AND INITIALIZE I/O 
      LDA D0        GET A NOP 
      STA THERE     AND OVERLAY INITIALIZATION CALL 
* 
      LDA #TAM
      LDB A,I       SAVE RETURN ADDRESS.
      STB RETRN 
      INA 
      LDB A,I       (B) = REQUEST CODE
      STB RCODE 
      INA 
      STA PARAD     ADDR OF PARAMETER LIST
* 
      CMA,INA 
      ADA RETRN     (A) = NUMBER OF PARAMETERS
      STA N.PRM 
* 
      CPB D0        INITIALIZE? 
      JMP RETRN,I   YES - RETURN, SINCE IT'S BEEN DONE
      CPB D2        STOP REPLY? 
      JMP STOP      YES, TAKE SHORTCUT. 
      LDA PARAD     FETCH BUFFER ADDRESS. 
      JSB INDCK 
      STA TRA1      PLACE INTO IOC CALL.
      STA RTNB      PSEUDO STMID ADDR.
      ISZ PARAD 
      LDA PARAD,I   FETCH BUFFER LENGTH.
      CMA,INA       CONVERT TO WORDS
      SLA 
      INA 
      RAR 
      STA TRA2
* 
      LDA N.PRM 
      LDB RCODE     IS THIS A GET OR A PUT? 
      CPB D5
      JMP RECV      GET DATA STREAM.
      CPB D6
      JMP SEND      PUT DATA STREAM.
      CPB D8
      JMP CNVER     PUT, CONVERSATIONAL 
* 
      CLA,INA       ILLEGAL REQUEST CODE. 
      JMP ERRXT 
ERR3  LDA D3        NOT ENOUGH PARAMETERS SUPPLIED. 
      JMP ERRXT 
      SPC 3 
$INIT NOP 
      LDA B7        CONFIGURE IOC CALL. 
      STA $C.LU     INITIALIZE LU COUNTER.
      LDB XEQT      GET ADDRESS OF EQT TABLE
      LDA B,I       FETCH # EQT ENTRIES.
      CMA,INA 
      STA CNTR
      ADB D2        FETCH FWA FIRST EQT,WORD 2. 
CNF1  LDA B,I 
      AND EQTM      MASK ALL BUT EQT TYPE 
      CPA D65C      IS IT D.65? 
      JMP CNF2      YES.
      ADB D4        NO, LOOK AT NEXT EQT. 
      ISZ $C.LU     BUMP LU COUNTER.
      ISZ CNTR
      JMP CNF1
      HLT 13B       NO D.65 EQT.
      JMP *-1 
* 
CNF2  ADB MD1       GET TO EQT WORD1
      LDA B,I 
      ALF,ALF 
      RAL,RAL 
      AND B7        ISOLATE UNIT NUMBER 
      ADA TMTBL     ADD TO TIMEOUT TABLE ADDRESS
      LDA A,I       GET T/O VALUE FROM TABLE
      STA TMOUT     AND SET UP TIMEOUT VALUE
* 
      LDA SCNWD     SET LU IN STATUS CALL.
      AND MSK 
      IOR $C.LU 
      STA SCNWD 
      LDA STOPC     SET LU IN STOP CALL.
      AND MSK 
      IOR $C.LU 
      STA STOPC 
      LDA $C.LU     SET LU IN CLEAR I/O CALL. 
      STA CLCNW 
      JMP $INIT,I   RETURN
* 
*     THE FOLLOWING IS A TABLE OF TIMEOUT VALUES FOR EACH COMM LINK 
*     DATA RATE. THE VALUES ARE -2(N+1) WHERE N IS THE NUMBER OF
*     THREE SECOND INTERVALS REQUIRED TO HANDLE A 512 WORD REQUEST  
*     AND DATA CALL OVER 2000 MILES OF COMMUNICATIONS LINE. THIS
*     TABLE IS INDEXED BY THE UNIT NUMBER SPECIFIED IN THE D.65 
*     EQT AT GENERATION TIME. 
* 
TMTBL DEF *+1 
      DEC -3        12665 CARD (1 MEGABIT)
      DEC -106      12773 CARD (150 BPS)
      DEC -61       300 BPS 
      DEC -38       600 BPS 
      DEC -27       1200 BPS
      DEC -21       2400 BPS
      DEC -19       4800 BPS
      DEC -17       9600 BPS
* 
      SPC 5 
CNVER CPA D4        CHECK PARAM COUNT.
      RSS 
      JMP ERR3      NOT ENOUGH PARAMS.
* 
      LDA TRA1
      STA TRAA
      LDA TRA2
      STA TRAB
* 
      ISZ PARAD     GET DATA BUFFER ADDR. 
      LDA PARAD 
      JSB INDCK 
      STA TRA3
* 
      ISZ PARAD 
      LDA PARAD,I   FETCH DATA BUFFER LENGTH
      CMA,INA       CONVERT TO WORDS. 
      SLA 
      INA 
      RAR 
      STA TRA4
      LDA TRA 
      STA TRA1
      LDA D4
      STA TRA2
* 
      LDA IMODE 
      LDB SRAD      SEND REQUEST AND DATA COMMAND 
      JMP DIO       GO PROCESS REQUEST AND DATA 
      SPC 5 
SEND  CPA D2        CHECK PARAM COUNT.
      RSS 
      JMP ERR3      NOT ENOUGH PARAMETERS.
* 
      LDA D2        GET MODE WORD 
      LDB DATA      GET FOR DATA TRANSFER 
      CPA IMODE     IS IT A DATA REQUEST
      LDB REQ       NO...READ REQUEST 
      JMP DIO       GO DO IT
      SPC 5 
RECV  CPA D2        CHECK PARAM COUNT.
      RSS 
      JMP ERR3      NOT ENOUGH PARAMS.
* 
      LDB REQ       GET REQUEST CONTROL WORD
      LDA B1        GET RECEIVE FLAG...DATA FLAG
      CPA IMODE     DATA OR REQUEST?
      LDB DATA      DATA
      JMP DIO 
      SPC 3 
STOP  CLA 
      STA CONWD     SET CONWD=0...FAKE READ FOR WAIT INTERVAL 
      JSB .IOC.     SEND STOP REPLY.
STOPC OCT 30400 
      JMP *-2 
      JMP DIO1
      SPC 3 
* 
*     DIO...A REG CONTAINS READ WRITE FLAG
*           1=READ  2=WRITE 
*           B REG CONTAINS SUBMODE
*           100=REQ AND DATA  200=DATA  300=REQ 
* 
DIO   ALF,ALF       GET READ WRITE FLAG TO BIT 12 
      ALF 
      IOR $C.LU     MASK IN LU
      IOR B         MASK IN SUBMODE 
      STA CONWD     SAVE CONTROL WORD 
      LDA MD10      MAX OF 10 RETRYS ON PARITY OR SIMULTANEOUS REQ. 
      STA PARCT     SAVE IN DOWN COUNTER
* 
DIO0  JSB GOIOC     PERFORM D.65 IOC CALL.
DIO1  LDB TMOUT     GET TIMEOUT VALUE 
      STB DELAY     SAVE IN DOWN COUNTER
      CLA 
      STA DEL 
      JSB STATS     WAIT FOR COMPLETION.
      JSB SETER     SET TAM ERROR CODE. 
      JMP DIO0      RE-TRY
      SPC 3 
ERRXT BSS 0 
      LDB RTNB      (B) = ADDR OF STMID.
      JMP RETRN,I 
      SPC 3 
GOIOC NOP 
      JSB .IOC.     RECEIVE OR TRANSMIT 
CONWD OCT 0         DATA OR REQUEST.
      JMP *-2 
TRA1  NOP 
TRA2  NOP 
      JMP GOIOC,I 
* 
STATS NOP 
      JSB .IOC.     STATUS CALL.
SCNWD OCT 40000 
      SSA,RSS 
      JMP SCN 
* 
      ISZ DEL       COUNT TIME. 
      JMP STATS+1 
      ISZ DELAY 
      JMP STATS+1 
* 
      JSB .IOC.     TIME OUT...CLEAR I-O
CLCNW OCT 0 
      LDA B200      FORCE "LINE DOWN " ERROR" 
* 
SCN   ALF,ALF       BIT 6 (NO REQ RECV) SET?
      RAL 
      SSA 
      JMP GOIOC+1   YES, REPEAT READ CALL.
      ALF,ALF       NO. 
      RAR 
* 
      JMP STATS,I 
* 
SETER NOP           (A) = EQT STATUS. 
      AND B377      MASK OFF ALL BUT STATUS 
      CPA D8        SEE IF STOP SENT
      INB,SZB       IF SO,WAS LENGTH=-1 
      RSS           NO..NO STOP, OR LENGTH NOT -1 
      CLA,INA       YES,LEGAL STOP. TREAT SAME AS NO ERRORS 
      SLA           BIT 0 
      LDB MD1       NO ERRORS REQUEST COMPLETED 
      RAR,SLA       BIT 1 
      LDB D4        REQ NOT ACCEPTED...LENGTH ERROR 
      RAR,SLA       BIT 2 
      LDB B75       NO DATA...DATA CALL WITHOUT REQ 
      RAR,SLA       BIT 3 
      LDB B76       ILLEGAL STOP SENT. REPORT AFTER RETRY 
      RAR,SLA       BIT 4 
      LDB B77       SIMULTANEOUS REQUEST. 
      RAR,SLA       BIT 5 
      LDB MD3       PARITY ERROR. 
      RAR,SLA       BIT 6 
      LDB B74       NO REQUEST RECEIVED.
      RAR,SLA       BIT 7 
      LDB D2        BROKEN LINE 
      CPB B76       ILLEGAL STOP? 
      RSS           YES...RETRY 
      CPB B77       SIMULTANEOUS REQUEST? 
      RSS           YES..ONE OF THE THREE 
      JMP *+3       NO...IRRECOVERABLE ERROR
      ISZ PARCT     INCREMENT PARITY COUNT
      RSS           RE-TRY
      ISZ SETER     GIVE CONTROL BACK TO USER 
      LDA B 
      JMP SETER,I 
      SPC 1 
B377  OCT 377 
      SPC 1 
* 
INDCK NOP 
      LDA A,I 
      RAL,CLE,SLA,ERA 
      JMP *-2 
      JMP INDCK,I 
      SPC 1 
INT65 NOP           DUMMY TO SATISFY D.65 EXT 
      JMP INT65,I 
      SKP 
* CONSTANTS AND WORKING STORAGE.
* 
TMOUT NOP 
IMODE OCT 0         DATA XMSN MODE, DRIVER SUBMODE. 
TRA   DEF *+1 
TRAA  OCT 0         ADDR OF DATA BUFFER.
TRAB  OCT 0         BUFFER LENGTH.
TRA3  OCT 0 
TRA4  OCT 0 
$C.LU OCT 0         LOGICAL UNIT OF REMOTE COMPUTER.
DATA  OCT 200       DATA SUBMODE
REQ   OCT 300       REQUEST SUBMODE 
SRAD  OCT 100       REQUEST AND DATA SUBMODE
MSK   OCT 177700
DEL   NOP 
DELAY NOP 
PARCT NOP 
A     EQU 0 
B     EQU 1 
RETRN OCT 0         CALLER'S RETURN ADDRESS.
RCODE OCT 0         REQUEST CODE. 
PARAD OCT 0         ADDR OF PARAMETER LIST. 
N.PRM OCT 0         NUMBER OF PARAMETERS. 
RTNB  OCT 0         (B) RETURNED BY TAM.
CNTR  OCT 0 
MD1   DEC -1
MD3   DEC -3
MD10  DEC -10 
D0    OCT 0 
B1    OCT 1 
D2    OCT 2 
D3    OCT 3 
D4    OCT 4 
D5    OCT 5 
D6    OCT 6 
B7    OCT 7 
B200  EQU DATA      NEED OCTAL 200
D8    DEC 8 
D65C  OCT 32400 
EQTM  OCT 77400 
B74   OCT 74
B75   OCT 75
B76   OCT 76
B77   OCT 77
* 
      BSS 0 
* 
      END 
                  