ASMB,Q,C HED DEXEC: DS/1000 REMOTE EXEC ROUTINE *(C) HEWLETT-PACKARD CO.1980* NAM DEXEC,7 91750-1X067 REV.2013 800924 ALL SUP * *************************************************************** * * (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. * * *************************************************************** * NAME: DEXEC * SOURCE: 91750-18067 * RELOC: 91750-1X067 * PGMR: C. HAMILTON [ 07/28/77 ] * MODIF'D: GAB [790206] TO REPLACE EXTENDED INSTR'S W/ JSB'S * MODIF'D: JDH [790213] FOR DS REQUEST EQUATED OFFSETS. * MODIF'D: CCH [08/05/80] FOR 91750. SPC 1 * (DISTRIBUTED EXECUTIVE) IS THE DS/1000 USER INTERFACE FOR * 'TRANSPORTABLE' CALLS TO EITHER THE LOCAL, OR REMOTE-NODE RTE SYSTEM. * * WILL ACCEPT ALL VALID REQUEST CODES FOR 'LOCAL' EXECUTION. * * FOR EXECUTION AT A REMOTE NODE, WILL ACCEPT REQUEST CODES: * 1, 2, 3, 6, 9, 10, 11, 12, 13, 23, 24, 25, <99> * ONLY * * * ** UNACCEPTABLE REQUESTS WILL BE REJECTED WITH A "DS06" ERROR! * ** "IO01" IS RETURNED UPON DETECTION OF INCORRECT, MISSING, OR * TOO MANY (>9) PARAMETERS. * ** "IO04" WILL BE RETURNED FOR BUFFER-ERROR SPECIFICATIONS: * REMOTE READ/WRITE BUFFER LENGTH GREATER THAN 512 WORDS, * INTERACTIVE WRITE LENGTH > READ LENGTH, 'Z' BUFFER LENGTH =0. * ** "SC01" INDICATES A MISSING SCHEDULING PARAMETER. * ** "SC05" INDICATES AN IMPROPER PROGRAM NAME SPECIFICATION. * ** ERROR QUALIFIERS SET TO: 0-SYSTEM, 1-DEXEC, 2-EXECM, 3-EXECW, 4-#RQUE * * REQUEST CODES: 1,2,3,6,10,11,12,13,25,99 WILL BE TRANSMITTED TO THE REMOTE * NODE, VIA STREAM #5, TO BE PROCESSED BY . MASTER (THIS NODE), * AND SLAVE (REMOTE NODE) TIMEOUTS, ESTABLISHED WITH , WILL BE * USED TO PROCESS THESE REQUESTS. REQUEST CODES: 9,23,24 WILL BE * TRANSMITTED TO THE REMOTE NODE, VIA STREAM #3, TO BE PROCESSED BY * . A LONG MASTER TIMEOUT (APPROX. 20 MIN.) WILL BE ALLOWED, * IN ORDER TO PROVIDE SUFFICIENT TIME FOR SCHEDULE-WITH-WAIT REQUESTS. * * CALLING SEQUENCE: CALL DEXEC(NODE,P1,P2,P3,P4,P5,P6,P7,P8,P9) * * RETURN (X&Y INTACT) : - NORMAL COMPLETION, IF REQUEST CODE SIGN =0 * CONTAIN 'EXEC' RETURN INFORMATION * * : ERROR DETECTED: ABORT & PRINT MESSAGE, IF RC#15 =0 * * : - FOR DETECTED ERRORS, IF RC#15 =1 * CONTAIN ASCII ERROR CODES * * : - FOR NORMAL COMPLETION, IF RC#15 =1 * CONTAIN 'EXEC' RETURN INFORMATION * * NODE - SPECIFIES CALL-EXECUTION LOCATION: LOCAL=-1, REMOTE= 0 TO 32767 * [ CALL WILL ALSO EXECUTE, LOCALLY, IF THE 'LOCAL' NODE IS USED ] * * P1 TO P9 - NORMAL 'EXEC' CALLING PARAMETERS (P1 = REQUEST CODE, ETC.) * * WILL ALLOW THE USER TO PERFORM A COMBINED, INTERACTIVE, * WRITE-READ OPERATION IN A SINGLE CALLING SEQUENCE. SUCH A REQUEST * WILL BE MOST USEFUL FOR EFFICIENTLY COMMUNICATING WITH A REMOTE * OPERATOR. TO SPECIFY AN INTERACTIVE WRITE-READ: REQUEST CODE =1, * CONWORD BIT#11 =1, P8 = WRITE BUFFER ADDRESS, AND P9 = WRITE * BUFFER LENGTH (<=READ BUFFER LENGTH). * * * RCODE=99: PROGRAM STATUS; P2:PGM.NAME ADDR; P3: OPTIONAL STATUS ADDR. * RTN: #15=1: SHORT I.D.,#3-0: STATUS, = 0. * ERR: ='DS', = -1. * * * NOTE: FOR RC=9/23, IF ICODE BIT#11=1, A CLONE PROGRAM MAY BE CREATED, * * IF THE DESTINATION NODE CONTAINS SESSION MONITOR. * * IS AN ALTERNATE ENTRY INTO WHICH MAY BE CALLED WHENEVER * THE USER DESIRES TO PERFORM A REMOTE READ, WRITE, OR I/O STATUS REQUEST * WHICH MUST REFER TO A SYSTEM LOGICAL UNIT NO. GREATER THAN 63 DECIMAL. * SUCH REQUESTS WILL BE PERFORMED VIA THE 'XLUEX' PROCESSOR IN THE REMOTE * NODE. [BIT#12 IS SET IN TRANSMITTED REQUEST CODE PARAMETER, TO NOTIFY * THAT THE REQUEST CONTAINS A DUAL CONTROL WORD.] * * CALLING SEQUENCE: CALL DLUEX(NODE,ICODE,CONWD,P3,P4,P5,P6) * * WHERE: ICODE = 1(READ)/2(WRITE)/3(CONTROL)/13(I/O STATUS) * * CONWD IS A POINTER TO A TWO WORD INTEGER ARRAY: * * * DOUBLE ('XLUEX') CONTROL WORD: * * WORD #1 * *15*14*13*12*11*10* 9* 8* 7* 6* 5* 4* 3* 2* 1* 0* * +-----------------------------------------------+ * ! S! RESERVED ! LOGICAL UNIT ! * +-----------------------------------------------+ * NOTE: WORD #1,S-BIT SPECIFIES NO LU MAPPING USED. * * WORD #2 * *15*14*13*12*11*10* 9* 8* 7* 6* 5* 4* 3* 2* 1* 0* * +-----------------------------------------------+ * ! X! X! X! Z! I! FUNCTION ! RESERVED ! X=DON'T CARE * +-----------------------------------------------+ * NOTE: I-BIT#11 IS INTERACTIVE WRITE-READ FLAG. * * , AN ACCESSIBLE ENTRY POINT, INITIALLY CONTAINS 0; IS SET =$OPSY * IN THE LOCAL NODE, WHEN IS FIRST CALLED; IS SET =$OPSY * FROM THE REMOTE NODE, WHEN A REQUEST IS SUCCESSFULLY COMPLETED BY A * LEVEL 1 NODE; IS SET =0, WHEN A COMMUNICATION ERROR IS DETECTED. * SKP * GLBLK-START * ****************************************************************** * * * G L O B A L B L O C K REV XXXX 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) #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 SPC 1 * * LENGTH DEFINITIONS FOR REQUEST BUFFERS. * L#I/O ABS #KEY+1 REQ LEN FOR DEXEC(1),(2),(3),(13) L#TYR ABS #TYR+1 REQ LEN FOR DEXEC(11) L#ST3 ABS #PM2+1 REQ LEN FOR DEXEC(25) L#PGN ABS #PGN+3 BASE FOR DEXEC(6,9,10,12,23,24,25,99) SPC 10 * * > > > > > C A U T I O N < < < < < < < < < < * SPC 10 * USE CAUTION IF THE PARAMETER PORTION CHANGES FOR THE VARIOUS * REQUESTS. SUBROUTINE NAMP INITIALIZES THE LENGTH TO THE END OF * THE PROGRAM NAME (L#PGN) FOR ICODES 6,9,10,12,23,24,25,99. * THE REMAINDER OF THE LENGTH IS COMPUTED ON THE FLY AS PARAMETERS * ARE MOVED TO THE REQUEST BUFFER. * * ADJUSTMENTS ARE AUTOMATIC IF ONLY THE REQUEST HEADER CHANGES. * SKP ENT DEXEC,DLUEX,D#OPS EXT .ENTR,$LIBR,$LIBX,$OPSY,EXEC,REIO,XLUEX EXT #MAST,#NODE,#RQB,#TILT,PGMAD EXT .ADX,.CYA,.DSX,.ISX,.ISY,.LAX,.LDX,.LDY,.MVW EXT .SAX,.STX,.STY DEXEC NOP JMP *+2 BYPASS ENTRY. DLUEX NOP REMOTE EXTENDED-LU ENTRY. DST SAVEA SAVE FOR RETURN-PARAMETER CHECKS. JSB .STX SAVE REGISTER. DEF SAVEX JSB .STY SAVE THE REGISTER. DEF SAVEY ERA,ALS MOVE TO SIGN BIT. SOC IF THE OVERFLOW BIT IS SET, INA THEN SET BIT #0 ALSO. STA SAVEO SAVE THE STATUS OF . LDA DLUEX IF ENTRY WAS VIA , SZA,RSS THEN SAVE ITS CONTENTS FOR RETURN. LDA DEXEC GET THE RETURN POINTER. STA EXIT SAVE FOR '.ENTR' PROCESSING. STA SAVEN SAVE FOR 'DEXEC'/'DLUEX' DECISIONS. JSB .LDX DEF D12 CLA STA RQB+#ECQ INITIALIZE ERROR QUALIFIER =0(SYSTEM). INIT0 JMP INIT FIRST PASS, ONLY; 'NOP', THEREAFTER. JSB .SAX INITIALIZE PARAMETER AREA DEF PRAMS-1 JSB .DSX JMP *-3 JMP GETPR GO TO OBTAIN PARAMETER ADDRESSES. SPC 1 CALEX JSB RQLEN,I LOCAL-EXECUTION CALL TO EXEC/REIO/XLUEX PRAMS REP 10 PARAMETER ADDRESSES/LOCAL EXECUTION AREA NOP NOP (TEMP) NOP (TEMP+1) ERTST SEZ,RSS LOCAL EXECUTION: ANY ERRORS DETECTED? ISZ EXIT NO. ESTABLISH RETURN TO . DST RQB+#EC1 SAVE FOR RETRIEVAL BY CALLER. JMP RSTEO GO TO RESTORE REGISTERS & RETURN. SPC 1 EXIT NOP GETPR JSB .ENTR GET DIRECT ADDRESSES DEF PRAMS FOR THE USER-SPECIFIED PARAMETERS. * LDA N#DBS INITIALIZE THE DATA BUFFER STA RMNDR REMAINDER CHECK VALUE TO MAXIMUM. LDA DABFA INITIALIZE NEXT AVAILABLE LOCATION STA DBLOC POINTER TO BEGINNING OF DATA BUFFER. LDA $OPSY INITIALIZE THE OPSYSTEM IDENTIFIER STA D#OPS TO REFER TO THE LOCAL NODE. * LDA PRAMS+1 GET THE ADDRESS OF THE REQUEST CODE. SZA,RSS WAS THE PARAMETER PROVIDED? JMP ERDS6 NOT PROVIDED, ERROR! * LDA PRAMS+1,I GET THE REQUEST CODE. AND CLNMS REMOVE 'CLONE-OK' BIT(#11)--IF ANY. STA RCODE SAVE FOR POSSIBLE USE IN LOCAL REQUEST. RAL,CLE,ERA REMOVE THE NO-ABORT BIT, AND SAVE IN STA ICODE ICODE FOR MAPPING & POST PROCESSING. * LDB A CARRY MASKED REQUEST CODE IN . LDA PRAMS,I GET THE DESTINATION CPA #NODE FOR US ? JMP LOCAL YES. GO TO LOCAL PROCESSING. INA,SZA,RSS IS IT AN ABSOLUTE LOCAL REFERENCE? JMP LOCAL YES. GO TO LOCAL PROCESSING. * SPLOC JSB .LDX GET MAX. REQ/REPLY LENGTH. DEF C#DLW INITIALIZE BUFFER SIZE COUNT IN . CLA,CCE =0: BUFFER INIT; =1: CONWORD PREP. JSB .SAX INITIALIZE THE DEF RQB-1 REQUEST BUFFER JSB .DSX TO CONTAIN JMP *-3 ALL ZEROES. * STA WRLEN SET THE 'NO DATA' STA RDLEN DEFAULT CONDITIONS. ERA SET THE 'ERROR-RETURN' FLAG FOR STA CONWD THE <#MAST> CALLING SEQUENCE. * LDA PRAMS,I GET THE DESTINATION STA RQB+#DST SAVE IT IN THE REQUEST LDA D5 GET THE STREAM TYPE STA RQB+#STR SET IT IN THE REQUEST * LDA ICODE GET THE REQUEST CODE CPA D99 IF THE REQUEST IS FOR PROGRAM STATUS, JMP PGMST THEN PROCESS IT INDEPENDENTLY. * SZA REQUEST CODE =0? ADA UPLIM NO. SEE IF IT'S WITHIN SSA,RSS THE RANGE: 0 < RC < 27 ? JMP ERDS6 ERROR, OUT OF RANGE: RC=0, OR RC>26! LDA PRAMS+2 SZA,RSS WAS A THIRD PARAMETER SPECIFIED? JMP ERIO1 NO, ERROR! * SKP LDA SAVEN IF THE ENTRY CPA DEXEC WAS VIA , THEN CLA,RSS AVOID SETTING THE FLAG; LDA BIT12 ELSE, INCLUDE BIT#12 IOR ICODE AND THE CALLER'S REQUEST CODE TO STA RQB+#ICD CONFIGURE THE REQUEST BUFFER ENTRY. * * SELECT THE PRE-PROCESSOR ROUTINE, VIA MAPPED REQUEST CODE. * LDB ICODE MAP USER'S REQUEST CODE, ADB SUBAD USING THE PRE-PROCESS MENU. JMP B,I GO DO IT. * * PRE-PROCESSOR JUMP TABLE * SUBAD DEF SUBS-1,I SUBS DEF ICI/O READ RC=01 DEF ICI/O WRITE RC=02 DEF ICI/O CONTROL RC=03 DEF ERDS6 * TRACK ALLOCATION RC=04 DEF ERDS6 * TRACK RELEASE RC=05 DEF ICOD6 PROGRAM TERMINATION RC=06 DEF ERDS6 * PROGRAM SUSPEND RC=07 DEF ERDS6 * SEGMENT LOAD RC=08 DEF SCHW SCHEDULE W/WAIT RC=09 DEF ICD10 SCHEDULE W/O WAIT RC=10 DEF ICD11 TIME RC=11 DEF ICD12 TIME SCHEDULE RC=12 DEF ICI/O I/O STATUS RC=13 DEF ERDS6 * GET STRING RC=14 DEF ERDS6 * GLOBAL TRACK ALLOCATE RC=15 DEF ERDS6 * GLOBAL TRACK RELEASE RC=16 DEF ERDS6 * CLASS READ RC=17 DEF ERDS6 * CLASS WRITE RC=18 DEF ERDS6 * CLASS CONTROL RC=19 DEF ERDS6 * CLASS WRITE/READ RC=20 DEF ERDS6 * CLASS GET RC=21 DEF ERDS6 * SWAP CONTROL RC=22 DEF SCHW QUEUE-SCHEDULE W/WAIT RC=23 DEF SCHW QUEUE-SCHEDULE W/O WAIT RC=24 DEF PARST PARTITION STATUS RC=25 DEF ERDS6 * MEMORY STATUS (RTE-IV) RC=26 * * = REMOTE REQUEST NOT SUPPORTED. * UPLIM ABS SUBAD-* REQUEST CODE LIMIT-VALUE:-(MAX.RCODE +1) HED DEXEC: PRE-PROCESSORS * (C) HEWLETT-PACKARD CO. 1980 * * PRE-PROCESSING FOR READ, WRITE, CONTROL, AND I/O STATUS (RC=1,2,3,13). * ICI/O DLD PRAMS+2,I GET CONTROL WORD(S). RC=1,2,3,13 STA RQB+#CNW SET IN REQUEST CCE PREPARE FOR A ENTRY. LDA SAVEN IF THIS IS A CPA DEXEC NORMAL REQUEST, CLB,CLE THEN CLEAR , CLEAR , AND STB RQB+#CWX CONFIGURE CONWORD EXTENSION. SEZ,CLE,RSS IF THIS WAS A ENTRY, LDB RQB+#CNW THEN RETRIEVE CONWORD FROM REQUEST. BLF POSITION FOR LATER TEST OF BITS#11,12. STB CONSV SAVE FOR FUTURE USE. CLA LDB ICODE IF THIS IS AN CPB D13 I/O STATUS REQUEST, JMP SET0 THEN FORCE OPTIONAL KEYWORD =0 * LDA PRAMS+9,I ELSE, GET THE KEYWORD--IF ANY, SET0 STA RQB+#KEY AND ADD IT TO THE OUTBOUND REQUEST. ADB DM3 IF THIS IS A READ OR WRITE REQUEST, SSB,RSS SKIP TO PROCESS THE DATA BUFFER; JMP OPTPR ELSE, BYPASS DATA PROCESSING. * LDB PRAMS+4 GET THE BUFFER-LENGTH ADDRESS. RC=1,2 SZB,RSS WAS IT SUPPLIED? JMP ERIO1 NO BUFFER LENGTH PROVIDED, ERROR! * JSB LENCK GO VERIFY & GET BUFFER WORD COUNT. STB RQB+#BFL CONFIGURE BUFFER LENGTH INTO REQUEST. * LDB ICODE GET THE REQUEST CODE. SLB IF THIS IS A READ(1) REQUEST, STA RDLEN THEN CONFIGURE READ LENGTH FOR <#MAST>; SLB,RSS ELSE, IF THIS IS A WRITE(2) REQUEST, STA WRLEN THEN CONFIGURE 'WRLEN' FOR <#MAST>. * LDA PRAMS+3 GET THE BUFFER ADDRESS. SZA,RSS WAS IT SUPPLIED? JMP ERIO1 NO BUFFER, ERROR: IO01! * STA OUTBF INITIALIZE <#MAST> TO REFER BOTH STA INBUF INPUTS & OUTPUTS TO USER'S DATA BUFFER. SLB IF THIS IS A READ REQUEST, JMP OPTPR THEN NO NEED TO MOVE DATA. * LDB CONSV GET THE SHIFTED CONWORD. SLB IF THIS IS A 'Z' BUFFER REQUEST, JSB MDATA THEN MOVE USER'S DATA TO LOCAL BUFFER. * OPTPR CLA PREPARE FOR MISSING PARAMETER. RC=3,13 LDA PRAMS+5,I GET FIRST OPTIONAL PARAMETER STA RQB+#PM1 ADD PARAMETER-OR 0-TO REQUEST BUFFER. * CLA PREPARE FOR MISSING PARAMETER. LDA PRAMS+6,I GET SECOND OPTIONAL PARAMETER STA RQB+#PM2 ADD PARAMETER-OR 0-TO REQUEST BUFFER. * LDA CONSV RETRIEVE THE SHIFTED CONWORD. AND HILO ISOLATE INTERACTIVE BIT#11 AND Z BIT#12. SZA,RSS IF NEITHER IS SET, JMP CHEK3 THEN GO TO CHECK FOR A CONTROL REQUEST. * LDB ICODE GET THE REQUEST CODE. CPB D1 IF THIS IS A READ REQUEST, SSA,SLA,RSS CHECK FOR BOTH BITS SET JMP *+2 ONLY ONE IS SET, SO CONTINUE JMP ERIO1 BOTH ARE SET: ERROR IO01! * LDB PRAMS+6 GET ADDRESS FOR WRITE/Z-BUFFER LENGTH. JSB LENCK GO VERIFY & GET 'WRITE' WORD COUNT. LDB WRLEN CONFIGURE REQUEST TO SHOW THE OFFSET STB RQB+#ZOF OF 'Z' BUFFER FROM START OF DATA BUFFER. ADB A COMPUTE TOTAL DATA BUFFER LENGTH. LDA ICODE GET REQUEST CODE, AGAIN. CPA D13 IF THIS IS AN I/O STATUS REQUEST, STB RDLEN PREPARE <#MAST> TO RECEIVE DATA, CPA D13 AND ALSO BYPASS THE SPECIAL JMP MOVEZ INTERACTIVE WRITE-READ PROCESSING. * STB WRLEN CONFIGURE TRANSMITTED DATA LENGTH. * CPA D1 CHECK AGAIN FOR A READ REQUEST. JMP IRW? READ: GO TO CHECK FOR INTERACTIVE W/R. JMP MOVEZ NOT A READ: BYPASS INTERACTIVE CODE. * IRW? LDB CONSV GET SHIFTED CONWORD. SSB,RSS INTERACTIVE WRITE-READ? JMP MOVEZ NO. IGNORE SPECIAL LENGTH CHECK. * LDA TEMP+1 RETRIEVE THE WRITE LENGTH CMA,INA AND MAKE IT NEGATIVE. ADA RDLEN IF THE WRITE LENGTH SSA IS GREATER THAN THE 'READ' LENGTH, JMP ERIO4 THEN THE REQUEST IS INVALID! * LDA RDLEN FORCE ADEQUATE SAM TO BE STA WRLEN ALLOCATED AT RECEIVING NODE. LDA CONWD GET THE <#MAST> CONTROL WORD. ARS SET THE LONG TIMEOUT BIT(#14). STA CONWD RESTORE CONWD (140000B). * MOVEZ LDA PRAMS+5 GET THE SECOND BUFFER ADDRESS SZA,RSS IF NONE WAS SPECIFIED, JMP ERIO1 THEN THE REQUEST IS INVALID! * LDB ICODE IF THIS IS NOT SLB A WRITE REQUEST, THEN JMP SETZA THERE IS NO NEED TO MOVE USER DATA. * SKP JSB MDATA MOVE USER'S DATA TO LOCAL BUFFER. LDA DABFA REFER <#MAST> TO THE LOCAL SETZA STA OUTBF OR USER'S TRANSMISSION BUFFER. * CHEK3 LDA ICODE IF THE REQUEST CPA D3 IS FOR I/O CONTROL, THEN CLA,RSS MORE PARAMETERS MUST BE PROCESSED; JMP I/OND ELSE, PROCESSING IS COMPLETE. * LDA PRAMS+3,I GET FIRST OPTIONAL CONTROL PARAMETER. STA RQB+#PRM ADD IT TO THE REQUEST BUFFER. CLA PREPARE FOR MISSING PARAMETER. LDA PRAMS+4,I GET SECOND OPTIONAL CONTROL PARAMETER. STA RQB+#PR2 PLACE IT INTO REQUEST BUFFER. * I/OND LDA L#I/O GET THE REQUEST LENGTH AND GO JMP SETLN TO CONFIGURE THE <#MAST> CALL. * SPC 3 ICOD6 LDB PRAMS+9 IF MORE THAN EIGHT PARAMETERS RC=06 SZB,RSS WERE PASSED, OR IF THE CPB PRAMS+3 'INUM' PARAMETER WAS NOT PASSED, JMP ERIO1 THEN THE CALL IS INCORRECT; JMP ICD10 ELSE, GO COMPLETE THE REQUEST. * SKP PGMST STA RQB+#ICD PROGRAM STATUS SHARES SCHED CODE. RC=99 * ICD10 JSB NAMP GO TO PROCESS THE PROGRAM NAME. RC=10 JSB .LDX BUILD LOOP COUNTER DEF DM7 LOOP3 JSB .LAX GET PARAMETER ADDRESS DEF PRAMS+10 SZA,RSS IS IT THERE? JMP DON10 NO-EXIT LDA A,I YES, GET ITS VALUE JSB .SAX STORE INTO REQUEST DEF RQB+#IBL+1 JSB .ISY ADVANCE THE PARAMETER COUNT. JSB .ISX PROCESSING STRING-LENGTH PARAMETER? JMP LOOP3 NO, CONTINUE LDB PRAMS+9 YES. GET THE STRING-LENGTH ADDRESS. JSB LENCK GO TO CHECK THE STRING-BUFFER LENGTH. STA WRLEN CONFIGURE WRITE LENGTH FOR <#MAST>. LDB PRAMS+8 GET THE STRING BUFFER ADDRESS. STB OUTBF CONFIGURE '#MAST' TO PASS DATA. * DON10 JSB .CYA GET THE PARAMETER COUNT JMP SETLN GO TO ESTABLISH REQUEST LENGTH. * SPC 1 ICD11 LDA L#TYR GET REQUEST LENGTH AND GO TO RC=11 JMP SETLN ESTABLISH TIME REQUEST LENGTH. SPC 1 ICD12 JSB NAMP GO TO PROCESS THE PROGRAM NAME. RC=12 * JSB .LDX SET A LOOP COUNTER DEF D3 CLA LDA PRAMS+5,I GET 6TH PARAMETER SSA JMP LOOP1 JSB .ADX ABSOLUTE TIME, MORE PARAMETERS DEF D3 * LOOP1 JSB .LAX GET A PARAMETER ADDRESS DEF PRAMS+2 SZA,RSS JMP ERSC1 ABSENT, ERROR LDA A,I GET THE PARAMETER JSB .SAX SET IT IN THE REQUEST DEF RQB+#PGN+2 JSB .ISY ADVANCE THE PARAMETER COUNT JSB .DSX ALL DONE ? JMP LOOP1 NO, CONTINUE * JSB .CYA GET THE PARAMETER COUNT. JMP SETLN READY TO SEND * SKP PARST LDA PRAMS+3 DO THEY HAVE ANY ROOM ? RC=25 SZA,RSS JMP ERIO1 NO, GET OUT! * * LDA PRAMS+5 USER PREPARED TO ACCEPT 3 PARAMETERS? SZA,RSS JMP ERIO1 NO. THE CALL IS INCORRECT! * CLA LDA PRAMS+2,I GET CALLER'S PARTITION NO. PARAMETER. STA RQB+#CNW CONFIGURE CALLING SEQUENCE. * LDA L#ST3 GET THE REQUEST LENGTH AND GO TO JMP SETLN ESTABLISH I/O STATUS REQUEST LENGTH. SPC 2 SCHW LDA PRAMS+1,I IF THE USER SPECIFIED XOR RCODE THAT CREATION OF A CLONE SZA,RSS WAS DESIRED, THEN SKIP; JMP SCHW1 ELSE, BYPASS SETTING BIT#11. * CPA BIT11 IF THE 'CLONE-OK' BIT(#11) IS NOT SET, CPB D24 OR, IF IT IS SET, AND RC=24, THEN JMP ERDS6 THE REQUEST IS NOT ACCEPTABLE: 'DS06'! * IOR ICODE CONFIGURE THE 'CLONE-OK' BIT(#11) STA RQB+#ICD INTO THE TRANSMITTED REQUEST PARAMETER. * SCHW1 LDB D3 SET THE STREAM-TYPE STB RQB+#STR FOR THE SCHEDULE-WITH-WAIT MONITOR. RBR,RBR MODIFY THE <#MAST> CONTROL WORD FOR STB CONWD WRITE & LONG TIMEOUT (140000B). JMP ICD10 PROCESS ALL PARAMETERS. * SKP * CHECK VALIDITY OF BUFFER LENGTH SPECIFICATIONS: DATA+Z <= #DBS WORDS. * LENCK NOP = DON'T CARE, = ADDRESS OF LENGTH. CLA PREPARE TO RETURN WORD LENGTH =0. SZB,RSS IF THE LENGTH WAS NOT SPECIFIED, JMP LENCK,I RETURN WITH =0. * LDB B,I GET THE BUFFER LENGTH. STB TEMP SAVE USER'S BUFFER LENGTH SPEC. SSB,RSS WORDS OR -BYTES? JMP WORDS POSITIVE WORDS. BRS NEGATIVE BYTES--CONVERT TO -WORDS. CMB,INB MAKE THAT +WORDS WORDS STB TEMP+1 SAVE ACTUAL LENGTH, IN WORDS. LDA B SAVE +WORDS IN FOR RETURN. ADB RMNDR CHECK FOR ACCEPTABLE LENGTH SSB,RSS JMP ERIO4 >512, TOO MUCH * STB RMNDR SAVE REMAINING LOCATION COUNT. LDB TEMP RETURN: A=WORDS, B=USER SPECIFIED LENGTH. JMP LENCK,I RETURN TO CALLER. * * MOVE DATA FROM USER'S BUFFER INTO LOCAL DATA BUFFER. * MDATA NOP A=USER BUFFER ADDRESS, B=DON'T CARE. LDB TEMP+1 GET MOVE LENGTH (SET BY 'LENCK'). SZB,RSS IF LENGTH IS ZERO, JMP MDATA,I RETURN NOW. * LDB DBLOC DESTINATION IS NEXT DATA BUFFER LOC'N. JSB .MVW MOVE USER'S DATA DEF TEMP+1 TO LOCAL DATA BUFFER. NOP STB DBLOC UPDATE NEXT LOCATION POINTER. JMP MDATA,I RETURN: = MEANINGLESS. * * VERIFY, AND MOVE PROGRAM NAME TO REQUEST BUFFER; INITIALIZE PARAM. COUNT. * NAMP NOP CHECK AND MOVE PROGRAM NAME. LDA PRAMS+2 GET ADDRESS OF PROGRAM NAME. LDB A,I IF THE FIRST TWO CHARACTERS SZB,RSS ARE NULLS, THEN JMP ERSC5 THE CALL IS INCORRECT! * LDB NAMA GET POINTER TO NAME, IN REQUEST JSB .MVW MOVE THE NAME TO THE REQUEST DEF D3 NOP JSB .LDY INITIALIZE THE PARAMETER COUNTER. DEF L#PGN JMP NAMP,I RETURN * SKP * SEND THE REMOTE EXEC REQUEST VIA "#MAST" AND AWAIT REPLY * SETLN STA RQLEN ESTABLISH REQUEST LENGTH FOR <#MAST>. * JSB #MAST CALL MASTER REQUEST INTERFACE ROUTINE DEF *+8 DEF CONWD CONTROL WORD DEF RQLEN REQUEST LENGTH OUTBF DEF * CONFIGURED DATA BUFFER ADDRESS--IF ANY. DEF WRLEN WRITE DATA LENGTH -- IF ANY DEF RDLEN READ DATA LENGTH -- IF ANY DEF C#DLW MAXIMUM REPLY LENGTH EXPECTED =15 WORDS. INBUF DEF * CONFIG. REPLY DATA ADDRESS--IF ANY. JMP ERROR * ERROR DETECTED BY "#MAST"--REPORT IT * ADA RQBFP COMPUTE ADDRESS OF OP-SYSTEM IDENTIFIER. LDB A,I GET REMOTE OP-SYSTEM IDENTIFIER, STB D#OPS AND MAKE IT AVAILABLE FOR CALLER. * LDB ICODE IF THE REQUEST CODE WAS FOR A: CPB D11 - TIME REQUEST, THEN THE JMP IPD11 TIME VALUES MUST BE POST-PROCESSED; CPB D13 - DEVICE-STATUS REQUEST, THEN THE DEVICE JMP IPD13 PARAMETERS NEED POST-PROCESSING; CPB D25 - PARTITION-STATUS REQUEST, THEN THE JMP IPD13 PARTITION PARAMETERS NEED PROCESSING; CPB D99 - PROGRAM-STATUS REQUEST, THEN CHECK THE JMP IPD13 STATUS PARAMETER FOR POST-PROCESSING. * SKP HED DEXEC: POST-PROCESSING * (C) HEWLETT-PACKARD CO. 1980 * IPOST LDA RQB+#ENO SSA ANY ERROR ? JMP ERROR YES LOCND EQU * LDA PRAMS+1,I GET ICODE SSA WAS THE NO ABORT BIT SET ? ISZ EXIT YES PUSH RETURN ADDRESS * LDB ICODE GET THE REQUEST CODE. CPB D9 SCHEDULE WITH WAIT? CCA,RSS YES. SET VALUE FOR PARAMETER CHECK. CPB D23 QUEUE SCHEDULE WITH WAIT? CCA,RSS YES. SET VALUE FOR PARAMETER CHECK. JMP ATEND NO. PARAMETER PROCESSING NOT REQUIRED. * LDB SAVEB GET CALLER'S ORIGINAL CONTENTS. CPA RQB+#XML IF RETURNED PARAMETERS, THEN JMP MVPRM GO MOVE PARAMETERS TO ID SEGMENT. JMP RESTX IGNORE FROM REPLY BUFFER. * MVPRM CLA INITIALIZE NAME ARRAY TO INDICATE STA TEMP REQUEST FOR RETURN OF 'THIS' ID ADDR. JSB PGMAD GET DEF *+3 'THIS' PROGRAM'S DEF TEMP I.D. SEGMENT DEF TEMP+1 ADDRESS. LDB SAVEB GET CALLER'S ORIGINAL CONTENTS OF . SZA,RSS IF 'PGMAD' CALL FAILED ( =0), JMP RESTX BYPASS RETURN OF PARAMETERS; ISZ TEMP+1 ELSE, SET POINTER TO ID SEG. WORD#2. LDA IRTNP SOURCE: RETURNED PARAMETERS IN REPLY. LDB TEMP+1 DEST'N: SET INTO CALLER'S ID SEGMENT. * JSB $LIBR GAIN ACCESS TO PROTECTED AREA. NOP XMAP1 JSB .MVW MOVE 'PRTN' PAREMETERS [RTE-IV:JSB .LDX] DEF D5 INTO CALLER'S ID SEGMENT. XMAP2 NOP [RTE-IV: MWI] LDB TEMP+1 POINT CALLER'S -REG. TO PARAMETERS. JSB $LIBX RESTORE PROTECTION DEF *+1 AND RETURN TO DEF RESTX COMPLETE PROCESSING. * ATEND LDB RQB+#XML GET FROM THE REPLY BUFFER. RESTX JSB .LDX RESTORE THE ORIGINAL CONTENTS DEF SAVEX JSB .LDY OF BOTH THE & REGISTERS. DEF SAVEY RSTEO LDA SAVEO GET ORIGINAL STATE FOR . CLO INITIALIZE OVERFLOW TO CLEAR STATE. SLA,ELA RESTORE , AND IF WAS SET, STO THEN RESTORE IT TOO. CLA CLEAR THE ALTERNATE STA DLUEX ENTRY-POINT INDICATION. LDA RQB+#EC1 SET FOR RETURN TO CALLER. JMP EXIT,I RETURN TO CALLER SKP IPD11 LDA IRTNP GET ADDRESS OF THE TIME VALUES. LDB PRAMS+2 GET USER'S BUFFER ADDRESS JSB .MVW PASS 5 WORDS TO THE USER DEF D5 NOP LDB RQB+#TYR GET THE CURRENT 'YEAR'. STB PRAMS+3,I PASS THE YEAR (OPTIONALLY) JMP IPOST FINISH THE JOB SPC 1 IPD13 LDA RQB+#ST1 GET THE FIRST RETURN-PARAMETER. STA PRAMS+3,I PASS: EQT5/STARTING PAGE/PROG. STATUS CPB D99 IF THE REQUEST WAS FOR PROGRAM STATUS, JMP ER99? THEN CHECK FOR NUMERIC ERROR; * CLA PREPARE FOR UNREQUESTED PARAMETER. LDB RQB+#ST2 GET THE NEXT RETURN-PARAMETER. STB PRAMS+4,I RC=13: EQT4/IPT6 RC=25: NO. PAGES. * LDA ICODE GET REQUEST CODE LDB CONSV AND SHIFTED CONWORD. CPA D13 IF THIS IS AN I/O STATUS REPLY, SLB,RSS AND A 'Z' BUFFER WAS SPECIFIED, SKIP. JMP GETOP NOT 'Z'. GO GET OPTIONAL PARAMETERS. * LDA RQB+#XML GET RETURN LENGTH PARAMETER. CPA RQB+#EQ5 A&B MUST BE EQUAL, IF DATA WAS RETURNED. CMA,SSA,INA IF NOT A NEGATIVE WORD LENGTH, JMP IPOST THEN NO 'Z' DATA HAS BEEN RETURNED. * STA RQB+#XML SAVE POSITIVE WORD COUNT. LDA DABFA SOURCE IS LOCAL DATA BUFFER. LDB PRAMS+5 DESTINATION IS USER'S BUFFER. JSB .MVW RETURN THE STATUS DEF RQB+#XML INFORMATION TO THE CALLER. NOP JMP IPOST COMPLETE THE PROCESSING. * GETOP CLA PREPARE FOR UNREQUESTED PARAMETER. LDB RQB+#ST3 RC=13:LU STATUS/$DVTP;RC=25:PAR. STATUS. STB PRAMS+5,I RETURN TO USER--IF REQUESTED (A, IF NOT) CLA PREPARE FOR UNREQUESTED PARAMETER. LDB RQB+#ST4 RC=13: $DVTP+1 (RTE-L). STB PRAMS+6,I RETURN TO USER--ELSE, TO A. JMP IPOST COMPLETE THE PROCESSING. * ER99? CCA IF EXECM CPA RQB+#EC2 DETECTED AN ERROR, THEN JMP ERROR TAKE THE ERROR PATH; ELSE, JMP IPOST GO COMPLETE NORMAL PROCESSING. * HED DEXEC: ERROR PROCESSING * (C) HEWLETT-PACKARD CO. 1980 * * DEXEC ERROR ROUTINES. * ERDS6 LDB "06" IMPROPER REQUEST: "DS06". LDA "DS" JMP ERCQ * ERIO1 LDB "01" INCORRECT,MISSING,OR TOO MANY PARAMETERS JMP GETIO * ERIO4 LDB "04" IMPROPER BUFFER SPECIFICATION. * GETIO LDA "IO" ERROR: "IO0X". JMP ERCQ * ERSC1 LDB "01" MISSING SCHEDULEING PARAMETER. JMP GETSC * ERSC5 LDB "05" INCORRECT PROGRAM NAME. * GETSC LDA "SC" ERROR: "SC0X". * *** MAINTAIN ORDER OF NEXT TWO INSTRUCTIONS *** ERCQ CCE,RSS SET FLAG: ESTABLISH ERROR QUALIFIER. NECQ CLE CLEAR FLAG: DO NOT MODIFY QUALIFIER. *********************************************** DST RQB+#EC1 SET ERROR CODES INTO REQ.BUFR ERRA EQU *-1 ERROR MESAGE ADDRESS [DEF RQB+#EC1]. SEZ,RSS ESTABLISH AN ERROR CODE QUALIFIER? JMP ERROR NO. IT IS ALREADY SET. LDA B21 YES. SET QUALIFIER =1(DEXEC), AND STA RQB+#ECQ MESSAGE LEVEL =1, FOR USER RETRIEVAL. LDA #NODE GET THE LOCAL NODE NUMBER. IOR BIT15 FORM ERROR NODE NO. W/ASCII FLAG. STA RQB+#ENO SAVE FOR USER RETRIEVAL. ERROR CLA CLEAR THE ALTERNATE- STA DLUEX ENTRY INDICATOR, STA D#OPS AND THE REMOTE $OPSY LOC'N. LDA PRAMS+1,I GET ICODE SSA NO ABORT BIT SET ? JMP ATEND YES, IT IS * CCA ADA EXIT WE HAVE THE ADDRESS OF THE JSB LDB ERRA GET ADDRESS OF THE ERROR MESSAGE JSB #TILT WE DO NOT COME BACK FROM THIS CALL * "01" ASC 1,01 "04" ASC 1,04 "05" ASC 1,05 "06" ASC 1,06 "DS" ASC 1,DS "IO" ASC 1,IO "SC" ASC 1,SC * HED DEXEC: LOCAL PROCESSING * (C) HEWLETT-PACKARD CO. 1980 * LOCAL LDA #NODE GET LOCAL NODE FOR USER ERROR ANALYSIS. CPB D99 IF THIS IS A PROGRAM STATUS REQUEST, JMP LOCST THEN PROCESS IT INDEPENDENTLY; * IOR BIT15 ELSE, PREPARE REQUEST BUFFER STA RQB+#ENO FOR USER ERROR RETRIEVAL. * CPB D1 IF THIS IS A READ REQUEST, JMP *+2 THEN SKIP FOR FURTHER CHECKING; JMP LCHEK ELSE, CONTINUE LOCAL PROCESSING. * LDA PRAMS+2 GET ADDRESS OF CONWORD(S). LDB SAVEN IF THIS IS A REFERENCE TO AN CPB DLUEX EXTENDED LOGICAL UNIT NUMBER, INA THEN POINT TO SECOND WORD OF PAIR. LDA A,I GET THE CONTROL WORD. ALF IF THE INTERACTIVE BIT(#11) SSA IS SET, THEN THE REQUEST MUST BE JMP SPLOC PASSED TO FOR PROCESSING. * LCHEK LDB GETPR+1 GET ADDRESS OF DEF'S FOR CALL. JSB .LDX UP TO 9 PARAMETERS; MORE = ERROR; DEF DM10 LOCL INB ADVANCE THE RETURN POINTER. JSB .LAX GET A PARAMETER ADDRESS DEF PRAMS+11 SZA,RSS PRESENT ? JMP LOC1 NO * JSB .ISX MORE THAN 10 PARAMETERS PASSED? JMP LOCL NO. CONTINUE CHECKING. JMP ERIO1 YES. TOO MANY--BUFFER MAY BE DESTROYED! * LOC1 STB PRAMS SET THE "DEF RETURN" DLD ERCQ GET ERROR-DETECTION INSTRUCTIONS. DST PRAMS,I INSERT AT RETURN LOCATIONS. * LDB RCODA GET POINTER TO REQUEST CODE VALUE. LDA PRAMS+1,I IF THIS IS A LOCALLLY PROCESSED XOR RCODE REQUEST, WITH THE 'CLONE-OK' BIT SET, SZA THEN, REFER TO THE MASKED STB RCODP REQUEST CODE; IT KNOWS NOT OF BIT#11. * LDA XLUX GET POINTER TO 'XLUEX'. LDB SAVEN IF THE USER CALLED CPB DLUEX VIA THE ENTRY, THEN JMP LOCLN GO TO ESTABLISH 'XLUEX' AS THE TARGET. * LDB ICODE GET REQUEST CODE. LDA EXECX GET "EXEC" ADDRESS ADB DM3 SSB,RSS IS IT READ OR WRITE? JMP LOCLN NO, DO "EXEC" CALL * LDB PRAMS+5 SZB,RSS OPT.PARAMETERS SPECIFIED? LDA REIOX NO, OK TO USE REIO! LOCLN STA RQLEN SAVE ADDR FOR MP CHECK LDB $OPSY IF THIS IS CPB DM31 AN RTE-L SYSTEM, JMP *+2 THEN SKIP TO COMPENSATE; JMP GETRX ELSE, BYPASS EXEC-CALL MODIFICATION. * LDB JSBIN GET THE NORMAL JSB,I INSTRUCTION. CPA EXECX IF THIS IS TO BE A CALL TO , STA CALEX THEN CONVERT JSB,I INTO FUNNY 'L' CODE. CPA REIOX IF THIS IS TO BE A CALL TO , STB CALEX THEN RESTORE THE JSB,I INSTRUCTION. * GETRX JSB .LDX RESTORE REGISTER,[LDX USED IN INIT] DEF SAVEX DLD SAVEA AND THE REGISTERS, JMP CALEX AND GO EXECUTE THE CALL. * LOCST STA RQB+#ENO SET ERROR NODE: NO SIGN(NUMERIC). JSB PGMAD GET THE CURRENT STATUS DEF *+2 FOR THE USER-SPECIFIED DEF PRAMS+2,I PROGRAM NAME. SZA DOES THE PROGRAM EXIST? JMP GETST YES. GO TO PROCESS THE STATUS. * LDA B21 ESTABLISH ERROR QUALIFIER =1, AND STA RQB+#ECQ MESSAGE LEVEL ALSO =1, FOR RETRIEVAL. LDA "DS" NO. SET ='DS' FOR ERROR INDICATION, CCB AND = -1, FOR USER RETRIEVAL. STB PRAMS+3,I RETURN ERROR TO USER'S PARAM.--IF ANY. JMP NECQ TAKE THE ERROR EXIT. * GETST LDA B GET THE PROGRAM'S STATUS WORD. AND B17 ISOLATE THE STATUS BITS(#3-0), AND RAL,ERA SET SHORT I.D. BIT(#15)--IF TRUE. STA PRAMS+3,I RETURN IT TO CALLER'S PARAMETER--IF ANY. CLB =0 FOR GOOD RETURN. DST RQB+#EC1 CONFIGURE ERROR INFO IN HEADER. STB RQB+#XML ENSURE RETURNED = 0 JMP LOCND GO TO COMPLETE THE CALL. * SKP * INITIALIZATION: CALLED FIRST ENTRY, ONLY; USES PARAM. AREA TO SAVE SPACE. * ORG PRAMS MAKE DOUBLE USE OF CODE SPACE. * INIT LDB CALEX GET THE 'JSB RQLEN,I' INSTRUCTION. STB JSBIN SAVE FOR POSSIBLE RESTORATION. LDB $OPSY IF THIS IS CPB DM9 AN RTE-IV SYSTEM, THEN JMP CNFGX CONFIG. FOR X-MAP PARAM. RETURN; JMP NOMAP ELSE, NO CHANGES ARE REQUIRED. * CNFGX LDB GETRX GET A 'JSB .LDX' (ASSUMES B.P. LINK) STB XMAP1 IT PREPARES 'X' FOR 'MWI'. LDB MWINS GET 'MWI' INSTRUCTION AND INSTALL IT STB XMAP2 TO MOVE PARAMS. INTO I.D. SEGMENT. * NOMAP STA INIT0 NO NEED TO EVER JMP INIT0+1 CALL THIS CODE AGAIN. * ASMER EQU ERTST-* ASSEMBLY ERROR = OVERFLOW OF PRAMS AREA. * ORR * * HED DEXEC: CONSTANTS AND STORAGE * (C) HEWLETT-PACKARD CO. 1980 * A EQU 0 B EQU 1 RQB EQU #RQB RQBFP DEF #RQB-1 TEMP EQU PRAMS+10 TEMPORARY STORAGE.(2 WDS.) SAVEA NOP SAVEB NOP SAVEO NOP SAVEX NOP SAVEY NOP SAVEN NOP 'ENT' SAVE FOR 'DEXEC'/'DLUEX' DECISIONS. C#DLW ABS #DLW MAX. REQUEST/REPLY LENGTH. N#DBS ABS -#DBS-1 BUFFER LENGTH VALIDITY-CHECKING CONSTANT. DM3 DEC -3 DM7 DEC -7 DM9 DEC -9 DM10 DEC -10 DM31 DEC -31 BIT11 OCT 4000 BIT12 OCT 10000 BIT15 OCT 100000 B17 OCT 17 B21 OCT 21 D1 DEC 1 D3 DEC 3 D5 DEC 5 D9 DEC 9 D11 DEC 11 D12 DEC 12 D13 DEC 13 D23 DEC 23 D24 DEC 24 D25 DEC 25 D99 DEC 99 JSBIN NOP STORAGE FOR 'JSB RQLEN,I' INSTRUCTION. MWINS MWI MOVE WORDS INTO ALTERNATE MAP. CONWD NOP CONSV NOP SHIFTED CONWD: SIGN=BIT#11, LSB=BIT#12 CLNMS OCT 173777 BIT#11 EXCLUSION MASK. D#OPS NOP LOCAL/REMOTE OP-SYSTEM IDENTIFIER. DBLOC NOP NEXT LOCATION IN DATA/Z BUFFER. HILO OCT 100001 ICODE NOP RCODA DEF RCODE POINTER TO LOCAL REQUEST CODE PARAMETER. RCODE NOP .......... " " " " RCODP EQU PRAMS+1 ADDRESS OF RCODE CALLING PARAMETER. RDLEN NOP RMNDR NOP 1'S COMPLEMENT: REMAINING BUFFER LOC'NS. RQLEN NOP WRLEN NOP IRTNP DEF RQB+#RPM ADDRESS OF RETUTNED PARAMETERS. NAMA DEF RQB+#PGN EXECX DEF EXEC REIOX DEF REIO XLUX DEF XLUEX DABFA DEF DABUF DABUF BSS #DBS DATA/Z BUFFER. * SIZE EQU *-DEXEC SIZE OF (OCTAL). * END