ASMB,R,L,C
      HED <DEXEC> REMOTE EXEC-CALL INTERFACE*(C) HEWLETT-PACKARD CO. 1976*
* 
      NAM DEXEC,7 91700-16128 REV.A 760116
      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 
      EXT D65AB 
      EXT EXEC
      EXT D65MS 
      EXT .ENTR 
* 
      ENT DEXEC 
      SUP 
* DEXEC 
* SOURCE:91700-18128
* BINARY:91700-16128
* SHANE DICKEY
* AUGUST 1,1974 
* 
* MODIFIED BY J. P. BAUDOUIN
* MODIFIED 18 JUN 75
* 
* MODIFIED BY: CHW [ 01-16-76 ] 
* 
      SPC 2 
* 
DEXEC NOP 
      LDA DEXEC     GET THE RETURN POINTER. 
      STA EXIT      SAVE FOR '.ENTR' PROCESSING.
      LDA MD10      CLEAR THE PARAMETER AREA
      LDB APRMS       TO FACILITATE CHECKING
      JSB CLERR         FOR MISSING PARAMETERS. 
* 
      JMP GETPR     GO TO OBTAIN PARAMETER ADDRESSES. 
* 
PRAMS REP 10
      NOP 
      SPC 5 
EXIT  NOP 
GETPR JSB .ENTR 
      DEF PRAMS 
* 
      CLA 
      STA ERRFG 
      STA RCXMT 
      LDA MD35
      LDB IRBFA 
      JSB CLERR 
* 
      LDA PRAMS,I 
* 
* IS LU = 0? IF SO LOCAL CENTRAL CALL 
* 
      SZA,RSS       LOCAL EXEC CALL?
      JMP LEXEC     YES 
      AND B77 
      STA IRBUF+24
      LDA IRBFA 
      LDB STREM     SET UP 1ST PARMB WORD-STREAM TYPE 
      STB A,I 
* 
      ADA D5        STEP TO WORD 6 OF PARMB 
      STA AIRBF     UNDER CONSTRUCTION & CONTINUE 
* 
* COMPUTE # OF PARAMETERS 
* 
      CLA 
      LDB APRMS 
      STB PRMSA     GET ADDRESS OF FIRST PASSED PARM
* 
LOOP2 LDB PRMSA,I   IS IT THERE (NONZERO) 
      SZB,RSS 
      JMP OUT       NO-DONE GET OUT 
      INA           YES-INCREMENT PARM COUNT
      ISZ PRMSA     STEP TO NEXT PRAM 
      JMP LOOP2 
* 
OUT   ADA M1        DECREMENT TO ACCOUNT FOR IDEST NOT SHIPPED
      STA PRMS# 
      STA AIRBF,I 
      ISZ AIRBF 
* 
* INSERT ICODE INTO PARMB 
* 
      LDA PRAMS+1,I 
      STA AIRBF,I 
      AND MSK0      STRIP SIGN BIT & SAVE 
      STA ICODE 
      ISZ AIRBF 
* 
* SET UP POINTER TO NEXT PARMB ADDRESS TO FILL
* 
      LDA AIRBF 
      STA PONTR 
* 
* SET UP PARMB BUFFER FILL SUBROUTINE 
* 
      LDA ICODE 
      LDB D1
      ADA M14 
      SSA,RSS 
      JSB ERR 
      LDA ICODE     ZERO? 
      SZA,RSS 
      JSB ERR       YES 
      SSA           NEGATIVE? 
      JSB ERR       YES 
* 
* PICK UP THE PROCESSOR 
* 
      ADA SUBAD 
      LDA A,I 
* 
      JSB A,I 
* 
* DVR65 DRIVER CALL 
* 
      JSB STUP      GO TO SET UP THE MASTER REQUEST.
