ASMB,Q,R,C HED 91750-16179 REV.2013 (C) HEWLETT-PACKARD CO. 1980 NAM UPLIN,17,3 91750-16179 REV.2013 801013 ALL SPC 2 ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. 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 # 91750-18179 * REL PART # 91750-16179 * WRITTEN BY: TOM MILNER * DATE WRITTEN DEC 1979 * * MODIFIED: * 801013 BY FF TO IMPLEMENT FUNCTION 9, AND TO CHANGE * FUNCTION 4 SUCH THAT A LONG TIME OUT DOES NOT * MASK A DORMANT OR "BAD" MASTER TCB CONDITION. * SPC 3 * EXTERNAL REFERENCES EXT EXEC,$LIBR,$LIBX,PGMAD,RNRQ,CLRQ,.MVW,#FWAM EXT MESSS,#RSAX,#UPSM,DTACH * EXT #OTCV,#INCV,$OPSY,#MCTR EXT #RPCV,#LUMP,#RSM EXT #BUSY,#QRN,#LDEF EXT #GRPM,#LU3K,#QXCL,#TST EXT #PNLH,#MRTH,#CLRN EXT #OFF,#PLOG SUP 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, IF A MASTER TCB TIMES-OUT, * OR IF IT IS DORMANT OR IF 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. IF QUEX SIGNALS HP3000 LINE DOWN (BY SETTING #CLRN RESOURCE * NUMBER), UPLIN CLEANS UP HP3000 TABLES: * * DELETES ALL PROCESS NUMBER LIST ENTRIES (PNL) * * SIMULATES TIME-OUT ON ALL HP3000 MASTER TCBS * * CLEARS ALL TST ENTRIES & CORRESPONDING SLAVE TCBS * 7. RELEASE ANY "DEAD" 1K #POOL ENTRIES IN THE PNL. * 8. RESCHEDULES "GRPM","RTRY", OR "QCLM" IF THEY ARE DORMANT. * 9. IF PLOG IS DORMANT BUT CLASS & SAM BUFFERS ARE ALLOCATED, * THEN BOTH ARE DEALLOCATED. * * * S#MAX EQU 12 MAX STREAM NUMBER + 1 A EQU 0 B EQU 1 SKP UPLIN EQU * JSB DTACH DETACH FROM SESSION CONTROL DEF *+1 LDA #FWAM CHECK TO SEE THAT DS IS INITIALIZED SZA,RSS JMP EXIT DS IS NOT INITIALIZED -- EXIT * LDA $OPSY RAR,SLA IS THIS AN RTE-III OR RTE-IV? RSSI RSS YES JMP *+4 NO LDB RSSI GET "RSS" STB MODI1 MODIFY TO DO CROSS-MAP STORE STB MODI2 MODIFY TO DO CROSS-MAP LOAD * * * (1.) 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 #1. IGNORE ERRORS * LDA RNCW IF PROGRAM HAS BEEN AWAITING CPA GLCW THE CLEARING OF #QRN, THEN JMP #1. 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 #1. ELSE BYPASS QUIESCENT CODE. * LDA GLCW RETURN TO IMMOBILIZE UPLIN JMP QRNWT * #1. EQU * END OF STEP 1 SKP * * (2.) THIS SECTION PROCESSES SLAVE TRANSACTIONS & MONITORS * LDA K2 ADA #LDEF STA PTR PNTR TO SLAVE LIST HEADER ADDRS IN RES CLA STA STREM SET STREAM # CKLST LDA PTR,I GET ADDRESS OF HEADER INA STA @CLAS SAVE ADDR OF MONITOR CLASS # INA ADDRESS OF SLAVE MONITOR NAME LDB @MON MOVE NAME TO LOCAL BUFFER JSB .MVW DEF K3 NOP LDA @MON,I GET FIRST 2 BYTES OF NAME STA ABORT AND SAVE ABORT BIT (BIT15) ELA,CLE,ERA THEN STRIP IT OFF STA @MON,I AND RESTORE 2 BYTES OF NAME SZA,RSS DOES MONITOR EXIST? JMP NXLST . NO TRY NEXT SLAVE LDB PTR,I NXTCB STB NXADR SAVE ADDR OF ADDR OF NEXT TCB * * ENTER HERE TO CHECK EACH SLAVE TCB FOR TIMEOUT * CKTCB LDB NXADR 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 LDB A --> TCB JSB TIMER BUMP TIMER IN TCB JMP NXTCB DIDN'T TIMEOUT, CHECK NEXT TCB * * SLAVE TRANSACTION HAS TIMED OUT * INB --> TIMEOUT & 3K BIT (TCB+1) JSB LODWD RAL 3K BIT TO SIGN STA TEMP AND SAVE IT FOR LATER INB --> SEQUENCE NUMBER (TCB+2) 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 * LDA TEMP CHECK IF THIS IS A 3K REQUEST SSA,RSS JMP CONT . NO 1K REQUEST ... CONTINUE * JSB EXEC CLASS WRITE A 1-WORD MESSAGE DEF *+8 TO RPCNV SO IT WILL SEND REJECT DEF K20N TO 3K AND CLEAN UP TST. DEF K0 DEF SEQ# DEF K1 DEF K1 DEF K0 DEF #RPCV NOP * CONT EQU * CONTINUE * * CHECK MONITOR ABORT FLAG LDA ABORT 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 * LDA @OFME --> 'OFF,XXXXXX,FL' LDB @OFBU --> STORAGE JSB .MVW MOVE MSG SO 'MESSS' WON'T DEF K7 WIPE IT OUT (DUMB ROUTINE) NOP LDA @MON --> SLAVE MONITOR NAME LDB @NAM --> 'MESSS' BUFFER JSB .MVW DEF K3 NOP * JSB MESSS CALL RTE MESSAGE PROCESSOR DEF *+3 @OFBU DEF OFBUF "OFF,XXXXXX,FL" (FL FOR 'L' COMPATIBILITY) DEF K13 JMP UPMON GO TO RE-SCHEDULE THE MONITOR. * * (3.) THIS CODE CHECKS MONITOR STATUS TO SEE IF IT HAS ABORTED CKMON LDA @MON,I 1ST WORD OF MONITOR NAME SZA,RSS DOES MONITOR EXIST? JMP NXLST . NO * JSB PGMAD CHECK SLAVES STATUS DEF *+2 @MON DEF MON SLAVE NAME SZA,RSS IF SLAVE NO LONGER EXISTS JMP NXLST THEN CHECK NEXT SLAVE (NEEDS WORK)... SZB RESCHEDULE IF DORMANT JMP NXLST ELSE MONITOR IS STILL GOING * * RESCHEDULE MONITOR UPMON LDA @CLAS,I GET CLASS NUMBER OF MONITOR RAL,CLE,ERA CLEAR SIGN BIT STA PARAM PARAMETER TO SCHEDULED ROUTINE * JSB SCHDL SCHEDULE MONITOR, PASS CLASS NUMBER MON BSS 3 * * DONE WITH THIS SLAVE LIST, START ON NEXT NXLST ISZ PTR POINT TO NEXT LIST HEADER ADDRESS ISZ STREM BUMP STREAM NUMBER LDA STREM CPA MAXS# DONE? RSS . YES NOW CHECK MASTER TCBS JMP CKLST PROCESS NEXT LIST * * DONE WITH SLAVE MONITOR/TRANSACTION PROCESSING * #3. EQU * END OF STEP 3. SKP * (4.) PROCESS MASTER TCBS * LDB #MRTH MASTER TCB HEADER STB NXADR CCA STREM = -1 INDICATES STA STREM A MASTER TCB IN 'TIMER' CKMST LDB NXADR NEXT TCB ADDRESS SZB,RSS ANOTHER TCB? JMP #4. . NO JSB LODWD . YES, PROCESS IT STA NXADR SAVE LINK WORD (TO NEXT TCB) JSB TIMER DID THIS TCB TIME OUT? RSS . NO JSB TMOUT . YES CLEAN UP TABLES JMP CKMST * #4. EQU * END OF STEP 4. SKP * (5.) CLEANUP THE PROCESS NUMBER LIST (PNL). * LDB #PNLH PROCESS NUMBER LIST (PNL) HEADER STB NXADR CKPNL LDB NXADR NEXT PROCESS NUMBER ADDRESS STB PTR (SAVE FOR LATER) SZB,RSS ANOTHER ENTRY? JMP #5. . NO JSB LODWD . YES, GET LINK WORD STA NXADR NEXT PN ENTRY ADDRESS * INB --> HP3000 BIT (PNL+1) JSB LODWD STA TEMP SAVE BIT FOR LATER CHECK INB --> NODE NUMBER (PNL+2) JSB LODWD STA NODE ADB K2 --> ID SEG ADDRS (PNL+4) JSB STATE GET PGM STATE SZA DORMANT? SSA BAD ID SEGMENT? RSS . YES, SEND "KILL" MSG JMP CKPNL . NO LOOK AT NEXT ENTRY * INB --> PROCESS # (PNL+5) JSB LODWD (CROSS)LOAD PROCESS # STA KLBUF+4 SAVE FOR POSSIBLE "KILL". LDA TEMP CHECK FOR HP3000 PROCESS RAL SSA JMP OFF3K LOGOFF THE 3000 PNL * LDA PTR --> 1000 PNL ENTRY JSB #UPSM LOGOFF THE 1000 PNL JMP DELET * * 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. * OFF3K LDA #QXCL I/O CLASS # FOR QUEX SZA,RSS IS HP3000 INCLUDED IN DS? JMP DELET NO. LEAVE PNL AS IS. SSA IS HP3000 DISCONNECTED? JMP DELET . YES, IGNORE 'KILL', JUST DELETE PNL * 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. * DELET JSB #RSAX DELETE PNL ENTRY. DEF *+4 DEF K10 CODE FOR "REMOVE". DEF KLBUF+4 SMP NUMBER. DEF NODE NODE NUMBER (-1 FOR HP3000) JMP CKPNL GO CHECK NEXT ENTRY. * KLBUF BYT 10,6 LENGTH,CLASS OCT 0 OCT 27 STREAM OCT 0,0,0,0,0 * #5. EQU * END OF STEP 5. SKP * (6.) IF QUEX HAS SET RN INDICATING HP3000 LINK DOWN CLEAN * UP ALL OF THE HP3000 TABLES IN SAM. * JSB RNRQ IS DEF *+4 HP3000 DEF LKCLR RESOURCE DEF #CLRN NUMBER DEF TEMP SET? NOP LDA TEMP CPA K7 LOCKED? RSS . YES CLEAN UP HP3000 BLOCKS JMP #6. . NO CONTINUE * * SCAN THRU PNL AND DELETE ALL HP3000 ENTRIES. * LDB #PNLH PNL HEADER STB NXADR CLPNL LDB NXADR SZB,RSS ANY MORE ENTRIES JMP MTCBS . NO CHECK MASTER TCBS JSB LODWD GET LINK WORD STA NXADR NEXT ENTRY INB --> 3000 BIT (PNL+1) JSB LODWD RAL CHECK FOR 1000 PNL SSA,RSS JMP CLPNL THIS IS A 1000 PNL, IGNORE IT ADB K4 POINT TO PROCESS # (PNL+5) JSB LODWD LOAD PROCESS # FOR SEARCH STA TEMP * JSB #RSAX DELETE PROCESS # LIST ENTRY DEF *+4 DEF K10 CODE FOR "REMOVE" DEF TEMP SEARCH, USING PROCESS # DEF N1 NODE NUMBER (-1 FOR HP3000) JMP CLPNL * * SCAN THRU TCBS & SIMULATE TIMEOUT FOR ANY HP3000 * MASTER TCB. * MTCBS LDB #MRTH MASTER TCB HEADER STB NXADR NEXT LDB NXADR NEXT TCB ADDRESS SZB,RSS ANY MORE ENTRIES? JMP CLTST . NO CLEAR TST NOW JSB LODWD GET LINK WORD STA NXADR SAVE NEXT TCB ADDRESS * INB JSB LODWD GET TIMEOUT WORD (TCB+1) RAL GET TO BIT14 (HP3000 BIT) SSA,RSS HP3000 TCB? JMP NEXT . NO ADB N1 . YES, POINT B TO START OF TCB JSB TMOUT SIMULATE TCB TIMEOUT ACTION JMP NEXT * * CLEAR EACH ACTIVE TST ENTRY, ITS CORRESPONDING SLAVE TCB, * AND ITS CLASS (IF ALLOCATED). * CLTST EQU * LDA #TST+1 NUMBER OF ENTRIES SZA,RSS JMP UNLOK ALL DONE, UNLOCK QUEX CMA,INA STA CTR * LDB #TST ADDRESS OF TST TLOOP STB NXADR JSB LODWD (CROSS) LOAD STREAM WORD SZA,RSS JMP TBUMP STREAM ZERO MEANS ENTRY INACTIVE STA STREM SET UP STREAM NUMBER FOR RSAX CALL CLA JSB STRWD INACTIVATE ENTRY INB JSB LODWD STA SEQ# SEQUENCE NUMBER INB JSB LODWD CLASS # JSB DEFLU DEALLOCATE CLASS (IF ALLOCATED) * JSB #RSAX DELETE SLAVE TCB DEF *+4 DEF K7 DEF SEQ# DEF STREM * TBUMP LDB NXADR ADB K14 ISZ CTR JMP TLOOP * * UNLOCK RESOURCE NUMBER ACTIVATING QUEX UNLOK JSB RNRQ DEF *+4 DEF CLRRN (OCT 14004) DEF #CLRN DEF TEMP * #6. EQU * END OF STEP 6 SKP * (7.) INCREMENT IDLE TIMERS ON REMOTELY CREATED SESSIONS * CLA JSB #UPSM SPC 3 * (8.) RESCHEDULE HP1000 AND/OR HP3000 MONITORS IF THEY ARE DORMANT * LDA #LU3K IF NO HP3000 SZA,RSS CONNECTED, JMP RE1K GO RESCHEDULE HP1000 MONITORS. * * RESCHEDULE "QUEX", "RQCNV", OR "RPCNV" IF THEY ARE DORMANT * CLA STA PARAM SET UP SCHEDULING PARAMETER 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) ASC 3,RPCNV * LDA #GRPM IF NO HP1000 SZA,RSS CONNECTED, JMP #8. 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 * * SCHEDULE LU MAPPING IF FLAG SET * LDA #LUMP SZA,RSS JMP *+5 JSB SCHDL TRY TO SCHEDULE LUMAP (IF DORMANT) ASC 3,LUMAP * * SCHEDULE REMOTE SESSION MONITOR IF FLAG SET * LDA #RSM SZA,RSS JMP *+5 JSB SCHDL ASC 3,RSM * * CHECK IF REQUEST/REPLY CONVERTERS NEED BE SCHEDULED. * LDA #OTCV OUTPUT CONVERTERS CLASS # SZA,RSS CLASS ALLOCATED? JMP RE1K2 . NO TRY INPUT CONVERTER JSB PGMAD CHECK STATUS DEF *+2 OF OUTPUT DEF OTCNV CONVERTER SZB DORMANT? JMP RE1K2 . NO JSB SCHDL . YES SCHEDULE IT OTCNV ASC 3,OTCNV * RE1K2 EQU * LDA #INCV INPUT CONVERTERS CLASS # SZA,RSS CLASS ALLOCATED? JMP CHKMA . NO ALL DONE JSB PGMAD CHECK STATUS DEF *+2 OF INPUT DEF INCNV CONVERTER SZB DORMANT? JMP CHKMA . NO JSB SCHDL . YES SCHEDULE IT INCNV ASC 3,INCNV * * CHECK IF 'MATIC' NEEDS TO BE SCHEDULED * CHKMA LDA #MCTR SZA,RSS MA IN SYSTEM? JMP #8. . NO ALL DONE * JSB PGMAD GET MATIC'S STATUS DEF *+3 DEF MATIC DEF IDSEG * SSB MATIC IN TIME LIST? (STATUS < 0) JMP #8. . YES OK * JSB EXEC . NO PUT MATIC IN TIME LIST DEF *+6 DEF K12N INITIAL OFFSET SCHEDULE DEF MATIC PROGRAM NAME DEF K2 RESOLUTION (2=SECS) DEF K1 MULTIPLE (1=EVERY SECOND) DEF N2 RUN AFTER 2 SECONDS NOP WE DON'T CARE ABOUT ERRORS HERE. #8. EQU * END OF STEP 8 SKP * (9.) IF PLOG IS DORMANT BUT CLASS & SAM BUFFERS ARE ALLOCATED, * CLEAN & DEALLOCATE CLASS AND DEALLOCATE RESOURCE NUMBER * * LDA #PLOG CLASS ALLOCATED SZA,RSS FOR PLOG? JMP #9. . NO, ALL DONE * JSB PGMAD FIND STATE OF PLOG DEF *+2 DEF PLOG * CPB K6 STATE = 6? JMP OFFP . YES, OFF PLOG CMB,INB STATE > 0? SSB JMP #9. .YES, ALL DONE * OFFP JSB #OFF MAKE SURE PLOG DEF *+2 IS DORMANT DEF PLOG * LDA #PLOG+1 MAKE LOCAL COPY STA TEMP OF RESOURCE NUMBER LDA #PLOG HOLD CLASS NUMBER (FOR DEFLU) CLB CLEAR CLASS # AND STB #PLOG RESOURCE # IS RES STB #PLOG+1 * JSB DEFLU DEALLOCATE CLASS * LDA TEMP IS RESOURCE NUMBER SZA,RSS ALLOCATED? JMP #9. . NO ALL DONE * JSB RNRQ DEALLOCATE DEF *+4 RESOURCE NUMBER DEF RN32 DEF TEMP DEF TEMP NOP IGNORE ERROR * #9. EQU * END OF STEP 9 SKP *----------------------------------------------------------+ * EXIT UPLIN | *----------------------------------------------------------+ EXIT JSB EXEC DEF *+4 DEF K6 DEF K0 DEF N1 SKP * SUBROUTINES SPC 3 * ROUTINE TO TIME OUT MASTER TCB'S (B --> TCB) * * IF BAD ID SEGMENT OR MASTER IS DORMANT THEN CLEAR * CLASS # AND DEALLOCATE TCB. IF (MASTER) WAITING SEND * HIM A NULL MESSAGE TO INDICATE TIMEOUT. * BSS 1 (STORAGE) TMOUT NOP ADB K2 POINT TO SEQUENCE NUMBER (TCB+2) JSB LODWD LOAD SEQUENCE NUMBER STA SEQ# SAVE SEQUENCE NUMBER * INB POINT TO TCB+3 JSB LODWD AND GET CLASS STA TMOUT-1 AND SAVE IT AND =B77777 ISOLATE CLASS # SZA,RSS CLASS # = 0? JMP CLTCB .YES, JUST CLEAR THE TCB * INB POINT TO ID SEGMENT (TCB+4) JSB STATE GET PGM STATE RAL,CLE,SLA,ERA CLEAR OFF SIGN BIT JMP CLEAR "BAD CONTENTS", CLR CLASS & TCB SZA,RSS DORMANT? JMP CLEAR . YES, CLEAR CLASS AND TCB CPA K3 THIS MASTER IN WAIT STATE? RSS . YES, SEND HIM A NULL MESSAGE JMP TMOUT,I . NO ALL DONE * * WRITE A NULL REQUEST INTO THE MASTER REQUESTERS CLASS JSB EXEC DEF *+8 DEF K20N CLASS WRITE/READ, NO ABORT DEF K0 DEF K0 DEF K0 ZERO DATA LENGTH DEF SEQ# SEND SEQUENCE NUMBER TO WAITER DEF K0 ZERO REQUEST LENGTH DEF TMOUT-1 CLASS NUMBER * K0 NOP JMP TMOUT,I RETURN * * MASTER REQUESTER IS DORMANT, CLEAR CLASS AND TCB * CLEAR LDA TMOUT-1 JSB DEFLU CLEAR CLASS CLTCB EQU * JSB #RSAX CALL #RSAX TO PURGE MASTER TCB DEF *+3 DEF K6 DEF SEQ# SEQUENCE NUMBER OF MASTER TCB JMP TMOUT,I RETURN SPC 2 * THIS ROUTINE BUMPS THE TIMEOUT IN A TCB (B --> TCB) * AND CHECKS FOR BAD ID SEGMENTS IN MASTER TCBS. * 'STREM' MUST BE SET (-1=MASTER TCB) * ON RETURN (P+1) IF TCB STILL ACTIVE * (P+2) IF TCB HAS TIMED OUT. * BSS 1 (STORAGE) TIMER NOP STB TIMER-1 SAVE ADDRESS OF THIS TCB LDA STREM GET STREAM SSA MASTER TCB? JMP TMTCB YES INB POINT TO 2ND WORD OF TCB (TCB+1) JSB LODWD (CROSS)LOAD TIMER SSA LONG TIMEOUT SET (SEE 'LTIME')? JMP TIME1+1 . YES, 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 JMP TIME1 . NO JUST DO A TICK TMTCB ADB K4 POINT TO ID SEG ADDRS (TCB+4) JSB STATE GET PGM STATE SZA DORMANT? SSA BAD ID? (FLAG SET BY #RSAX) JMP TIME5 . YES RETURN AS TIMEOUT LDB TIMER-1 NO, POINT TO 2ND WORD INB OF TCB (TCB+1) JSB LODWD (CROSS)LOAD TIMER SSA LONG TIMEOUT SET? JMP TIME1+1 YES, INC TIMEOUT CNTR AND FLMSK SAVE FLAG BITS (14-8) STA FLBYT ADB K2 POINT TO CLASS (TCB+3) JSB LODWD GET CLASS WD/ TIMEOUT FLAG ADB N2 POINT TO TIMEOUT (TCB+1) SSA,RSS LONG TIMEOUT FOR THIS TCB? JMP TIME1 NO, JUST DO A TICK * LONGT LDA LTIME 20 MINUTE TIMEOUT IOR FLBYT RESTORE FLAG BITS (14-8) JMP TIME2 * TIME1 JSB LODWD RELOAD TIMER AND B377 ISOLATE IT CPA B377 IS IT ABOUT TO ROLL OVER? JMP TIME5 YES, DON'T BUMP IT, RETURN + 2 * JSB LODWD (CROSS)LOAD TIMER AGAIN INA BUMP TIMER TIME2 JSB STRWD (CROSS)STORE RSS RETURN +1 FOR NOT TIMED-OUT TIME5 ISZ TIMER RETURN +2 FOR TCB TIMED-OUT LDB TIMER-1 TCB ADDR INTO JMP TIMER,I RETURN SPC 3 * SUBROUTINE TO LOAD WORD FROM ALTERNATE MAP (IF RTE-III OR IV) * LODWD NOP MODI2 LDA B,I GET WORD FROM TCB (RSS IF DMS SYSTEM) JMP LODWD,I RETURN IF RTE-II XLA B,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 TIME3 XSA B,I STORE INTO SYSTEM MAPPED LOCATION RSS * BELOW INSTRUCTION IS EXECUTED FOR NON-DMS SYSTEMS ONLY TIME3 STA B,I STORE UPDATED TIMER IN TCB JSB $LIBX RAISE FENCE DEF STRWD RETURN SPC 3 * STATE- GETS PROGRAM STATE (STATUS) * ON ENTRY --> [.] --> ID SEGMENT * ON RETURN = PGM STATE(>0) OR ID SEG ADR(<0) * BSS 1 (STORAGE) STATE NOP JSB LODWD GET ID SEG ADDRESS SSA BAD ID SEGMENT? (-) JMP STATE,I . YES RETURN STB STATE-1 SAVE CMA,INA NEGATIVE ID SEG ADDRESS STA IDSEG TELLS PGMAD TO USE IT (NOT NAME) JSB PGMAD GET PGM STATUS DEF *+3 DEF OFBUF (DUMMY BUFFER FOR NAME) DEF IDSEG LDA B RETURN STATUS IN SSA CHECK FOR TIME LIST ( < 0) LDA TL AND USE ALTERNATE STATUS CODE LDB STATE-1 JMP STATE,I RETURN W/ STATUS IDSEG BSS 1 SPC 3 * DEFLU - DEALLOCATES A CLASS (AND FLUSHES BUFFERS) * ( CONTAINS CLASS NUMBER) * BSS 1 (STORAGE) DEFLU NOP AND CLMSK ISOLATE CLASS NUMBER (BITS 12-0) SZA,RSS CLASS ALLOCATED? JMP DEFLU,I . NO JUST RETURN STA DEFLU-1 * JSB CLRQ DEALLOCATE CLASS DEF *+3 DEF CLRQ2 DEF DEFLU-1 NOP JMP DEFLU,I SPC 3 * SUBROUTINE TO SCHEDULE A PROGRAM (IF DORMANT) * SCHDL NOP JSB EXEC SCHEDULE DEF *+4 DEF K10N DEF SCHDL,I DEF PARAM PRAM TO KEEP RPCNV/PLOG HAPPY NOP LDB SCHDL SET RETURN ADB K3 ADDRESS JMP B,I RETURN PARAM NOP P1 SKP *----------------------------------------------------------+ * CONSTANTS | *----------------------------------------------------------+ @NAM DEF OFBUF+2 N1 DEC -1 N2 DEC -2 K1 DEC 1 K2 DEC 2 K3 DEC 3 K4 DEC 4 K6 DEC 6 K7 DEC 7 K8 DEC 8 K10 DEC 10 TL EQU K10 ALTERNATE STATUS -- TIME LIST K13 DEC 13 K14 DEC 14 CLRQ2 OCT 140002 MAXS# ABS S#MAX MAXIMUM NUMBER OF STREAMS + 1 B377 OCT 377 FLMSK OCT 077400 CLMSK OCT 017777 LTIME OCT 100020 K10N DEF 10,I K12N DEF 12,I K20N DEF 20,I GLCW OCT 040006 GLOBAL RN LOCK/CLEAR - NO ABORT CLRRN OCT 140004 LKCLR OCT 140006 @OFME DEF *+1 ASC 7,OFF,XXXXXX,FL MATIC ASC 3,MATIC PLOG ASC 3,PLOG RN32 OCT 040040 UNS *----------------------------------------------------------+ * STORAGE | *----------------------------------------------------------+ FLBYT BSS 1 OFBUF BSS 6 RNCW BSS 1 STREM BSS 1 NXADR BSS 1 TEMP BSS 1 SEQ# BSS 1 PTR BSS 1 CTR BSS 1 ABORT BSS 1 @CLAS BSS 1 NODE BSS 1 * SIZE EQU * END UPLIN