.TITLE ABSPLT .ENABL LC ; ; CALL ABSPLT(IX,IY,IPEN) -- This subroutine will move ; the pen to the absolute scrreen coordinate (IX,IY). If ; IPEN = 2, the pen is lowered before the move; if IPEN = 3 ; the pen is raised first. Negative IPEN resets the ; relocatable origin to that location. The screen coordinates ; are bounded by 0 and IXMax or IYMax. ; ; NOTE: A Tektronix 4025 is always left in alpha mode. ; .PSECT ABSPLT ; ; ABSPLT::MOV #100,R0 ;SET OUTPUT CONTROL FOR LOX MOV @2(R5),R1 ;GET IX BGE 1$ ;BRANCH IF NOT TOO SMALL CLR R1 ;SET IX TO LOWER BOUND BR 2$ ;BRANCH OVER UPPER BOUND CHECK 1$: CMP R1,IXMax ;TOO LARGE? BLE 2$ ;BRANCH IF NOT MOV IXMax,R1 ;SET IX TO UPPER BOUND 2$: MOV @6(R5),IPEN ;GET IPEN BGT 3$ ;BRANCH IF NO CHANGE IN ORIGIN MOV R1,IX0 ;SET NEW X ORIGIN 3$: CMP IDev,#2 ;IS PLOTTER A TEKTRONIX 4014? BEQ 4$ ;BRANCH IF TRUE CMP IDev,#3 ;IS PLOTTER A TEKTRONIX 4662? BEQ 4$ ;BRANCH IF TRUE ASL R1 ;SHIFT LEFT TWICE ASL R1 ;TO MULTIPLY BY FOUR 4$: MOV R1,R2 ;MAKE COPY ASL R1 ;SHIFT TO ALIGN FIVE MSB'S SWAB R1 ;MOVE HIGH BYTE DOWN BIC #177740,R1 ;MASK OFF HIGH BITS BIS #40,R1 ;SET TAG BIT CMPB R1,HIX ;CHANGED? BEQ 5$ ;BRANCH IF NOT MOVB R1,HIX ;SAVE BIS #60,R0 ;SET O/C FOR LOY,HIX ; 5$: MOV R2,R1 ;GET COPY ASR R1 ;SHIFT ONE ASR R1 ;SHIFT TWO BIC #177740,R1 ;MASK OFF INT. BITS BIS #100,R1 ;SET TAG BIT MOVB R1,LOX ;SAVE BIC #177774,R2 ;MASK OFF LOW BITS ; MOV @4(R5),R1 ;GET IY BGE 6$ ;BRANCH IF NOT TOO SMALL CLR R1 ;SET IY TO LOWER BOUND BR 7$ ;BRANCH OVER UPPER BOUND CHECK 6$: CMP R1,IYMax ;TOO LARGE? BLE 7$ ;BRANCH IF NOT MOV IYMax,R1 ;SET IY TO UPPER BOUND 7$: TST IPEN ;NEW ORIGIN? BGT 10$ ;BRANCH IF NOT MOV R1,IY0 ;SET NEW Y ORIGIN NEG IPEN ;SET IPEN POSITIVE 10$: CMP IDev,#2 ;IS PLOTTER A TEKTRONIX 4014? BEQ 11$ ;BRANCH IF TRUE CMP IDev,#3 ;IS PLOTTER A TEKTRONIX 4662? BEQ 11$ ;BRANCH IF TRUE ASL R1 ;SHIFT LEFT TWICE ASL R1 ;TO MULTIPLY BY FOUR 11$: MOV R1,R3 ;MAKE COPY ASL R1 ;SHIFT TO ALIGN FIVE MSB'S SWAB R1 ;MOVE HIGH BYTE DOWN BIC #177740,R1 ;MASK OFF HIGH BITS BIS #40,R1 ;SET TAG BIT CMPB R1,HIY ;CHANGED? BEQ 12$ ;BRANCH IF NOT MOVB R1,HIY ;SAVE BIS #4,R0 ;SET O/C FOR HIY ; 12$: MOV R3,R1 ;GET COPY ASR R1 ;SHIFT ONE ASR R1 ;SHIFT TWO BIC #177740,R1 ;MASK OFF INT. BITS BIS #140,R1 ;SET TAG BITS CMPB R1,LOY ;CHANGED? BEQ 13$ ;BRANCH IF NOT MOVB R1,LOY ;SAVE BIS #20,R0 ;SET O/C FOR LOY ; 13$: BIC #177774,R3 ;MASK OFF LOW BITS ASL R3 ;SHIFT ONE ASL R3 ;SHIFT TWO BIS R3,R2 ;MAKE XLOY BIS #140,R2 ;SET TAG BITS CMPB R2,XLOY ;CHANGED? BEQ 14$ ;BRANCH IF NOT MOVB R2,XLOY ;SAVE BIS #30,R0 ;SET O/C FOR XLOY,LOY ; 14$: TST IMode ;PLOT MODE? BNE 15$ ;BRANCH IF TRUE MOV #-1,IMode ;SET PLOT MODE FLAG BIS #3,R0 ;SET O/C FOR ESC,GS,BELL 15$: CMP #2,@6(R5) ;PEN DOWN? BEQ 16$ ;BRANCH IF TRUE BIS #1,R0 ;SET O/C FOR GS BIC #2,R0 ;CLEAR O/C OF BELL ; 16$: MOV #GS,R1 ;GET ADDRESS OF OUTPUT BYTES MOV #1,R2 ;SET OUTPUT TEST POINTER MOV #7,R3 ;SET NINE BYTES CLR NBUFF ;ZERO COUNTER MOV #BUFFER,R4 ;GET ADDRESS OF OUTPUT BUFFER ; 17$: BIT R2,R0 ;OUTPUT THIS BYTE? BEQ 20$ ;BRANCH IF NO MOVB (R1),(R4)+ ;MOVE INTO OUTPUT BUFFER INC NBUFF ;INCREMENT COUNTER 20$: INC R1 ;NEXT BYTE ASL R2 ;MOVE POINTER DEC R3 ;DECREMENT COUNT BGE 17$ ;BRANCH IF NOT DONE ; CMP IDev,#4 ;IS PLOTTER A TEKTRONIX 4025? BNE 21$ ;BRANCH IF NOT MOVB US,(R4) ;SET TO OUTPUT INC NBUFF ;SET ANOTHER CHARACTER CLR IMODE ;SET ALPHA MODE ; 21$: MOV R5,-(SP) ;SAVE R5 MOV #LIST,R5 ;SET ARGUMENT LIST FOR OUTPUT JSR PC,TOUTPT ;OUTPUT BYTES MOV (SP)+,R5 ;RESTORE R5 RTS PC ;RETURN TO CALLING PROGRAM ; ; ; CALL CLRALL -- This subroutine zeros the saved pen coordinates ; and the number of input bytes available for the Tektronix 4662 ; type plotters. ; CLRALL::CLR HIY ;ZERO HIY AND XLOY CLR LOY ;ZERO LOY AND HIX CLRB LOX ;ZERO LOX CLR IBfDv3 ;ZERO BUFFER COUNT RTS PC ;RETURN TO CALLING PROGRAM ; .PSECT IPENQ RW,D,GBL,REL,OVR IPEN: .WORD LIST: .WORD 2,BUFFER,NBUFF NBUFF: .WORD BUFFER: .BLKB 8. GS: .BYTE 35 BELL: .BYTE 7 HIY: .BYTE 0 XLOY: .BYTE 0 LOY: .BYTE 0 HIX: .BYTE 0 LOX: .BYTE 0 US: .BYTE 37