* 
* THE CALL TO 'D65MS' WILL :
*   1) GET AN I/O CLASS 
*   2) COMPLETE WORD 2 OF PARMB (CLASS) 
*   3) SEND THE REQUEST 
*   4) AWAIT THE REPLY
*   5) RETURN REPLY TO CALLER FOR EXAMINATION 
*   6) RETURN CONTROL TO CALLER 
* 
* 
      JSB D65MS     GO TO THE MASTER-REQUEST INTERFACE. 
      DEF *+8 
      DEF RCXMT     REQUEST CODE
      DEF CONWD     CONTROL WORD (ERROR/Z/MODE/LU #)
      DEF IRBUF     REQUEST BUFFER
      DEF IRBFL     REQUEST LENGTH
      DEF BUFF,I    DATA BUFFER--IF ANY 
      DEF BUFL      DATA LENGTH--IF ANY 
      DEF TEMP      ERROR-REPORT ADDRESS
      JMP MSERR     * ERROR DETECTED BY 'D65MS'--REPORT IT. 
* 
      LDB D1        GET ERROR CODE
      LDA ICODE     AND ICODE FOR INDEX 
      ADA PUBAD     THEN ADD TABLE START
      LDA A,I       GET PROCESSOR ADDRESS 
      JSB A,I       & GO DO IT
* 
      SKP 
* ERRORS SIGNIFIED BY AN ASCII DS,SC,IO (OR) RQ IN THE
* PARMB + 5 WORD ON RETURN
* IF SIGN BIT SET ON ICODE-RETURN TO USER 
* OTHERWISE KICK HIM OFF
* RETURN THE STATUS 
* CHECK FOR SATELLITE DETECTED ERROR
* 
      LDB D2        SET UP ERROR CODE 
      LDA IRBUF+6   SET UP TERMINALS ERROR RESPONSE 
      STA MSG4+1    IN CASE AN ERROR EXISTS 
      LDA IRBUF+5 
      STA MSG4
      CPA DS        IS IT AN ASCII "DS"?
      JSB ERR       YES 
      CPA SC        A "SC"? 
      JSB ERR       YES 
      CPA IO        AN "IO" 
      JSB ERR       YES 
      CPA RQ        AN"RQ"? 
      JSB ERR       YES 
      CPA IL        AN "IL" 
      JSB ERR       YES 
* 
* WELL WE MADE IT 
* CLEAR THE ENTRY ARRAY, AFTER SETTING CORRECT EXIT POINT.
* 
      LDA PRAMS+1,I GET THE USER'S REQUEST CODE.
      SSA           IF THE SIGN-BIT WAS SET, PREPARE
      ISZ EXIT        FOR RETURN TO USER AT P+2.
      LDA MD10
      LDB APRMS 
      JSB CLERR 
* 
* RETURN
* 
      LDA IRBUF+5 
      LDB IRBUF+6 
      JMP EXIT,I
      HED PARMB CONSTRUCTION ARRAY * (C) HEWLETT-PACKARD CO. 1976 * 
ICOD1 NOP 
* 
* READ S/R
* 
      CLA,INA 
      STA RCXMT 
      JSB FILL
      JMP ICOD1,I 
      SPC 1 
ICOD2 NOP 
* 
* WRITE S/R 
* 
      LDA D2
      STA RCXMT 
      JSB FILL
      JMP ICOD2,I 
      SPC 1 
ICOD3 NOP 
* 
* CONTROL CALL
* PICK UP THE CONTROL WORD
* 
      LDA PRAMS+2,I 
      STA PONTR,I 
* 
      ISZ PONTR     INCREMENT STORAGE ADDRESS 
      LDA PRAMS+3,I OPTIONAL PARAMETER PRESENT? 
      SZA,RSS 
      JMP ICOD3,I   NO EXIT 
      STA PONTR,I   AND PUT IN PARMB
      JMP ICOD3,I 
      SPC 1 
ICD10 NOP 
* 
* SCHEDULE CALL 
* 
      JSB NAME
* 
* NOW SET UP TO MOVE OPTIONAL PARAMETERS IN 
* 
      LDA D5        BUILD LOOP COUNTER
      CMA,INA 
      STA CONTR 
      LDA APRMS 
      ADA D3        STEP TO DEF TO 1ST ONE
LOOP3 LDB A,I       GET IT'S ADDRESS
      SZB,RSS       IS IT THERE?
      JMP ICD10,I   NO-EXIT 
      LDB B,I 
      STB PONTR,I 
      ISZ PONTR 
      INA 
      ISZ CONTR 
      JMP LOOP3 
      JMP ICD10,I 
ICD11 NOP 
* 
* TIME-NO PARAMETERS
* 
      LDA D2
      STA IRBUF+5 
      JMP ICD11,I 
      SPC 5 
ICD12 NOP 
* 
      JSB NAME      GET PROGRAM NAME
      LDA APRMS     LOOK AT "IOFST" PRAM.IF - THIS IS 
      ADA D5        INITIAL OFFSET VERSION OF CALL
      LDA A,I 
      LDA A,I 
* 
      SSA,RSS       WHICH ONE IS IT?
      JMP ABSRT     ABSOLUTE START TIME!
      LDA D3        INITIAL OFFSET! 
      CMA,INA 
      STA CONTR     SET UP COUNTER
      JMP STRT4     AND GO PROCESS
ABSRT LDA D6        SET UP COUNTER
      CMA,INA 
      STA CONTR 
* 
STRT4 LDA APRMS 
      ADA D3
LOOP4 LDB A,I       GET ADDRESS OF DEF THEN DEF 
      LDB B,I       THE PARAMETER IT'SELF 
      STB PONTR,I   & PUT IN PARMB
      ISZ PONTR 
      INA           INCREMENT POINTERS
      ISZ CONTR     & IF NOT DONE DO IT AGAIN 
      JMP LOOP4 
      JMP ICD12,I 
      SPC 1 
ICD13 NOP 
* 
* STATUS-PICK UP CONTROL WORD 
* 
      LDA PRAMS+2,I 
      STA PONTR,I 
      JMP ICD13,I 
      SKP 
*  LOCAL EXEC-CALL EXECUTION ARRAY
* 
EXSR  NOP 
      JSB EXEC
DEF   NOP 
DEFS  REP 8 
      NOP 
      SEZ           ANY EXEC-DETECTED ERRORS? 
      JMP MSERR       YES. GO TO PROCESS. 
      DST SAVEA     SAVE <A&B> FOR RETURN TO USER.
      LDA PRAMS+1,I GET THE USER'S REQUEST CODE.
      SSA           IF THE SIGN-BIT WAS SET,
      ISZ EXIT        SET FOR RETURN TO USER AT P+2.
      JMP EXSR,I     RETURN TO THE CALLER.
* 
MSERR DST MSG4      SAVE THE ASCII ERROR CODES. 
      LDB D2        SET FLAG TO RETURN THE ERROR CODE.
      RSS           BYPASS THE 'ERR' ENTRY POINT. 
* 
ERR   NOP 
      STB SAVEB     SAVE ERROR CODE 
      LDA PRAMS+1,I RETURN CONTROL TO USER IF 
      SSA           ICODE SIGN BIT SET
      JMP ERR1
* 
* OUTPUT MESSAGE TO CONSOLE AND TERMINATE USER
* 1 IMPLIES ICODE ERROR-RQ ERROR
* 2 IMPLIES SATELLITE RETURNED ERROR
* 3 IMPLIES DATA LENGTH ERROR 
* GET PROGRAM NAME
* 
      LDB MESGA 
      LDA SAVEB 
      ADA M1
      ADA A 
      ADB A 
* 
* CALCULATE ABORTION ADDRESS
* 
      LDA PRMS#     GET ADDRESS OF USERS JSB
      ADA D3
      CMA,INA 
      ADA EXIT
* 
      SKP 
* OUTPUT ERROR MESSAGE & TERMINATE
* 
      JSB D65AB 
* 
* A REGISTER = JSB ADDRESS
* B REGISTER = ADDRESS OF MESSAGE BUFFER
* 
ERR1  LDA MESGA 
      LDB SAVEB 
      ADB M1
      ADB B 
      ADA B 
      DLD A,I 
      JMP EXIT,I
* 
      SPC 2 
* 
* BUILD PARAMETERS FOR 'D65MS'
* 
STUP  NOP           MASTER CALL SETUP S/R 
      LDA D2        PREPARE FOR REQUEST-ONLY. 
      LDB RCXMT     IF THIS IS A REQUEST & DATA CALL, 
      SZB,RSS         THEN SKIP; ELSE,
      STA RCXMT         SET REQUEST CODE FOR WRITE. 
      BLF           POSITION DRIVER MODE
      RBL,RBL         TO <B#6,#7>.
      LDA IRBUF+24  GET THE LOGICAL UNIT NUMBER.
      IOR MSK2      INCLUDE THE ERROR-RETURN FLAG,
      IOR B           AND THE DRIVER MODE.
      SZB           IF THIS IS A REQUEST & DATA CALL, 
      IOR ZBIT       THEN SET THE DOUBLE BUFFER BIT(#12). 
      STA CONWD     SAVE THE CONFIGURED CONTROL WORD. 
      LDA PRMS#     GET ADDRESS OF USER'S JSB 
      ADA D3
      CMA,INA 
      ADA EXIT
      STA TEMP        AND SAVE AS ERROR-REPORT ADDRESS. 
      JMP STUP,I    RETURN TO MAKE THE CALL TO D65MS. 
* 
      SKP 
CLERR NOP 
      STA CONTR     SAVE LOOP COUNTER 
      STB PRMSA     SAVE DESTINATION POINTER
      CLB 
LOOP6 STB PRMSA,I   CLEAR A WORD
      ISZ PRMSA 
      ISZ CONTR 
      JMP LOOP6     CONTINUE TIL DONE 
      JMP CLERR,I   AND RETURN
      SPC 1 
LEXEC LDA MD8 
      LDB DEFA
      STB ADEF
      JSB CLERR 
* 
* DON'T LET LOCAL SMESG THROUGH 
* 
      LDB D1
      LDA PRAMS+1,I 
      AND MSK0
      CPA D14 
      JSB ERR 
      IOR MSK2
      STA RCODE 
* 
      LDA APRMS 
      ADA D1
      STA PRMSA 
* 
      LDA MD8 
      STA CONTR 
      LDA DEFRC 
      CLB,RSS 
* 
LOOP7 LDA PRMSA,I 
      SZA,RSS       DONE IF PARAMETER IS ZERO 
      JMP DONE7 
      STA ADEF,I
      INB 
      ISZ PRMSA 
      ISZ ADEF
      ISZ CONTR 
      JMP LOOP7 
* 
DONE7 INB 
      ADB DEFB
      STB DEF 
      LDA ERRIN     GET ERROR-DETECTED INSTRUCTION(CCE,RSS).
      STA B,I       STORE IN ERROR RETURN LOCATION. 
      INB           POINT TO NORMAL RETURN LOCATION.
      LDA ERRIN+1   GET NORMAL-RETURN INSTRUCTION (CLE).
      STA B,I       STORE IN NORMAL-RETURN LOCATION.
* 
      JSB EXSR
* 
      DLD SAVEA     GET <A&B> FOR RETURN TO USER. 
      JMP EXIT,I
ERRIN CCE,RSS 
      CLE 
DEFRC DEF RCODE 
RCODE NOP 
* 
FILL  NOP 
      LDA APRMS     GET DATA BUFFER ADDRESS 
      ADA D3
      LDB A,I 
      STB BUFF
      INA 
      LDB A,I       GET DATA BUFFER LENGTH
      LDB B,I 
      STB IRBUF+8 
      SSB           CHARACTERS? 
      JMP CHAR2     YES 
      STB IRBUF+11  NO WORDS SAVE # TO USE AT OTHER 
      STB BUFF+1    END 
      JMP FILL3     THEN CONTINUE 
* 
CHAR2 CMB,INB       CONVERT TO + CHARS
      SLB           & ROUND UP
      INB           THEN CONVERT TO WORDS 
      BRS 
      STB IRBUF+11
      STB BUFF+1
FILL3 LDA B 
      LDB D3
      SZA,RSS 
      JSB ERR 
      ADA MD513 
      SSA,RSS 
      JSB ERR 
* 
* INSERT CONWD & OPTIONAL WORDS 
* (IF PRESENT) IN PARMB 
* 
      LDA PRAMS+2,I 
      STA PONTR,I 
      ISZ PONTR 
      ISZ PONTR 
* 
      LDA PRAMS+5 
      SZA,RSS 
      JMP FILL,I
      LDA A,I 
      STA PONTR,I 
      ISZ PONTR 
* 
      LDA PRAMS+6 
      SZA,RSS 
      JMP FILL,I
      LDA A,I 
      STA PONTR,I 
      ISZ PONTR 
      JMP FILL,I
      SPC 5 
NAME  NOP 
      LDA PRAMS+2 
      LDB A,I       GET 1ST 2 CHARS OF PROG 
      STB PONTR,I   NAME & PUT IN PARMB 
      ISZ PONTR 
      INA           STEP TO NEXT TWO
* 
      LDB A,I 
      STB PONTR,I   AND DO IT AGAIN 
      ISZ PONTR 
      INA 
* 
      LDB A,I       THEN AGAIN
      STB PONTR,I 
      ISZ PONTR 
      JMP NAME,I
      SPC 5 
IPODX NOP 
* 
* DUMMY S/R USED FOR NULL POSTPROCESSES 
* 
      JMP IPODX,I 
      SPC 5 
IPD11 NOP 
* 
* TIME RETURN TIME VALUES 
* 
      LDA IRBFA 
      ADA D7
      STA AIRBF     GET ADDRESS OF RETURNED TIME
* 
      LDA D5
      CMA,INA       BUILD COUNTER 
      STA CONTR 
* 
      LDA APRMS     GET DEF TO BSS
      ADA D2
      LDA A,I 
* 
LOOP5 LDB AIRBF,I 
      STB A,I 
      INA 
      ISZ AIRBF     GET A WORD & RETURN IT
      ISZ CONTR     INCREMENT POINTERS
      JMP LOOP5     & DO IT AGAIN IF NEEDED 
      JMP IPD11,I 
      SPC 5 
IPD13 NOP 
* 
* STATUS RETURN TWO STATUS WORDS
* 
      LDA APRMS 
      ADA D3
      LDA A,I       GET 1ST STATUS WORD 
      LDB IRBUF+7 
      STB A,I       AND RETURN IT TO USER 
* 
      LDA APRMS 
      ADA D4        GET 2ND WORD
      LDB A,I 
      SZB,RSS 
      JMP IPD13,I 
      LDB IRBUF+8 
      LDA A,I 
      STB A,I 
* 
      JMP IPD13,I 
      SPC 5 
      HED CONSTANTS AND STORAGE * (C) HEWLETT-PACKARD CO. 1976 *
SUBAD DEF SUBS-1
SUBS  DEF ICOD1 
      DEF ICOD2 
      DEF ICOD3 
      DEF ERR 
      DEF ERR 
      DEF ERR 
      DEF ERR 
      DEF ERR 
      DEF ERR 
      DEF ICD10 
      DEF ICD11 
      DEF ICD12 
      DEF ICD13 
* 
* 
PUBAD DEF PSUBS-1 
PSUBS DEF IPODX 
      DEF IPODX 
      DEF IPODX 
      DEF ERR 
      DEF ERR 
      DEF ERR 
      DEF ERR 
      DEF ERR 
      DEF ERR 
      DEF IPODX 
      DEF IPD11     TIME
      DEF IPODX 
      DEF IPD13     STATUS
* 
* 
B77   OCT 77
D1    DEC 1 
D2    DEC 2 
D3    DEC 3 
M1    DEC -1
A     EQU 0 
B     EQU 1 
PRMSA NOP 
APRMS DEF PRAMS 
MD35  DEC -35 
IRBFA DEF IRBUF 
IRBUF BSS 35
CONTR NOP 
AIRBF NOP 
STREM DEC 5 
D6    DEC 6 
D7    DEC 7 
PONTR NOP 
ICODE NOP 
D4    DEC 4 
D5    DEC 5 
IRBFL DEC 35
* 
      SKP 
* THE FOLLOWING TWO STATEMENTS ARE TOGETHER!! 
* 
BUFF  DEF TEMP
      NOP 
BUFL  EQU BUFF+1
DEFA  DEF DEFS
DEFB  DEF DEF 
MD8   DEC -8
M14   DEC -14 
MD513 DEC -513
MD10  DEC -10 
D14   DEC 14
RCXMT NOP 
CONWD NOP 
ZBIT  OCT 10000 
DS    ASC 1,DS
SC    ASC 1,SC
IO    ASC 1,IO
RQ    ASC 1,RQ
IL    ASC 1,IL
SAVEA NOP 
SAVEB NOP 
ERRFG NOP 
MESGA DEF MSG1
* 
* DO NOT REARRANGE THE FOLLOWING MESSAGE BUFFERS
* 
MSG1  ASC 2,RQ
MSG4  ASC 2,
ADEF  NOP 
MSK0  OCT 77777 
TEMP  NOP 
PRMS# NOP 
MSK2  OCT 100000
      END 
                                                                                                                                                                  