ASMB,Q,C HED MA 'WATCH DOG' TIMER * (C) HEWLETT-PACKARD CO. 1980 NAM MATIC,19,30 91750-16136 REV 2013 800423 ALL (MA) SPC 1 ****************************************************************** * * (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 THE HEWLETT-PACKARD COMPANY. * ****************************************************************** SPC 1 EXT #MARN,#GRPM,#MCTR,#MTBL,#MARL,#MHCT,DTACH EXT RNRQ,EXEC,XLUEX,$LIBR,$LIBX,.MVW,.LDX EXT #NRVS,$OPSY,#LEVL,#NODE SPC 2 * MATIC * -------------- * SOURCE PART # 91750-18136 * REL. PART # 91750-16136 * PROGRAMMER TOM MILNER * WRITTEN 06.19.79 SPC 2 * MATIC IS THE 'WATCH DOG' TIMER FOR MESSAGE ACCOUNTING (THE * DS/1000 END-TO-END PROTOCOL). IT SHOULD BE SCHEDULED TO RUN * EVERY SECOND (UPLIN CURRENTLY DOES THIS). ITS OPERATION IS * AS FOLLOWS: * * 1. ACCESS TO THE MA TABLE IS DISABLED (BY RESOURCE NUMBER). * 2. THE NEXT MA ENTRY IS MOVED TO A LOCAL BUFFER (FOR EASY * ACCESS. * 3. IF THE TRANSMISSION TIMEOUT CLOCK (VT1) IS RUNNING... * 3A. VT1 IS DECREMENTED (CLOCK TICK). * 3B. IF A TIMEOUT OCCURS (VT1=0) THEN THE CANCELATION * TIMER (VCC) IS INCREMENTED. * 3C. IF VCC < 4 THEN A CANCEL MESSAGE IS SENT. * 3D. IF VCC >= 4 THEN A 'NO RESPONSE' MESSAGE IS SENT * TO THE LOCAL GRPM TO INFORM #MAPP THAT NOTHING HAS * COME FROM THE OTHER SIDE OF THE CHANNEL. * 4. IF THE IDLE CLOCK IS RUNNING (VT2) THEN... * 4A. VT1 IS DECREMENTED. * 4B. IF VT1 = 0 THEN A 'RECEIVER READY' MESSAGE IS SENT * TO THE OTHER NODE. * 5. IF THE 'DIRTY BIT' IS SET THEN THE MA TABLE ENTRY IS * WRITTEN BACK. * 6. ACCESS TO THE MA TABLE IS RE-ENABLED. * 7. THE ABOVE STEPS ARE REPEATED FOR EVERY MA TABLE ENTRY SKP * GLBLK-START * ****************************************************************** * * * G L O B A L B L O C K REV 2013 790531 * * * * GLOBAL OFFSETS INTO DS/1000 MESSAGE BUFFERS, USED BY: * * * * REMAT, RFMST, DEXEC, DMESS, FLOAD, POPEN, #MAST * * GET, #SLAV, RQCNV, RPCNV, GRPM, LSTEN, PTOPM * * EXECM, EXECW, OPERM, RFAM1, RFAM2, DLIST, DLIS3 * * * ****************************************************************** * ***!!!!! THE FIRST 7 WORDS (#STR THRU #ENO) MUST BE FIXED !!!!!*** #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 >>> * ****************************************************************** * * GLBLK-END SPC 1 A EQU 0 B EQU 1 SKP MATIC EQU * JSB DTACH DEF *+1 JSB CONFG ONE TIME CHECK FOR DMS DLD #MCTR (-) NUMBER OF MA ENTRIES SZA,RSS ANY ENTRIES? JMP EXIT . NO RETURN, NOTHIN' TO DO... STA CTR ELB,CLE,ERB CLEAR SIGN BIT (DEBUG FLAG) STB LINK CLA STA DIRTY INITIALIZE DIRTY BIT TO 'CLEAN' * CYCLE NOP ... FOR TIMING... NOP NOP JSB RNRQ LOCK MA TABLE DEF *+4 DEF LK DEF #MARN MA RESOURCE NUMBER DEF TMP (DUMMY ENTRY) ZERO NOP * LDB LINK --> NEXT MA TABLE ENTRY JSB LODWD GET NODE SSA DUMMY ENTRY? JMP FINI . YES EXIT LOOP JSB FETCH GET ENTRY * LDA VA OUTSTANDING CPA VS MESSAGES ? JMP TIME? . NO LDA VT1 IF TIMER IS NOT SZA,RSS RUNNING, SET IT LDA D2 TO TWO TIMER STA VT1 "TICKS" * * CHECK FOR TRANSMISSION TIMEOUT * TIME? EQU * LDA VT1 SZA,RSS CLOCK RUNNING? JMP IDLE . NO CHECK IDLE CLOCK ISZ DIRTY SET DIRTY BIT ADA N1 TICK STA VT1 SZA TIMEOUT? JMP IDLE . NO CHECK IDLE CLOCK * * ACK TIMED OUT * LDA VCC CHECK FOR TOO MANY CANCELS INA STA VCC BUMP CONSECUTIVE CANCEL COUNTER CMA ADA #MARL SSA,RSS VCC EXCEEDS MAX? JMP CAN . NO SEND (ANOTHER) CANCEL MSG * * TOO MANY CONSECUTIVE TIMEOUTS; SEND 'NO RESPONSE' TO GRPM * LDA .NR JSB FMT LDA MSS+#STR MAKE REQUEST LOOK LIKE IOR BIT14 A REPLY... STA MSS+#STR CLA SEND TO LU=0 JSB SEND JMP FINI * * SEND 'CAN' MESSAGE TO NODE & RESET TIMER * CAN LDA TMAX STA VT1 LDA .CAN JSB FMT FORMAT MA MESSAGE * JSB #NRVS FIND LU OF NODE DEF *+2 DEF NODE JMP FINI (ERROR RETURN) JSB SEND CLASS WRITE/READ * * CHECK IDLE TIMER; IF TIMEOUT SEND 'RR' * IDLE LDA VT2 SZA,RSS IDLE CLOCK RUNNING? JMP FINI . NO END OF LOOP ISZ DIRTY INDICATE ENTRY MODIFIED ADA N1 TICK STA VT2 SZA TIMEOUT? JMP FINI . NO * LDA .RR RECEIVER READY (AND IDLE) MESSAGE JSB FMT FILL REQUEST BUFFER * JSB #NRVS DEF *+2 DEF NODE JMP FINI (ERROR RETURN) JSB SEND CLASS WRITE/READ * * FINISHED W/ THIS ENTRY; RESTORE IF MODIFIED * FINI LDA DIRTY CHECK DIRTY BITS SZA 'DIRTY' ENTRY JSB STORE . YES RESTORE ENTRY * JSB RNRQ UNLOCK MA TABLE DEF *+4 DEF UNLK DEF #MARN DEF TMP NOP * LDA LINK ADA RECLN --> NEXT ENTRY STA LINK ISZ CTR JMP CYCLE CONTINUE IF MORE * EXIT JSB EXEC BYE BYE DEF *+4 DEF D6 DEF D0 DEF N1 SAVING RESOURCES... SKP *----------------------------------------------------------- * SUBROUTINES *----------------------------------------------------------- SPC 2 * SEND- WRITES OUT REQUEST BUFFER; =LU * BSS 1 (STORAGE) SEND NOP IOR BIT15 BYPASS SESSION SST STA LU * LDA #GRPM SET THE IOR BIT15 NO STA SEND-1 WAIT BIT!!! * JSB XLUEX CLASS WRITE/READ DEF *+8 DEF CLS20 DEF LU DEF ZERO NO DATA DEF ZERO DATA LENGTH = 0 @MSS DEF MSS REQUEST BUF DEF MSSLN REQUEST LENGTH DEF SEND-1 GRPM'S CLASS NOP JMP SEND,I LU NOP CONWD OCT 010100 CONTROL WORD SPC 2 * FMT- FORMAT LOCAL REQUEST BUFFER, = MA MESSAGE * BSS 1 (STORAGE) FMT NOP STA FMT-1 SAVE MA MESSAGE CLA STA MSS CLEAR BUFFER LDA @MSS LDB @MSS INB JSB .MVW DEF MSSLN NOP LDA STREM STREAM WORD STA MSS+#STR LDA #NODE STA MSS+#SRC LDA NODE STA MSS+#DST ASSUME 'NODE' IS DESTINATION NODE LDA #LEVL STA MSS+#LVL LDA #MHCT SET HOP COUNT STA MSS+#HCT LDA VS ADA N1 NS:=VS-1 SZA,RSS ADA DIFF ADJUST FOR ROLLOVER LDB STATE CPB .DOWN IF CHANNEL IS DOWN CCA SET INITIALIZATION INDICATOR STA MSS+#MAS LDA VR STA MSS+#MAR LDA VC STA MSS+#MAC CCA STA MSS+#REP MA INDICATOR LDA FMT-1 MA MESSAGE STA MSS+#REP+1 LDA LLU SET MA ASSIGNMENT BIT IOR BIT11 (BIT11) IN THE STA LLU LAST LU WORD JMP FMT,I SPC 2 * LODWD- GET WORD FROM SAM --> SAM * LODWD NOP DMS3 JMP *+4 NOP IF DMS XLA B,I RSS LDA B,I JMP LODWD,I SPC 2 * BEGIN-FETCH * FETCH NOP STA NODE LDA LINK -->NEXT ENTRY (SAVE FOR STORE) LDB @REC -->LOCAL BUFFER DMS1 JMP *+5 'NOP'ED IF DMS JSB .LDX DEF RECLN MWF JMP *+4 JSB .MVW DEF RECLN NOP *-- UNPACK CHANNEL RECORD CLA LDB .TBL+1 STATE WORD WHEN PACKED LSR 2 ISOLATE STATE RAL,RAL STA STATE LSR 8 ISOLATE MAX TIMEOUT VALUE ALF,ALF STA TMAX LSR 2 VS OFFSET (VSO) WHEN PACKED ADB VA CALCULATE VS SSB ADB OFFST ADJUST FOR ROLLOVER STB VS VS:=VA+OFFSET FROM VA LDB .TBL+3 VT1 AND VT2 WHEN PACKED CLA LSR 8 ISOLATE VT2 ALF,ALF STA VT2 STB VT1 LDB .TBL+7 LSR 12 BLF LSR 4 STB VCC CANCEL COUNTER STA VCD DOWN COUNTER JMP FETCH,I SPC 1 MACTR NOP NUMBER OF MA TABLE ENTRIES @REC DEF .TBL --> START OF PACKED RECORD RECLN DEC 10 LENGTH OF MA ENTRY .NON DEC 1 NON-MA STATE DIFF OCT 077777 (SUBTRACTION) CONSTANT FOR ROLLOVER OFFST OCT 100001 (ADDITION) CONSTANT FOR ROLLOVER SPC 2 * STORE- PACKS AND RESTORES CHANNEL RECORD * STORE NOP CLA STA DIRTY SET DIRTY BITS TO 'CLEAN' *-- PACK CHANNEL RECORD LDA VCD ALF LDB VCC LSR 4 STA .TBL+7 LDA VT2 LSL 8 LDB VT1 LSR 8 STA .TBL+3 TIMERS (VT1/VT2) LDA TMAX RAL,RAL IOR STATE LSL 4 LDB VA CMB,INB ADB VS CALCULATE VSO = VS-VA SSB ADB DIFF ADJUST FOR ROLLOVER LSR 4 STA .TBL+1 STATE WORD (MSW) WHEN PACKED LDA NODE STA .TBL RESTORE NODE NUMBER * JSB $LIBR TURN OFF INTERRUPTS NOP LDA @REC -->LOCAL BUFFER LDB LINK -->SAM DMS2 JMP ST2 'NOP'ED IF DMS JSB .LDX DEF RECLN MWI MOVE BACK INTO SAM JMP ST3 ST2 JSB .MVW MOVE BACK INTO SAM DEF RECLN NOP ST3 JSB $LIBX TURN INTERRUPTS BACK ON DEF *+1 DEF *+1 JMP STORE,I END-STORE * END-FETCH SKP *----------------------------------------------------------- * CONSTANTS *----------------------------------------------------------- STREM OCT 010000 STREAM WORD BIT11 OCT 004000 MA ASSIGNMENT BIT BIT14 OCT 040000 REPLY BIT BIT15 OCT 100000 N1 DEC -1 D0 DEC 0 D2 DEC 2 D6 DEC 6 .RR DEC 1 .CAN DEC 8 .NR DEC 16 * .DOWN OCT 0 .UP OCT 2 .PEND OCT 3 * CLS20 DEF 20,I LK OCT 040001 UNLK OCT 040004 MSSLN ABS #REP+2+#LSZ *----------------------------------------------------------- * STORAGE *----------------------------------------------------------- CONFG NOP CONFIGURE IF DMS (ROUTINE OVERLAYED) CLA CCB ADB CONFG ADDRESS OF CALL STA B,I NOP CALL LDB $OPSY RBR,SLB DMS? RSS JMP CONFG,I . NO RETURN STA DMS1 STA DMS2 STA DMS3 JMP CONFG,I RETURN (END-CONFG) * ORG CONFG LINK BSS 1 . ADDRESS OF ENTRY NODE BSS 1 . NODE # OF CHANNEL IDX BSS 1 . INDEX INTO MA TABLE DIRTY BSS 1 . DIRTY BITS STATE BSS 1 . CHANNEL STATE TMAX BSS 1 . MAX TIMEOUT TICKS VS BSS 1 . SEND SEQUENCE # .TBL EQU * WORD ZERO OF TABLE ENTRY WHEN PACKED VT2 BSS 1 . RECEIVER IDLE TIMER VCD BSS 1 . # TIMES CHANNEL DOWN VA BSS 1 . ACKNOWLEDGEMENT VARIABLE VT1 BSS 1 . ACKNOWLEDGEMENT TIMER VR BSS 1 . RECEIVE SEQUENCE # VF BSS 1 . RECEIVE FLAGS VC BSS 1 . CANCEL FLAGS VCC BSS 1 . # CONSECUTIVE CANCELATIONS LERC BSS 1 . LAST ERROR / QUALIFIER REPORTED LERN BSS 1 . LAST NODE REPORTING ERROR * TMP BSS 1 CTR BSS 1 MSS BSS #REP+3+#LSZ LLU EQU MSS+#REP+1+#LSZ * SIZE EQU * END MATIC