ASMB,R,L,C
      HED GET   91700-16136 REV A * (C) HEWLETT-PACKARD CO 1976 
      NAM GET,7 91700-16136 REV A 760330
      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 
      ENT GET,ACEPT,REJCT,FINIS 
      EXT EXEC
      EXT .ENTR 
      EXT D65SV 
      EXT CNUMO 
      EXT #ST04 
      SPC 5 
* 
* GETS
* SOURCE:91700-18136
* BINARY:91700-16136
* SHANE DICKEY
* JULY 30,1974
* 
* MODIFIED FOR DS-1B' BY CHUCK WHELAN  NOV 14,1975
* 
      SPC 5 
* THESE LIBRARY SUBROUTINES ARE USED IN CONJUNCTION 
* WITH THE PROGRAM TO PROGRAM COMMUNICATION MONITOR 
* PTOPM TO AFFECT COMMUNICATION WITH SATELLITE PROGRAMS 
* THEY CONTAIN THE FOUR  SLAVE ENTRY POINTS (GET
* ACCEPT,AND REJECT AND FINIS) THAT MAY BE ENTERED
* BY A PROGRAM IN SLAVE MODE WHICH IS COMMUNICATING 
* WITH A PROGRAM IN MASTER MODE.
* FOR A FURTHER DISCUSSION OF WHAT EACH OF THESE
* ENTRY POINTS DOES SEE THE REMARKS UNDER THE SPECIFIC
* ENTRY POINT BELOW.
* 
* 
* THE SUBROUTINES REQUIRE THAT THE USER ENTER 
* THEM IN A CONTROLLED SEQUENCE. THAT IS TO SAY GET 
* MUST BE ENTERED FIRST AND 
* EITHER ACCEPT OR REJECT MUST BE ENTERED SECOND. THIS SEQUENCE IS
* REPEATED FOR EACH INCOMING MASTER COMMAND 
* IT IS NOT DIFFICULT TO IMAGINE THE CONFUSION
* THAT RESULTS IF AN ACCEPT REQUEST IS ISSUED ON A REQUEST
* NOT YET RECIEVED AND OTHER ANALOGOUS SEQUENCE ERRORS
* ALL OF THIS IS KEPT STRAIGHT BY MANIPULATION OF THE VARIABLE
* "NEXT" WHICH IS INITIALIZED TO ONE AND MAINTAINED BY THE SUBROUTINE 
* THE STATES OF THE VARIABLE ARE AS FOLLOWS:
*        NEXT =1 IMPLIES "GET"      CALL REQUIRED NEXT
*        NEXT=2 IMPLIES ACCEPT/REJ CALL REQUIRED NEXT 
* 
* FINIS MAY BE ISSUED AT ANY TIME 
      HED "GET" PROCESSING               * (C) HEWLETT-PACKARD CO 1976
ICLAS NOP 
IERR  NOP 
IFUN  NOP 
ITAG  NOP 
IL    NOP 
      SPC 5 
GET   NOP 
      SPC 5 
* ENTRY HERE SIGNIFIES THAT THE USER SUBROUTINE HAS COMPLETED THE 
* PROCESSING OF THE LAST CALL AND WISHES TO INTERROGATE HIS I/O 
* CLASS TO DETERMINE IF THERE ARE ANY MORE REQUESTS 
* TO BE PROCESSED. IF MORE REQUESTS HAVE BEEN QUED UP ON THE
* CLASS THE ONE ON THE TOP OF THE STACK WILL BE PASSED TO THE 
* USER.IF THERE ARE NO OUTSTANDING REQUESTS THE USER
* WILL BE I/O SUSPENDED UNTIL A REQUEST IS RECEIVED 
* BY THE MONITOR AND PLACED IN THE USER'S I/O CLASS.
      SPC 5 
* SAVE INPUT PARAMETERS 
      JSB .ENTR     PICK UP THE PARAMETERS PASSED 
      DEF ICLAS 
      LDB DIL       GET SIZE CHECK DEF
      STB CLEAR 
      LDB GET       RETURN ADDR 
      STB EXIT
      LDB IERR      SET UP ERROR PRAM ADDR
      STB ERRM1 
      LDA IL        ADDRESS 
      SZA,RSS       LAST ONE REQ. THERE?
      JMP ERPAR     NO-ERROR
      CLA,INA 
      LDB ERCOM 
      CPB M47       COMM ERROR OCCURRED LAST XACTION? 
      STA NEXT      YES, RESET SEQ INDICATOR
      CPA NEXT      CHECK FOR LEGAL SEQUENCE
      RSS 
      JMP ERSEQ     TAKE ERROR EXIT IF SEQUENCE ERR 
      STA ERCOM 
