1 * (PL$MV) REV 1.0 INCREMENTAL PLOTTER ROUTINES
5 * PL$MV (PL$MV,PL$RST,PL$LN,PL$X,PL$Y,PL$RMR)
7 * PLOTTER MOVEMENT ROUTINES
11 * 1.0 (2007-05-28) - INITIAL REVISION
13 * 1.1 (2007-11-08) - ADDED INTELLIGENT LINE DRAWING ROUTINE
15 * 1.2 (2007-12-15) - ADDED PL$X and PL$Y POSITION EXPORTS
16 * ADDED PL$RMR TRANSLATIION ROUTINE
18 * 1.3 (2007-12-19) - ADDED TRANSFORMATION MATRIX SUPPORT TO PL$MV.
19 * MATRIX PL$MAT IS NOW APPLIED BEFORE
20 * ANY MOVE INSTRUCTION.
30 * PROVIDE DRAWING AND COORDINATE TRANSFORMATION
31 * ROUTINES FOR INCREMENTAL PLOTTERS
42 * CALL PL$RST - SET VIRTUAL PLOT POSITION TO ZERO
44 * CALL PL$MV - MOVE TO POINT SPECIFIED
49 * CALL PL$LN - DRAW LINE AND LEAVE PEN DOWN
56 * CALL PL$RMR - MOVE ORIGIN RELATIVELY
61 * CALL PL$SCL - SCALE TRANSFORMATION
62 * DAC SCALE SCALE FACTOR, FLOAT
65 * CALL PL$IDN - RESET TRANSFORMATION MATRIX
67 ********************************************************************************
88 REL THIS IS A RELOCATABLE OBJECT
92 ********************************************************************************
94 **** PL$MVR - MOVE PEN RELATIVELY
122 **** PL$INI - GRAPHICS INITIALISATION
124 * THIS ROUTINE SETS THE HARDWARE ORIGIN TO THE CURRENT PlOTTER POSITION.
125 * IT ALSO INITIALISES THE TRANSFORMATION.
127 ****************************************
141 **** PL$PUS - PUSH GRAPHIC CONTEXT ONTO THE STACK
147 CALL S$PUSM PUSH MEMORY ROUTINE
150 DEC 12 12 WORDS OF DATA.
154 ********************************************************************************
157 **** PL$POP - POP GRAPHIC CONTEXT FROM THE STACK
163 CALL S$POPM POP MEMORY ROUTINE
166 DEC 12 12 WORDS OF DATA.
170 * *******************************************************************************
173 **** PL$LN - DRAW A LINE
175 LINE DAC 0 DRAW A LINE FROM NEAREST STARTING POINT
187 IRS LINE TALLY RETURN ADDRESS
188 IRS LINE AGAIN FOR FORTRAN IV COMPATIBILITY
190 CALL T$APII APPLY MATRIX
198 CALL T$APII APPLY MATRIX
209 SPL SKIP IF SIGN PLUS
210 TCA TWO'S COMPLEMENT IF NEEDED
221 SPL SKIP IF SIGN PLUS
222 TCA TWO'S COMPLEMENT IF NEEDED
230 JMP D2BG D2 IS BIGGER!
233 D1BG LDA X2 DIFFERENCE 1 IS BIGGER, SO START AT POINT X2,Y2
243 D2BG LDA X1 DIFFERENCE 2 IS BIGGER, SO START AT POINT X1,Y1
252 WOKI LDA X TEST IF STARTING POINT IST CURRENT POSITION
264 MV1 CALL PL$PU MOVE TO THE STARTING POSITION
271 NM1 CALL PL$PD WE ARE AT BEGINNING OF LINE
277 JMP* LINE END OF THE LINE :-)
280 ********************************************************************************
282 **** MAKE CURRENT X AND Y THE ORIGIN
286 **** FIRST TRANSLATE THE CURRENT USER POSITION:
299 ********************************************************************************
302 **** PL$MV - BASIC MOVE ROUTINE
306 LDX MOVE GET PARAMETERS
315 STA MOVE CORRECT RETURN ADDRESS
317 CALL T$APII APPLY TRANSFORMATION MATRIX TO POSITION
325 JST RMOV CALL INTO REAL MOVE SUBROUTINE
328 ****************************************
330 RMOV DAC ** REAL MOVE SUBROUTINE
343 STA DX NOW, DX IS POSITIVE!
364 STA DY NOW, DY IS POSITIVE!
377 JMP XGTY DX GREATER DY
378 YGTX NOP DY GREATER OR EQUAL DX
402 ****************************************
404 * NOW ALL STEP ROUTINES, DL0, DS0, DL0, DS0 ETC.
407 GTE LDA DL0 LONG DISTANCE
409 STA ERR INITIALIZE ERROR COUNTER
414 LOOP LDA DL LONG DISTANCE
416 JMP FNSH END OF WORK - HOPE SO....
418 SUB =1 DECREMENT LONG DISTANCE
421 LDA ERR ERROR COUNTER
424 SMI SKIP IF NOT OVERFLOWN (MINUS)
425 JMP NDIA NO DIAG STEP
434 JST* STPD DO DIAGONAL STEP
437 *** NO DIAGONAL STEP TO DO
439 NDIA JST* STPL DO LONG DIRECTION STEP
448 JMP* RMOV END OF THE ROUTINE
451 ********************************************************************************
467 ********************************************************************************
470 **** ROTATE - RADIANT
483 ********************************************************************************
486 **** RLUP - UPDATE LATENT POSITION TO REAL POSITION
491 JMP* RLUP NOTHING TO DO
501 ********************************************************************************
504 **** ROTATE - INTEGER DEGREES
517 ********************************************************************************
520 **** SCALE - INTEGER PERCENTS
533 ********************************************************************************
535 *** MOVE COORDINATE SYSTEM RELATIVELY
555 **********************
559 X DEC 0 HARDWARE VIEW PEN POSITION, X VALUE
560 Y DEC 0 HARDWARE VIEW PEN POSITION, Y VALUE
561 XN DEC 0 NEW PEN POSITION, X VALUE
562 YN DEC 0 NEW PEN POSITION, Y VALUE
563 DX DEC 0 X DIFFERENCE TO GO
564 DY DEC 0 Y DIFFERENCE TO GO
565 TMPX DEC 0 TEMPORARY X VALUE
566 TMPY DEC 0 TEMPORARY Y VALUE
568 DL0 DEC 0 INITIAL LONG DISTANCE
569 DS0 DEC 0 INITIAL SHORT DISTANCE
570 DL DEC 0 LONG DISTANCE
571 DS DEC 0 SHORT DISTANCE
572 STPL DAC ** ROUTINE TO LONG DISTANCE STEP
573 STPS DAC ** ROUTINE TO SHORT DISTANCE STEP
574 STPD DAC ** ROUTINE TO DIAGONAL STEP
575 ERR DEC 0 ERROR COUNTER
577 STPX DAC ** X STEP ROUTINE
578 STPY DAC ** Y STEP ROUTINE
579 DIYP DAC ** DIAGONAL X-DIR+UP STEP ROUTINE
580 DIYN DAC ** DIAGONAL X-DIR+DOWN STEP ROUTINE
582 X1 DEC 0 LINE START POINT, X
583 Y1 DEC 0 LINE START POINT, Y
584 X2 DEC 0 LINE END POINT, X
585 Y2 DEC 0 LINE END POINT, Y
587 XA DEC 0 REAL FIRST POINT X COORDINATE
588 YA DEC 0 REAL FIRST POINT Y COORDINATE
589 XB DEC 0 REAL SECOND POINT X COORDINATE
590 YB DEC 0 REAL SECOND POINT Y COORDINATE
591 D1 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P1
592 D2 DEC 0 ORTHOGONAL WAY LENGTH FROM CURRENT POS TO P2
593 RELA DEC 0 FLAG INDICATING THAT RELATIVE POSITIONING HAS OCCURED
595 **** GLUE IN THE MOVEMENT ROUTINES
606 ********************************************************************************
609 **** AFFINE TRASFORMATION DATA AND REST OF GRAPHIC CONTEXT
611 * OLD PROGRAMS DON'T HAVE TO WORRY ABOUT THAT. NEWER PROGRAMS SHOULD.
613 *** HERE THE TRANSFORMATION MATRIX, INITIALLY NO TRANSFORMATION, OLD PROGRAMS
614 *** DON'T HAVE TO CARE ABOUT THAT (HOPE SO)
615 ATRA OCT '040300 A11 (CONSTANT 1.0)
621 OCT '040300 A22 (CONSTANT 1.0)
624 VECT DEC 0 X TRANSLATION
626 XU DEC 0 USER VIEW PEN POSITION, X VALUE
627 YU DEC 0 USER VIEW PEN POSITION, Y VALUE
632 ********************************************************************************