ASMB,L,R,C
      HED UPLIN: 91740-16002 REV 1840 (C) HEWLETT-PACKARD CO. 1978
      NAM UPLIN,17,3 91740-16002 REV 1840 780726
      SPC 2 
******************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1977. ALL RIGHTS      *
*  * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,       *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF THE HEWLETT-PACKARD COMPANY.   *
******************************************************************
      SPC 4 
****************************************************************
* 
*     UPLIN 
* 
*     SOURCE PART # 91740-18002 
* 
*     REL PART #    91740-16002 
* 
*     WRITTEN BY:   CHUCK WHELAN
* 
*     DATE WRITTEN  DEC 1976
* 
*     MODIFIED FOR HP3000 BY DAVE TRIBBY, MARCH 1977
* 
*************************************************************** 
      SPC 3 
* 
* 
*     EXTERNAL REFERENCES 
      EXT EXEC,$LIBR,$LIBX
      EXT MESSS,$OPSY 
      EXT #RSAX,#RPCV 
      EXT RNRQ,#BUSY,#QRN,#LDEF 
      EXT #GRPM,#LU3K,#QXCL,#TST
      SPC 3 
*  UPLIN FOR DS/1000   UPLIN IS SCHEDULED EVERY 5 SECONDS TO PERFORM
*  THE FOLLOWING FUNCTIONS: 
*    1.  CHECKS/WAITS FOR SYSTEM QUIESCENCE.  PRINTS OPERATOR MESSAGE 
*        WHEN QUIESCENCE IS ACHIEVED. 
*    2.  UPDATES SLAVE "TCB" TIMEOUT VALUES, AND IF A TRANSACTION HAS 
*        TIMED OUT, THE TCB IS PURGED, AND IF THE MONITOR ABORT 
*        FLAG IS SET, THE MONITOR IS ABORTED. 
*    3.  AFTER PROCESSING EACH SLAVE TCB LIST, UPLIN CHECKS TO SEE IF 
*        THE CORRESPONDING MONITOR IS DORMANT, AND IF SO, RESCHEDULES IT. 
*    4.  UPDATES MASTER TCB TIMEOUT VALUES, AND IF A MASTER TCB TIMES-OUT,
*        IT CHECKS THE PROGRAM STATUS.  IF DORMANT OR THE "BAD
*        CONTENTS" FLAG IN THE TCB IS SET, THE MASTER CLASS NUMBER
*        AND THE TCB ARE CLEARED.  IF IN A "WAIT" STATE, IT WRITES
*        A NULL REQUEST TO THE MASTER REQUESTERS CLASS. 
*    5.  SCANS THE HP3000 PROCESS NUMBER LIST AND SENDS A "KILL"
*        REQUEST FOR ABANDONED PROCESS NUMBERS. 
*    6.  RESCHEDULES "GRPM","RTRY", OR "QCLM" IF THEY ARE DORMANT.
*    7.  CHECKS FOR ANY DOWNED COMMUNICATIONS EQTS, AND DOES "ENABLE
*        LISTEN" REQUESTS TO ANY FOUND. 
* 
* 
* 
EQTA  EQU 1650B     FWA OF EQUIPMENT TABLE
DRT   EQU 1652B     FWA OF DEVICE REFERENCE TABLE 
LUMAX EQU 1653B     NO OF LOGICAL UNITS (IN DRT)
      SKP 
UPLIN EQU * 
* 
*     CHECK FOR SYSTEM QUIESCENCE 
* 
      LDA GLCW      GET GLOBAL RN LOCK/CLEAR COMMAND
      RAL,ARS       SET THE NO-WAIT BIT 
QRNWT STA RNCW      SAVE CONFIGURED CONTROL WORD
* 
      JSB RNRQ      GO TO RTE TO REQUEST
      DEF *+4        RESOURCE NUMBER STATUS,
      DEF RNCW        OR TO AWAIT CLEARING OF THE RN. 
      DEF #QRN      ADDR OF QUIESCENT RN
      DEF TEMP      RETURN STATUS 
      JMP SLVTS     IGNORE ERRORS 
* 
      LDA RNCW      IF PROGRAM HAS BEEN AWAITING
      CPA GLCW       THE CLEARING OF #QRN, THEN 
      JMP SLVTS      BYPASS THE MESSAGE CODE. 
