;LINE WATCHER TASK(LWT.MAC) ; ; PAUL ELKINS 1-NOV-84 ; ; LOS ALAMOS NATIONAL LAB. ; PO BOX 1663 MS-J957 ; LOS ALAMOS NM 87545 ; 505 667 3502 ; ; ; ;COPYRIGHT, 1984,THE REGENTS OF THE UNIVERSITY OF CALIFORNIA. ;THIS SOFTWARE WAS PRODUCED UNDER A U.S. GOVERNMENT CONTRACT ;(W-7405-ENG-36) BY THE LOS ALAMOS NATIONAL LABORATORY,WHICH ;IS OPERATED BY THE UNIVERSITY OF CALIFORNIA FOR THE U.S. ;DEPARTMENT OF ENERGY. THE U.S. GOVERNMENT IS LICENSED TO USE, ;REPRODUCE, AND DISTRIBUTE THIS SOFTWARE. PERMISSION IS GRANTED ;TO THE PUBLIC TO COPY AND USE THIS SOFTWARE WITHOUT CHARGE, ;PROVIDED THAT THIS NOTICE AND ANY STATEMENT OF AUTHORSHIP ARE ;REPRODUCED ON ALL COPIES. NEITHER THE GOVERNMENT NOR THE ;UNIVERSITY MAKES ANY WARRANTY, EXPRESS OR IMPLIED, OR ASSUMES ;ANY LIABILITY OR RESPONSIBILITY FOR THE USE OF THIS SOFTWARE. ; ;FLUSHES STALE PACKETS ;HALDLES INITIAL CONNECT FOR REMOTE FILE ACCESS ;HANDLES INITIAL CONNECT FOR DOWN LINE LOADING .TITLE LWT ; .LIST MEB .MCALL DIR$,QIO$,MRKT$,SDAT$,WTLO$S,RDAF$,SPWN$ .MCALL GTSK$S,SRDA$S,CLEF$S,SETF$S,QIOW$,CMKT$S .MCALL RCVD$,ASTX$S,GTIM$,STIM$,ENAR$S,DSAR$S .MCALL XQPRCL,XQSYSC,XQSTAT ; ; ;GENERATE RAD50 TASK NAME(2) MACRO ; .MACRO TSKN,N .RAD50 /.'N/ ;RAD50 TASK NAME(2) .ENDM ; XQPRCL ;DEFINE ETHERNET PROTOCOL XQSYSC ;DEFINE XQ: SYSTEM TYPE CODES XQSTAT ;DEFINE XQ: ERROR STATISTICS OFFSETS ; L1=1 ;ETHERNET LOGICAL UNIT NUMBER L2=2 ;CONSLOE LOG LOICAL UNIT NUMBER NBUF=1 ;NUMBER OF ETHERNET BUFFERS MKMSK=100000 ;MARK TIME EVENT FLAG MASK(16) RCMSK=40000 ;RECEIVE DATA EVENT FLAG MASK WTMSK=20000 ;RECEIVE DATA DELAY MASK DLYMSK=RCMSK!WTMSK ;REC. DATA OR DELAY MASK RECEF=15. ;RECEIVE DATA EVENT FLAG WTEF=14. ;RECEIVE DATA DELAY EVENT FLAG XEF=13. ;ETHERNET XMIT EVENT FLAG GEF=12. ;ETHERNET GET STATUS EVENT FLAG MRKTMG=20. ;MARKTIME TIME INTERVAL IN SECONDS MAXNOD=20 ;MAXIMUM NUMBER OF NODES BUFSZ=100 ;BUFFER SIZE IN BYTES NTSK=5 ;NUMBER OF TASKS TO SPAWN NLIN=2 ;NUMBER OF LINES TO FORMAT LINSZ=10 ;NUMBER OF WORDS PER LINE MINWC=14. ;MINIMUM PACKET WORD COUNT XQCONR=1 ;XQ: CONNECT REQUEST TYPE CODE(TASK-TASK) XQLUP=4 ;XQ: LINE-UP STATUS REQUEST TYPE CODE SVBFSZ=13. ;CONNECT REQUEST SAVE BUFFER SIZE(WORDS) NSVBF=NTSK ;NUMBER OF CONNECT REQUEST SAVE BUFFERS ; START: GTSK$S #MYTSK ;GET MY TASK NAME DIR$ #GDPB ;GET MY NODE ADDRESS MOV MYNOD,MYID+XQSRC ;INSERT MY NODE ADDRESS IN ID MESSAGE MOV MYTSK,MYID+XQSTSK ;INSERT MY TASK NAME IN ID MESSAGE MOV MYTSK+2,MYID+XQSTSK+2 ;INSERT TASK NAME WORD TWO SRDA$S #RECAST ;SPECIFY RECEIVE DATA AST CLR R0 ;INITIAL MASK VALUE MOV #NBUF,R1 ;NUMBER OF BUFFERS 1$: SEC ;BUILD XQ EVENT FLAG MASK ROL R0 ;POSITION TO NEXT SLOT SOB R1,1$ ;DONE ? MOV R0,XQMSK ;SAVE XQ EVENT FLAG MASK BIS #MKMSK!RCMSK!WTMSK,R0 ;MARK TIME/REC. DATA/TMO EVENT FLG MASK MOV R0,EFMSK ;ALL EVENT FLAGS MASK DIR$ #MARK ;START MARK TIME MOV #BUF,R5 ;STARTING BUFFER ADDRESS MOV #1,R4 ;BUFFER EVENT FLAG NUMBER MOV #NBUF,R0 ;GET NUMBER OF BUFFERS 3$: JSR PC,RDPKT ;POST ETHERNET RECEIVES ADD #BUFSZ,R5 ;NEXT BUFFER INC R4 ;NEXT BUFFER EVENT FLAG SOB R0,3$ ;DONE ? ; ;WAIT FOR LOGICAL OR OF EVENT FLAGS ; 10$: WTLO$S 0,EFMSK ;WAIT ON LOGICAL OR OF EVENT FLAGS DIR$ #RDAF ;READ ALL EVENT FLAGS 15$: MOV EFBUF,R0 ;GET GROUP ZERO EVENT FLAGS BIT XQMSK,R0 ;ANY ETHERNET RECEIVES BNE 16$ ;YES CONTINUE BIT #RCMSK,R0 ;RECEIVE DATA ? BEQ .+6 ;NO CONTINUE JMP 80$ ;YES GO PROCESS IT BIT #WTMSK,R0 ;RECEIVE DATA TIME OUT ? BEQ .+6 ;NO JMP 90$ ;YES GO FLUSH ALL BUFFERS BIT #MKMSK,R0 ;MARK TIME ? BEQ 10$ ;NO JMP 50$ ;GO TO MARK TIME 16$: MOV #BUF,R5 ;BUFFER STARTING ADDRESS MOV #1,R4 ;EVENT FLAG FOR FIRST BUFFER MOV #NBUF,R3 ;NUMBER OF BUFFERS MOV #1,R2 ;STARTING MASK BIT 17$: BIT R2,R0 ;FLAG SET ? BNE 18$ ;YES ASL R2 ;NO SHIFT TO NEXT POSITION INC R4 ;NEXT EVENT FLAG ADD #BUFSZ,R5 ;NEXT BUFFER SOB R3,17$ ;LOOP ON NUMBER OF BUFFERS JSR PC,ERR4 ;TYPE ERROR MESSAGE BR 10$ 18$: BIC R2,EFBUF ;CLEAR FLAG BIT CMP MYTSK,XQDTSK(R5) ;MY TASK NAME ? BNE 20$ ;NO FLUSH IT CMP MYTSK+2,XQDTSK+2(R5) ;MYTASK NAME(2) BNE 20$ ;NO FLUSH IT CMP #XQFTYP,XQTYP(R5) ;FILE ACCESS REQUEST ? BNE .+6 ;NO JMP 70$ ;YES CMP #XQDTYP,XQTYP(R5) ;DOWN LINE LOAD REQUEST ? BNE .+6 ;NO JMP 71$ ;YES CMP #XQSYST,XQTYP(R5) ;XQ: SYSTEM REQUEST ? BNE 20$ ;NO FLUSH IT MOV XQSTYP(R5),R0 ;GET SUB-TYPE CODE CMP #XQECHO,R0 ;ECHO PACKET ? BEQ 30$ ;YES CMP #XQRTIM,R0 ;REQUEST SYSTEM TIME ? BEQ 45$ ;YES CMP #XQSTIM,R0 ;SET TIME REQUEST ? BEQ 40$ ;YES CMP #XQGTIM,R0 ;GET TIME REQUEST ? BEQ 45$ ;YES CMP #XQERR,R0 ;GET ERROR COUNTERS ? BEQ 55$ ;YES CMP #XQERRC,R0 ;GET AND CLEAR ERROR COUNTERS BEQ 56$ ;YES CMP #XQID,R0 ;NODE ID MESSAGE ? BEQ 25$ ;YES JSR PC,ERR4 ;ILLEGAL TYPE CODE BR 32$ ;MORE WORK ? ; ;FLUSH PACKET ; 20$: TST IOSB1 ;PRINTING LUN BUSY ? BEQ 24$ ;YES SKIP PRINTOUT MOV R4,-(SP) ;SAVE RDPKT EVENT FLAG MOV R5,-(SP) ;SAVE RDPKT BUFFER ADDRESS MOV #LINBUF,R4 ;LINE BUFFER POINTER MOV #NLIN,R3 ;NUMBER OF LINES TO PRINT 21$: MOV #LINSZ,R2 ;NUMBER OF WORDS PER LINE 22$: MOV (R5)+,R0 ;GET WORD TO FORMAT JSR PC,OCT ;CONVERT TO OCTAL STRING SOB R2,22$ ;LOOP ON WORD COUNT MOVB #15,(R4)+ ;STORE CARRIAGE RETURN MOVB #12,(R4)+ ;STORE LINE FEED SOB R3,21$ ;LOOP ON NUMBER OF LINES MOV #MS1X,R0 ;FLUSH PACKET MESSAGE CONTROL BLOCK JSR PC,TYPE ;TYPE FLUSH MESSAGE MOV (SP)+,R5 ;RESTORE RDPKT BUFFER ADDRESS MOV (SP)+,R4 ;RESTORE RDPKT EVENT FLAG 24$: JSR PC,RDPKT ;PACKET FLUSHED BR 15$ ; ;LOCAL NODE ID MESSAGE(XQID) ; 25$: MOV XQSRC+4(R5),R1 ;GET ID NODE ADDRESS BMI 32$ ;BAD PACKET ADDRESS SKIP IT MOV #1,R0 ;GET READY TO BUILD NODE MASK CMP R1,#MAXNOD ;NODE ADDRESS IN RANGE ? BGT 32$ ;NO SKIP IT DEC R1 ;MAKE IT NODE ADDRESS-1 ASH R1,R0 ;BUILD NODE MASK WORD BIS R0,LINSTA ;INSERT IN LINE STATUS WORD BR 32$ ; ;ECHO PACKET(XQECHO) ; 30$: JSR PC,SWAP ;SWAP TO-FROM FIELDS JSR PC,SNDPKT ;SEND PACKET AND WAIT 32$: JSR PC,RDPKT ;RE-POST RECEIVE JMP 15$ ; ;SET NODE TIME(XQSTIM) ; 40$: MOV R5,R0 ;GET BUFFER ADDRESS ADD #XQDAT,R0 ;ADD IN OFFSET TO DATA AREA MOV R0,STIM+S.TIBA ;INSERT IN DPB DIR$ #STIM ;SET SYSTEM TIME BR 30$ ; ;READ NODE TIME(XQGTIM) ; 45$: MOV R5,R0 ;GET BUFFER ADDRESS ADD #XQDAT,R0 ;ADD IN OFFSET TO DATA AREA MOV R0,GTIM+G.TIBA ;INSERT IN DPB DIR$ #GTIM ;READ NODE TIME MOV #DGMIN/2+8.,XQWC(R5) ;INSERT PROPER WORD COUNT BR 30$ ;SEND IT TO REQUESTOR ; ;MARK TIME ; 50$: DIR$ #MARK ;RE-POST MARK TIME DIR$ #GDPB ;WAKEUP DRIVER/GET RECEIVE PACKET COUNT MOV #MYID,R5 ;GET MYID MESSAGE ADDRESS JSR PC,SNDPKT ;BROADCAST MY ID MESSAGE INC PASCTR ;INCREMENT MARKTIME PASS COUNTER BIT #1,PASCTR ;UPDATE LINE STATUS ? BNE 53$ ;NO SKIP UPDATE MOV LINSTA,LINUP ;NEW LINE-UP STATUS CLR LINSTA ;RESET NEXT LINE STATUS WORD 53$: JMP 10$ ; ;GET REMOTE XQ: STATUS(ERROR COUNTERS) ; 55$: MOV #IO.GLI,R0 ;GET LINK INFORMATION BR 57$ 56$: MOV #IO.GLC,R0 ;GET AND CLEAR LINK COUNTERS 57$: MOV R0,GERR+Q.IOFN ;INSERT FUNCTION CODE MOV R5,R0 ;GET BUFFER ADDRESS ADD #XQDAT,R0 ;ADD OFFSET TO DATA AREA MOV R0,GERR+Q.IOPL ;INSERT BUFFER ADDRESS IN DPB DIR$ #GERR ;GET ERROR INFORMATION MOV #STACNT+DGMIN/2,XQWC(R5) ;INSERT WORD COUNT BR 30$ ;SEND IT TO REQUESTOR ; ;FILE ACCESS ; 70$: MOV #CB2,R3 ;GET FILE ACCESS CONTROL BLOCK BR 72$ ; ;DOWN LINE LOAD ; 71$: MOV #CB3,R3 ;GET DOWN LINE LOAD CONTROL BLOCK ; ;FILE ACCESS/DOWN LINE LOAD COMMON CODE ; 72$: MOV 4(R3),R0 ;EXIT STATUS TABLE ADDRESS MOV #NTSK,R1 ;NUMBER OF TASKS AVAILABLE 74$: TST (R0) ;FIND NEXT AVAILABLE TASK BNE 75$ ;FOUND ONE TST (R0)+ ;POINT TO NEXT ENTRY SOB R1,74$ ;TRY AGAIN JSR PC,RDPKT ;NO SLOTS LEFT MOV 10(R3),R0 ;GET ERROR MESSAGE JSR PC,TYPE ;TYPE IT JMP 15$ ;ANY THING ELSE TO DO ? 75$: MOV R0,SPWN+S.PWES ;STORE EXIT STATUS ADR IN DPB CLR (R0) ;SET STATUS BUSY SUB 4(R3),R0 ;GET INDEX MOV 6(R3),XQDTSK(R5) ;RAD50 REAL TASK NAME(1) MOV TSK2(R0),XQDTSK+2(R5) ;RAD50 REAL TASK NAME(2) ASR R0 ;GET TASK NUMBER BIS #60,R0 ;MAKE IT ASCII MOV (R3),R1 ;GET CMD LINE ADDRESS MOV R1,SPWN+S.PWCA ;STORE IT IN SPAWN DPB MOV 2(R3),R2 ;GET CMD LINE LENGTH MOV R2,SPWN+S.PWCL ;STORE IT IN SPAWN DPB ADD R2,R1 ;GET END OF CMD LINE ADDRESS+1 MOVB R0,-1(R1) ;STORE TASK NUMBER IN CMD LINE DIR$ #SPWN ;SPAWN REQUESTED TASK MOV #SVBF,R1 ;GET SAVE CONNECT REQ. BUFFER ADDRESS MOV R5,R0 ;ETHERNET BUFFER ADDRESS MOV #SVBFSZ,R2 ;SAVE BUFFER SIZE MOV #NSVBF,R3 ;GET NUMBER OF RECEIVE BUFFERS 76$: TST XQDTSK(R1) ;BUFFER USED ? BEQ 77$ ;NO USE IT ADD #SVBFSZ*2,R1 ;POINT TO NEXT BUFFER SOB R3,76$ ;LOOP ON NUMBER OF BUFFERS MOV #MS5X,R0 ;ALL BUFFERS FULL ERROR MESSAGE JSR PC,TYPE ;TYPE ERROR MESSAGE BR 79$ ;EXIT 77$: MOV (R0)+,(R1)+ ;TRANSFER CONNECT REQUEST SOB R2,77$ ;LOOP ON BUFFER SIZE 79$: JSR PC,RDPKT ;RE-POST ETHERNET BUFFER CMKT$S #WTEF ;CANCEL MARK TIME IF OUTSTANDING DIR$ #TMO ;START NEW TIME OUT JMP 15$ ;MORE WORK ? ; ;RECEIVE DATA ; 80$: DIR$ #RDAT ;RECEIVE DATA CMP #IS.SUC,$DSW ;VALID RECEIVE ? BNE 89$ ;NO END OF RECEIVE QUEUE MOV #RECBUF,R0 ;RECEIVE DATA BUFFER ADDRESS MOV (R0)+,SDAT+S.DATN ;REQUESTOR TASK NAME(1) MOV (R0)+,SDAT+S.DATN+2 ;REQUESTOR TASK NAME(2) MOV R0,SDAT+S.DABA ;SEND DATA BUFFER ADDRESS ? CMP (R0),#XQCONR ;CONNECT REQUEST ? BNE 85$ ;NO TRY LINE STATUS MOV #SVBF,R1 ;GET SAVE BUFFER ADDRESS MOV #NSVBF,R2 ;GET NUMBER OF REC. BUFFERS 81$: CMP XQDTSK(R1),-4(R0) ;TASK NAME(1) MATCH ? BNE 82$ ;NO SKIP IT CMP XQDTSK+2(R1),-2(R0) ;TASK NAME(2) MATCH ? BEQ 83$ ;YES SYNRONIZE WITH SPAWNED TASK 82$: ADD #SVBFSZ*2,R1 ;POINT TO NEXT BUFFER SOB R2,81$ ;LOOP ON NUMBER OF BUFFERS MOV #MS6X,R0 ;UNKNOWN CONNECT REQUEST JSR PC,TYPE ;TYPE ERROR MESSAGE BR 89$ ;EXIT 83$: MOV R1,SDAT+S.DABA ;SEND DATA BUFFER ADDRESS DIR$ #SDAT ;SEND CONNECT BLOCK CLR XQDTSK(R1) ;MARK IT INVALID(NOT BUSY) BR 80$ 85$: CMP (R0),#XQLUP ;LINE-UP STATUS REQUEST ? BNE 80$ ;NO SKIP IT MOV LINUP,4(R0) ;GET LINE STATUS INCB 3(R0) ;INCREMENT WORD COUNT DIR$ #SDAT ;SEND TASK MESSAGE BR 80$ ;ANY MORE ? 89$: CLEF$S #RECEF ;CLEAR RECEIVE DATA EVENT FLAG ENAR$S ;ENABLE AST'S JMP 10$ ; ;TIME OUT FLUSH ALL RECEIVE BUFFERS ; 90$: MOV #SVBF,R0 ;GET SAVE BUFFER STARTING ADDRESS MOV #NSVBF,R1 ;GET NUMBER OF RECEIVE BUFFERS CLEF$S #WTEF ;CLEAR TIME-OUT EVENT FLAG 91$: CLR XQDTSK(R0) ;SET BUFFER NOT USED STATUS ADD #SVBFSZ*2,R0 ;POINT TO NEXT BUFFER SOB R1,91$ ;LOOP ON NUMBER OF BUFFERS JMP 10$ ;DONE EXIT ; ;TYPE ERROR MESSAGE ; ERR4: MOV #MS4X,R0 ;ERROR MESSAGE ADDRESS JSR PC,TYPE ;TYPE IT JSR PC,RDPKT RTS PC ; ;POST READ ETHERNET QIO(R5=BUFFER ADDRESS,R4=EVENT FLAG) ; RDPKT: MOV R5,RDPB+Q.IOPL ;INSERT BUFFER ADDRESS MOV R4,RDPB+Q.IOEF ;INSERT EVENT FLAG DIR$ #RDPB ;ISSUE READ QIO RTS PC ; ;SEND PACKET AND WAIT ; SNDPKT: MOV R5,XDPB+Q.IOPL ;STORE BUFFER ADDRESS DIR$ #XDPB ;SEND IT RTS PC ; ;SWAP ETHER NET BUFFER ; SWAP: MOV R5,R0 ;GET BUFFER ADDRESS CLR (R0)+ CLR (R0)+ MOV XQSRC+4(R5),(R0) ;STORE DESTINATION ADDRESS MOV MYNOD,XQSRC+4(R5) ;INSERT SOURCE NODE ADDRESS MOV XQSTSK(R5),XQDTSK(R5) MOV XQSTSK+2(R5),XQDTSK+2(R5) MOV MYTSK,XQSTSK(R5) MOV MYTSK+2,XQSTSK+2(R5) RTS PC ; ;TYPE ERROR MESSAGE(R0=POINTER TO MESSAGE CONTROL BLOCK) ; TYPE: MOV (R0)+,TTDPB+Q.IOPL ;BUFFER ADDRESS MOV (R0),TTDPB+Q.IOPL+2 ;BYTE COUNT DIR$ #TTDPB RTS PC ; ;OCTAL CONVERSION ROUTINE ; ; R0=INPUT WORD TO BE CONVERTED ; R4=OUTPUT BUFFER POINTER ; R0,R1 ARE DISTROYED ; OCT: MOV R2,-(SP) ;SAVE R2(CHARACTER COUNTER) MOV #6,R2 ;GET CHARACTER COUNT CLR R1 ;CLEAR NEW CHARACTER REGISTER BR 10$ ;START WITH HIGH ORDER BIT 5$: CLR R1 ;CLEAR NEW CHARACTER REGISTER ROL R0 ;BIT-1 TO C-BIT ROL R1 ;C-BIT TO R1 ROL R0 ;BIT-2 TO C-BIT ROL R1 ;C-BIT TO R1 10$: ROL R0 ;BIT-3 TO C-BIT ROL R1 ;C-BIT TO R1 BIS #60,R1 ;MAKE IT ASCII MOVB R1,(R4)+ ;STORE BYTE IN OUTPUT BUFFER SOB R2,5$ ;LOOP ON WORD COUNT MOVB #40,(R4)+ ;STORE TRAILING SPACE MOV (SP)+,R2 ;RESTORE R2 RTS PC ; ;RECEIVE AST ENTRY(SET EVENT FLAG ; RECAST: SETF$S #RECEF ;SET EVENT FLAG DSAR$S ;DISABLE TASK AST'S ASTX$S ;EXIT AST STATE ; IOSB1: .WORD 1,0 ;PRINTER IOSB(INITIALIZE AS NOT BUSY) XQMSK: .BLKW 1 ;ALL XQ: EVENT FLAGS MASK EFMSK: .BLKW 1 ;ALL EVENT FLAGS MASK WORD PASCTR: .BLKW 1 ;MARKTIME PASS COUNTER LINSTA: .BLKW 1 ;OLD LINE STATUS WORD LINUP: .BLKW 1 ;NEW LINE STATUS WORD EFBUF: .BLKW 4 ;READ EVENT FLAGS BUFFER RECBUF: .BLKW 15. ;TASK RECEIVE BUFFER MYTSK: .BLKB BUFSZ*NBUF+4 BUF=MYTSK+4 MYNOD: .BLKW 2 ;MY NODE ADDRESS AND RECEIVE PACKET COUNT RCNT=MYNOD+2 ;RECEIVE MESSAGE COUNT SVBF: .BLKW NSVBF*SVBFSZ ;CONNECT REQUEST SAVE BUFFERS ; ;START OF MY ID MESSAGE BLOCK(NEXT 4 LINES MUST BE IN ORDER) ; MYID: .WORD -1,-1,-1,0,0,0,XQSYST,MINWC LWT: .RAD50 /LWT.../ ;DESTINATION TASK NAME .WORD 0,0 ;MY TASK NAME FOR ID MESSAGE .WORD XQID,0 ;END OF ID MESSAGE BLOCK ; ;SPAWN TASK CONTROL BLOCKS ; CB2: .WORD CMDL2 ;CMD LINE ADDRESS .WORD CMDL2E ;NUMBER OF BYTES .WORD ESTAT2 ;EXIT STATUS TABLE .RAD50 /RFA/ ;FIRST HALF OF TASK NAME .WORD MS2X ;ERROR MESSAGE CB3: .WORD CMDL3 ;DOWN LINE LOAD CONTROL BLOCK .WORD CMDL3E .WORD ESTAT3 .RAD50 /DLT/ .WORD MS3X CMDL2: .ASCII "RUN [100,3]RFA/TASK=RFA.X" CMDL2E=.-CMDL2 CMDL3: .ASCII "RUN [100,3]DLT/TASK=DLT.X" CMDL3E=.-CMDL3 .EVEN ; ;EXIT STATUS TABLES ; ESTAT2: .REPT NTSK ;TYPE 2 EXIT STATUS TABLE .WORD 1 .ENDM ESTAT3: .REPT NTSK ;TYPE 3 EXIT STATUS TABLE .WORD 1 .ENDM ; ;SECOND WORD OF RAD50 TASK NAME TABLE ; N=0 TSK2: .REPT NTSK ;GENERATE RAD50 TASK NAME(2)TABLE TSKN \N N=N+1 .ENDR ; ;DPB STORAGE ; RDPB: QIO$ IO.RLB,L1,0,,,,<0,BUFSZ> XDPB: QIOW$ IO.WLB,L1,XEF,,,,<0,BUFSZ> TTDPB: QIO$ IO.WLB,L2,,,IOSB1,,<0,0,40> GDPB: QIO$ IO.GLI,L1,,,,, GERR: QIOW$ 0,L1,GEF,,,,<0,STACNT> MARK: MRKT$ 20,MRKTMG,2 ;EF=16.,DT=MRKTMG SECONDS TMO: MRKT$ WTEF,5,2 ;EF=WTEF,DT=FIVE SECONDS RDAT: RCVD$ ,RECBUF ;RECEIVE DATA BUFFER SDAT: SDAT$ 0,0 ;SEND TASK-TASK MESSAGE DPB RDAF: RDAF$ EFBUF ;READ ALL EVENT FLAGS SPWN: SPWN$ MCR...,,,,,,,0,0,0 ;SPAWN TASK DPB GTIM: GTIM$ ;GET SYSTEM DPB STIM: STIM$ ;SET SYSTEM TIME ; ;ERROR MESSAGE CONTROL BLOCKS ; MS1X: .WORD MS1,MS1L MS2X: .WORD MS2,MS2L MS3X: .WORD MS3,MS3L MS4X: .WORD MS4,MS4L MS5X: .WORD MS5,MS5L MS6X: .WORD MS6,MS6L ; MS1: .ASCII /LWT--PACKET FLUSHED/<15><12> LINBUF: .BLKB LINSZ*7+2*NLIN ;PACKET PRINT FORMAT BUFFER MS1L=.-MS1 MS2: .ASCII /LWT--ALL DLT TASKS BUSY/ MS2L=.-MS2 MS3: .ASCII /LWT--ALL RFA TASKS BUSY/ MS3L=.-MS3 MS4: .ASCII /LWT--ILLEGAL TYPE/ MS4L=.-MS4 MS5: .ASCII /LWT--ALL RECEIVE BUFFERS FULL/ MS5L=.-MS5 MS6: .ASCII /LWT--UNKNOWN CONNECT REQUEST/ MS6L=.-MS6 .EVEN .END START