ASMB,R,Q,C HED <#UP> REROUTING ROUTINE * (C) HEWLETT-PACKARD CO. 1979* NAM #UP,7 91750-1X036 REV 2013 800422 ALL W/ RR SPC 1 ENT #UP SPC 1 EXT #NCNT,#NRV,#GRPM,#NODE EXT #LCNT,#CM,#QCLM EXT #LVSC EXT $OPSY,$LIBR,$LIBX,$TIME EXT XLUEX,EXEC,.ENTR,.LDX,.MVW * * NAME: #UP * SOURCE: 91750-18036 * RELOC: 91750-1X036 * 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. * ****************************************************************** * * * #UP CALLING SEQUENCE: * * < A REG. = LU THAT IS COMING UP > * JSB #UP * * * * NOTE: #UP DOES NOT ENABLE A LINK TO START TRANSMITTING * USER MESSAGE, IT MERELY SENDS A DUMMY MESSAGE SO * THAT #UPDA WILL ENABLE THE OPERATION. THIS IS DUE * TO THE LINK RESTRICATION THAT A LINK UP INDICATION * ONLY GUARANTEES TRANSMISSION BUT NOT RECEPTION. * THUS, THE DUMMY MESSAGE SERVES AS A SIMPLE INITIAL * EXCHANGE HANDSHAKE. * 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 #UP NOP STA LU SAVE UP LU NOP JSB CONFG LDA #LCNT RR ENABLE? SZA,RSS JMP #UP,I .NO * * CHECK IF LINK IS REALLY UP * LDA LU IOR =B100000 STA CONWD LDA =B3600 STA CONWD+1 JSB XLUEX LINK STATUS CALL DEF *+3 DEF NA3 DEF CONWD JSB ERROR LDB 0 ALF,ALF AND =B77 CPA =B65 OLD LINK? JMP PREP SKIP CHECK RBR SLB ANY ERROR? JMP #UP,I .YES, IGNORE THIS UP INDICATION * * * PREPARE THIS NODE'S COSTS TO BE SENT TO THE NEW NEIGHBOR * PREP EQU * LDA LU LDB LU IOR =B100000 STA CONWD SAVE THIS AS THE CONTROL WORD LDA =B10100 STA CONWD+1 CMB,INB STB DESTN SET NEGATIVE LU AS DESTINATION NODE CLA SET UP STA I 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 LDB @NRV ADB N.LU ==> NRV.LU JSB LDWD WILL RETURN NRV.LU WORD 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 LDB @NRV UP ADB NRVSZ NRV STB @NRV ADDRESS LDA DALEN ADA =D3 STA DALEN UP DATA LEN CPA MXLEN = MAZ BUF LEN? JMP SEND .YES, SEND IT LDA N CPA I ALL NODES? RSS .YES, SEND IT JMP LOOP1 * * SEND COSTS TO THE NEW NEIGHBOR * SEND EQU * LDA #GRPM LOAD CLASS # IOR =B100000 OR IN NO WAIT FOR SAM BIT STA CLASS JSB XLUEX SEND IT OUT DEF *+8 DEF NA20 DEF CONWD DEF DABUF DEF DALEN DEF RQBUF DEF RQLEN DEF CLASS JSB ERROR ERROR RETURN SZA,RSS NO SAM FOR MESSAGE? JMP *+3 .NO, SKIP AROUND ISZ #UP .YES, ADJUST RETURN JMP #UP,I TO RETRY LATER LDA N CPA I END LOOP? JMP #UP,I .YES, RETURN JMP LOOP BACK TO LOOP SKP * * ERROR HANDLING * ERROR NOP DST AREG CLA STA #LCNT DISABLE RR LDA #QCLM SZA,RSS JMP #UP,I LDA @#UP 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 #UP,I * * 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 SDMOD STB LSMOD * INIT EQU * LDA #NCNT CMA,INA STA N * LDA =B10000 STA STREM LDA #NODE STA SRC# CLA STA SEQ# UP MSG STARTS WITH SEQ# = 0 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 * *** *** * * STWD STORES ONE WORD FROM LOCAL TO SAM * * CALLING SEQUENCE: * * = WORD TO BE STORED * ==> SAM WORD * STWD NOP JSB $LIBR NOP SDMOD JMP SDSTA XSA 1,I JMP SDJSB SDSTA STA 1,I SDJSB JSB $LIBX DEF STWD * *** *** * * 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 BSS 2 WRITE CONTROL WORD NA3 OCT 100003 NA20 OCT 100024 K0 DEC 0 K6 DEC 6 K8 DEC 8 I NOP LOOP INDEX N NOP # OF NODES IN THE NET MNLIX NOP MIN LINK INDEX CLASS NOP @#UP DEF #UP PNAME ASC 3,#UP * @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