ASMB,R,Q,C HED <#FDMN> REROUTING ROUTINE * (C) HEWLETT-PACKARD CO. 1979* NAM #FDMN,7 91750-1X008 REV 2013 791214 ALL W/ RR SPC 1 ENT #FDMN SPC 1 EXT #NRV,#NODE EXT #LCNT,#LV,#CM EXT $OPSY,$LIBR,$LIBX EXT .ENTR,.LDX,.MVW * * NAME: #FDMN * SOURCE: 91750-18008 * RELOC: 91750-1X008 * PGMR: DOUG W. TSUI JULY 1979 ** * ****************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979. 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. * ****************************************************************** * * * #FDMN CALLING SEQUENCE: * * < A REG. = NODE INDEX > * < B REG. = CURRENT MIN COST > * JSB #FDMN * * * * 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 #FDMN NOP DST NIX SAVE NODE IX AND MIN COST NOP JSB CONFG CLA,INA STA MNLIX SET UP MIN INDEX CPA #LCNT ONE LINK ONLY? JMP GETCT .YES STA J SET UP LOOP INDEX * * LOOP TO FIND MIN COST OVER ALL LINKS * LOOP ISZ J UP LOOP INDEX JSB LDCM DEF *+4 DEF NIX DEF J DEF CM1 JMP #FDMN,I ERROR RETURN JSB LDCM DEF *+4 DEF NIX DEF MNLIX DEF CM2 JMP #FDMN,I LDB J LOAD LOOP INDEX LDA CM1 CMA,INA ADA CM2 SSA,RSS CM2 > CM1? STB MNLIX .YES, MNLIX = J CPB #LCNT END LOOP? RSS .YES, EXIT FROM LOOP JMP LOOP .NO, GO BACK TO LOOP * GETCT EQU * JSB LDCM GET MIN COST DEF *+4 DEF NIX DEF MNLIX DEF CM1 JMP #FDMN,I LDA MNLIX COMPUTE ADA =D-1 ADDRESS MPY LVSZ OF ADA #LV LV[MNLIX].LU LDB 0 ==> LV[MNLIX].LU JSB LDWD WILL RETURN LU WORD AND =B377 MASK OFF FLAGS STA LU SAVE IT TEMPORARY CLB LDA CM1 CPA =B77777 IF MAX COST, STB LU LU = 0 * LDA NIX COMPUTE ADA =D-1 ADDRESS MPY NRVSZ OF ADA #NRV NRV[NIX] STA @NRV SAVE IT * * CHECK IF MIN HAS CHANGED * LDA MINC GET PASSED MIN COST CPA CM1 = TO NEW MIN? JMP SETLU .YES, NO CHANGE LDA LU IOR =B100000 SET CHANGE BIT STA LU * SETLU EQU * LDB @NRV ADB N.LU ==> NRV[NIX].LU JSB LDWD WILL RETURN LU WORD AND =B177400 ZERO OUT LU BYTE IOR LU OR IN NEW MIN LINK JSB STWD STORE IT BACK * ISZ #FDMN ADJUST RETURN ADDRESS DLD CM1 LOAD RETURN VALUE JMP #FDMN,I NORMAL RETURN SKP * * 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 CONFG,I .NO STB LDMOD .YES, MOD INSTS STB SDMOD STB LSMOD 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 * XX BSS 2 NIX EQU XX NODE INDEX MINC EQU XX+1 MIN COST MNLIX NOP MIN LINK INDEX LU NOP J NOP LOOP INDEX LVSZ DEC 6 SIZE OF LV ENTRIES * CM1 BSS 2 CM2 BSS 2 * @NRV NOP NRV POINTER NRVSZ DEC 3 SIZE OF NRV ENTRIES N.LU DEC 2 LU OFFSET END