ASMB,R,L,C
      HED POPEN 91700-16123 REV A * (C) HEWLETT-PACKARD CO. 1976  
      NAM POPEN,7 91700-16123 REV A 760212
      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 POPEN,PREAD,PWRIT,PCONT 
      EXT D65MS,D65CL 
      EXT .ENTR 
* 
      SPC 5 
* 
* POPEN 
* SOURCE: 91700-18023 
* BINARY: 91700-16023 
* SHANE DICKEY
* JULY 30,1974
* 
*  MODIFIED BY CHUCK WHELAN   NOV 1975
* 
      SPC 5 
IPCB  NOP 
IERR  NOP 
INAM  NOP 
ILU   NOP 
ITAG  NOP 
      SPC 5 
POPEN NOP 
* 
* MASTER REQUESTS FOR POPEN COME HERE 
* 
      JSB .ENTR     PICK UP THE USER PARAMETERS 
      DEF IPCB
      LDA POPEN     SET UP ERROR RETURN 
      STA RTRN
* 
      LDA IERR
      STA ERRAD 
      LDA DITAG     SET PARAM CLEAR LOC 
      STA CLEAR 
* PARAMETER CHECK 
      LDA ITAG
      CLB,INB 
      JSB BPARM     SET UP BASIC PARMB
* 
      DLD INAM,I
IRBF5 EQU *+1 
      DST IRBUF+5   MOVE 1ST TWO WORDS OF NAME
      LDA INAM
      ADA D2
      LDA 0,I 
      STA IRBUF+7   STORE 3RD WORD OF NAME
      LDA ITAG      SET UP RETURN TAG FIELD ADDRESS 
      STA TAGAD 
      LDB IPCB
      LDA ILU,I     GET LU #
      ADB D3        SAVE LU IN 4TH WORD OF PCB
      STA B,I 
* 
      LDA IPCB
NODAT CCB           FLAG FOR NO DATA
* 
*  THIS CODE IS USED IN COMMON BY ALL P TO P CALLS
* 
MAIN  STB RCXMT     SAVE OP TYPE
      STA PCBAD     SAVE PCB ADDRESS
      ADA D3
      LDA 0,I       GET LU
      IOR BIT15     SET "NO ABORT" BIT
      STA DREQ      REQ. ONLY 
      IOR B300
      STA DDATA     DATA ONLY 
* THE CALL TO D65MS WILL: 
*  1) GET AN I/O CLASS
*  2) COMPLETE WORD 2 OF PARMB
*  3) SEND REQUEST
*  4) AWAIT REPLY 
*  5) RETURN REPLY
*  6) RETURN CONTROL
      JSB D65MS     ISSUE REQUEST CALL
      DEF *+8 
      DEF D2
      DEF DREQ      WITH SIGN BIT SET 
      DEF IRBUF 
      DEF IRBFL 
      DEF DUMMY 
      DEF DUMMY 
      DEF DUMMY 
* 
      JMP ERR+1     ERROR DETECTED
      LDB IRBUF+3   RETURN ERROR WORD 
      STB ERRAD,I 
      LDA IRBF5 
      STA TAGPR 
* 
      LDA M3
      LDB PCBAD     SET UP COUNT & SOURCE 
      JSB MOVE
* RETURN THE TAG FIELD
      LDA IRBF8 
      STA TAGPR 
      LDA M10       GET COUNT 
      LDB TAGAD 
      JSB MOVE
* 
      CLB 
      STB CLEAR,I   CLR PARAMETER SIZE CHECK LOC
      LDB IRBUF+3 
      SZB           WAS ERROR DETECTED? 
      JMP RTRN,I    YES, IERR SET 
      LDB IRBUF+2 
      SSB,RSS       WAS REQUEST REJECTED? 
      CLB,RSS       NO, OK
      CLB,INB       YES, SET REJECT IERR
      STB ERRAD,I   RETURN IT TO CALLER 
      LDA RCXMT     OP CODE 
      SSA,RSS       SKIP IF NO DATA 
      SZB           SKIP IF NO ERROR
      JMP RTRN,I    OTHERWISE RETURN NOW
* 
*  NOW CALL "D65CL" TO DO DATA TRANSFER TO COMPLETE TRANSACTION 
* 
      JSB D65CL 
      DEF *+7 
      DEF RCXMT 
      DEF DDATA 
BUFF  NOP 
      DEF LEN 
      DEF IRBUF+33  PASS TIME-TAGS TO DRIVER
      DEF IRBUF+34
      JMP ERR+1     ERROR 
      CLB           SET GOOD RETURN 
      JMP RTRN,I
* 
      SPC 5 
BPARM NOP 
* SUBSTREAM,STREAM,FUNCTION CODE AND TAG FIELD INSERTED IN
* PARMB HERE
* THE CLASS IS NOW ALLOCATED AND KNOWN BUILD THE
* PARMB FOR THE SATELLITE 
* ROUTINE ALSO CHECKS FOR SUFFICIENT PARAMETERS IN P TO P CALL
      STB IRBUF+2   SET FUNCTION CODE 
      SZA,RSS 
      JMP ERR2      TOO FEW PARAMETERS IN CALL
      STA TAGPR 
      LDA D4        TO BE BUILT-& STORE THE 
      STA IRBUF     STREAM TYPE 
      LDA M10 
      LDB IRBF8 
      JSB MOVE
      JMP BPARM,I   RETURN
      SPC 5 