* 
      LDA TEMP      QRN STATUS
      LDB #BUSY     ACTIVE TCB COUNT
      CPA K7        IF QRN WAS LOCKED GLOBALLY, 
      SZB            AND NO ACTIVE TCB'S EXIST, SKIP
      JMP SLVTS      ELSE BYPASS QUIESCENT CODE.
* 
      JSB EXEC      INFORM
      DEF *+5        THE
      DEF K2          OPERATOR
      DEF K1           THAT THE 
      DEF QMES          SYSTEM
      DEF K10            IS QUIESCENT.
* 
      LDA GLCW      RETURN TO IMMOBILIZE UPLIN
      JMP QRNWT 
      SKP 
* 
*     THIS SECTION PROCESSES SLAVE TRANSACTIONS & MONITORS
* 
SLVTS LDA $OPSY 
      RAR,SLA       IS THIS AN RTE-III OR RTE-IV? 
RSSI  RSS           YES 
      JMP SLVT2     NO
      LDB RSSI      GET "RSS" 
      STB MODI1     MODIFY TO DO CROSS-MAP STORE
      STB MODI2     MODIFY TO DO CROSS-MAP LOAD 
* 
SLVT2 LDA K2
      ADA #LDEF 
      STA LPNT      PNTR TO SLAVE LIST HEADER ADDRS IN RES
      CLA 
      STA STREM     SET STREAM #
CKLST LDB LPNT,I    GET ADDRESS OF HEADER 
      INB 
      STB MCLSA     SAVE ADDR OF MONITOR CLASS #
      INB 
      STB MSEGA     ADDR OF MONITOR'S ID SEGMENT ADDR 
      LDB 1,I       GET ID SEG ADDR 
      SZB,RSS       DOES MONITOR EXIST? 
      JMP NXLST     NO
      LDB LPNT,I
NXTCB STB LSTAD     SAVE ADDR OF ADDR OF NEXT TCB 
* 
*     ENTER HERE TO CHECK EACH SLAVE TCB
* 
CKTCB LDB LSTAD     PICK UP ADDR OF ADDR OF TCB 
      JSB LODWD     (CROSS)LOAD ADDR OF TCB 
      SZA,RSS       IS IT THERE?
      JMP CKMON     NO, END OF THIS LIST
      JSB TSTCB     BUMP TIMER IN TCB 
      JMP NXTCB     DIDN'T TIMEOUT, CHECK NEXT TCB
      SKP 
* 
*     SLAVE TRANSACTION HAS TIMED OUT 
* 
      ADB K2        COMPUTE ADDR OF SEQ # 
      JSB LODWD     (CROSS)LOAD 1ST TIME TAG WORD 
      STA SEQ#
* 
      JSB #RSAX     DELETE SLAVE TCB
      DEF *+4 
      DEF K7
      DEF SEQ#      SLAVE SEQ # 
      DEF STREM     STREAM
* 
      SSB           SKIP IF ENTRY DELETED 
      JMP NXLST     WHOOPS! IGNORE THIS LIST
* 
*     CHECK FOR HP3000 TST CLEANUP
      LDA #LU3K     IF NO REMOTE
      SZA,RSS        HP3000,
      JMP CONT        SKIP THIS SECTION 
      LDX #TST+1    X-REG = NUMBER OF TST ENTRIES 
      LDB #TST      B-REG = POINTER INTO TST
LOOP  JSB LODWD     (CROSS)LOAD 1ST TST WORD
      STB WRD1
      INB 
      SZA,RSS       IF ZERO,
      JMP BUMP       LOOK AT NEXT ENTRY.
      JSB LODWD     (CROSS)LOAD 2ND TST WORD
      CPA SEQ#      SEQUENCE NUMBER?
      JMP FOUND       YES--DONE LOOKING.
BUMP  ADB K13       POINT TO NEXT TST ENTRY 
      DSX           DECREMENT COUNTER 
      JMP LOOP      IF NOT DONE, CHECK NEXT ENTRY 
      JMP CONT      LOOP FELL THROUGH--DONE 
