ASMB,R,Q,C HED <#GETR> DS GET SUBROUTINE * (C) HEWLETT-PACKARD CO. 1980 NAM #GETR,7 91750-1X010 REV 2013 800407 ALL SPC 1 ENT #GETR,#SBFA,#SBFL,#SDAL SPC 1 EXT .ENTR,EXEC EXT $OPSY,#CLTA EXT .LDX,.MVW,.CAY * * NAME: #GETR * SOURCE: 91750-18010 * RELOC: 91750-1X010 * PGMR: LYLE WEIMAN APR 1979 ** * ****************************************************************** * * (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 HEWLETT-PACKARD COMPANY. * ****************************************************************** * * * #GETR CALLING SEQUENCE: * * JSB #GETR * DEF *+4 [OR 6 OR 7 OR 8 OR 9] * DEF CLASS CLASS FOR GET SUSPEND * DEF DSHDR DS HEADER ADDRESS * DEF DSHDL DS HEADER (MAX)+LENGTH (ZERO IS VALID). * [DEF USRBF] USER DATA BUFFER. DEFAULT = NO USER DATA MOVED * [DEF USRBL] MAX USER DATA LENGTH. " " " " " * [DEF STATS] DRIVER STATUS (A-REGISTER FROM "GET") RETURNED HERE. * [DEF LLU] OPTIONAL RETURN FOR "LAST LU" WORD * [DEF DELAY] OPTIONAL RETURN FOR 'RTRY' DELAY VALUE * (BAD CLASS #) A & B HAVE ASCII ERROR CODE * A= ACTUAL LENGTH OF HEADER, EXCLUDING "APPENDAGE". * B=ACTUAL LENGTH OF USER DATA BLOCK. * X=3RD OPTIONAL PARAMETER FROM "GET" (REQUEST CODE) * Y=RETURNED SEARCH KEY (BUFFER ADDRESS IN S.A.M.) * * * * * #GETR OPERATION: * #GETR IS CALLED BY ROUTINES WAITING TO RECEIVE REQUESTS ( & POSSIBLY * DATA) ON THEIR CLASS NUMBERS. #GETR DOES THE FOLLOWING: * 1. PERFORMS A CLASS-I/O "GET" ON THE PASSED CLASS NUMBER. * THE USER DATA PORTION (1ST BUFFER) WILL BE MOVED INTO THE * USER BUFFER AREA, IF ONE IS SUPPLIED, AS MUCH AS THE LENGTH * SUPPLIED. * * NOTE: #SBFA (AN ENTRY POINT) WILL CONTAIN THE VALUE RETURNED IN * THE FIRST "OPTIONAL PARAMETER" WORD (IF DOUBLE-BUFFERING * [I.E., Z-BIT] IS USED, THEN THIS IS THE ADDRESS OF THE SAM * BUFFER). THIS MAY BE USEFUL * FOR CALLERS WHO DO NOT USE DOUBLE-BUFFERING, AND IT IS * ESSENTIAL FOR #PUTR, WHICH USES THIS VALUE TO DETERMINE THE * SAM BUFFER ADDRESS FOR STUFFING DATA. * LIKEWISE, #SBFL WILL CONTAIN THE 2ND OPTIONAL PARAMETER * (IF DOUBLE-BUFFERING IS USED (Z-BIT), THEN THIS IS THE * 2ND BUFFER LENGTH). * 2. MOVES THE REQUEST INTO THE REQUEST BUFFER (UP TO THE * # OF WORDS SPECIFIED IN CALL. * 3. RETURNS THE "RTRY DELAY VALUE" WORD IN 'DELAY' (IF SPECIFIED), AND * THE "LAST LU WORD" IN 'LLU' (IF SPECIFIED). * 4. RETURNS THE RECEIVED REQUEST LENGTH AND STATUS IN THE B AND A REGS, * RESPECTIVELY. * 5. UPON RETURN, THE CLASS BUFFER REMAINS ALLOCATED IN SAM, AND MUST * BE CLEARED OUT OR RE-THREADED. SKP * GLBLK-START * ****************************************************************** * * * G L O B A L B L O C K REV 2001 790531 * * * * GLOBAL OFFSETS INTO DS/1000 MESSAGE BUFFERS, USED BY: * * * * REMAT, RFMST, DEXEC, DMESS, FLOAD, POPEN, #MAST * * GET, #SLAV, RQCNV, RPCNV, GRPM, DINIT, PTOPM * * EXECM, EXECW, OPERM, RFAM1, RFAM2, DLIST, DLIS3 * * DSTIO, LUMAP, #CMGT * ****************************************************************** * ***!!!!! THE ORDER OF THE FIRST 7 WORDS (#STR THRU #ENO) IS * ***!!!!! FIXED BY THE REQUIREMENT THAT THE STREAM, ADDRESSES * ***!!!!! AND ERROR CODES ALWAYS BE IN THE SAME PLACE, * ***!!!!! REGARDLESS OF MESSAGE FORMAT. THIS MAKES STORE-AND-* ***!!!!! FORWARD CODE MUCH SIMPLER. * #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 >>> * ****************************************************************** SKP CLASS NOP CLASS NUMBER DSHDR NOP ADDRESS TO STORE DS 1000 HEADER DSHDL NOP MAXIMUM LENGTH OF DS 1000 HEADER TO RETURN USRBF DEF K0 USER DATA BUFFER (DEFAULTS TO NO DATA RETURNED) USRBL DEF K0 MAXIMUM AMOUNT OF DATA TO RETURN STATS NOP OPTIONAL RETURN ADDRESS FOR DRIVER STATUS LLU NOP "LAST LU WORD" RETURN ADDRESS DELAY NOP 'RTRY DELAY VALUE' WORD RETURN ADDRESS * #GETR NOP JSB .ENTR GET PARAMETER ADDRESSES DEF CLASS * INI JSB CONFG CONFIGURE DMS/NON-DMS ('NOP' AFTER 1ST CALL) * LDA CLASS,I IOR B6000 BUFR SAVE, NO DEALLOCATE STA CLASS AND =B377 ISOLATE CLASS NUMBER. ADA #CLTA,I COMPUTE ADDRESS OF CLASS TABLE ENTRY. STA CLTBA SAVE ADDRESS FOR LATER USE. * JSB EXEC DO "GET" ON PASSED CLASS # DEF *+8 DEF K21N DEF CLASS DEF USRBF,I DATA BUFR ADDR DEF USRBL,I DATA LENGTH DEF #SBFA REQUEST BUFR ADDR IN SAM RETURNED DEF #SBFL RCVD REQUEST BUFFER LENGTH DEF IPRM3 3RD OPTIONAL PARAMETER JMP #GETR,I --ERROR RETURN, BAD CLASS#-- * STA STATS,I RETURN DRIVER STATUS STB ARTN+1 SAVE ACTUAL LNTH OF USER DATA BFR FOR RTN TO CALLER STB #SDAL LDB CLTBA GET THE CLASS BUFFER ADDRESS, * LX3 LDA B,I (XLA B,I IF DMS) NOP (REQUIRED FOR DMS) * JSB .CAY AND RETURN THE ADDRESS IN . * INA POINT TO CONWORD IN CLASS BUFFER. STA B LX0 LDA B,I (CROSS) LOAD THE CONWORD. NOP ALF,SLA POSITION Z-BIT, AND TEST FOR Z BUFFER. JMP GETX Z BUFFER PRESENT, GO TO GET CONTENTS. * CLB,RSS NO Z BUFFER, SO SET HEADER LEN. =0. * GETX LDB #SBFL RCVD REQUEST BUFFER LENGTH STB ARTN SAVE ACTUAL LENGTH OF HEADER LDA 1 CMB,INB,SZB,RSS JMP ZRET ZERO LENGTH REQUEST, RETURN NOW ADB DSHDL,I CHECK VS REQUESTED LENGTH SSB WAS IT LARGER? LDA DSHDL,I YES, USE SHORTER LENGTH SZA,RSS LENGTH WANTED = 0? JMP X2 . YES JUST GET APPENDAGE * * MOVE REQUEST BUFFER FROM SAM TO USER AREA * STA DSHDL LDB DSHDR USER REQUEST BUFFER ADDRESS LDA #SBFA SAM BUFFER ADDRESS MOD1 JMP NODMS "NOP" HERE IF DMS SYSTEM JSB .LDX PUT LENGTH IN X REGISTER DEF DSHDL LENGTH OF TRANSFER MWF MOVE WORDS FROM ALTERNATE (SYSTEM) MAP JMP X2 NODMS JSB .MVW "MOVE WORD" DEF DSHDL NOP * X2 EQU * LDB #SBFA RETURN ADB #SBFL THE LAST 2 WORDS OF HEADER ADB =D-1 LX1 LDA B,I (CROSS) LOAD "LAST LU WORD" NOP (REQUIRED FOR XLA) STA LLU,I RETURN TO CALLER * LDA DELAY ARE WE TO RETURN THE SZA,RSS "RTRY DELAY VALUE" ? JMP ZRET NO ADB =D-1 YES, BACK UP ADDRESS POINTER TO DELAY WORD LX2 LDA B,I (CROSS) LOAD DELAY WORD NOP (REQUIRED FOR XLA) STA DELAY,I RETURN TO CALLER * ZRET EQU * DO NORMAL RETURN FOR ZERO-LNTH BUFFER ISZ #GETR BUMP TO SUCCESSFUL RETURN * * * RETURN TO USER * * LDA @K0 STA USRBF RESET ENTRY ADDRESSES, IN CASE NEXT STA USRBL ENTRY DOESN'T PASS ALL 5 PARAMS JSB .LDX RETURN WITH 3RD OPTIONAL PARAMETER DEF IPRM3 IN (X) CLA STA STATS STA DELAY STA LLU DLD ARTN ADA L#LSZ SUBTRACT APPENDAGE LENGTH JMP #GETR,I * * * * CONFG NOP ROUTINE TO CONFIGURE FOR DMS/NON-DMS INSTR. CLB LDA $OPSY GET OP-SYSTEM TYPE RAR,SLA MAPPED SYSTEM? STB MOD1 YES, CONFIGURE FOR "MWF" INSTR. STB INI CLEAR CALL TO THIS ROUTINE. SLA,RSS DMS SYSTEM? JMP CONFG,I RETURN DLD XLABI YES, PICK UP "XLA B,I" INSTRUCTION DST LX0 DST LX1 DST LX2 DST LX3 JMP CONFG,I * DATA AREA * ARTN EQU CONFG BRTN EQU CONFG+1 #SBFA EQU CONFG+2 ADDRESS OF DS HEADER #SBFL EQU CONFG+3 LENGTH OF DS HEADER IPRM3 EQU CONFG+4 3RD OPTIONAL PARAMETER #SDAL EQU CONFG+5 LENGTH OF DATA BUFFER CLTBA EQU CONFG+6 CLASS TABLE ENTRY ADDRESS. K0 EQU INI THIS LOCN 0 AFTER 1ST CALL @K0 DEF K0 K21N OCT 100025 CLASS "GET", NO ABORT B6000 OCT 060000 XLABI XLA B,I L#LSZ ABS -#LSZ A EQU 0 B EQU 1 * SIZE BSS 0 * END