ASMB,R,L,C
      HED @RQPR-PROCESS CENTRAL'S REQUESTS. *(C) HEWLETT-PACKARD CO. 1976*
      NAM @RQPR,1,2 91705-16107 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 
* 
* @RQPR 
* SOURCE: 91705-18107 REV.A 
* BINARY: 91705-16107 REV.A 
* JIM HARTSELL
* JULY 30, 1974 
* MODIFIED BY: CHW (01-06-76) [DERIVED FROM: 91705-18007 REV.B] 
* 
* CORE RESIDENT RTE-C SATELLITE PROGRAM SCHEDULED BY
* @INTR UPON RECEIPT OF A REQUEST FROM THE CENTRAL STATION. 
* WHEN SCHEDULED, (B) = ADDR OF REQUEST BUFFER ADDRESS. 
* 
      ENT @RQPR 
* 
      EXT EXEC,$LIBR,$LIBX,$MESS,$TYPE
      EXT %LU,%RQUE,%DLER 
      EXT %ACT
      SUP 
A     EQU 0 
B     EQU 1 
* 
* MOVE PARAM VALUES TO INTERNAL BUFFER. 
* 
@RQPR LDA %RQUE     GET ADDR OF PARMB.
      STA RQADR     SAVE IT.
      ADA B5
      LDB DV0 
* 
      JSB MOVE      MOVE PARAM VALUES.
MD11  DEC -11 
* 
      LDA RQADR,I   CHECK FOR REMOTE CONTROL
      CPA B7        OF SATELLITE BY 
      JMP RMCON     CENTRAL OPERATOR. 
* 
      CPA D8
      JMP FRCLD     FORCED-LOAD.
* 
      CPA B5
      JMP DEXEC     DISTRIBUTED EXEC. 
* 
      LDA AS.IL     RETURN "ILRQ".
      LDB AS.RQ 
      JMP SAVE
* FIND TYPE OF EXEC CALL AND GO EXECUTE IT. 
* 
DEXEC LDA V1        REQUEST CODE. 
      IOR SIGN      SET SIGN BIT. 
      STA V1        USE FOR LOCAL EXEC CALLS. 
      ELA,CLE,ERA 
      LDB B2
      CPA B1
      JMP RD/WR     READ FROM I/O DEVICE. 
      LDB B1
      CPA B2
      JMP RD/WR     WRITE ON I/O DEVICE.
      CPA B3
      JMP CNTRL     I/O CONTROL.
      CPA D10 
      JMP SCHED     SCHEDULE PROGRAM. 
      CPA D11 
      JMP TIME      TIME OF DAY.
      CPA D12 
      JMP XTIME     EXECUTION TIME. 
      CPA D13 
      JMP STAT      I/O STATUS. 
* 
* ILLEGAL REQUEST CODE. 
* 
      LDA AS.RQ 
      LDB AS.SP 
      JMP SAVE
* 
* READ OR WRITE SATELLITE I/O DEVICE. 
* 
RD/WR ADB SIGN      ADD NO-ABORT FLAG TO REQUEST CODE.
      STB IRW       SET FOR SEND/RECV DATA. 
      LDB V3        CHECK LENGTH <512 WORDS.
      SZB,RSS       IF DATA LENGTH =0,
      JMP RDWRT       IGNORE THE COMM. LINE DATA CALL.
      ADB MD513 
      SSB,RSS 
      JMP ERLEN 
      ADB D1537 
      SSB 
      JMP ERLEN 
      CPA B2
      JSB DATA      WRITE. GET DATA FROM CENTRAL. 
* 
RDWRT JSB EXEC      READ/WRITE CALL.
      DEF *+7 
      DEF V1        RCODE.
      DEF V2        CONTROL WORD. 
      DEF BUF       BUFFER. 
      DEF V3        BUFFR LENGTH. 
      DEF V4        OPT. PARM 1.
      DEF V5        OPT. PARM 2.
      NOP 
      STA REPLY+5   SAVE A,B IN REPLY.
      STB REPLY+6 
* 
      LDA V1
      ELA,CLE,ERA 
      CPA B1
      JSB DATA      READ. SEND DATA TO CENTRAL. 
* 
      JMP REP       GO SEND REPLY.
* 
* PERFORM I/O CONTROL ON SATELLITE DEVICE.
* 
CNTRL JSB EXEC
      DEF *+4 
      DEF V1        RCODE.
      DEF V2        CONTROL WORD. 
      DEF V3        OPT. PARM.
* 
      NOP 
      JMP SAVE
* 
* SCHEDULE A SATELLITE PROGRAM. 
* 
SCHED LDA D10       FORCE "WITHOUT WAIT". 
      IOR SIGN
      STA V1