* 
*     ACTIVITY WAS INITIATED FROM HP3000
FOUND INB           GET TST WORD 3
      JSB LODWD      (HOLDING CLASS)
      CCE,SZA,RSS   ZERO? 
      JMP RPC        YES--PROCESS "RPCNV" 
      RAL,ERA        NO--SET BIT 15 TO
      STA PRAM1          DEALLOCATE CLASS 
      JSB DEFLU          AND FLUSH BUFFER.
      CLA           (CROSS) STORE ZERO
      LDB WRD1       IN TST WORD 1
      JSB STRWD       FOR RELEASE 
      JMP CONT      CONTINUE
* 
RPC   JSB EXEC      TRY TO SCHEDULE RPCNV 
      DEF *+4        WITH "REJECT" PASSWORD 
      DEF K10N        IN CASE IT IS WAITING 
      DEF RPCNM        TO BE RESCHEDULED FOR
      DEF SEQ#          NEXT CONTINUATION REPLY.
      NOP 
* 
      SZA,RSS       WAS RPCNV DORMANT?
      JMP CONT      YES, CONTINUE (RPCNV WILL RELEASE TST)
* 
      CLA           NO, RPCNV NEEDS TO SEND A 
      STA TEMP       REJECT REPLY TO THE WAITING 3000.
* 
      JSB EXEC      CLASS WRITE A 2-WORD DUMMY
      DEF *+8        REPLY TO RPCNV 
      DEF K20N
      DEF ZBIT        WORD 1 = 0
      DEF DUMMY       WORD2 = SEQ#
      DEF K0          (RPCNV WILL RELEASE TST ENTRY)
      DEF TEMP
      DEF K2
      DEF #RPCV 
      NOP 
* 
CONT  EQU *         CONTINUE
* 
*      CHECK MONITOR ABORT FLAG 
      LDA MSEGA,I 
      SSA,RSS       SKIP IF SET 
      JMP CKTCB     NOT SET, DON'T ABORT IT, CHECK NEXT TCB 
* 
*     ABORT THE MONITOR BY GENERATING AN "OF,(NAME),1" MESSAGE
* 
      RAL,CLE,ERA   ISOLATE ID SEG ADDRESS
      ADA K12       ADDR OF NAME
      LDB FLDAD     ADDRESS OF NAME FIELD 
      MVW K2        MOVE 1ST 4 CHARS
      LDA 0,I       GET 5TH 
      AND B1774     CLEAR RHW 
      IOR COMMA     INCLUDE A COMMA 
      STA MSNAM+2 
* 
      JSB MESSS     CALL RTE MESSAGE PROCESSOR
      DEF *+3 
      DEF OFMES     "OFF,XXXXX,1" 
      DEF K12 
      SZA,RSS       IF MSG. RETURNED, SKIP TO RESTORE CMD.
      JMP UPMON     NOW GO & RESCHEDULE IT
* 
      DLD "OFF" 
      DST OFMES     RESTORE "OFF,"
      LDA "1@"
      STA MSNAM+3   RESTORE ABORT OPTION PARAMETER (1). 
      JMP UPMON     GO TO RE-SCHEDULE THE MONITOR.
* 
"OFF" ASC 2,OFF,
"1@"  ASC 1,1 
* 
*     THIS CODE CHECKS MONITOR STATUS TO SEE IF IT HAS ABORTED
CKMON LDA MSEGA,I   MONITORS ID SEGMENT ADDRESS 
      RAL,CLE,ERA   CLEAR OFF SIGN BIT
      SZA,RSS       ADDR SPECIFIED? 
      JMP NXLST     NO
      ADA K12       POINT TO NAME 
      LDB FLDAD 
      MVW K3        MOVE NAME 
      LDA 0,I       GET STATUS BITS 
      AND K15       ISOLATE STATUS BITS 
      SZA           SKIP IF DORMANT 
      JMP NXLST     ELSE MONITOR IS STILL GOING 
* 
*     RESCHEDULE MONITOR
UPMON LDA MCLSA,I   GET CLASS NUMBER OF MONITOR 
      RAL,CLE,ERA   CLEAR SIGN BIT
      STA PRAM1 
* 
      JSB EXEC      SCHEDULE MONITOR, PASS CLASS NUMBER 
      DEF *+4 
      DEF K10N
FLDAD DEF MSNAM     ADDR OF MONITOR NAME
      DEF PRAM1 
      NOP 
* 
*     DONE WITH THIS SLAVE LIST, START ON NEXT
NXLST ISZ LPNT      POINT TO NEXT LIST HEADER ADDRESS 
      ISZ STREM     BUMP STREAM NUMBER
      LDA STREM 
      CPA K11       DONE? 
      RSS           YES 
      JMP CKLST     PROCESS NEXT LIST 
