ASMB,R,L,C
      HED @PTP  91705-16111 REV A *(C) HEWLETT-PACKARD CO 1976
      NAM @PTP,7 91705-16111 REV A 760401 
      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 1 
* 
* @PTP
* SOURCE: 91705-18111 REV.A 
* BINARY: 91705-16111 REV.A 
* JIM HARTSELL
* JULY 30, 1974 
* MODIFIED BY: C.WHELAN 11-18-75
* 
* LIBRARY SUBROUTINE APPENDED TO RTE-C SATELLITE USER 
* PROGRAM FOR SLAVE PROGRAM TO PROGRAM COMMUNICATION
* WITH A CENTRAL STATION MASTER PROGRAM.
* 
      ENT GET,ACEPT,REJCT,FINIS 
* 
      EXT EXEC,%LU,%MFLG,%MBOX,%CSID
      EXT $LIBR,$LIBX,$LIST,$XEQ
      EXT $PVCN 
* 
* 
* PROCESS "GET" CALL. 
* 
GET   NOP 
      LDA GET 
      ADA B2
      STA P.PTR     POINTER TO USER PARAMS
      LDA GET,I 
      STA GET       SET RETURN ADDRESS
* 
      LDB IERR
      CLA 
      STA IERR      CLEAR SLAVE ERROR CODE. 
      CPB MD47      COMM ERROR ON PREVIOUS TRY? 
      JMP CLOLD     YES, CLEAR OLD XACTION
      LDB MD46      CHECK CALL SEQUENCE.
      LDA NEXT
      SZA 
      JMP SETER     IMPROPER SEQUENCE.
* 
SETPT LDB DFBOX     POINTER TO PARMB MAILBOX. 
      JSB INDCK 
      ADB B2        MOVE TO WORD 3. 
      STB M.PTR 
* 
* CHECK MAILBOX FOR PTOPC PARMB.
* 
CHECK LDA %MFLG     IS SOMETHING THERE? 
      SZA 
      JMP FLGUP     YES. DON'T GO OP SUSP LIST. 
* 
* SUSPEND VIA THE OP SUSP LIST WHILE WAITING FOR THE
* NEXT MASTER REQUEST. WHEN A REQUEST ARRIVES, @INTR
* WILL RE-SCHEDULE THE USER.
* 
      JSB $LIBR 
      NOP 
* 
      LDA XEQT,I
      STA IDSG
      STA %CSID 
      LDA DEFX
      STA XSUSP,I 
* 
      CLA           PRIVILEDGED MODE. 
      STA $PVCN 
* 
      JSB $LIST 
      OCT 106 
IDSG  NOP 
* 
      JMP $XEQ      RELEASE CPU.
DEFX  DEF CHECK     RESTART ADDRESS.
* 
* PASS RETURN PARAMS TO USER. 
* 
SETER STB IERR
FLGUP LDA IERR      RETURN ERROR CODE.
      JSB RWORD 
      SZA           IF ERROR, DON'T PASS PARAMS.
      JMP GET,I 
* 
      LDA M.PTR,I   RETURN FUNCTION CODE. 
      AND B7
      STA FCN 
      JSB RWORD 
* 
      LDA M.PTR     RETURN TAG TO USER. 
      ADA B6
      STA M.PTR 
      LDA MD10
      STA TEMP
      LDB P.PTR,I 
      JSB INDCK 
* 
MLOOP LDA M.PTR,I   MOVE 10 WORDS.
      STA 1,I 
      ISZ M.PTR 
      INB 
      ISZ TEMP
      JMP MLOOP 
      ISZ P.PTR 
* 
      CLA           IF READ/WRITE, RETURN LEN.
      LDB FCN 
      CPB B2
      LDA M.PTR,I 
      CPB B3
      LDA M.PTR,I 
      JSB RWORD 
* 
      CLA,INA       SET SEQUENCE FLAG.
      STA NEXT
* 
      JMP GET,I     RETURN TO USER. 
* 
CLOLD STA NEXT      RESET SEQ INDICATOR 
      JSB $LIBR 
      NOP 
      STA %MFLG     CLEAR MAILBOX 
      JSB $LIBX 
      DEF *+1 
      DEF SETPT 
      SKP 
* 
* PROCESS "ACEPT" AND "REJCT" CALLS.
* 
REJCT NOP 
      LDA REJCT     STORE RETURN ADDR.
      STA ACEPT 
      LDA BT15      BIT 15 = REJECT 
      JMP ACPT
* 
ACEPT NOP 
      LDA BT14      BIT 14 = ACCEPT 
