.MCALL .MODULE .MODULE VTCAL4,VERSION=03,COMMENT=,GLOBAL=.VTCL4 ; 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. ; ; Edit History: ; ; 003 14-Jun-1991 WFG ; ACTION #7479, Add GLOBAL=.VTCL4 to fix RESORC display ; .SBTTL SCROLLER LINK UP ROUTINE .ENABL GBL .IF DF NORT11 NOLINK=1 .ENDC .PSECT $GT4 ; $VRTLK -- SERVICES THE .LNKRT USER REQUEST. ; THIS ROUTINE LINKS THE HANDLER'S INTERNAL DISPLAY FILE ; INTO THE SCROLLER DPU LOOP, FORMING A SINGLE LOOP. IT ; CHECKS TO SEE IF THE SCROLLER EXISTS, AND JUST EXITS WITH ; THE DISPLAY RUNNING AND C SET IF IT DOESN'T. DJMP=160000 ; THE FOLLOWING CONDITIONALS ARE DISPLACEMENTS FROM THE ; BEGINNING OF THE SCROLLER CODE FOR IMPORTANT ; LOCATIONS WITHIN THE SCROLLER. IF THEIR LOCATIONS ; WITHIN THE SCROLLER CHANGE, THESE CONDITIONAL ASSIGNMENTS MUST BE CHANGED. .IIF NDF SCLINK,SCLINK=6 ;SCROLL LINK SEGMENT .IIF NDF SCMAX,SCMAX=4 ;MAX. LINE COUNT .IF NDF NORT11 .MCALL ..V2..,.DEVICE,.PROTECT ..V2.. PRI=340 ;INTERRUPT PRIORITY 7 .IFF PRI=200 ;INTERRUPT PRIORITY 7 .ENDC $VRTLK:: .IF NDF NOLINK MOV #-3,R0 ;PRESET ERROR CODE TST $LINKF ;LINK ALREADY MADE? BNE 5$ ;YES, EXIT .IFTF MOV R1,-(SP) .IFT JSR PC,$VLSET ;GET SCROLLER POSITION BCS 4$ ;BAD ERROR MOV R1,-(SP) ;SAVE POINTER TO SCROLLER .ENDC MOV $DSVEC,R1 ;POINT TO STOP VECTOR .IF NDF NORT11 MOV R1,$PDV1 ;SET UP SPECIAL DEVICE TABLE MOV #$PEXIT,$PDV1+2 ;INSERT SPECIAL EXIT ADDR .DEVICE #EMTS,#$PDV1 ;THEN PASS TO MONITOR .PROTECT #EMTS,R1 ;PROTECT FIRST VECTOR PAIR .ENDC MOV #$DSINT,(R1)+ ;SETUP STOP INTER. MOV #PRI,(R1)+ ;AND PRIORITY .IF NDF NORT11 .PROTECT #EMTS,R1 ;PROTECT NEXT PAIR .IFTF MOV #$LPINT,(R1)+ ;SETUP LPEN INT. MOV #PRI,(R1)+ .IF NDF NOLINK TST (SP) ;SCROLLER IN CORE? BNE 2$ .ENDC .IFT .PROTECT #EMTS,R1 ;PROTECT LAST PAIR .IFTF MOV #$SOINT,(R1)+ ;NO, SET UP S.O. INT MOV #PRI,(R1) .ENDC 1$: .IF NDF NOLINK TST (SP)+ ;POP SCROLLER ADDR OFF STACK .IFTF MOV #$DFILE,@$DPC ;START DISPLAY .IFT SEC ;FLAG NO SCROLLER BR 3$ ;THEN SKIP THE LINK UP 2$: MOV (SP)+,R1 ;RESTORE SCROLLER ADR TO R1 INC $LINKF ;SET THE LINK UP FLAG MOV SCLINK+2(R1),$LINK ;SAVE SCROLL LINK ADDR. MOV #$LINK+2,SCLINK+2(R1) ;THEN LINK TO HANDLER ADD #SCMAX,R1 ;COMPUTE LINE COUNT ADDR. MOV R1,$LCDIS ;AND SAVE IT. MOV (R1),$LCNT ;ALSO SAVE THE COUNT .ENDC CLC 3$: MOV #STKSIZ,R0 ;RETURN STACK SIZE IN R0 4$: MOV (SP)+,R1 ;WAS SAVED BY $VLSET 5$: MOV R0,R0 ;SET CONDITION BITS; C THE SAME RTS PC .IF NDF NORT11 EMTS: .BLKW 2 .ENDC .SBTTL SCROLLER DE-LINK ROUTINE ; $VUNLK -- SERVICES THE .UNLNK USER REQUEST. ; THIS ROUTINE DELINKS THE HANDLER'S INTERNAL DISPLAY ; FILE FROM THE SCROLLER SITUATED ABOVE THE RT11 RMON. ; IF NO LINK EXISTS IT SIMPLY EXITS WITH THE DISPLAY PROCESSOR STOPPED. ; THE FOLLOWING CONDITIONALS ARE DISPLACEMENTS FROM THE ; BEGINNING OF THE SCROLLER CODE. IF THEIR LOCATION WITHIN THE ; THE SCROLLER CHANGES, THESE ASSIGNMENTS MUST BE CHANGED. $VUNLK::MOV R1,-(SP) MOV @#54,R1 ;R1 -> RMON BIT #HWDSP$,DISP(R1) ;IS A VT11 PRESENT? BEQ XIT1 ;NO, THIS IS A NOP TST @$DSVEC ;IS THIS A START OR RESTART? BEQ 1$ ;YES,DON'T TRY TO STOP JSR PC,$VSTP ;YES, STOP THE DISPLAY .IF NDF NOLINK TST $LINKF ;LINK EXISTS? BNE 2$ .IFTF 1$: .IFT INC $LINKF ;NO=>NO SCROLLER JSR PC,$VLSET ;BUT FAKE IT ANYWAY BR 3$ ;THEN JUST EXIT 2$: JSR PC,$VLSET ;GET SCROLL ADDR IF ANY BCS XIT1 ;ERROR CODE IN R0 BEQ 3$ ;NO SCROLLER, NO LINK MOV $LINK,-(SP) ;GET LINK TO SCROLL MOV (SP),SCLINK+2(R1) ;REMOVE LINK TO US MOV $LCNT,@$LCDIS ;RESTORE RMON'S LINE CNT CLR $PDV1+2 ;AND SPECIAL EXIT ADDR MOV (SP)+,@$DPC ;THEN START DPU THERE 3$: CLR $LINKF ;CLEAR THE LINK UP FLAG .ENDC 4$: CLR @$DSVEC ;CLEAR THE VECTOR BR XIT1 .IF NDF NOLINK .SBTTL LINK SET UP SUBROUTINE ; THIS SUBROUTINE SETS UP R1 TO POINT TO THE BOTTOM OF THE ; SCROLLER CODE LOCATED ABOVE RMON. R1 IS ASSUMED TO ; BE STACKED AND IS SET TO POINT TO BOTTOM OF SCROLLER. HWDSP$=4 ;VT11 HARDWARE PRESENT GTLNK$=400 ;VT11 IN USE .IIF NDF DISP,DISP=300 ;DISP TO CONFIG WORD IN RMON .IIF NDF GTVECT,GTVECT=354 ;DISP TO VT11 VECTOR IN RMON $VLSET::CLR R0 MOV @#54,R1 ;GET BOTTOM OF RMON MOV GTVECT(R1),$DSVEC ;FETCH DISPLAY VECTOR FROM RMON ADD #DISP,R1 ;ADD DISP TO CONFIG WD. BIT #HWDSP$,@R1 ;VT11 HARDWARE PRESENT? BEQ 4$ ;NO, FATAL ERROR TST $LINKF ;IS THIS AN UNLINK? BNE 1$ ;YES,SKIP THIS BIT #1,@R1 ;S/U MONITOR? BEQ 2$ ;YES, CAN'T BE TWO USERS TST 2(R1) ;SCROLLER IN CORE? BEQ 2$ ;NO, SKIP IT, WON'T MATTER BIT #GTLNK$,@R1 ;VT11 ALREADY IN USE? BNE 3$ ;YES, GIVE AN ERROR BIS #GTLNK$,@R1 ;NO, GRAB IT FOR US BR 2$ 1$: BIC #GTLNK$,@R1 ;CLEAR LINK UP FLAG 2$: CLC MOV 2(R1),R1 ;GET SCROLLER ADDR. RTS PC 3$: DEC R0 ;-2 ERROR RETURN 4$: DEC R0 ;-1 ERROR RETURN SEC ;FLAG ERROR RTS PC .ENDC .IF NDF NOLINK .SBTTL SCROLLER PARAMETERS ROUTINE ; THIS ROUTINE ADJUSTS THE LINE COUNT AND STARTING POSITION ; PARAMETERS OF THE SCROLLER. IT EXPECTS THE ADDRESS OF A TABLE ; IN R0 CONTAINING THE DESIRED LINE COUNT AND POSITION. ; A ZERO VALUE IS TAKEN TO MEAN NO CHANGE FOR THAT PARAMETER. CHAR=100000 ;CHARACTER MODE INT0=2000 ;INTENSITY 0 INT4=3000 ;INTENSITY 4 .ENABL LSB $VSCRL::TST $LINKF ;DOES LINK EXIST? SEC BEQ 10$ ;NO, JUST EXIT MOV R1,-(SP) MOVB (R0)+,R1 ;GET LINE COUNT BEQ 3$ ;ZERO, SKIP IT BPL 2$ ;MINUS => RESTORE DEFAULT 1$: MOV $LCNT,R1 ;RESTORE DEFAULT COUNT 2$: MOV R1,@$LCDIS ;TRANSFER LINE CT. TO SCROLL 3$: MOVB (R0)+,R1 ;GET SCROLL INTENSITY BEQ 6$ ;YES, NO ACTION BMI 4$ ;MINUS => RESTORE DEFAULT DEC R1 ;SUB 1 TO GET 0-7 SWAB R1 ;POSITION INTENSITY BITS ROR R1 ADD #CHAR!INT0,R1 ;CREATE AN INSTRUCTION BR 5$ 4$: MOV #CHAR!INT4,R1 ;TURN IT OFF 5$: MOV R1,$BLANK ;UNBLANK SCROLLER 6$: MOV (R0),R1 ;GET SCROLL POSITION BEQ 9$ ;ZERO, SKIP IT BPL 8$ ;MINUS => DEFAULT RESTORE MOV #SCRPOS,R1 ;RESTORE MON DEFAULT 8$: MOV R1,$YS ;INSERT IN HANDLER 9$: CLC .ENDC XIT1: MOV (SP)+,R1 10$: RTS PC .DSABL LSB .END