* 
*     DONE WITH SLAVE MONITOR/TRANSACTION PROCESSING
      SKP 
* 
*     PROCESS MASTER TCBS 
* 
      LDB #LDEF     ADDR OF LIST HEADER ADDRS 
      INB 
      LDB 1,I       GET ADDR OF MASTER HEADER 
CKMST STB LSTAD     SAVE ADDR OF NEXT TCB'S ADDR
CKMS2 LDB LSTAD     PICK-UP ADDR OF ADDR OF NEXT TCB
      JSB LODWD     (CROSS)LOAD ADDR OF NEXT TCB
      SZA,RSS 
      JMP PNLST     NO MORE MASTER TCBS TO PROCESS
* 
      JSB TSTCB     UPDATE THIS TCB'S TIME
      JMP CKMST     DIDN'T TIME-OUT, DO NEXT TCB
* 
*     MASTER TCB HAS TIMED OUT
* 
      ADB K3        POINT TO 4TH WORD OF MASTER TCB 
      JSB LODWD     (CROSS)LOAD CLASS NUMBER
      IOR BIT15     CLASS # WITH "NO WAIT" BIT SET
      STA PRAM1 
* 
      INB           POINT TO 5TH WORD OF MASTER TCB 
      JSB LODWD     (CROSS)LOAD ID SEGMENT ADDRESS
      RAL,CLE,SLA,ERA   CLEAR OFF SIGN BIT
      JMP CREPT     "BAD CONTENTS", CLR CLASS & TCB 
      ADA K15       POINT TO STATUS 
      LDA 0,I 
      AND K15       ISOLATE STATUS
      SZA,RSS       DORMANT?
      JMP CREPT     YES, CLEAR IT ALL 
      CPA K3        IS IT "WAIT" STATE? 
      RSS           YES 
      JMP NXMST     NO
* 
*     WRITE A NULL REQUEST INTO THE MASTER REQUESTERS CLASS 
      JSB EXEC
      DEF *+8 
      DEF K20N      CLASS WRITE/READ, NO ABORT
      DEF ZBIT
      DEF DUMMY 
      DEF K0        ZERO DATA LENGTH
      DEF DUMMY 
      DEF K0        ZERO REQUEST LENGTH 
      DEF PRAM1     CLASS NUMBER
* 
K0    NOP 
* 
NXMST LDB XACTA     GET ADDR OF NEXT TCB ADDR 
      JMP CKMST     GO CHECK FOR NEXT TCB 
* 
*     MASTER REQUESTER IS DORMANT, CLEAR CLASS AND TCB
* 
CREPT JSB DEFLU     CLEAR CLASS 
      LDB XACTA     CLEAR MASTER REQUESTER'S TCB
      ADB K2        POINT TO SEQ # IN TCB 
      JSB LODWD     GET IT
      STA SEQ#
      JSB #RSAX     CALL #RSAX TO PURGE MASTER TCB
      DEF *+3 
      DEF K6
      DEF SEQ#      SEQUENCE NUMBER OF MASTER TCB 
* 
      SSB,RSS       SKIP IF TCB NOT DELETED, IGNORE REST
      JMP CKMS2     CONTINUE WITH NEXT TCB ON CHAIN 
* 
      SKP 
* 
*     PROCESS THE HP3000 PROCESS NUMBER LIST. 
* 
PNLST CCB           GET ADDR OF PNL HEADER. 
      ADB #LDEF 
      LDB 1,I 
* 
CKPNL JSB LODWD     (CROSS)LOAD ADDR OF NEXT PNL ENTRY. 
      SZA,RSS 
      JMP RSCHD     DONE WITH PNL ENTRIES.
* 
      LDB 0 
      STB XACTA     SAVE ADDRESS OF NEXT TABLE ENTRY. 
      ADB K2        POINT TO 3RD WORD OF PNL ENTRY. 
      JSB LODWD     (CROSS)LOAD PROCESS # 
      STA KLBUF+4   SAVE FOR POSSIBLE "KILL". 