ACPT  STA AC/RJ 
* 
      LDA ACEPT     POINTER TO USER PARAMS. 
      INA 
      STA P.PTR 
      LDA ACEPT,I   SET RETURN ADDRESS. 
      STA ACEPT 
* 
      CLB 
      STB IERR      CLEAR SLAVE ERROR CODE. 
      STB JERR      CLEAR MASTER ERROR CODE.
* 
      LDA MD46      CHECK CALL SEQUENCE.
      CPB NEXT
      JMP ERR       IMPROPER SEQUENCE.
* 
* CHECK FOR PREAD/PWRIT REQUEST.
* 
      LDB DFBOX     GET FCN CODE FROM PARMB.
      JSB INDCK 
      ADB B2
      LDA 1,I 
      AND B7
      STA FCN 
      LDB B100
      CPA B3
      JMP WRIT      PWRIT REQ: RECEIVE DATA.
      CPA B2
      BLS,SLB       SET FOR SEND REQ & DATA, SKIP 
      JMP NODAT     POPEN/PCONT.
* 
* PREAD/PWRIT: CHECK FOR REJECT.
* 
WRIT  LDA AC/RJ 
      SSA 
      JMP STOP      REJECTED. GO SEND STOP. 
* 
      ADB %LU 
      STB CONWD     SET CONTROL WORD FOR REQ. & DATA
* 
* PREPARE TO SEND OR RECEIVE THE DATA BUFFER. 
* 
      LDA P.PTR     ACCEPTED. GET USER BUFR ADDR. 
      ADA B2
      LDB 0,I 
      JSB INDCK 
      STB BUFAD 
* 
      LDB DFBOX     GET BUFFER LENGTH.
      JSB INDCK 
      ADB D18 
      LDA 1,I 
      STA IDBFL 
      JMP REP 
* 
* SEND STOP FOR REJECTED PREAD/PWRIT REQUEST. 
* 
STOP  JSB EXEC
      DEF *+5 
      DEF ICNTL     CONTROL--NO ABORT.
      DEF %LU 
      DEF DUMMY 
      DEF DUMMY 
      JMP DOWN      DRIVER ERROR DETECTED.
* 
NODAT LDA %LU 
      STA CONWD     SEND REQUEST ONLY 
* 
* BUILD REPLY BUFFER (FOR ALL REQUESTS).
* 
REP   LDB DFBOX 
      JSB INDCK 
      LDA 1,I       STORE STREAM, SUB-STREAM. 
      IOR BTRPY     SET REPLY & FRIENDLY BITS 
      STA REPLY 
      INB 
      LDA 1,I 
      STA REPLY+1 
* 
      LDA AC/RJ 
      IOR FCN       INSERT FUNCTION CODE. 
      STA REPLY+2 
* 
      LDA JERR      STORE ERROR CODE. 
      STA REPLY+3 
* 
      LDA XEQT,I    IF POPEN, STORE ID SEG
      LDB FCN       ADDR IN WORD 6. 
      CPB B1           (USED BY @INTR)
      STA REPLY+5 
* 
      LDB P.PTR,I   MOVE TAG FROM USER CALL 
      JSB INDCK 
      STB TEMP      TO REPLY BUFFER.
* 
      LDA DFTAG 
      STA TEMP1 
* 
      LDB MD10
* 
TLOOP LDA TEMP,I
      STA TEMP1,I 
      ISZ TEMP
      ISZ TEMP1 
      INB,SZB 
      JMP TLOOP 
* 
      STB REPLY+4   CLEAR UNUSED WORDS
      STB REPLY+6 
      STB REPLY+7 
* 
      LDB DFBOX     GET THE ADDRESS OF THE ORIGINAL PARMB.
      JSB INDCK     TRACK DOWN A DIRECT ADDRESS.
      ADB D33       POINT TO THE TIME-TAG WORD. 
      DLD 1,I       GET THE ORIGINAL TIME-TAGS, 
      DST REPLY+33    AND ADD THEM TO THE REPLY.
      LDA CONWD 
      AND B300
      LDB B2        WRITE CODE
      CPA B100      IS IT A SEND REQ & READ DATA? 
      CLB,INB       YES, SET READ CODE
      ADB BT15      ADD THE NO-ABORT FLAG, ALSO.
      STB IRW 
      LDA MD10
      STA RETRY     SET RETRY COUNT 