* 
      LDA ICLAS,I   SET UP THIS USER'S I/O CLASS
      STA MYCLS 
      JSB EXEC      ISSUE GET ON I/O CLASS
      DEF *+5 
      DEF D21 
      DEF MYCLS 
      DEF IRBUF 
      DEF IRBFL 
* 
* PASS THE TAG TO THE USER
* 
      LDA ITAG      SET UP THE TAG FIELD LOCATION 
      STA TAGPR     FOR TRANSFER
* 
*  MOVE TAG FIELD FROM PARMB TO USER AREA 
* 
      LDA M10 
      STA CONTR     10 WORD COUNTER 
      LDA IRBF8 
GET1  LDB 0,I 
      STB TAGPR,I   STORE WORD IN USER AREA 
      INA 
      ISZ TAGPR     BUMP POINTERS 
      ISZ CONTR 
      JMP GET1      ITERATE 
* GET FUNCTION CODE FROM THE PARMB & USE AS A SWITCH
      LDA IRBUF+2   GET FUNCTION CODE 
      AND O7
      STA FCODE     SAVE FUNCTION CODE
* SET FUNCTION CODE SO USER WILL KNOW WHAT HE GOT 
* 
      STA IFUN,I    RETURN RECEIVED FUNCTION CODE 
      LDB IRBUF+18  DATA BUFFER LENGTH
      RAR,SLA       SKIP UNLESS READ OR WRITE 
      STB IL,I      RETURN LENGTH TO CALLER 
* RETURN TO THE USER
      ISZ NEXT      SET SEQ INDICATOR 
* SET IERR FLAG 
      CLB           RETURN "NO ERROR" FLAG
      STB IERR,I    TO THE USER 
      STB IL
      JMP GET,I     RETURN TO USER
      HED "ACCEPT" PROCESSING            * (C) HEWLETT-PACKARD CO 1976
AITAG NOP 
AIERR NOP 
AIBUF NOP 
* 
* ENTRY HERE SIGNIFIES THAT THE LAST REQUEST EXAMINED 
* WAS AN ACCEPTABLE ONE AND THE REQUEST WAS TO BE HONORED 
* 
* THE ACTION TO BE ACCOMPLISHED FOR AN ACCEPT REQUEST 
* VARIES AS TO THE TYPE OF REQUEST WHICH WAS LAST RECEIVED
* ACCEPT REQUESTS ARE PERFORMED FOR ALL FOUR MASTER REQUESTS
* 
EXIT  EQU * 
ACEPT NOP 
      JSB .ENTR     PICK UP CALLING PARAMETERS FROM 
      DEF AITAG     THE USER
* 
      LDB DAIER     GET SIZE CHECK LOCATION 
      STB CLEAR 
* 
*  CHECK FOR ERRORS & MOVE TAG FIELD TO PARMB 
* 
      DLD AITAG 
      JSB PUTAG 
* 
      LDA AIBUF 
      SZA 
      STA DATAD     SET DATA ADDRESS
      CLB 
      STB AIERR     CLEAR FOR PARAM CK NEXT TIME
      LDA FCODE 
      RAR,SLA       SKIP IF OPEN OR CONTROL(DO REQ ONLY)
      RSS 
      JMP ACPFG 
      LDB READZ     CONWD FOR READ (REQ & WRITE DATA) 
      SSA           SKIP IF PREAD 
      LDB WRITZ     CONWD FOR WRITE (REQ & READ DATA) 
      LDA AIBUF 
      SZA,RSS       WAS DATA BUFFER SPECIFIED 
      JMP ERPAR     NO, INSUFFICIENT PARAMS 
* 
ACPFG LDA IRBUF+2   SET ACCEPT FLAG IN PARMB
      IOR BIT14 
* 
*  REMAINDER OF THIS SECTION IS SHARED BY "ACEPT" AND "REJCT" 
* 
DVR   STA IRBUF+2 
      LDA IRBUF 
      ALF,ELA 
      LDA IRBFL     LENGTH=35 WORDS IF FRIENDLY 
      SEZ,RSS       TEST FRIENDLY BIT 
      LDA D25       IT'S UNFRIENDLY 
      STA RQLEN 
      LDA IRBUF 
      IOR BIT14     SET REPLY BIT 
      STA IRBUF 
      LDA IRBUF+24
      AND B77 
      IOR 1         INCLUDE DRIVER REQUEST TYPE 
      STA CONWD     CONFIGURE CALL FOR LU & OP TYPE 
      LDA D2
      CPB WRITZ     IS IT SEND REQ & RCV DATA?
      CLA,INA       YES, OP IS READ 
      STA D2T 
