.TITLE DRDSP .IDENT /10/ ; ; COPYRIGHT (C) 1974, 1978 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE FOR USE ONLY ON A ; SINGLE COMPUTER SYSTEM AND MAY BE COPIED ONLY WITH THE ; INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE, OR ; ANY OTHER COPIES THEREOF, MAY NOT BE PROVIDED OR OTHERWISE ; MADE AVAILABLE TO ANY OTHER PERSON EXCEPT FOR USE ON SUCH ; SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE TERMS. TITLE ; TO AND OWNERSHIP OF THE SOFTWARE SHALL AT ALL TIMES REMAIN ; IN DEC. ; ; THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT ; NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL ; EQUIPMENT CORPORATION. ; ; DEC ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ; ITS SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC. ; ; VERSION 10 ; ; D. N. CUTLER 12-AUG-73 ; ; PREVIOUSLY MODIFIED BY: ; ; D. N. CUTLER ; T. J. MILLER ; ; MODIFIED BY: ; ; T. J. MILLER 20-JUL-77 ; ; TM088 -- ADD CONNECT TO INTERRUPT TO DIRECTIVE DISPATCH ; TABLE. ; ; DIRECTIVE DISPATCHER ; ; MACRO LIBRARY CALLS ; .MCALL HDRDF$,HWDDF$,TCBDF$,WDBDF$ HDRDF$ ;DEFINE TASK HEADER OFFSETS HWDDF$ ;DEFINE HARDWARE REGISTERS TCBDF$ ;DEFINE TASK CONTROL BLOCK OFFSETS WDBDF$ ;DEFINE USER WINDOW DEF BLOCK OFFSETS ; ; MACRO TO DEFINE SUCCESSIVE DIRECTIVE MASK BITS ; .MACRO DEFINE SYM SYM=N N=N/2 .ENDM ; ; EQUATED SYMBOLS ; DSPNX=2 ;INITIAL DIRECTIVE MAPPING TABLE INDEX N=200 ;INITIAL MASK VALUE DEFINE ACHKDB ;ADDRESS CHECK PLAS DEFINITION BLOCK DEFINE CEFNCL ;CALL $CEFN (1=YES) DEFINE CEFNMT ;EFN MUST BE SPECIFIED (1=YES) DEFINE DFCTSK ;TASK NAME DEFAULTS TO CURRENT TASK DEFINE MUPCHK ;PERFORM MULTI-USER PROTECTION CHECK DEFINE SRSTCL ;CALL $SRSTD (1=YES) ; ; LOCAL MACROS ; ; DEFINE DIRECTIVE DISPATCH TABLE ENTRY ; ; DIR ADDR,SIZE,MASK ; ; WHERE: ; ; ADDR=ADDRESS OF THE DIRECTIVE EXECUTION ROUTINE OR '.FALSE.'. ; SIZE=SIZE OF THE DPB REQUIRED BY THE DIRECTIVE ROUTINE. ; MASK=CONTROL BITS TO BE USED BY THE DIRECTIVE DISPATCHER. ; .MACRO DIR ADDR,SIZE,MASK $$$=. .=DSPMP+OFFST OFFST=OFFST+1 .IF IDN ,<.FALSE.> .BYTE 0 .=$$$ .IFF .BYTE DSPNX DSPMK=0 .IF NB .IRP X, DSPMK=DSPMK!X .ENDM .ENDC DSPSZ=0 .IF NB SIZE DSPSZ=SIZE*2 .ENDC .=$$$ .WORD ADDR .BYTE DSPSZ,DSPMK DSPNX=DSPNX+4 .ENDC .ENDM ; ; LOCAL DATA-ADJACENCY ASSUMED ; USRPS: .BLKW 1 ;POINTER TO USER PS WORD BTRMV: .BLKW 1 ;BYTES TO REMOVE ON EXIT ; ; DISPATCH MAPPING TABLE ; DSPMP: .BLKB 64. ; ; TM088 .IF DF C$$INT ; TM088 ; TM088 .BLKB 2 ;ALLOCATE SPACE FOR CONNECT TO INTERRUPT; TM088 ; TM088 .ENDC ; TM088 ; TM088 ; TM088 ; ; DIRECTIVE DISPATCH TABLE ; DSPTBL: ;REF LABEL OFFST=0 DIR $DRQIO,12. ;001.-QUEUE I/O DIR $DRQIO,12. ;003.-QUEUE I/O AND WAIT DIR $DRGLI,3. ;005.-GET LUN INFORMATION DIR $DRASG,4. ;007.-ASSIGN LUN .IF DF A$$PRI DIR $DRATP,4., ;009.-ALTER TASK PRIORITY .IFF DIR .FALSE. ;009.-ALTER TASK PRIORITY .ENDC DIR $DRREQ,7.,SRSTCL ;011.-REQUEST TASK DIR .FALSE. ;013.-INVALID DIC DIR .FALSE. ;015.-INVALID DIC DIR $DRRUN,11.,SRSTCL ;017.-RUN TASK DIR .FALSE. ;019.-INVALID DIC .IF DF A$$TRP&P$$LAS&P$$SRF DIR $DRRRA,2. ;21.-SETUP FOR RECEIVE BY REFERENCE AST .IFF DIR .FALSE. ;021.-INVALID DIC .ENDC DIR $DRMKT,5.,CEFNCL ;023.-MARK TIME DIR $DRCSR,3., ;025.-CANCEL SCHEDULE REQUESTS DIR $DRCMT,1. ;027.-CANCEL MARK TIME REQUESTS DIR .FALSE. ;029.-INVALID DIC DIR $DRCEF,2., ;031.-CLEAR EVENT FLAG DIR $DRSEF,2., ;033.-SET EVENT FLAG DIR $DRDSE,1. ;035.-DECLARE SIGNIFICANT EVENT DIR .FALSE. ;037.-INVALID DIC DIR $DRRAF,2. ;039.-READ ALL EVENT FLAGS DIR $DRWFS,2., ;041.-WAITFOR SINGLE EVENT FLAG DIR $DRWFL,3. ;043.-WAITFOR LOGICAL 'OR' OF EVENT FLAGS DIR $DRSPN,1. ;045.-SUSPEND EXECUTION DIR $DRRES,3.,SRSTCL ;047.-RESUME TASK EXECUTION ; TM088 DIR $DRWSE,1. ;049.-WAITFOR SIGNIFICANT EVENT ;**-1 DIR $DREXT,1. ;051.-TASK EXIT DIR $DREIF,2., ;053.-EXIT IF .IF DF P$$LAS DIR $DRCRR,2.,ACHKDB ;055.-CREATE REGION DIR $DRATR,2.,ACHKDB ;057.-ATTACH REGION DIR $DRDTR,2.,ACHKDB ;059.-DETACH REGION .IFF DIR .FALSE. ;055.-INVALID DIC DIR .FALSE. ;057.-INVALID DIC DIR .FALSE. ;059.-INVALID DIC .ENDC DIR $DRGTP,2. ;061.-GET TIME PARAMETERS .IF DF G$$TTK DIR $DRGTK,2. ;063.-GET TASK PARAMETERS .IFF DIR .FALSE. ;063.-GET TASK PARAMETERS .ENDC .IF DF G$$TPP DIR $DRGPP,4. ;065.-GET PARTITION PARAMETERS .IFF DIR .FALSE. ;065.-GET PARTITION PARAMETERS .ENDC DIR .FALSE. ;067.-INVALID DIC .IF DF P$$LAS&P$$SRF DIR $DRSRF,5.,SRSTCL ;069.-SEND BY REFERENCE .IFF DIR .FALSE. ;069.-INVALID DIC .ENDC .IF DF R$$SND DIR $DRSND,5.,SRSTCL ;071.-SEND DATA TO TASK .IFF DIR .FALSE. ;071.-SEND DATA TO TASK .IFTF DIR .FALSE. ;073.-INVALID DIC .IFT DIR $DRREC,4. ;075.-RECEIVE DATA FROM TASK .IFF DIR .FALSE. ;075.-RECEIVE DATA FROM TASK .IFT DIR $DRREC,4. ;077.-RECEIVE DATA FROM TASK OR EXIT .IFF DIR .FALSE. ;077.-RECEIVE DATA FROM TASK OR EXIT .ENDC DIR $DRPCL,3. ;079.-PUT MCR LINE ;[RJDK001] .IF DF P$$LAS&P$$SRF DIR $DRRRF,2.,ACHKDB ;081.-RECEIVE BY REFERENCE .IFF DIR .FALSE. ;081.-INVALID DIC .ENDC DIR $DRABO,3., ;083.-ABORT TASK DIR .FALSE. ;085.-INVALID DIC DIR .FALSE. ;087.-INVALID DIC .IF DF D$$YNM&E$$XPR&M$$MGE DIR $DREXP,3. ;089.-EXTEND PARTITION .IFF DIR .FALSE. ;089.-INVALID DIC .ENDC DIR .FALSE. ;091.-INVALID DIC DIR .FALSE. ;093.-INVALID DIC .IF DF C$$CKP&D$$ISK DIR $DRDCP,1. ;095.-DISABLE CHECKPOINTING DIR $DRECP,1. ;097.-ENABLE CHECKPOINTING .IFF DIR .FALSE. ;095.-DISABLE CHECKPOINTING DIR .FALSE. ;097.-ENABLE CHECKPOINTING .ENDC .IF DF A$$TRP DIR $DRDAR,1. ;099.-DISABLE AST RECOGNITION DIR $DREAR,1. ;101.-ENABLE AST RECOGNITION .IFF DIR .FALSE. ;099.-DISABLE AST RECOGNITION DIR .FALSE. ;101.-ENABLE AST RECOGNITION .ENDC DIR $DRSDV,3. ;103.-SPECIFY ODT SST VECTOR DIR $DRSTV,3. ;105.-SPECIFY TASK SST VECTOR .IF DF A$$TRP&R$$SND DIR $DRRCV,2. ;107.-SETUP FOR RECEIVE AST .IFF DIR .FALSE. ;107.-SETUP FOR RECEIVE AST .ENDC .IF DF A$$TRP&P$$RFL DIR $DRPUT,2. ;109.-SETUP FOR POWER UP AST .IFF DIR .FALSE. ;109.-SETUP FOR POWER UP AST .ENDC .IF DF A$$TRP&F$$LPP DIR $DRFEX,2. ;111.-SETUP FOR FLOATING POINT AST .IFF DIR .FALSE. ;111.-SETUP FOR FLOATING POINT AST .ENDC .IF DF P$$LAS&P$$GMX DIR $DRGMX,2. ;113.-GET MAPPING CONTEXT .IFF DIR .FALSE. ;113.-INVALID DIC .ENDC .IF DF A$$TRP DIR $DRATX,1. ;115.-AST TRAP EXIT .IFF DIR .FALSE. ;115.-AST TRAP EXIT .ENDC .IF DF P$$LAS DIR $DRCRW,2.,ACHKDB ;117.-CREATE ADDRESS WINDOW DIR $DRELW,2.,ACHKDB ;119.-ELIMINATE ADDRESS WINDOW DIR $DRMAP,2.,ACHKDB ;121.-MAP ADDRESS WINDOW DIR $DRUNM,2.,ACHKDB ;123.-UNMAP ADDRESS WINDOW .IFF DIR .FALSE. ;117.-INVALID DIC DIR .FALSE. ;119.-INVALID DIC DIR .FALSE. ;121.-INVALID DIC DIR .FALSE. ;123.-INVALID DIC .ENDC .IF DF G$$TSS DIR $DRGSS,1. ;125.-GET SENSE SWITCHES .IFF DIR .FALSE. ;125.-GET SENSE SWITCHES .ENDC .IF DF M$$CRX DIR $DRGCL,41. ;127.-GET MCR COMMAND LINE .IFF DIR .FALSE. ;127.-GET MCR COMMAND LINE .ENDC .IF DF C$$INT ; TM088 ; TM088 DIR $DRCIN,7. ;129.-CONNECT TO INTERRUPT ; TM088 ; TM088 .ENDC ; TM088 ; TM088 ; TM088 ;+ ; **-$TRTRP-TRAP TRAP ; ; THIS ROUTINE IS TRAPPED TO WHEN A TRAP INSTRUCTION IS EXECUTED. IF THE ; STACK DEPTH IS ZERO, THEN A DIRECTIVE STATUS IS TO BE RETURNED. ELSE ; CONTROL IS TRANSFERED TO THE EMT/TRAP SST HANDLING ROUTINE. ; ; INPUTS: ; ; 2(SP)=PS WORD PUSHED BY TRAP INSTRUCTION. ; 0(SP)=PC WORD PUSHED BY TRAP INSTRUCTION. ; ; OUTPUTS: ; ; IF THE STACK DEPTH IS ZERO, THEN A DIRECTIVE STATUS IS RETURNED. ; ELSE CONTROL IS TRANSFERED TO THE EMT/TRAP SST HANDLING ROUTINE. ;- .ENABL LSB $TRTRP::TST $STKDP ;;;STACK DEPTH ZERO? BNE $EMTRP ;;;IF NE NO MTPS #0 ;;;ALLOW INTERRUPTS MOV (SP),R0 ;GET ADDRESS PLUS 2 OF TRAP INSTRUCTION .IF DF M$$MGE BIS #PMODE,PS ;SET PREVIOUS MODE TO USER MOV #$STACK-22,SP ;RELOAD EXEC STACK POINTER .IFF MOV #$STACK-12,SP ;RELOAD EXEC STACK POINTER .ENDC MOVB -2(R0),R0 ;PICKUP DIRECTIVE STATUS MOV R0,-(SP) ;SAVE DIRECTIVE STATUS BPL 60$ ;IF PL OKAY AS IS INC @USRPS ;SET CARRY IN USER PS WORD BR 60$ ; ;+ ; **-$EMTRP-EMT TRAP ; ; THIS ROUTINE IS TRAPPED TO WHEN AN EMT INSTRUCTION IS EXECUTED. IF THE ; STACK DEPTH IS NOT +1, THEN THE SYSTEM IS CRASHED. ELSE A TEST IS ; MADE TO SEE IF THE EMT INSTRUCTION HAD A CODE OF 377. IF NOT, THEN ; CONTROL IS TRANSFERED TO THE EMT/TRAP SST HANDLING ROUTINE. ELSE THE ; APPROPRIATE DIRECTIVE IS EXECUTED. ; ; INPUTS: ; ; 2(SP)=PS WORD PUSHED BY EMT INSTRUCTION. ; 0(SP)=PC WORD PUSHED BY EMT INSTRUCTION. ; ; OUTPUTS: ; ; IF THE STACK DEPTH IS NOT +1, THEN THE SYSTEM IS CRASHED. ELSE ; CONTROL IS GIVEN TO THE EMT/TRAP SST ROUTINE OR A DIRECTIVE ROUTINE ; DEPENDENT ON WHETHER THE EMT HAD A CODE OF 377. ;- $EMTRP::DIRSV$ ;;;SAVE REGISTERS AND SET PRIORITY TST $STKDP ;WERE WE AT STACK DEPTH +1? BNE 70$ ;IF NE NO-CRASH SYSTEM MOV @$HEADR,R3 ;GET SAVED STACK POINTER CMP (R3)+,(R3)+ ;POINT TO USER PC WORD MOV (R3)+,R5 ;GET ADDRESS OF EMT PLUS 2 .IF DF M$$MGE MFPI -(R5) ;GET DIRECTIVE WORD CMP #104377,(SP) ;DIRECTIVE EMT? BNE 80$ ;IF NE NO MOV #1,(SP) ;SET SUCCESSFUL DIRECTIVE STATUS .IFF CMP #104377,-(R5) ;DIRECTIVE EMT? BNE 80$ ;IF NE NO MOV #1,-(SP) ;SET SUCCESSFUL DIRECTIVE STATUS .IFTF MOV #USRPS,R5 ;POINT TO LOCAL DATA MOV R3,(R5)+ ;SAVE ADDRESS OF USER PS BIC (SP),(R3)+ ;CLEAR CARRY IN USER PS WORD CLR (R5) ;INDICATE NO BYTES .IFT MFPI SP ;GET USER STACK POINTER MOV (SP)+,R3 ; $DRLM1::MFPI (R3) ;GET FIRST WORD ON USER STACK BIT #1,(SP) ;DPB ON STACK? BNE $DRLM2 ;IF NE YES MOV #2,(R5) ;INDICATE DPB POINTED TO BY STACK MOV (SP),R3 ;SET ADDRESS OF DPB MFPI @(SP)+ ;GET FIRST WORD OF DPB $DRLM2::MOV (SP)+,R1 ;PICK UP FIRST DPB WORD ; TM088 ; TM088 .IF DF C$$INT ; TM088 ; TM088 CLR R0 ;EXTRACT DIC CODE ; TM088 BISB R1,R0 ; ; TM088 ; TM088 .IFF ; TM088 ; TM088 MOVB R1,R0 ;COPY DIC CODE ; TM088 .ENDC ; TM088 ; TM088 ; TM088 CLRB R1 ;CLEAR DIC BYTE SWAB R1 ;SWAP DPB SIZE TO LOW BYTE .IFF BIT (SP),(R3) ;DPB ON STACK? BNE 10$ ;IF NE YES MOV (R3),R3 ;GET ADDRESS OF DPB MOV #2,(R5) ;INDICATE DPB POINTED TO BY STACK .IF DF A$$CHK CALL $ACHK2 ;ADDRESS CHECK FIRST DPB WORD .ENDC .IF DF C$$INT ; TM088 ; TM088 10$: CLR R0 ;EXTRACT DIC CODE ; TM088 BISB (R3),R0 ; ; TM088 ; TM088 .IFF ; TM088 ; TM088 10$: MOVB (R3),R0 ;PICK UP DIC CODE ; TM088 .ENDC ; TM088 ; TM088 ; TM088 CLR R1 ;PICK UP DPB SIZE BISB 1(R3),R1 ; .ENDC ASL R1 ;CONVERT TO BYTES TO REMOVE AT EXIT MOV R1,R4 ;COPY SIZE CLR -(SP) ;ASSUME ILLEGAL DIC OR DPB SIZE ASR R0 ;DIVIDE CODE BY 2 BCC 35$ ;IF CC ILLEGAL DIC CODE ; TM088 ; TM088 .IF DF C$$INT ; TM088 ; TM088 CMP R0,#129./2 ;LEGAL DIC CODE? ; TM088 BHI 35$ ;IF HI NO ; TM088 ; TM088 .IFF ; TM088 ; TM088 BMI 35$ ;IF MI CODE > 63. ; TM088 .ENDC ; TM088 ; TM088 ; TM088 CLR R2 ;MAP TO DIRECTIVE DISPATCH TABLE BISB DSPMP(R0),R2 ; BEQ 35$ ;IF EQ ILLEGAL DIRECTIVE ADD #DSPTBL-2,R2 ;POINT TO PROPER TABLE ENTRY CMPB R1,2(R2) ;DPB SIZE MATCH? BNE 35$ ;IF NE NO MOV (R2)+,(SP) ;GET ADDRESS OF DIRECTIVE ROUTINE MOV (R2),R4 ;PICK UP DIRECTIVE SIZE AND MASK BYTE .IF DF P$$LAS&M$$MGE BPL 35$ ;IF PL NOT A PLAS DIRECTIVE $DPLM1::MFPI 2(R3) ;PICK UP POINTER TO DEFINITION BLOCK $DPLM2::MOV (SP)+,R3 ; MOV #8.*2,R1 ;PICK UP SIZE OF DEFINITION BLOCK .ENDC 35$: ;REFERENCE LABEL .IF DF A$$CHK!M$$MGE CALL $ACHKP ;ADDRESS CHECK AND MAP DEFINITION BLOCK .ENDC TST (R3)+ ;SKIP OVER FIRST DPB WORD TST (R5) ;DPB ON STACK? BNE 36$ ;IF NE NO MOVB R4,(R5) ;SET NUMBER OF BYTES TO REMOVE AT EXIT 36$: CLRB R4 ;CLEAR OUT SIZE BYTE TST (SP) ;LEGAL DIC AND DPB SIZE? BEQ 90$ ;IF EQ NO MOV $TKTCB,R5 ;PICK UP CURRENT TASK TCB ASL R4 ;CALL $CEFN OR PLAS DIRECTIVE? .IF DF P$$LAS BCC 37$ ;IF CC NOT A PLAS DIRECTIVE TST -(R3) ;POINT BACK TO FIRST WORD OF BLOCK BIC #WS.CRW!WS.UNM!WS.ELW!WS.RRF,W.NSTS(R3) ;INIT OUTPUTS 37$: ;REFERENCE LABEL .ENDC BPL 40$ ;IF PL NO CALL $CEFN ;CONVERT EVENT FLAG NUMBER BCC 50$ ;IF CC EVENT FLAG SPECIFIED 40$: ASL R4 ;EVENT FLAG REQUIRED? BEQ 50$ ;IF EQ NO BMI 100$ ;IF MI EVENT FLAG WAS REQUIRED .IF DF A$$PRI!M$$MUP ASL R4 ;TASK NAME DEFAULT TO CURRENT TASK? BPL 45$ ;IF PL NO MOV R5,R0 ;PICK UP CURRENT TASK TCB TST (R3) ;TASK NAME SPECIFIED? BEQ 46$ ;IF EQ NO .ENDC 45$: CALL $SRSTD ;SEARCH STD FOR TASK NAME BCS 110$ ;IF CS NAME NOT FOUND 46$: CMP (R3)+,(R3)+ ;ADVANCE PAST TASK NAME .IF DF M$$MUP ASL R4 ;PERFORM MULTI-USER PROTECTION CHECK? BPL 47$ ;IF PL NO BIT #T3.PRV,T.ST3(R5) ;ISSUING TASK PRIVILEGED? BNE 47$ ;IF NE YES BIT #T3.SLV,T.ST3(R0) ;TARGET TASK A SLAVE TASK? BNE 120$ ;IF NE YES, DON'T ALLOW CMP T.UCB(R5),T.UCB(R0) ;CURRENT AND TARGET TASK UCBS MATCH? BNE 120$ ;IF NE NO .ENDC 47$: MOV R0,R1 ;COPY TCB ADDRESS ADD #T.STAT,R1 ;POINT TO TASK STATUS WORD 50$: MOV R5,R2 ;SET POINTER TO SECOND TASK STATUS WORD ADD #T.ST2,R2 ; MOV $HEADR,R4 ;POINT TO CURRENT TASK HEADER ; ; CALL DIRECTIVE ROUTINE WITH THE FOLLOWING ARGUMENTS: ; ; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. ; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ; R3=ADDRESS OF THE NEXT WORD IN THE DIRECTIVE DPB. ; R2=ADDRESS OF THE SECOND TASK STATUS WORD OF THE CURRENT TASK. ; R1=DEPENDENT ON DIRECTIVE. ; R0=DEPENDENT ON DIRECTIVE. ; CALL @(SP)+ ;CALL DIRECTIVE ROUTINE 60$: ;REF LABEL .IF DF M$$MGE MTPI @#H.DSW ;SET DIRECTIVE STATUS WORD MFPI SP ;GET USER STACK POINTER ADD BTRMV,(SP) ;REMOVE BYTES FROM USER STACK MTPI SP ;RESTORE USER STACK POINTER .IFF MOV (SP)+,@.DSW ;SET DIRECTIVE STATUS WORD MOV $HEADR,R0 ;GET ADDRESS OF TASK HEADER BEQ 65$ ;IF EQ TASK TERMINATED MOV (R0),R0 ;GET TASK STACK POINTER ADD #8.,R0 ;POINT TO FIRST STACK WORD MOV R0,R1 ;COPY ADDRESS ADD BTRMV,R1 ;POINT TO NEW TOP OF USER STACK MOV -(R0),-(R1) ;MOVE RETURN PS WORD MOV -(R0),-(R1) ;MOVE RETURN PC WORD MOV -(R0),-(R1) ;MOVE SAVED R5 MOV -(R0),-(R1) ;MOVE SAVED R4 MOV R1,@$HEADR ;SET NEW STACK POINTER .ENDC .IF NDF A$$PRI $DRATP:: ;NOP ALTER PRIORITY .ENDC 65$: RETURN ;EXIT FROM TRAP ; ; SYSTEM CRASH - EMT/TRAP EXECUTED AT STACK DEPTH OTHER THAN +1 ; 70$: CRASH ; ; EMT/TRAP SST ROUTINE TRANSFER ; 80$: ;REF LABEL .IF DF M$$MGE MOV $HEADR,R5 ;POINT TO CURRENT TASK HEADER MOV H.WND(R5),R5 ;POINT TO NUMBER OF WINDOW BLOCKS TST W.BLVR+2(R5) ;CURRENT TASK MAPPED TO EXEC? BEQ 85$ ;IF EQ NO CMP (SP),#104376 ;IS THIS A CALL TO $SWSTK? .IFF CMP (R5),#104376 ;IS THIS A CALL TO $SWSTK? .ENDC BNE 85$ ;IF NE NO JMP $SWSTK ;PROCESS CALL TO $SWSTK 85$: JMP $EMSST ;PROCESS SST FAULT ; ; ILLEGAL DIRECTIVE ; 90$: DRSTS D.RS99 ;SET DIRECTIVE STATUS ; ; REQUIRED EVENT FLAG NUMBER NOT SPECIFIED ; 100$: DRSTS D.RS97 ;SET DIRECTIVE STATUS ; ; SPECIFIED TASK NAME NOT FOUND IN TASK DIRECTORY ; 110$: DRSTS D.RS2 ;SET DIRECTIVE STATUS ; ; PRIVILEGE VIOLATION ; .IF DF M$$MUP 120$: DRSTS D.RS16 ;SET DIRECTIVE STATUS .ENDC .DSABL LSB .END