ASMB,R,L,C HED EXECM: 'EXEC' REQUEST PROCESSOR * (C) HEWLETT-PACKARD CO. 1978 * NAM EXECM,19,30 91740-16005 REV 1840 780721 SPC 1 * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1978. 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 1 * * NAME: EXECM DS/1000 'EXEC' REQUEST MONITOR * SOURCE: 91740-18005 * RELOC: 91740-16005 * PGMR: C. HAMILTON [07/21/78] * SPC 2 EXT DRTEQ,PGMAD EXT $CLAS,$LIBR,$LIBX,$OPSY,EXEC EXT #BREJ,#GRPM,#NODE,#NCNT,#PLOG,#REQU,#RPCV,#RSAX A EQU 0 B EQU 1 KEYWD EQU 1657B XEQT EQU 1717B XTEMP EQU 1721B XPRIO EQU 1726B SUP SPC 2 EXECM JMP CONFG CONFIGURE: 1RST TIME; 'NOP' THEREAFTER. LDA B,I GET THE PASSED PARAMETER. IFZ EXT DBUG SZA JMP SETCL JSB DBUG DEF *+1 JSB EXEC DEF *+4 DEF D6 DEF D0 DEF D1 JMP EXECM+1 XIF * SETCL STA SAVCL SAVE CLASS NUMBER. IOR BIT15 PREPARE A NO-WAIT CLASS WORD # STA RDCLS FOR CLASS-READ REQUESTS. # ALR,RAR REMOVE BUFFER-SAVE BIT(#14) FROM CLASS. STA PURCL SAVE FOR CLASS-PURGE ROUTINE. AND B377 ISOLATE THE ORDINAL, # ADA DFCLS AND COMPUTE THE # STA CLTBA CLASS-TABLE ENTRY ADDRESS. # * SKP * WAITS IN GENERAL WAIT QUEUE, UNTIL A NEW REQUEST ARRIVES, * OR UNTIL A CLASS READ/WRITE/CONTROL REQUEST COMPLETES. * GET JSB EXEC PERFORM A CLASS 'GET', DEF *+8 IN ORDER TO UN-OBTRUSIVELY AWAIT DEF D21 ARRIVAL OF REQUESTS & I/O COMPLETION. DEF SAVCL SPECIFY: MONITOR'S CLASS DABFA DEF DABUF SPECIFY: DATA BUFFER ADDRESS. DEF D0 IGNORE DATA--INITIALLY. DEF SAMAD RETURNED: REQUEST BUFFER ADDRESS. DEF SAMLN RETURNED: REQUEST LENGTH. DEF SAMRC RETURNED: REQUEST CODE. * DST SAVA SAVE THE REGISTERS. * LDA D7 PREPARE FOR A STA RPLYL MINIMUM-LENGTH REPLY. CMA,INA ADA SAMLN IF THE REQUEST-LENGTH SSA IS LESS THAN THE MINIMUM: 7, JMP CLNUP IT CANNOT BE PROCESSED--IGNORE IT! * CLA SET =0, TO PREPARE STA BL/CP FOR REPLY W/O DATA. * LDA SAMLN GET THE REQUEST LENGTH. CAX PREPARE FOR POSSIBLE DMS WORD-MOVE. ADA DM16 IF THE REQUEST LENGTH SSA,RSS IS GREATER THAN 15 WORDS, JMP CLNUP THEN THE REQUEST IS UNACCEPTABLE! * LDA SAMAD SOURCE = REQUEST BUFFER IN S.A.M. LDB RQBFA DESTINATION = LOCAL REQUEST BUFFER. DMS1 MVW SAMLN OBTAIN REQUEST PARAMETERS ('MWF',IF DMS). * LDA RQBUF+4 GET THE REQUEST CODE FROM THE CALLER. STA RCODE SAVE THE REQUEST CODE FOR LATER USE. * LDB RQBUF GET THE STREAM WORD. # RBL,SLB,RBL IF THIS IS A NEW DS/3000 REQUEST, # JSB GD3K GO TO FLAG IT AS SUCH. # * # LDB SAMRC GET THE RETURNED REQUEST CODE. CLE,SZB IS THIS A NEW REQUEST? JMP RWCMP NO-PROCESS READ/WRITE/CNTRL COMPLETION. * JSB PLOG EXAMINE NEED FOR REQUEST LOGGING. * CPA D99 SPECIAL REQUEST FOR PROGRAM STATUS? JMP PGMST YES--GO TO ACCOMODATE THE CALLER. STA B NO.SAVE REQUEST CODE FOR VALIDITY CHECK. SZB IF REQUEST CODE=0--REJECT: ERROR "DS06"! ADB UPLIM FORM A NEGATIVE TABLE INDEX. SSB,RSS 0 < REQUEST CODE < 27 ? JMP ERDS6 NO! OUT OF RANGE--ERROR: "DS06". * IOR BIT15 INCLUDE NO-ABORT BIT(#15), STA RQBUF+4 AND RESTORE THE REQUEST CODE. * ADB TABAD COMPUTE PRE-PROCESSOR ADDRESS. CLE PREPARE FOR A 'NO ERROR' REPLY. JMP B,I GO TO EXECUTE THE PRE-PROCESSING. * SPC 3 * ERROR PROCESSING SECTION. * ERDS6 LDB "06" "DS06": ILLEGAL REQUEST CODE. JMP GETDS ERDS8 LDB "08" "DS08": INSUFFICIENT RESOURCES. GETDS LDA "DS" JMP ERRTN ERIO1 LDB "01" "IO01": IMPROPER OR MISSING PARAMETER. JMP GETIO ERIO2 LDB "02" "IO02": ILLEGAL LOGICAL UNIT. JMP GETIO ERIO7 LDB "07" "IO07": DRIVER REJECTED ILLEGAL REQUEST. GETIO LDA "IO" JMP ERRTN ERSC1 LDB "01" "SC01": MISSING SCHEDULING PARAMETER. JMP GETSC ERSC2 LDB "02" "SC02": ILLEGAL SCHEDULING PARAMETER. JMP GETSC ERSC5 LDB "05" "SC05": PROGRAM NOT DEFINED. GETSC LDA "SC" * ERRTN CCE ERROR RETURN. JMP DONE * SPC 2 * "01" ASC 1,01 "02" ASC 1,02 "05" ASC 1,05 "06" ASC 1,06 "07" ASC 1,07 "08" ASC 1,08 "DS" ASC 1,DS "IO" ASC 1,IO "SC" ASC 1,SC * SKP * REPLY PROCESSING SECTION. * DONE DST RQBUF+4 STORE REGISTERS IN WORDS 5&6 OF REPLY. CLA,SEZ,RSS IF THIS IS A NORMAL RETURN, JMP CLERR GO TO CLEAR THE REPLY-ERROR INDICATOR. STA BL/CP ELSE, PREPARE FOR REPLY SANS DATA. LDB D7 ESTABLISH THE STB RPLYL MINIMUM-LENGTH REPLY. * CLERR LDA #NODE GET THE LOCAL NODE NUMBER. ELA,CLE,RAR INCLUDE ASCII-ERROR FLAG (BIT#15). STA RQBUF+6 STORE THE ERROR INDICATOR--IF ANY. * LDB CLTBA,I GET THE CLASS-HEADER ADDRESS. ADB D8 POINT TO THE DATA BUFFER. ADB BL/CP ESTABLISH THE REPLY AFTER THE DATA. STB RPLAD SAVE THE NEW REPLY ADDRESS. * LDA RQBUF GET THE STREAM WORD. AND RPMSK REMOVE THE OLD RE-TRY COUNT, IOR #BREJ AND INCLUDE THE NEW. IOR BIT14 ADD THE REPLY FLAG (BIT#14). STA RQBUF RESTORE THE MODIFIED WORD. * LDA RPLYL GET THE REPLY LENGTH. CAX PREPARE FOR A DMS "MWI". CMA,INA ADA SAMLN IF THE REPLY-LENGTH EXCEEDS SSA THE AVAILABLE CLASS BUFFER, THEN INFORM JMP ERDS8 THE USER OF THE ERROR OF HIS WAYS! * JSB CLTCB GO TO CLEAR THE TRANSACTION RECORD. STA RQBUF+1 RESTORE THE ORIGINAL SEQUENCE NUMBER. * LDA RQBFA GET THE REPLY-DATA ADDRESS. LDB RPLAD GET THE REPLY ADDRESS IN S.A.M. JSB $LIBR NOP DMS2 MVW RPLYL MOVE REPLY TO CLASS BUFFER. [DMS: 'MWI'] JSB $LIBX DEF *+1 DEF REPLY * SKP * REPLY LDA RQBUF GET THE STREAM WORD. # RAL,CLE,SLA,ERA SET = DS/3000 BIT(#15)--IF ANY. # JMP LOCAL DS/3000 REPLY: REQUEUE VIA #RPCV. # LDA RQBUF+2 GET THE SOURCE NODE NO. CPA #NODE IF THE REPLY IS FOR THIS NODE, JMP LOCAL THEN RE-QUEUE IT TO <#GRPM>. * DLD #NCNT GET NRV SIZE AND ADDRESS CAX X HAS COUNTER FOR NODAL ADDRESS PAIRS * NLOOP LDA B,I GET A NODAL ADDRESS FROM THE NRV TABLE. NOP (XLA B,I IN THESE 2 INSTRUCTIONS IF DMS) INB POINT TO THE ASSOCIATED ROUTING VECTOR CPA RQBUF+2 IF THIS IS THE SOURCE-NODE ENTRY, JMP GETLU GO TO GET THE ROUTING VECTOR (LU); INB ELSE, ADVANCE THE ENTRY-POINTER, AND ISX IF ALL ENTRIES HAVE NOT BEEN CHECKED, JMP NLOOP GO TO EXAMINE THE NEXT NRV ENTRY. * JMP CLNP0 ENTRY NOT FOUND--FORGET THE REPLY! * GETLU LDA B,I ENTRY FOUND: GET THE LOGICAL UNIT NO. NOP (XLA B,I IN THESE 2 INSTRUCTIONS IF DMS) AND B77 REMOVE POSSIBLE TIMEOUT DATA. IOR B100 INCLUDE THE 'WRITE-BIT(#6)'. STA RQBUF+5 SAVE THE CONWD FOR USE BY 'CONWP'. LDA D1 SIMULATE A CLASS 'WRITE-READ' REQUEST. STA RCODE INITIALIZE PARAMETER FOR 'CONWP'. JSB CONWP GO PREPARE CONWD FOR USE BY <#REQU>. IOR ZBIT ADD DOUBLE-BUFFER BIT(#12) FOR , STA CONWD AND RESTORE THE MODIFIED CONWD. * JSB #REQU CALL <#REQU> DEF *+9 TO TRANSFER THE REPLY DEF SAVCL FROM CLASS DEF #GRPM [COMPLETION VIA <#GRPM>] DEF RQBUF+5 TO THE LU WHICH LINKS THE CALLER. DEF CONWD SPECIFY: COMM. LINE CONWORD DEF XPRIO,I PRIORITY LEVEL DEF BL/CP REPLY DATA LENGTH--IF ANY DEF RPLAD REVISED REPLY-BUFFER ADDRESS DEF RPLYL REPLY-BUFFER LENGTH SSA,RSS IF THE RE-QUEUEING WAS SUCCESSFUL, THEN JMP GET GO TO AWAIT NEXT REQUEST/COMPLETION; JMP CLNP0 ELSE, GO CLEAN UP & FORGET REPLY! * SKP * PRE-PROCESS FOR READ/WRITE AND CONTROL REQUESTS RC=1,2,3 * RWC JSB CONWP PREPARE CONTROL WORD & CHECK DEVICE. * LDB RQBUF+6 GET BUFFER LENGTH/CONTROL PARAMETER. STB BL/CP INITIALIZE <#REQU> PARAMETER. * LDA RCODE GET THE REQUEST CODE. CPA D1 IF THIS IS A READ REQUEST, JMP *+2 THEN SKIP TO CHECK FOR WRITE-READ; JMP REQUE ELSE, SIMPLY RE-QUEUE THE REQUEST. * LDA RQBUF+5 GET THE CALLER'S CONTROL WORD. ALF POSITION INTER-ACTIVE BIT(#11) TO SIGN. SSA,RSS IS THIS AN INTER-ACTIVE WRITE-READ? JMP CLSRD NO. GO TO CLASS-READ PROCESSING. # * ISZ CONWD YES. CONVERT REQUEST CODE TO 'WRITE(2)'. LDA RQBUF+8 GET WRITE LENGTH FROM OPT. PRAM. #2 STA BL/CP INITIALIZE WRITE LENGTH FOR <#REQU>. SSA IF CHARACTERS WERE SPECIFIED, ARS CONVERT TO A NEGATIVE WORD COUNT. SSA,RSS IF CHARACTERS--SKIP: ALREADY CONVERTED. CMA,INA VERIFY THAT THE ADA SAVB SPECIFIED LENGTH IS SSA CONTAINED WITHIN RECEIVED BUFFER; JMP ERIO1 ELSE, IT'S A PARAMETER ERROR! * JSB #RSAX GO TO THE DEF *+4 TCB MANAGEMENT ROUTINE DEF D5 TO SEARCH FOR DEF RQBUF+1 THE CURRENT REQUEST DEF RQBUF ON STREAM. SSB,INB IF THE TCB EXISTS, POINT TO 2ND WORD; JMP CLNP0 ELSE, CLEAN UP: NOTHING MORE POSSIBLE! * LDA D16 ALLOW A 20 MINUTE TIMEOUT JSB STORE FOR THE WRITE-READ REQUEST. JMP REQUE GO TO RE-QUEUE THE REQUEST. * SKP * * * NOTE: THIS PROCESSOR MAY BE REPLACED BY A SIMPLE, EXPEDIENT, # * * * RE-QUEUEING OF THE CLASS-READ REQUEST, IF THE APPROPRIATE # * * * DATA BUFFER IS ALLOCATED BY , UPON ENTRY OF THE # * * * REQUEST INTO THE LOCAL NODE. # * # CLSRD LDA RQBUF+5 GET THE CALLER'S CONTROL WORD. # IOR ZBIT INCLUDE DOUBLE-BUFFER SPECIFICATION. # STA RQBUF+5 RESTORE MODIFIED CONTROL WORD. # * # JSB EXEC CALL 'EXEC' # DEF *+8 TO PERFORM # DEF D17N A CLASS-READ. # DEF RQBUF+5 SPECIFY: CALLER'S CONWORD # DEF * DUMMY READ BUFFER # DEF RQBUF+6 READ-BUFFER LENGTH # DEF RQBUF REQUEST-BUFFER ADDRESS # DEF SAMLN REQUEST-BUFFER LENGTH # DEF RDCLS CLASS--NO WAIT. # JMP ERRTN SYSTEM-DETECTED ERROR--TELL CALLER! # * # SZA IF THE REQUEST WAS NOT PROPERLY QUEUED,# JMP ERDS8 THEN, TELL CALLER: RESOURCE PROBLEM; # JMP CLNP0 ELSE, CLEAN UP & AWAIT COMPLETION # * # * READ/WRITE/CONTROL CLASS-COMPLETION PROCESSING * RWCMP CPB D3 IF IT IS A CONTROL REQUEST, JMP FINIS THEN GO TO PREPARE THE REPLY. [=0] LDA RQBUF+5 GET THE CALLER'S CONTROL WORD. ALF,ELA POSITION WRITE-READ BIT(#11) TO . LDA RQBUF+6 GET THE CALLER'S DATA-LENGTH VALUE. CPB D1 IF A 'READ' HAS COMPLETED, THEN JMP LENCK GO TO PROCESS THE REPLY DATA-LENGTH. CLB,SEZ,CLE,INB,RSS IF NORMAL WRITE-COMPLETION, JMP FINIS GO TO PREPARE THE REPLY. * STA BL/CP WRITE-READ: SAVE READ LENGTH FOR <#REQU>, STB RCODE AND INITIALIZE 'RCODE' FOR 'CONWP'. JSB CONWP GO TO PREPARE CONTROL WORD FOR <#REQU>. JMP REQUE RE-QUEUE AS 'READ' FOR SPECIFIED DEVICE. * LENCK LDB SAVB GET THE TRANSMISSION LOG: +CHARS/+WORDS CLE,SSA,RSS IF CHARACTERS WERE SPECIFIED, SKIP; JMP SETLN ELSE, GO TO SAVE THE WORD COUNT. SLB,BRS CONVERT CHARACTER COUNT TO WORDS, AND INB IF ODD ADD ONE TO THE WORD COUNT. SETLN STB BL/CP SAVE THE REPLY DATA-LENGTH FOR <#REQU>. * FINIS LDA SAVA GET EQT5 STATUS WORD. AND BIT14 ISOLATE THE "DRIVER-REJECT" BIT(#14). CLE,SZA IF THE DRIVER REJECTED THE REQUEST, JMP ERIO7 THEN INFORM CALLER OF ERROR: "IO07"; DLD SAVA ELSE, GET THE REGISTERS FOR CALLER. JMP DONE GO COMPLETE THE REPLY.[=0: NO ERRORS] * SKP * RE-QUEUEING PROCESSOR: CONSERVE ALREADY-ALLOCATED SYSTEM RESOURCES * BY RE-QUEUEING THE REQUEST AS A CLASS-I/O REQUEST FOR A DEVICE. * REQUE JSB #REQU CALL <#REQU>, TO MOVE DEF *+7 THE CURRENTLY-QUEUED REQUEST DEF SAVCL FROM CLASS, TO THE DEVICE; DEF SAVCL WITH COMPLETION REPORTED TO . DEF RQBUF+5 SPECIFY: DEVICE LOGICAL UNIT NUMBER DEF CONWD CONFIGURED CONTROL WORD DEF XPRIO,I PRIORITY LEVEL DEF BL/CP BUFFER LENGTH/CONTROL PARAMETER * SSA,RSS IF THE RE-QUEUEING WAS SUCCESSFUL, JMP GET THEN, GO TO AWAIT COMPLETION; JMP ERDS8 ELSE, REPORT: RESOURCE ERROR! * * THE 'CONWP' SUBROUTINE PREPARES THE ACTUAL CONWORD WHICH IS TO BE * PASSED TO THE DEVICE DRIVER. THE CONWORD WILL INCLUDE ALL ITEMS * WHICH NORMALLY CONFIGURES: 'T'-FIELD[BITS#15,14-ADDED BY #REQU], * SUB-CHANNEL(BITS#13,5-2),SUBFUNCTION(BITS#10-6),RCODE(BITS#1-0). * [THIS PROCESSOR IS REQUIRED, DUE TO THE LACK OF ACCESS TO * 'WORD2' PROCESSOR]. * CONWP NOP ENTRY/EXIT: CONTROL WORD PREPARATION LDA RQBUF+5 GET THE CALLER-SUPPLIED CONWORD. AND B3700 ISOLATE SUBFUNCTION(BITS#10-6) STA CONWD SAVE THEM, TEMPORARILY. JSB DRTEQ GO TO GET THE DEF *+3 LU-LOCK & SUB-CHANNEL BITS DEF RQBUF+5 FOR THE SPECIFIED DEF DRTEN LOGICAL UNIT NUMBER. SSB,RSS IS IT AN INVALID LOGICAL UNIT, SZB,RSS OR IS IT LINKED TO THE 'BIT BUCKET'? JMP ERIO2 YES, TELL CALLER: LOGICAL UNIT ERROR! AND B3700 IF THE LOGICAL UNIT SZA IS CURRENTLY LOCKED, JMP ERDS8 THEN REJECT THE REQUEST: 'DS08'. * ADB D4 POINT TO FIFTH WORD OF THE EQT ENTRY. LDB B,I GET THE EQT'S STATUS WORD. RBL,CLE,SLB IF BIT #15 IS SET, THEN IT'S BUSY, JMP *+3 OR AWAITING A DMA CHANNEL--CONTINUE; SSB ELSE, IF THE DEVICE IS DOWN, THEN JMP ERDS8 REJECT THE REQUEST: RESOURCE PROBLEM! * LDA DRTEN GET THE DRT ENTRY, AGAIN. AND B174K ISOLATE SUB-CHANNEL BITS FROM DRT ENTRY. ELA,ALF POSITION MSB TO , AND RAL,RAL POSITION LSB'S TO BITS #5-2. IOR CONWD INCLUDE THE CALLER'S SUBFUNCTION, AND SEZ IF THE SUB-CHANNEL MSB WAS SET, THEN IOR B20K SET BIT #13 OF THE CONWORD, ALSO. IOR RCODE INCLUDE CALLER'S REQUEST CODE, AND STA CONWD SAVE THE CONWD FOR USE BY <#REQU>. JMP CONWP,I RETURN. * * PROGRAM SCHEDULE, TIMED EXECUTION, AND PROGRAM COMPLETION * PKILL EQU * PROGRAM TERMINATION. RC=6 * SCHED JSB PSTAT GO TO GET PROGRAM STATUS. RC=10,12 SZA ANY ATTEMPT TO CPA XEQT REMOTELY CONTROL JMP ERSC5 IS UN-ACCEPTABLE! ERROR: "SC05". * LDB RCODE GET THE REQUEST CODE. CPB D6 PROGRAM TERMINATION REQUEST? JMP *+2 YES. SKIP TO DETERMINE LINEAGE. JMP SCHD0 NO. IT'S A NORMAL SCHEDULE REQUEST. * ADA D20 POINT TO WORD #21 IN I.D. SEGMENT. LDA A,I GET THE CONTENTS. AND B377 ISOLATE THE FATHER'S I.D. SEG. NO. ADA KEYWD COMPUTE THE ADDRESS OF ADA DM1 THE KEYWORD TABLE ENTRY. LDA A,I GET THE FATHER'S I.D. SEGMENT ADDRESS. CPA XEQT OUR OFFSPRING? JMP SCHD0 YES, WE CAN HONOR THE REQUEST. JMP PASON NO. MUST HAVE BEEN THE SIRE. * SCHD0 LDA SAMLN GET THE REQUEST BUFFER SIZE. LDB RTNDF GET THE DEFAULT RETURN POINTER. ADA DM8 SUBTRACT THE MINIMUM REQUEST SIZE. ADB A COMPUTE THE ACTUAL RETURN ADDRESS, STB RTNAD AND CONFIGURE THE RETURN POINTER. SZA,RSS ANY ADDITIONAL PARAMETERS? JMP SCHD2 NO. GO CLEAR REMAINDER OF CALL BUFFER. SSA WERE WE SUPPLIED WITH ENOUGH PARAMETERS? JMP ERSC1 NO. * ERROR: SC01 ! * CAX YES. SAVE ADDITIONAL PARAMETER COUNT. LDA PR3DF = ADDRESS OF NEXT USER-PARAMETER LDB RTNDF =ADDRESS OF NEXT CALL-BUFFER LOCATION. SCHD1 STA B,I STORE PARAM ADDR INTO CALL BUFFER. INA ADVANCE PARAMETER POINTER. INB ADVANCE CALL BUFFER POINTER. DSX ALL PARAMETERS PROCESSED? JMP SCHD1 NO. PROCESS THE NEXT ONE. * CLA PREPARE TO CLEAR REST OF CALL BUFFER. SCHD2 CPB LASTA LAST CALL BUFFER LOCATION CLEARED? JMP SCHD3 YES. GO TO COMPLETE THE CALL. STA B,I NO. CLEAR THE LOCATION. INB ADVANCE THE CALL BUFFER POINTER, AND JMP SCHD2 GO TO CLEAR THE NEXT LOCATION. * SKP SCHD3 LDA STRAD+1 GET THE STRING-SIZE POINTER--IF ANY. SZA,RSS PASSING A STRING TO THE PROGRAM? JMP SCHD4 NO. BYPASS DATA BUFFER RECOVERY. LDA SAVB YES. GET THE DATA BUFFER SIZE. CAX SAVE COUNT FOR POSSIBLE DMS MOVE. CMA,INA,SZA,RSS FORM A NEGATIVE VALUE. ANY DATA? JMP ERSC2 NO--IMPROPER PARAMETERS! * LDB D512 GET MAXIMUM DATA BUFFER SIZE. ADB A IF THE TRANSMITTED DATA BUFFER SSB EXCEEDS THE ALLOWABLE SIZE, JMP ERSC2 THEN THE REQUEST CANNOT BE PROCESSED! * ADA SAMAD COMPUTE DATA BUFFER ADDRESS IN S.A.M. LDB DABFA GET THE LOCAL DATA BUFFER ADDRESS. STB STRAD ESTABLISH STRING-BUFFER ADDRESS IN CALL. DMS4 MVW SAVB MOVE DATA TO LOCAL BUFFER [DMS: MWF]. * SCHD4 DLD ERRIN LOAD THE ERROR-DETECTION INSTRUCTIONS. DST RTNAD,I STORE THEM AT END OF CALLING SEQUENCE. * * THE CONFIGURED 'EXEC' CALLING SEQUENCE IS EXECUTED BELOW. * JSB EXEC BUFFER FOR ASSEMBLING EXEC REQS. RTNAD DEF PR3AD RETURN POINTER (CONFIGURED). DEF RQBUF+4 REQUEST CODE (SUPPLIED BY CALLER) DEF RQBUF+5 POINTER TO FIRST REQUEST PARAMETER. PR3AD NOP CONFIGURED POINTERS (7-MAX.) TO NOP USER-SUPPLIED CALLING-PARAMETERS, NOP WHICH RESIDE IN THE REQUEST BUFFER. NOP UN-USED CALLING-SEQUENCE LOCATIONS ARE NOP DYNAMICALLY CHANGED TO 'NOP'. STRAD NOP STRING-BUFFER ADDRESS--IF ANY. NOP STRING-LENGTH POINTER--IF ANY. NOP [ ERROR-DETECTION INSTRUCTIONS: WILL BE NOP POSITIONED TO FOLLOW LAST POINTER ] ENDBF JMP DONE REQUEST COMPLETED. =0:NORMAL;=1:ERROR * SPC 2 * * TIME REQUEST PROCESSING RC=11 * STIME LDA D13 GET THE REPLY SIZE. STA RPLYL SET THE REPLY LENGTH * JSB EXEC REQUEST CURRENT SYSTEM TIME. DEF *+4 DEF RQBUF+4 RCODE = 11 (SIGN IS SET). DEF RQBUF+7 TIME IS RETURNED TO REPLY BUFFER. DEF RQBUF+12 SO IS THE YEAR. CCE RETURN ERROR-INFO TO THE CALLER! JMP DONE ALL IS WELL--RETURN THE TIME DATA. * SKP * I/O OR PARTITION STATUS-REQUEST PROCESSING * PARST EQU * RC=25 ISTAT LDA D10 GET THE REPLY SIZE. RC=13 STA RPLYL SET THE LENGTH OF THE REPLY * JSB EXEC REQUEST STATUS FOR THE I/O DEVICE. DEF *+6 DEF RQBUF+4 RCODE = 13/25 (SIGN IS SET). DEF RQBUF+5 CONWORD(LU) / PARTITION NUMBER DEF RQBUF+7 RETURN- RC=13: EQT#5 / RC=25: FIRST PAGE PR3DF DEF RQBUF+8 RETURN- RC=13: EQT#4 / RC=25: NO. PAGES DEF RQBUF+9 RETURN- RC=13: LU STAT/RC=25: PART. STAT CCE 'EXEC' ERROR-INFO RETURNED TO CALLER. JMP DONE RETURN TO CALLER WITH STATUS INFO. SPC 1 PASON LDA RQBUF GET THE STREAM WORD RC=6,9,23,24 XOR D6 CONVERT TO STREAM-3 . LDB SAMAD GET REQUEST BUFFER ADDRESS IN S.A.M. JSB STORE GO TO REPLACE STREAM TYPE IN CLASS BUFFER. JSB CLTCB GO TO CLEAR RECORD FROM STREAM. LDB SAMAD POINT TO THE SECOND WORD OF THE REQUEST CLE,INB BUFFER IN S.A.M. [=0:PASS TO <#GRPM>] JSB STORE REPLACE THE ORIGINAL SEQUENCE NUMBER. * LOCAL LDA #GRPM DESTINATION CLASS IS <#GRPM'S>, # SEZ UNLESS THIS IS A DS/3000 REPLY, # LDA #RPCV IN WHICH CASE, IT'S <#RPCV'S> CLASS. # STA CLTCB ESTABLISH THE DESTINATION CLASS NUMBER.# LDA RQBUF GET THE STREAM WORD. # AND BIT14 ISOLATE THE REPLY FLAG(BIT#14) # SZA,RSS IS THIS A REPLY, OR A FORWARD PASS? # JMP LOCRQ FORWARD PASS: SET PLAY IN MOTION. # * LDB CLTBA,I REPLY: GET CLASS HEADER ADDRESS. # ADB D2 POINT TO THE THIRD WORD. # LDA FAKST GET FAKE DVA65 STATUS (32401B) FOR GRPM# JSB STORE REPLACE STATUS WORD IN CLASS HEADER. # ADB D3 ADVANCE POINTER TO WORD #6. # LDA BL/CP GET THE REPLY DATA LENGTH. # JSB STORE REPLACE THE TRANSMISSION LOG IN HEADER.# INB ADVANCE POINTER TO FIRST OPT. PARAMETER# LDA RPLAD GET THE NEW REPLY-BUFFER ADDRESS. # JSB STORE REPLACE THE FIRST OPTIONAL PARAMETER. # INB ADVANCE POINTER TO SECOND OPT. PARAM. # LDA RPLYL GET THE REPLY LENGTH. # JSB STORE REPLACE THE SECOND OPTIONAL PARAMETER. # * LOCRQ JSB #REQU RE-QUEUE DEF *+3 THE REQUEST DEF SAVCL FROM CLASS DEF CLTCB ONTO THE DESTINATION CLASS. SSA,RSS IF THE OPERATION WAS SUCCESSFUL, JMP GET GO TO AWAIT NEXT REQUEST/COMPLETION; JMP CLNP0 ELSE, SIMPLY CLEAN UP--WHAT ELSE? * * THE FOLLOWING PROGRAM-STATUS REQUEST PROCESSING IS SUPPORTED * >>>>>>>>>>>>>>>> IN DS/1000 NETWORKS--ONLY! <<<<<<<<<<<<<<<< * PGMST JSB PSTAT GO TO GET THE PROGRAM'S STATUS. RC=99 SZA DOES THE PROGRAM EXIST? JMP GETST YES. GO TO PROCESS THE STATUS. CCA NO. SET =-1 FOR ERROR INDICATION! JMP RTNER GO TO RETURN THE ERROR INFORMATION. * GETST LDA B GET THE STATUS WORD. AND D15 ISOLATE THE STATUS. RAL,ERA INCLUDE THE 'SEGMENT' FLAG. RTNER STA RQBUF+7 SAVE FOR RETURN TO THE CALLER. LDB D8 ESTABLISH A STB RPLYL REPLY LENGTH OF 8 WORDS. CLB,CLE =0 FOR RETURN TO CALLER. JMP DONE RETURN THE INFO TO THE CALLER.