ERR   NOP           DECODE ASCII B REGISTER 
      LDA D47       SET INITIAL ERROR CODE
      CPB ASC01     SUSPEND ERROR?
      JMP ERR1      YES 
      CPB ASC05     TIME OUT? 
      JMP ERR1      YES 
      INA           INCREMENT CODE
      CPB ASC02     ABORT ERROR?
      JMP ERR1      YES 
      INA           INCREMENT CODE
ERR1  CMA,INA,RSS   NEGATE THE CODE 
ERR2  LDA M40 
      STA ERRAD,I   RETURN IERR 
      CLB           CLEAR MAX SIZE CHECK
      STB CLEAR,I 
      JMP RTRN,I    & RETURN
      SKP 
* 
*  READ REQUESTS
* 
RIPCB NOP 
RIERR NOP 
RIBUF NOP 
RIL   NOP 
RITAG NOP 
* 
RTRN  EQU * 
PREAD NOP 
      JSB .ENTR     GET USER PARAMETERS 
      DEF RIPCB 
* 
      LDA RIERR 
      STA ERRAD 
      LDA DRITA     GET CLEAR ADDRESS 
      STA CLEAR 
      LDA RITAG     LAST REQ PARAM THERE? 
* 
      LDB D2        SET FUNCTION CODE 
      JSB BPARM 
* 
      LDA RIPCB 
      JSB MVPCB     MOVE PCB TO PARMB 
* 
      LDA RITAG 
      STA TAGAD 
* 
      LDA RIBUF     SAVE BUFFER ADDRESS 
      STA BUFF
      LDA RIL,I     SAVE DATA LENGTH
      STA LEN 
      STA IRBUF+18  IN PARMB TOO
* 
      LDA RIPCB     PCB ADDRESS 
      CLB,INB       SET FOR DATA READ 
      JMP MAIN      NOW DO LINE COMM & RETURN 
      SKP 
* 
*  WRITE REQUESTS 
* 
PIPCB NOP 
PIERR NOP 
PIBUF NOP 
PIL   NOP 
PITAG NOP 
* 
* 
PWRIT NOP           PWRITE REQUESTS HERE
      JSB .ENTR     PICK UP PARAMETERS
      DEF PIPCB 
* 
      LDA PWRIT     SET UP ERROR RETURN 
      STA RTRN
      LDA PIERR 
      STA ERRAD 
      LDA DPITA     SET CLEAR ADDRESS 
      STA CLEAR 
      LDA PITAG 
      LDB D3
      JSB BPARM     BUILD BASIC PARMB 
* 
      LDA PIPCB 
      JSB MVPCB     MOVE PCB TO PARMB 
* 
      LDA PITAG 
      STA TAGAD 
      LDA PIBUF     GET DATA ADDRESS
      STA BUFF
      LDA PIL,I     GET DATA LENGTH 
      STA LEN 
      STA IRBUF+18
* 
      LDA PIPCB 
      LDB D2        SET FOR DATA WRITE
      JMP MAIN      NOW DO LINE COMM & RETURN 
      SKP 
* 
*  CONTROL REQUESTS 
* 
CIPCB NOP 
CIERR NOP 
CITAG NOP 
* 
* 
PCONT NOP 
      JSB .ENTR     GET PARAMETERS
      DEF CIPCB 
* 
      LDA PCONT     SET UP ERROR RETURN 
      STA RTRN
      LDA CIERR 
      STA ERRAD 
      LDA DCITA     SET UP SIZE CHECK WORD
      STA CLEAR 
      LDA CITAG     LAST REQUIRED 
      LDB D4        SET UP FUNCTION CODE
      JSB BPARM     BUILD BASIC PARMB 
* 
      LDA CIPCB 
      JSB MVPCB     MOVE PCB TO PARMB 
* 
      LDA CITAG 
      STA TAGAD 
* 
      LDA CIPCB     PCB ADDRESS 
      JMP NODAT     DO LINE COMM & RETURN 
      SKP 
* 
*  MOVE SUBROUTINES 
* 
MOVE  NOP 
* A CONTAINS -# OF WORDS TO MOVE
* B CONTAINS DESTINATION ADDRESS
* TAGPR CONTAINS SOURCE ADDRESS 
      STA CONTR 
MOVE1 LDA TAGPR,I   PICK UP NEXT WORD 
      STA B,I       AND PUT IT AWAY 
      INB 
      ISZ TAGPR     INCREMENT POINTERS
      ISZ CONTR 
      JMP MOVE1     TILL DONE 
      JMP MOVE,I
* 
*  MOVE PCB INTO PARMB
* 
MVPCB NOP 
      STA TAGPR     POINTER TO PCB
      LDA M3        MOVE 3 WORDS
      LDB IRBF5      INTO PARMB +5,6,7
      JSB MOVE      DO IT 
      JMP MVPCB,I 
      SKP 
* 
*  DATA AREA
* 
IRBUF BSS 35
IRBF8 DEF IRBUF+8 
B     EQU 1 
IRBFL DEC 35
D2    DEC 2 
D3    DEC 3 
D4    DEC 4 
B300  OCT 300 
TAGPR NOP 
M10   DEC -10 
M3    DEC -3
CONTR NOP 
DREQ  NOP 
DDATA NOP 
PCBAD NOP 
ERRAD NOP 
TAGAD NOP 
RCXMT NOP 
LEN   NOP 
ASC01 ASC 1,01      SUSPEND ERROR CODE
ASC02 ASC 1,02      ABORT ERROR CODE
ASC05 ASC 1,05      TIME OUT
BIT15 OCT 100000
DCITA DEF CITAG 
CLEAR NOP 
M40   DEC -40 
DPITA DEF PITAG 
DRITA DEF RITAG 
D47   DEC 47
DITAG DEF ITAG
DUMMY NOP 
      END 
                                                                                                    