* 
      JSB EXEC
      DEF *+8 
      DEF V1        RCODE.
      DEF V2        PROGRAM NAME. 
      DEF V5        OPT. PARAMS.
      DEF V6
      DEF V7
      DEF V8
      DEF V9
* 
      NOP 
      JMP SAVE
* 
* GET SATELLITE REAL-TIME.
* 
TIME  JSB EXEC
      DEF *+3 
      DEF V1        RCODE.
      DEF REPLY+7   TIME ARRAY. 
* 
      NOP 
      JMP SAVE
* 
* SCHEDULE SATELLITE PROGRAM AT SPECIFIED TIME. 
* 
XTIME LDA V2       IF PROG NAME = 0,
      SZA 
      JMP XTIM1 
      LDA AS.SC    "SC02" ERROR.
      LDB AS.02 
      JMP SAVE
* 
XTIM1 LDA V7        FIND WHICH VERSION. 
      SSA,RSS 
      JMP ABS 
* 
      JSB EXEC      INITIAL OFFSET VERSION. 
      DEF *+6 
      DEF V1        RCODE.
      DEF V2        PROGRAM NAME. 
      DEF V5        RESOLUTION CODE.
      DEF V6        EXECUTION MULTIPLE. 
      DEF V7        INITIAL OFFSET. 
* 
      NOP 
      JMP SAVE
* 
ABS   JSB EXEC      ABSOLUTE START TIME VERSION.
      DEF *+9 
      DEF V1        RCODE.
      DEF V2        PROGRAM NAME. 
      DEF V5        RESOLUTION CODE.
      DEF V6        EXECUTION MULTIPLE. 
      DEF V7        HOURS.
      DEF V8        MINUTES.
      DEF V9        SECONDS.
      DEF V10       TENS OF MILLISECONDS. 
* 
      NOP 
      JMP SAVE
* 
* GET I/O STATUS OF SATELLITE I/O DEVICE. 
* 
STAT  JSB EXEC
      DEF *+5 
      DEF V1        RCODE.
      DEF V2        CONTROL WORD. 
      DEF REPLY+7   STATUS WORD 1.
      DEF REPLY+8   STATUS WORD 2.
* 
      NOP 
      JMP SAVE
* 
ERLEN LDA AS.DS     ILLEGAL LENGTH. 
      LDB AS.03 
* 
* SAVE A,B REGISTERS IN REPLY BUFFER. 
* 
SAVE  STA REPLY+5 
      STB REPLY+6 
* 
* COPY HEADER WORDS FROM PARMB TO REPLY.
* 
REP   LDA RQADR     PARMB IS IN @PTPQ MODULE. 
      LDB DFREP 
      JSB MOVE
      DEC -5
