.SBTTL TITLE PAGE .TITLE TASK TERMINATION NOTIFICATION .IDENT /V06/ ;**NEW** ; ;**-1 ; ; ; ; ; ; COPYRIGHT 1973,4,5, DIGITAL EQUIPMENT CORP., MAYNARD, MASSACHUSETTS 01754. ; ; ; THE MATERIAL INCLUDED IN THIS FUNCTIONAL SPECIFICATION, INCLUDING BUT ; NOT LIMITED TO, INSTRUCTION TIMES AND OPERATING SPEEDS IS FOR ; INFORMATION PURPOSES ONLY. ALL SUCH MATERIAL IS SUBJECT TO CHANGE ; WITHOUT NOTICE. CONSEQUENTLY DEC MAKES NO CLAIM AND SHALL NOT BE LIABLE ; FOR ITS ACCURACY. ; ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS SOFTWARE ; ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; ; ; UNLESS SPECIFIED OTHERWISE, THE TERMS "RSX" AND "RSX-11" IMPLY ; "RSX-11D". ; ; ; ; MODULE: TASK TERMINATION NOTIFICATION TASK ; ; VERSION: V06 ;**NEW** ; ;**-1 ; AUTHOR: H. KREJCI ; ; DATE: 12 OCT 73 ; ; MODIFICATIONS: ; ; NO. DATE PROGRAMMER PURPOSE ; --- ---- ---------- ------- ; ; 07 JUN 74 M.R. GARRY ; 001 01 JUL 75 ELLEN SIMICH ; 002 12 OCT 75 T.J. PORTER INSERT STARTING CR LF ; BEFORE "TASK XXXXXX" ; ; ; THIS MODULE CONTAINS: ; ; 1 -- A TASK TO OUTPUT TASK TERMINATION NOTIFICATION. .SBTTL TASK CODE ; .MACRO CALL ARG JSR PC,ARG .ENDM ; .MACRO RETURN RTS PC .ENDM ; PSEXP=177776 ; COLUN=1 ;001 TILUN=2 ;001 ; ; SCAN ATL FOR TASK(S) WITH A STATUS OF "SUSPENDED FOR TERMINATION NOTIFICATION" ; START: CALL DMPINI ;RBF ATLSCN: MOV PSEXP,-(SP) ;PUSH PRE-INHIBIT PS ONTO STACK (FOR ..ENB0) BIS #000140,PSEXP ;;INHIBIT TASK SWITCHING (RAISE PRI=3) ;; MOV #.ATLLH,R0 ;;USE R0 TO SCAN THE ATL 10$: ;; MOV @R0,R0 ;;ADVANCE R0 TO POINT TO NEXT ATL NODE CMP R0,#.ATLLH ;;END OF ATL? BNE 20$ ;; MOV #51.+400*1,-(SP) ;;YES END ATL SCAN, ALL TERMINATION EMT 377 ;;NOTICES HAVE BEEN MADE -- EXIT ;; 20$: CMPB A.TS(R0),#TS.STN ;;IS TASK SUPSENDED FOR TERMINTION NOTICE? BNE 10$ ;;NO -- CHECK NEXT ATL NODE CALL @#..ENB0 ;;YES -- ENABLE TASK SWITCHING, AND OUTPUT NOTIC ; ; TERMINATION INFORMATION IS CODED INTO 'A.FM+0' AS FOLLOWS: ; ; IF BIT-8 IS SET, THE LOW ORDER BYTE CONTAINS A TERMINATION MESSAGE CODE ; IF BIT-9 IS SET, AN I/O RUNDOWN MESSAGE IS TO BE OUTPUT ; MOV .CRTSK,R1 ;GET MY ATL NODE MOV A.TI(R0),A.TI(R1) ;MOVE HIS TI ADDRESS INTO MINE MOV #DPBATT,-(SP) ;ATTACH LUN EMT 377 ; MOV #6.,R1 ;CONVERT TASK NAME FROM RADIX-50 TO ASCII MOV A.TD(R0),R2 ;AND STORE IN OUTPUT TEXT STRING. ADD #S.TN,R2 MOV #TSKNAM,R3 CALL @#..RDTA ; MOV #TMPL1,R3 ;TYPE TASK NAME LINE MOV #TMPL2,R4 CALL TYPMES ; ; OUTPUT TERMINATION NOTICE PER LOW ORDER 'A.FM+0' IF BIT-8 IS SET ; BIT #000400,A.FM+0(R0) ;IS A TASK TERMINATION NOTICE REQUIRED? BEQ 60$ ;NO -- TYPE I/O RUNDOWN MESSAGE ;YES -- TYPE REASON FOR TERMINATION AND REGISTER ;CONTENTS WHEN APPROPRIATE. ; MOVB A.FM+0(R0),R1 ;SET R1 TO TERMINATION MESSAGE CODE (INDEX). CMP R1,#ENDMT BHI 30$ BIT #1,R1 BEQ 40$ 30$: MOV #26,R1 40$: MOV BEGMT+0(R1),R3 ;TYPE MESSAGE PER R1 MOV BEGMT+2(R1),R4 CALL TYPMES ; BIT #001000,A.FM+0(R0) ;IF TASK TERMINIATED WITH PENDING I/O REQUESTS, BEQ 50$ ;TYPE "AND WITH PENDING I/O" MOV #IOPM1,R3 MOV #IOPM2,R4 CALL TYPMES 50$: CMP R1,#TN.LRF ;NO REG OUTPUT IF LOAD REQ FAILURE BEQ 80$ CMP R1,#TN.RRF ;NO REG OUTPUT IF RE-LOAD REQ FAILURE BEQ 80$ CMP R1,#SC.PAR ;001 NO REG OUTPUT IF PARITY ERROR BEQ 55$ ; MOV #077406,-(SP) ;SETUP ASR3 TO ACCESS TASK HEADER MOV A.HA(R0),-(SP) CALL @#..SPD3 CMP (SP)+,(SP)+ ; MOV #60000+H.TPS,R5 ;SETUP R5 TO FETCH PS,PC,R0,R1,R2,R3,R4,& R5 ; MOV (R5)+,-(SP) ;PUSH PS ; MOV #"PC,TMPL2+2 ;OUTPUT PC MOV (R5)+,R3 CALL TYPREG ; MOV #"PS,TMPL2+2 ;OUTPUT PS MOV (SP)+,R3 ;(POP PS) CALL TYPREG ; MOV #"R0,TMPL2+2 ;OUTPUT R0 MOV (R5)+,R3 CALL TYPREG ; MOV #"R1,TMPL2+2 ;OUTPUT R1 MOV (R5)+,R3 CALL TYPREG ; MOV #"R2,TMPL2+2 ;OUTPUT R2 MOV (R5)+,R3 CALL TYPREG ; MOV #"R3,TMPL2+2 ;OUTPUT R3 MOV (R5)+,R3 CALL TYPREG ; MOV #"R4,TMPL2+2 ;OUTPUT R4 MOV (R5)+,R3 CALL TYPREG ; MOV #"R5,TMPL2+2 ;OUTPUT R5 MOV (R5)+,R3 CALL TYPREG ; MOV #"SP,TMPL2+2 ;OUTPUT SP MOV (R5)+,R3 CALL TYPREG CALL DMPCOR ;RBF ; BR 70$ ; 55$: MOV #REQMPE,-(SP) ;REQUEST MPE... EMT 377 MOVB #TS.PAR,A.TS(R0) ;SET IN SUSPENDED FOR PARITY ERROR STATE CLR A.FM+0(R0) ;CLEAR STATUS BR 85$ ;AND DETATCH ; ; ; TASK EXIT'ED WITH PENDING I/O (NO FAULT TERMINATION) ; 60$: MOV #IOPM2,R3 ;TYPE "VIA 'EXIT' WITH PENDING I/O" MOV #IOPM3,R4 CALL TYPMES 70$: MOVB A.IN(R0),R3 ;IF I/O RUNDOWN FAILURE, OUTPUT THE BEQ 80$ ;NUMBER OF PENDING I/O REQUESTS. MOV #"IO,TMPL2+2 CALL TYPREG 80$: ; ; CHANGE STATUS TO 'TS.IR4' & CLEAR 'A.FM+0' ; MOVB #TS.IR4,A.TS(R0) ;SET STATUS TO 'TS.IR4' CLR A.FM+0(R0) ;CLEAR 'A.FM+0' ; 85$: MOV #DPBDET,-(SP) ;DETACH LUN EMT 377 BCS 90$ MOV #DPBWFE,-(SP) EMT 377 90$: MOV #35.+400*1,-(SP) ;DECLARE A SIGNIFICANT EVENT EMT 377 ; ; TERMINATED TASK MAY NOW EXIT (IF AND WHEN ALL PENDING I/O IS RUNDOWN) ; JMP ATLSCN ;CHECK FOR ANOTHER TERMIANTION NOTICE REQUIRED ; ; TYPREG -- SUBROUTINE TO OUTPUT REGISTER CONTENTS IN R3 ; ; R1, R2, R3, & R4 ARE ALTERED ; .GLOBL TYPREG ;RBF TYPREG: MOV #TMPL2+5,R4 MOV #6.,R1 CLR R2 ASHC #+1,R2 BR 20$ ; 10$: CLR R2 ASHC #+3,R2 20$: ADD #60,R2 MOVB R2,(R4)+ SOB R1,10$ ; MOV #TMPL2,R3 MOV #TMPL3,R4 CALL TYPMES RETURN ; ; TYPMES -- SUBROUTINE TO TYPE MESSAGE PER R3 & R4 ; ; R3 -- ADDRESS OF FIRST BYTE OF MESSAGE ; R4 -- ADDRESS OF LAST BYTE PLUS ONE ; TYPMES: MOV R3,DPBWR1+14 MOV R4,DPBWR1+16 SUB R3,DPBWR1+16 MOV #DPBWR1,-(SP) EMT 377 CMP R1,#SC.PAR ;001 PARITY ERROR BNE 10$ ;001 DON'T PRINT ON CONSOLE MOV .PUDBA,R5 ;001 LOCATE CO PUD MOV .PUDEA,R4 1$: CMP R4,R5 ;001 END BEQ 2$ ;001 YES CMP U.DN(R5),#"CO ;001 CO PUD BEQ 3$ ;001 YES ADD #U.SZ,R5 ;001 NEXT BR 1$ 3$: CALL ..REDT ;001 FOLLOW REDIRECT CHAIN TO REAL TI MOV .CRTSK,R3 ;001 GET MY TI CMP R5,A.TI(R3) ;001 DON'T PRINT TWICE IF TI=CO BEQ 10$ ;001 YES 2$: MOV #COLUN,DPBWR1+4 ;001 SET LUN MOV #DPBWR1,-(SP) ;001 PRINT EMT 377 MOV #TILUN,DPBWR1+4 ;001 RESET LUN 10$: RETURN ; ; DIRECTIVE PARAMETER BLOCKS ; ; REQMPE: .BYTE 11.,7. ;REQUEST MPE... .RAD50 /MPE.../ .WORD 0,0,0,0 ; DPBATT: .BYTE 1.,6. ;ATTACH LUN .WORD 1400 .WORD TILUN ;001 .BYTE 0,0 .WORD 0,0 ; DPBWR1: .BYTE 3.,9. ;001 WRITE TO LUN .WORD 0400 .WORD TILUN .BYTE 32.,0 .WORD 0,0 .WORD 0 .WORD 0 .WORD 40 ; DPBDET: .BYTE 1.,6. ;DETACH FROM LUN .WORD 2000 .WORD TILUN ;001 .BYTE 32.,0 .WORD 0,0 ; DPBWFE: .BYTE 41.,2. ;WAITFOR EFN 32. .WORD 32. ; ; MESSAGE TABLES & TEXT ; BEGMT: .WORD MESS00 ;TERMINATION MESSAGE TABLE .WORD MESS02 .WORD MESS04 .WORD MESS06 .WORD MESS10 .WORD MESS12 .WORD MESS14 .WORD MESS16 .WORD MESS20 .WORD MESS22 .WORD MESS24 .WORD MESS26 .WORD MESS30 .WORD MESS32 .WORD MESS34 .WORD MESS36 .WORD MESS40 .WORD MESS42 .WORD MESS44 ;001 ENDMT=44 ;001 ; .NLIST BEX ; +++002 ; TMPL1: .ASCII <12><15>'TASK "' ; +++002 TSKNAM: .ASCII 'XXXXXX" TERMINATED' ; +++002 TMPL2: .ASCII " RR=XXXXXX" TMPL3: ; MESS00: .ASCII 'ODD ADDRESS OR OTHER TRAP FOUR' MESS02: .ASCII 'MEMORY PROTECT VIOLATION' MESS04: .ASCII 'T-BIT TRAP OR "BPT" EXECUTION' MESS06: .ASCII '"IOT" EXECUTION' MESS10: .ASCII '"RESERVED INST" EXECUTION' MESS12: .ASCII '"NON-RSX EMT" EXECUTION' MESS14: .ASCII '"TRAP" EXECUTION' MESS16: .ASCII '11/40 F.P. EXCEPTION' MESS20: .ASCII 'MEMORY PARITY ERROR' ;001 MESS22: .ASCII "F014" MESS24: .ASCII "F013" MESS26: .ASCII "F012" MESS30: .ASCII 'SST ABORT (BAD STACK)' MESS32: .ASCII 'AST ABORT (BAD STACK)' MESS34: .ASCII 'ABORTED VIA DIRECTIVE (OR MCR)' MESS36: .ASCII 'TIME LIMIT EXCEEDED' MESS40: .ASCII 'LOAD FAILURE (DSK READ ERR)' MESS42: .ASCII 'CHECKPOINT FAILURE (DSK WRITE ERR)' ;001 MESS44: ;001 ; IOPM1: .ASCII "AND WITH PENDING I/O REQUESTS" IOPM2: .ASCII "VIA 'EXIT' WITH PENDING I/O" IOPM3: .LIST BEX ; +++002 .EVEN ; .END START