* 
DVTRY JSB EXEC      TRANSMIT REPLY (AND DATA) 
      DEF *+7 
      DEF IRW 
      DEF CONWD 
      DEF REPLY 
      DEF D35 
      DEF BUFAD 
      DEF IDBFL 
      JMP DOWN      DRIVER ERROR DETECTED.
* 
      SLA,RAR 
      JMP CLSEQ     NO ERRORS.
* 
      SWP 
      AND B40       ISOLATE EQT12 BIT#5 (REMOTE BUSY) 
      CLE,ERB 
      SEZ,SZA,RSS   BUSY-REJECT/REMOTE BUSY OR BOTH?
      JMP DOWN       NEITHER, DRIVER ERROR
      SEZ,RSS       WAS THE REMOTE SYSTEM BUSY? 
      JMP BZWT       YES, WAIT A WHILE
      SZA            NO, SIMULTANEOUS REQUEST?
      JMP DVTRY        YES, LET DVR65 RESOLVE PROBLEM 
      JMP WAIT      DRIVER BUSY 
* 
BZWT  ISZ RETRY     OK TO RETRY?
      RSS           YES 
      JMP DOWN      NO
      LDB MD90      900 MSEC DELAY
      RSS 
WAIT  LDB MD9       90 MSEC DELAY 
      STB OFSET 
* 
      JSB EXEC      INTO TIME LIST & SUSPEND
      DEF *+6 
      DEF D12 
      DEF B0
      DEF B1
      DEF B0
      DEF OFSET 
      JMP DVTRY 
* 
CLSEQ AND B10       CHECK FOR RECEIVED STOP 
      SZA,RSS       SKIP IF STOP RCVD 
      JMP *+3       OTHERWISE RETURN GOOD STATUS
* 
DOWN  LDA MD47      RETURN COMMUNICATIONS ERROR 
ERR   STA IERR
* 
      ISZ P.PTR 
      JSB RWORD 
      SSA           SKIP IF NO ERROR
      JMP ACEPT,I 
* 
      CLA           CLEAR SEQUENCE FLAG.
      STA NEXT
* 
      JSB $LIBR 
B0    NOP 
      CLA           CLEAR MAILBOX FLAG. 
      STA %MFLG 
      JSB $LIBX 
      DEF ACEPT     RETURN TO USER. 
* 
* FINIS CALL. 
* 
FINIS NOP 
      CLA 
      STA IERR
      JSB $LIBR 
      NOP 
      STA %CSID     CLEAR MAILBOX FLAG AND
      STA %MFLG     CURRENT SLAVE ID SEG ADDR.
      JSB $LIBX 
      DEF FINIS,I 
* PASS A-REG CONTENTS TO USER PARAM, BUMP P.PTR.
* 
RWORD NOP 
      LDB P.PTR,I 
      JSB INDCK 
      STA 1,I 
      ISZ P.PTR 
      JMP RWORD,I 
* 
* RESOLVE INDIRECT PARAMETER ADDRESSES. 
* 
INDCK NOP 
      RSS 
      LDB 1,I 
      RBL,CLE,SLB,ERB 
      JMP *-2 
      JMP INDCK,I 
      SKP 
* 
* CONSTANTS AND WORKING STORAGE.
* 
B1    OCT 1 
B2    OCT 2 
B3    OCT 3 
B6    OCT 6 
B7    OCT 7 
B10   OCT 10
B40   OCT 40
B100  OCT 100 
B300  OCT 300 
D12   DEC 12
D18   DEC 18
D33   DEC 33
D35   DEC 35
MD9   DEC -9
MD10  DEC -10 
MD46  DEC -46 
MD47  DEC -47 
MD90  DEC -90 
BT14  OCT 40000 
BT15  OCT 100000
ICNTL OCT 100003
OFSET NOP 
RETRY NOP 
DUMMY NOP           DUMMY PARAMETER FOR DVR65 COMPATABILITY.
CONWD NOP 
BTRPY OCT 44000     BIT 14= REPLY, BIT 11= FRIENDLY 
XSUSP OCT 101730
XEQT  OCT 1717
TEMP  NOP 
TEMP1 NOP 
BUFAD NOP 
NEXT  NOP 
FCN   NOP 
IERR  NOP           ERR CODE RETURNED TO SLAVE. 
JERR  NOP           ERR CODE RETURNED TO CENTRAL. 
P.PTR NOP 
M.PTR NOP 
AC/RJ NOP 
IRW   NOP 
DFBOX DEF %MBOX 
IDBFL NOP 
DFTAG DEF REPLY+8 
REPLY BSS 35
* 
SIZE  EQU * 
* 
      END 
                                                                                                                                                                                                  