ASMB,R,Q,C HED <#DOWN> REROUTING ROUTINE * (C) HEWLETT-PACKARD CO. 1979* NAM #DOWN,7 91750-1X005 REV 2013 800318 ALL W/ RR SPC 1 ENT #DOWN SPC 1 EXT #NCNT,#LCNT,#NRV,#CM,#QCLM,#MDCT EXT #LVSC,#FDMN,#NRVS,#CMCT EXT $OPSY,$LIBR,$LIBX,$TIME EXT XLUEX,EXEC,.MVW,.LDX * * NAME: #DOWN * SOURCE: 91750-18005 * RELOC: 91750-1X005 * 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. * ****************************************************************** * * * #DOWN CALLING SEQUENCE: * * < A REG. = LU THAT IS DOWNED > * < B REG. = NODE # > * JSB #DOWN * * * * SKP #DOWN NOP STA LU SAVE DOWN LU STB NODE NOP JSB CONFG LDA #LCNT RR ENABLE? SZA,RSS JMP #DOWN,I .NO LDA LU JSB #LVSC FIND INDEX & SAM ADDR OF DOWN LU JMP #DOWN,I NOT FOUND, NOT RR LINK STA LIX SAVE INDEX AS LIX STB @LV SAVE LV ADDRESS * * CHECK IF LINK IS REALLY DOWN * 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 DRIVER? JMP CKDWN .YES, SKIP CHECK RBR SLB,RSS ANY ERROR? JMP RETRN .NO, TRY THIS LINK AGAIN * * CHECK IF LINK HAS ALREADY BEEN DECLARED DOWN * CKDWN EQU * LDB @LV JSB LDWD --> SAM BUFFER FROM #LVSC SSA LINK DOWN ALREADY? JMP RR .NO, TRY REROUTE JSB #NRVS .YES, FIND CURRENT LINK DEF *+2 DEF NODE JSB ERROR CPA LU = TO DOWNED LINK? JMP #DOWN,I .YES, NO RR JMP RETRN .NO, TRY NEW LINK RR EQU * XOR =B100000 .NO, SET LINK TO BE DOWN JSB STWD STORE IT BACK * * WRITE DOWN LINK MESSAGE TO USER * LDA #QCLM SZA,RSS JMP SETUP DLD $TIME DST TOD JSB EXEC SEND MESSAGE TO #QCLM DEF *+8 DEF NA20 DEF K0 DEF MSGBF DEF MSGLN DEF K7 MESSAGE TYPE = 7 DEF K0 DEF #QCLM NOP IGNORE ERROR RETURN * * SET UP INITIAL VALUES FOR THE MAIN LOOP * SETUP EQU * CLA,INA SET UP STA I LOOP INDEX * LDA LIX SET UP STARTING ADA =D-1 ADDRESS OF CM ALS MULTIPLY BY 2 (SIZE OF CM ENTRIES) ADA #CM STA @CM * LDA #NRV SET UP STARTING ADA N.LU ADDRESS OF NRV.LU STA @NRV * * LOOP TO NOTE DOWN LINK FOR ALL NODES * LOOP EQU * LDB @CM --> CM ENTRY JSB LDWD LOAD COST VALUE SZA,RSS ZERO COST? JMP CKEND .YES, NO UPDATE LDA =D2 STA SSLEN 2 WORD STORE LDA @MAX --> VALUE TO BE STORED JSB STWS STORE MAX VALUE IN CM * LDB @NRV --> NRV.LU ENTRY JSB LDWD WILL RETURN NRV.LU WORD AND =B377 MASK OFF ALL EXECPT LU CPA LU EQUAL TO DOWN LU? RSS .YES, SKIP TO FIND NEW MIN JMP CKEND .NO, CHECK END LOOP * LDA I CLB JSB #FDMN FIND NEW MIN LINK JSB ERROR ERROR RETURN * CKEND EQU * LDA MAXH LOOP COUNT EQUAL CPA I TO MAX HOP COUNT? JMP SEND .YES, EXIT LOOP ISZ I UP LOOP COUNT LDA @CM UP ADA CMIX CM STA @CM ADDRESS LDA @NRV UP ADA NRVSZ NRV STA @NRV ADDRESS JMP LOOP * SEND EQU * CLA,INA SET SEND FLAG STA #CMCT JSB EXEC SCHEDULE SEND PROCESS W/O WAIT DEF *+4 DEF NA10 DEF #SEND DEF K1 DOWN MSG STARTS WITH SEQ# = 2 JSB ERROR * * UP/DOWN COUNTER PROCESSING * LDA =D3 GET SAVED TIME & COUNTER STA LSLEN 3 WORD MOVE LDA @LV GET LV ADDRESS ADA =D2 ADD OFFSET STA @LV LDB @LBUF LOCAL ADDRESS JSB LDWS GET 3 WORDS FROM SAM * JSB EXEC GET CURRENT TIME DEF *+3 DEF NA11 DEF TBUF JSB ERROR * LDA T.DAY MPY =D24 CONVERT CURRENT DAY TO HRS ADA T.HR ADA L.HR - SAVED HOUR SSA CURRENT HR SHOULD BE = OR > ADA =D8760 IF NOT, ADD 1 YEAR (365X24 HRS) SZA,RSS CURRENT HR = SAVED HR? JMP CPSEC .YES, COMPARE SEC ADA =D-1 SZA OVER 1 HOUR? JMP RESET .YES, RESET COUNTER & TIME LDA =D60 CARRY OVER 1 HR CPSEC EQU * ADA T.MIN ADD CURRENT MIN MPY =D60 CONVERT TO SEC ADA T.SEC ADA L.SEC - SAVED SEC ADA =D-300 OVER 5 MIN? SSA,RSS JMP RESET .YES, RESET COUNTER & TIME ISZ L.CNT .NO, UP COUNTER JMP STLV IF DONOT ROLL OVER, STORE LV * LDA LU IF ROLL OVER, DISABLE LINK IOR =B100000 STA CONWD LDA =B3100 STA CONWD+1 JSB XLUEX DISABLE CALL DEF *+3 DEF NA3 DEF CONWD JSB ERROR CLA CLEAR SAVED VALUE STA L.HR STA L.SEC STA L.CNT * LDA #QCLM SZA,RSS JMP STLV DLD $TIME DST TOD JSB EXEC DEF *+8 DEF NA20 DEF K0 DEF MSGBF DEF MSGLN DEF K5 DEF K0 DEF #QCLM NOP JMP STLV RESET EQU * LDA T.DAY MPY =D24 ADA T.HR CMA,INA STA L.HR RESET HR LDA T.MIN MPY =D60 ADA T.SEC CMA,INA STA L.SEC RESET SEC LDA #MDCT STA L.CNT RESET COUNTER STLV EQU * STORE LV BACK TO SAM LDA =D3 STA SSLEN LDA @LBUF LDB @LV JSB STWS RETRN EQU * ISZ #DOWN JMP #DOWN,I SKP * * ERROR HANDLING * ERROR NOP DST AREG CLA STA #LCNT DISABLE RR LDA #QCLM SZA,RSS JMP #DOWN,I LDA @#DWN 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 NOP JMP #DOWN,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, JUST INIT CONSTANT STB LDMOD .YES, MODIFED INSTRUCTIONS STB SDMOD STB LSMOD STB SSMOD * INIT EQU * LDA =B77777 STA MAXC SET UP MAX COST LDA #NCNT CMA,INA STA MAXH SET UP MAX HOP COUNT LDA #LCNT ALS MULTIPLY BY TWO STA CMIX SET UP INCREMENTAL IX FOR CM 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 * *** *** * * 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 K5 DEC 5 K7 DEC 7 K8 DEC 8 NA3 OCT 100003 NA10 OCT 100012 NA11 OCT 100013 NA20 OCT 100024 CONWD BSS 2 LIX NOP DOWN LINK INDEX I NOP LOOP INDEX NODE NOP @#DWN DEF #DOWN PNAME ASC 3,#DOWN #SEND ASC 3,#SEND * MAX BSS 2 MAXC EQU MAX MAX COST MAXH EQU MAX+1 MAX HOP COUNT @MAX DEF MAX ADDRESS OF MAX * @CM NOP POINTER TO CM IN SAM CMIX NOP INCREMENTAL INDEX FOR CM * @NRV NOP POINTER TO NRV IN SAM NRVSZ DEC 3 LENGTH OF NRV ENTRIES N.LU DEC 2 * MSGBF BSS 12 LU EQU MSGBF DOWN LU PREG EQU MSGBF+4 AREG EQU MSGBF+5 TOD EQU MSGBF+7 PGM EQU MSGBF+9 MSGLN ABS *-MSGBF * TBUF BSS 5 T.SEC EQU TBUF+1 T.MIN EQU TBUF+2 T.HR EQU TBUF+3 T.DAY EQU TBUF+4 * @LV NOP LBUF BSS 3 L.HR EQU LBUF L.SEC EQU LBUF+1 L.CNT EQU LBUF+2 @LBUF DEF LBUF END