* 
      JSB D65SV     DO CALL TO DRIVER THRU D65SV
      DEF *+7 
      DEF D2T 
      DEF CONWD 
      DEF IRBUF 
      DEF RQLEN 
DATAD DEF DUMMY 
      DEF IRBUF+18
      JMP ERRAC     COMMUNICATION ERROR 
      ALF,ALF 
      ALF,SLA       CHECK FOR STOP RECEIVED 
      JMP ERRAC     IT WAS, DATA WAS REJECTED 
* 
      CLA,INA 
      STA NEXT
      LDA ERRM1,I 
RETRN STA ERCOM     SAVE RETURN STATUS
      CLB 
      JMP EXIT,I    RETURN FROM ACEPT/REJCT TO CALLER 
* 
ERRAC LDA M47       ERROR STATUS= -47 
      STA ERRM1,I 
      JMP RETRN 
      HED "REJECT" PROCESSING            * (C) HEWLETT-PACKARD CO 1976P 
JITAG NOP 
JIERR NOP 
* 
* ENTRY HERE IS SIMILAR TO THAT FOR THE ACCEPT OPTION 
* EXCEPT THE REQUEST HAS BEEN DETERMINED NOT TO BE FROM A VALID 
* SATELLITE AND MUST BE REJECTED. AGAIN THE LOGIC 
* IS BROKEN UP INTO FOUR SUBCLASSES ACCORDING TO THE TYPE 
* OF REQUEST BEING REJECTED 
* 
REJCT NOP 
      JSB .ENTR     PICK UP USER PARAMETERS 
      DEF JITAG 
      LDB DJIER 
      STB CLEAR     SET UP SIZE CHECK LOCATION
      LDB REJCT     PICK UP RETURN ADDR 
      STB EXIT
* 
*  CHECK FOR ERRORS & MOVE TAG FIELD TO PARMB 
* 
      DLD JITAG 
      JSB PUTAG 
* 
      LDA FCODE     PICK UP TYPE OF REQUEST 
      RAR,SLA 
      RSS           SKIP IF READ OR WRITE FUNCTION
      JMP REJ4
* 
      LDA IRBUF+24  GET LU
      IOR BIT6
      STA D2T       SET UP CONTROL BIT
*  SEND ENABLE LISTEN REQUEST TO DRIVER 
      JSB EXEC
      DEF *+3 
      DEF D3
      DEF D2T 
* 
REJ4  LDA IRBUF+2 
      ADA D4        MODIFY CODE 
* SET THE PARMB REJECT FLAG FOR PTOPM 
      IOR MSK5
      CLB           DO WRITE REQUEST ONLY 
      STB JIERR     CLEAR FOR PARAM CK NEXT TIME
      JMP DVR       NOW SEND REPLY & EXIT 
      HED "FINISH" PROCESSING            * (C) HEWLETT-PACKARD CO 1976
FINIS NOP 
* GET NAME OF PROGRAM TO BE FINISHED
* (THE ONE THAT THIS S-R IS APPENDED TO ) 
      LDA B1717,I   GET ID SEGMENT OF CURRENTLY 
      ADA D12       EXECUTING PROGRAM & STEP TO NAME
      LDB A,I       GET FIRST 2 CHARS OF NAME 
      STB IRBUF+5   & MOVE TO PARMB 
* 
      INA 
      LDB A,I       GET 2ND TWO 
      STB IRBUF+6   & SAVE AWAY 
* 
      INA           GET 3RD TWO 
      LDA 0,I 
      AND MSK1      MASK OUT ID SEG STATUS BITS 
      IOR B40 
      STA IRBUF+7   AND SAVE
* 
      CLA,INA 
      STA NEXT      RESET SEQUENCE INDICATOR
* 
* SET FUNCTION CODE REPLY FLAG & ACCEPT/REJECT FLAG 
* 
      LDA HCODE 
      STA IRBUF+2 
* 
* SEND IT TO THE MONITOR
* SO THIS PROGRAM CAN BE REMOVED FROM THE ACTIVE LIST 
* 
      LDA #ST04+1   GET CLASS # FOR PTOPM 
      RAL,CLE,ERA   CLEAR OFF SIGN BIT
      STA PTOP