* 
* SEND REPLY TO CENTRAL STATION.
* 
SNREP LDA REPLY     SET REPLY AND 
      IOR RPLFL       FRIENDLY BITS(#14,#11). 
      STA REPLY 
      LDA MD11      INITIALIZE THE
      STA RTRY        RETRY COUNTER.
      LDB RQADR     GET ADDRESS OF THE REQUEST BUFFER.
      ADB D33       POINT TO THE TIME-TAG WORD. 
      DLD B,I       GET THE ORIGINAL TIME-TAGS, 
      DST REPLY+33    AND ADD THEM TO THE REPLY.
* 
SEND  JSB EXEC      TRANSMIT REQUEST ONLY.
      DEF *+7 
      DEF IWRT      WRITE--NO ABORT.
      DEF %LU 
      DEF REPLY 
      DEF D35 
      DEF DUMMY 
      DEF DUMMY 
      JMP DOWN      REPORT THE ERROR--IF ANY. 
* 
      DST XSTAT     (DEBUG AID ONLY)
      SLA,RAR 
      JMP REXIT     NO ERRORS.
* 
      SWP 
      AND B40       ISOLATE EQT12 BIT#5 (REMOTE BUSY).
      CLE,ERB       MOVE BUSY-REJECT BIT(EQT5 #1) TO <E>. 
      SEZ,SZA,RSS   BUSY-REJECT/REMOTE BUSY OR BOTH?
      JMP DOWN        NEITHER--DRIVER ERROR!
      SEZ,RSS       WAS THE REMOTE SYSTEM BUSY? 
      JMP BZWT       YES. GO TO WAIT ONE SECOND.
      LDB MD8       80 MSEC DELAY IF DRIVER BUSY
      SZA,RSS       WAS IT SIMULTANEOUS REQUEST?
      JSB WAIT      NO, DRIVER BUSY, WAIT AWHILE
      JMP SEND      RETRY 
* 
BZWT  ISZ RTRY      O.K. TO RE-TRY? 
      RSS            YES. DO SO VIA TIME LIST.
      JMP DOWN       NO. REPORT THE ERROR!
      LDB MD100     1 SEC DELAY 
      JSB WAIT
      JMP SEND      TIME'S UP--TRY AGAIN. 
* 
      SKP 
* 
DOWN  JSB EXEC
      DEF *+5 
      DEF B2
      DEF B1
      DEF DSMES 
      DEF DSLEN 
* 
* EXIT. 
* 
REXIT JSB EXEC      TERMINATE.
      DEF *+2 
      DEF B6
* 
DSMES ASC 11,DS01 RQPR: REPLY ERROR 
* 
* THE CENTRAL OPERATOR HAS SENT AN ASCII RTE-C COMMAND. 
* PROCESS THE COMMAND THRU RTE-C AS IF IT WAS ENTERED 
* FROM THE LOCAL OPERATOR CONSOLE, AND SEND ANY REPLY 
* MESSAGES BACK TO CENTRAL. 
* 
RMCON BSS 0         IF SATELLITE OPERATOR IS
      LDB OPFLG,I   CURRENTLY ENTERING A COMMAND, 
      SZB,RSS       REJECT CENTRAL OPERATOR.
      JMP CLJOB 
* 
      LDA BZYMS 
      LDB DFREP 
      ADB B6
      JSB MOVE
      DEC -6
      LDA D12 
      JMP STLEN 
* 
CLJOB JSB JOB       PROCESS COMMAND.
STLEN STA REPLY+5   STORE +CHAR COUNT IN REPLY. 
      CLA,INA 
      STA REPLY+4   SET REPLY SWITCH. 
      LDA RQADR     RETURN SUB-STREAM.
      INA 
      LDA A,I 
      STA REPLY+1 
      LDA B7        STORE STREAM. 
      STA REPLY 
* 
      JMP SNREP     GO SEND REPLY.
* 
      SKP 
* CENTRAL HAS SENT A FORCED-LOAD OR PLIST REQUEST.
* SCHEDULE APLDR WITH WAIT, THEN SEND REPLY.
* 
FRCLD LDA D9
      IOR SIGN
      STA V5
* 
      JSB EXEC      SCHEDULE APLDR WITH WAIT. 
      DEF *+8 
      DEF V5
      DEF APLDR 
      DEF V0        SCHED PARAMS. 
      DEF V1
      DEF V2
      DEF V3
      DEF V4
* 
      NOP 
      STA REPLY+5   SAVE A,B IN REPLY.
      STB REPLY+6 
* 
      SZA,RSS       IF APLDR NOT DORMANT, 
      JMP STATS 
      LDA MD70      SEND BUSY ERROR CODE. 
      STA REPLY+7 
      JMP SCAN
* 
STATS LDA %DLER     STORE APLDR ERROR NUMBER
      LDB DFREP     IN REPLY BUFFER.
      ADB B7
      JSB MOVE
      DEC -4
* 
* DON'T SEND REPLY IF A PARMB IS PENDING. 
* 
SCAN  LDA %ACT      HEAD OF ACTIVE LIST.
LOOP2 LDA A,I       ADDR OF NEXT ENTRY. 
      SZA,RSS 
      JMP REP       NO PARMB PENDING. 
* 
      STA V10       SAVE ENTRY ADDRESS. 
      INA 
      LDA A,I       FLAG WORD.
      CPA B2
      JMP DELY      ENTRY IS PENDING. 
      LDA V10       NOT PENDING.
      JMP LOOP2     GO TO NEXT ENTRY. 
* 
DELY  LDB MD1       SUSPEND FOR SHORT TIME. 
      JSB WAIT
      JMP SCAN      GO LOOK AGAIN.
* 
WAIT  NOP 
      STB OFSET 
      JSB EXEC
      DEF *+6 
      DEF D12 
      DEF B0
      DEF B1
      DEF B0
      DEF OFSET 
* 
      CPB OFSET 
      JMP WAIT,I
      JMP @RQPR 
* 
OFSET NOP 
* 
      SKP 
* 
* SUBR TO PASS COMMAND TO RTE-C AS IF ENTERED LOCALLY.
* 
JOB   NOP 
      JSB $LIBR     DISABLE INTERRUPTS. 
      NOP 
      LDA JOB 
      LDB HERE
      SZB,RSS 
      JMP THERE 
      CLA 
      JSB $LIBX 
      DEF *+1 
      DEF EXIT
THERE STA RTN 
      LDB 1735B 
      SZB 
      JMP EXIT1 
      STA HERE
      STA JOB 
      LDA RQADR 
      ADA B6
      STA PNTR1 
      LDA TYPE
      SSA,RSS 
      JMP *+3 
      ELA,CLE,ERA 
      LDA A,I 
      ADA MD22
      STA PNTR2 
      LDA V0
      CMA,INA 
      ARS 
      STA CNTR
      JSB XFER
      LDB V0
      JSB $MESS 
      SZA,RSS 
      JMP EXIT
      LDB A,I 
      STB SAVE1 
      ADB MD1 
      BRS 
      STB CNTR
      INA 
      STA PNTR1 
      LDA DFREP 
      ADA B6
      STA PNTR2 
      JSB XFER
      LDA SAVE1 
      CMA,INA 
EXIT  CLB 
      STB HERE
EXIT1 JSB $LIBX 
      DEF RTN 
XFER  NOP 
LOOP1 LDA PNTR1,I 
      STA PNTR2,I 
      ISZ PNTR1 
      ISZ PNTR2 
      ISZ CNTR
      JMP LOOP1 
      JMP XFER,I
RTN   NOP 
HERE  NOP 
TYPE  DEF $TYPE 
* 
* SUBROUTINE TO SEND OR RECEIVE DATA. 
* 
DATA  NOP 
      LDA RQADR     PARMB ADDRESS 
      ADA D33       POINT TO TIME-TAGS
      STA TITAG     SAVE THEIR ADDRESS
      INA            ADDRESS FOR THE
      STA TITAG+1     DATA ONLY DRIVER CALL 
      LDA B300      GET DRIVER MODE-BITS FOR DATA-ONLY. 
      IOR %LU       INCLUDE THE LOGICAL UNIT NUMBER.
      STA CONWD     SAVE THE CONFIGURED CONTROL WORD. 
      LDA V3        GET BUFFER LENGTH.
      STA XBUFL 
      SSA,RSS 
      JMP DATA1 
      CMA,INA       NEGATIVE. MAKE POSITIVE 
      INA           WORD COUNT. 
      ARS 
      STA XBUFL 
* 
DATA1 JSB EXEC
      DEF *+7 
      DEF IRW       READ WRITE--NO ABORT. 
      DEF CONWD 
      DEF BUF 
      DEF XBUFL 
TITAG NOP 
      NOP 
      JMP DATER     DRIVER ERROR--INFORM CENTRAL. 
* 
      SLA 
      JMP DATA,I    RETURN IF NO ERRORS.
* 
DATER LDA AS.DS     ERROR. RETURN "DS02". 
      LDB AS.02 
      JMP SAVE
* 
* SUBROUTINE TO MOVE N WORDS. 
* 
MOVE  NOP 
      DST BUF 
      LDB MOVE,I    GET COUNT 
LOOP  LDA BUF,I 
      STA BUF+1,I 
      ISZ BUF 
      ISZ BUF+1 
      INB,SZB 
      JMP LOOP
      ISZ MOVE
      JMP MOVE,I
      SKP 
* 
* CONSTANTS AND WORKING STORAGE.
* 
DV0   DEF V0
V0    NOP           # PARAMS IN USER CALL.
V1    NOP           REQUEST CODE. 
V2    NOP 
V3    NOP 
V4    NOP 
V5    NOP 
V6    NOP 
V7    NOP 
V8    NOP 
V9    NOP 
V10   NOP 
* 
B0    OCT 0 
B1    OCT 1 
B2    OCT 2 
B3    OCT 3 
B5    OCT 5 
B6    OCT 6 
B7    OCT 7 
B40   OCT 40
B300  OCT 300 
IWRT  OCT 100002
CONWD NOP 
D8    DEC 8 
D9    DEC 9 
D10   DEC 10
D11   DEC 11
DSLEN EQU D11 
D12   DEC 12
D13   DEC 13
D33   DEC 33
D35   DEC 35
D1537 DEC 1537
DUMMY NOP 
MD1   DEC -1
MD8   DEC -8
MD22  DEC -22 
MD70  DEC -70 
MD100 DEC -100
MD513 DEC -513
OPFLG OCT 1735
AS.SC ASC 1,SC
AS.DS ASC 1,DS
AS.02 ASC 1,02
AS.03 ASC 1,03
AS.IL ASC 1,IL
AS.RQ ASC 1,RQ
AS.SP ASC 1,
APLDR ASC 3,APLDR 
BZYMS DEF *+1 
      ASC 6,REMOTE BUSY 
RQADR NOP 
IRW   NOP 
XBUFL NOP 
RPLFL OCT 44000 
SIGN  OCT 100000
RTRY  NOP 
XSTAT OCT 0,0 
DFREP DEF REPLY 
REPLY BSS 35
BUF   BSS 512 
PNTR1 EQU BUF 
PNTR2 EQU BUF+1 
CNTR  EQU BUF+2 
SAVE1 EQU BUF+3 
* 
SIZE  EQU * 
* 
      END @RQPR 
                                                                                                                                                                                                                                          