* 
      ADB K2        POINT TO 5TH WORD OF PNL ENTRY. 
      JSB LODWD     (CROSS)LOAD ID SEG ADDR.
      SSA 
      JMP KILL      SEND "KILL" IF IDSEG IS BAD.
      ADA K15       POINT TO STATUS.
      LDA 0,I 
      AND K15       ISOLATE STATUS. 
      SZA,RSS       DORMANT?
      JMP KILL       YES. SEND "KILL".
      LDB XACTA     NO. GO ON TO NEXT ENTRY.
      JMP CKPNL 
* 
* SEND A "KILL" REQUEST TO THE 3000 DIRECTLY THROUGH QUEX.
* SINCE THE "FROM PROCESS #" IN THE REQUEST IS ZERO (NORMALLY THE 
* MASTER CLASS NUMBER), QUEX WILL SEND $STDLIST TO "CNSLM" AND
* IGNORE THE FINAL REPLY. 
* 
KILL  LDA #QXCL     I/O CLASS # FOR QUEX
      SZA,RSS       IS HP3000 UP? 
      JMP RSCHD     NO. LEAVE PNL AS IS.
      SSA           IS HP3000 DISCONNECTED? 
      JMP RSCHD     YES. LEAVE PNL AS IS. 
* 
      JSB EXEC      CLASS WRITE "KILL" REQUEST TO QUEX. 
      DEF *+8 
      DEF K20N
      DEF K0
      DEF KLBUF 
      DEF K8
      DEF K8
      DEF K0
      DEF #QXCL 
      NOP           IGNORE ERRORS.
* 
      JSB #RSAX     DELETE PNL ENTRY. 
      DEF *+3 
      DEF K10       CODE FOR "REMOVE".
      DEF KLBUF+4   SEQUENCE NUMBER.
* 
* 
      LDB XACTA     RESTORE ADDR OF NEXT ENTRY. 
      JMP CKPNL     GO CHECK NEXT ENTRY.
* 
KLBUF BYT 10,6      LENGTH,CLASS
      OCT 0 
      OCT 27        STREAM
      OCT 0,0,0,0,0 
* 
      SKP 
* 
*     RESCHEDULE HP1000 AND/OR HP3000 MONITORS IF THEY ARE DORMANT
* 
RSCHD LDA #LU3K     IF NO HP3000
      SZA,RSS        CONNECTED, 
      JMP RE1K        GO RESCHEDULE HP1000 MONITORS.
* 
*     RESCHEDULE "QUEX", "RQCNV", OR "RPCNV" IF THEY ARE DORMANT
* 
      JSB SCHDL     TRY TO SCHEDULE QUEX (IF DORMANT) 
      ASC 3,QUEX
      JSB SCHDL     TRY TO SCHEDULE RQCNV (IF DORMANT)
      ASC 3,RQCNV 
      JSB SCHDL     TRY TO SCHEDULE RPCNV (IF DORMANT)
RPCNM ASC 3,RPCNV 
* 
      LDA #GRPM     IF NO HP1000
      SZA,RSS        CONNECTED, 
      JMP EXIT        ALL DONE! 
      SPC 1 
* 
*     RESCHEDULE "GRPM", "RTRY", OR "QCLM" IF THEY ARE DORMANT
* 
RE1K  JSB SCHDL     TRY TO SCHEDULE GRPM (IF DORMANT) 
      ASC 3,GRPM
      JSB SCHDL     TRY TO SCHEDULE RTRY (IF DORMANT) 
      ASC 3,RTRY
      JSB SCHDL     TRY TO SCHEDULE QCLM (IF DORMANT) 
      ASC 3,QCLM
* 
      SKP 
* 
*     CHECK FOR DOWNED COMMUNICATION LINES
* 
      LDA LUMAX     NUMBER OF LOGICAL UNITS 
      CMA,INA 
      STA LCNT      SET COUNTER 
      LDA B101
      STA LU        MODE= 1 FOR "ENABLE LISTEN" 
      LDA DRT       ADDR OF DEVICE REFERENCE TABLE
UPEQ2 STA LPNT
      LDA 0,I       PICK-UP DRT ENTRY 
      AND B77       ISOLATE EQT NUMBER
      ADA N1
      MPY K15       REL.POS. IN EQT 
      ADA EQTA      POINT TO 1ST WORD OF EQT
      ADA K4        ADDR OF EQT5
      LDB 0 
      LDA 0,I       CONTENTS OF EQT 5 
      ALF,ALF 
      AND B77       ISOLATE EQUIPMENT TYPE CODE 
      CPA B65       DVR65?
      JMP UPEQ4     YES, SEE IF IT'S UP 