* 
      JSB EXEC      SEND THE REQUEST BACK TO PTOPM
      DEF *+8 
      DEF D20 
      DEF ZERO
      DEF IRBUF 
      DEF IRBFL 
      DEF DUMMY 
      DEF DUMMY 
      DEF PTOP
      ISZ FINIS 
      JMP FINIS,I   RETURN
      HED UTILITY SUBROUTINES/DATA AREA  * (C) HEWLETT-PACKARD CO 1976
* 
* THIS SUBROUTINE CHECKS FOR CALL ERRORS & RETURNS A MODIFIED 
* PARMB TO THE SATELLITE MASTER PROGRAM 
* 
PUTAG NOP 
      DST TAGPR     STORE ADDRS OF TAG FIELD & ERROR FLAG 
      SZB,RSS       SKIP IF ERROR DEF WAS PASSED
      JMP ERPAR     OTHERWISE ERROR IN CALL 
      LDA NEXT      CHECK SEQUENCE
      CPA D2
      CLA,RSS       OK
      JMP ERSEQ     ERROR, NOT TIME FOR ACEPT/REJCT 
      STA ERRM1,I   CLEAR ERROR FLAG
      LDA M10       BUILD A TEN WORD COUNTER
      STA CONTR 
      LDA IRBF8     BUILD AN ADDRESS IN THE PARMB 
* 
PUT1  LDB TAGPR,I   PUT A WORD IN PARMB 
      STB A,I 
      INA           INCREMENT 
      ISZ TAGPR     POINTERS
      ISZ CONTR     DONE WITH MOVE? 
      JMP PUT1      AND BRANCH BACK IF NOT DONE 
      JMP PUTAG,I   ON COMPLETION RETURN
      SPC 5 
ERSEQ LDA M46       -46 = SEQUENCE ERROR
      RSS 
ERPAR LDA M40       -40 = INSUFFICIENT PARAMETERS 
      STA ERRM1,I   RETURN ERROR TO USER
      CLB           CLEAR PARAM SIZE CHECK WORD 
      STB CLEAR,I 
      JMP EXIT,I    AND RETURN
      SPC 5 
ERR1  NOP 
      STA SSA       SAVE DRIVER STATUS
      LDA B1717,I   GET THE NAME OF THE PROGRAM 
      ADA D12       THIS S/R IS APPENDED TO 
      LDB A,I       FROM THE ID SEGMENT 
      STB COMER+6   & SAVE IN THE OUTPUT
* 
      INA           BUFFER
      LDB A,I 
      STB COMER+7 
* 
      INA 
      LDB A,I 
      LDA B 
      AND MSK1      STRIP OFF STATUS BITS 
      STA COMER+8 
* 
      JSB CNUMO     CONVERT STATUS WORD TO ASCII
      DEF *+3 
      DEF SSA 
      DEF CNBUF     RESULTING ASCII 
* 
      JSB EXEC      OUTPUT DRIVER ERROR 
      DEF *+5       MESSAGE 
      DEF D2
      DEF D1
      DEF COMER 
* 
      DEF COMEL 
      JMP ERR1,I    & RETURN
* 
*  DATA AREA
* 
CONTR NOP 
FCODE NOP 
CONWD NOP 
MYCLS NOP 
NEXT  DEC 1 
ERCOM NOP 
TAGPR DEC 0,0 
ERRM1 EQU TAGPR+1 
A     EQU 0 
B     EQU 1 
M10   DEC -10 
D2T   NOP 
BIT6  OCT 100 
BIT14 OCT 40000 
B40   OCT 40
B77   OCT 77
READZ OCT 10200     REQ & WRITE DATA + Z BIT
WRITZ OCT 10100     REQ & READ DATA + Z BIT 
ZERO  OCT 0 
D1    DEC 1 
D2    DEC 2 
D3    DEC 3 
D4    DEC 4 
D20   DEC 20
D21   DEC 21
D25   DEC 25
IRBFL DEC 35
RQLEN NOP 
MSK1  OCT 177400
B1717 OCT 1717
D12   DEC 12
HCODE OCT 40211 
MSK5  OCT 100000
O7    OCT 7 
PTOP  OCT 100004
M46   DEC -46 
M47   DEC -47 
CLEAR NOP 
M40   DEC -40 
IRBF8 DEF IRBUF+8 
DJIER DEF JIERR 
DAIER DEF AIERR 
DIL   DEF IL
* 
IRBUF EQU * 
*                     BSS 35        THIS BUFFER IS ZEROED 
      UNL 
      REP 35
      NOP 
      LST 
CNBUF BSS 3 
COMER ASC 7,COMM ERROR -
SSA   NOP 
COMEL DEC -16 
DUMMY NOP 
      END 
                        