ASMB,R,Q,C HED <#SEND> REROUTING ROUTINE * (C) HEWLETT-PACKARD CO. 1979* NAM #SEND,17,3 91750-16208 REV 2013 800107 ALL W/ RR SPC 1 EXT #NCNT,#NRV,#GRPM,#NODE EXT #LCNT,#CM,#QCLM,#CMCT,#LV EXT #LVSC EXT $OPSY,$LIBR,$LIBX,$TIME EXT XLUEX,EXEC,.ENTR,.LDX,.MVW,DTACH * * NAME: #SEND * SOURCE: 91750-18208 * RELOC: 91750-16208 * PGMR: DOUG W. TSUI JULY 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. * ****************************************************************** * * * #SEND SENDS UPDATE MESSAGES TO ALL NEIGHBORS. * IT SCANS THE NRV FOR THE ENTRY WITH THE CHANGE BIT SET. * SKP * ****************************************************************** * * * 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 #SEND EQU * LDA 1,I GET PASSED SEQ # STA SEQ# JSB DTACH DETACH FROM ANY SESSION DEF *+1 IF NECESSARY NOP JSB CONFG TEST EQU * LDA #CMCT GET SEND SIGNAL SZA,RSS NEED TO SEND? JMP DONE .NO CLA .YES, CLEAR SEND SIGNAL FIRST STA #CMCT STA I SET UP LOOP INDEX LDB #NRV STB @NRV SET UP NRV ADDRESS * LOOP EQU * LDA @DABF STA @DA SET UP DATA BUFFER ADDR CLA STA DALEN SET UP DATA LEN * LOOP1 EQU * ISZ I UP LOOP INDEX ADB N.LU ==> NRV.LU JSB LDWD WILL RETURN NRV.LU WORD SSA,RSS CHANGE BIT SET? JMP CK1 .NO, NO ACTION STA LU SAVE IT AS LU JSB CLBIT JMP TO CLEAR CHANGE BIT LDA LU GET LU BACK AND =B377 MASK OFF ALL EXCEPT LU SZA NRV.LU = 0? JSB #LVSC .NO, FIND INDEX OF LU CLA,INA CANNOT FIND LU, USE 1ST LINK STA MNLIX STORE IT AS MIN LINK INDEX LDB @NRV ==> NRV.NODE JSB LDWD WILL RETURN NRV.NODE WORD STA @DA,I STORE IT IN DATA BUFFER ISZ @DA UP @DA TO POINT TO COST AND HOP COUNT JSB LDCM CALL TO LOAD COST AND H.C. FROM CM DEF *+4 DEF I DEF MNLIX @DA NOP JSB ERROR ISZ @DA UP DATA ISZ @DA BUFFER ADDRESS LDA DALEN ADA =D3 STA DALEN UP DATA LEN CPA MXLEN = MAX BUF LEN? JMP SEND .YES, SEND IT CK1 EQU * LDA N CPA I ALL NODES? JMP SEND .YES, SEND IT LDB @NRV UP ADB NRVSZ NRV STB @NRV JMP LOOP1 * * SEND NEWS TO ALL NEIGHBORS * SEND EQU * LDA DALEN SZA,RSS ANYTHING TO SEND? JMP TEST .NO CLA,INA STA J SET UP LOOP INDEX LDB #LV STB @LV SET UP LV ADDRESS * LOOP2 EQU * JSB LDWD WILL RETURN LU WORD SSA,RSS LINK DOWN? JMP CK2 .YES, CHECK END LOOP AND =B377 .NO, MASK OFF FLAGS LDB 0 SAVE IT IN B REG. IOR =B100000 STA CONWD STORE IT AS CONTROL WORD CMB,INB STB DESTN SET NEGATIVE LU AS DESTINATION NODE ISZ SEQ# UP SEQUENCE NUMBER FOR RR MSG NOP IN CASE SEQ# OVERFLOW JSB XLUEX DEF *+8 DEF NA20 DEF CONWD DEF DABUF DEF DALEN DEF RQBUF DEF RQLEN DEF #GRPM JSB ERROR * CK2 EQU * LDA J CPA #LCNT END OF LV TABLE? JMP CK ISZ J .NO, UP J LDB @LV ADB LVSZ UP LV ADDRESS STB @LV JMP LOOP2 * CK EQU * LDA N CPA I END LOOP? JMP TEST LDB @NRV ADB NRVSZ STB @NRV JMP LOOP BACK TO LOOP * * EXIT FROM PROGRAM * DONE EQU * JSB EXEC DEF *+2 DEF K6 SKP * * ERROR HANDLING * ERROR NOP DST AREG CLA STA #LCNT DISABLE RR LDA #QCLM SZA,RSS JMP DONE LDA @SEND CMA,INA ADA ERROR ADA =D-1 STA PREG LDA PNAME STA PGM DLD PNAME+1 DST PGM+1 DLD $TIME DST TOD JSB EXEC DEF *+8 DEF NA20 DEF K0 DEF MSGBF DEF MSGLN DEF K8 DEF K0 DEF #QCLM NOP JMP DONE * * CONFIGURE THE SYSTEM ENVIRONMENT * CONFG NOP CLB STB NOP CLEAR CALL TO THIS ROUTINE LDA $OPSY GET O/S TYPE RAR SLA,RSS DMS? JMP INIT .NO STB LDMOD .YES, MOD INSTS STB CLMOD STB LSMOD * INIT EQU * LDA #NCNT CMA,INA STA N * LDA #NODE STA SRC# LDA =B10000 SET LEVEL BIT STA STREM CLA STA RQBUF+#REQ JMP CONFG,I *** * * LDWD LOADS ONE WORD FROM SAME TO LOCAL * * CALLING SEQUENCE: * * = RETURN WORD * ==> SAM BUFFER * LDWD NOP LDMOD JMP LDLDA XLA 1,I JMP LDWD,I LDLDA LDA 1,I JMP LDWD,I * *** *** * * CLBIT CLEARS BIT 15 IN SAM * * CALLING SEQUENCE: * * ==> SAM WORD * CLBIT NOP JSB $LIBR NOP CLMOD JMP CLLDA XLA 1,I AND =B77777 XSA 1,I JMP CLRTN CLLDA LDA 1,I AND =B77777 STA 1,I CLRTN JSB $LIBX DEF CLBIT * *** *** * * LDCM MOVES WORDS FROM COST MATRIX TO LOCAL BUFFER * * CALLING SEQUENCE: * * JSB LDCM * DEF *+4 * DEF NIX NODE INDEX * DEF LIX LINK INDEX * DEF BUF RETURN BUFFER AREA * * * @NIX NOP @LIX NOP @BUF NOP * LDCM NOP JSB .ENTR GET PARAMETER ADDRESS DEF @NIX * * CM ADDR CALCULATION = (#LCNT(NIX-1)+LIX-1)2+#CM * LDA @NIX,I ADA =D-1 MPY #LCNT SZB JMP LDCM,I ERROR RETURN ADA @LIX,I ADA =D-1 ALS LEFT SHIFT(X2) FOR 2 WORD CM ELEMENTS ADA #CM * LDB @BUF ==> SAM BUFFER JSB LDWS LOAD 2 WORDS FROM SAM * ISZ LDCM ADJUST RETURN ADDR JMP LDCM,I * *** *** * * LDWS MOVES WORDS FROM SAM TO LOCAL * * CALLING SEQUENCE: * * ==> SAM WORDS * ==> LOCAL BUFFER * LDWS NOP LSMOD JMP LSMVW JSB .LDX DEF LSLEN MWF JMP LDWS,I LSMVW JSB .MVW DEF LSLEN NOP JMP LDWS,I LSLEN DEC 2 TWO WORD MOVE * *** SKP * * DATA AREA * CONWD NOP WRITE CONTROL WORD OCT 10100 NA20 OCT 100024 K0 DEC 0 K6 DEC 6 K8 DEC 8 I NOP NRV LOOP INDEX J NOP LV LOOP INDEX N NOP # OF NODES IN THE NET MNLIX NOP MIN LINK INDEX @SEND DEF #SEND PNAME ASC 3,#SEND * @LV NOP LV POINTER LVSZ DEC 6 LV SIZE * @NRV NOP NRV POINTER NRVSZ DEC 3 SIZE OF NRV ENTRIES N.LU DEC 2 LU OFFSET * RQBUF BSS #MHD+#LSZ+1 STREM EQU RQBUF SEQ# EQU RQBUF+1 SRC# EQU RQBUF+2 DESTN EQU RQBUF+3 RQLEN ABS *-RQBUF * DABUF BSS 384 MAX BUFFER SIZE = 128*3 MXLEN ABS *-DABUF DALEN NOP @DABF DEF DABUF ADDRESS OF DATA BUFFER * MSGBF BSS 12 LU EQU MSGBF UP LU PREG EQU MSGBF+4 AREG EQU MSGBF+5 TOD EQU MSGBF+7 PGM EQU MSGBF+9 MSGLN ABS *-MSGBF END #SEND