* 
UPEQ3 ISZ LU        BUMP LU IN CONTROL WORD 
      LDA LPNT
      INA           INCREMENT DRT POINTER 
      ISZ LCNT
      JMP UPEQ2     PROCESS NEXT DRT ENTRY
* 
*     ALL LU'S HAVE BEEN CHECKED, EXIT UPLIN
* 
EXIT  JSB EXEC
      DEF *+2 
      DEF K6
* 
*     PROCESS COMMUNICATIONS EQT
* 
UPEQ4 ADB K7        POINT TO EQT12
      LDA 1,I       GET EQT12 
      AND BMSKS     ISOLATE "BROKEN LINE" & "LISTEN" FLAGS
      ALF,ALF 
      RAL,CLE,ELA   E= BROKEN LINE FLAG 
      SEZ           BROKEN LINE?
      JMP UPEQ5     YES 
      SZA           LISTEN ENABLED? 
      JMP UPEQ3     YES, OK 
      ADB N1        POINT TO EQT11
      LDA 1,I       GET EQT11 
      SZA,RSS       HAS THIS EQT BEEN INITIALIZED?
      JMP UPEQ3      NO 
* 
*  ISSUE AN "ENABLE LISTEN" REQUEST 
UPEQ6 JSB EXEC
      DEF *+3 
      DEF K3N 
      DEF LU        CONTROL MODE = 1
      NOP 
      JMP UPEQ3 
* 
*     CHECK TO SEE IF BROKEN LINE JUST OCCURRED 
* 
UPEQ5 STB TEMP      SAVE EQT12'S ADDRESS
* 
      JSB $LIBR     GO PRIVILEGED 
      NOP 
      LDA TEMP,I    GET EQT12 
      AND B6MSK     CLEAR "BROKEN LINE" FLAG
      STA TEMP,I
      JSB $LIBX     GO UNPRIVILEGED 
      DEF *+1 
      DEF *+1 
      JMP UPEQ6 
      SKP 
*     SUBROUTINES 
      SPC 2 
*     THIS ROUTINE BUMPS THE TIMEOUT IN A TCB 
* 
TSTCB NOP 
      LDB 0 
      STB XACTA     SAVE ADDRESS OF THIS TRANSACTION
      INB           POINT TO 2ND WORD OF TCB
      JSB LODWD     (CROSS)LOAD TIMER 
      SSA 
      JMP TSTC1+1   TIMEOUT ALREADY RESET 
      AND FLMSK     SAVE FLAG BITS (14-8) 
      STA FLBYT 
      LDA STREM     GET STREAM
      CPA K3        SLAVE EXECW REQUEST?
      JMP LONGT     YES, SET LONG TIMEOUT 
      CPA K8        SLAVE LOADM REQUEST?
      JMP LONGT     YES, SET LONG TIMEOUT 
      CPA K11       MASTER TCB? 
      RSS           YES 
      JMP TSTC1     NO, JUST DO A TICK
      ADB K2
      JSB LODWD     GET CLASS WD/ TIMEOUT FLAG
      ADB N2
      SSA,RSS       LONG TIMEOUT FOR THIS TCB?
      JMP TSTC1     NO, JUST DO A TICK
* 
LONGT LDA LTIME     20 MINUTE TIMEOUT 
      IOR FLBYT     RESTORE FLAG BITS (14-8)
      JMP TSTC2 
* 
TSTC1 JSB LODWD     RELOAD TIMER
      AND B377      ISOLATE IT
      CPA B377      IS IT ABOUT TO ROLL OVER? 
      JMP TSTC5     YES, DON'T BUMP IT, RETURN + 2
* 
      JSB LODWD     (CROSS)LOAD TIMER AGAIN 
      INA           BUMP TIMER
TSTC2 JSB STRWD     (CROSS)STORE
      RSS           RETURN +1 FOR NOT TIMED-OUT 
TSTC5 ISZ TSTCB     RETURN +2 FOR TCB TIMED-OUT 
      LDB XACTA     TCB ADDR INTO B REG 
      JMP TSTCB,I   RETURN
      SPC 3 
