ASMB,R,Q,C HED <#UPDA> REROUTING ROUTINE * (C) HEWLETT-PACKARD CO. 1979* NAM #UPDA,7 91750-1X037 REV 2013 800423 ALL W/ RR SPC 1 ENT #UPDA SPC 1 EXT #MHCT,#NODE,#GRPM,#QCLM EXT #LCNT,#CM,#NRV,#RQUE,#CMCT EXT #LVSC,#NRVS,#FDMN,#GETR EXT $OPSY,$LIBR,$LIBX,$TIME EXT EXEC,.ENTR,.LDX,.MVW * * NAME: #UPDA * SOURCE: 91750-18037 * RELOC: 91750-1X037 * 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. * ****************************************************************** * * * #UPDA CALLING SEQUENCE: * * < A REG. = LU OF THE UPDATE MESSAGE > * JSB #UPDA * * * * SKP #UPDA NOP STA LU LDA #LCNT SZA,RSS JMP #UPDA,I NOP JSB CONFG LDA LU JSB #LVSC JMP #UPDA,I STA LIX STB @LV ADB LV.C ==> LV[LIX].COST JSB LDWD GET THAT COST STA LKCST SAVE IT AS THE LINK COST * JSB #GETR GET THE UPDATE MESSAGE DEF *+6 DEF #GRPM DEF RQBUF DEF RQLEN DEF DABUF DEF DALEN JSB ERROR LDA EC1 SZA ERROR RETURN? JMP #UPDA,I .YES, JUST RELEASE MSG STB I STORE LENGTH FOR LOOP CONTROL STB OVLEN SAVE IT AS OVERLAY LEN ALSO * * CHECK FOR INITIAL EXCHANGE MESSAGES (SEQ# = 0 OR 1) * LDA SEQ# GET SEQ # SZA ZERO? CPA K1 ONE? RSS .YES, SKIP NEXT JUMP JMP UPDA .NO, JUST DO UPDATE * * IF INIT EXCH MSG, CHECK LINK * LDB @LV GET ADDR OF LV JSB LDWD ==> SAM BUFFER SSA IS LINK UP ALREADY? JMP NEIBR .YES, SKIP TO UP NEIGHBOR INFO IOR =B100000 .NO, SET LINK UP JSB STWD STORE IT BACK * * SEND UP LINK MESSAGE TO USER * LDA #QCLM SZA,RSS JMP NEIBR DLD $TIME DST TOD JSB EXEC DEF *+8 DEF NA20 DEF K0 DEF MSGBF DEF MSGLN DEF K6 DEF K0 DEF #QCLM NOP * * SET UP NEIGHBOR INFO IF NECESSARY * NEIBR EQU * LDB @LV GET LINK VECTOR ADDR ADB LV.N ADD NEIGHBOR OFFSET JSB LDWD GET NEIGNBOR NODE # SSA,RSS NEIGHBOR NODE SET ALREADY? JMP UPDA .YES, SKIP TO DO UPDATE LDA SRC# .NO, GET SOURCE NODE # JSB STWD STORE IT AS NEIGHBOR * JSB #NRVS FIND THAT NODE IN NRV DEF *+5 DEF SRC# DEF DUMMY T/O DEF DUMMY LEVEL # DEF NAYBR NEIGHBOR BIT JMP UPDA ERROR RETURN LDA NAYBR GET NEIGHBOR BIT SZA IS IT SET? JMP UPDA .YES, SKIP TO UPDATE LDA 1 GET NODE IX ADA =D-1 MPY NRVSZ ADA #NRV ADA NV.LU SET UP ADDR IN NRV LDB 0 JSB LDWD LOAD THAT WORD IOR =B400 SET NEIGHBOR BIT JSB STWD STORE IT BACK * * UPDATE THIS NODE'S INFO * UPDA EQU * LDA @DABF STA @DA * LOOP EQU * LDA @DA,I LOAD NODE # CPA #NODE = TO LOCAL NODE? JMP CHK .YES, SKIP UPDATE JSB #NRVS FIND NODE INDEX DEF *+2 @DA NOP JMP CHK1 STB NIX STORE IT SZA NRV.LU = 0? JSB #LVSC .NO, FIND LIX TO MIN COST CLA,INA USE 1ST LINK STA MNLIX * JSB LDCM FIND MIN COST DEF *+4 DEF NIX DEF MNLIX DEF MNCST JSB ERROR JSB LDCM FIND COST TO NODE DEF *+4 DEF NIX DEF LIX DEF CM JSB ERROR LDA CM SZA,RSS ZERO COST? JMP CHK2 .YES, NO UPDATE * LDA @DA GET DATA ADDRESS INA UP ADDR TO GET DLD 0,I COST & H.C. STB CM+1 SAVE HOP COUNT ADB #MHCT - MAX HOP COUNT SSB,RSS > MAX? JMP SETMX .YES,SET MAX COST CPA =B77777 INFINITE COST? JMP SETMX .YES, SET MAX COST ISZ CM+1 UP HOP COUNT ADA LKCST ADD THE LINK COST SSA IF NOT TOO BIG, SAVE IT AS COST SETMX EQU * LDA =B77777 SET COST TO MAX STA CM SAVE IT * JSB STCM STORE NEW COST AND H.C. DEF *+4 DEF NIX DEF LIX DEF CM JSB ERROR LDA NIX LDB MNCST JSB #FDMN FIND NEW MIN JSB ERROR DST MNCST STORE NEW MIN COST JMP CHK2 * CHK EQU * LDA K0 STA MNCST STA MNCST+1 JMP CHK2 CHK1 EQU * LDA =B77777 STA MNCST CHK2 EQU * ISZ @DA POINT TO COST DLD MNCST LOAD MIN COST FROM THIS NODE DST @DA,I ISZ @DA POINT TO H.C. ISZ @DA POINT TO NEXT ENTRY LDA I ADA =D-3 STA I SZA END LOOP? JMP LOOP .NO CLA,INA .YES, SET SEND FLAG STA #CMCT JSB EXEC SCHEDULE SEND PROCESS DEF *+4 DEF NA10 DEF #SEND DEF SEQ# PASS SEQUENCE # JSB ERROR LDA SEQ# NEED TO EXCHANGE INITIAL MESSAGE? SZA = 0? CPA K1 = 1? RSS JMP #UPDA,I .NO ISZ SEQ# .YES, FIRST UP SEQ # LDA #NODE STA SRC# LDA LU CMA,INA STA DESTN LDA LU IOR =B100000 STA CONWD JSB #RQUE SEND IT BACK OUT DEF *+9 DEF NA20 DEF CONWD DEF DABUF DEF OVLEN DEF RQBUF DEF RQLEN DEF #GRPM DEF #GRPM JSB ERROR ISZ #UPDA JMP #UPDA,I SKP * * ERROR HANDLING * ERROR NOP DST AREG CLA STA #LCNT DISABLE RR LDA #QCLM SZA,RSS JMP #UPDA,I LDA @#UPD 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 #UPDA,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 CONFG,I .NO, JUST RETURN STB LDMOD .YES, MOD INSTS STB SDMOD STB LSMOD STB SSMOD JMP CONFG,I *** * * LDWD LOADS ONE WORD FROM SAM 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 * * * @LNIX NOP @LLIX NOP @LBUF NOP * LDCM NOP JSB .ENTR GET PARAMETER ADDRESS DEF @LNIX * * CM ADDR CALCULATION = (#LCNT(NIX-1)+LIX-1)2+#CM * LDA @LNIX,I ADA =D-1 MPY #LCNT SZB JMP LDCM,I ERROR RETURN ADA @LLIX,I ADA =D-1 ALS LEFT SHIFT(X2) FOR 2 WORD CM ELEMENTS ADA #CM * LDB @LBUF ==> SAM BUFFER JSB LDWS LOAD 2 WORDS FROM SAM * ISZ LDCM ADJUST RETURN ADDR JMP LDCM,I * *** *** * * STCM MOVES WORDS FROM LOCAL BUFFER TO COST MATRIX * * CALLING SEQUENCE: * * JSB STCM * DEF *+4 * DEF NIX NODE INDEX * DEF LIX LINK INDEX * DEF BUF BUFFER AREA TO BE STORED * * * @SNIX NOP @SLIX NOP @SBUF NOP * STCM NOP JSB .ENTR GET PARAMETER ADDRESS DEF @SNIX * * CM ADDR CALCULATION = (#LCNT(NIX-1)+LIX-1)2+#CM * LDA @SNIX,I ADA =D-1 MPY #LCNT SZB JMP STCM,I ERROR RETURN ADA @SLIX,I ADA =D-1 ALS LEFT SHIFT(X2) FOR 2 WORD CM ELEMENTS ADA #CM * LDB 0 ==> CM BUFFER IN SAM LDA @SBUF ==> LOCAL BUFFER JSB STWS STORE 2 WORDS TO SAM * ISZ STCM ADJUST RETURN ADDR JMP STCM,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 * *** *** * * STWS MOVES WORDS FROM LOCAL BUFFER TO SAM BUFFER * * CALLING SEQUENCE: * * ==> LOCAL BUFFER * ==> SAM BUFFER * STWS NOP JSB $LIBR NOP SSMOD JMP SSMVW JSB .LDX DEF SSLEN MWI JMP SSJSB SSMVW JSB .MVW DEF SSLEN NOP SSJSB JSB $LIBX DEF STWS * SSLEN DEC 2 2 WORD MOVE * *** SKP * * DATA AREA * K0 DEC 0 K1 DEC 1 K6 DEC 6 K8 DEC 8 NA10 OCT 100012 NA20 OCT 100024 I NOP LIX NOP NIX NOP MNLIX NOP LKCST NOP DUMMY NOP NAYBR NOP OVLEN NOP CONWD NOP OCT 10100 Z & WRITE BIT @#UPD DEF #UPDA #SEND ASC 3,#SEND PNAME ASC 3,#UPDA * CM BSS 2 MNCST BSS 2 * @LV NOP LV.C DEC 1 LV.N DEC 5 * NRVSZ DEC 3 NV.LU DEC 2 * MSGBF BSS 12 LU EQU MSGBF PREG EQU MSGBF+4 AREG EQU MSGBF+5 TOD EQU MSGBF+7 PGM EQU MSGBF+9 MSGLN ABS *-MSGBF * RQBUF BSS 5 STREM EQU RQBUF SEQ# EQU RQBUF+1 SRC# EQU RQBUF+2 DESTN EQU RQBUF+3 EC1 EQU RQBUF+4 RQLEN ABS *-RQBUF DABUF BSS 384 BUFFER SIZE = 128*3 DALEN ABS *-DABUF @DABF DEF DABUF END