ASMB,R,Q,C HED <#MAPP> MA POST PROCESSOR * (C) HEWLETT-PACKARD CO. 1980 NAM #MAPP,7 91750-1X016 REV 2013 801013 ALL (MA) ENT #MAPP * EXT #NQUE,#RQUE,RNRQ,$LIBR,$LIBX EXT .MVW,.LDX,#GBUF EXT #NRVS,EXEC,XLUEX,#RSAX,#GETR,#PUTR * EXT #MCTR,#MAHC,#MARN,#MTBL,#MARL,#MAZE EXT #PLOG,#GRPM,$OPSY,#NODE,#LEVL,#QCLM,#MHCT 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 * #MAPP * -------- * * SOURCE PART # 91750-18016 * REL. PART # 91750-1X016 * PROGRAMMER TOM MILNER * WRITTEN 06.20.79 * REVISED 801013 CLARK JOHNSON * * * #MAPP MONITORS OUTGOING AND INCOMING NETWORK MESSAGES. * CALLING SEQUENCE: * * = READ/WRITE COMPETION (0/1) * = LAST LU WORD IN LOCAL APPENDAGE * <#GBUF HAS REQUEST/REPLY BUFFER IN GRPM> * JSB #MAPP * < RETURN IF MESSAGE DISCARDED > * < NORMAL RETURN > * * * THE ALGORITHM (IN PASCAL) HAS BEEN APPENDED TO THE MA ERS FOR * THE READER'S AMUSEMENT. #MAPP'S OPERATION IS AS FOLLOWS: * * 1. ACCESS TO THE MESSAGE TABLE IS LOCKED (BY RN) * * IF THE MESSAGE WAS OUTBOUND * 2. AND WAS TRANSMITTED BY A SLAVE THEN THE MESSAGE IS * 'REQU'D TO A HOLD CLASS FOR POSSIBLE LATER RETRANSMISSION. * THERE IS NO FURTHER PROCESSING FOR OUTBOUND MESSAGES. * * IF THE MESSAGE WAS INCOMING -- * 3. IF THE MESSAGE WAS A REQUEST TO REININITIALIZE THEN THE * CHANNEL STATE IS SET TO PENDING AND AN INITIALIZE RESPONSE * IS ECHOED BACK. * 4. OTHERWISE, PROCESSING IS DETERMINED BY THE CHANNEL'S STATE: * DOWN - THE MESSAGE IS DISCARDED AND INITIALIZATION * IS REQUESTED ('INIT' IS SENT) * PENDING - THE MESSAGE IS DISCARDED AND IF IT WAS AN INITIALIZE * RESPONSE THEN THE STATE IS CHANGED TO 'UP' AND THE * NORMAL ACKNOWLEDGEMENT PROCESSING IS PERFORMED. * UP - IF THE MESSAGE IS WITHIN THE ACK 'WINDOW' THE * ACKNOWLEDGEMENT PROCESSING IS DONE. IF IT IS * WITHIN THE RECEIVE 'WINDOW' THEN THE RECEIVE * PROCESSING IS DONE. IF IT IS NOT WITHIN THIS LATTER * WINDOW THE MESSAGE IS DISCARDED. * NONMA - RETURN TO CALLER * 5. UPDATED CHANNEL INFO IS RESTORED (INTO SAM) IN THE MA * MESSAGE TABLE AND THE TABLE IS UNLOCKED (ITS RN FREED UP). SKP * GLOBAL-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, 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 >>> * ****************************************************************** * * GLOBAL-END * G EQU #GBUF SKP #MAPP NOP STA RD.WC SAVE READ/WRITE COMPLETION STB LLU SAVE LAST LU WORD (FROM LOCAL APPENDAGE) JSB CKDMS ONE-TIME CHECK FOR DMS; 'NOP'ED LDA CONWD STA LU+1 INITIALIZE I/O CONTROL WORD STA FSCTR << INITIALIZE FAILSAFE >> CLA STA DIRTY CLEAR DIRTY FLAG STA DSCRD INIT MSG DISCARD FLAG STA MAMSG INITIALIZE MA MESSAGE STA _MAZE INITIALIZE TO OUTBOUND TRAFFIC LDA #MCTR SZA,RSS MA INITIALIZED IN SYSTEM? JMP FLY . NO RETURN * * CHECK FOR NETWORK (STREAM 0) MESSAGES * LDA G+#STR GET STREAM WORD LSL 10 ISOLATE STREAM SZA STREAM ZERO? JMP RSM? . NO CHECK FOR REMOTE SESSION MESSAGE LDA G+#REP . YES CHECK SUBFIELD INDICATOR CPA N1 MA SUBFIELD? RSS JMP FLY . NO, IGNORE ALL OTHER NETWORK MSGS LDA G+#REP+1 . YES GET MA MESSAGE STA MAMSG * * CHECK FOR SPECIAL LOGOFF MSG (STREAM 7) FROM UPLIN * (IE., REMOTE SESSION) AND IGNORE IT TOO * RSM? LDA G+#MAS CHECK FOR NS = -2 CPA N2 AND IGNORE IF IT IS JMP FLY STA NS OTHERWISE SAVE NS * LDA G+#MAR NR STA NR LDA G+#MAC NC STA NC * LDA G+#SRC CHECK FOR STORE & LDB G+#DST FORWARD TRAFFIC CPA #NODE AND IGNORE RSS IT. CPB #NODE RSS JMP FLY CPA B AND IGNORE LOCAL-TO-LOCAL TRAFFIC JMP FLY * * WAIT FOR ACCESS TO MA TABLE * JSB RNRQ WAIT AND DISABLE ACCESS DEF *+4 DEF LK DEF #MARN (MA RESOURCE #) DEF TMP (TMP STORAGE FOR STATUS) ZERO NOP * * CHECK SOURCE/DESTINATION FOR OUTGOING OR INCOMING * LDA G+#STR RAL,ELA REPLY BIT TO LDA G+#DST SEZ,RSS CHECK FOR REPLY JMP QUEST REQUEST CPA #NODE LOCAL NODE? JMP *+3 . YES OUTGO:=TRUE NODE:=SORCE CLB . NO OUTGO:=FALSE NODE:=DEST JMP GTVAR CCB LDA G+#SRC JMP GTVAR QUEST CPA #NODE LOCAL NODE? JMP *+3 . YES OUTGO:=FALSE NODE:=SORCE CCB . NO OUTGO:=TRUE NODE:=DEST JMP GTVAR LDA G+#SRC CLB GTVAR STB TMP SAVE OUTGO FLAG JSB FETCH GET CHANNEL VARIABLES LDA TMP SZA,RSS OUTBOUND MESSAGE? JMP INCOM . NO INCOMING SKP *---------------------------------------------------------------+ * | * PROCESS OUTGOING MESSAGES | * | *---------------------------------------------------------------+ OUTGO EQU * LDB STATE CPB .NON NON MA NODE? JMP EXIT . YES ALL DONE *-- CHECK FOR LOCALLY GENERATED TRAFFIC (CHECK ASSIGNMENT BIT) * LDA LLU GET LAST LU WORD AND BIT11 TEST MA ASSIGNMENT BIT SZA,RSS IGNORE IF NOT JMP EXIT SET... * LDA MAMSG CHECK FOR MA MESSAGE SZA IGNORE IF MA MSG PRESENT JMP DOWN? LDA VT1 SET ACK TIMER SZA,RSS IF NOT ALREADY SET ISZ DIRTY AND SET DIRTY FLAG SZA,RSS LDA TMAX STA VT1 DOWN? LDA MAMSG CLEAR IDLE TIMER EXCEPT CPA .RR FOR IDLE TRAFFIC! JMP *+3 CLA STA VT2 CLEAR IDLE TIMER LDB STATE CPB .DOWN CHANNEL DOWN? RSS . YES REQUEST INITIALIZATION JMP SLAV? . NO, CHECK FOR SLAVE TRANSMISSION * * CHANNEL DOWN; TRY TO INITIALIZE * ISZ DIRTY SET DIRTY BIT LDA .PEND CHANGE STATE TO PENDING STA STATE CCA STA VC SO THAT NC:=-1 (ALL MESSAGES CANCELED) ADA #MARL NO RETRIES STA VCC LDA TMAX STA VT1 SET ACKNOWLEDGEMENT TIMER * * FORMAT INITIALIZE MESSAGE * LDA BIRTH INITIALIZE NUMBER SEQUENCE STA VA VA:=BIRTH STA VR VR:=BIRTH STA NS NS:=BIRTH JSB INCR STA VS VS:=BIRTH+1 JSB FMT LDA .INIT INITIALIZE MESSAGE STA RQB+#REP+1 JSB SEND SEND 'INIT' MESSAGE * * IF SLAVE TRANSMISSION SAVE IN HOLD QUEUE TILL ACK * SLAV? LDA MAMSG IGNORE MA MESSAGES SZA JMP EXIT * LDA G+#STR RAL SSA,RSS REPLY? JMP EXIT . NO ALL DONE * LDA VS VALIDITY CHECK - VERIFY JSB DECR THAT MSG IN RANGE OF STA TMP VS-1 AND VA LDA NS JSB RANGE VS-1 >= NS >= VA ?? DEF VA (LOWER BOUND) VA DEF TMP (UPPER BOUND) VS-1 JMP AGAIN OUT OF RANGE - RESEND IT! * * SAVE SLAVES TRANSMISSIONS * LDA NS GET SEQUENCE # AND FORM LSL 12 UNIQUE MA IDENTIFIER IOR IDX STA G+#MAS SAVE IDENTIFIER * JSB #NQUE REQUEUE TO HOLD CLASS DEF *+9 DEF CLS20 (WRITE/READ) DEF BIT15 (LU=0 BYPASS SESSION SST) DEF ZERO DEF ZERO DEF G (ZBUF OVERLAY) DEF P#MAS (ZBUF OVERLAY LENGTH) DEF #MAHC (DESTINATION CLASS) DEF #GRPM (SOURCE CLASS) JMP *+4 ERROR RETURN LDA BIT15 STA DSCRD SET REQUEUE (BIT15) FLAG JMP *+6 DST MAERR+2 SAVE REGISTERS LDA _MAZE IOR BIT10 SET 'CANNOT REQUEUE' BIT STA _MAZE LDA NS STA G+#MAS JMP EXIT SPC 2 * * FOR DRIVER 65 LINKS, IF RTRY HAS HAD MSG IT MAY HAVE * BEEN PASSED OVER FOR RETRANSMISSION, THEREFORE RESEND IT * AGAIN EQU * SINCE MSG OUT OF WINDOW RESEND IT LDA VS STA RQB+#MAS NS JSB INCR VS:=VS+1 STA VS LDA VR STA RQB+#MAR NR LDA VC STA RQB+#MAC NC * JSB #NRVS FIND LU OF THIS NODE DEF *+2 DEF NODE NOP IOR BIT15 BYPASS SESSION SST STA LU * LDA _MAZE IOR BIT5 'RESENDING SLAVE' BIT STA _MAZE * JSB #NQUE RESEND SLAVE DEF *+9 DEF CLS20 WRITE/READ DEF LU DEF ZERO DEF ZERO DEF RQB ZBUFFER OVERLAY DEF P#MAC ZBUF OVERLAY LENGTH DEF #GRPM (DESTINATION CLASS #) DEF #GRPM (SOURCE CLASS #) RSS ERROR RETURN JMP EXIT DST MAERR+2 SAVE ERROR CODES LDA _MAZE IOR BIT10 << REQUE ERROR ! >> STA _MAZE JMP EXIT SKP *---------------------------------------------------------------+ * | * PROCESS INCOMING MESSAGES | * | *---------------------------------------------------------------+ INCOM EQU * LDA BIT0 STA _MAZE INBOUND LDA VA LDB NS DST MAERR+2 << DATA FOR FAILSAFE >> LDA MAMSG IS IT AN MA MESSAGE? SZA NO, SO SKIP IT ISZ DSCRD YES, SO DISCARD IT LATER * *-- IF NS=0 THEN STATE:=NONMA LDA NS SZA,RSS FROM MA NODE? JMP GONON . NO CHANGE STATE TO NONMA ISZ DIRTY LDA NR CPA N1 CHECK FOR GRPM ERROR RSS JMP CKMA CHECK FOR MA MESSAGE * *-- NR=-1 MEANS ERROR ECHOED FROM GRPM * LDA G+#ECQ LSR 4 SAVE THIS ERROR MESSAGE FOR AND B17 LATER AND ENCRYPT IT LDB A TO TAKE UP LESS SPACE STA TMP SAVE FOR LATER LDA G+#EC2 AND B17 ALF IOR B STA LERC ERROR CODE / QUALIFIER LDA G+#ENO STA LERN REPORTING NODE NUMBER * DLD G+#EC1 CHECK FOR DS08(4) AND CPA "DS" LET IT GO BACK TO THE USER RSS JMP KILLM CPB "08" RSS JMP KILLM LDA TMP CPA .4 DS08(4)? JMP EXIT . YES PASS IT ON TO THE USER * KILLM EQU * ISZ DSCRD FLUSH THIS MESSAGE LDB MAMSG SZB,RSS MA MSG? JMP EXIT . NO JUST FLUSH MESSAGE LDA G+#EC2 IF DS06 ON STREAM 0 THEN OTHER CPA "06" SIDE DOES NOT HAVE MA JMP GONON TURN OFF MA LDA STATE CPA .PEND JMP FAIL4 IF PENDING THEN CHANGE STATE TO DOWN JMP EXIT * CKMA LDB MAMSG SZB,RSS MA MESSAGE? JMP SETT2 . NO SET IDLE TIMER (VT2) LDA G+#EC2 CHECK FOR "DS06" CPA "06" JMP GONON DS06 MEANS OTHER SIDE HAS NO MA CPB .RR DON'T SET IDLE TIMER RSS ON .RR MESSAGES SETT2 JSB ITIME BUT SET IT ON ALL OTHERS LDB MAMSG CPB .NR NO RESPONSE? JMP FAIL . YES SET CHANNEL DOWN CPB .INIT INITIALIZE REQUEST? JMP SETUP . YES RE-UP MA JMP CASE. * GONON LDA .NON ALREADY NONMA? CPA STATE JMP EXIT . YES NO NEED TO MODIFY ISZ DIRTY MA TABLE ENTRY IS DIRTY STA STATE STATE CHANGED TO NONMA CLA STA VR STA VT1 STA VT2 STA VCC JSB EXEC SEND "MA REMOVED FROM XXX" TO QCLM DEF *+8 DEF CLS20 DEF ZERO (LU=0) DEF MAERR DEF .1 DEF .4 (ERROR MSG 4) DEF ZERO DEF #QCLM NOP JSB FLUSH CLEAR OUT MA HOLD QUEUE JMP EXIT * * 'NO RESPONSE' RECEIVE FROM CHANNEL TIMER; INFORM MASTERS, * CLEAR SLAVE TRANSMISSIONS FROM HOLD CLASS, STATE TO DOWN. * FAIL EQU * LDA N17 STA FSCTR << INITIALIZE FAILSAFE >> LDA VA ANY MORE OUTSTANDING MESSAGES? CPA VS JMP FAIL4 . NO, DONE W/ MSG CLEANUP *-- FORMAT UNIQUE MA IDENTIFIER LSL 12 IOR IDX STA IDENT *-- BUMP TO NEXT MESSAGE NUMBER LDA VA JSB INCR VA:=VA+1 STA VA * JSB #RSAX SEARCH MASTER TCBS DEF *+3 DEF .11 SEARCH USING MA IDENTIFIER AS KEY DEF IDENT SSB WAS A TCB FOUND? JMP FAIL3 . NO CONTINUE * ADB .3 . YES, --> MASTERS CLASS (TCB+3) JSB LODWD GET CLASS RAL,CLE,ERA CLEAR SIGN STA TMP JSB FMT LDA "DS" STA RQB+#EC1 LDA LERC SZA,RSS ANY ERROR REPORTED? LDA DS053 . NO USE DEFAULT OF DS05(3) CLB RRR 4 EC2 TO , ECQ TO IOR "00" STA RQB+#EC2 BLF,BLF STB RQB+#ECQ QUALIFIER LDA LERN SZA,RSS ANY REPORTING NODE? LDA #NODE . NO USE LOCAL IOR BIT15 STA RQB+#ENO LDA #NODE STA RQB+#DST * JSB XLUEX SEND MSG TO MASTER DEF *+8 INDICATING A TIMEOUT DEF CLS20 DEF BIT15 LU=0 DEF ZERO DATA BUFFER DEF ZERO DATA LENGTH = 0 DEF RQB REQUEST BUFFER DS05(3) DEF P#MHD REQUEST LENGTH DEF TMP CLASS NUMBER NOP * FAIL3 ISZ FSCTR << FAILSAFE >> JMP FAIL+2 CHECK FOR ANY MORE MSGS * FAIL4 EQU * JSB FLUSH FLUSH MA HOLD QUEUE ISZ VCD BUMP DOWN COUNTER LDA .DOWN STA STATE CHANGE STATE TO DOWN CLA STA VT1 STA VT2 STA VCC JMP EXIT * * ACKNOWLEDGE INITIALIZE REQUEST AND RESPOND WITH 'IR'. * SETUP EQU * RESPOND TO 'INIT' REQUEST LDA VA STA OLDVA SAVE FOR LATER LDA VS STA OLDVS SAVE CURRENT VS FOR LATER JSB ITIME SET IDLE TIMER (VT2) LDA .UP STA STATE CHANGE STATE TO UP LDA NR JSB INCR STA VS VS:=NR+1 STA VA VA:=NR+1 LDA NS JSB INCR STA VR VR:=NS+1 CLA STA VF VF:=0 STA VCC MAX RETRIES CCA STA VC SO THAT NC:=-1 (CAUSE OTHER SIDE TO RETRANSMIT) * * ECHO INITIALIZE MESSAGE WITH 'IR' (INIT RESPONSE) * JSB FMT FORMAT MA MESSAGE LDA G+#STR IOR BIT14 SET REPLY BIT IN STREAM STA RQB+#STR LDA G+#SRC GET SOURCE NODE STA RQB+#SRC LDA #NODE DESTINATION NODE (LOCAL NODE) STA RQB+#DST LDA .IR STA RQB+#REP+1 'IR' MESSAGE * JSB SEND SEND 'IR' *-- RETRANSMIT CURRENTLY UNACKNOWLEDGED MESSAGES (VA TO VS-1) LDA OLDVA LDB OLDVS JSB REXMT RETRANSMIT ANY OUTSTANDING MSGS JMP EXIT SPC 2 * PROCESSING DETERMINED BY STATE OF CHANNEL * CASE. EQU * PROCESSING DETERMINED BY STATE LDA STATE CPA .UP UP? JMP UP. . YES CPA .PEND PENDING? JMP PEND. SPC 2 * * DOWN; IGNORE ALL MESSAGES * DOWN. ISZ DSCRD JMP EXIT SPC 2 * * PENDING; RESPOND IF MA MSG IN VALID RANGE * PEND. EQU * ISZ DSCRD LDA MAMSG SZA,RSS MA MESSAGE? JMP EXIT . NO FLUSH IT LDA VR NOW CHECK THAT JSB DECR MESSAGE IS IN THE RANGE STA TMP OF VR TO VR-1 LDA NS VR >= NS >= (VR-1) ? JSB RANGE DEF TMP (LOWER BOUND) VR-1 DEF VR (UPPER BOUND) VR JMP EXIT OUT OF RANGE - JUST FLUSH MSG * LDA .UP STA STATE STATE:=UP JSB RECVR ADJUST VR JSB ACK ACKNOWLEDGE JMP EXIT SPC 2 * NORMAL PROCESSING; CHANNEL IN 'UP' STATE * RECEIVE MSGS WITHIN RECV 'WINDOW' OTHERWISE DISCARD * IF VR <= NS <= (VR+W+1) THEN RECV ELSE DISCARD * ACKNOWLEDGE MSGS WITHIN ACK 'WINDOW' * IF VA+1 <= NR <= VS THEN ACK; * UP. EQU * LDA MAMSG CHECK FOR RR - IGNORE IF IT IS CPA .RR JMP UP.2 CHECK FOR ACK PROCESSING LDA VR CHECK FOR VALID RECEPTION ADA W ADA N2 VR+W-1 JSB INCR (THIS EXTRA -1+1 IS TO CATCH ROLLOVER) STA TMP LDA NS JSB RANGE TEST FOR WITHIN RANGE DEF VR VR (LOWER BOUND) DEF TMP VR+W-1 (UPPER BOUND) JMP UP.1 OUT OF RANGE - DISCARD LDA MAMSG CHECK FOR CANCEL MESSAGE CPA .CAN AND BYPASS INDIVIDUAL JMP RECV CHECKS, SINCE CAN IS MULTIPLE * *-- SEQUENCE WITHIN WINDOW; BUT ALREADY RECEIVED? LDA VR CMA,INA ADA NS OFFSET IN RECV. WINDOW = NS-VR SSA ADA DIFF ALLOW FOR ROLLOVER JSB POWER CHANGE TO BIT POSITION (2**N) AND VF RECEIVE FLAGS SZA,RSS THIS MESSAGE ALREADY RECEIVED? (BIT = 1) JMP RECV . NO RECEIVE IT UP.1 ISZ DSCRD . YES DISCARD DUPLICATE RSS RECV JSB RECVR * UP.2 EQU * LDA VA JSB INCR VA+1 STA TMP LDA NR JSB RANGE TEST FOR WITHIN RANGE DEF TMP VA+1 (LOWER BOUND) DEF VS VS (UPPER BOUND) RSS JSB ACK WITHIN WINDOW, ACKNOWLEDGE SKP *---------------------------------------------------------------+ * EXIT ROUTINE | *---------------------------------------------------------------+ EXIT EQU * LDA IDX SET REMAINING DEBUG BITS LSL 12 ISOLATE MA INDEX (UPTO 16 NODES) IOR _MAZE LDB G+#STR RBL SSB IOR BIT1 'REPLY' BIT LDB MAMSG SZB,RSS IOR BIT2 'DATA MESSAGE' LDB DSCRD CLE,ELB SEZ IOR BIT3 'MSG REQUEUED' SZB IOR BIT4 'MESSAGE DISCARDED' LDB FSCTR SZB,RSS FAILSAFE BEEN PASSED? IOR BIT11 . YES INTERNAL ERROR !!!! STA _MAZE * STA MAERR+1 AND BADMA INTERNAL ERROR? SZA,RSS JMP DBUG? LDA .DOWN AFTER CASTASTROPHIC ERROR STA STATE CHANGE STATE TO DOWN JSB ITIME AND SET IDLE TIMER TO ISZ DIRTY CAUSE RE-INITIALIZATION JSB EXEC TELL QCLM INTERNAL ERROR !!! DEF *+8 DEF CLS20 DEF ZERO (LU=0, NO ZBIT) DEF MAERR DEF .4 (ERROR LENGTH = 4) DEF .9 (ERROR MSG 9) DEF ZERO DEF #QCLM NOP * DBUG? LDA #MAZE DEBUG TRACE ENABLED? SZA,RSS . YES JMP UNLOK . NO CONTINUE JSB XLUEX CLASS WRITE OF DEBUG RECORD DEF *+8 DEF CLS20 DEF BIT15 LU=0 DEF _MAZE DATA RECORD = MA INFO DEF .12 MA INFO LENGTH = 12 DEF G ZBUF = REQUEST BUFFER DEF .15 REQUEST BUFFER LENGTH = 15 DEF #MAZE NOP * UNLOK LDA DIRTY CHECK IF ENTRY DIRTY SZA JSB STORE RESTORE ENTRY * JSB RNRQ ENABLE MESSAGE TABLE ACCESS DEF *+4 DEF CLR DEF #MARN DEF TMP (DUMMY VAR FOR STATUS) NOP * LDA DSCRD IS MESSAGE TO BE DISCARDED? SZA,RSS JMP FLY . NO RETURN TO P+2 SSA WAS THIS MSG REQUEUED? JMP FLY+1 . YES TAKE THE DISCARDED (P+1) EXIT * GULP EQU * 'SWALLOW' MESSAGE LDA #GRPM CLASS NUMBER JSB RELEZ RELEASE MESSAGE SZA IF SUCCESSFUL RETURN TO P+1 FLY ISZ #MAPP RETURN TO P+2 (MSG KEPT) JMP #MAPP,I SKP *---------------------------------------------------------------+ * #MAPP SUBROUTINES | *---------------------------------------------------------------+ SPC 2 * BEGIN-FETCH * FETCH- FINDS AND UNPACKS CHANNEL RECORD ( = NODE) * FETCH NOP STA NODE NODE TO SEARCH FOR CLA STA DIRTY CLEAR 'DIRTY' BITS LDA .NON STA STATE INIT STATE TO NON-MA LDB #MCTR = COUNT STB MACTR NUMBER OF MA ENTRIES LDA #MTBL --> MA TABLE ELA,CLE,ERA CLEAR BIT15 -- DEBUG FLAG FLOOP STA 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 LDB @REC,I NODE NUMBER OF THIS ENTRY CPB NODE IS THIS THE ENTRY? JMP *+4 . YEP ISZ MACTR . NOP, BUMP COUNTER JMP FLOOP AND TRY AGAIN JMP FETCH,I COULDN'T FIND ENTRY RETURN * *-- 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 * LDA #MCTR CMA,INA INA ADA MACTR INDEX := MACTR - #MCTR + 1 STA IDX JMP FETCH,I SPC 1 MACTR NOP NUMBER OF MA TABLE ENTRIES @REC DEF VT2 --> START OF PACKED RECORD RECLN DEC 10 LENGTH OF MA ENTRY .NON DEC 1 NON-MA STATE DIFF OCT 077777 (SUBTRACTION) CONSTANT FOR WRAPAROUND OFFST OCT 100001 (ADDITION) CONSTANT FOR WRAPAROUND SPC 2 * STORE- PACKS AND RESTORES CHANNEL RECORD * STORE NOP CLA STA DIRTY SET DIRTY BITS TO 'CLEAN' CPA MACTR CHECK FOR INVALID ENTRY JMP STORE,I AND RETURN IF NO GOOD *-- 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 SPC 2 *---------------------------------------------------------------+ * POWER- CONVERT NUMBER IN TO BIT POSITION (2**N) | *---------------------------------------------------------------+ POWER NOP STB STORE SAVE B AND B17 ONLY ALLOW 4 BITS IOR SHIFT FORMAT SHIFT INSTRUCTION STA *+2 CLA,INA SET A TO 1 DEF *-* (MODIFIED TO LSL XX) SZA,RSS CLA,INA 2**0 = 1 LDB STORE JMP POWER,I SHIFT LSL 16 'LSL' INSTRUCTION SKELETON SPC 2 *---------------------------------------------------------------+ * ITIME- SETS IDLE TIMER (VT2) | *---------------------------------------------------------------+ ITIME NOP LDB VT2 LDA TMAX SET IDLE TIMER (VT2) ARS,ARS TO TMAX/4 SZA,RSS UNLESS LESS THAN 4 INA THEN SET TO 1 SZB,RSS UNLESS ALREADY RUNNING STA VT2 JMP ITIME,I SPC 2 *---------------------------------------------------------------+ * FLUSH- CLEARS OUT ANY MSGS IN MA HOLD QUEUE (KEY IN IDENT) | *---------------------------------------------------------------+ FLUSH NOP CLA,INA STA VS STA VR LDA W SETUP TO CLEAR HOLD QUEUE FL1 STA VA LSL 12 IOR IDX FORM MA IDENTIFIER STA IDENT JSB FIND SEARCH IN HOLD QUEUE JMP FL2 NOT FOUND CONTINUE LDA #MAHC JSB RELEZ FOUND - RELEASE MSG JSB FIND NOW LOOK FOR A DUPLICATE! JMP FL2 LDA _MAZE IOR BIT9 << DUPLICATE MSG IN HOLD QUEUE! >> STA _MAZE JMP *-7 CLEAR HIM FL2 LDA VA CPA VS ALL DONE? JMP FLUSH,I . YEP VS=VA=VR=1 !!! (IMPORTANT) ADA N1 JMP FL1 SPC 2 *---------------------------------------------------------------+ * RECVR- RECEIVE MSG PROCESSING VR+W <--- NS ---> VR | *---------------------------------------------------------------+ BSS 1 (STORAGE) RECVR NOP LDA MAMSG CHECK FOR CANCEL MESSAGE CPA .CAN CANCEL? RSS . YES SET VC JMP RECV2 . NO ADJUST VR LDA NS JSB INCR STA RECVR-1 NEW VR:=NS+1 RECV1 LDA VR CPA RECVR-1 CANCELED ALL MSGS? JMP RECV3 . YES JSB INCR . NO BUMP TO NEXT VR STA VR LDB VF LDA VC LSR 1 SHIFT FLAGS (VC & VF) OVER 1 XOR BIT15 VC IS OPPOSITE OF VF STB VF STA VC JMP RECV1 RECV2 EQU * LDA VR CMA,INA ADA NS (NS-VR) SSA ADA DIFF ALLOW FOR ROLLOVER JSB POWER 2 ** (NS-VR) IE., BIT POSITION IOR VF SET RECEIVE BIT STA VF RECV3 EQU * LDB VF THIS MSG RECEIVED? SLB,RSS JMP RECVR,I . NO NOT YET RECEIVED LDA VR . YES, NEXT EXPECTED VR JSB INCR RECEIVED; BUMP STA VR VR & SHIFT FLAGS OVER LDA VC ERB,CLE,ELB CLEAR LSB - VC(15) WILL = 0 LSR 1 SHIFT VF & VC OVER 1 STB VF STA VC JMP RECV3 SPC 2 *---------------------------------------------------------------+ * ACK- PERFORMS ACK PROCESSING VS <--- NR ---> VA+1 | *---------------------------------------------------------------+ ACK NOP LDA _MAZE IOR BIT7 MSG BEING ACK'ED STA _MAZE CLA STA LERC CLEAR LAST REPORTED ERROR STA LERN *-- RETRANSMIT ANY CANCEL ACKS (VA TO NR-1) LDA VA = VA LDB NR = NR JSB REXMT * * ADJUST VA; RELEASE ANY ACKNOWLEDGED SLAVE MESSAGES; * AND (IF REQUEST) SET BIT IN TCB. * LDA NC STA CFLAG LDA NR STA TMP LDA N17 << SETUP FAILSAFE >> STA FSCTR ACK1 EQU * LDA TMP CPA VA ALL ACKNOWLEDGEMENTS PROCESSED? JMP ACK2 . YES ISZ FSCTR RSS JMP ACK2 << FAILSAFE EXIT >> JSB DECR NR:=NR-1 STA TMP LSL 12 IOR IDX FOR UNIQUE MA IDENTIFIER STA IDENT LDA CFLAG CLE,ELA CANCEL BIT TO AND STA CFLAG SHIFT CANCEL FLAGS OVER SEZ CANCEL ACKED? JMP ACK1 . YES ALREADY TAKEN CARE OF... * JSB #RSAX TRY TO FIND MASTER TCB DEF *+3 AND INDICATE IT WAS ACKED DEF .12 OTHERWISE LOOK FOR SLAVE DEF IDENT MESSAGE. SSB,RSS MASTER FOUND? JMP ACK1 . YES * JSB FIND . NO LOOK FOR SLAVE JMP ACK1 HO HUMM... CAN'T FIND HIM LDA #MAHC JSB RELEZ HURRAH! FOUND HIM! NOW DUMP HIM JMP ACK1 * ACK2 EQU * LDA NR STA VA VA:=NR * * IF NO UNACKNOWLEDGED MESSAGES CLEAR ACK TIMER (VT1) * LDB TMAX CPA VS VS=VA? CLB . YES NO UNACK MSGS, CLEAR TIMER STB VT1 . NO MORE TO ACK; RESET TIMER CLB STB VCC RESET CONSEQUTIVE CANCEL COUNTER JMP ACK,I UND RETURN SPC 2 *---------------------------------------------------------------+ * REXMT- RETRANSMITS CANCEL ACKNOWLEDGEMENTS | * FROM U-1 DOWNTO (AND INCLUDING) L | * = LOWER BOUND (L) = UPPER BOUND (U) | *---------------------------------------------------------------+ REXMT NOP DST RL LDA NC GET CANCEL FLAGS (NC) JMP REX1+2 * REX1 LDA CFLAG ADJUST FOR NEXT CANCEL FLAG CLE,ELA SHIFT LEFT STA CFLAG SZA,RSS ANY MORE CANCEL FLAGS? JMP REXMT,I . NO ALL DONE LDA RU CPA RL END OF WINDOW? JMP REXMT,I . YEP ALL DONE * LDA RU JSB DECR U-1 STA RU U:= U-1 LSL 12 FORM UNIQUE MA IDENTIFIER IOR IDX MA TABLE INDEX STA IDENT LDA CFLAG NC SSA,RSS CANCEL ACKNOWLEDGEMENT? JMP REX1 . NO TRY NEXT BIT LDA _MAZE IOR BIT8 INDICATE CANCEL ACK RECEIVED STA _MAZE * JSB #RSAX SEARCH FOR MASTER TCB DEF *+3 DEF .11 MODE 11 DEF IDENT MA SEQUENCE # SSB TCB FOUND? JMP REX2 . NO LOOK IN SLAVE LIST * ADB .2 . YES, --> SEQUENCE NUMBER (TCB+2) JSB LODWD GET SEQUENCE NUMBER FOR LU MAPPING STA TMP AND SAVE FOR LATER INB --> MASTERS CLASS (TCB+3) JSB LODWD ELA,CLE,ERA CLEAR NO WAIT BIT STA CLASS SAVE CLASS LSL 3 CLEAR UPPER 3 BITS SZA,RSS IF CLASS = 0 THEN JMP REX1 BYPASS MASTER RETRANSMISSION * JSB XLUEX CLASS WRITE/READ TO MASTER DEF *+8 DEF CLS20 DEF BIT15 (LU=0) BYPASS SESSION SST DEF ZERO (DATA BUFFER) DEF ZERO (DATA LENGTH) DEF TMP MESSAGE SEQUENCE # (FOR LU MAPPING) DEF .1 LENGTH = 1 FOR MASTER RETRY REQUEST DEF CLASS MASTERS CLASS NOP SZA SUCCESSFUL WRITE? JMP REX1 . NO TRY NEXT BIT LDA _MAZE . YES SET IOR BIT6 'RESENDING MASTER' BIT STA _MAZE JMP REX1 * REX2 EQU * TRY TO FIND SLAVE TRANSMISSION & RETRANSMIT JSB FIND JMP REX1 MSG NOT FOUND... CONTINUE * JSB #GETR GET ZBUF INTO LOCAL BUFFER DEF *+8 FOR MODIFICATION DEF #MAHC DEF RQB ZBUF DEF P#MAC ZBUF LENGTH DESIRED DEF ZERO DATA BUF DEF ZERO DATA BUF LENGTH DESIRED DEF RANGE (NOT USED) DEF TMP LLU WORD NOP ERROR - IGNORE INA STA CTR OFFSET OF LLU WORD CLE LDA TMP BUMP RETRY COUNT (BITS 12-15) ADA BIT12 IOR BIT11 SET MA ASSIGNMENT BIT (BIT11) STA TMP SEZ TOO MANY RETRYS ( >15)? JMP REX3 . YES JUST RELEASE MSG * JSB #PUTR REPLACE LLU WORD DEF *+3 DEF CTR OFFSET OF LLU WORD DEF TMP NEW LLU NOP ERROR - IGNORE * LDA VS STA RQB+#MAS NS JSB INCR VS:=VS+1 STA VS LDA VR STA RQB+#MAR NR LDA VC STA RQB+#MAC NC * JSB #NRVS FIND LU OF THIS NODE DEF *+2 DEF NODE NOP IOR BIT15 BYPASS SESSION SST STA LU * LDA _MAZE IOR BIT5 'RESENDING SLAVE' BIT STA _MAZE * JSB #NQUE FINALLY! RESEND SLAVE DEF *+9 DEF CLS20 WRITE/READ DEF LU DEF ZERO DEF ZERO DEF RQB ZBUFFER OVERLAY DEF P#MAC ZBUF OVERLAY LENGTH DEF #GRPM (DESTINATION CLASS #) DEF #MAHC (SOURCE CLASS #) RSS JMP REX1 DST MAERR+2 SAVE ERROR CODES LDA _MAZE IOR BIT10 << REQUE ERROR ! >> STA _MAZE JMP REX1 * REX3 LDA #MAHC JSB RELEZ RELEASE MSG - CHANNEL BUSY JMP REX1 * CFLAG BSS 1 CANCEL FLAG RL BSS 1 LOWER LIMIT OF SEQUENCE # RU BSS 1 UPPER LIMIT OF SEQUENCE # SPC 2 *---------------------------------------------------------------+ * RANGE- IF P1 <= <= P2 RETURN TO P+2 ELSE P+1 | *---------------------------------------------------------------+ BSS 1 (STORAGE) RANGE NOP STA RANGE-1 DLD RANGE,I GET PARAMETER ADDRESSES ISZ RANGE ISZ RANGE LDA A,I GET LOWER BOUND (P1) LDB B,I GET UPPER BOUND (P2) STA LO CMA,INA TEST FOR LOWER BOUND <= UPPER ADA B SSA,RSS JMP RANG2 LOWER BOUND <= UPPER (NO ROLLOVER) *-- PUSH WINDOW BEYOND "WRAP AROUND" POINT LDA RANGE-1 PUSH TEST ITEM ADA W SSA CHECK FOR WRAP AROUND ADA OFFST STA RANGE-1 LDA LO PUSH LOWER LIMIT ADA W SSA ADA OFFST ADJUST FOR (POTENTIAL) ROLLOVER ADB W PUSH UPPER LIMIT SSB ADB OFFST ADJUST FOR (POTENTIAL) ROLLOVER RSS RANG2 LDA LO CMA,INA ADA RANGE-1 SSA JMP RANGE,I TOO LOW - RETURN P+1 CMB TEST FOR <= P2 (UPPER LIMIT) ADB RANGE-1 SSB,RSS OK? JMP RANGE,I TOO HI - RETURN P+1 ISZ RANGE GOOD RETURN - P+2 JMP RANGE,I LO BSS 1 SPC 2 *---------------------------------------------------------------+ * LOAD WORD FROM SAM; -->SAM | *---------------------------------------------------------------+ LODWD NOP DMS4 JMP *+4 NOP IF DMS XLA B,I RSS LDA B,I JMP LODWD,I SPC 2 *---------------------------------------------------------------+ * INCR/DECR - INCREMENTS/DECREMENTS AND ALLOWS FOR ROLLOVER + *---------------------------------------------------------------+ INCR NOP INA SSA ADA OFFST ALLOW FOR ROLLOVER JMP INCR,I * DECR NOP ADA N1 SZA,RSS LDA DIFF ALLOW FOR ROLLOVER SSA ADA DIFF JMP DECR,I SPC 2 *---------------------------------------------------------------+ * FMT- FORMATS MA MESSAGE BUFFER (STREAM ZERO ONLY) | *---------------------------------------------------------------+ FMT NOP FORMAT MA MESSAGES CLA STA RQB ZERO BUFFER LDA @RQB LDB A INB JSB .MVW DEF RQBLN NOP LDA BIT12 STREAM WORD STA RQB+#STR LDA #NODE SOURCE NODE STA RQB+#SRC LDA NODE DESTINATION NODE STA RQB+#DST LDA #LEVL UPGRADE LEVEL STA RQB+#LVL LDA #MHCT SET HOP COUNT STA RQB+#HCT LDA VS JSB DECR VS-1 STA RQB+#MAS NS LDA VR STA RQB+#MAR NR LDA VC STA RQB+#MAC NC CCA MA INDICATOR STA RQB+#REP LDA BIT11 SET MA ASSIGNMENT BIT STA RQB+#REP+1+#LSZ (BIT11) IN LLU WORD JMP FMT,I SPC 2 *---------------------------------------------------------------+ * SEND- SENDS MA MESSAGE ACROSS CHANNEL (LU FROM NRV) | *---------------------------------------------------------------+ BSS 1 (STORAGE) SEND NOP JSB #NRVS FIND LU DEF *+2 DEF NODE NOP IOR BIT15 BYPASS SESSION SST STA LU * LDA #GRPM SET THE 'NO IOR BIT15 WAIT' STA SEND-1 BIT!!! * JSB XLUEX SEND MESSAGE (CLASS WRITE/READ) DEF *+8 DEF CLS20 DEF LU DEF ZERO DEF ZERO @RQB DEF RQB DEF RQBLN DEF SEND-1 GRPM'S CLASS NUMBER NOP JMP SEND,I SPC 2 *---------------------------------------------------------------+ * FIND- FIND SLAVE MSG, RETURN P+1 NOT FOUND, P+2 FOUND. | *---------------------------------------------------------------+ FIND NOP JSB #NQUE FIND SLAVE MSG - KEY IN 'IDENT' DEF *+9 DEF N40 (SEARCH) DEF BIT15 (LU=0 AND DOUBLE WORD CONWD) DEF IDENT (SEARCH KEY) DEF N#MAS (1'S COMPLEMENT OFFSET IN ZBUF) DEF ZERO DEF ZERO DEF #MAHC (DESTINATION CLASS) DEF #MAHC (SOURCE CLASS) JMP FIND,I RETURN TO P+1 - NOT FOUND ISZ FIND JMP FIND,I RETURN TO P+2 - FOUND SPC 2 *---------------------------------------------------------------+ * RELEZ- RELEASES MSG FROM CLASS QUEUE; = CLASS | *---------------------------------------------------------------+ BSS 1 (STORAGE) RELEZ NOP STA RELEZ-1 SAVE CLASS # LDA #PLOG SZA,RSS IS LOGGING ENABLED??? JMP RELE2 . NO GULP MESSAGE * RELE1 JSB #RQUE . YES REQUEUE TO PLOG DEF *+9 DEF CLS20 WRITE/READ DEF BIT15 (LU=0 AND DOUBLE WORD CONWD) DEF ZERO DEF ZERO DEF ZERO DEF ZERO DEF #PLOG (DESTINATION CLASS) DEF RELEZ-1 (SOURCE CLASS) CCA,RSS ERROR RETURN CLA SUCCESSFUL RETURN JMP RELEZ,I ... UND RETURN * RELE2 LDA RELEZ-1 ALR,RAR ZERO BIT 14 (AND 15) STA RELEZ-1 * JSB EXEC DO CLASS GET TO DE-ALLOCATE MSG DEF *+5 DEF CLS21 DEF RELEZ-1 CLASS NUMBER DEF ZERO DEF ZERO CCA,RSS ERROR RETURN CLA SUCCESSFUL RETURN JMP RELEZ,I ... UND RETURN SKP *---------------------------------------------------------------+ * CONSTANTS | *---------------------------------------------------------------+ A EQU 0 B EQU 1 * BIRTH OCT 000001 START OF NUMBER SEQUENCE (1-77777B) CLS20 DEF 20,I CLS21 DEF 21,I CLASS GET W DEC 15 MAX # OUTSTANDING MSGS / CHANNEL "DS" ASC 1,DS "00" ASC 1,00 DS053 OCT 123 ENCRYPTED DS05(3) "06" ASC 1,06 "08" ASC 1,08 BIT12 OCT 010000 BIT14 OCT 040000 BIT15 OCT 100000 NOTE! THESE TWO WORDS MUST STAY CONWD OCT 010100 TOGETHER !!!!!!! ('BIT15' & 'CONWD') B17 OCT 17 P#MAS ABS #MAS+1 N#MAS ABS -#MAS-1 1'S COMPLEMENT OFFSET P#MAC ABS #MAC+1 P#MHD ABS #MHD+1 N1 DEC -1 N2 DEC -2 N17 DEC -17 N40 DEC -40 .1 DEC 1 .2 DEC 2 .3 DEC 3 .4 DEC 4 .9 DEC 9 .11 DEC 11 .12 DEC 12 .15 DEC 15 RQBLN ABS #REP+2+#LSZ CLR OCT 040004 LK OCT 040001 * MA DEBUG BITS (WHEN SET) BIT0 OCT 0001 . INBOUND BIT1 OCT 0002 . REPLY BIT2 OCT 0004 . DATA MESSAGE BIT3 OCT 0010 . MESSAGE REQUEUED BIT4 OCT 0020 . MESSAGE DISCARDED BIT5 OCT 0040 . RESENDING SLAVE MSG BIT6 OCT 0100 . RESENDING MASTER REQUEST BIT7 OCT 0200 . ACK BEING PROCESSED BIT8 OCT 0400 . CANCEL ACK RECEIVED BIT9 OCT 1000 . << DUPLICATE MSG IN #MAHC !!! >> BIT10 OCT 2000 . << REQUEUE ERROR !!! >> BIT11 OCT 4000 . << WINDOW SCREWED UP !!! >> BADMA OCT 7000 INTERNAL ERROR CONDITIONS * * MA MESSAGE VALUES .RR OCT 01 . RECEIVER READY .INIT OCT 02 . INITIALIZE REQUEST .IR OCT 04 . INITIALIZE RESPONSE .CAN OCT 10 . MESSAGE CANCEL .NR OCT 20 . NO RESPONSE * * MA STATE VALUES .DOWN OCT 0 . DOWN .UP OCT 2 . UP .PEND OCT 3 . PENDING SPC 2 *---------------------------------------------------------------+ * STORAGE | *---------------------------------------------------------------+ CKDMS NOP CONFIGURE IF DMS (ROUTINE OVERLAYED) CLA CCB ADB CKDMS ADDRESS OF CALL STA B,I NOP CALL LDB $OPSY RBR,SLB DMS? RSS JMP CKDMS,I . NO RETURN STA DMS1 STA DMS2 STA DMS4 JMP CKDMS,I RETURN (END-CKDMS) * * START OF OVERLAY * ORG CKDMS * (UNPACKED) MA TABLE BLOCK LINK BSS 1 . ADDRESS OF ENTRY MAERR EQU * . MA INTERNAL ERROR MSG BLOCK NODE BSS 1 . NODE # OF CHANNEL BSS 3 . DEBUG INFORMATION IDX BSS 1 . INDEX INTO MA TABLE DIRTY BSS 1 . DIRTY BITS STATE BSS 1 . CHANNEL STATE TMAX BSS 1 . MAX TIMEOUT TICKS _MAZE BSS 1 . DEBUG VS BSS 1 . SEND SEQUENCE # .TBL EQU * WORD ZERO OF MESSAGE TABLE 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 * END-MA TABLE BLOCK TMP BSS 1 CTR BSS 1 RD.WC BSS 1 READ/WRITE COMPLETION (0/1) FSCTR BSS 1 FAILSAFE ... OLDVA BSS 1 OLDVS BSS 1 MAMSG BSS 1 DSCRD BSS 1 0=RTN P+2, -=RTN P+1, +=DO GET & RTN P+1 LU BSS 2 IDENT BSS 1 LLU BSS 1 LAST LU WORD FROM LOCAL APPENDAGE NS BSS 1 NR BSS 1 NC BSS 1 CLASS BSS 1 RQB BSS #REP+3+#LSZ REQUEST BUFFER * SIZE EQU * PROGRAM SIZE END