ASMB,Q,R,C HED <#SLAV> SLAVE REPLY INTERFACE * (C) HEWLETT-PACKARD CO. 1980 NAM #SLAV,7 91750-1X034 REV 2013 800331 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 ENT #SLAV,#RPB,#SKEY EXT #OTCV,#LEVL,#BREJ,#RPCV,#GRPM,#MHCT * EXT XLUEX,.ENTR EXT #NRVS,#MAAS,#RSAX SPC 2 * #SLAV * ---------------- * SOURCE PART # 91750-18229 * * REL PART # 91750-16229 * * WRITTEN BY TOM MILNER * * DATE WRITTEN JUNE 1979 * * MODIFICATIONS * ------------- * SET BIT8 (DS STATUS BIT) IN LAST WORD OF REQUEST BUF * TKM 05.23.79 * MOVED REPLY BUFFERS TO LOCAL -- TKM 06.01.79 * ADDED ENTRY POINT 'C.BUF' WHEN 'Z' OPTION USED - TKM 06.25.79 * CHANGED #RSAX ERROR RETURN TO RETURN DS07 - TKM 07.09.79 * NOW SET BIT14 (REPLY BIT) IN STREAM WORD * AND ADDED MESSAGE ACCOUNTING (MA) -TKM 07.23.79 * PLUG IN HOP COUNT (#HCT) IN REPLY BUFFER -TKM 09.13.79 * CHECK FOR LEVEL CONVERTERS PRESENT - TKM 11.06.79 * INCLUDED 'XLUEX' CALLS FOR LU > 63 -TKM 12.05.79 * ADDED #SKEY ENTRY POINT FOR #RQUE/#NQUE -TKM 03.17.80 * ------------- SPC 2 * THIS ROUTINE SENDS SLAVE REQUESTS * CALLING SEQUENCE: * JSB #SLAV * DEF *+4 * DEF RQLEN REQUEST LENGTH * DEF DABUF DATA BUFFER * DEF DATAL DATA LENGTH * * * * * #SLAV IS CALLED BY DS/1000 MONITORS TO SEND A REPLY AND * POSSIBLY DATA BACK TO THE ORIGINATING NODE. IT PERFORMS THE * FOLLOWING STEPS: * 1. DEALLOCATES THE SLAVE TCB, IF THIS FAILS TAKES THE * ERROR RETURN. * 2. VERIFIES THAT #MHD <= (REPLY LENGTH) <= #MXR AND IF NOT * RETURNS A DS03 ERROR. * 3. CONVERTS THE NODAL ADDRESS OF THE ORIGINATING CPU * TO AN OUTPUT LU. IF LU CONVERSION FAILS, A DS04 ERROR * IS RETURNED. * 4. DOES A CLASS I/O WRITE/READ OF THE REPLY(/DATA) TO * GRPM'S CLASS NUMBER (OR RPCNV'S CLASS IF A 3000 WAS * WAS THE REQUEST ORIGINATOR. * 5. RETURNS 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 SPC 3 A EQU 0 B EQU 1 SKP RQLEN NOP DABUF NOP DATAL NOP * #SLAV NOP JSB .ENTR GET CALLER'S PARAMETERS DEF RQLEN LDA CONWX STA LU+1 INITIALIZED CONTROL WORD * JSB #RSAX DELETE #SLAV TCB DEF *+4 DEF K7 DEF RPB+#SEQ DEF RPB+#STR STREAM WORD SSB JMP DS07 TCB SEARCH FAILED, ERROR RETURN STA RPB+#SEQ RESTORE OLD SEQ # IN REPLY * * CHECK NO-REPLY OPTION * LDA RPB+#ECQ LOAD NO-REPLY BIT SSA,RSS IS IT SET? JMP *+3 .NO ISZ #SLAV .YES, ADJUST FOR JMP #SLAV,I GOOD RETURN * * CLEAR OUT PARTS OF REPLY BUFFER * CLA STA RPB+#MAS STA RPB+#MAR STA RPB+#MAC *-- FILL IN HOP COUNT LDA #MHCT STA RPB+#HCT CCB ADB @RPB ADB C#LSZ ALLOW FOR LOCAL APPENDAGE ADB RQLEN,I --> 2ND WORD OF LOCAL APPENDAGE LDA BIT8 SET DS STATUS BIT & CLEAR 2ND WORD OF STA B,I LOCAL APPENDAGE. * * VERIFY REPLY LENGTH * LDB "03" LDA MINLN CHECK REPLY LENGTH CMA,INA ADA RQLEN,I SSA JMP GETDS GIVE DS03 IF < MINIMUM LDA MAXLN CMA ADA RQLEN,I SSA,RSS JMP GETDS GIVE DS03 IF > MAXIMUM * * MODIFY STREAM WORD * LDA RPB+#STR GET THE STREAM WORD OF THE REPLY. AND RTYCT CLEAR THE OLD RETRY COUNTER. IOR #BREJ INITIALIZE NEW RETRY COUNT. IOR BIT14 SET REPLY BIT IOR BIT12 SET ">LEVEL 0" INDICATOR STA RPB+#STR RESTORE MODIFIED STREAM WORD. * * CHECK FOR REPLY TO DS/3000 REPLY CONVERTER. * LDB #RPCV PRESET = "RPCNV'S" CLASS NO. CLE,ELA POSITION DS/3000 BIT#15 TO . CLA,SEZ,CLE IF THIS IS A DS/3000 REPLY, SET LU=0, JMP RPL3K THEN BYPASS DS/1000 PROCESSING. * * CLEAR MA RETRY TICKS IN APPENDAGE * LDB @RPB ADB RQLEN,I INB --> RETRY TICKS LDA B,I AND MAMSK STA B,I * * CONVERT DESTINATION NODE TO AN LU # * JSB #NRVS SEARCH NRV FOR LU NUMBER DEF *+4 DEF RPB+#SRC (NODE NUMBER) DEF LU (NOT USED) DEF UPLVL (UPGRADE LEVEL OF DEST. NODE) JMP GETDS ERROR RETURN (IF NODE NOT IN NRV) STA LU LU NUMBER OF NODE * * ASSIGN MESSAGE ACCOUNTING (MA) SEQUENCE NUMBER * JSB #MAAS MA ASSIGNMENT DEF *+3 DEF RPB (REPLY BUFFER) DEF RQLEN,I (REPLY BUFFER LENGTH) JMP GETDS BUSY ERROR CODE DS08 IN * * ASSIGN LEVEL# AND SEND THE REQUEST(/DATA) * LDA RPB+#LVL LEVEL WORD AND BM17 MASK (OFF) #LVL BITS IOR #LEVL AND PLUG IN CURRENT UPGRADE STA RPB+#LVL LEVEL. * * CHECK DESTINATION UPGRADE LEVEL - IF LESS THAN ME SEND * MESSAGE TO REQUEST/REPLY CONVERTERS FOR TRANSMISSION. * LDA #LEVL IS UPGRADE LEVEL OF LOCAL NODE CMA,INA HIGHER THAN ADA UPLVL THAT OF ORIGINATION SSA,RSS NODE? JMP SETUP . NO WRITE OUT AS IS * LDB #OTCV OUTPUT CONVERTERS CLASS SZB,RSS CONVERTERS THERE? JMP DS071 . NO DS07 QUALIFIER 1 CLA OUTPUT TO BIT BUCKET JMP RPL3K * SETUP LDB #GRPM GET "GRPM'S" CLASS NUMBER. LDA LU GET LU RPL3K IOR BIT15 BYPAS SESSION SST STA LU SAVE CONFIGURED CONWD. STB CLASS SAVE CLASS NUMBER (#GRPM,#RPCV,#OTCV). * LDA RQLEN,I ADA C#LSZ STA RQLEN BUMP REQUEST SIZE FOR LOCAL APPENDAGE * JSB XLUEX DO CLASS WRITE/READ DEF *+8 DEF CLS20 NO ABORT DEF LU LU DEF DABUF,I DATA BUFFER ADDRESS DEF DATAL,I DATA LENGTH @RPB DEF RPB REPLY BUFFER ADDRESS DEF RQLEN REPLY LENGTH DEF CLASS * JMP #SLAV,I ERROR RTN TO P+1 ISZ #SLAV JMP #SLAV,I GOOD RTN TO P+2 * DS071 LDA BIT4 DS07/1 - NO CONVERTERS STA RPB+#ECQ DS07 LDB "07" RETURN DS07 ERROR GETDS LDA "DS" JMP #SLAV,I RETURN WITH ERROR CODE SKP *----------------------------------------------------- * CONSTANTS *----------------------------------------------------- * MAXLN ABS #MXR MAXIMUM REQUEST/REPLY HEADER MINLN ABS #MHD MINIMUM " " C#LSZ ABS #LSZ BIT4 OCT 000020 BIT8 OCT 000400 BIT12 OCT 010000 BIT14 OCT 040000 BIT15 OCT 100000 BM17 OCT 177760 MAMSK OCT 007777 CONWX OCT 010100 RTYCT OCT 170077 CLS20 DEF 20,I CLASS WRITE/READ--NO ABORT K7 DEC 7 "03" ASC 1,03 "07" ASC 1,07 "DS" ASC 1,DS *----------------------------------------------------- * STORAGE *----------------------------------------------------- #SKEY BSS 1 NOTE! THIS WORD MUST COME BEFORE RPB! RPB EQU * #RPB BSS #MXR+#LSZ REPLY BUFFER LU BSS 2 UPLVL BSS 1 CLASS BSS 1 * SIZE EQU * END