.MCALL .MODULE .MODULE VTBASE,VERSION=02,COMMENT= ; Copyright (c) 1998 by Mentec, Inc., Nashua, NH. ; All rights reserved ; ; 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 Mentec, Inc. ; ; The information in this document is subject to change without ; notice and should not be construed as a commitment by Digital ; Equipment Corporation, or Mentec, Inc. ; ; Digital and Mentec assume no responsibility for the use or ; reliability of its software on equipment which is not supplied ; by Digital or Mentec, and listed in the Software Product ; Description. .SBTTL DEFINITIONS AND CONDITIONS ; THE DISPLAY FILE HANDLER IS CONDITIONALIZED SO THAT IT ; MAY BE EASILY ADAPTED TO A VARIETY OF APPLICATIONS. IF NO ; CONDITIONS ARE SPECIFIED, THE HANDLER WILL HAVE THESE CHARACTERISTICS: ; - DISPLAY STOP AND LIGHT PEN INTERRUPT HANDLERS ; - SUBPICTURE STACK DEPTH OF 10 ; - NAME REGISTER STACK DEPTH OF 10 ; - MAXIMUM OF 2 USER MAIN DISPLAY FILES ; - RT11 SCROLLER LINK-UP CAPABILITY ; - TRACKING OBJECT ; - BASIC/GT-FORTRAN/GT FILE COMPATIBILITY ; - SUBROUTINE CALL SEQUENCE WILL BE: ; DJSR ; RETURN ADDR. ; SUBR. ADDR. ; TAG ; ; TO ALTER THE HANDLER DEFAULT STRUCTURE: ; ; DEFINE: RESULT: ; ; NOLINK CREATES STAND ALONE SYSTEM W/O SCROLL ; LINK. CALL .SCROL IS UNDEFINED. ; ; NOTRAK NO TRACK OBJECT. IMPLIED WHEN NOTAG OR ; NOLPEN ARE DEFINED. ; ; NOTAG NO BASIC/GT TAG STRUCTURE. CALLS .BLANK, ; .RESTR,.TRACK ARE UNDEFINED. CALL SEQ. IS: ; DJSR ; ADDR. OF SUBR. ; ; NOLPEN NO LIGHT PEN SUPPORT, .LPEN UNDEFINED ; ; NOSTAT NO STATUS DATA SUPPORT, .STAT UNDEFINED. ; ; NOUSER A SINGLE USER DISPLAY FILE MAY BE INSERTED AT A TIME. ; ; NONAME NO NAME REGISTER STACK ; ; NORT11 RT11 MONITOR DEPENDENCIES ARE REMOVED. ; NOLINK IS IMPLIED AND .SCROL IS UNDEFINED. ; TO ALTER HANDLER DEFAULT PARAMETERS: ; ; DEFINE: DEFAULT(OCTAL): MEANING: ; ; SCRPOS 1750 SCROLL TOP Y POSITION ; ; STKSIZ 12 SUBPICTURE STACK DEPTH ; ; USERNM 2 MAX. # USER MAIN FILES THAT CAN BE CALLED BY HANDLR ; ; THE FOLLOWING ARE DISPLACEMENTS OF PARAMETERS WITHIN THE ; SCROLL LOGIC LOCATED ABOVE THE RMON FROM THE BEGINNING OF ; THE SCROLL LOGIC. THEY MUST BE REDEFINED IF THEIR POSITION CHANGES. ; ; TAG: DEFAULT USE ; ; SCLINK 6 SCROLL LINK SEGMENT ; ; SCMAX 4 MAX. LINE COUNT ; ; DISP 300 DISPL. FROM RMON (LOC. 54) TO CONFIG WD. ; ; THE VT11 HAS FLOATING VECTORS. IF THE VT11 IS INSTALLED AT A VECTOR OR ; DEVICE ADDRESS OTHER THAN DEFAULT, THESE PARAMETERS SHOULD BE REDEFINED: ; ; DEFINE: DEFAULT: MEANING: ; ; FVEC 320 DISPLAY STOP INT. TRAP ADDR. ; ; DPC 172000 FIRST DEVICE ADDR. (DISPLAY PROGRAM COUNTER). .SBTTL GLOBALS AND ASSIGNMENTS .ENABL GBL PR4=200 ;PRIORITY 4 DJSR=173400 ;DISPLAY SUBROUTINE CALL DRET=173400 ;DISPLAY SUBROUTINE RETURN DSTAT=173420 ;DISPLAY STATUS REQUEST DHALT=173500 ;DISPLAY HALT AND RETURN STATUS DNAME=173520 ;SET NAME REGISTER DNOP=164000 ;DISPLAY NOP DJMP=160000 CHAR=100000 ;CHARACTER MODE INT4=3000 ;INTENSITY 4 INT5=3200 ;5 INT6=3400 ;6 DSR=2 ;DISPL TO DSR XSR=4 ;DISPL. TO XSR YSR=6 ;DISPL. TO YSR .IIF NDF USERNM,USERNM=2 ;NUMBER OF USER CALLS PERMITTED .IIF NDF FVEC,FVEC=320 ;VT11 FLOATING VECTOR .IIF NDF DPC,DPC=172000 ;VT11 DEV. ADDR. .IIF NDF STKSIZ,STKSIZ==12 ;DEPTH OF SUBPIC STACK .IIF NDF SCRPOS,SCRPOS==1750 ;SCROLL TOP POSITION .IIF NDF SCTC,SCTC=12 ;DISPL TO ADDR OF CTRL/C ROUTINE $FVEC==FVEC .PSECT $GTB .IIF DF NORT11, NOLINK=1 .IIF DF NOUSER, USERNM=1 ;SINGLE USER FILE .IF DF NOTAG!NOLPEN NOTRAK=1 .ENDC NO$X=0 .IF DF NOLPEN .IIF DF NOSTAT, NO$X=1 .ENDC .SBTTL DISPLAY STOP INTERRUPT HANDLER ; THE DISPLAY STOP INTERRUPT IS USED TO IMPLEMENT SEVERAL ; FEATURES OF THE DEVICE SUPPORT PACKAGE--SUBROUTINE ; CALLS, SUBROUTINE RETURN, SUBPICTURE TAGGING, EXTERNAL STOPS, ; AND NAME REGISTER TAGGING. THE WORD FOLLOWING THE DSTOP IS ; USED AS AN ARGUMENT: ; 0 SUBROUTINE RETURN ; 1-77777 NAME REGISTER TAG ; 1000 UP SUBROUTINE CALL ; IF RT11 VERSION 2 IS THE MONITOR IN USE, ALL INTERRUPT ; HANDLERS MUST MAKE A CALL TO A SETUP SERVICE IN RMON. ; THIS SERVICE RAISES THE PRIORITY OF THIS ROUTINE TO THE ; REQUESTED LEVEL AND SAVES R4 AND R5 ON THE STACK. RETURN ; IS VIA A RTS PC RATHER THAN A RTI. $DSINT:: .IF DF NORT11 MOV R4,-(SP) ;SAVE REGISTERS MOV R5,-(SP) .IFF MOV @#54,-(SP) ;PUSH RMON ADDR ON STK JSR R5,@(SP)+ ;CALL RT11 INT SETUP .WORD 140 ;GO TO SYSTEM STATE AT PR4 .ENDC TST (PC)+ ;STOP FLAG SET? $STOPF::.WORD 0 ;STOP FLAG BEQ 1$ ;NO, GO ON CLR $STOPF ;YES, EXIT WITH DISPLAY STOPPED BR EXIT 1$: MOV @$DPC,R4 ;GET THE DISPLAY PC .IF NDF NOSTAT CMP #DSTAT,-2(R4) ;WHICH STOP DID IT? BHI DSTOPC ;SUBROUTINE SERVICE BEQ DSTATS ;STATUS REQUEST CMP #DHALT,-2(R4) ;NONE OF ABOVE, WAS IT BEQ DSTOPM ;DISPLAY HALT REQUEST? .IFF CMP #DNAME,-2(R4) ;IS IT A DNAME? BNE DSTOPC ;NO,ASSUME SUBR CALL .ENDC ; ASSUME NAME REGISTER SERVICE REQUEST MOV (R4)+,(PC)+ ;SAVE ARGUMENT IN NAME REG. $NR:: .WORD 0 ;NAME REGISTER MOV R4,@$DPC ;RESUME DISPLAY BR EXIT ; THE DJSR CODE IS EITHER A SUBROUTINE CALL OR A RETURN, ; DEPENDING ON THE ARGUMENT OF THE CALL .ENABL LSB DSTOPC: MOV (PC)+,R5 ;R5 -> TAG STACK $TACKP::.WORD $TACKE ;SUBPICTURE STACK POINTER .IF NDF NOTAG TST (R4) ;ARG. ZERO? .IFF TST (R4)+ .ENDC BNE 2$ ;NO, NEW SUBR CALL ; YES, EITHER A SUBROUTINE RETURN OR THE BOTTOM OF ROOT FILE CMP #$TACKE,R5 ;STACK EMPTY? BNE 1$ ;NO, USER RETURN MOV #$DFILE,@$DPC ;RESUME THE DISPLAY BR EXIT ;AT TOP OF ROOT FILE 1$: MOV (R5)+,R4 ;ADDR. OF RETURN ADDR. .IF NDF NOTAG MOV (R4),@$DPC ;START THE DPU .IFF MOV R4,@$DPC .ENDC MOV R5,$TACKP ;SAVE TAG STACK PTR .IF NDF NONAME MOV (PC)+,R5 ;R5 -> NAME STACK $TACKN::.WORD $TAKNE ;NAME REG. STACK POINTER MOV (R5)+,$NR ;RESTORE NR VALUE MOV R5,$TACKN ;SAVE NR STACK .ENDC BR EXIT 2$: CMP #STACK,R5 ;STACK OVERFLOW? BHIS 3$ ;YES! MOV R4,-(R5) ;STACK ADDR OF RET ADD(DSTOP+2) MOV R5,$TACKP ;SAVE TAG STK PTR .IF NDF NONAME MOV $TACKN,R5 ;R5 -> N STACK MOV $NR,-(R5) ;AND SAVE NR MOV R5,$TACKN ;SAVE N STK PTR .ENDC 3$: .DSABL LSB .IF NDF NOTAG MOV 2(R4),@$DPC .IFF MOV -2(R4),@$DPC .ENDC BR EXIT .IF NDF NOSTAT DSTOPM: INC $STOPF ;SET STOP FLAG FOR LATER DSTATS: TST (PC)+ ;BUFFER POINTER SET UP? $TATBF::.WORD 0 ;ADDR. OF USER STATUS BUFR BEQ REXIT ;NO, JUST EXIT MOV #DNOP,-2(R4) ;DNOP THE REQUEST MOV @$TACKP,R4 ;GET CURRENT SUBPIC. MOV 4(R4),R4 ;PUT ITS TAG IN R4 MOV $TATBF,R5 ;POINT TO USER STATUS BUFR JSR PC,$XSTAT ;TRANSFER DATA .ENDC REXIT: INC @(PC)+ ;RESUME THE DISPLAY $DPC:: .WORD DPC ;POINTER TO DISPLAY PC EXIT: .IF DF NORT11 MOV (SP)+,R5 MOV (SP)+,R4 RTI .IFF RTS PC .ENDC .IF NDF NOLINK $LINKF::.WORD 0 ;LINK FLAG(=0 NO LINK) $LCDIS::.WORD -1 ;LINE COUNT DISPLAC. FROM 54 $LCNT:: .WORD 0 ;RMON LINE CNT SAVED BY LNKRT .ENDC $DSVEC::.WORD FVEC ;POINTER TO GT40/44 INT VECTOR STACK: .BLKW STKSIZ ;SUBPICTURE STACK $TACKE==. .IF NDF NONAME .BLKW STKSIZ ;NAME REGISTER STACK $TAKNE==. .ENDC .SBTTL DISPLAY FILE FOR VT11 DRIVER ; ROOT DISPLAY FILE FOR THE VT11 SUPPORT PACKAGE. ; THE DEVICE DRIVER PORTION OF THE VT11 SUPPORT PACKAGE ; MAINTAINS CONTROL OVER THE VT11 BY USING ITS OWN ; DISPLAY FILE AS THE ROOT FILE. ALL USER FILES ARE CALLED ; AS SUBPICTURES TO THE ROOT FILE. THIS FILE ALSO CONTAINS ; THE TRACKING OBJECT AND THE LINK TO THE SCROLLER, IF THERE IS ONE. ; MACRO TO GENERATE CALLS TO A NULL USER DISPLAY FILE .MACRO PCALL .IF NDF NOTAG DJMP .+4 .IFF DJSR .ENDC $NULL .ENDM ; DISPLAY FILE STARTS WITH LINK TO SCROLLER. THE ABSOLUTE POINT ; OVERIDES THE START POSITION IN THE SCROLLER. IT IS SET ; INITIALLY TO THE TOP OF THE SCREEN. THE LINK TO THE SCROLLER ; IS NOT MADE UNTIL A CALL TO SCROLL LINK IS MADE. $DFILE::.WORD 110000 ;LONGV TO SLOW 'ER DOWN FOR F/B .WORD 1777,0 .WORD 21777,0 .IF NDF NOLINK 117124 ;APNT!INT4!TYPE0!LPOFF 0 ;X POS. -- START OF SCROLL $YS:: .WORD SCRPOS ;Y POS. $BLANK::CHAR!INT5 ;USED TO BLANK TEXT SCROLL DJMP ;LINK TO SCROLL, BUT $LINK:: .WORD .+2 ;NOT INITIALLY DJMP ;BY-PASS ALL USER CALLS $BYPAS::$CTRAK ;FOR SIMULATED EXTERN. STOP .ENDC ; FILE NEXT CONTAINS A CALL TO THE TRACK OBJECT, WHICH ; IS INITIALLY BYPASSED UNTIL A CALL TO TRACK. .IF NDF NOTRAK $CTRAK::DJMP ;REPLACE WITH DJSR .+6 ;TO CALL TRACK OBJECT. TRACK ;ADDRESS OF TRACK SUBP. -1 ;SPECIAL SUBP. TAG FOR TRACK .IFF $CTRAK:: .ENDC ; AFTER THE CALL TO THE TRACK OBJECT, ISSUE SOME INSTRUCTIONS ; TO NORMALIZE THE DISPLAY. .WORD 117124 ;APNT!INT4!TYPE0!LPOFF .WORD 0,0 ;(X,Y)=(0,0) $LSRA:: .WORD 170240 ;LSR A:LP INTENSIFY!NORMAL FONT!NOSYNC .WORD 174101 ;LSRB: GRAPH INCR = 1 $CUSER:: .REPT USERNM PCALL .ENDR $NULL:: DRET ;END OF ROOT FILE .WORD 0 ; THIS IS THE TRACK OBJECT SUBPICTURE CALLED FROM THE ROOT FILE. .IF NDF NOTRAK TRACK: .WORD 170200 ;LSR A .WORD 117524 ;APNT!INT6!LINE0 $XT:: .WORD 0 ;X POS. OF OBJECT $YT:: .WORD 0 ;Y POS. .WORD 104100 ;SHORTVEC!LPOFF .WORD 57600 .WORD 37677 .WORD 40177 .WORD 40177 .WORD 37677 .WORD 57600 .WORD 17600 ; TURN ON LP INTERRUPTS FOR REST OF TRACK FIGURE .WORD 104140 ;LPON .WORD 77677 .WORD 77777 .WORD 57777 .WORD 57677 .WORD 65600 .WORD 72050 .WORD 72150 .WORD 52150 .WORD 52050 .WORD 72050 DRET .WORD 0 .ENDC .IF NDF NOLPEN .SBTTL LIGHT PEN INTERRUPT HANDLER ; THIS ROUTINE SERVICES THE LIGHT PEN INTERRUPTS FROM THE VT11. ; IF THE HIT WAS ON THE TRACKING OBJECT, THE ROUTINE MOVES THE ; OBJECT TO THE NEW POSITION AFTER SMOOTHING THE DATA AND ; RETURNING IT TO THE USER AREA(UNSCALED). IF THE HIT WAS ON A ; SUBPICTURE THE HANDLER RETURNS STATUS DATA TO ABUFFER IN THE ; USER AREA WHOSE ADDRESS WAS PREVIOUSLY SET UP BY A CALL TO THE ; .LPEN MACRO. IT FIRST CHECKS THE FLAG TO SEE IF DATA PREVIOUSLY ; HAS BEEN PROCESSED (I.E. BUFFER FLAG IS CLEAR). THEN IT ; TRANSFERS THE DATA AND SETS THE FLAG. .ENABL LSB $LPINT:: .IF DF NORT11 MOV R4,-(SP) MOV R5,-(SP) .IFF MOV @#54,-(SP) ;PUSH RMON ADDR ON STK JSR R5,@(SP)+ ;CALL RT11 INT SERVICE .WORD 140 ;LEVEL 4 .ENDC MOV @$TACKP,R5 ;POINT TO CURRENT SUBP. MOV 4(R5),R4 ;PUT TAG IN R4. .IF NDF NOTRAK CMP #-1,R4 ;IS IT -1? BEQ LPTRAK ;TAG= -1 IS TRACK OBJECT .ENDC MOV (PC)+,R5 ;GET USER BUFR ADDR. $LPBUF::.WORD 0 ;ADDR. OF USER STATUS BUFFER BEQ REXIT ;NONE IF ZERO JSR PC,$XSTAT ;TRANSFER STATUS TO USER .IF NDF NONAME MOV (PC)+,R5 ;R5 -> USER NAME BUFFER $NRBUF::.WORD 0 ;ADDR OF USER NAME STACK BUFFER BEQ REXIT ;EXIT IF NONE JSR PC,$NRXFR ;GO TRANSFER DATA .ENDC 1$: BR REXIT .IF NDF NOTRAK LPTRAK: MOV $DPC,R5 ;POINT TO DISPLAY PC BIT #40,DSR(R5) ;EDGE VIOLATION? BNE REXIT ;YES,JUST EXIT MOV XSR(R5),R4 ;GET X STATUS REG. AND BIC #176000,R4 ;MASK OFF X POSITION. SUB $XT,R4 ;XNEW-XOLD ASR R4 ;DIV. BY 2 ASR R4 ;DIV. BY 2 ADD R4,$XT ;X=OLD+(NEW-OLD)/4 MOV $XT,@$XSTOR ;PASS TO USER LPYTST: MOV YSR(R5),R4 ;GET Y STATUS BIC #176000,R4 ;MASK OFF Y POSITION SUB $YT,R4 ;YNEW-YOLD ASR R4 ;DIV. BY 2 ASR R4 ;DIV. BY 2 ADD R4,$YT ;Y=OLD+(NEW-OLD)/4 MOV $YT,@$YSTOR ;PASS TO USER MOV (PC)+,R5 ;COMPLETION ROUTINE SET UP? $TRAKC::.WORD 0 ;ADDR. OF USERS TRACK COMPL ROUT. BEQ 1$ ;NO, JUST EXIT JSR PC,@R5 ;YES, CALL IT AS A SUBR. BR 1$ ;GO EXIT .ENDC .DSABL LSB .ENDC .IF NDF NOTRAK $XSTOR::.WORD 0 ;ADDR. OF USER X TRACK COORDINATE $YSTOR::.WORD 0 ;ADDR. OF USER Y TRACK COORDINATE .ENDC .IF DF NOLPEN $LPINT::JSR PC,$VSTIN RTI .ENDC .IF EQ NO$X .SBTTL DATA TRANSFER SUBROUTINE ($XSTAT) ; SUBROUTINE TO TRANSFER STATUS DATA TO A USER BUFFER AREA ; WHOSE ADDRESS WAS PREVIOUSLY SET UP BY A CALL TO A STATUS ; MACRO. ADDR. OF BUFFER IS EXPECTED IN R5 AND A SUBPICTURE ; TAG,IF ANY, IN R4. R4 AND R5 ARE ALTERED. $XSTAT::TST (R5) ;USER FLAG CLEAR? BNE XEXIT ;NO, JUST EXIT INC (R5)+ ;YES, SET THE FLAG MOV $NR,(R5)+ ;XFR NAME REG. TAG MOV R4,(R5)+ ;XFR SUBPICTURE TAG MOV $DPC,R4 ;PUT DPC ADDR IN R4 MOV (R4)+,(R5)+ ;XFR DPC MOV (R4)+,(R5)+ ;XFR DSR MOV (R4)+,(R5)+ ;XFR XSR MOV (R4),(R5) ;XFR YSR XEXIT: RTS PC .ENDC .IF NDF NONAME .SBTTL NAME STACK TRANSFER SUBROUTINE ; THIS SUBROUTINE TRANSFERS THE NAME REGISTER STACK DEPTH ; AND CONTENTS TO A BUFFER SUPPLIED BY THE USER AND ; SPECIFIED WITH THE .NAME CALL. THE FIRST BYTE OF THE BUFFER ; WILL CONTAIN THE DEPTH, THE SECOND BYTE WILL BE SET NEGATIVE ; TO FLAG THE TRANSFER. THE BUFFER SIZE SHOULD BE STACK SIZE ; PLUS ONE. ONLY THE NUMBER OF WORDS INDICATED BY THE STACK DEPTH ; ARE ACTUALLLY TRANSFERRED, I.E. THE REST OF THE BUFFER IS ; NOT CLEARED. TO INDICATE THE BUFFER IS READY FOR ANOTHER ; TRANSFER, THE FIRST WORD SHOULD BE CLEARED. THE USER CAN THEN LOOP ; ON A TST OF THE FIRST WORD. $NRXFR::TST @R5 ;USER FLAG CLEARED? BNE 2$ ;NO, JUST EXIT MOV R3,-(SP) MOV #$TAKNE,R4 ;R4=TOP OF STACK MOV R4,R3 SUB $TACKN,R3 ;R3=STACK DEPTH ASR R3 ;CONVERT TO WORDS MOVB R3,(R5)+ ;STORE IN BUFFER COMB (R5)+ ;SET HI BYTE NEGATIVE 1$: MOV -(R4),(R5)+ ;TRANSFER NAME STACK DEC R3 ;TO USER BUFFER BNE 1$ ;DONE? MOV (SP)+,R3 2$: RTS PC .ENDC .SBTTL SHIFT OUT/TIME OUT INTERRUPT HANDLER ; SHIFT OUT/TIME OUT INTERRUPT ROUTINE. HANDLES THESE INTERRUPTS ; IN THE ABSENCE OF A HANDLER IN THE SCROLLER LOGIC. SIMPLY RESTARTS ; THE DISPLAY. ; THIS HANDLER IS NEEDED IF NO LINK IS MADE TO THE SCROLLER. ; IT IS NECESSARY FOR SYSTEMS NOT USING THE SCROLL ; SUPPORT OR FOR SYSTEMS OTHER THAN RT11. $SOINT::JSR PC,$VSTIN ;INIT STACK AND START DPU RTI .SBTTL STACK INITIALIZATION SUBROUTINE ; CLEARS STACK AND STARTS DPU AT TOP. $VSTIN::MOV #$TACKE,$TACKP ;RESET STACK POINTER .IF NDF NONAME MOV #$TAKNE,$TACKN ;ALSO N STACK .ENDC MOV #$DFILE,@$DPC ;START THE DISPLAY RTS PC ; $VSTP -- UTILITY SUBROUTINE TO STOP THE DISPLAY PROCESSOR. ; IT IS ONLY USED INTERNALLY TO STOP THE DPU WHEN CRITICAL ; CHANGES ARE BEING MADE IN THE DISPLAY FILE. THE DPU ; IS ACTUALLY STOPPED FOR A USER .STOP REQUEST ONLY WHEN ; NOLINK HAS BEEN DEFINED AND THERE IS NO POSSIBILITY OF ; A LINK EXISTING WITH A MONITOR. $VSTP:: MOV R2,-(SP) MOV $DPC,R2 ;POINT TO DISPLAY PC TST (R2)+ ;WAS DPU EVER STARTED? BEQ 2$ ;NO, JUST EXIT TST (R2) ;IF SO, IS IT STOPPED? BMI 2$ ;YES, SO EXIT INC $STOPF ;NO, REQUEST A STOP 1$: TST $STOPF ;WAIT TIL DONE BNE 1$ 2$: MOV (SP)+,R2 RTS PC .IF NDF NORT11 .SBTTL SPECIAL DEVICE TABLE ; THIS TABLE IS USED BY THE RT11 FOREGROUND/BACKGROUND ; MONITOR TO ZAP THE DISPLAY WHEN THE USER PROGRAM EXITS. ; THIS IS NECESSARY BECAUSE F/B DOES NOT USE HARD RESETS. ; THE SPECIAL EXIT PERFORMS THE FUNCTION OF THE CTRL/C IN ; THE S/U MONITOR TO ENSURE THE VT11 IS ZAPPED ONLY WHEN THE ; CTRL/C IS TYPED TO THE JOB USING THE DISPLAY. OTHERWISE WE ; MIGHT HAVE AN IRATE FOREGROUND USER! $PDV1:: .WORD $FVEC,$PEXIT,0 ; THIS SPECIAL EXIT ROUTINE GOES TO SYSTEM STATE, THEN DETERMINES ; IF THERE IS A SCROLLER IN CORE. IF NOT, A SIMPLE EXIT WITH THE ; VT11 DEAD IS SUFFICIENT, ELSE WE HAVE TO CALL THE CTRL/C CODE ; IN THE SCROLLER LOGIC TO DE-LINK, ETC. $PEXIT::MOV @#54,-(SP) ;GO TO SYSTEM STATE JSR R5,@(SP)+ .WORD 140 ;AT LEVEL 4 MOV @#54,R4 ;POINT TO RMON MOV 302(R4),R5 ;F/B, SEE IF SCROLLER IN CORE BEQ 1$ ;NO, SUFFICIENT TO EXIT JMP @SCTC(R5) ;GO TO CTRL/C ROUTINE IN SCROLLER 1$: RTS PC .ENDC .END