Trailing-Edge
-
PDP-10 Archives
-
BB-H348C-RM_1982
-
swskit-v21/listings/mcb/topol.list
There are no other files named topol.list in the archive.
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10
TABLE OF CONTENTS
3- 100 Topology Protocol Description
4- 100 Declarations
5- 100 Dynamic Data Block Definitions
6- 100 Main Program
7- 100 GETNOD - Get node information
8- 100 FNDNOD - Try to find node block
9- 100 ADDNOD - Add a new entry to node list
10- 100 INVLID - Invalidate node/notice list
11- 100 UPNODE - Update Node Information
12- 100 RMINVN - Remove Invalid Node Blocks
13- 100 GETSTS - Get node status
14- 100 GETLIN - Update Line Status for Nodes
15- 100 CRETOP - Create Topology Protocol Message
16- 100 SNDTOP - Send the topology change message
17- 100 CHGAST - AST service for topology change connect
18- 100 RELNOT - Release notice block
19- 100 UPNOTI - Update notice list data items
20- 100 SNDAST - SND$ AST service
21- 100 DSCAST - DSC$ AST service
22- 100 SPAAST and SPDAST - SPA$ AST processing
23- 100 CNFAST - AST service for ACC$ connect
24- 100 RECAST - AST service for REC$ on noticer
25- 100 FNDNOT - Find an existing notice block
26- 100 ADDNOT - Add a notice block to the notice list
27- 100 ABTAST - AST service for ABT$ call
28- 100 RMVAST - AST service for ABT$ with list element
29- 100 DSWERR - Process $DSW errors
30- 100 INIDM - Initialize Dynamic memory
31- 100 CLKSRV - Process Background Timing
32- 100 TEMPLATE_EXAMPLE -
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 2
100 .TITLE TOPOL - MCB TOPOLOGY SERVICES
200 .IDENT /X01.02/
300 .ENABLE LC ;LOWER CASE PLEASE!!
400
500 ;
600 ; COPYRIGHT (C) 1978
700 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS 01754
800 ;
900 ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A SINGLE
1000 ; COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE INCLUSION OF THE
1100 ; ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ANY OTHER COPIES THEREOF,
1200 ; MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON
1300 ; EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE
1400 ; TERMS. TITLE TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES
1500 ; REMAIN IN DEC.
1600 ;
1700 ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE
1800 ; AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT
1900 ; CORPORATION.
2000 ;
2100 ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS
2200 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.
2300 ;
2400
2500 ;++
2600 ; FACILITY: DN2x MCB Frontend
2700 ;
2800 ; ABSTRACT:
2900 ;
3000 ; This program handles topology services for an INTERCEPT
3100 ; node within a DECNET network. This task is connected to
3200 ; by interested programs to obtain the network as known at
3300 ; this node. The interested programs will be automatically
3400 ; notified upon network topology changes.
3500 ;
3600 ; APPLE PIE:
3700 ;
3800 ; There are three requirements that affect the design, coding,
3900 ; and testing of any program:
4000 ;
4100 ; 1) The program must work and it must be readily
4200 ; apparent that it works.
4300 ;
4400 ; 2) The program must be maintainable by someone
4500 ; other than a "heavy hacker" or the implementor.
4600 ;
4700 ; 3) The program must be efficient as required to
4800 ; meet requirement 1 but not so efficient as to
4900 ; violate requirement 2.
5000 ;
5100 ; The author stressed requirements 1 and 2 ignoring
5200 ; requirement 3 because it really has no effect on 1
5300 ; for this application. (e.g. Notice the inefficient way of
5400 ; handling carry set/clear in subroutines).
5500 ;
5600 ; ENVIRONMENT: This module does not require privileges.
5700 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 2-1
5800 ; AUTHOR: Scott G. Robinson, CREATION DATE: 26-AUG-78
5900 ; LCG Comm/Nets Engr
6000 ;
6100 ; MODIFIED BY:
6200 ;
6300 ; Scott G. Robinson, 27-DEC-78 : VERSION X01.01
6400 ; - Add Background timing to recover from hung states
6500 ; while processing topology requests.
6600 ;
6700 ; Scott G. Robinson, 17-APR-79 : VERSION X01.02
6800 ; - Correct Race condition due to timeout code introduced
6900 ; by X01.01 above.
7000 ;
7100 ; , : VERSION
7200 ; 01 -
7300 ;--
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 3
TOPOLOGY PROTOCOL DESCRIPTION
100 .SBTTL Topology Protocol Description
200 ;
300 ; Topology Protocol Descriptions for V01.0.0
400 000001 T$$VER=1
500 000000 T$$ECO=0
600 000000 T$$CUS=0
700 ;
800 ; The topology protocol messages are contained in the following
900 ; format:
1000 ; Message-type,Message-data
1100 ;
1200 ; Message-type Message-data
1300 ; 1 (Service Request) Minimum-Version of protocol acceptable
1400 ; 2 (Request Accepted) Protocol-Version available, Topology information
1500 ; 3 (Topology Change) Topology information
1600 ;
1700 ;
1800 ; Message Data can consist of multiple fields formatted as:
1900 ; Field Type, Field Data
2000 ;
2100 ; Field Type Field Data
2200 ; 0 (Illegal)
2300 ; 1 (Node Name) Node name in (I-6):A format
2400 ; 2 (Node Number) Node number in (EX-2):B format
2500 ; 3 (Node State) Node state consisting of:
2600 ; (1):B Node state =
2700 ; 0 - On
2800 ; 1 - Off
2900 ; (1):BM Node Type =
3000 ; 1 - Local
3100 ; 2 - Adjacent
3200 ; 3 - Intercept node
3300 ; 4 - Remote (ignored)
3400 ; 4 (Line ID) Line identifier in format(from NICE spec):
3500 ; (1):B = 1
3600 ; (1):B = Line device type (from MOP Spec)
3700 ; (1):B = Controller number
3800 ; (1):B = Line number
3900 ; (1):B = Line station address (0)
4000 ; 5 (Line State) Line state (1):B meaning:
4100 ; 0 - On
4200 ; 1 - Off
4300 ; 3 - Loopback
4400 ; 4 - Maintenance
4500 ; 6 (Version ID) Protocol Version (3):B meaning
4600 ; Version number
4700 ; ECO Number
4800 ; Customer change number
4900 ; 7 (Node Count) Number of node units to follow in (1):B
5000 ;
5100 ; Topology Information consists of one field 7 followed by
5200 ; possibly multiple node units.
5300 ; A node unit is defined as a set of information consisting of fields
5400 ; 1,2,3,4,5 in that order, with any field (except field 1) missing.
5500 ; In other words, If you receive a field type less than or equal to
5600 ; the last field type received it is a new node unit.
5700 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 3-1
TOPOLOGY PROTOCOL DESCRIPTION
5800 ; Field 6 occurs only in message types 1 and 2. Other fields
5900 ; occur only in message types 2 and 3.
6000 ;
6100 000001 TY$SRQ==1 ;Service request message
6200 000002 TY$ACC==2 ;Service request accepted
6300 000003 TY$TOP==3 ;Topology change message
6400 ;
6500 000001 FT$NNM=1 ;Node name
6600 000002 FT$NUM=2 ;Node number
6700 000003 FT$STA=3 ;Node State
6800 000004 FT$LID=4 ;Line ID
6900 000005 FT$LST=5 ;Line State
7000 000006 FT$VER=6 ;Protocol version
7100 000007 FT$NCT=7 ;Node unit count
7200 ;
7300 000000 NS$ON=0 ;Node State = ON
7400 000001 NS$OFF=1 ;Node State = OFF
7500 ;
7600 000001 NT$LOC=1 ;Local node
7700 000002 NT$ADJ=2 ;Adjacent node
7800 000003 NT$INT=3 ;Intercept node
7900 000004 NT$REM=4 ;Remote node
8000 ;
8100 000000 LS$ON=0 ;Line State = ON
8200 000001 LS$OFF=1 ;Line State = OFF
8300 000003 LS$LBK=3 ;Line State = Loopback
8400 000004 LS$MAI=4 ;Line State = Maintenance
8500 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 4
DECLARATIONS
100 .SBTTL Declarations
200 ;
300 ; INCLUDE FILES:
400 ;
500
600 ;
700 ; MACROS:
800 ;
900 .MCALL ALUN$S,QIOW$S,QIO$S,SPAW$S,GNDW$S,ACC$S,REC$S
1000 .MCALL OPNW$S,CON$S,REJW$S,SND$S,DSC$S,NETDF$,DLXDF
1100 .MCALL MRKT$S,WTSE$S,ENAR$S,DSAR$S,ASTX$S,ABT$S
1200 .MCALL CLEF$S,SETF$S
1300
1400 ;
1500 ; Local Macro Definitions
1600 ;
1700
1800
1900 ; EDIOUT is used to format and output a message on the CTY lun.
2000 ; This would normally be an error message.
2100 ;
2200 ; use: EDIOUT input string,argument list,output buffer
2300 ;
2400 ; Refer to the IAS/RSX System Library Routines Reference
2500 ; Manual for a description of the support routine.
2600 ;
2700 .MACRO EDIOUT STRING,ARGBLK,OUTBUF
2800 .IIF NB,OUTBUF, MOV OUTBUF,R0 ;Output Block Buffer
2900 .IIF NB,STRING, MOV STRING,R1 ;Input Editing String
3000 .IIF NB,ARGBLK, MOV ARGBLK,R2 ;Argument Block
3100 CALL $EDMSG ;Generate Message
3200 SUB R1,R0 ;Get Buffer Address
3300 CTYWLB R0,R1 ;Output Message to CTY
3400 .ENDM EDIOUT
3500
3600 ; CTYWLB is used to write a message to the CTY without breaking through
3700 ; all conditions.
3800 ;
3900 ; use: CTYWLB start of message, length of message
4000 ;
4100 .MACRO CTYWLB START,LEN
4200 QIOW$S #IO.WLB,#LUNERO,#EROEFN,,#EROSB,,<START,LEN,#0>
4300 .ENDM CTYWLB
4400
4500 ; ERJUMP and ERCALL are used to handle carry condition code errors
4600 ; in a more reasonable manner than straight coding.
4700 ;
4800 .MACRO ERJUMP ADDR,?A
4900 BCC A
5000 JMP ADDR
5100 A:
5200 .ENDM ERJUMP
5300
5400 .MACRO ERCALL ADDR,?A
5500 BCC A
5600 CALL ADDR
5700 A:
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 4-1
DECLARATIONS
5800 .ENDM ERCALL
5900
6000 ; PUSH and POP macros are used to manipulate elements onto and
6100 ; offof the stack.
6200 ;
6300 .MACRO PUSH ARG
6400 .IRP A,<ARG>
6500 .IF NB A
6600 MOV A,-(SP) ;Push A onto stack
6700 .IFF
6800 CLR -(SP) ;Allocate a 0 word
6900 .ENDC
7000 .ENDM
7100 .ENDM PUSH
7200
7300 .MACRO POP ARG
7400 .IRP A,<ARG>
7500 .IF NB A
7600 MOV (SP)+,A ;Pop A off stack
7700 .IFF
7800 TST (SP)+ ;Remove word from stack
7900 .ENDC
8000 .ENDM
8100 .ENDM POP
8200
8300 ;
8400 ; EQUATED SYMBOLS:
8500 ;
8600 000000 NETDF$ ;Define Network symbols
8700 000000 DLXDF ;DLX definitions
8800 ;
8900 000010 NETEFN==10 ;Event flag for Network Activities
9000 000011 DLXEFN==11 ;Event flag for DLX operations
9100 000012 GNDEFN==12 ;Event flag for network data usage
9200 000013 EROEFN==13 ;Event flag for error output
9300 000014 CLKEFN==14 ;Event flag for clock
9400 000015 MAIEFN==15 ;Event flag that advances main loop
9500 ;
9600 000001 LUNDLX==1 ;Lun for DLX Device
9700 000002 LUNERO==2 ;Lun for Error Messages
9800 000003 LUNNT==3 ;Network Communication Lun
9900 000004 LUNLL0==4 ;Lun for logical link #0
10000 000005 LUNLL1==5 ;Lun for logical link #1
10100 000006 LUNLL2==6 ;Lun for logical link #2
10200 000007 LUNLL3==7 ;Lun for logical link #3
10300 000010 LUNLL4==10 ;Lun for logical link #4
10400 ;
10500 000006 MINNDS==^D6 ;Minimum number of Nodes in Network
10600 000003 MINNTS==^D3 ;Minimum Notice points in Network
10700 000006 MAXNLN==^D6 ;Maximum node-name length
10800 ;
10900 000005 TIMBUP==^D5 ;Time between updates in seconds
11000 000007 NOTLMT==^D7 ;After (7*TIMBUP) seconds we
11100 ; clean house
11200 ;
11300 ; OWN STORAGE:
11400 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 4-2
DECLARATIONS
11500
11600 000000 .PSECT DATA,D
11700 000000 NODLST:: .BLKW 2 ;Node listhead
11800 000004 DYMLST:: .BLKW 2 ;Dynamic memory listhead
11900 000010 NOTLST:: .BLKW 2 ;Notice listhead
12000 ;
12100 000014 000000 NODCHG:: .WORD 0 ;Node list has changed flag
12200 ;
12300 000016 NETSB:: .BLKW 2 ;Network Status Block
12400 000022 DLXSB:: .BLKW 2 ;Status for DLX operations
12500 000026 GNDSB:: .BLKW 2 ;GND Status Block
12600 000032 EROSB:: .BLKW 2 ;Error Output Status Block
12700 ;
12800 ; Status blocks for logical links actually make up a data structure
12900 ; referenced for transfer of information about the network topology.
13000 ;
13100 ; LL?SB: .BLKW 2 ;Actual I/O status block
13200 ; .BLKW 1 ;Lun number for this LL
13300 ; .BLKW 1 ;Pointer to notice block
13400 ; ; if in processing otherwise 0
13500 ;
13600 000004 LL.LUN==4 ;LUN offset
13700 000006 LL.NTB==6 ;Notice Block address offset
13800 000010 LL.LEN==^D8 ;Displacement to next LL?SB
13900 000036 LL0SB:: .BLKW 2 ;Status for logical link #0
14000 000042 000004 000000 .WORD LUNLL0,0
14100 000046 LL1SB:: .BLKW 2 ;Status for logical link #1
14200 000052 000005 000000 .WORD LUNLL1,0
14300 000056 LL2SB:: .BLKW 2 ;Status for logical link #2
14400 000062 000006 000000 .WORD LUNLL2,0
14500 ; LL3 and LL4 are used for Confirming a notice request
14600 000066 LL3SB:: .BLKW 2 ;Status for logical link #3
14700 000072 000007 000000 .WORD LUNLL3,0
14800 000076 LL4SB:: .BLKW 2 ;Status for logical link #4
14900 000102 000010 000000 .WORD LUNLL4,0
15000 ;
15100 000106 OUTBLK:: .BLKB 150. ;Area for error messages
15200 .EVEN
15300 ;
15400 000400 DLXLEN==^D256 ;Length of DLX Buffer
15500 000334 DLXBUF:: .BLKB DLXLEN ;DLX Buffer
15600 .EVEN
15700 ;
15800 000734 000000 ARGDYM:: .WORD 0 ;Dynamic memory amount on error
15900 000736 000000 ARGDUM:: .WORD 0 ;Dummy Argument list
16000 ;
16100 000400 TOPLEN==^D256 ;Maximum length topology message
16200 000740 000000 CNFLEN:: .WORD 0 ;Length of Accept message
16300 000742 002 006 001 CNFMSG:: .BYTE TY$ACC,FT$VER,T$$VER,T$$ECO,T$$CUS
000745 000 000
16400 000747 007 .BYTE FT$NCT
16500 000750 CNFTOP:: .BLKB TOPLEN
16600 .EVEN
16700 001350 000000 CHGLEN:: .WORD 0 ;Length of Topology Change message
16800 001352 003 007 CHGMSG:: .BYTE TY$TOP,FT$NCT
16900 001354 CHGTOP:: .BLKB TOPLEN
17000 .EVEN
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 4-3
DECLARATIONS
17100 ;
17200 001754 000000 NOTFLG: .WORD 0 ;Notification necessary flag
17300 001756 000000 NOTIP: .WORD 0 ;Notification in progress flag
17400 001760 000000 CLKTIM: .WORD 0 ;CLKSRV timing cell
17500 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 5
DYNAMIC DATA BLOCK DEFINITIONS
100 .SBTTL Dynamic Data Block Definitions
200 ;++
300 ; This program uses two list structures to keep information
400 ; about the topology and the processes requesting the topology.
500 ;
600 ; The storage for these lists are dynamically allocated from a
700 ; EXTSCT by support routines $INIDM, $RQCB, and $RLCB. These
800 ; routines are documented in "IAS/RSX-11 System Library
900 ; Reference Manual".
1000 ;--
1100
1200 ;
1300 ; Node data block definition:
1400 ;
1500 000000 .ASECT ;Node Data Block
1600 000000 .=0 ;Start a absolute offset 0
1700 000000 NB.PTR:: .BLKW 1 ;(W) List pointer
1800 000002 NB.CNT:: .BLKB 1 ;(B) Length of allocated block
1900 000003 NB.FLG:: .BLKB 1 ;(B) Flag byte
2000 000001 NB$VAL==1 ;Node block is valid if set to 1
2100 000004 NB.NLN:: .BLKB 1 ;(B) Length of node name
2200 000005 NB.NNM:: .BLKB MAXNLN ;MAXNLN(B) Node name
2300 000013 NB.NST:: .BLKB 1 ;(B) Node State
2400 000014 NB.NTP:: .BLKB 1 ;(B) Node Type
2500 000015 NB.LTP:: .BLKB 1 ;(B) Line Type
2600 000016 NB.LCT:: .BLKB 1 ;(B) Controller number
2700 000017 NB.LNM:: .BLKB 1 ;(B) Line number
2800 000020 NB.LSA:: .BLKB 1 ;(B) Line Station Address
2900 000021 NB.LST:: .BLKB 1 ;(B) Line State
3000 000022 NB.LEN:: ;Length of node block
3100
3200 ;
3300 ; Notice Data Block Definition:
3400 ;
3500 000022 .ASECT ;Notice Data Block
3600 000000 .=0 ;Starting at abs offset 0
3700 000000 AB.FPT:: .BLKW 1 ;(W) Forward list pointer
3800 000002 AB.CNT:: .BLKB 1 ;(B) Length of allocated block
3900 000003 AB.FLG:: .BLKB 1 ;(B) Flag byte
4000 000004 NT$AIP == 4 ;Abort in progress flag
4100 000002 NT$NIP == 2 ;Notice in progress flag
4200 000001 NB$VAL == 1 ;Notice block valid
4300 000004 AB.BPT:: .BLKW 1 ;(W) Backward list pointer
4400 000006 AB.TIM:: .BLKW 1 ;(W) A word used for timing things
4500 000010 AB.ACC:: .BLKB N.CBL+20 ;N.CBL+20(B) GND Mail Buffer
4600 000172 AB.LEN:: ;Length of notice block
4700
4800 ;
4900 ; Minimum Dynamic Memory Calculation
5000 ;
5100 .MACRO MOD M,A,B
5200 $$$=A
5300 $$=B
5400 $$$$=$$$/$$
5500 $$$$=$$$$*$$
5600 M=$$$+$$$-$$$$
5700 .ENDM
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 5-1
DYNAMIC DATA BLOCK DEFINITIONS
5800
5900 000004 ALLBND==4 ;Allocation boundary(need not
6000 ; be power of 2)
6100 000172 MOD LENNDB,NB.LEN,ALLBND ;Calculate allocated length
6200 000172 MOD LENNTB,AB.LEN,ALLBND ;Calculate allocated length
6300 000754 MINDYM==<MINNDS*LENNDB>+<MINNTS*LENNTB> ;Minimum Dynamic memory
6400 ;
6500 000000 .PSECT DYNMIK,D,RW
6600 000000 DYMBLK:: .BLKB MINDYM+<LENNTB*2> ;Dynamic memory area
6700 001342' DYMEND==.-2
6800 001344 .BLKB 4 ;Spare bytes
6900 .EVEN
7000 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 6
MAIN PROGRAM
100 .SBTTL Main Program
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; The main processing of this program is done here. Initialization
600 ; of dynamic data structures and protocol messages is accomplished
700 ; plus setup for non-AST CoRoutine capabilities.
800 ;
900 ; CALLING SEQUENCE:
1000 ;
1100 ; NONE
1200 ;
1300 ; INPUT PARAMETERS:
1400 ;
1500 ; NONE
1600 ;
1700 ; IMPLICIT INPUTS:
1800 ;
1900 ; NONE
2000 ;
2100 ; OUTPUT PARAMETERS:
2200 ;
2300 ; NONE
2400 ;
2500 ; IMPLICIT OUTPUTS:
2600 ;
2700 ; NONE
2800 ;
2900 ; COMPLETION CODES:
3000 ;
3100 ; NONE
3200 ;
3300 ; SIDE EFFECTS:
3400 ;
3500 ; NONE
3600 ;
3700 ;--
3800
3900 000000 .PSECT MAIN,I,RO
4000 000000 MAIN:: ;Beginning of program
4100 000000 005067 000000' CLR NODLST ;Initialize Lists
4200 000004 005067 000010' CLR NOTLST ;
4300 000010 012700 000004' MOV #DYMLST,R0 ;Initialize Dynamic memory
4400 000014 004767 004702 CALL INIDM ;
4500 000020 ALUN$S #LUNERO,#"TI,#0 ;Assign for error messages
4600 000040 ALUN$S #LUNDLX,#"NX,#0 ;Assign NX0:
4700 000060 ALUN$S #LUNNT,#"NS,#0 ;Assign NS0: to all network
4800 000100 ALUN$S #LUNLL0,#"NS,#0 ; luns
4900 000120 ALUN$S #LUNLL1,#"NS,#0 ;
5000 000140 ALUN$S #LUNLL2,#"NS,#0 ;
5100 000160 ALUN$S #LUNLL3,#"NS,#0 ;
5200 000200 ALUN$S #LUNLL4,#"NS,#0 ;
5300 000220 004767 001004 CALL UPNODE ;Create node list
5400 000224 004767 001344 CALL CRETOP ;Create topology message
5500 000230 OPNW$S #LUNNT,#NETEFN,#NETSB,,<#3> ;Open Network Channel
5600 000300 ERCALL DSWERR
5700 000306 122767 000000G 000016' CMPB #IS.SUC,NETSB ;Success?
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 6-1
MAIN PROGRAM
5800 000314 001401 BEQ 20$ ;Yes, Enable Network data
5900 000316 000003 BPT ;No, Crash us to get reload
6000 000320 20$: SPAW$S #LUNNT,#NETEFN,#NETSB,#SPDAST,<#SPAAST>
6100 000372 ERCALL DSWERR
6200 000400 MRKT$S #CLKEFN,#1,#2,#CLKSRV ;Start clock service
6300 000426 TOP: WTSE$S #MAIEFN ;Wait for unblocking
6400 000440 CLEF$S #MAIEFN ;Clear flag
6500 000452 004767 000552 CALL UPNODE ;Keep node list current
6600 000456 005767 001754' TST NOTFLG ;Suspended topology change?
6700 000462 001003 BNE 10$ ;Yes, try to process now
6800 000464 005767 000014' TST NODCHG ;Node data base change?
6900 000470 001356 BNE TOP ;No, so no notification necessary
7000 000472 10$: DSAR$S ;Disable interrupts
7100 000500 005767 001756' TST NOTIP ;;Notification in progress?
7200 000504 001406 BEQ 20$ ;;No, so start it up
7300 000506 ENAR$S ;;Enable interrupts
7400 000514 005267 001754' INC NOTFLG ;Indicate suspended topology change
7500 000520 000742 BR TOP ;Wait some more
7600 ;
7700 000522 005067 001754' 20$: CLR NOTFLG ;;Don't need another round
7800 000526 004767 001042 CALL CRETOP ;;Recreate the topology message
7900 000532 012700 000010' MOV #NOTLST,R0 ;;Invalidate notice list
8000 000536 004767 000442 CALL INVLID ;;
8100 000542 011000 MOV (R0),R0 ;;Any entry in list?
8200 000544 001402 BEQ 25$ ;;No, so wait some more
8300 000546 004767 001762 CALL UPNOTI ;;Try sending topology change to
8400 ;; all concerned parties
8500 ;;All other members of the list
8600 ;; are notified automatically by
8700 ;; magical means.
8800 000552 25$: ENAR$S ;;Reenable interrupts
8900 000560 000722 BR TOP ;Wait some more
9000 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 7
GETNOD - GET NODE INFORMATION
100 .SBTTL GETNOD - Get node information
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; GETNOD gets the node-names from the NX0:
600 ; device, and adds them to the node list if not there.
700 ; If the node was there (or added) the valid node bit
800 ; is set in the flag byte of the node block.
900 ;
1000 ; CALLING SEQUENCE:
1100 ;
1200 ; CALL GETNOD
1300 ;
1400 ; INPUT PARAMETERS:
1500 ;
1600 ; NONE
1700 ;
1800 ; IMPLICIT INPUTS:
1900 ;
2000 ; NODLST - node block listhead
2100 ;
2200 ; OUTPUT PARAMETERS:
2300 ;
2400 ; NONE
2500 ;
2600 ; IMPLICIT OUTPUTS:
2700 ;
2800 ; NODCHG - node list has changed flag, 1 if no change, 0 if change
2900 ;
3000 ; COMPLETION CODES:
3100 ;
3200 ; NONE
3300 ;
3400 ; SIDE EFFECTS:
3500 ;
3600 ; Dynamic memory and listheads can be changed.
3700 ;
3800 ;--
3900
4000 000562 GETNOD:: ;Here to setup the node list
4100 000562 004767 000000G CALL $SAVAL ;Save all registers
4200 000566 QIOW$S #NX.NIC,#LUNDLX,#DLXEFN,,#DLXSB,,<#ARGDUM,#1,#NX$RNN,#DLXBUF,#DLXLEN>
4300 ;Get node names into DLXBUF
4400 000646 ERCALL DSWERR ;If $DSW error , OOPS
4500 000654 122767 000000G 000022' CMPB #IS.SUC,DLXSB ;Success?
4600 000662 001406 BEQ 10$ ;Yes, process nodes
4700 000664 122767 000000G 000022' CMPB #IE.DAO,DLXSB ;Almost Success?
4800 000672 001402 BEQ 10$ ;Yes, well process it anyway
4900 000674 000261 SEC ;Show failure
5000 000676 000446 BR 90$ ;Exit
5100 ;
5200 000700 012701 000334' 10$: MOV #DLXBUF,R1 ;Point at buffer
5300 000704 016702 000024' MOV DLXSB+2,R2 ;Length of buffer
5400 000710 060102 ADD R1,R2 ;Point at end of buffer
5500 000712 020102 15$: CMP R1,R2 ;End reached?
5600 000714 002036 BGE 80$ ;Yes, so exit
5700 000716 112103 MOVB (R1)+,R3 ;Get node type
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 7-1
GETNOD - GET NODE INFORMATION
5800 000720 122703 000004 CMPB #N$XRMT,R3 ;Is node remote?
5900 000724 001003 BNE 20$ ;No, so process it
6000 ;Yes, so skip node
6100 000726 112103 17$: MOVB (R1)+,R3 ;Skip over node-name
6200 000730 060301 ADD R3,R1 ;
6300 000732 000767 BR 15$ ;Get another node
6400 ;
6500 000734 121127 000006 20$: CMPB (R1),#MAXNLN ;Length of name too long?
6600 000740 003372 BGT 17$ ;Yes, so ignore node
6700 000742 004767 000050 CALL FNDNOD ;See if we have a winner
6800 000746 103413 BCS 30$ ;No, new node
6900 000750 152760 000001 000003 23$: BISB #NB$VAL,NB.FLG(R0) ;Set node valid flag
7000 000756 120360 000014 CMPB R3,NB.NTP(R0) ;Node type still the same?
7100 000762 001761 BEQ 17$ ;Yes, get next node name
7200 000764 110360 000014 MOVB R3,NB.NTP(R0) ;No, store it and show
7300 000770 005067 000014' CLR NODCHG ; node list changed
7400 000774 000754 BR 17$ ;Skip over name
7500 ;
7600 000776 004767 000070 30$: CALL ADDNOD ;Add a new node
7700 001002 103751 BCS 17$ ;If couldn't, ignore it
7800 001004 005067 000014' CLR NODCHG ;Show node list changed
7900 001010 000757 BR 23$ ;Make new node valid
8000 ;
8100 001012 000241 80$: CLC ;Successful completion
8200 001014 000207 90$: RETURN ;Exit
8300 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 8
FNDNOD - TRY TO FIND NODE BLOCK
100 .SBTTL FNDNOD - Try to find node block
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; FNDNOD returns the pointer to a node block which matches
600 ; the node-name passed by the caller.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; CALL FNDNOD
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; R1 = pointer to nodename in (I) format
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; NODLST - Node listhead
1900 ;
2000 ; OUTPUT PARAMETERS:
2100 ;
2200 ; R0 = pointer to node block that matched node-name
2300 ;
2400 ; IMPLICIT OUTPUTS:
2500 ;
2600 ; NONE
2700 ;
2800 ; CONDITION CODES:
2900 ;
3000 ; Carry Set if a matching node block was not found
3100 ; Carry Clear if matching block found
3200 ;
3300 ; SIDE EFFECTS:
3400 ;
3500 ; NONE
3600 ;
3700 ;--
3800
3900 001016 FNDNOD:: ;Here to find node in list
4000 001016 004567 000000G JSR R5,.SAVR1 ;Save R1-R5
4100 001022 012700 000000' MOV #NODLST,R0 ;Get listhead
4200 001026 112102 MOVB (R1)+,R2 ;R2 = length of node-name
4300 001030 011000 10$: MOV (R0),R0 ;Get next node block
4400 001032 001415 BEQ 80$ ;Guess we can't match any
4500 001034 126002 000004 CMPB NB.NLN(R0),R2 ;node-name lengths match?
4600 001040 001373 BNE 10$ ;No, try another block
4700 001042 010103 MOV R1,R3 ;Move pointer to node-name
4800 001044 010004 MOV R0,R4 ;Copy pointer to node block
4900 001046 010205 MOV R2,R5 ;Copy length of name
5000 001050 122364 000005 20$: CMPB (R3)+,NB.NNM(R4) ;Character match?
5100 001054 001365 BNE 10$ ;No, so try another block
5200 001056 005204 INC R4 ;Next character
5300 001060 077505 SOB R5,20$ ;Loop over other characters
5400 001062 000241 CLC ;Success! so exit
5500 001064 000401 BR 90$ ;
5600 ;
5700 001066 000261 80$: SEC ;Unsuccessful!
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 8-1
FNDNOD - TRY TO FIND NODE BLOCK
5800 ;
5900 001070 000207 90$: RETURN ;Exit
6000 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 9
ADDNOD - ADD A NEW ENTRY TO NODE LIST
100 .SBTTL ADDNOD - Add a new entry to node list
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; ADDNOD adds a new node block into the nodelist filling
600 ; various locations within the block with default information.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; CALL ADDNOD
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; R1 = pointer to node name in (I) format
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; NODLST - node block listhead
1900 ;
2000 ; OUTPUT PARAMETERS:
2100 ;
2200 ; R0 = pointer to new node block
2300 ;
2400 ; IMPLICIT OUTPUTS:
2500 ;
2600 ; NODLST - node block listhead is updated
2700 ;
2800 ; CONDITION CODES:
2900 ;
3000 ; Carry Set if another node block can't be allocated
3100 ; Carry Clear if successful allocation
3200 ;
3300 ; SIDE EFFECTS:
3400 ;
3500 ; NONE
3600 ;
3700 ;--
3800
3900 001072 ADDNOD:: ;Here to add node to list
4000 001072 004567 000000G JSR R5,.SAVR1 ;Save R1-R5
4100 001076 010146 MOV R1,-(SP) ;Hold onto node-name pointer
4200 001100 012701 000022 MOV #NB.LEN,R1 ;Try to get this much
4300 001104 012700 000004' MOV #DYMLST,R0 ;Dynamic listhead
4400 001110 004767 000000G CALL $RQCB ;Request core block
4500 001114 012602 MOV (SP)+,R2 ;Restore node-name pointer
4600 001116 103431 BCS 90$ ;Couldn't allocate block so exit
4700 001120 010003 MOV R0,R3 ;Copy address of block
4800 001122 010104 MOV R1,R4 ;Copy length of block
4900 001124 105023 10$: CLRB (R3)+ ;Clean block
5000 001126 077402 SOB R4,10$ ;
5100 001130 110160 000002 MOVB R1,NB.CNT(R0) ;Save allocated length
5200 001134 112203 MOVB (R2)+,R3 ;Get length of node-name
5300 001136 010360 000004 MOV R3,NB.NLN(R0) ; and save in node block
5400 001142 010004 MOV R0,R4 ;Copy block pointer
5500 001144 062704 000005 ADD #NB.NNM,R4 ;Point to where node name resides
5600 001150 112224 20$: MOVB (R2)+,(R4)+ ;Copy name
5700 001152 077302 SOB R3,20$ ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 9-1
ADDNOD - ADD A NEW ENTRY TO NODE LIST
5800 001154 012701 000000' MOV #NODLST,R1 ;Update listhead
5900 001160 005711 TST (R1) ;Anything in list
6000 001162 001002 BNE 25$ ;Yes, add to end
6100 001164 010011 MOV R0,(R1) ;No, show as first element
6200 001166 000402 BR 27$ ;Join common code
6300 001170 010071 000002 25$: MOV R0,@2(R1) ;Add to current end of list
6400 001174 010061 000002 27$: MOV R0,2(R1) ;New block is end of list
6500 001200 000241 CLC ;Success!!
6600 001202 000207 90$: RETURN ;Exit
6700 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 10
INVLID - INVALIDATE NODE/NOTICE LIST
100 .SBTTL INVLID - Invalidate node/notice list
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; INVLID is called to clear the valid node bit in all node blocks
600 ; in the node list.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; CALL INVLID
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; R0 - points at appropriate listhead whose elements are invalidated
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; NONE
1900 ;
2000 ; OUTPUT PARAMETERS:
2100 ;
2200 ; NONE
2300 ;
2400 ; IMPLICIT OUTPUTS:
2500 ;
2600 ; NONE
2700 ;
2800 ; COMPLETION CODES:
2900 ;
3000 ; NONE
3100 ;
3200 ; SIDE EFFECTS:
3300 ;
3400 ; NONE
3500 ;
3600 ;--
3700
3800 001204 INVLID:: ;Here to invalidate node blocks
3900 001204 004567 000000G JSR R5,$SAVRG ;Save R3-R5
4000 001210 010003 MOV R0,R3 ;Get listhead address
4100 001212 011303 10$: MOV (R3),R3 ;Get next node block
4200 001214 001404 BEQ 90$ ;None left exit
4300 001216 142763 000001 000003 BICB #NB$VAL,NB.FLG(R3) ;Clear valid flag
4400 001224 000772 BR 10$ ;Loop on
4500 ;
4600 001226 000207 90$: RETURN ;Exit
4700 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 11
UPNODE - UPDATE NODE INFORMATION
100 .SBTTL UPNODE - Update Node Information
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; UPNODE maintains the node information list from which the
600 ; topology information is generated.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; CALL UPNODE
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; NONE
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; NONE
1900 ;
2000 ; OUTPUT PARAMETERS:
2100 ;
2200 ; NONE
2300 ;
2400 ; IMPLICIT OUTPUTS:
2500 ;
2600 ; NODCHG - is set to 1 indicating no changes in the data base
2700 ; is 0 to indicate the data base has changed
2800 ;
2900 ; COMPLETION CODES:
3000 ;
3100 ; NONE
3200 ;
3300 ; SIDE EFFECTS:
3400 ;
3500 ; Complete data base is checked and possibly updated
3600 ;
3700 ;--
3800
3900 001230 UPNODE:: ;Here to update node information
4000 001230 012700 000000' MOV #NODLST,R0 ;Invalidate node data base
4100 001234 004767 177744 CALL INVLID ;
4200 001240 012767 000001 000014' MOV #1,NODCHG ;Assume no changes in data base
4300 001246 004767 177310 CALL GETNOD ;Update valid nodes
4400 001252 004767 000012 CALL RMINVN ;Remove Invalid nodes
4500 001256 004767 000074 CALL GETSTS ;Update node status
4600 001262 004767 000304 CALL GETLIN ;Find Line Information
4700 001266 000207 RETURN ;Exit
4800 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 12
RMINVN - REMOVE INVALID NODE BLOCKS
100 .SBTTL RMINVN - Remove Invalid Node Blocks
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; RMINVN removes node blocks that do not contain valid
600 ; node information from the node list. If RMINVN finds
700 ; an invalid block it sets NODCHG to reflect a change in
800 ; the node data base.
900 ;
1000 ; CALLING SEQUENCE:
1100 ;
1200 ; CALL RMINVN
1300 ;
1400 ; INPUT PARAMETERS:
1500 ;
1600 ; NONE
1700 ;
1800 ; IMPLICIT INPUTS:
1900 ;
2000 ; NODLST - Node listhead
2100 ;
2200 ; OUTPUT PARAMETERS:
2300 ;
2400 ; NONE
2500 ;
2600 ; IMPLICIT OUTPUTS:
2700 ;
2800 ; NODCHG may be changed to reflect a change in the data base
2900 ; NODLST may be updated to reflect removal of a node block
3000 ;
3100 ; COMPLETION CODES:
3200 ;
3300 ; NONE
3400 ;
3500 ; SIDE EFFECTS:
3600 ;
3700 ; NONE
3800 ;
3900 ;--
4000
4100 001270 RMINVN:: ;Here to remove invalid node blocks
4200 001270 004767 000000G CALL $SAVAL ;Save all registers
4300 001274 012703 000000' MOV #NODLST,R3 ;R3 = previous node (currently
4400 ; the node listhead)
4500 001300 011304 10$: MOV (R3),R4 ;R4 = current node block
4600 001302 001424 BEQ 90$ ;Guess we are done, so exit
4700 001304 132764 000001 000003 BITB #NB$VAL,NB.FLG(R4) ;Is node block valid?
4800 001312 001402 BEQ 20$ ;No, so remove it
4900 001314 010403 MOV R4,R3 ;Continue chain
5000 001316 000770 BR 10$ ; to get another node block
5100 ;
5200 001320 011413 20$: MOV (R4),(R3) ;Remove current node block from
5300 ; chain
5400 001322 001002 BNE 25$ ;Not end of chain if NE
5500 001324 010367 000002' MOV R3,NODLST+2 ;Update current end of chain
5600 001330 012700 000004' 25$: MOV #DYMLST,R0 ;Setup to release core block
5700 001334 116401 000002 MOVB NB.CNT(R4),R1 ;Allocated length of block
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 12-1
RMINVN - REMOVE INVALID NODE BLOCKS
5800 001340 010402 MOV R4,R2 ;Address of block
5900 001342 004767 000000G CALL $RLCB ;Release the block
6000 001346 005067 000014' CLR NODCHG ;Flag node list has changed
6100 001352 000752 BR 10$ ;Get another node block
6200 ;
6300 001354 000207 90$: RETURN ;Exit
6400 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 13
GETSTS - GET NODE STATUS
100 .SBTTL GETSTS - Get node status
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; GETSTS goes through the node list and updates the current
600 ; node status for nodes found there.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; CALL GETSTS
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; NONE
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; NODLST - Node listhead
1900 ;
2000 ; OUTPUT PARAMETERS:
2100 ;
2200 ; NONE
2300 ;
2400 ; IMPLICIT OUTPUTS:
2500 ;
2600 ; NODCHG may be updated to reflect a change in the node data base
2700 ;
2800 ; COMPLETION CODES:
2900 ;
3000 ; NONE
3100 ;
3200 ; SIDE EFFECTS:
3300 ;
3400 ; NONE
3500 ;
3600 ;--
3700
3800 001356 GETSTS:: ;Come here to update node status
3900 001356 004767 000000G CALL $SAVAL ;Save all registers
4000 001362 012700 000000' MOV #NODLST,R0 ;Get listhead
4100 001366 011000 10$: MOV (R0),R0 ;R0 = current node block
4200 001370 001477 BEQ 90$ ;Done if EQ
4300 001372 122760 000001 000014 CMPB #N$XLCL,NB.NTP(R0) ;Local node?
4400 001400 001003 BNE 15$ ;No, so process normally
4500 001402 105060 000013 CLRB NB.NST(R0) ;Yes, local node is always on
4600 001406 000767 BR 10$ ;Get next node block
4700 ;
4800 001410 010001 15$: MOV R0,R1 ;Make pointer to node name
4900 001412 062701 000004 ADD #NB.NLN,R1 ; in (I) format
5000 001416 QIOW$S #NX.NIC,#LUNDLX,#DLXEFN,,#DLXSB,,<R1,#MAXNLN+1,#NX$RNS,#DLXBUF,#DLXLEN>
5100 ;Get node status
5200 001474 ERCALL DSWERR ;Bad directive, FOOOOOO!
5300 001502 122767 000000G 000022' CMPB #IS.SUC,DLXSB ;Success?
5400 001510 001412 BEQ 20$ ;Yes, process status
5500 001512 122767 000000G 000022' CMPB #IE.DAO,DLXSB ;Almost Success?
5600 001520 001406 BEQ 20$ ;Yes, process anyway
5700 001522 142760 000001 000003 BICB #NB$VAL,NB.FLG(R0) ;Clear valid node
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 13-1
GETSTS - GET NODE STATUS
5800 001530 005067 000014' CLR NODCHG ;Flag node list change
5900 001534 000714 BR 10$ ;Get next node block
6000 ;
6100 001536 012703 000334' 20$: MOV #DLXBUF,R3 ;Point at response
6200 001542 105723 TSTB (R3)+ ;Skip node number
6300 001544 100001 BPL 21$ ;
6400 001546 105723 TSTB (R3)+ ;Only 2 bytes
6500 001550 121360 000013 21$: CMPB (R3),NB.NST(R0) ;See if Status change
6600 001554 001704 BEQ 10$ ;No, so get next node block
6700 001556 111360 000013 MOVB (R3),NB.NST(R0) ;Yes, so update
6800 001562 005067 000014' CLR NODCHG ;Flag node list change
6900 001566 000677 BR 10$ ;
7000 ;
7100 001570 000207 90$: RETURN ;Exit
7200 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 14
GETLIN - UPDATE LINE STATUS FOR NODES
100 .SBTTL GETLIN - Update Line Status for Nodes
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; GETLIN updates line information for all nodes in the
600 ; node list.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; CALL GETLIN
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; NONE
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; NONE
1900 ;
2000 ; OUTPUT PARAMETERS:
2100 ;
2200 ; NONE
2300 ;
2400 ; IMPLICIT OUTPUTS:
2500 ;
2600 ; NONE
2700 ;
2800 ; COMPLETION CODES:
2900 ;
3000 ; NONE
3100 ;
3200 ; SIDE EFFECTS:
3300 ;
3400 ; NONE
3500 ;
3600 ;--
3700
3800 001572 GETLIN:: ;Here to update line status
3900 001572 000207 RETURN ;Exit
4000 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 15
CRETOP - CREATE TOPOLOGY PROTOCOL MESSAGE
100 .SBTTL CRETOP - Create Topology Protocol Message
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; CRETOP creates a Topology Protocol message based upon the
600 ; node data base.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; CALL CRETOP
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; NONE
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; NODLST - Node data base listhead
1900 ;
2000 ; OUTPUT PARAMETERS:
2100 ;
2200 ; NONE
2300 ;
2400 ; IMPLICIT OUTPUTS:
2500 ;
2600 ; TOPMSG - is build reflecting the data base
2700 ;
2800 ; COMPLETION CODES:
2900 ;
3000 ; NONE
3100 ;
3200 ; SIDE EFFECTS:
3300 ;
3400 ; ASTs should be disabled during the build of the message.
3500 ;
3600 ;--
3700
3800 001574 CRETOP:: ;Here to create a topology message
3900 001574 004767 000000G CALL $SAVAL ;Save all registers
4000 001600 012700 000000' MOV #NODLST,R0 ;Get node listhead
4100 001604 012703 000751' MOV #CNFTOP+1,R3 ;Building message here
4200 001610 005005 CLR R5 ;Count of node units
4300 001612 011000 10$: MOV (R0),R0 ;R0 = current node block
4400 001614 001426 BEQ 80$ ;Done, finish off message
4500 001616 132760 000001 000003 BITB #NB$VAL,NB.FLG(R0) ;Is block valid?
4600 001624 001772 BEQ 10$ ;No, so ignore it
4700 001626 112723 000001 MOVB #FT$NNM,(R3)+ ;Field type = node name
4800 001632 116004 000004 MOVB NB.NLN(R0),R4 ;Get length of name
4900 001636 110423 MOVB R4,(R3)+ ;Store length
5000 001640 012702 000005 MOV #NB.NNM,R2 ;Offset to node name
5100 001644 060002 ADD R0,R2 ;
5200 001646 112223 15$: MOVB (R2)+,(R3)+ ;Copy name
5300 001650 077402 SOB R4,15$ ;
5400 001652 112723 000003 MOVB #FT$STA,(R3)+ ;Field type = node state
5500 001656 116023 000013 MOVB NB.NST(R0),(R3)+ ;Store state
5600 001662 116023 000014 MOVB NB.NTP(R0),(R3)+ ;Store type of node
5700
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 15-1
CRETOP - CREATE TOPOLOGY PROTOCOL MESSAGE
5800
5900 001666 005205 50$: INC R5 ;Done with a node unit, reflect
6000 ; that in count of node units
6100 001670 000750 BR 10$ ;Get another node block
6200 ;
6300 001672 110567 000750' 80$: MOVB R5,CNFTOP ;Store number of node units
6400 001676 162703 000750' SUB #CNFTOP,R3 ;Length of topology message
6500 001702 010367 000740' MOV R3,CNFLEN ;Store partial length
6600 001706 010367 001350' MOV R3,CHGLEN ;
6700 001712 062767 000006 000740' ADD #CNFTOP-CNFMSG,CNFLEN ;Include header in counts
6800 001720 062767 000002 001350' ADD #CHGTOP-CHGMSG,CHGLEN ;
6900 001726 012702 001354' MOV #CHGTOP,R2 ;Prepare for copy
7000 001732 012701 000750' MOV #CNFTOP,R1 ;
7100 001736 112122 85$: MOVB (R1)+,(R2)+ ;Copy message
7200 001740 077302 SOB R3,85$ ;
7300 001742 000207 RETURN ;Done
7400 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 16
SNDTOP - SEND THE TOPOLOGY CHANGE MESSAGE
100 .SBTTL SNDTOP - Send the topology change message
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; SNDTOP begins the process of sending the topology change message
600 ; to a member of the notification list.
700 ;
800 ; Processing is completed by various AST routines.
900 ;
1000 ; CALLING SEQUENCE:
1100 ;
1200 ; CALL SNDTOP
1300 ;
1400 ; INPUT PARAMETERS:
1500 ;
1600 ; R0 = pointer to notice data block
1700 ;
1800 ; IMPLICIT INPUTS:
1900 ;
2000 ; LL?SB - various logical link data structures
2100 ;
2200 ; OUTPUT PARAMETERS:
2300 ;
2400 ; NONE
2500 ;
2600 ; IMPLICIT OUTPUTS:
2700 ;
2800 ; LL?SB - may be chosen to be the logical link for the transfer
2900 ;
3000 ; CONDITION CODES:
3100 ;
3200 ; Carry Set if no LLs are available
3300 ; Carry Clear if message process started OK
3400 ;
3500 ; SIDE EFFECTS:
3600 ;
3700 ; Various ASTs are triggered.
3800 ;
3900 ;--
4000
4100 001744 SNDTOP:: ;Here to send topology change message
4200 001744 004767 000000G CALL $SAVAL ;Save all registers
4300 001750 012703 000040 MOV #AB.ACC+N.SND,R3 ;Form offset to connect block
4400 001754 060003 ADD R0,R3 ;Form real address
4500 001756 012704 000110 MOV #N.RQL,R4 ;Length of connect block
4600 001762 012705 000036' MOV #LL0SB,R5 ;Get LL address
4700 001766 022705 000056' 10$: CMP #LL2SB,R5 ;In range?
4800 001772 002474 BLT 50$ ;No, error
4900 001774 005765 000006 TST LL.NTB(R5) ;Assigned?
5000 002000 001403 BEQ 20$ ;No, so assign and use
5100 002002 062705 000010 ADD #LL.LEN,R5 ;Point at next LLSB
5200 002006 000767 BR 10$ ;Loop again
5300 ;
5400 002010 010065 000006 20$: MOV R0,LL.NTB(R5) ;Show assigned
5500 002014 012760 000043 000006 MOV #TIMBUP*NOTLMT,AB.TIM(R0) ;Nominal time to finish
5600 002022 152760 000002 000003 BISB #NT$NIP,AB.FLG(R0) ;Notice In Progress on this block
5700 002030 012701 000152 MOV #AB.ACC+N.CDA,R1 ;Offset of optional data
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 16-1
SNDTOP - SEND THE TOPOLOGY CHANGE MESSAGE
5800 002034 060001 ADD R0,R1 ;Address of optional data
5900 002036 016002 000150 MOV AB.ACC+N.CDAC(R0),R2 ;Length of optional data
6000 002042 001422 BEQ 30$ ;If zero use different CON$
6100 002044 CON$S LL.LUN(R5),,R5,#CHGAST,<R3,R4,R1,R2> ;Try connect
6200 002106 000421 BR 40$ ;Continue along
6300 002110 30$: CON$S LL.LUN(R5),,R5,#CHGAST,<R3,R4> ;Try connect with no args
6400 002152 40$: ERCALL DSWERR ;OOPs!
6500 002160 000241 CLC ;Show success
6600 002162 000401 BR 90$ ;Continue to exit
6700 002164 000261 50$: SEC ;Show error
6800 002166 000207 90$: RETURN ;Exit
6900 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 17
CHGAST - AST SERVICE FOR TOPOLOGY CHANGE CONNECT
100 .SBTTL CHGAST - AST service for topology change connect
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; CHGAST is entered as an AST on the CON$ to a node in the
600 ; notice list. If the logical link is established, the topology
700 ; change message is issued thus continuing the cycle of
800 ; CON$, SND$, DSC$.
900 ;
1000 ; CALLING SEQUENCE:
1100 ;
1200 ; Entered as an AST with the LL?SB address on the stack
1300 ;
1400 ; INPUT PARAMETERS:
1500 ;
1600 ; NONE
1700 ;
1800 ; IMPLICIT INPUTS:
1900 ;
2000 ; NONE
2100 ;
2200 ; OUTPUT PARAMETERS:
2300 ;
2400 ; NONE
2500 ;
2600 ; IMPLICIT OUTPUTS:
2700 ;
2800 ; NONE
2900 ;
3000 ; COMPLETION CODES:
3100 ;
3200 ; NONE
3300 ;
3400 ; SIDE EFFECTS:
3500 ;
3600 ; Potentially issues a topology message to some program.
3700 ;
3800 ;--
3900
4000 002170 CHGAST:: ;Here to process CON$ complete
4100 002170 PUSH <R0,R1,R2,R3,R4,R5> ;Save a few registers
4200 002204 016600 000014 MOV ^D12(SP),R0 ;R0 = LL?SB address
4300 002210 122710 000000G CMPB #IS.SUC,(R0) ;Success?
4400 002214 001407 BEQ 50$ ;Yes, send message
4500 002216 122710 000002 CMPB #IS.DAO,(R0) ;Almost success?
4600 002222 001404 BEQ 50$ ;Yes, process anyway
4700 002224 122710 177666 CMPB #IE.NRJ,(R0) ;Network reject?
4800 002230 001443 BEQ 100$ ;Yes, figure out what to do
4900 ; CMPB #IE.URJ,(R0) ;User didn't like us?
5000 ; BEQ 200$ ;Yes, we know what to do here
5100 002232 000462 BR 200$ ;Remove notice block on any other
5200 ; error
5300 ;
5400 002234 50$: ;Here to send topology change message
5500 002234 005267 001756' INC NOTIP ;Flag notice in progress
5600 002240 SND$S LL.LUN(R0),,R0,#SNDAST,<#CHGMSG,CHGLEN> ;Send message
5700 002306 ERCALL DSWERR ;OOPs
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 17-1
CHGAST - AST SERVICE FOR TOPOLOGY CHANGE CONNECT
5800 002314 90$: POP <R5,R4,R3,R2,R1,R0> ;Restore registers
5900 002330 005726 TST (SP)+ ;Pop Status block address
6000 002332 ASTX$S ; and exit
6100 ;
6200 002340 100$: ;Come here to analyze network rejects
6300 002340 122760 000001 000002 CMPB #NE$RES,2(R0) ;Network Resource error?
6400 002346 001425 BEQ 300$ ;Requeue for transmission
6500 002350 122760 000006 000002 CMPB #NE$MLB,2(R0) ;Destination queue overflow?
6600 002356 001421 BEQ 300$ ;Requeue for transmission
6700 002360 122760 000040 000002 CMPB #NE$TCN,2(R0) ;Too many connects to node?
6800 002366 001415 BEQ 300$ ;Requeue for transmission
6900 002370 122760 000041 000002 CMPB #NE$TCO,2(R0) ;Too many connects to process?
7000 002376 001411 BEQ 300$ ;Requeue for transmission
7100 002400 200$: ;Come here to remove notice block
7200 002400 016001 000006 MOV LL.NTB(R0),R1 ;Get address of notice block
7300 002404 004767 000036 CALL RELNOT ;Release notice block
7400 002410 005060 000006 CLR LL.NTB(R0) ;Show this LL free
7500 002414 004767 000114 CALL UPNOTI ;Update notice list information
7600 002420 000735 BR 90$ ;Exit
7700 ;
7800 002422 300$: ;Come here to cause reconnect of
7900 ; notice block sometime later
8000 002422 016001 000006 MOV LL.NTB(R0),R1 ;Get address of notice block
8100 002426 005060 000006 CLR LL.NTB(R0) ;Show this LL free
8200 ;+
8300 ; The following two lines need to be in the order specified to eliminate
8400 ; a race condition under which other noticers would not be notified.
8500 002432 004767 000076 CALL UPNOTI ;(1)Update notice list
8600 002436 142761 000003 000003 BICB #NB$VAL!NT$NIP,AB.FLG(R1) ;(2)Put in virgin state
8700 ;-
8800 002444 000723 BR 90$ ;Exit and either let timeout or
8900 ; another UPNOTI send topology to
9000 ; this program
9100 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 18
RELNOT - RELEASE NOTICE BLOCK
100 .SBTTL RELNOT - Release notice block
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; RELNOT releases a notice block from the notice list and
600 ; updates the appropriate data structures to reflect removal.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; CALL RELNOT
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; R1 = pointer to notice block
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; DYMLST - Dynamic Memory listhead
1900 ;
2000 ; OUTPUT PARAMETERS:
2100 ;
2200 ; NONE
2300 ;
2400 ; IMPLICIT OUTPUTS:
2500 ;
2600 ; NOTLST - Notice listhead could be updated
2700 ;
2800 ; COMPLETION CODES:
2900 ;
3000 ; NONE
3100 ;
3200 ; SIDE EFFECTS:
3300 ;
3400 ; NONE
3500 ;
3600 ;--
3700
3800 002446 RELNOT:: ;Release notice block
3900 002446 PUSH <R0,R1,R2,R3> ;Save destroyed registers
4000 002456 016102 000000 MOV AB.FPT(R1),R2 ;Address of next notice block
4100 002462 016103 000004 MOV AB.BPT(R1),R3 ;Address of previous notice block
4200 002466 010213 MOV R2,(R3) ;Link next to previous
4300 002470 001003 BNE 10$ ;There is a forward node
4400 002472 010367 000012' MOV R3,NOTLST+2 ;Update end of list
4500 002476 000402 BR 20$ ;Continue
4600 002500 010362 000004 10$: MOV R3,AB.BPT(R2) ;Backwards link
4700 002504 010102 20$: MOV R1,R2 ;Address of block
4800 002506 012700 000004' MOV #DYMLST,R0 ;Address of listhead
4900 002512 116101 000002 MOVB AB.CNT(R1),R1 ;Length of block
5000 002516 004767 000000G CALL $RLCB ;Release core block
5100 002522 POP <R3,R2,R1,R0> ;Restore registers
5200 002532 000207 RETURN ;Exit
5300 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 19
UPNOTI - UPDATE NOTICE LIST DATA ITEMS
100 .SBTTL UPNOTI - Update notice list data items
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; UPNOTI is called to update notice list data items such as
600 ; notification in progress (NOTIP), etc. This routine is called
700 ; when any nodes notification is complete to determine whether to
800 ; clear NOTIP or start another notice cycle.
900 ;
1000 ; CALLING SEQUENCE:
1100 ;
1200 ; CALL UPNOTI
1300 ;
1400 ; INPUT PARAMETERS:
1500 ;
1600 ; NONE
1700 ;
1800 ; IMPLICIT INPUTS:
1900 ;
2000 ; NOTLST - notification listhead
2100 ;
2200 ; OUTPUT PARAMETERS:
2300 ;
2400 ; NONE
2500 ;
2600 ; IMPLICIT OUTPUTS:
2700 ;
2800 ; NOTIP is updated to reflect whether notification is in progress
2900 ; LL?SB is updated to send a notification message
3000 ;
3100 ; COMPLETION CODES:
3200 ;
3300 ; NONE
3400 ;
3500 ; SIDE EFFECTS:
3600 ;
3700 ; This routine should be called with either ASTs disabled or
3800 ; at AST level.
3900 ;
4000 ;--
4100
4200 002534 UPNOTI:: ;Here to see if we clear NOTIP
4300 002534 004767 000000G CALL $SAVAL ;Save all registers
4400 002540 005067 001756' CLR NOTIP ;Assume not in progress
4500 002544 012703 000010' MOV #NOTLST,R3 ;Notification listhead
4600 002550 011303 10$: MOV (R3),R3 ;Get next notice block
4700 002552 001417 BEQ 90$ ;Done
4800 002554 132763 000002 000003 BITB #NT$NIP,AB.FLG(R3) ;Notice in progress
4900 002562 001403 BEQ 20$ ;No, check if needs notice
5000 002564 005267 001756' INC NOTIP ;Show notification in progress
5100 002570 000767 BR 10$ ;Loop for another notice block
5200 ;
5300 002572 132763 000001 000003 20$: BITB #NB$VAL,AB.FLG(R3) ;Already notified?
5400 002600 001363 BNE 10$ ;Yes, get another notice block
5500 002602 010300 MOV R3,R0 ;Copy notice block address
5600 002604 004767 177134 CALL SNDTOP ;Send topology
5700 002610 000757 BR 10$ ;Don't care if can't send now
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 19-1
UPNOTI - UPDATE NOTICE LIST DATA ITEMS
5800 ; we are sure to try again later.
5900 ;
6000 002612 000207 90$: RETURN ;Exit
6100 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 20
SNDAST - SND$ AST SERVICE
100 .SBTTL SNDAST - SND$ AST service
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; SNDAST is entered whenever a SND$ is complete. If the SND$
600 ; was successful then a DSC$ is performed, terminating this
700 ; notification cycle. If the SND$ is unsuccessful the notice
800 ; block that was used in the connect is removed from the notice
900 ; list.
1000 ;
1100 ; CALLING SEQUENCE:
1200 ;
1300 ; Entered on SND$ complete AST
1400 ;
1500 ; INPUT PARAMETERS:
1600 ;
1700 ; NONE
1800 ;
1900 ; IMPLICIT INPUTS:
2000 ;
2100 ; NONE
2200 ;
2300 ; OUTPUT PARAMETERS:
2400 ;
2500 ; NONE
2600 ;
2700 ; IMPLICIT OUTPUTS:
2800 ;
2900 ; NONE
3000 ;
3100 ; COMPLETION CODES:
3200 ;
3300 ; NONE
3400 ;
3500 ; SIDE EFFECTS:
3600 ;
3700 ; NONE
3800 ;
3900 ;--
4000
4100 002614 SNDAST:: ;Here to service SND$ ASTs
4200 002614 PUSH <R0,R1,R2,R3,R4,R5> ;Save all registers
4300 002630 016600 000014 MOV ^D12(SP),R0 ;Get status block address
4400 002634 122710 000000G CMPB #IS.SUC,(R0) ;Success?
4500 002640 001025 BNE 20$ ;No, so process error
4600 002642 DSC$S LL.LUN(R0),,R0,#DSCAST, ;Disconnect the link
4700 002704 ERCALL DSWERR ;OOPs!
4800 002712 000415 BR 50$ ;Exit
4900 ;
5000 002714 016001 000006 20$: MOV LL.NTB(R0),R1 ;Notice block address
5100 002720 001410 BEQ 45$ ;If 0 then already processed
5200 002722 132761 000004 000003 BITB #NT$AIP,AB.FLG(R1) ;Abort-in-progress?
5300 002730 001006 BNE 50$ ;Yes, another routine will remove
5400 002732 004767 177510 CALL RELNOT ;Release this notice block
5500 002736 005060 000006 CLR LL.NTB(R0) ;Release LL reservation
5600 002742 004767 177566 45$: CALL UPNOTI ;Update notice flag
5700 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 20-1
SNDAST - SND$ AST SERVICE
5800 002746 50$: POP <R5,R4,R3,R2,R1,R0> ;Restore registers
5900 002762 005726 TST (SP)+ ;Remove status block address
6000 002764 ASTX$S ;Exit
6100 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 21
DSCAST - DSC$ AST SERVICE
100 .SBTTL DSCAST - DSC$ AST service
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; DSCAST is entered whenever a DSC$ is complete. Release the
600 ; reservation on a LL.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; Entered as an AST
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; NONE
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; NONE
1900 ;
2000 ; OUTPUT PARAMETERS:
2100 ;
2200 ; NONE
2300 ;
2400 ; IMPLICIT OUTPUTS:
2500 ;
2600 ; LL?SB's reservation is released.
2700 ;
2800 ; COMPLETION CODES:
2900 ;
3000 ; NONE
3100 ;
3200 ; SIDE EFFECTS:
3300 ;
3400 ; NONE
3500 ;
3600 ;--
3700
3800 002772 DSCAST:: ;Here to process DSC$ complete
3900 002772 PUSH <R0,R1,R2> ;Save a few
4000 003000 016600 000006 MOV 6(SP),R0 ;R0 = status block address
4100 ; CMPB #IS.SUC,(R0) ;Success?
4200 ; BNE 20$ ;No, process error
4300 003004 016001 000006 MOV LL.NTB(R0),R1 ;Address of notice block
4400 003010 001410 BEQ 10$ ;If 0 then already processed
4500 003012 142761 000002 000003 BICB #NT$NIP,AB.FLG(R1) ;Clear notice in progress
4600 003020 152761 000001 000003 BISB #NB$VAL,AB.FLG(R1) ;Set valid notice complete
4700 003026 005060 000006 CLR LL.NTB(R0) ;Show LL available
4800 003032 004767 177476 10$: CALL UPNOTI ;Update NOTIP
4900 003036 POP <R2,R1,R0> ;Restore registers
5000 003044 005726 TST (SP)+ ;Remove status block address
5100 003046 ASTX$S ;Exit
5200 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 22
SPAAST AND SPDAST - SPA$ AST PROCESSING
100 .SBTTL SPAAST and SPDAST - SPA$ AST processing
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; SPDAST is entered upon completion of SPA$ and removes entries
600 ; from the network mailbox that were there at the time of the
700 ; SPA$ call.
800 ;
900 ; SPAAST is entered whenever new entries are added to the
1000 ; mailbox after the SPA$ call completes.
1100 ;
1200 ; CALLING SEQUENCE:
1300 ;
1400 ; Entered by AST
1500 ;
1600 ; INPUT PARAMETERS:
1700 ;
1800 ; NONE
1900 ;
2000 ; IMPLICIT INPUTS:
2100 ;
2200 ; DYMLST - Dynamic memory listhead
2300 ;
2400 ; OUTPUT PARAMETERS:
2500 ;
2600 ; NONE
2700 ;
2800 ; IMPLICIT OUTPUTS:
2900 ;
3000 ; NONE
3100 ;
3200 ; COMPLETION CODES:
3300 ;
3400 ; NONE
3500 ;
3600 ; SIDE EFFECTS:
3700 ;
3800 ; New entries could be added to the notice list.
3900 ; Old entries could be removed from the notice list
4000 ;
4100 ;--
4200
4300 .ENABL LSB ;Save local symbols
4400 003054 SPDAST:: ;Here to process SPA$ completion
4500 003054 PUSH <R0,R1,R2,R3,R4,R5> ;Save all registers
4600 003070 016600 000014 MOV ^D12(SP),R0 ;R0 = status block address
4700 003074 122710 000000G CMPB #IS.SUC,(R0) ;Success?
4800 003100 001003 BNE 10$ ;No, so exit
4900 003102 016005 000002 MOV 2(R0),R5 ;Number of previous mailbox entries
5000 003106 001023 BNE 20$ ;Process them
5100 003110 10$: POP <R5,R4,R3,R2,R1,R0> ;Restore registers
5200 003124 005726 TST (SP)+ ;Remove status block or dummy
5300 003126 ASTX$S ;Exit
5400 ;
5500 003134 SPAAST:: ;Here on new mailbox entry
5600 003134 005046 CLR -(SP) ;Dummy status block address
5700 003136 PUSH <R0,R1,R2,R3,R4,R5> ;Save registers
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 22-1
SPAAST AND SPDAST - SPA$ AST PROCESSING
5800 003152 012705 000001 MOV #1,R5 ;Process a single message at a time
5900 003156 012700 000004' 20$: MOV #DYMLST,R0 ;Get a potential notice block
6000 003162 012701 000172 MOV #AB.LEN,R1 ;
6100 003166 004767 000000G CALL $RQCB ;
6200 003172 103746 BCS 10$ ;Exit if can't get one
6300 003174 010002 MOV R0,R2 ;Copy address of block
6400 003176 010103 MOV R1,R3 ;Copy length of block
6500 003200 105022 22$: CLRB (R2)+ ;Clear block
6600 003202 077302 SOB R3,22$ ;
6700 003204 110160 000002 MOVB R1,AB.CNT(R0) ;Store alocated length
6800 003210 010002 30$: MOV R0,R2 ;Copy address of block
6900 003212 062702 000010 ADD #AB.ACC,R2 ;Point at window
7000 003216 012703 000162 MOV #N.CBL+20,R3 ;Length of window
7100 003222 GNDW$S #LUNNT,#GNDEFN,#GNDSB,,<R2,R3> ;Get network data
7200 003270 ERCALL DSWERR ;OOPS!
7300 003276 122767 000000G 000026' CMPB #IS.SUC,GNDSB ;Success?
7400 003304 001416 BEQ 100$ ;Yes, process network data
7500 003306 122767 000000G 000026' CMPB #IE.DAO,GNDSB ;Almost Success?
7600 003314 001412 BEQ 100$ ;Yes, process anyway
7700 003316 077544 80$: SOB R5,30$ ;Get some more mail
7800 003320 116001 000002 MOVB AB.CNT(R0),R1 ;Release core block
7900 003324 010002 MOV R0,R2 ;
8000 003326 012700 000004' MOV #DYMLST,R0 ;Dynamic memory listhead
8100 003332 004767 000000G CALL $RLCB ;Release it
8200 003336 000167 177546 90$: JMP 10$ ;Exit
8300 ;
8400 003342 100$: ;Here to dispatch on message
8500 003342 122767 000001 000027' CMPB #NT.CON,GNDSB+1 ;Connect?
8600 003350 001440 BEQ 120$ ;Yes, process it
8700 003352 122767 000002 000027' CMPB #NT.INT,GNDSB+1 ;Interrupt?
8800 003360 001756 BEQ 80$ ;Yes, ignore the message
8900 ; ;No, must be some sort of abort
9000 003362 012701 000036' MOV #LL0SB,R1 ;See if valid member being notified
9100 003366 012702 000056' MOV #LL2SB,R2 ;Last LL
9200 003372 020102 110$: CMP R1,R2 ;Finished?
9300 003374 003350 BGT 80$ ;Yes, no entry found, just ignore
9400 003376 126167 000004 000030' CMPB LL.LUN(R1),GNDSB+2 ;No, LUNs match?
9500 003404 001403 BEQ 112$ ;Yes, see if block is valid
9600 003406 062701 000010 ADD #LL.LEN,R1 ;Skip on to next LL
9700 003412 000767 BR 110$ ;
9800 ;
9900 003414 016102 000006 112$: MOV LL.NTB(R1),R2 ;Get notice block
10000 003420 001736 BEQ 80$ ;Not valid if zero
10100 003422 132762 000002 000003 BITB #NT$NIP,AB.FLG(R2) ;Notice in progress?
10200 003430 001732 BEQ 80$ ;No, just ignore
10300 003432 005061 000006 CLR LL.NTB(R1) ;Show not in use
10400 003436 010201 MOV R2,R1 ;Release this notice block
10500 003440 004767 177002 CALL RELNOT ;
10600 003444 004767 177064 CALL UPNOTI ;Update notice list information
10700 003450 000722 BR 80$ ;Continue processing
10800 ;
10900 003452 120$: ;Here to process connects to task
11000 003452 012701 000066' MOV #LL3SB,R1 ;Search these LLs
11100 003456 012702 000076' MOV #LL4SB,R2 ;Terminate here
11200 003462 020102 122$: CMP R1,R2 ;Done?
11300 003464 001447 BEQ 130$ ;Yes, no entry found so reject
11400 003466 005761 000006 TST LL.NTB(R1) ;Reserved?
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 22-2
SPAAST AND SPDAST - SPA$ AST PROCESSING
11500 003472 001403 BEQ 125$ ;No, so reserve it
11600 003474 062701 000010 ADD #LL.LEN,R1 ;Advance to next one
11700 003500 000770 BR 122$ ;Loop on
11800 ;
11900 003502 010061 000006 125$: MOV R0,LL.NTB(R1) ;Show reserved
12000 003506 012760 000043 000006 MOV #TIMBUP*NOTLMT,AB.TIM(R0) ;Nominal time to respond
12100 003514 012702 000010 MOV #AB.ACC,R2 ;Setup for accept
12200 003520 060002 ADD R0,R2 ;Form real address
12300 003522 ACC$S LL.LUN(R1),,R1,#CNFAST,<R2> ;Accept the connection
12400 003566 ERCALL DSWERR ;OOPs!
12500 003574 005305 DEC R5 ;Fake an SOB
12600 003576 001657 BEQ 90$ ;No more to process so exit
12700 003600 000167 177352 JMP 20$ ;More to process, get another
12800 ; block first
12900 ;
13000 003604 012702 000010 130$: MOV #AB.ACC,R2 ;Offset for connect block
13100 003610 060002 ADD R0,R2 ;Setup for reject
13200 003612 REJW$S #LUNNT,#GNDEFN,,,<R2> ;Reject connection
13300 003660 ERCALL DSWERR ;OOPS!
13400 003666 000613 BR 80$ ;Reuse core block
13500 ;
13600 .DSABL LSB
13700 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 23
CNFAST - AST SERVICE FOR ACC$ CONNECT
100 .SBTTL CNFAST - AST service for ACC$ connect
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; CNFAST is entered on an AST on the ACC$ complete to a node that
600 ; connected to it wanting to be placed in the notice list.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; Entered as an AST with the LL?SB address on the stack
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; NONE
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; NONE
1900 ;
2000 ; OUTPUT PARAMETERS:
2100 ;
2200 ; NONE
2300 ;
2400 ; IMPLICIT OUTPUTS:
2500 ;
2600 ; NONE
2700 ;
2800 ; COMPLETION CODES:
2900 ;
3000 ; NONE
3100 ;
3200 ; SIDE EFFECTS:
3300 ;
3400 ; Potentially issues a topology message to some program.
3500 ;
3600 ;--
3700
3800 .ENABL LSB
3900 003670 CNFAST:: ;Here to process ACC$ complete
4000 003670 PUSH <R0,R1,R2,R3,R4,R5> ;Save a few registers
4100 003704 016600 000014 MOV ^D12(SP),R0 ;R0 = LL?SB address
4200 003710 122710 000000G CMPB #IS.SUC,(R0) ;Success?
4300 003714 001403 BEQ 50$ ;Yes, process it
4400 003716 122710 000000G CMPB #IE.DAO,(R0) ;Almost success?
4500 003722 001044 BNE 95$ ;Try to remove notice block not
4600 ; in notice list
4700 003724 016001 000006 50$: MOV LL.NTB(R0),R1 ;Receive a message from noticer
4800 003730 062701 000020 ADD #AB.ACC+N.DDE,R1 ;Where to put it
4900 003734 012702 000020 MOV #N.SND-N.DDE,R2 ;Length of area
5000 003740 REC$S LL.LUN(R0),,R0,#RECAST,<R1,R2> ;Receive a message
5100 004002 ERCALL DSWERR
5200 004010 90$: POP <R5,R4,R3,R2,R1,R0> ;Restore registers
5300 004024 005726 TST (SP)+ ;Pop Status block address
5400 004026 ASTX$S ; and exit
5500 ;
5600 004034 016002 000006 95$: MOV LL.NTB(R0),R2 ;See if abort-in-progress
5700 004040 001763 BEQ 90$ ;If 0 already removed
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 23-1
CNFAST - AST SERVICE FOR ACC$ CONNECT
5800 004042 132762 000004 000003 BITB #NT$AIP,AB.FLG(R2) ;Abort-in-progress?
5900 004050 001357 BNE 90$ ;Yes, another routine will remove
6000 ; the block
6100 ;No, we get to remove the block
6200 ; ourselves
6300 ;
6400 004052 REMNOT:: ;Come here to remove notice block
6500 ; not in notice list
6600 004052 016002 000006 MOV LL.NTB(R0),R2 ;Get address of notice block
6700 004056 005060 000006 CLR LL.NTB(R0) ;Show this LL free
6800 004062 116201 000002 MOVB AB.CNT(R2),R1 ;Get amount of data in block
6900 004066 012700 000004' MOV #DYMLST,R0 ;Dynamic memory listhead
7000 004072 004767 000000G CALL $RLCB ;Release the core block
7100 004076 000744 BR 90$ ;Exit
7200 ;
7300 .DSABL LSB
7400 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 24
RECAST - AST SERVICE FOR REC$ ON NOTICER
100 .SBTTL RECAST - AST service for REC$ on noticer
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; RECAST processes a continuation of the confirmation process
600 ; for a task wanting to be placed in the noticer list. It
700 ; validates the contents of the received message and either
800 ; aborts the LL if invalid or sends the service request accepted
900 ; topology protocol message.
1000 ;
1100 ; CALLING SEQUENCE:
1200 ;
1300 ; Entered by an AST
1400 ;
1500 ; INPUT PARAMETERS:
1600 ;
1700 ; NONE
1800 ;
1900 ; IMPLICIT INPUTS:
2000 ;
2100 ; NONE
2200 ;
2300 ; OUTPUT PARAMETERS:
2400 ;
2500 ; NONE
2600 ;
2700 ; IMPLICIT OUTPUTS:
2800 ;
2900 ; NONE
3000 ;
3100 ; COMPLETION CODES:
3200 ;
3300 ; NONE
3400 ;
3500 ; SIDE EFFECTS:
3600 ;
3700 ; A notice block will be added to the notice list if
3800 ; a valid received message is processed.
3900 ;
4000 ;--
4100
4200 004100 RECAST:: ;Here to process REC$ complete
4300 004100 PUSH <R0,R1,R2,R3,R4,R5> ;Save all
4400 004114 016600 000014 MOV ^D12(SP),R0 ;R0 = LL?SB address
4500 004120 122710 000000G CMPB #IS.SUC,(R0) ;Success?
4600 004124 001403 BEQ 20$ ;Yes, send this character a message
4700 004126 122710 000000G CMPB #IE.DAO,(R0) ;Almost success?
4800 004132 001130 BNE 50$ ;No, see what is to be done
4900 004134 016001 000006 20$: MOV LL.NTB(R0),R1 ;Get notice block address
5000 004140 122761 000001 000020 CMPB #TY$SRQ,AB.ACC+N.DDE(R1) ;Did we get service request?
5100 004146 001075 BNE 40$ ;No, so abort link
5200 004150 122761 000006 000021 CMPB #FT$VER,AB.ACC+N.DDE+1(R1) ; How about protocol version?
5300 004156 001071 BNE 40$ ;No, so abort link
5400 ;Yes, so assume valid
5500 004160 PUSH R0 ;Save LL?SB pointer
5600 004162 004767 000274 CALL FNDNOT ;Find if noticer already in list
5700 004166 010003 MOV R0,R3 ;Move address of found block,
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 24-1
RECAST - AST SERVICE FOR REC$ ON NOTICER
5800 ; if any
5900 004170 POP R0 ;Restore pointer
6000 004172 103423 BCS 25$ ;No, add to notice list
6100 004174 016002 000006 MOV LL.NTB(R0),R2 ;Copy address of current block
6200 004200 010360 000006 MOV R3,LL.NTB(R0) ;Use old block
6300 004204 142761 000001 000003 BICB #NB$VAL,AB.FLG(R1) ;Show not valid
6400 004212 152761 000002 000003 BISB #NT$NIP,AB.FLG(R1) ;Show notice in progress
6500 004220 116201 000002 MOVB AB.CNT(R2),R1 ;Setup for release of core block
6600 004224 PUSH R0 ;Save pointer to LL?SB
6700 004226 012700 000004' MOV #DYMLST,R0 ;Dynamic memory listhead
6800 004232 004767 000000G CALL $RLCB ;Release the block
6900 004236 POP R0 ;Restore pointer
7000 004240 000407 BR 30$ ;Send the message
7100 004242 016001 000006 25$: MOV LL.NTB(R0),R1 ;Pass address of notice block
7200 004246 004767 000260 CALL ADDNOT ;Add new notice block
7300 004252 152761 000002 000003 BISB #NT$NIP,AB.FLG(R1) ;Show notice in progress with
7400 ; entry in notice list. NB$VAL
7500 ; is already cleared at allocation
7600 ; in SPDAST
7700 004260 005267 001756' 30$: INC NOTIP ;Flag notice in progress
7800 004264 SND$S LL.LUN(R0),,R0,#SNDAST,<#CNFMSG,CNFLEN> ;Send message
7900 004332 ERCALL DSWERR ;OOPs
8000 004340 000436 BR 90$ ;Exit
8100 ;
8200 004342 40$: ABT$S LL.LUN(R0),,R0,#ABTAST
8300 004404 ERCALL DSWERR ;OOPs!
8400 004412 000411 BR 90$ ;Exit
8500 ;
8600 004414 016002 000006 50$: MOV LL.NTB(R0),R2 ;See if we get to remove block
8700 004420 001406 BEQ 90$ ;If 0 already removed
8800 004422 132762 000004 000003 BITB #NT$AIP,AB.FLG(R2) ;Abort-in-progress?
8900 004430 001002 BNE 90$ ;Yes, another routine will remove
9000 004432 000167 177414 JMP REMNOT ;No, we remove it ourself
9100 ;
9200 004436 90$: POP <R5,R4,R3,R2,R1,R0> ;Restore registers
9300 004452 005726 TST (SP)+ ;Remove status block address
9400 004454 ASTX$S ;Exit
9500 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 25
FNDNOT - FIND AN EXISTING NOTICE BLOCK
100 .SBTTL FNDNOT - Find an existing notice block
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; FNDNOT finds a notice block that appears similar to one
600 ; passed to it as a parameter.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; CALL FNDNOT
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; R1 - points to notice block attempting to be matched
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; NOTLST - notice blocks listhead
1900 ;
2000 ; OUTPUT PARAMETERS:
2100 ;
2200 ; R0 contains pointer to found block if any
2300 ;
2400 ; IMPLICIT OUTPUTS:
2500 ;
2600 ; NONE
2700 ;
2800 ; CONDITION CODES:
2900 ;
3000 ; Carry Set if matching block not found
3100 ; Carry Clear if matching block found
3200 ;
3300 ; SIDE EFFECTS:
3400 ;
3500 ; NONE
3600 ;
3700 ;--
3800
3900 004462 FNDNOT:: ;Here to find matching notice block
4000 004462 004567 000000G JSR R5,.SAVR1 ;Save R1-R5
4100 004466 012700 000010' MOV #NOTLST,R0 ;Get notice listhead
4200 004472 011000 10$: MOV (R0),R0 ;Get next notice block
4300 004474 001414 BEQ 80$ ;No matching entries found
4400 004476 012702 000040 MOV #AB.ACC+N.SND,R2 ;Comparing source descriptors
4500 004502 010203 MOV R2,R3 ;
4600 004504 060102 ADD R1,R2 ;Look in parameter notice block
4700 004506 060003 ADD R0,R3 ; and in list notice block
4800 004510 012704 000130 MOV #N.CDAC-N.SND+20,R4 ;Look at complete source descriptor
4900 004514 122223 20$: CMPB (R2)+,(R3)+ ;Compare notice blocks
5000 004516 001365 BNE 10$ ;Get another if no match
5100 004520 077403 SOB R4,20$ ;Loop on!
5200 004522 000241 CLC ;Success
5300 004524 000401 BR 90$ ;Exit
5400 004526 000261 80$: SEC ;Failure
5500 004530 000207 90$: RETURN ;Exit
5600 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 26
ADDNOT - ADD A NOTICE BLOCK TO THE NOTICE LIST
100 .SBTTL ADDNOT - Add a notice block to the notice list
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; ADDNOT adds a notice block to the end of the notice list
600 ; via the notice listhead.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; CALL ADDNOT
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; R1 points at the notice block to add
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; NOTLST - the notice listhead
1900 ;
2000 ; OUTPUT PARAMETERS:
2100 ;
2200 ; NONE
2300 ;
2400 ; IMPLICIT OUTPUTS:
2500 ;
2600 ; NOTLST is updated to reflect added node
2700 ;
2800 ; COMPLETION CODES:
2900 ;
3000 ; NONE
3100 ;
3200 ; SIDE EFFECTS:
3300 ;
3400 ; The notice list has an entry added to it.
3500 ;
3600 ;--
3700
3800 004532 ADDNOT:: ;Here to add a notice block to list
3900 004532 004567 000000G JSR R5,.SAVR1 ;Save R1 - R5
4000 004536 005767 000010' TST NOTLST ;Anything in list
4100 004542 001006 BNE 20$ ;Yes, add to end
4200 004544 010167 000010' MOV R1,NOTLST ;No, begin list
4300 004550 012761 000010' 000004 MOV #NOTLST,AB.BPT(R1) ;Plug in backwards pointer
4400 004556 000406 BR 50$ ;Join common code
4500 004560 016702 000012' 20$: MOV NOTLST+2,R2 ;Get end of list
4600 004564 010162 000000 MOV R1,AB.FPT(R2) ;Update forward pointer
4700 004570 010261 000004 MOV R2,AB.BPT(R1) ;Update backward pointer
4800 004574 005061 000000 50$: CLR AB.FPT(R1) ;Show end of list
4900 004600 010167 000012' MOV R1,NOTLST+2 ;Update listhead
5000 004604 000207 RETURN ;Exit
5100 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 27
ABTAST - AST SERVICE FOR ABT$ CALL
100 .SBTTL ABTAST - AST service for ABT$ call
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; ABTAST removes the notice block not in the notice list after
600 ; an abort has occured.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; Entered on AST
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; NONE
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; NONE
1900 ;
2000 ; OUTPUT PARAMETERS:
2100 ;
2200 ; NONE
2300 ;
2400 ; IMPLICIT OUTPUTS:
2500 ;
2600 ; NONE
2700 ;
2800 ; COMPLETION CODES:
2900 ;
3000 ; NONE
3100 ;
3200 ; SIDE EFFECTS:
3300 ;
3400 ; NONE
3500 ;
3600 ;--
3700
3800 004606 ABTAST:: ;Here to process ABT$ completion
3900 004606 PUSH <R0,R1,R2,R3,R4,R5> ;Save all
4000 004622 016600 000014 MOV ^D12(SP),R0 ;Get LL?SB address
4100 004626 000167 177220 JMP REMNOT ;Remove the notice block
4200 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 28
RMVAST - AST SERVICE FOR ABT$ WITH LIST ELEMENT
100 .SBTTL RMVAST - AST service for ABT$ with list element
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; RMVAST removes the notice block in the notice list after
600 ; an abort has occured.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; Entered on AST
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; NONE
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; NONE
1900 ;
2000 ; OUTPUT PARAMETERS:
2100 ;
2200 ; NONE
2300 ;
2400 ; IMPLICIT OUTPUTS:
2500 ;
2600 ; NONE
2700 ;
2800 ; COMPLETION CODES:
2900 ;
3000 ; NONE
3100 ;
3200 ; SIDE EFFECTS:
3300 ;
3400 ; NONE
3500 ;
3600 ;--
3700
3800 004632 RMVAST:: ;Here to process ABT$ completion
3900 004632 PUSH <R0,R1,R2,R3,R4,R5> ;Save all
4000 004646 016600 000014 MOV ^D12(SP),R0 ;Get LL?SB address
4100 004652 016001 000006 MOV LL.NTB(R0),R1 ;Remove notice block from list
4200 004656 001404 BEQ 10$ ;If 0 then already processed
4300 004660 004767 175562 CALL RELNOT ;Release it
4400 004664 005060 000006 CLR LL.NTB(R0) ;Free LL?SB
4500 004670 004767 175640 10$: CALL UPNOTI ;Update notice-in-progress
4600 004674 POP <R5,R4,R3,R2,R1,R0> ;Restore all
4700 004710 005726 TST (SP)+ ;Remove address of LL?SB
4800 004712 ASTX$S ;Exit
4900 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 29
DSWERR - PROCESS $DSW ERRORS
100 .SBTTL DSWERR - Process $DSW errors
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; DSWERR is called upon a Carry Set from any EMT call.
600 ; This normally means the system has its thumbs in its
700 ; ears, so BPT for a dump.
800 ;
900 ; CALLING SEQUENCE:
1000 ;
1100 ; CALL DSWERR
1200 ;
1300 ; INPUT PARAMETERS:
1400 ;
1500 ; NONE
1600 ;
1700 ; IMPLICIT INPUTS:
1800 ;
1900 ; NONE
2000 ;
2100 ; OUTPUT PARAMETERS:
2200 ;
2300 ; NONE
2400 ;
2500 ; IMPLICIT OUTPUTS:
2600 ;
2700 ; NONE
2800 ;
2900 ; COMPLETION CODES:
3000 ;
3100 ; NONE
3200 ;
3300 ; SIDE EFFECTS:
3400 ;
3500 ; The DN2x is killed due to a BPT instruction so we can get a
3600 ; dump.
3700 ;
3800 ;--
3900
4000 004720 DSWERR:: ;Here on $DSW errors
4100 004720 000003 BPT ;Detonate the MCB!!!!
4200 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 30
INIDM - INITIALIZE DYNAMIC MEMORY
100 .SBTTL INIDM - Initialize Dynamic memory
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; INIDM is called to setup the dynamic memory allocation
600 ; necessary to support the NOD and NOT lists.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; CALL INIDM
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; R0 points at dynamic memory listhead
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; DYMBLK - start of dynamic memory
1900 ; DYMEND - end of dynamic memory
2000 ;
2100 ; OUTPUT PARAMETERS:
2200 ;
2300 ; NONE
2400 ;
2500 ; IMPLICIT OUTPUTS:
2600 ;
2700 ; DYMBLK is setup to be one block
2800 ;
2900 ; COMPLETION CODES:
3000 ;
3100 ; NONE
3200 ;
3300 ; SIDE EFFECTS:
3400 ;
3500 ; R0, R1, and R2 are destroyed
3600 ;
3700 ;--
3800
3900 004722 INIDM:: ;Here to initialize dynamic memory
4000 004722 012702 000000' MOV #DYMBLK,R2 ;Round to next 4-byte boundary
4100 004726 062702 000003 ADD #3,R2 ;
4200 004732 042702 000003 BIC #3,R2 ;
4300 004736 010220 MOV R2,(R0)+ ;Address of pool to listhead
4400 004740 005010 CLR (R0) ;Clear allocation word
4500 004742 012701 001342' MOV #DYMEND,R1 ;Calculate length of dynamic area
4600 004746 160201 SUB R2,R1 ;Length to R1
4700 004750 005022 CLR (R2)+ ;Clear pointer to next block
4800 004752 010112 MOV R1,(R2) ;Save length
4900 004754 000207 RETURN ;Exit
5000 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 31
CLKSRV - PROCESS BACKGROUND TIMING
100 .SBTTL CLKSRV - Process Background Timing
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ; CLKSRV does once/second timing functions such as unhanging
600 ; hung noticers and unblocking the main loop.
700 ;
800 ; CALLING SEQUENCE:
900 ;
1000 ; Entered as an AST with the EFN at the top of the stack.
1100 ;
1200 ; INPUT PARAMETERS:
1300 ;
1400 ; NONE
1500 ;
1600 ; IMPLICIT INPUTS:
1700 ;
1800 ; CLKTIM - the incrementing timer
1900 ;
2000 ; OUTPUT PARAMETERS:
2100 ;
2200 ; CLKTIM - the incrementing timer
2300 ;
2400 ; IMPLICIT OUTPUTS:
2500 ;
2600 ; NONE
2700 ;
2800 ; COMPLETION CODES:
2900 ;
3000 ; NONE
3100 ;
3200 ; SIDE EFFECTS:
3300 ;
3400 ; The main loop may be started or noticiers shut down.
3500 ;
3600 ;--
3700
3800 004756 CLKSRV: PUSH <R0,R1,R2,R3,R4,R5> ;Save all registers
3900 004772 005267 001760' INC CLKTIM ;Update timer
4000 004776 022767 000005 001760' CMP #TIMBUP,CLKTIM ;Main loop time?
4100 005004 003007 BGT 10$ ;No, don't advance loop
4200 005006 SETF$S #MAIEFN ;Yes, start main loop
4300 005020 005067 001760' CLR CLKTIM ;Reset timer
4400 ;
4500 ; Now check all the LL?SBs for being hung (or worse)
4600 ;
4700 005024 012700 000036' 10$: MOV #LL0SB,R0 ;Where to start
4800 005030 012701 000076' MOV #LL4SB,R1 ;Where to end
4900 005034 016002 000006 20$: MOV LL.NTB(R0),R2 ;Any noticer assigned?
5000 005040 001031 BNE 40$ ;Yes, process timer
5100 005042 062700 000010 30$: ADD #LL.LEN,R0 ;Advance to next noticer
5200 005046 020100 CMP R1,R0 ;Done?
5300 005050 002371 BGE 20$ ;No, not if last <= current
5400 005052 MRKT$S #CLKEFN,#1,#2,#CLKSRV ;Reissue clock request
5500 005100 POP <R5,R4,R3,R2,R1,R0> ;Restore registers
5600 005114 005726 TST (SP)+ ;Pop off EFN
5700 005116 ASTX$S ;Exit AST
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 31-1
CLKSRV - PROCESS BACKGROUND TIMING
5800 ;
5900 ; Here to process timer cell in notice block
6000 ;
6100 005124 132762 000001 000003 40$: BITB #NB$VAL,AB.FLG(R2) ;Already notified?
6200 005132 001343 BNE 30$ ;Yes, ignore
6300 005134 005362 000006 DEC AB.TIM(R2) ;No, decrement timer
6400 005140 003340 BGT 30$ ;If haven't expired,
6500 ; try again next second
6600 ;
6700 ; Here when timer has expired
6800 ;
6900 005142 012704 004606' MOV #ABTAST,R4 ;Default servicer
7000 005146 132762 000002 000003 BITB #NT$NIP,AB.FLG(R2) ;Notice in progress?
7100 005154 001402 BEQ 60$ ;No, so can just remove
7200 ; notice block on ABT
7300 005156 012704 004632' MOV #RMVAST,R4 ;Yes, so must be removed
7400 ; from notice list also
7500 005162 152762 000005 000003 60$: BISB #NB$VAL!NT$AIP,AB.FLG(R2) ;Set notified so that
7600 ; everyone keeps their
7700 ; hands off.
7800 005170 016003 000004 MOV LL.LUN(R0),R3 ;Get Lun to abort
7900 005174 ABT$S R3,,R0,R4 ;Abort the link
8000 005232 ERCALL DSWERR ;OOPs!
8100 005240 000700 BR 30$ ;Continue on
8200 ;
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 32
TEMPLATE_EXAMPLE -
100 .SBTTL TEMPLATE_EXAMPLE -
200 ;++
300 ; FUNCTIONAL DESCRIPTION:
400 ;
500 ;
600 ; CALLING SEQUENCE:
700 ;
800 ; NONE
900 ;
1000 ; INPUT PARAMETERS:
1100 ;
1200 ; NONE
1300 ;
1400 ; IMPLICIT INPUTS:
1500 ;
1600 ; NONE
1700 ;
1800 ; OUTPUT PARAMETERS:
1900 ;
2000 ; NONE
2100 ;
2200 ; IMPLICIT OUTPUTS:
2300 ;
2400 ; NONE
2500 ;
2600 ; COMPLETION CODES:
2700 ;
2800 ; NONE
2900 ;
3000 ; SIDE EFFECTS:
3100 ;
3200 ; NONE
3300 ;
3400 ;--
3500
3600
3700
3800 000000' .END MAIN
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 32-1
SYMBOL TABLE
ABTAST 004606RG 004 IE.NNT= 177660 NE$ABO= 000046 NT.LOG= 000011 N.RID 000034
AB.ACC 000010 G IE.NRJ= 177666 NE$ABT= 000011 NT.MOP= 000010 N.RIDC 000032
AB.BPT 000004 G IE.URJ= 177667 NE$ACC= 000042 NX$DEP= 000046 N.RND 000000
AB.CNT 000002 G INIDM 004722RG 004 NE$ACT= 000044 NX$EXM= 000050 N.RNM 000016
AB.FLG 000003 G INVLID 001204RG 004 NE$CDI= 000052 NX$RCV= 000032 N.RNMC 000014
AB.FPT 000000 G IS.DAO= 000002 NE$COM= 000047 NX$RLC= 000016 N.ROT 000007
AB.LEN 000172 G IS.SUC= ****** GX NE$FCF= 000050 NX$RLN= 000012 N.RPS 000056
AB.TIM 000006 G LENNDB= 000024 NE$FMT= 000005 NX$RLS= 000014 N.RPSC 000054
ADDNOD 001072RG 004 LENNTB= 000174 NE$GEN= 000007 NX$RNC= 000004 N.RQL = 000110
ADDNOT 004532RG 004 LL.LEN= 000010 G NE$ILS= 000043 NX$RNN= 000000 N.RUS 000012
ALLBND= 000004 G LL.LUN= 000004 G NE$IMG= 000053 NX$RNS= 000002 N.SDE 000042
ARGDUM 000736RG 002 LL.NTB= 000006 G NE$MLB= 000006 NX$SLH= 000026 N.SDEC 000040
ARGDYM 000734RG 002 LL0SB 000036RG 002 NE$NOD= 000002 NX$SLM= 000042 N.SEGZ 000002
CHGAST 002170RG 004 LL1SB 000046RG 002 NE$NSD= 000003 NX$SLO= 000040 N.SFM 000036
CHGLEN 001350RG 002 LL2SB 000056RG 002 NE$RES= 000001 NX$SLS= 000022 N.SGP 000040
CHGMSG 001352RG 002 LL3SB 000066RG 002 NE$SSR= 000000 NX$SNH= 000024 N.SND 000030
CHGTOP 001354RG 002 LL4SB 000076RG 002 NE$SSS= 000045 NX$SNM= 000036 N.SNM 000046
CLKEFN= 000014 G LS$LBK= 000003 NE$STA= 000051 NX$SNO= 000034 N.SNMC 000044
CLKSRV 004756R 004 LS$MAI= 000004 NE$TCN= 000040 NX$SNS= 000010 N.SOT 000037
CLKTIM 001760R 002 LS$OFF= 000001 NE$TCO= 000041 NX$XMT= 000030 N.SUS 000042
CNFAST 003670RG 004 LS$ON = 000000 NE$TPA= 000010 NX$ZLC= 000020 OUTBLK 000106RG 002
CNFLEN 000740RG 002 LUNDLX= 000001 G NE$UOB= 000004 NX$ZNC= 000006 RECAST 004100RG 004
CNFMSG 000742RG 002 LUNERO= 000002 G NODCHG 000014RG 002 NX.NIC= 017050 RELNOT 002446RG 004
CNFTOP 000750RG 002 LUNLL0= 000004 G NODLST 000000RG 002 N$XADJ= 000002 REMNOT 004052RG 004
CRETOP 001574RG 004 LUNLL1= 000005 G NOTFLG 001754R 002 N$XINT= 000003 RMINVN 001270RG 004
DLXBUF 000334RG 002 LUNLL2= 000006 G NOTIP 001756R 002 N$XLCL= 000001 RMVAST 004632RG 004
DLXEFN= 000011 G LUNLL3= 000007 G NOTLMT= 000007 G N$XRMT= 000004 SNDAST 002614RG 004
DLXLEN= 000400 G LUNLL4= 000010 G NOTLST 000010RG 002 N.CAC 000120 SNDTOP 001744RG 004
DLXSB 000022RG 002 LUNNT = 000003 G NO.DTR= 000077 N.CACC 000116 SPAAST 003134RG 004
DSCAST 002772RG 004 MAIEFN= 000015 G NO.FAL= 000021 N.CBL = 000142 SPDAST 003054RG 004
DSWERR 004720RG 004 MAIN 000000RG 004 NO.FA1= 000001 N.CDA 000142 TIMBUP= 000005 G
DYMBLK 000000RG 003 MAXNLN= 000006 G NO.NCU= 000023 N.CDAC 000140 TOP 000426R 004
DYMEND= 001342RG 003 MINDYM= 000754 G NO.RTL= 000022 N.CID 000064 TOPLEN= 000400 G
DYMLST 000004RG 002 MINNDS= 000006 G NO.TAS= 000000 N.CIDC 000062 TY$ACC= 000002 G
EROEFN= 000013 G MINNTS= 000003 G NO.TCL= 000017 N.CPS 000106 TY$SRQ= 000001 G
EROSB 000032RG 002 NB$VAL= 000001 G NO.TC1= 000005 N.CPSC 000104 TY$TOP= 000003 G
FNDNOD 001016RG 004 NB.CNT 000002 G NO.TLK= 000020 N.CTL 000000 T$$CUS= 000000
FNDNOT 004462RG 004 NB.FLG 000003 G NR$IFC= 000030 N.DDE 000010 T$$ECO= 000000
FT$LID= 000004 NB.LCT 000016 G NS$OFF= 000001 N.DDEC 000006 T$$VER= 000001
FT$LST= 000005 NB.LEN 000022 G NS$ON = 000000 N.DFM 000004 UPNODE 001230RG 004
FT$NCT= 000007 NB.LNM 000017 G NT$ADJ= 000002 N.DGP 000006 UPNOTI 002534RG 004
FT$NNM= 000001 NB.LSA 000020 G NT$AIP= 000004 G N.DNM 000014 $RLCB = ****** GX
FT$NUM= 000002 NB.LST 000021 G NT$INT= 000003 N.DNMC 000012 $RQCB = ****** GX
FT$STA= 000003 NB.LTP 000015 G NT$LOC= 000001 N.DOT 000005 $SAVAL= ****** GX
FT$VER= 000006 NB.NLN 000004 G NT$NIP= 000002 G N.DUS 000010 $SAVRG= ****** GX
GETLIN 001572RG 004 NB.NNM 000005 G NT$REM= 000004 N.RAC 000070 $$ = 000004
GETNOD 000562RG 004 NB.NST 000013 G NT.ABO= 000005 N.RACC 000066 $$$ = 000172
GETSTS 001356RG 004 NB.NTP 000014 G NT.ABT= 000004 N.RDE 000012 $$$ARG= 000002
GNDEFN= 000012 G NB.PTR 000000 G NT.CON= 000001 N.RDEC 000010 $$$FLG= 016630
GNDSB 000026RG 002 NETEFN= 000010 G NT.DSC= 000003 N.RFM 000006 $$$$ = 000170
IE.DAO= ****** GX NETSB 000016RG 002 NT.INT= 000002 N.RGP 000010 .SAVR1= ****** GX
IE.NDA= 177662
. ABS. 000172 000
000000 001
DATA 001762 002
DYNMIK 001350 003
TOPOL - MCB TOPOLOGY SERVICES MACRO M1110 13-OCT-79 13:10 PAGE 32-2
SYMBOL TABLE
MAIN 005242 004
ERRORS DETECTED: 0
VIRTUAL MEMORY USED: 5591 WORDS ( 22 PAGES)
DYNAMIC MEMORY: 6892 WORDS ( 26 PAGES)
ELAPSED TIME: 00:02:03
TOPOL,[135,30]TOPOL/CR/-SP=[130,10]NETLIB/ML,[135,10]TOPOL
TOPOL CREATED BY MACRO ON 13-OCT-79 AT 13:11 PAGE 1
SYMBOL CROSS REFERENCE CREF
SYMBOL VALUE REFERENCES
ABTAST 004606 RG 24-8200 #27-3800 31-6900
AB.ACC 000010 G #5-4500 16-4300 16-5700 16-5900 22-6900 22-12100 22-13000 23-4800 24-5000
24-5200 25-4400
AB.BPT 000004 G #5-4300 18-4100 *18-4600 *26-4300 *26-4700
AB.CNT 000002 G #5-3800 18-4900 *22-6700 22-7800 23-6800 24-6500
AB.FLG 000003 G #5-3900 *16-5600 *17-8600 19-4800 19-5300 20-5200 *21-4500 *21-4600 22-10100
23-5800 *24-6300 *24-6400 *24-7300 24-8800 31-6100 31-7000 *31-7500
AB.FPT 000000 G #5-3700 18-4000 *26-4600 *26-4800
AB.LEN 000172 G #5-4600 5-6200 22-6000
AB.TIM 000006 G #5-4400 *16-5500 *22-12000 *31-6300
ADDNOD 001072 RG 7-7600 #9-3900
ADDNOT 004532 RG 24-7200 #26-3800
ALLBND = 000004 G #5-5900 5-6100 5-6200
ARGDUM 000736 RG #4-15900 7-4200
ARGDYM 000734 RG #4-15800
CHGAST 002170 RG 16-6100 16-6300 #17-4000
CHGLEN 001350 RG #4-16700 *15-6600 *15-6800 17-5600
CHGMSG 001352 RG #4-16800 15-6800 17-5600
CHGTOP 001354 RG #4-16900 15-6800 15-6900
CLKEFN = 000014 G #4-9300 6-6200 31-5400
CLKSRV 004756 R 6-6200 #31-3800 31-5400
CLKTIM 001760 R #4-17400 *31-3900 31-4000 *31-4300
CNFAST 003670 RG 22-12300 #23-3900
CNFLEN 000740 RG #4-16200 *15-6500 *15-6700 24-7800
CNFMSG 000742 RG #4-16300 15-6700 24-7800
CNFTOP 000750 RG #4-16500 15-4100 *15-6300 15-6400 15-6700 15-7000
CRETOP 001574 RG 6-5400 6-7800 #15-3800
DLXBUF 000334 RG #4-15500 7-4200 7-5200 13-5000 13-6100
DLXEFN = 000011 G #4-9000 7-4200 13-5000
DLXLEN = 000400 G #4-15400 4-15500 7-4200 13-5000
DLXSB 000022 RG #4-12400 7-4200 7-4500 7-4700 7-5300 13-5000 13-5300 13-5500
DSCAST 002772 RG 20-4600 #21-3800
DSWERR 004720 RG 6-5600 6-6100 7-4400 13-5200 16-6400 17-5700 20-4700 22-7200 22-12400
22-13300 23-5100 24-7900 24-8300 #29-4000 31-8000
DYMBLK 000000 RG #5-6600 30-4000
DYMEND = 001342 RG #5-6700 30-4500
DYMLST 000004 RG #4-11800 6-4300 9-4300 12-5600 18-4800 22-5900 22-8000 23-6900 24-6700
EROEFN = 000013 G #4-9200
EROSB 000032 RG #4-12600
FNDNOD 001016 RG 7-6700 #8-3900
FNDNOT 004462 RG 24-5600 #25-3900
FT$LID = 000004 #3-6800
FT$LST = 000005 #3-6900
FT$NCT = 000007 #3-7100 4-16400 4-16800
FT$NNM = 000001 #3-6500 15-4700
FT$NUM = 000002 #3-6600
FT$STA = 000003 #3-6700 15-5400
FT$VER = 000006 #3-7000 4-16300 24-5200
GETLIN 001572 RG 11-4600 #14-3800
GETNOD 000562 RG #7-4000 11-4300
GETSTS 001356 RG 11-4500 #13-3800
GNDEFN = 000012 G #4-9100 22-7100 22-13200
TOPOL CREATED BY MACRO ON 13-OCT-79 AT 13:11 PAGE 2
SYMBOL CROSS REFERENCE CREF
SYMBOL VALUE REFERENCES
GNDSB 000026 RG #4-12500 22-7100 22-7300 22-7500 22-8500 22-8700 22-9400
IE.DAO = ****** GX 7-4700 13-5500 22-7500 23-4400 24-4700
IE.NRJ = 177666 17-4700
INIDM 004722 RG 6-4400 #30-3900
INVLID 001204 RG 6-8000 #10-3800 11-4100
IS.DAO = 000002 17-4500
IS.SUC = ****** GX 6-5700 7-4500 13-5300 17-4300 20-4400 22-4700 22-7300 23-4200 24-4500
LENNDB = 000024 #5-6100 5-6300
LENNTB = 000174 #5-6200 5-6300 5-6600
LL.LEN = 000010 G #4-13800 16-5100 22-9600 22-11600 31-5100
LL.LUN = 000004 G #4-13600 16-6100 16-6300 17-5600 20-4600 22-9400 22-12300 23-5000 24-7800
24-8200 31-7800
LL.NTB = 000006 G #4-13700 16-4900 *16-5400 17-7200 *17-7400 17-8000 *17-8100 20-5000 *20-5500
21-4300 *21-4700 22-9900 *22-10300 22-11400 *22-11900 23-4700 23-5600 23-6600
*23-6700 24-4900 24-6100 *24-6200 24-7100 24-8600 28-4100 *28-4400 31-4900
LL0SB 000036 RG #4-13900 16-4600 22-9000 31-4700
LL1SB 000046 RG #4-14100
LL2SB 000056 RG #4-14300 16-4700 22-9100
LL3SB 000066 RG #4-14600 22-11000
LL4SB 000076 RG #4-14800 22-11100 31-4800
LS$LBK = 000003 #3-8300
LS$MAI = 000004 #3-8400
LS$OFF = 000001 #3-8200
LS$ON = 000000 #3-8100
LUNDLX = 000001 G #4-9600 6-4600 7-4200 13-5000
LUNERO = 000002 G #4-9700 6-4500
LUNLL0 = 000004 G #4-9900 4-14000 6-4800
LUNLL1 = 000005 G #4-10000 4-14200 6-4900
LUNLL2 = 000006 G #4-10100 4-14400 6-5000
LUNLL3 = 000007 G #4-10200 4-14700 6-5100
LUNLL4 = 000010 G #4-10300 4-14900 6-5200
LUNNT = 000003 G #4-9800 6-4700 6-5500 6-6000 22-7100 22-13200
MAIEFN = 000015 G #4-9400 6-6300 6-6400 31-4200
MAIN 000000 RG #6-4000 32-3800
MAXNLN = 000006 G #4-10700 5-2200 7-6500 13-5000
MINDYM = 000754 G #5-6300 5-6600
MINNDS = 000006 G #4-10500 5-6300
MINNTS = 000003 G #4-10600 5-6300
NB$VAL = 000001 G #5-2000 #5-4200 7-6900 10-4300 12-4700 13-5700 15-4500 17-8600 19-5300
21-4600 24-6300 31-6100 31-7500
NB.CNT 000002 G #5-1800 *9-5100 12-5700
NB.FLG 000003 G #5-1900 *7-6900 *10-4300 12-4700 *13-5700 15-4500
NB.LCT 000016 G #5-2600
NB.LEN 000022 G #5-3000 5-6100 9-4200
NB.LNM 000017 G #5-2700
NB.LSA 000020 G #5-2800
NB.LST 000021 G #5-2900
NB.LTP 000015 G #5-2500
NB.NLN 000004 G #5-2100 8-4500 *9-5300 13-4900 15-4800
NB.NNM 000005 G #5-2200 8-5000 9-5500 15-5000
NB.NST 000013 G #5-2300 *13-4500 13-6500 *13-6700 15-5500
NB.NTP 000014 G #5-2400 7-7000 *7-7200 13-4300 15-5600
TOPOL CREATED BY MACRO ON 13-OCT-79 AT 13:11 PAGE 3
SYMBOL CROSS REFERENCE CREF
SYMBOL VALUE REFERENCES
NB.PTR 000000 G #5-1700
NETEFN = 000010 G #4-8900 6-5500 6-6000
NETSB 000016 RG #4-12300 6-5500 6-5700 6-6000
NE$MLB = 000006 17-6500
NE$RES = 000001 17-6300
NE$TCN = 000040 17-6700
NE$TCO = 000041 17-6900
NODCHG 000014 RG #4-12100 6-6800 *7-7300 *7-7800 *11-4200 *12-6000 *13-5800 *13-6800
NODLST 000000 RG #4-11700 *6-4100 8-4100 9-5800 11-4000 12-4300 *12-5500 13-4000 15-4000
NOTFLG 001754 R #4-17200 6-6600 *6-7400 *6-7700
NOTIP 001756 R #4-17300 6-7100 *17-5500 *19-4400 *19-5000 *24-7700
NOTLMT = 000007 G #4-11000 16-5500 22-12000
NOTLST 000010 RG #4-11900 *6-4200 6-7900 *18-4400 19-4500 25-4100 26-4000 *26-4200 26-4300
26-4500 *26-4900
NS$OFF = 000001 #3-7400
NS$ON = 000000 #3-7300
NT$ADJ = 000002 #3-7700
NT$AIP = 000004 G #5-4000 20-5200 23-5800 24-8800 31-7500
NT$INT = 000003 #3-7800
NT$LOC = 000001 #3-7600
NT$NIP = 000002 G #5-4100 16-5600 17-8600 19-4800 21-4500 22-10100 24-6400 24-7300 31-7000
NT$REM = 000004 #3-7900
NT.CON = 000001 22-8500
NT.INT = 000002 22-8700
NX$RNN = 000000 7-4200
NX$RNS = 000002 13-5000
NX.NIC = 017050 7-4200 13-5000
N$XLCL = 000001 13-4300
N$XRMT = 000004 7-5800
N.CBL = 000142 5-4500 22-7000
N.CDA 000142 16-5700
N.CDAC 000140 16-5900 25-4800
N.DDE 000010 23-4800 23-4900 24-5000 24-5200
N.RQL = 000110 16-4500
N.SND 000030 16-4300 23-4900 25-4400 25-4800
OUTBLK 000106 RG #4-15100
RECAST 004100 RG 23-5000 #24-4200
RELNOT 002446 RG 17-7300 #18-3800 20-5400 22-10500 28-4300
REMNOT 004052 RG #23-6400 24-9000 27-4100
RMINVN 001270 RG 11-4400 #12-4100
RMVAST 004632 RG #28-3800 31-7300
SNDAST 002614 RG 17-5600 #20-4100 24-7800
SNDTOP 001744 RG #16-4100 19-5600
SPAAST 003134 RG 6-6000 #22-5500
SPDAST 003054 RG 6-6000 #22-4400
TIMBUP = 000005 G #4-10900 16-5500 22-12000 31-4000
TOP 000426 R #6-6300 6-6900 6-7500 6-8900
TOPLEN = 000400 G #4-16100 4-16500 4-16900
TY$ACC = 000002 G #3-6200 4-16300
TY$SRQ = 000001 G #3-6100 24-5000
TY$TOP = 000003 G #3-6300 4-16800
T$$CUS = 000000 #3-600 4-16300
TOPOL CREATED BY MACRO ON 13-OCT-79 AT 13:11 PAGE 4
SYMBOL CROSS REFERENCE CREF
SYMBOL VALUE REFERENCES
T$$ECO = 000000 #3-500 4-16300
T$$VER = 000001 #3-400 4-16300
UPNODE 001230 RG 6-5300 6-6500 #11-3900
UPNOTI 002534 RG 6-8300 17-7500 17-8500 #19-4200 20-5600 21-4800 22-10600 28-4500
$RLCB = ****** GX 12-5900 18-5000 22-8100 23-7000 24-6800
$RQCB = ****** GX 9-4400 22-6100
$SAVAL = ****** GX 7-4100 12-4200 13-3900 15-3900 16-4200 19-4300
$SAVRG = ****** GX 10-3900
$$ = 000004 #5-6100 5-6100 5-6100 #5-6200 5-6200 5-6200
$$$ = 000172 #5-6100 5-6100 5-6100 5-6100 #5-6200 5-6200 5-6200 5-6200
$$$ARG = 000002 #6-5500 6-5500 #6-5500 6-5500 6-5500 #6-5500 6-5500 6-5500 6-5500
6-5500 6-5500 6-5500 6-5500 6-5500 6-5500 6-5500 #6-5500 6-5500
6-5500 6-5500 6-5500 6-5500 6-5500 6-5500 6-5500 6-5500 6-5500
#6-5500 6-5500 6-5500 6-5500 6-5500 6-5500 6-5500 6-5500 6-5500
6-5500 6-5500 #6-6000 6-6000 #6-6000 6-6000 6-6000 #6-6000 6-6000
6-6000 6-6000 6-6000 6-6000 6-6000 6-6000 6-6000 6-6000 6-6000
#6-6000 6-6000 6-6000 6-6000 6-6000 6-6000 6-6000 6-6000 6-6000
6-6000 6-6000 #6-6000 6-6000 6-6000 6-6000 6-6000 6-6000 6-6000
6-6000 6-6000 6-6000 6-6000 #6-6200 6-6200 6-6200 6-6200 6-6200
6-6200 6-6200 6-6200 6-6200 6-6200 6-6200 #7-4200 7-4200 #7-4200
7-4200 #7-4200 7-4200 #7-4200 7-4200 #7-4200 7-4200 #7-4200 7-4200
7-4200 #7-4200 7-4200 7-4200 7-4200 7-4200 7-4200 7-4200 7-4200
7-4200 7-4200 7-4200 #7-4200 7-4200 7-4200 7-4200 7-4200 7-4200
7-4200 7-4200 7-4200 7-4200 7-4200 #7-4200 7-4200 7-4200 7-4200
7-4200 7-4200 7-4200 7-4200 7-4200 7-4200 7-4200 #13-5000 13-5000
#13-5000 13-5000 #13-5000 13-5000 #13-5000 13-5000 #13-5000 13-5000 #13-5000
13-5000 13-5000 #13-5000 13-5000 13-5000 13-5000 13-5000 13-5000 13-5000
13-5000 13-5000 13-5000 13-5000 #13-5000 13-5000 13-5000 13-5000 13-5000
13-5000 13-5000 13-5000 13-5000 13-5000 13-5000 #13-5000 13-5000 13-5000
13-5000 13-5000 13-5000 13-5000 13-5000 13-5000 13-5000 13-5000 #16-6100
16-6100 #16-6100 16-6100 #16-6100 16-6100 #16-6100 16-6100 #16-6100 16-6100
#16-6100 16-6100 #16-6100 16-6100 #16-6100 16-6100 16-6100 16-6100 16-6100
16-6100 16-6100 16-6100 16-6100 16-6100 16-6100 #16-6100 16-6100 16-6100
16-6100 16-6100 16-6100 16-6100 16-6100 16-6100 16-6100 16-6100 #16-6100
16-6100 16-6100 16-6100 16-6100 16-6100 16-6100 16-6100 16-6100 16-6100
16-6100 #16-6300 16-6300 #16-6300 16-6300 #16-6300 16-6300 #16-6300 16-6300
#16-6300 16-6300 #16-6300 16-6300 #16-6300 16-6300 #16-6300 16-6300 16-6300
16-6300 16-6300 16-6300 16-6300 16-6300 16-6300 16-6300 16-6300 #16-6300
16-6300 16-6300 16-6300 16-6300 16-6300 16-6300 16-6300 16-6300 16-6300
16-6300 #16-6300 16-6300 16-6300 16-6300 16-6300 16-6300 16-6300 16-6300
16-6300 16-6300 16-6300 #17-5600 17-5600 #17-5600 17-5600 #17-5600 17-5600
17-5600 #17-5600 17-5600 17-5600 17-5600 17-5600 17-5600 17-5600 17-5600
17-5600 17-5600 17-5600 #17-5600 17-5600 17-5600 17-5600 17-5600 17-5600
17-5600 17-5600 17-5600 17-5600 17-5600 #17-5600 17-5600 17-5600 17-5600
17-5600 17-5600 17-5600 17-5600 17-5600 17-5600 17-5600 #20-4600 20-4600
20-4600 #20-4600 20-4600 20-4600 20-4600 20-4600 20-4600 20-4600 20-4600
20-4600 20-4600 20-4600 #20-4600 20-4600 20-4600 20-4600 20-4600 20-4600
20-4600 20-4600 20-4600 20-4600 20-4600 #22-7100 22-7100 #22-7100 22-7100
#22-7100 22-7100 22-7100 #22-7100 22-7100 22-7100 22-7100 22-7100 22-7100
22-7100 22-7100 22-7100 22-7100 22-7100 #22-7100 22-7100 22-7100 22-7100
22-7100 22-7100 22-7100 22-7100 22-7100 22-7100 22-7100 #22-7100 22-7100
22-7100 22-7100 22-7100 22-7100 22-7100 22-7100 22-7100 22-7100 22-7100
TOPOL CREATED BY MACRO ON 13-OCT-79 AT 13:11 PAGE 5
SYMBOL CROSS REFERENCE CREF
SYMBOL VALUE REFERENCES
#22-12300 22-12300 #22-12300 22-12300 #22-12300 22-12300 #22-12300 22-12300 #22-12300
22-12300 #22-12300 22-12300 #22-12300 22-12300 #22-12300 22-12300 22-12300 22-12300
22-12300 22-12300 22-12300 22-12300 22-12300 22-12300 22-12300 #22-12300 22-12300
22-12300 22-12300 22-12300 22-12300 22-12300 22-12300 22-12300 22-12300 22-12300
#22-12300 22-12300 22-12300 22-12300 22-12300 22-12300 22-12300 22-12300 22-12300
22-12300 22-12300 #22-13200 22-13200 #22-13200 22-13200 #22-13200 22-13200 #22-13200
22-13200 #22-13200 22-13200 #22-13200 22-13200 #22-13200 22-13200 #22-13200 22-13200
22-13200 22-13200 22-13200 22-13200 22-13200 22-13200 22-13200 22-13200 22-13200
#22-13200 22-13200 22-13200 22-13200 22-13200 22-13200 22-13200 22-13200 22-13200
22-13200 22-13200 #22-13200 22-13200 22-13200 22-13200 22-13200 22-13200 22-13200
22-13200 22-13200 22-13200 22-13200 #23-5000 23-5000 #23-5000 23-5000 #23-5000
23-5000 23-5000 #23-5000 23-5000 23-5000 23-5000 23-5000 23-5000 23-5000
23-5000 23-5000 23-5000 23-5000 #23-5000 23-5000 23-5000 23-5000 23-5000
23-5000 23-5000 23-5000 23-5000 23-5000 23-5000 #23-5000 23-5000 23-5000
23-5000 23-5000 23-5000 23-5000 23-5000 23-5000 23-5000 23-5000 #24-7800
24-7800 #24-7800 24-7800 #24-7800 24-7800 24-7800 #24-7800 24-7800 24-7800
24-7800 24-7800 24-7800 24-7800 24-7800 24-7800 24-7800 24-7800 #24-7800
24-7800 24-7800 24-7800 24-7800 24-7800 24-7800 24-7800 24-7800 24-7800
24-7800 #24-7800 24-7800 24-7800 24-7800 24-7800 24-7800 24-7800 24-7800
24-7800 24-7800 24-7800 #24-8200 24-8200 24-8200 #24-8200 24-8200 24-8200
24-8200 24-8200 24-8200 24-8200 24-8200 24-8200 24-8200 24-8200 #24-8200
24-8200 24-8200 24-8200 24-8200 24-8200 24-8200 24-8200 24-8200 24-8200
24-8200 #31-5400 31-5400 31-5400 31-5400 31-5400 31-5400 31-5400 31-5400
31-5400 31-5400 31-5400 #31-7900 31-7900 31-7900 #31-7900 31-7900 31-7900
31-7900 31-7900 31-7900 31-7900 31-7900 31-7900 31-7900 31-7900 #31-7900
31-7900 31-7900 31-7900 31-7900 31-7900 31-7900 31-7900 31-7900 31-7900
31-7900
$$$FLG = 016630 #22-7100 22-7100
$$$$ = 000170 #5-6100 5-6100 #5-6100 5-6100 #5-6200 5-6200 #5-6200 5-6200
.SAVR1 = ****** GX 8-4000 9-4000 25-4000 26-3900
TOPOL CREATED BY MACRO ON 13-OCT-79 AT 13:11 PAGE 6
MACRO CROSS REFERENCE CREF
MACRO NAME REFERENCES
ABT$S #4-1100 24-8200 31-7900
ACC$S #4-900 #22-12300
ALUN$S #4-900 6-4500 6-4600 6-4700 6-4800 6-4900 6-5000 6-5100 6-5200
ASTX$S #4-1100 17-6000 20-6000 21-5100 22-5300 23-5400 24-9400 28-4800 31-5700
CLEF$S #4-1200 6-6400
CON$S #4-1000 #16-6100 #16-6300
CTYWLB #4-4100
DIR$ #6-4500 6-4500 #6-4600 6-4600 #6-4700 6-4700 #6-4800 6-4800 #6-4900 6-4900
#6-5000 6-5000 #6-5100 6-5100 #6-5200 6-5200 #6-5500 6-5500 #6-6000 6-6000
#6-6200 6-6200 #6-6300 6-6300 #6-6400 6-6400 #6-7000 6-7000 #6-7300 6-7300
#6-8800 6-8800 #7-4200 7-4200 #13-5000 13-5000 #16-6100 16-6100 #16-6300 16-6300
#17-5600 17-5600 #17-6000 17-6000 #20-4600 20-4600 #20-6000 20-6000 #21-5100 21-5100
#22-5300 22-5300 #22-7100 22-7100 #22-12300 22-12300 #22-13200 22-13200 #23-5000 23-5000
#23-5400 23-5400 #24-7800 24-7800 #24-8200 24-8200 #24-9400 24-9400 #28-4800 28-4800
#31-4200 31-4200 #31-5400 31-5400 #31-5700 31-5700 #31-7900 31-7900
DLXDF #4-1000 #4-8700
DSAR$S #4-1100 6-7000
DSC$S #4-1000 20-4600
EDIOUT #4-2700
ENAR$S #4-1100 #6-7300 #6-8800
ERCALL #4-5400 6-5600 6-6100 7-4400 13-5200 16-6400 17-5700 20-4700 22-7200 22-12400
22-13300 23-5100 24-7900 24-8300 31-8000
ERJUMP #4-4800
GNDW$S #4-900 22-7100
MOD #5-5100 #5-6100 #5-6200
MOV$ #6-4500 #6-4500 #6-4500 #6-4500 #6-4600 #6-4600 #6-4600 #6-4600 #6-4700 #6-4700
#6-4700 #6-4700 #6-4800 #6-4800 #6-4800 #6-4800 #6-4900 #6-4900 #6-4900 #6-4900
#6-5000 #6-5000 #6-5000 #6-5000 #6-5100 #6-5100 #6-5100 #6-5100 #6-5200 #6-5200
#6-5200 #6-5200 #6-5500 #6-5500 #6-5500 #6-5500 #6-5500 #6-5500 #6-5500 #6-5500
#6-6000 #6-6000 #6-6000 #6-6000 #6-6000 #6-6000 #6-6000 #6-6000 #6-6200 #6-6200
#6-6200 #6-6200 #6-6200 #6-6300 #6-6300 #6-6400 #6-6400 #7-4200 #7-4200 #7-4200
#7-4200 #7-4200 #7-4200 #7-4200 #7-4200 #7-4200 #7-4200 #7-4200 #7-4200 #13-5000
#13-5000 #13-5000 #13-5000 #13-5000 #13-5000 #13-5000 #13-5000 #13-5000 #13-5000 #13-5000
#13-5000 #16-6100 #16-6100 #16-6100 #16-6100 #16-6100 #16-6100 #16-6100 #16-6100 #16-6100
#16-6100 #16-6100 #16-6100 #16-6100 #16-6300 #16-6300 #16-6300 #16-6300 #16-6300 #16-6300
#16-6300 #16-6300 #16-6300 #16-6300 #16-6300 #16-6300 #16-6300 #17-5600 #17-5600 #17-5600
#17-5600 #17-5600 #17-5600 #17-5600 #17-5600 #17-5600 #20-4600 #20-4600 #20-4600 #20-4600
#20-4600 #20-4600 #22-7100 #22-7100 #22-7100 #22-7100 #22-7100 #22-7100 #22-7100 #22-7100
#22-7100 #22-12300 #22-12300 #22-12300 #22-12300 #22-12300 #22-12300 #22-12300 #22-12300 #22-12300
#22-12300 #22-12300 #22-12300 #22-12300 #22-13200 #22-13200 #22-13200 #22-13200 #22-13200 #22-13200
#22-13200 #22-13200 #22-13200 #22-13200 #22-13200 #22-13200 #22-13200 #23-5000 #23-5000 #23-5000
#23-5000 #23-5000 #23-5000 #23-5000 #23-5000 #23-5000 #24-7800 #24-7800 #24-7800 #24-7800
#24-7800 #24-7800 #24-7800 #24-7800 #24-7800 #24-8200 #24-8200 #24-8200 #24-8200 #24-8200
#24-8200 #31-4200 #31-4200 #31-5400 #31-5400 #31-5400 #31-5400 #31-5400 #31-7900 #31-7900
#31-7900 #31-7900 #31-7900 #31-7900
MRKT$S #4-1100 #6-6200 #31-5400
MVB$ #6-5500 #6-5500 #6-6000 #6-6000 #7-4200 #7-4200 #13-5000 #13-5000 #16-6100 #16-6100
#16-6300 #16-6300 #17-5600 #17-5600 #20-4600 #20-4600 #22-7100 #22-7100 #22-12300 #22-12300
#22-13200 #22-13200 #23-5000 #23-5000 #24-7800 #24-7800 #24-8200 #24-8200 #31-7900 #31-7900
NETDF$ #4-1000 #4-8600
OPNW$S #4-1000 6-5500
POP #4-7300 #17-5800 #18-5100 #20-5800 #21-4900 #22-5100 #23-5200 #24-5900 #24-6900 #24-9200
TOPOL CREATED BY MACRO ON 13-OCT-79 AT 13:11 PAGE 7
MACRO CROSS REFERENCE CREF
MACRO NAME REFERENCES
#28-4600 #31-5500
PUSH #4-6300 #17-4100 #18-3900 #20-4200 #21-3900 #22-4500 #22-5700 #23-4000 #24-4300 #24-5500
#24-6600 #27-3900 #28-3900 #31-3800
QDPB$S #6-5500 #6-5500 #6-6000 #6-6000 #7-4200 #7-4200 #13-5000 #13-5000 #16-6100 #16-6100
#16-6300 #16-6300 #17-5600 #17-5600 #20-4600 #20-4600 #22-7100 #22-7100 #22-12300 #22-12300
#22-13200 #22-13200 #23-5000 #23-5000 #24-7800 #24-7800 #24-8200 #24-8200 #31-7900 #31-7900
QIOW$S #4-900 7-4200 13-5000
QIO$S #4-900
REC$S #4-900 #23-5000
REJW$S #4-1000 22-13200
RVP$ #6-5500 6-5500 6-5500 6-5500 #6-6000 6-6000 6-6000 6-6000 #6-6200 6-6200
#7-4200 7-4200 7-4200 7-4200 #13-5000 13-5000 13-5000 13-5000 #16-6100 16-6100
16-6100 16-6100 #16-6300 16-6300 16-6300 16-6300 #17-5600 17-5600 17-5600 17-5600
#20-4600 20-4600 20-4600 #22-7100 22-7100 22-7100 22-7100 #22-12300 22-12300 22-12300
22-12300 #22-13200 22-13200 22-13200 22-13200 #23-5000 23-5000 23-5000 23-5000 #24-7800
24-7800 24-7800 24-7800 #24-8200 24-8200 24-8200 #31-5400 31-5400 #31-7900 31-7900
31-7900
SETF$S #4-1200 31-4200
SND$S #4-1000 #17-5600 #24-7800
SPAW$S #4-900 #6-6000
WTSE$S #4-1100 #6-6300
$CON$S #16-6100 16-6100 #16-6300 16-6300 #22-12300 22-12300 #22-13200 22-13200
$GNDF$ #22-7100 22-7100