*     SUBROUTINE TO LOAD WORD FROM ALTERNATE MAP (IF RTE-III OR IV) 
* 
LODWD NOP 
MODI2 LDA 1,I       GET WORD FROM TCB (RSS IF DMS SYSTEM) 
      JMP LODWD,I   RETURN IF RTE-II
      XLA 1,I       LOAD WORD FROM ALTERNATE MAP
      JMP LODWD,I 
      SPC 3 
*     SUBROUTINE TO STORE A WORD IN ALTERNATE MAP (IF RTE-III OR IV)
* 
STRWD NOP 
      JSB $LIBR     LOWER FENCE 
      NOP 
MODI1 NOP           RSS HERE IF DMS SYSTEM
      JMP TSTC3 
      XSA 1,I       STORE INTO SYSTEM MAPPED LOCATION 
      RSS 
*     BELOW INSTRUCTION IS EXECUTED FOR NON-DMS SYSTEMS ONLY
TSTC3 STA 1,I       STORE UPDATED TIMER IN TCB
      JSB $LIBX     RAISE FENCE 
      DEF STRWD     RETURN
      SPC 3 
*     SUBROUTINE TO DEALLOCATE AND FLUSH AN I/O CLASS 
* 
DEFLU NOP 
      CCA           SET THE RELEASE RE-TRY SWITCH 
      STA TEMP       TO -1
* 
CLRTN JSB EXEC      GO TO RTE TO RELEASE CLASS NUMBER 
      DEF *+5 
      DEF K21N      CLASS GET/NO ABORT
      DEF PRAM1     MASTER CLASS/RELEASE/NO WAIT
      DEF K0
      DEF K0
      RSS           IGNORE ERRORS 
      ISZ TEMP      RELEASE PROCESSING COMPLETED? 
      JMP DEFLU,I    YES. RETURN. 
      INA,SZA        NO. ARE ALL PENDING REQUESTS CLEARED?
      JMP DEFLU+1       NO. CONTINUE TO CLEAR REQUESTS
* 
      LDA PRAM1     GET THE CLASS NUMBER AGAIN
      AND CLMSK     EXCLUDE THE NO-DE-ALLOCATION BIT(#13) 
      STA PRAM1     RESTORE THE MODIFIED CLASS WORD 
      JMP CLRTN     RETURN FOR FINAL DE-ALLOCATION
      SPC 3 
*     SUBROUTINE TO SCHEDULE A PROGRAM (IF DORMANT) 
* 
SCHDL NOP 
      JSB EXEC      SCHEDULE
      DEF *+4 
      DEF K10N
      DEF SCHDL,I 
      DEF K0        PRAM TO KEEP RPCNV HAPPY
      NOP 
      LDA SCHDL     SET RETURN
      ADA K3          ADDRESS 
      JMP 0,I       RETURN
      SKP 
*     DATA AREA 
* 
PRAM1 NOP 
LU    NOP 
RNCW  NOP 
LPNT  NOP 
LCNT  NOP 
STREM NOP 
XACTA NOP 
LSTAD NOP 
MCLSA NOP 
MSEGA NOP 
TEMP  DEC 0,0 
WRD1  NOP 
SEQ#  EQU TEMP+1
DUMMY NOP 
* 
K1    DEC 1 
K2    DEC 2 
K3    DEC 3 
K4    DEC 4 
K6    DEC 6 
K7    DEC 7 
K8    DEC 8 
K10   DEC 10
K11   DEC 11
K12   DEC 12
K13   DEC 13
K15   DEC 15
B65   OCT 65
B77   OCT 77
COMMA OCT 54
B101  OCT 101 
B377  OCT 377 
BMSKS OCT 2100
FLMSK OCT 077400
ZBIT  OCT 10000 
BIT15 OCT 100000
LTIME OCT 100020
K3N   OCT 100003
K10N  OCT 100012
K20N  OCT 100024
K21N  OCT 100025
GLCW  OCT 40006     GLOBAL RN LOCK/CLEAR - NO ABORT 
B1774 OCT 177400
CLMSK OCT 157777
B6MSK OCT 177677
N1    DEC -1
N2    DEC -2
* 
FLBYT NOP 
* 
OFMES ASC 2,OFF,
MSNAM BSS 3 
      ASC 1,1 
* 
QMES  ASC 10, SYSTEM IS QUIESCENT 
* 
      END UPLIN 
                                                                                                                          