ASMB,Q,C HED EXECM: 'EXEC' REQUEST PROCESSOR * (C) HEWLETT-PACKARD CO. 1980 * NAM EXECM,19,30 91750-16111 REV.2013 801008 ALL SPC 1 * *************************************************************** * * (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 1 * * NAME: EXECM DS/1000 'EXEC' REQUEST MONITOR * SOURCE: 91750-18111 * RELOC: 91750-16111 * PGMR: C. HAMILTON [07/21/78] * MDF'D: GAB [02/06/79] FOR EXTENDED INSTR REPLACE W/JSB'S * MDF'D: JDH [02/16/79] FOR DS REQUEST EQUATED OFFSETS. * MDF'D: CCH [10/08/80] FOR 91750 * SPC 2 EXT #ATCH,CLRQ,DTACH,LUTRU,PGMAD EXT $LIBR,$LIBX,$OPSY,EXEC,RMPAR,XLUEX EXT #EXHC,#EXTC,#GETR,#GRPM,#NODE,#PLOG,#RPB EXT #NQUE,#RQUE,#RSAX,#SKEY,#SLAV EXT .CAX,.DSX,.STX,.STY A EQU 0 B EQU 1 SUP SKP * GLBLK-START * ****************************************************************** * * * G L O B A L B L O C K REV 2013 790531 * * * * GLOBAL OFFSETS INTO DS/1000 MESSAGE BUFFERS, USED BY: * * * * REMAT, RFMST, DEXEC, DMESS, FLOAD, POPEN, #MAST * * GET, #SLAV, RQCNV, RPCNV, GRPM, LSTEN, PTOPM * * EXECM, EXECW, OPERM, RFAM1, RFAM2, DLIST, DLIS3 * * * ****************************************************************** * ***!!!!! THE FIRST 7 WORDS (#STR THRU #ENO) MUST BE FIXED !!!!!*** #STR EQU 0 STREAM WORD. #SEQ EQU #STR+1 SEQUENCE NUMBER. #SRC EQU #SEQ+1 SOURCE NODE #. #DST EQU #SRC+1 DEST. NODE #. #EC1 EQU #DST+1 REPLY ECOD1. #EC2 EQU #EC1+1 REPLY ECOD2. #ENO EQU #EC2+1 NUMBER OF NODE REPORTING ERROR. * #ECQ EQU #ENO+1 ERROR CODE QUALIFIER (BITS 4 TO 7) #LVL EQU #ECQ MESSAGE FORMAT LEVEL (BITS 0 TO 3) #MAS EQU #LVL+1 MA "SEND" SEQ. # #MAR EQU #MAS+1 MA "RECV" SEQ. # #MAC EQU #MAR+1 MA "CANCEL" FLAGS #HCT EQU #MAC+1 HOP COUNT #SID EQU #HCT+1 SESSION ID WORD * #EHD EQU #SID LAST ITEM OF HEADER #MHD EQU #EHD+1 MINIMUM HEADER SIZE #REQ EQU #MHD START OF REQUEST SPECIFIC AREA #REP EQU #MHD START OF REPLY SPECIFIC AREA * #MXR EQU #MHD+24 <<< MAXIMUM DS REQ/REPLY BUFFER SIZE >>> #LSZ EQU 2 <<< SIZE OF LOCAL APPENDAGE AREA >>> * ****************************************************************** * * GLBLK-END SKP * DXBLK-START * ****************************************************************** * * * D E X E C B L O C K REV 2013 800221 * * * * OFFSETS INTO DS/1000 DEXEC MESSAGE BUFFERS, USED BY: * * * * DEXEC, EXECM, EXECW, RQCNV, RPCNV, FLOAD, REMAT * * * ****************************************************************** * * OFFSETS INTO DEXEC REQUEST BUFFERS. * #ICD EQU #REQ ICODE FOR DEXEC(ALL) #CNW EQU #ICD+1 CONWD FOR DEXEC(1,2,3,13) #CWX EQU #CNW+1 DLUEX EXTENSION FOR DEXEC(1,2,3,13) V #BFL EQU #CWX+1 IBUFL FOR DEXEC(1,2) #PM1 EQU #BFL+1 IPRM1 FOR DEXEC(1,2) #PM2 EQU #PM1+1 IPRM2 FOR DEXEC(1,2) #ZOF EQU #PM1 Z-BUFFER OFFSET FOR DEXEC(1,2,3,13) #ZLN EQU #PM2 Z-BUFFER LENGTH FOR DEXEC(1,2,3,13) #PR2 EQU #PM2+1 2ND OPT. PARAMETER FOR DEXEC(3) [RTE-L]. #KEY EQU #PR2+1 KEYWORD(RN) FOR DEXEC(1,2,3) [RTE-L]. #PRM EQU #CWX+1 IPRAM FOR DEXEC(3) #PGN EQU #ICD+1 PRGNM FOR DEXEC(6,9,10,12,23,24,99) #INU EQU #PGN+3 INUMB FOR DEXEC(6) #DPM EQU #INU+1 PARMS FOR DEXEC(6) (5-WORD AREA) #PMS EQU #PGN+3 PARMS FOR DEXEC(9,10,23,24)(5-WORD AREA) #IBF EQU #PMS+5 IBUFR FOR DEXEC(9,10,23,24) #IBL EQU #IBF+1 IBUFL FOR DEXEC(9,10,23,24) #FNO EQU #IBL+1 FNOD FOR DEXEC(9) (APLDR) #RSL EQU #PGN+3 IRESL FOR DEXEC(12) #MPL EQU #RSL+1 MTPLE FOR DEXEC(12) #HRS EQU #MPL+1 IHRS FOR DEXEC(12) #MIN EQU #HRS+1 IMIN FOR DEXEC(12) #SEC EQU #MIN+1 ISECS FOR DEXEC(12) #MSC EQU #SEC+1 MSECS FOR DEXEC(12) #PAR EQU #ICD+1 PARTI FOR DEXEC(25) (PARTITION #) #IST EQU #PGN+3 ISTAT FOR DEXEC(99) * * OFFSETS INTO DEXEC REPLY BUFFERS. * #EQ5 EQU #EC1 EQT 5 FOR DEXEC(1,2,3) #XML EQU #EC2 TRANSMISSION LOG (DEXEC 1,2) #RPM EQU #REP PRAMS FOR DEXEC(9,23) (5-WORD AREA) #TMS EQU #REP MSEC FOR DEXEC(11) #TSC EQU #TMS+1 SEC FOR DEXEC(11) #TMN EQU #TSC+1 MIN FOR DEXEC(11) #THR EQU #TMN+1 HRS FOR DEXEC(11) #TDA EQU #THR+1 DAY FOR DEXEC(11) #TYR EQU #TDA+1 YEAR FOR DEXEC(11) #ST1 EQU #REP ISTA1 FOR DEXEC(13) #ST2 EQU #ST1+1 ISTA2 FOR DEXEC(13) #ST3 EQU #ST2+1 ISTA3 FOR DEXEC(13) #ST4 EQU #ST3+1 ISTA4 FOR DEXEC(13) [RTE-L]. #PAG EQU #REP IPAGE FOR DEXEC(25) #IPN EQU #PAG+1 IPNUM FOR DEXEC(25) #PST EQU #IPN+1 ISTAT FOR DEXEC(25) #KST EQU #REP ISTAT FOR DEXEC(99) * * MAXIMUM SIZE OF DEXEC REQUEST/REPLY BUFFER. * #DLW EQU #MHD+11+#LSZ M A X I M U M S I Z E ! ! ! * * MAXIMUM SIZE OF DEXEC/EXECM DATA BUFFER. * #DBS EQU 512 M A X I M U M S I Z E ! ! ! * * DXBLK-END SKP EXECM JSB RMPAR RETRIEVE THE DEF *+2 SCHEDULING DEF SAVCL PARAMETER(S). * FIRST JSB CONFG CONFIGURE: 1RST TIME; 'NOP' THEREAFTER. * CLA ESTABLISH PARAMETERS STA RQB+#PGN TO REQUEST THE ADDRESS OF THE JSB PSTAT ID SEGMENT FOR THIS PROGRAM. * LDA TEMP SAVE THE ID SEGMENT ADDRESS STA XEQT FOR SCHEDULE/TERMINATION VALIDATION. LDA SAVCL GET CLASS NUMBER. CCE ALR,ERA REMOVE BUFFER-SAVE BIT(#14) FROM CLASS. STA PURCL SAVE FOR CLASS-PURGE ROUTINE. * * WAITS IN GENERAL WAIT QUEUE, UNTIL A NEW REQUEST ARRIVES, * OR UNTIL A CLASS READ/WRITE/CONTROL REQUEST COMPLETES. * GET JSB DTACH DETACH FROM A POSSIBLE SCB ASSOCIATION. DEF *+1 * CLA PREPARE FOR A TEST OF STA RQB+#STR RECEIVED BUFFER, IN ORDER TO IDENTIFY STA RQB+#SEQ NEW REQUESTS OR I/O COMPLETIONS. * JSB #GETR PERFORM A CLASS 'GET', DEF *+7 IN ORDER TO UN-OBTRUSIVELY AWAIT DEF SAVCL ARRIVAL OF REQUESTS & I/O COMPLETION. RQBAD DEF RQB SPECIFY: REQUEST BUFFER ADDRESS. DEF MAXRQ SPECIFY: REQUEST LENGTH. DABFA DEF DABUF SPECIFY: DATA BUFFER ADDRESS. DEF DBMAX SPECIFY: MAXIMUM DATA BUFFER SIZE. DEF SAVA SPECIFY: STATUS RETURN LOCATION. JMP CLNUP * BAD CLASS: TRY TO CLEAN UP * * STA REQLN = ACTUAL LENGTH OF HEADER. STB SAVB = ACTUAL LENGTH OF DATA. JSB .STX SAVE THE RETURNED REQUEST CODE DEF SAMRC FROM THE LAST CLASS I/O REQUEST. JSB .STY RETRIEVE THE CLASS BUFFER ADDRESS DEF #SKEY AND SAVE FOR USE AS A SEARCH KEY. * LDA L#MHD PREPARE FOR A STA RPLYL MINIMUM-LENGTH REPLY. CLA SET =0, TO PREPARE STA DALEN FOR REPLY W/O DATA. STA XMERQ INITIALIZE ERROR QUALIFIER =0(SYSTEM). * SKP LDA RQB+#SEQ SAVE THE LOCAL STA TEMP SEQUENCE NUMBER, TEMPORARILY. * JSB #RSAX SEARCH THE SLAVE LIST, DEF *+4 IN ORDER TO IDENTIFY THIS DEF D5 'GET' BUFFER AS AN I/O DEF RQB+#SEQ COMPLETION, OR AS A DEF RQB+#STR NEW REQUEST. SSB WAS THIS A NEW REQUEST? JMP RWCMP NO--ASSUME AN I/O COMPLETION. * STA RQB+#SEQ YES, SAVE ORIG. SEQ. NO. FOR LOGGING. STB TCBAD SAVE TCB ADDRESS FOR INTER. WRITE-READ. JSB PLOG EXAMINE NEED FOR REQUEST LOGGING. * LDA L#MHD FORM A NEGATIVE VALUE CMA,INA FOR THE MINIMUM REQUEST LENGTH. LDB REQLN GET THE CURRENT REQUEST LENGTH. ADA B COMPUTE: REQLN-MINIMUM. CMB,INB COMPUTE DIFFERENCE BETWEEN SUPPLIED ADB L#IBL AND MAXIMUM REQUEST LENGTHS. SSA,RSS IF LESS THAN MINIMUM, SSB OR GREATER THAN MAXIMUM, THEN JMP CLNUP THE REQUEST IS UNACCEPTABLE. * LDA RQB+#ICD GET REQUEST CODE PARAMETER FROM CALLER. AND B377 REMOVE THE FLAG (BIT#12). STA RCODE SAVE THE REQUEST CODE FOR LATER USE. 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 EXCOD AND CONFIGURE REQUEST CODE FOR CALL. * ADB TABAD COMPUTE PRE-PROCESSOR ADDRESS. JMP B,I GO TO EXECUTE THE PRE-PROCESSING. * SKP * ERROR PROCESSING SECTION. * ERS01 DLD "RS" "RS01": SESSION SCB DOES NOT EXIST! JMP XMERR ERDS6 LDB "06" "DS06": ILLEGAL REQUEST CODE. JMP GETDS ERDS8 LDB "08" "DS08": INSUFFICIENT RESOURCES. GETDS LDA "DS" JMP XMERR ERIO1 LDB "01" "IO01": IMPROPER OR MISSING PARAMETER. JMP GETIO ERI12 LDB "12" "IO12": LU NOT DEFINED FOR THIS SESSION. GETIO LDA "IO" JMP XMERR 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" * XMERR STA TEMP SAVE REGISTER, TEMPORARILY. LDA BIT5 SET ERROR QUALIFIER FIELD (BITS #7-4) STA XMERQ TO 2: EXECM SIMULATED ERROR. LDA TEMP RETRIEVE ASCII ERROR INFORMATION. CPB DM1 IF THIS IS A PROGRAM STATUS ERROR, CLE,RSS THEN AVOID SETTING THE ASCII ERROR FLAG. ERRTN CCE ERROR RETURN. JMP DONE * XMERQ NOP QUALIFIER: 0-SYSTEM,40B-EXECM,100B-#RQUE. * "01" ASC 1,01 "02" ASC 1,02 "05" ASC 1,05 "06" ASC 1,06 "08" ASC 1,08 "12" ASC 1,12 "DS" ASC 1,DS "IO" ASC 1,IO "RS" ASC 2,RS01 "SC" ASC 1,SC * SKP * REPLY PROCESSING SECTION. * DONE DST RQB+#EC1 STORE REGISTERS IN WORDS 5&6 OF REPLY. DONE0 CLA,SEZ,RSS IF THIS IS A NORMAL RETURN, JMP CLEAR GO TO CLEAR THE REPLY-ERROR INDICATOR. STA DALEN ELSE, PREPARE FOR REPLY SANS DATA. LDB L#MHD ESTABLISH THE STB RPLYL MINIMUM-LENGTH REPLY. * CLEAR LDA #NODE GET THE LOCAL NODE NUMBER. ELA,CLE,RAR INCLUDE ASCII-ERROR FLAG (BIT#15). STA RQB+#ENO STORE THE ERROR INDICATOR--IF ANY. SSA,RSS ANY ERRORS DETECTED? JMP SRPLY NO, SIMPLY SEND THE REPLY. * LDA RQB+#ECQ YES. REMOVE THE OLD AND UPMSK ERROR QUALIFIER INFORMATION IOR XMERQ AND INCLUDE NEW QUALIFIER. STA RQB+#ECQ CONFIGURE THE QUALIFIER WORD. * SRPLY LDB RQBAD GET THE REPLY BUFFER ADDRESS. ADB RPLYL COMPUTE THE NEXT AVAILABLE LOCATION. LDA $OPSY GET THE OP-SYSTEM IDENTIFIER, STA B,I AND RETURN AS LAST WORD OF REPLY. ISZ RPLYL INCLUDE IDENTIFIER IN REPLY LENGTH. * JSB #SLAV PROCESS THE SLAVE'S REPLY. DEF *+4 DEF RPLYL HEADER LENGTH. DEF DABUF DATA BUFFER ADDRESS. DEF DALEN DATA BUFFER LENGTH. JMP CLNUP * ERROR: TRY TO CLEAN UP * JMP CLNP0 O.K.: RELEASE BUFFER & AWAIT NEXT ONE. * HED EXECM: READ/WRITE/CONTROL REQUESTS * (C) HEWLETT-PACKARD CO.1980 * RWC JSB ATCHS ATTACH SCB & GET TRUE LU. RC=1,2,3 * LDA RQB+#CWX GET THE CALLER'S CONTROL WORD. ALF,ELA POSITION INTERACTIVE BIT(#11) TO . * LDA RCODE GET THE REQUEST CODE. LDB RQB+#BFL GET BUFFER LENGTH STB DALEN AND CONFIGURE CALL WITH DATA LENGTH. SEZ,RSS IS THE INTERACTIVE BIT(#11) SET? JMP RWCTL NO. CHECK FOR READ, WRITE OR CONTROL. * CPA D1 YES. IS THE CALL PROPERLY SPECIFIED? JMP INTER YES. DO WRITE PORTION OF REQUEST. JMP ERDS6 NO. REQUEST IS INVALID: "DS06"! * INTER ISZ RCODE CONVERT REQUEST CODE TO 'WRITE(2)'. LDA RQB+#PM2 GET WRITE LENGTH FROM OPT. PRAM. #2 STA DALEN INITIALIZE WRITE LENGTH FOR <#RQUE>. 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! * LDB TCBAD POINT TO THE THIRD WORD ADB D2 OF THE TRANSACTION CONTROL BLOCK. DMS2 LDA B,I RETRIEVE THE LOCAL SEQUENCE NUMBER. NOP [CONTAINS XLA B,I IN DMS ENVIRONMENT] CPA RQB+#SEQ IF TCB APPEARS TO BE UNCHANGED, CLA,RSS JMP CLNUP ELSE, ITS PROBABLY BEEN DELETED. * STA RQB+#PM1 AVOID THE SPECIFICATION OF STA RQB+#PM2 ERRONEOUS OPTIONAL PARAMETERS. * LDA D16 INDICATE A 20 MINUTE TIMEOUT. ADB DM1 POINT TO 2ND WORD OF TCB: TIME COUNTER. JSB $LIBR D0 NOP DMS1 STA B,I MODIFY SLAVE TCB TIME VALUE (WD #2). NOP [CONTAINS XSA B,I IN DMS ENVIRONMENT] JSB $LIBX DEF *+1 DEF RWCTL * SKP RWCTL LDA RCODE GET REQUEST CODE LDB RQB+#CWX AND USER'S CONTROL WORD. BLF,CLE,ERB POSITION Z-BIT(#12) TO . CLB,SEZ CLEAR AND TEST FOR Z BUFFER. LDB DABFA Z BUFFER, SO GET DATA BUF. POINTER. SEZ TEST AGAIN FOR Z BUFFER; IF SET, CPA D2 THEN TEST FOR A WRITE REQUEST. ADB RQB+#ZOF GET PARAMETER OR COMPUTE Z BUF. ADDR. STB RQB+#ZOF SAVE PARAMETER OR Z BUF POINTER. IOR D16N FORM A CLASS REQUEST CODE STA EXCOD FROM THE CALLER'S REQUEST VALUE. * LDB $OPSY GET OP-SYSTEM IDENTIFIER. CPB DM31 IF THIS IS AN RTE-L OPERATING SYSTEM, JMP LSWCH GO SELECT APPROPRIATE CALLING SEQUENCE. CPA D19N IT'S RTE-M OR RTE-IV. CONTROL REQUEST? JMP CONT4 YES. GO EXECUTE A CLASS CONTROL REQUEST. * JSB XLUEX RC=1,2 (M,IV) DEF *+8 REQUEST ALLOCATION OF A CLASS BUFFER: DEF D17N CLASS READ (NO ABORT: 100021B) DEF CONW1 CONWORDS (LU =0 + FLAGS, ETC.) DEF DABUF DATA BUFFER ADDRESS. DEF DALEN DATA BUFFER LENGTH. DEF RQB+#ZOF Z BUF. POINTER OR OPTIONAL PARAM. DEF RQB+#ZLN Z BUF. LENGTH OR OPTIONAL 2ND PARAM. DEF #EXTC TEMPORARY CLASS (NO-WAIT). JMP ERRTN SYSTEM-DETECTED ERROR--TELL CALLER. * SSA IF THE REQUEST WAS NOT PROPERLY QUEUED, JMP ERDS8 THEN TELL CALLER: RESOURCE PROBLEM! JMP SAVRQ GO SAVE REQUEST AND START I/O OPERATION. * CONT4 JSB XLUEX RC=3 (M,IV) DEF *+7 REQUEST ALLOCATION OF A CLASS BUFFER: DEF D19N CLASS CONTROL (NO ABORT: 100023B) DEF CONW1 CONWORDS (LU =0 + FLAGS, ETC.) DEF RQB+#PRM OPTIONAL PARAMETER. DEF #EXTC TEMPORARY CLASS (NO WAIT). DEF RQB+#PM1 2ND OPTIONAL PARAMETER. DEF RQB+#PM2 3RD OPTIONAL PARAMETER. JMP ERRTN SYSTEM-DETECTED ERROR: TELL CALLER! * SSA IF REQUEST WAS NOT PROPERLY QUEUED, JMP ERDS8 THEN TELL CALLER: RESOURCE PROBLEM! * CLA PREVENT DATA OVERLAY JMP SDLEN GO SET PARAM. AND SAVE REQUEST. * SKP * LSWCH CPA D19N IF THIS IS AN RTE-L CONTROL REQUEST JMP CONTL GO EXECUTE THE SPECIAL CALLING SEQUENCE. * JSB XLUEX RC=1,2 (RTE-L) DEF *+10 REQUEST ALLOCATION OF A CLASS BUFFER: DEF D17N CLASS READ (NO ABORT: 100021B) DEF CONW1 CONWORDS (LU =0 + FLAGS, ETC.) DEF DABUF DATA BUFFER ADDRESS. DEF DALEN DATA BUFFER LENGTH. DEF RQB+#ZOF Z BUF. ADDRESS OR OPTIONAL PARAMETER. DEF RQB+#ZLN Z BUF. LENGTH OR 2ND OPTIONAL PARAMETER. DEF #EXTC TEMPORARY CLASS (NO WAIT). DEF ZERO (OPTIONAL PARAMETER IV--NOT USED) DEF RQB+#KEY KEYWORD (RN)--IF ANY. JMP ERRTN SYSTEM-DETECTED ERROR: TELL CALLER! * SSA IF THE REQUEST WAS NOT PROPERLY QUEUED, JMP ERDS8 THEN TELL CALLER: RESOURCE PROBLEM. JMP SAVRQ GO SAVE REQUEST AND START I/O OPERATION. * CONTL JSB XLUEX RC=3 (RTE-L) DEF *+10 REQUEST ALLOCATION OF A CLASS BUFFER: DEF D19N CLASS CONTROL (NO ABORT: 100023B). DEF CONW1 CONWORDS (LU =0 + FLAGS, ETC.) DEF RQB+#PRM OPTIONAL PARAMETER. DEF #EXTC TEMPORARY CLASS (NO WAIT). DEF RQB+#PR2 2ND OPTIONAL PARAMETER. DEF RQB+#ZOF Z BUF. ADDRESS OR 3RD OPTIONAL PARAMETER. DEF RQB+#ZLN Z BUF. LENGTH OR 4TH OPTIONAL PARAMETER. DEF ZERO (OPTIONAL PARAMETER IV--NOT USED). DEF RQB+#KEY KEYWORD (RN)--IF ANY. JMP ERRTN SYSTEM-DETECTED ERROR: TELL CALLER. * SSA IF THE REQUEST WAS NOT PROPERLY QUEUED, JMP ERDS8 THEN TELL CALLER: RESOURCE PROBLEM. * LDA RQB+#PR2 ENSURE RTE-L PROCESSING OF 2ND PARAM. SDLEN STA DALEN SET PARAMETER FOR REQUEUEING. JMP SAVRQ GO SAVE REQUEST AND START I/O OPERATION. * SKP SAVRQ JSB #GETR PERFORM A ZERO LENGTH 'GET' DEF *+4 IN ORDER TO OBTAIN A SEARCH KEY. DEF #EXTC TEMPORARY CLASS (NO WAIT/BUFFER SAVE). DEF * DUMMY BUFFER ADDRESS. DEF ZERO NO DATA IS TO BE TRANSFERRED. JMP RLTMP SYSTEM DETECTED ERROR. * JSB .STY RETRIEVE CLASS BUFFER ADDRESS(IN S.A.M.) DEF #SKEY SAVE AS SEARCH KEY. * JSB EXEC POST THE SEARCH KEY AND THE REQUEST DEF *+8 IN THE HOLDING CLASS FOR SAFE KEEPING. DEF D20N CLASS WRITE-READ (NO ABORT). DEF ZERO LU =0: MAILBOX OPERATION. DEF #SKEY FIRST WORD IS SEARCH KEY. DEF SAVLN LENGTH OF PARTIAL REQUEST + SEARCH KEY. DEF ZERO OPTIONAL PARAMETERS DEF ZERO ARE NOT REQUIRED. DEF #EXHC REQUEST HOLDING CLASS(NO WAIT). JMP RLTMP SYSTEM DETECTED ERROR: REPORT IT! * SSA IF THE REQUEST WAS NOT PROPERLY QUEUED, JMP RLTMP CLEAN UP AND INFORM THE CALLER. * LDA RCODE GET CURRENT REQUEST CODE. LDB RQB+#PRM PREPARE FOR CONTROL REQUEST REQUEUEING. CPA D3 IF PROCESSING A CONTROL REQUEST, THEN STB DABUF MOVE OPTIONAL PRAM. #1 FOR OVERLAY. * JSB #RQUE TRANSFER THE DEF *+10 QUEUED REQUEST DEF EXCOD ONTO THE DEF RQB+#CNW SPECIFIED DEVICE. DEF DABUF OVERLAY DATA (EXCEPT FOR RC=3), IN ORDER DEF DALEN TO SET CORRECT LENGTH INTO CLASS HEADER. DEF RQB+#ZOF Z BUFFER/OPTIONAL PRAM.3. DEF RQB+#ZLN Z LENGTH/OPTIONAL PRAM.4. DEF SAVCL SPECIFY COMPLETION VIA CLASS. DEF #EXTC OBTAIN BUFFER FROM TEMPORARY CLASS. DEF RQB+#KEY PASS KEYWORD(RN)--IF ANY. JMP RLT&H ERROR: CLEAN UP & TELL CALLER. * JMP CLNP0 RELEASE CURRENT REQUEST & AWAIT ANOTHER. * SKP RLT&H DST RQB+#EC1 SAVE ERROR CODE FROM <#RQUE>. LDA BIT6 SET ERROR QUALIFIER (BITS#7-4) =4, STA XMERQ TO INDICATE <#RQUE> AS ERROR SOURCE. * JSB #NQUE FIND THE RECENTLY-SAVED REQUEST BUFFER. DEF *+9 DEF DM30 SEARCH WITHIN THE DATA BUFFER. DEF ZERO LU =0: CLASS TO CLASS REQUEUEING. DEF #SKEY SEARCH KEY= CLASS BUFFER ADDRESS. DEF DM1 1'S COMPLEMENT: 1 WORD SEARCH FOR WORD#1. DEF ZERO IGNORE THE NON-EXISTENT DEF ZERO Z BUFFER SPECIFICATIONS. DEF EXTCL REQUEUE BUFFER TO TEMPORARY CLASS. DEF #EXHC BUFFER CAN BE FOUND IN HOLD CLASS. NOP IGNORE ERRORS (THIS IS ERROR RECOVERY). * RLTMP JSB EXEC DO ZERO-LENGTH 'GETS' DEF *+5 UNTIL THE CLASS IS 'CLEAN'. DEF D21N DEF EXTCL DEF * DEF ZERO JMP ERTST ERROR, JUMP OUT NOW--SOMETHING IS AMISS! CCE,INA,SZA ALL BUFFERS RELEASED? [E=1,FOR ERRORS] JMP RLTMP NO, CONTINUE RELEASING THEM. * ERTST CPA XMERQ YES. WAS ERROR DETECTED BY <#RQUE> ? JMP ERDS8 NO, RETURN DS08: RESOURCE PROBLEM! JMP DONE0 YES. ERROR CODES ARE ALREADY SET. * SKP * READ/WRITE/CONTROL CLASS-COMPLETION PROCESSING * RWCMP JSB #RQUE LOCATE THE SAVED REQUEST BUFFER. DEF *+9 DEF DM30 SEARCH WITHIN THE DATA BUFFER. DEF ZERO LU =0: CLASS TO CLASS REQUEUEING. DEF #SKEY SEARCH KEY= CLASS BUFFER ADDRESS. DEF DM1 1'S COMPLEMENT: 1 WORD SEARCH FOR WORD#1. DEF ZERO IGNORE THE NON-EXISTENT DEF ZERO Z BUFFER SPECIFICATIONS. DEF EXHCL REQUEUE THE LOCATED REQUEST DEF EXHCL ONTO THE HEAD OF THE HOLDING CLASS. JMP CLNP0 REQUEST NOT LOCATED: CLEANUP. * JSB EXEC RETRIEVE PART OF THE ORIGINAL REQUEST. DEF *+5 DEF D21N DEF EXHCL FROM HEAD OF HOLDING CLASS. DEF #SKEY PASS REQUEST DATA DIRECTLY DEF SAVLN INTO <#SLAV'S> REQUEST BUFFER. JMP CLNP0 CLEAN UP (CANNOT REPLY SANS NODE NO.) * CLE LDB SAMRC GET THE I/O COMPLETION CODE. CPB D3 IF IT IS A CONTROL REQUEST, JMP FINIS THEN GO TO PREPARE THE REPLY. [=0] * LDA RQB+#CWX GET THE CALLER'S CONTROL WORD. ALF,ELA POSITION WRITE-READ BIT(#11) TO . LDA RQB+#BFL 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 DALEN WRITE-READ: SAVE READ LENGTH FOR <#RQUE>, STB RCODE AND INITIALIZE 'RCODE' FOR 'REQUE'. JMP RWCTL PROCESS A '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 LDA RQB+#CNW IF THE USER'S LOGICAL UNIT NO. AND B377 FOR THE REQUESTED READ OPERATION WAS SZA,RSS LU #0 (THE 'BIT BUCKET'), THEN RETURN CLB ONLY TRANSMISSION LOG WITHOUT DATA. STB DALEN SAVE THE REPLY DATA-LENGTH FOR <#SLAV>. * FINIS DLD SAVA GET THE REGISTERS FOR CALLER. JMP DONE GO COMPLETE THE REPLY.[=0: NO ERRORS] * SPC 2 HED EXECM: TERMINATION/SCHEDULE/STATUS REQUESTS *(C) HEWLETT-PACKARD CO.1980* * * PROGRAM SCHEDULE, TIMED EXECUTION, AND PROGRAM TERMINATION * PKILL LDA $OPSY PROGRAM TERMINATION. RC=6 CPA DM31 IF ENVIRONMENT IS RTE-L, THEN JMP ERDS6 TERMINATION OF A SON IS NOT SUPPORTED! * SCHED JSB ATCHS GO TO ATTACH A POSSIBLE SCB. * 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. * LDA TEMP+3 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 L#PGN GET THE MINIMUM BUFFER SIZE. LDB RTNDF GET THE DEFAULT RETURN POINTER. ADA REQLN SUBTRACT MINIMUM FROM ACTUAL 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 ! * JSB .CAX YES. SAVE ADDITIONAL PARAMETER COUNT. LDA UPRDF = 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. JSB .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. CMA,INA,SZA,RSS FORM A NEGATIVE VALUE. ANY DATA? JMP ERSC2 NO--IMPROPER PARAMETERS! * LDB DBMAX 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! * LDA DABFA GET THE LOCAL DATA BUFFER ADDRESS. STA STRAD ESTABLISH STRING BUFFER ADDRESS IN CALL. * 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 EXCOD REQUEST CODE (SUPPLIED BY CALLER) DEF RQB+#CNW 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 L#TYR GET THE REPLY SIZE. STA RPLYL SET THE REPLY LENGTH * JSB EXEC REQUEST CURRENT SYSTEM TIME. DEF *+4 DEF EXCOD RCODE = 11 (SIGN IS SET). DEF RQB+#TMS TIME IS RETURNED TO REPLY BUFFER. DEF RQB+#TYR SO IS THE YEAR. CCE,RSS RETURN ERROR-INFO TO THE CALLER! CLE ALL IS WELL, SO JMP DONE RETURN THE TIME DATA. SKP * I/O OR PARTITION STATUS-REQUEST PROCESSING * PARST EQU * RC=25 ISTAT LDA L#ST3 GET THE REPLY SIZE. RC=13 STA RPLYL SET THE LENGTH OF THE REPLY LDA RCODE GET THE REQUEST CODE. CPA D25 IF REQUEST IS FOR PARTITION STATUS, JMP STPAR GO TO COMPLY. * JSB ATCHS ATTACH A POSSIBLE SCB, AND GET TRUE LU. * LDB $OPSY IF EXECUTING IN AN CPB DM31 RTE-L OPERATING SYSTEM, THEN JMP LSTAT USE SPECIAL I/O STATUS PROCESSING. * JSB XLUEX REQUEST STATUS FOR THE I/O DEVICE. DEF *+6 DEF EXCOD RCODE = 13 (SIGN IS SET). DEF RQB+#CNW CONWORD (EXTENDED LU FORMAT) DEF RQB+#ST1 RETURN- EQT WORD#5 DEF RQB+#ST2 RETURN- EQT WORD#4 DEF RQB+#ST3 RETURN- LOGICAL UNIT STATUS CCE,RSS 'EXEC' ERROR-INFO RETURNED TO CALLER. CLE NO ERROR JMP DONE RETURN TO CALLER WITH STATUS INFO. * STPAR JSB EXEC PROCESS A PARTITION STATUS REQUEST DEF *+6 DEF EXCOD RCODE = 25 (SIGN IS SET) DEF RQB+#CNW REFERENCE TO PARTITION NUMBER. DEF RQB+#ST1 RETURN- FIRST PAGE NUMBER. DEF RQB+#ST2 RETURN- NUMBER OF PAGES. DEF RQB+#ST3 RETURN- PARTITION STATUS. CCE,RSS ERROR DETECTED. CLE NO ERROR JMP DONE RETURN TO CALLER WITH STATUS INFO. * LSTAT JSB XLUEX REQUEST DEVICE STATUS FROM RTE-L. DEF *+7 DEF EXCOD RCODE =13 (SIGN IS SET). DEF RQB+#CNW CONWORD (EXTENDED LU FORMAT). DEF RQB+#ST1 RETURN: DVT WORD #6. DEF RQB+#ST2 RETURN: IPT WORD #6. DEF DABUF RETURN: $DVTP, OR $DVTP BUFFER ADDRESS. DEF RQB+#ZLN RETURN: $DVTP+1, OR BUFFER LENGTH. CCE,RSS RETURN FOR SYSTEM-DETECTED ERROR. CLE NORMAL RETURN. SEZ IF AN ERROR WAS DETECTED, JMP DONE RETURN WITH ERROR CODES. * DST RQB+#EQ5 SAVE REGISTERS, TEMPORARILY. LDA RQB+#CWX GET THE USER'S CONTROL WORD #2. ALF,SLA WAS EXTENSIVE $DVTP INFO REQUESTED? JMP ZRQST YES, GO TO PROCESS RETURN OF DATA. * LDA DABUF NO, GET RETURNED $DVTP WORD #1, LDB RQB+#ZLN AND $DVTP WORD #2. DST RQB+#ST3 RETURN BOTH IN REPLY BUFFER. JMP DONE0 BYPASS UPDATE, AND SEND REPLY. * ZRQST LDA RQB+#ZLN RETRIEVE USER'S REQUEST LENGTH VALUE. SSA,RSS IF NEGATIVE, SKIP TO MAKE POSITIVE; JMP ZWRDS ELSE, GO CONFIGURE REPLY LENGTH. ARS CONVERT TO NEGATIVE WORDS, AND CMA,INA FINALLY, TO POSITIVE WORDS. ZWRDS STA DALEN CONFIGURE REPLY DATA LENGTH. CMA,INA SET RETURNED REGISTERS TO STA B NEGATIVE LENGTH: SIGNALS DATA RETURNED. JMP DONE GO TO SEND THE REPLY. * SKP * * PASS CURRENT REQUEST FROM STREAM 5 TO STREAM 3. * PASON JSB CLTCB GO TO CLEAR RECORD FROM STREAM. STA RQB+#SEQ REPLACE THE ORIGINAL SEQUENCE NUMBER. LDA RQB+#STR GET THE STREAM WORD RC=6,9,23,24 XOR D6 CONVERT TO STREAM-3 . STA RQB+#STR REPLACE STREAM TYPE IN REQUEST BUFFER. LDA D2 INDICATE AN OVERLAY REQUEST STA RPLYL FOR THE TWO MODIFIED WORDS. * JSB #RQUE RE-QUEUE DEF *+9 THE REQUEST DEF D20N DEF ZBIT DEF DABUF DEF DALEN DEF RQB DEF RPLYL DEF #GRPM TO CLASS DEF SAVCL FROM CLASS CCE,RSS ERROR: SKIP TO INFORM ORIGINATOR. JMP GET GO TO AWAIT NEXT REQUEST/COMPLETION. * DST RQB+#EC1 SAVE ERROR CODE FROM <#RQUE>. LDA BIT6 SET ERROR QUALIFIER (BITS#7-4) =4, STA XMERQ TO INDICATE <#RQUE> AS ERROR SOURCE. JMP DONE0 GO TO RETURN ERROR TO ORIGINATOR [E=1]. * SKP * THE FOLLOWING PROGRAM-STATUS REQUEST PROCESSING IS SUPPORTED * >>>>>>>>>>>>>>>> IN DS/1000 NETWORKS--ONLY! <<<<<<<<<<<<<<<< * PGMST LDA L#KST ESTABLISH REPLY LENGTH TO RC=99 STA RPLYL INCLUDE ONE RETURN PARAMETER. JSB PSTAT GO TO GET THE PROGRAM'S STATUS. SZA DOES THE PROGRAM EXIST? JMP GETST YES. GO TO PROCESS THE STATUS. CCB NO. SET =-1 FOR ERROR INDICATION, STB RQB+#KST AND SAVE FOR RETURN TO CALLER. JMP GETDS GO TO RETURN THE ERROR INFORMATION. * GETST LDA B GET THE STATUS WORD. AND D15 ISOLATE THE STATUS. RAL,ERA INCLUDE THE 'SEGMENT' FLAG. STA RQB+#KST SAVE FOR RETURN TO THE CALLER. CLB,CLE =0 FOR RETURN TO CALLER. JMP DONE RETURN THE INFO TO THE CALLER. * HED EXECM: PROCESSING SUBROUTINES.* (C) HEWLETT-PACKARD CO. 1980 * * REMOTE SESSION PROCESSOR: ATTACH TO SESSION CONTROL BLOCK & TRANSLATE LU. * ATCHS NOP ENTER: = DON'T CARE. LDA RQB+#SID GET SESSION ID WORD FROM HEADER. AND B377 ISOLATE DEST. SESSION ID (BITS 0-7) STA TEMP SAVE SESSION ID FOR CALL. * JSB #ATCH ATTACH TO THE SESSION CONTROL BLOCK. DEF *+2 DEF TEMP CPA DM1 JMP ERS01 ERROR: RS01 SCB NOT FOUND! * LDA RCODE GET USER'S REQUEST CODE. CPA D13 STATUS REQUEST? JMP GETRU YES. GO TO TRANSLATE THE LOGICAL UNIT. * AND DM4 IF THE REQUEST CODE IS NOT SZA READ, WRITE, OR CONTROL, JMP ATCHS,I THEN, LU TRANSLATION IS NOT REQUIRED. * GETRU LDB RQB+#ICD GET REQUEST CODE PARAMETER. BLF POSITION 'DLUEX' FLAG TO LSB. LDA RQB+#CNW GET USER'S CONTROL WORD. AND B377 ISOLATE 8-BIT LOGICAL UNIT FIELD. SLB,RSS IF THIS IS A STANDARD CONWORD, AND B77 THEN LOGICAL UNIT FIELD IS 6 BITS WIDE. STA TEMP SAVE THE LU FOR A CALL TO 'LUTRU'. XOR RQB+#CNW ISOLATE REMAINDER OF SINGLE-WORD CONWORD. SLB IF THIS IS A SINGLE-WORD CONWORD, SKIP; LDA RQB+#CWX ELSE, GET SECOND PART FROM USER, STA RQB+#CWX CONFIGURE WORD#2 OF CONWORD(S), STA CONW2 AND CONWORD #2 FOR 'XLUEX' CALL. SLB,RSS IF THIS WAS NOT A 'DLUEX' REQUEST, JMP UNMAP THEN, GO TO TRANSLATE THE LOGICAL UNIT. * LDA RQB+#CNW GET WORD #1 OF CONWORD PAIR. SSA IF USER DOES NOT DESIRE LU TRANSLATION, JMP ATCHS,I THEN NO FURTHER PROCESSING IS REQUIRED. * UNMAP JSB LUTRU TRANSLATE THE USER'S DEF *+3 LOGICAL UNIT NUMBER DEF TEMP FROM HIS KNOWN REFERENCE DEF TEMP+1 TO THE ACTUAL SYSTEM LU NUMBER. * LDA TEMP+1 GET THE ACTUAL LOGICAL UNIT NUMBER. CPA DM1 IF 'LUTRU' RETURNED A -1, THEN JMP ERI12 THE LU IS NOT DEFINED FOR THIS SESSION! * IOR BIT15 SET SIGN FOF WORD #1: ALREADY UN-MAPPED. STA RQB+#CNW CONFIGURE ACTUAL LU INTO CONTROL WORD. JMP ATCHS,I RETURN: = MEANINGLESS. * SKP * CLNUP JSB CLTCB ELIMINATE RECORD OF OFFENDING REQUEST. JMP CLNP0 COMPLETE THE CLEAN UP PROCESS. * SPC 3 CLTCB NOP ENTRY/EXIT: TCB-CLEARING PROCESSOR. JSB #RSAX GO TO THE TCB-MANAGEMENT PROCESSOR DEF *+4 TO CLEAR THE RECORD OF THE CURRENT DEF D7 SLAVE-STREAM ENTRY - WHICH IS DEF RQB+#SEQ IDENTIFIED BY IT'S SEQUENCE NUMBER- DEF RQB+#STR AND STREAM NO. SSB,RSS IF THE OPERATION WAS SUCCESSFUL, JMP CLTCB,I RETURN TO CALLER. [= ORIG. SEQ. NO.] * CLNP0 LDB $OPSY GET OP-SYSTEM IDENTIFIER. CPB DM31 IF THIS IS AN RTE-L SYSTEM, JMP CLRTN SKIP BLOCK-SIZE RESET OPERATION. * JSB #RQUE RESET THE POSSIBLE DEF *+9 NEGATIVE BLOCK-SIZE WORD, DEF D20N BEFORE ATTEMPTING TO DEF ZBIT RELEASE THE CLASS BUFFER. DEF * DEF D0 DEF * DEF D0 DEF DM1 DEF PURCL NOP ERROR--IGNORE. * CLRTN JSB EXEC RETURN THE CURRENT CLASS BUFFER. DEF *+5 DEF D21N CLASS GET. DEF PURCL CLASS/BUFFER RELEASE/SAVE CLASS. DEF * DUMMY DATA-BUFFER ADDRESS. DEF D0 DATA NOT DESIRED. NOP JMP GET RETURN TO AWAIT A NEW REQUEST/COMPLETION. * SPC 3 PSTAT NOP PROGRAM STATUS SUBROUTINE. JSB PGMAD DEF *+6 DEF RQB+#PGN PROGRAM 'NAME' IS IN REQUEST BUFFER. DEF TEMP RETURNED SPEC'D ID SEGMENT ADDRESS. DEF TEMP+1 RETURNED PROGRAM STATUS. DEF TEMP+2 RETURNED ID SEGMENT TYPE. DEF TEMP+3 RETURNED FATHER ID SEGMENT. JMP PSTAT,I RETURN. * SKP PLOG NOP REQUEST BUFFER LOGGING ROUTINE. LDB #PLOG GET THE REQUEST-LOGGER'S CLASS NO. SZB,RSS IS LOGGING DESIRED? JMP PLXIT NO. RETURN TO NORMAL PROCESSING. * STB PSTAT YES. SAVE THE CLASS NO. LOCALLY. * JSB EXEC COPY DEF *+8 THE DEF D20N REQUEST & DATA DEF ZBIT BUFFERS, DEF DABUF IN THE DEF SAVB EXPECTED DEF RQB FORMAT, DEF REQLN TO THE DEF PSTAT LOGGER'S NOP CLASS. * PLXIT LDA TEMP RESTORE THE LOCAL STA RQB+#SEQ SEQUENCE NO. TO REQUEST BUFFER. JMP PLOG,I CONTINUE NORMAL PROCESSING. * SKP DM1 DEC -1 DM4 DEC -4 DM30 DEC -30 DM31 DEC -31 D1 DEC 1 D2 DEC 2 D3 DEC 3 D5 DEC 5 D6 DEC 6 D7 DEC 7 D13 DEC 13 D15 DEC 15 D16 DEC 16 D25 DEC 25 D16N OCT 100020 D17N OCT 100021 D19N OCT 100023 CLASS-CONTROL--NO ABORT D20N OCT 100024 CLASS WRITE-READ--NO ABORT. D21N OCT 100025 D99 DEC 99 PROGRAM STATUS REQUEST CODE. B77 OCT 77 B377 OCT 377 BIT5 OCT 40 BIT6 OCT 100 BIT12 OCT 10000 * MAINTAIN ORDER OF 'BIT15', 'CONW1', AND 'CONW2'. BIT15 OCT 100000 CONW1 EQU BIT15 WORD #1 OF DUAL CONWORD (LU=0). CONW2 NOP #2 OF DUAL CONWORD (FLAGS, ETC.) EXCOD NOP REQUEST CODE WITH NO-ABORT FLAG (BIT#15). RCODE NOP CURRENT REQUEST CODE. ZBIT EQU BIT12 DOUBLE-BUFFER BIT(#12). REQLN NOP REQUEST BUFFER LENGTH. SAMRC NOP RETURNED I/O REQUEST CODE. TCBAD NOP TCB ADDRESS. * RPLYL NOP REPLY LENGTH (CONFIGURED). DALEN NOP BUFFER LENGTH/CONTROL PARAMETER EXHCL NOP HOLD CLASS W/O BUFFER SAVE BIT. EXTCL NOP TEMP CLASS W/O BUFFER SAVE BIT. LASTA DEF ENDBF RTNDF DEF PR3AD UPRDF DEF RQB+#PMS UPMSK OCT 177400 XEQT NOP CONFIGURED ID ADDRESS OF . ZERO EQU D0 * * * * DO NOT CHANGE ORDER OF NEXT 4 STATEMENTS * * * * ERRIN CCE,RSS CONFIGURED-'EXEC'-REQUEST CLE ERROR-DETECTION INSTRUCTIONS. SAVA NOP REGISTER STORAGE FOR SAVB NOP AND FOR . * * * * * * * * * * * * * * * * * * * * * * * * * * * SKP * * PRE-PROCESSOR 'JUMP' TABLE. * LOW1 DEF RWC RCODE 1 = READ REQ DEF RWC RCODE 2 = WRITE REQ DEF RWC RCODE 3 = CONTROL DEF ERDS6 RCODE 4 = UNDEFINED(DISC ALLOC) DEF ERDS6 RCODE 5 = UNDEFINED (PKG.TRK.REL) DEF PKILL RCODE 6 = PROGRAM TERMINATION DEF ERDS6 RCODE 7 = UNDEFINED(PRG.SUSPEND) DEF ERDS6 RCODE 8 = UNDEFINED(SEG.LOAD) DEF PASON RCODE 9 = SCHEDULE W/WAIT DEF SCHED RCODE 10= PROGRAM SCHED(WON'T WAIT) DEF STIME RCODE 11= TIME REQUEST DEF SCHED RCODE 12= EXECUTION TIME DEF ISTAT RCODE 13= I/O STATUS DEF ERDS6 RCODE 14= UNDEFINED (STRING GET) DEF ERDS6 RCODE 15= UNDEFINED (GLOBAL TRK. ALLOC.) DEF ERDS6 RCODE 16= UNDEFINED (GLOBAL TRK. RLS.) DEF ERDS6 RCODE 17= UNDEFINED (CLASS READ) DEF ERDS6 RCODE 18= UNDEFINED (CLASS WRITE) DEF ERDS6 RCODE 19= UNDEFINED (CLASS CONTROL) DEF ERDS6 RCODE 20= UNDEFINED (CLASS WRITE-READ) DEF ERDS6 RCODE 21= UNDEFINED (CLASS GET) DEF ERDS6 RCODE 22= UNDEFINED (SWAP CONTROL) DEF PASON RCODE 23= QUEUE-SCHEDULE W/WAIT DEF PASON RCODE 24= QUEUE-SCHEDULE W/O WAIT DEF PARST RCODE 25= PARTITION STATUS DEF ERDS6 RCODE 26= UNDEFINED (MEMORY SIZE RTE-IV) TABAD DEF *,I * UPLIM ABS LOW1-* REQUEST CODE LIMIT-VALUE: -(MAX. RCODE+1) * DBMAX ABS #DBS CONSTANT: MAXIMUM DATA BUFFER SIZE. L#MHD ABS #MHD MINIMUM REPLY LENGTH L#IBL ABS #IBL+1 MAXIMUM REQ LENGTH. L#TYR ABS #TYR+1 RC=11 (TIME REQUEST) REPLY LENGTH. L#ST3 ABS #ST3+1 I/O OR PARTITION STATUS REPLY LENGTH. L#KST ABS #KST+1 RC=99 (PROGRAM STATUS) REPLY LENGTH. MAXRQ ABS #DLW MAXIMUM REQUEST LENGTH. SAVLN ABS #BFL+2 MAXIMUM HOLD-CLASS REQUEST LENGTH. L#PGN ABS -#PGN-3 -(MINIMUM REQUEST LENGTH) FOR RC=10. SPC 1 DABUF BSS #DBS DATA BUFFER RQB EQU #RPB REQUEST BUFFER (EXTERNAL) SAVCL NOP CLASS NO. W/BUFFER-SAVE & CLASS-SAVE PURCL NOP CLASS NO. W/CLASS-SAVE ONLY. TEMP BSS 4 * HED EXECM: INITIAL CONFIGURATION * (C) HEWLETT-PACKARD CO. 1980 ORG DABUF CONFIGURATION: EXECUTED ON FIRST ENTRY. * CONFG NOP LDA $OPSY GET THE SYSTEM SPECIFICATION. AND D2 ISOLATE THE DMS BIT(#1). SZA,RSS IF THIS IS NOT A DMS SYSTEM, JMP NODMS THEN NO NEED TO MODIFY CODE; DLD XSAI CHANGE THE 'STA B,I' INSTRUCTION DST DMS1 TO DMS'S 'XSA B,I' EQUIVALENT. DLD XLAI CHANGE THE 'LDA B,I' INSTRUCTION DST DMS2 TO DMS'S 'XLA B,I' EQUIVALENT. NODMS JSB DIRCT GET A DIRECT ADDRESS FOR THE DEF RTNDF CONFIGURED-CALL RETURN POINTER. JSB DIRCT GET A DIRECT ADDRESS FOR THE DEF UPRDF POINTER INTO THE REQUEST BUFFER. JSB DIRCT GET A DIRECT ADDRESS FOR THE DEF RQBAD POINTER TO THE REQUEST BUFFER. JSB DIRCT GET A DIRECT ADDRESS FOR THE DEF DABFA POINTER TO THE DATA BUFFER. * JSB CLRQ CLEAR AND DEF *+3 RELEASE DEF D2NA DEF #EXHC HOLDING CLASS. NOP [IGNORE ERRORS] * JSB CLRQ REQUEST A DEF *+3 NEW HOLDING CLASS DEF D1NA FOR USE BY DEF #EXHC IN TEMPORARY REQUEST STORAGE. JMP TERM ERROR!! WE CANNOT PROCEED! * LDA #EXHC GET THE RETURNED CLASS NUMBER. IOR CLCD1 INCLUDE NO-WAIT/SAVE BUFFER BITS, STA #EXHC AND CONFIGURE HOLDING CLASS WORD. XOR CLCD2 FORM NO-WAIT/SAVE CLASS PARAMETER, STA EXHCL AND CONFIGURE THE CLASS CLEANUP WORD. * JSB CLRQ CLEAR AND DEF *+3 RELEASE DEF D2NA DEF #EXTC TEMPORARY CLASS. NOP [IGNORE ERRORS] * JSB CLRQ REQUEST A DEF *+3 NEW TEMPORARY CLASS DEF D1NA FOR USE BY DEF #EXTC IN DETERMINING BUFFER ADDRESS. JMP TERM ERROR!! WE CANNOT PROCEED! * LDA #EXTC GET RETURNED CLASS NUMBER. IOR CLCD1 INCLUDE NO WAIT/SAVE BUFFER BITS, STA #EXTC AND CONFIGURE TEMP. CLASS WORD. XOR CLCD2 FORM NO-WAIT/SAVE CLASS PARAMETER, STA EXTCL AND CONFIGURE CLASS CLEANUP WORD. * CLB NO NEED TO GO STB FIRST THRU THIS AGAIN. JMP CONFG,I GO TO START OPERATIONS. * CLCD1 OCT 140000 NO WAIT/SAVE BUFFER. CLCD2 OCT 060000 NO WAIT/SAVE CLASS. D1NA OCT 140001 D2NA OCT 140002 XLAI XLA B,I 'XLA' INSTRUCTION. XSAI XSA B,I 'XSA' INSTRUCTION. * DIRCT NOP DIRECT ADDRESS TRACK-DOWN ROUTINE. LDA DIRCT,I GET LOCATION OF DEF INSTRUCTION. STA B SAVE, TEMPORARILY. LDA A,I TRACK DOWN RAL,CLE,SLA,ERA A JMP *-2 DIRECT ADDRESS. STA B,I ESTABLISH DIRECT ADDRESS, AS REQUESTED. ISZ DIRCT SET RETURN FOR P+2, JMP DIRCT,I AND RETURN TO THE CALLER. * TERM JSB EXEC CALL IT QUITS! DEF *+2 WE CANNOT OBTAIN DEF D6 SUFFICIENT RESOURCES! * ORR SIZE * END EXECM